我有一個對象語言,我可以從管理頁面添加,刪除和更新語言。Symfony中的語言切換器2.4
我想要做什麼,是增加一種語言切換,我把這個HTML /枝代碼:
{% for language in languages %}
<li><a href="{{ path('evr_footer_switch_language',{'locale': language.code | lower }) }}">{{ language.language | capitalize }} ({{ language.code }})</a></li>
{% endfor %}
和動作the route for the action is evr_footer_switch_language
,我在轉接器使用上面的一個:
public function switchlanguageAction($locale = 'en') {
$this->get('session')->set('_locale', $locale);
$request = $this->getRequest();
$request->setLocale($locale);
return $this->redirect($request->headers->get('referer'));
}
這是我的動作/控制器switchlanguageAction()定義的路由
evr_footer_switch_language:
pattern: /language/switch/{locale}
defaults: { _controller: EvrHomeBundle:Footer:switchlanguage, locale: en }
在我看來,原則上很簡單,你點擊語言鏈接(從數據庫獲得),發送語言的代碼(例如:'fr','en','zh'等...)作爲$ locale變量的操作,然後將會話/請求的語言環境設置爲該值。
問題是,這些都不起作用,並且語言仍然是'EN'(默認值)。
注意根據本項目的要求,語言不能在URL中提到的(如FR /條,連接/篇),但相同的URL(/用品/)可以在不同的顯示語言,這就是爲什麼我沒有使用預定義的slug(_locale)。
感謝
非常感謝您的回答+1,但是......我創建了一個監聽器,並把它添加到services.yml(你提到的文章中描述的相同步驟),然後我設置的語言環境從控制器,但徒勞無功......它還沒有奏效。 – SmootQ
非常感謝你,我申請了doc說的內容,但是爲了設置我只使用'$ request-> setLocale()'的語言環境,現在我添加了'$ this-> get('session') - >設置('_ locale')',它的作品...最佳答案! – SmootQ