gpt4 book ai didi

php - Symfony3 链接更改语言环境

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:01 25 4
gpt4 key购买 nike

我想创建一个链接来更改下面代码中的 locale

/**
*
* @Route("/changelanguage", defaults={"_locale" = "eu"}, name="changelanguage")
* @Method("GET")
*/
public function changelanguageAction(Request $request) {


$locale = $request->getLocale();
if ($locale == "eu") {
$request->setLocale('es');
$request->getSession()->set('_locale', 'es');
} else {
$request->setLocale('eu');
$request->getSession()->set('_locale', 'eu');
}

return $this->redirect($request->headers->get('referer'));

}

然后,在我的 Twig 基础 View 中,我正在使用这个:

<ul class="nav navbar-nav navbar-right">        
<li><a href="#">{{ app.request.locale }}</a></li>
{% if app.request.locale == "eu"%}
<li><a href="{{ path('changelanguage', {'_locale':'es'}) }}"><img src="{{ asset('bundles/app/img/espanol.png') }}" alt="Castellano"> Castellano</a></li>
{% else %}
<li><a href="{{ path('changelanguage', {'_locale':'eu'}) }}"><img src="{{ asset('bundles/app/img/euskara.png') }}" alt="Euskaraz"> Euskara</a></li>
{% endif %}
<li>&nbspp;</li>
</ul>

问题是它一直告诉我 app.request.locale 总是 'eu'。我错过了什么吗?

最佳答案

将默认语言添加到用户实体,然后创建请求监听器来检查用户的默认语言并更改它...

这对我有用

创建监听器

<?php

namespace UserBundle\EventListener;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class LanguageListener
{
private $token_storage;

private $securityContext;

private $container;

public function __construct(ContainerInterface $containerInterface)
{
$this->container = $containerInterface;
$this->securityContext = $this->container->get('security.authorization_checker');
$this->token_storage = $this->container->get('security.token_storage');;

}

public function setLocale(GetResponseEvent $event)
{

if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}


if ($this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userLocale = $this->token_storage->getToken()->getUser()
->getCustomer()->getDefaultCodeLanguage();

if ($userLocale) {
$request = $event->getRequest();
$request->setLocale($userLocale);
$translator = $this->container->get('translator');
$translator->setLocale($userLocale);
}
}


}
}

services.yml

services:
language.kernel_request_listener:
class: UserBundle\EventListener\LanguageListener
arguments:
- "@service_container"
tags:
- { name: kernel.event_listener, event: kernel.request, method: setLocale }

关于php - Symfony3 链接更改语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com