2015-06-23 7 views
6

Ich erstelle eine mehrsprachige Website und verwende BeSimple/BeSimpleI18nRoutingBundle für Routenübersetzungen. Route in meiner Konfig sieht wie folgt aus:Symfony übersetzt Routen mit BeSimple/BeSimpleI18nRoutingBundle doppelte Routen

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

jedoch in diesem Fall ich doppelte Strecke erhalten, als ob ich eingeben/en/about-us oder/lt/about-us es funktioniert in beide Richtungen. aber auf die zweite Art sollte es 404 Fehler sein, weil die Route für lt locale/lt/api-mus sein sollte, was auch gut funktioniert.

Gibt es eine Möglichkeit, das zu beheben? Oder vielleicht bessere Möglichkeiten, Routen zu übersetzen?

Antwort

8

jedoch in diesem Fall bekomme ich doppelte Strecke

Es gibt einen Weg pro Sprache:

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

Wenn Sie auf die URL sind /lt/about-us die UrlMatcher die en Version überein :

$ 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 

In diesem Fall lautet die lokale Adresse und nicht lt.

Aber ich denke nicht, dass Sie sich darum kümmern sollten, denn die einzige Möglichkeit, dass ein Besucher /lt/about-us besuchen wird, ist durch Bearbeiten der URL selbst.

+0

das macht mich sorgen, wenn google irgendwie '/ lt/about-us' und'/de/about-us' indexieren kann, wie es wäre Inhalt für verschiedene URLS – Einius

+1

Dupliziere URLs wie im Bündel erklärt: ' {{path ('über', {'locale': 'en'})}} ' Es gibt keinen Grund dafür, dass Google URLs indiziert, die nicht in Ihrem HTML-Code enthalten sind. Wenn es nicht genug ist, können Sie eine 'robots.txt' oder eine' sitemap' erzeugen. – mykiwi

4

Nach dem Kampf mit BeSimple wechselte ich in 10 Minuten mein Projekt zu JMSI18nRoutingBundle. Es funktioniert gut und behebt Probleme mit Routen. Erstens: Es enthält mehrere Präfix-Modi (mit Locale) und zweitens erlaubt es, jeden Weg zu übersetzen.