gpt4 book ai didi

Symfony2 语言环境整页事件监听器

转载 作者:行者123 更新时间:2023-12-02 17:01:06 24 4
gpt4 key购买 nike

我需要创建一个像 facebook lang 系统这样的系统,当用户单击语言例如 france('fr') 时,页面将重新加载,并且 messages.fr.yml 中的所有内容将显示...

我尝试制作像 /language/{localExtension} 这样的路线,但是当我在那里设置语言然后重定向它时它不起作用......我不知道我假设它只是针对特定页面不是全局性的?因为当我在 Controller 顶部设置 setLocale('fr') 时它就起作用了......

我在使用www.example.com/contact/en/contact/fr等时发现了一些文章

但我想要 /contact 和以前选择的语言显示的内容。或者像现在一样默认“en”,当用户没有更改它时...

我整天都在谷歌上搜索,我认为应该通过... service => Listener 和... on kernel.request 来完成?或类似的东西。

这是有趣的链接 Symfony2 wrong locale detection?我想这就是我需要的?或者?我尝试设置服务并创建监听器,但出现一些错误,我什至不知道这是否是创建它的方式:/

最佳答案

是的,由于某种原因,您需要使用监听器:

<?php

namespace Your\Bundle\Listener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class LocaleListener implements EventSubscriberInterface
{
private $defaultLocale;

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

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

if ($locale = $request->attributes->get('_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)),
);
}
}
?>

在 service.xml 中注册您的监听器:

<service id="my.listener" class="Your\Bundle\Listener\LocaleListener">
<argument>%locale%</argument>
<tag name="kernel.event_subscriber"/>
</service>

如何在 Twig 模板中实现语言切换器的示例:

{% for locale in ['en', 'fr','zh'] %}
<li>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : locale})) }}">
{% if locale == 'en' %}
<img title="English" src="{{ asset('bundles/fkmywebsite/images/UnitedStates.png') }}" alt="English" height="30" width="30"/>
{% elseif locale == 'fr' %}
<img title="Français" src="{{ asset('bundles/fkmywebsite/images/France.png') }}" alt="Français" height="30" width="30"/>
{% endif %}
</div>
</li>
{% endfor %}

关于Symfony2 语言环境整页事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903963/

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