我想在我的 symfony 2.1 网站上安装一个语言切换器。
我关注了 official documentation , 设置翻译文件但设置语言环境 $request->setLocale('en_US');似乎不起作用。经过一番研究,我找到了 this question这提供了一个答案的开始 listener technique .
但是,我仍然无法让它工作,我不太确定我的监听器声明,它有什么问题吗?
我的 Controller :
public function englishAction(Request $request)
{
$this->get('session')->set('_locale', 'en_US');
return $this->redirect($request->headers->get('referer'));
}
config.yml 中的服务声明:
services:
my_listener:
class: "FK\MyWebsiteBundle\Listener\LocaleListener"
我的路线:
homepage:
pattern: /{_locale}
defaults: { _controller: FKMyWebsiteBundle:Default:index, _locale: en }
requirements:
_locale: en|fr|cn
about:
pattern: /{_locale}/about
defaults: { _controller: FKMyWebsiteBundle:Default:about, _locale: en }
requirements:
_locale: en|fr|cn
最佳答案
yml中LocaleListener的声明(灵感来自当前新LocaleListener的声明:\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Resources\config\web.xml)
services:
my_listener:
class: "FK\MyWebsiteBundle\Listener\LocaleListener"
arguments: [%locale%]
tags:
- { name: kernel.event_subscriber }
一些片段:
模板中的语言切换器:
{% for locale in ['en', 'fr', 'cn'] %}
<li {% if locale == app.request.locale %}class="active"{% endif %}>
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : locale})) }}">{{ locale }}</a>
</li>
{% endfor %}
来自 Controller 的语言环境更改重定向:
$LocalizedUrl = $this->get('router')->generate(
$request->attributes->get('_route'),
['_locale' => $locale] + $request->attributes->get('_route_params')
);
return new \Symfony\Component\HttpFoundation\RedirectResponse($LocalizedUrl);
关于php - 在 Symfony 2.1 中设置语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951792/