gpt4 book ai didi

php - 如何在 session 期间配置 Symfony2 粘性语言环境

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

感谢右上角的链接,我想翻译我的网站。

我发现,从 Symfony 2.1 开始,语言环境不再存储在 session 中。

所以,我遵循了这个 Symfony 文档:Making the Locale "Sticky" during a User's Session

...Bundle/Service/LocaleListener.php

class LocaleListener implements EventSubscriberInterface
{
private $defaultLocale;

public function __construct($defaultLocale)
{
$this->defaultLocale = $defaultLocale;
}

public function onKernelRequest(GetResponseEvent $event)
{

$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}

$locale = $request->attributes->get('_locale');
var_dump($locale);

if ($locale) {
$request->getSession()->set('_locale', $locale);
} else {
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
}

static public function getSubscribedEvents()
{
return array(
// must be registered before the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}

...Bundle/Resources/config/services.yml

locale_listener:
class: ..Bundle\Service\LocaleListener
arguments: ["%kernel.default_locale%"]
tags:
- { name: kernel.event_subscriber }

./app/config/config.yml

framework:
translator: { fallback: en }

并且,我在父 Twig 模板上添加了两个链接来翻译我的网站,如下所示 ( Symfony2 locale languages whole page event listener )。

base.html.twig

<li><a href="{{-
path(app.request.get('_route'),
app.request.get('_route_params')|merge({'_locale' : 'fr'}))
-}}">FR</a></li>
<li><a href="{{-
path(app.request.get('_route'),
app.request.get('_route_params')|merge({'_locale' : 'en'}))
-}}">EN</a></li>

问题与问题

当我单击其中一个链接时,将添加参数 _locale

例如:

satisfaction?_locale=fr

因此,_locale 参数的值为fr。因此,我的网站应该翻译成法语。

尽管如此

var_dump($locale)

在监听器中显示三次:

  1. null

  2. en

  3. null I don't understand why the _locale parameter is not found when it display null and why the en?

最佳答案

通过您的监听器,您将捕获所有不需要的请求和子请求。这就解释了三次显灵。

尝试将以下代码添加到您的 onKernelRequest 方法中:

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

这将避免子请求并可能解决您的问题。

关于php - 如何在 session 期间配置 Symfony2 粘性语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400857/

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