2012-07-10 70 views
3

如何根據接受的語言標題翻譯Symfony 2中的語言?

config.yml

#Here locale is en 
translator:  { fallback: %locale% } 
... 
session: 
    default_locale: %locale% 

的routing.yml

AcmeDemoBundle_homepage: 
    pattern: /{_locale}/index 
    defaults: { _controller: AcmeDemoBundle:Default:index, _locale: de} 
    requirements: 
    _locale: en|de 

所以在這裏通過手動鍵入URL會導致/en/index英語和/de/index德國。

如果瀏覽器接受語言爲de_DE或de(德語),我們可以自動轉到德語,否則轉到英語(所有其他瀏覽器接受語言)?

回答

5

基本上你可以做這樣的事情

$this->get('session')->setLocale(
    $request->getPreferredLanguage(array('en', 'de')) 
); 

其應該做的伎倆。但是,在每一個行動中加入它都可能很難...爲什麼你可以創建自己的內核事件監聽器。

這些鏈接可以幫助我在想:

Symfony2 wrong locale detection?

http://symfony.com/doc/current/cookbook/service_container/event_listener.html

+0

我應該在哪裏創建內核事件偵聽器?我不熟悉它。 – 2012-07-10 12:26:51

3

我一直在使用JMSI18nRoutingBundle,它會自動處理URL中的語言環境。在默認網址上,它可以選擇使用首選區域設置。

內核事件偵聽器是一個很好的選項,您可以在其中找到信息in the documentation。但是,請記住,只應在新會話中觸發它,以確保用戶仍可以手動選擇他們查看網站的語言。

+0

@ louis-philippe-huberdeau你知道如何在新會話中觸發聽衆嗎?問候! – 2013-05-03 01:38:04