2012-08-27 37 views
6

有一些問題,改變在symfony的2.1網站的語言環境。更改地區用symfony 2.1

我不能找到一種方法,能夠改變郎無每路線上使用_locale。我知道這是針對the fundamental rule,但這個內容將不會被引擎索引,因爲它只是會員。

通常情況下,我想一個簡單的方法能夠改變對請求的語言環境(從2.1版本BC),或在會話,但無法弄清楚如何做到這一點的順利進行。我也想避免使用Listener。

config.yml文件:

framework: 
    translator:  { fallback: %locale% } 
    session: 

的routing.yml文件:

route_change_lang: 
    pattern: /changelang/{newlang} 
    defaults: { _controller: AcmeCoreBundle:Default:switchLanguage, newlang: en } 
    requirements: 
     newlang: en|fr|de 

簡單操作來更新路由器的語言環境:

public function switchLanguageAction($newlang) 
{ 

    $request = $this->getRequest(); 

    $request->setLocale($newlang); 

    $referer_url = $this->get('request')->headers->get('referer'); 
    if ($referer_url != null) { 
     return $this->redirect($referer_url); 
    } else { 
     return $this->redirect($this->generateUrl('route_home')); 
    } 
} 

問題是什麼?我猜它與在config.yml主文件中設置的default_locale有關,但文檔不是很清楚,任何幫助/提示讚賞

+0

我面臨着完全相同的問題。你有沒有找到解決方案? – EnchanterIO

回答

-1

如果您在請求中設置區域設置,這隻用於當前請求。下次發出請求時,將使用default_locale。即使現在(2.1)的語言環境中請求而不是會議確定,「這也可以在區域設置存儲在會話中,而不是在每個請求的基礎。如果你這樣做,以後每次申請都會有這樣的語言環境「。 (來自文檔)。所以,你需要做的:

$this->get('session')->set('_locale', $newlang); 
+1

感謝你試試,我還需要很長一段時間來仔細閱讀文檔,但不幸的是,它並沒有在所有的工作。語言環境從不更改,或者始終設置爲default_locale。實際上這可能是一個錯誤,但symfony 2.1版本還很年輕,所以我不知道,還有其他提示嗎? –

0

恢復舊的行爲在https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1 解釋,並使用一張卡洛斯·格拉納多斯的代碼。

您還可以閱讀我的另一個答案https://stackoverflow.com/a/12952999/520114

+0

@ webda2I我試過這個解決方案,但沒有設法讓它工作。創建了監聽器,但似乎沒有改變任何東西。你有沒有設法讓它工作? –

+0

你有沒有在正確的命名空間自己的Bundle中創建它,並在你的service.xml或其他地方聲明它? – webda2l

+0

@ webda2I我在這裏問了一個新問題:http://stackoverflow.com/questions/12951792/set-locale-in-symfony-2-1,如果你能看一看 –

1

我遇到了同樣的問題,因爲我們在我們的網址(搜索引擎優化問題)不能」使用的語言環境。我們還使用en_US等語言環境,並將它們存儲在直接框架訪問之外的配置中。 我所做的是註冊一個事件偵聽器和鉤住onKernelRequest事件。在那裏我檢查會話中是否設置了區域設置,如果沒有,我將它添加到請求和會話中。 這樣,框架繼續像2.1之前一樣行事如果您需要更多關於如何做到這一點的信息,我會在這裏編輯一些示例:-)