use*_*505 3 symfony symfony-2.3
如何更改Symfony 2.3中的语言环境?
我创建了这个控制器:
public function changelocaleAction($lang)
{
$request = $this->get('request');
$request->setLocale($lang);
return $this->redirect($request->headers->get('referer'));
}
Run Code Online (Sandbox Code Playgroud)
刷新页面时不显示更改.为什么?
小智 5
基于Symfony2 文档:
namespace Acme\LocaleBundle\EventListener;
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;
}
// try to see if the locale has been set as a _locale routing parameter
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} else {
// if no explicit locale has been set on this request, use one from the session
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
}
public static function getSubscribedEvents()
{
return array(
// must be registered before the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
Run Code Online (Sandbox Code Playgroud)
services.yml
services:
acme_locale.locale_listener:
class: Acme\LocaleBundle\EventListener\LocaleListener
arguments: ["%kernel.default_locale%"]
tags:
- { name: kernel.event_subscriber }
Run Code Online (Sandbox Code Playgroud)
最后,您可以在您的控制器中使用:
$locale = $this->getRequest()->getLocale();
Run Code Online (Sandbox Code Playgroud)
在此链接中,您有一个非常相似的问题.
| 归档时间: |
|
| 查看次数: |
5296 次 |
| 最近记录: |