我想在我的symfony 2.1网站上安装一个语言切换器.
我按照官方文档,设置了翻译文件,但使用$ request-> setLocale('en_US')设置了语言环境; 似乎不起作用.经过一些研究,我发现这个问题提供了这种听众技术的答案的开始.
但是,我仍然无法让它工作,我不太确定我的听众声明,它有什么问题吗?
我的控制器:
public function englishAction(Request $request)
{
$this->get('session')->set('_locale', 'en_US');
return $this->redirect($request->headers->get('referer'));
}
Run Code Online (Sandbox Code Playgroud)
config.yml中的服务声明:
services:
my_listener:
class: "FK\MyWebsiteBundle\Listener\LocaleListener"
Run Code Online (Sandbox Code Playgroud)
我的路由:
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
Run Code Online (Sandbox Code Playgroud) 我想实现区域设置切换器,但似乎没有运气...
下面的代码不起作用,因为(Referrer)包含旧的locale值...
如何使用新的locale值重定向到旧的Referrer URI?
- routing.yml
hello:
pattern: /{_locale}/hello/{name}
defaults: { _controller: JetInformBundle:Default:index, name: 'alexander' }
requirements:
_locale: ^en|de|ru|uk$
about:
pattern: /{_locale}/about
defaults: { _controller: JetInformBundle:Default:about }
requirements:
_locale: ^en|de|ru|uk$
locale:
pattern: /locale/{locale}
defaults: { _controller: JetInformBundle:Locale:index }
Run Code Online (Sandbox Code Playgroud)
- DefaultController.php
<?php
namespace Jet\InformBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends Controller
{
public function indexAction($name, Request $request)
{
$request->getSession()->set('referrer', $request->getRequestUri());
return $this->render('JetInformBundle:Default:index.html.twig',
array('name' => $name));
}
public function aboutAction(Request $request)
{
$request->getSession()->set('referrer', $request->getRequestUri());
return $this->render('JetInformBundle:Default:about.html.twig'));
} …
Run Code Online (Sandbox Code Playgroud)