2017-03-29 23 views
0
不起作用

我創造的Symfony語言切換,使用下面的代碼:創建具有區域設置的URL在枝杈

<select title="Change Language" onChange="window.location.href=this.value"> 
    <option value="{{ path(app.request.attributes.get('_route'), {'_locale':'en'}) }}" {% if app.request.locale == 'en' %} selected="selected" {% endif %}>English        </option> 
    <option value="{{ path(app.request.attributes.get('_route'), {'_locale':'it'}) }}" {% if app.request.locale == 'it' %} selected="selected" {% endif %}>Italiano        </option> 
</select> 

當我去http://localhost:8000/app_dev.php/en/aboutoption鏈接是正確的,即:/app_dev.php/en/about/app_dev.php/it/about但如果我去同一個頁面,而無需指定的語言環境,http://localhost:8000/app_dev.php/about不正確的鏈接都在option這樣創建:/app_dev.php/about?_locale=it/app_dev.php/about?_locale=en

的關於我的控制器的動作看起來像這樣:

/** 
* @Route("/{_locale}/about", name="aboutUs", defaults={"_locale" = "en"}, requirements={"_locale" = "en|de|fr|es|it"}) 
* @Route("/about") 
*/ 

public function aboutAction(){ 
    return $this->render('default/frontend/about.html.twig'); 
} 

我該如何解決這個問題?

+0

我認爲你必須刪除第二條路線或添加默認語言環境。 – malcolm

+0

@malcolm如果我刪除了第二條路徑,那麼轉到/app_dev.php/about將導致404錯誤。同時向它添加默認語言環境,沒有幫助... – user6368518

+0

因此,添加缺省語言環境和要求,只需複製路由以上並更改名稱。 – malcolm

回答

0

首先,刪除你的第二個@Route。

之後,安裝https://github.com/schmittjoh/JMSI18nRoutingBundle 有了這個包,你可以做你想要的系統URL。

向下你有一個配置的例子。

jms_i18n_routing: 
    default_locale: en 
    locales: [es, it, fr, pl, pt, en, de, ca] 
    strategy: prefix_except_default 
+0

像一個魅力工作。值得配置它的喧囂... – user6368518

+0

好吧,恭喜! :-) –