2015-06-23 68 views
6

我正在創建一個多語言網站,我正在使用BeSimple/BeSimpleI18nRoutingBundle進行路線翻譯。在我的配置路線看起來像這樣:Symfony使用BeSimple/BeSimpleI18nRoutingBundle翻譯路線重複路線

about: 
    locales: { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" } 
    defaults: { _controller: BaseBundle:Base:about } 

然而,在這種情況下,我得到重複的路線,如果我輸入/ EN /約 - 我們或/ LT /約 - 我們工作在兩種方式。但在第二種方式,它應該是404錯誤,因爲lt locale的路線應該是/ lt/apie-mus,它也可以正常工作。

有什麼辦法解決這個問題嗎?或者也許有更好的翻譯路線的方法?

回答

8

然而,在這種情況下,我得到重複的路線

有每種語言一個路線:

$ app/console router:debug 
about.en     ANY ANY ANY /{_locale}/about-us 
about.lt     ANY ANY ANY /{_locale}/apie-mus 

當你在URL /lt/about-us的UrlMatcher將匹配版本:

$ app/console router:match /lt/about-us 
Route "about.en" matches 

[router] Route "about.en" 
Name   about.en 
Path   /{_locale}/about-us 
Path Regex #^/(?P<_locale>[^/]++)/about\-us$#s 
Host   ANY 
Host Regex 
Scheme  ANY 
Method  ANY 
Class  Symfony\Component\Routing\Route 
Defaults  _controller: AppBundle:Default:index 
      _locale: en 
Requirements NO CUSTOM 
Options  compiler_class: Symfony\Component\Routing\RouteCompiler 

在這種情況下,本地將是en而不是lt

但我認爲你不應該擔心,因爲訪問者訪問/lt/about-us的唯一方法是自己編輯URL。

+0

如果google可以以某種方式對'/ lt/about-us'和'/ en/about-us'進行索引,那麼它會使不同URL的重複內容變得令人擔心 – Einius

+1

如果您生成的URL類似於bundle中的解釋: {{path('about',{'locale':'en'})}}' 沒有理由讓谷歌索引不在你的html中的URL。如果這還不夠,可以生成一個'robots.txt'或'sitemap'。 – mykiwi

4

與BeSimple戰鬥後,我在10分鐘內將項目切換到JMSI18nRoutingBundle。它運作良好,解決了路線問題。首先:它包含多種前綴模式(使用區域設置),其次允許翻譯每條路線。