我在控制器中有这个功能:
/**
* @Route("/{lang}", name="homepage_lang")
* @param Request $request
* @param $lang
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexLangAction(Request $request, $lang)
{
if (isset($lang)){
$newLang = $lang;
}else{
$localeLang = $request->getLocale();
$newLang = $localeLang;
}
$this->get('session')->set("_locale", $newLang);
// replace this example code with whatever you need
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);
}
和枝条中的按钮是这样的:
<button onclick="window.location.href='/es'" type="button">Español</button>
当我点击页面刷新但不更改语言时,我必须单击两次才能更改语言。
答案 0 :(得分:3)
如果您正在更改控制器中的会话,则需要在执行此操作后重新加载。尝试这样的事情:
/**
* @Route("/{lang}", name="homepage_lang")
* @param Request $request
* @param $lang
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexLangAction(Request $request, $lang)
{
$session = $this->get('session');
if ($session->has("_locale") && $lang !== $session->get("_locale")) {
$session->set("_locale", $lang);
return new RedirectResponse('/' . $lang);
}
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);
}
答案 1 :(得分:2)
最简洁的方法是使用指向路线的链接:
<a href="{{ path('homepage_lang') }}" title="Español">Español</a>
// if you are using bootstrap as a CSS framework then add the btn class
// so the link will look like a button
<a href="{{ path('homepage_lang') }}" title="Español" class="btn btn-primary">Español</a>
修改强>
// for a route with parameters, you can use the following
<a href="{{ path('homepage_lang', {'lang': 'es'}) }}" title="Español" class="btn btn-primary">Español</a>
<强> EDIT2 强>
似乎单独更改区域设置的事实不会立即生效,您需要以某种方式执行重定向,请参阅此问题,您将找到更多详细信息,而您甚至可以采用最佳实践并为此添加您的事件监听器。