Add locale Anforderungen und alle Wege - Symfony2
Ich habe eine Anwendung, die war nicht beabsichtigt übersetzungen, aber jetzt habe ich beschlossen, dieses feature hinzufügen. Das problem ist, dass alle meine Routen so Aussehen:
goodbye:
pattern: /goodbye
defaults: { _controller: AcmeBudgetTrackerBundle:Goodbye:goodbye }
und ich will Sie jetzt so zu sein:
goodbye:
pattern: /goodbye/{_locale}
defaults: { _controller: AcmeBudgetTrackerBundle:Goodbye:goodbye, _locale: en }
requirements:
_locale: en|bg
Muss ich wirklich haben, dies zu tun und gibt es eine Möglichkeit, mehr zu tun, Globale oder automatische, oder zumindest hinzufügen requriements nur einmal, denn Sie sind die gleichen für alle urls? Danke sehr im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden JMS18nRoutingBundle (Dokumentation) für diesen Zweck. Keine custom loader, keine Codierung ...
Das bundle ist in der Lage, Präfix alle Ihre Strecken mit dem Gebietsschema, ohne etwas zu ändern außer einige Konfiguration für das bundle. Es ist die Schnellste ( und meiner empfohlenen ) Lösung für den Einstieg.
Können Sie auch übersetzen bestehenden Routen, die für verschiedene Sprachen.
Wird eine kurze Einführung finden Sie in diese coderwall post.
prefix
option ist der Weg zu gehen.Können Sie es auf diese Art und Weise, in der globalen Konfigurationsdatei
Sehr langsame Reaktion, aber hatte auch so ähnliche Problem.
Schön zu wissen ist, dass Sie können auch drop {_locale} - Präfix beim Import der Ressource. Sie würden dann benötigt, um {_locale} zu jedem bestimmten route.
Diese Weise können Sie fangen die http://www.domain.com ohne ein Gebietsschema aus in Ihrem Bündel, ohne zu schreiben, die Anforderungen und die Vorgaben.
Könnten Sie jedoch immer definieren die http://www.domain.com route in der globalen routing-Konfiguration.
Konfigurieren symfony für die Lokalisierung:
Hinzufügen Lokalisierung der Sitzung(bitte beachten Sie, dass die Konvention ist /locale/Aktion):
Alternativ Gebietsschema manuell gesetzt werden kann:
app/config/config.yml
In Ihrer Antwort:
Konfigurieren Lokalisierung Nachrichten lokalisierten Dateien:
Nachrichten.bg
messages.fr
Mehr zum Thema: Die offizielle symfony-Dokumentation
Bessere Lösung, anstatt dass Sie Anforderungen in allen Strecken oder globalen Bereich ist die Verwendung von EventListener-und redirect Benutzer in gleicher route, aber mit unterstützten Gebietsschemas, die in Beispiel:
Sowie
services.yml
In
parameters.yml
können Sie angeben, unterstützte Gebietsschemas:Ich glaube, Sie brauchen eine benutzerdefinierte loader Erweiterung der klassischen config-loader (Symfony\Component\Config\Loader\Loader) und manipulieren die Muster
http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html
check das erste Beispiel, ich habe nicht versucht es noch, aber ich bin ziemlich sicher, dass es passend zu Ihrem problem.
Sehen Sie diese Lösung: https://stackoverflow.com/a/37168304/6321297
Den
{_local}
parameter in der route hat, werden in der app/config /routing-Datei, wenn Sie wollen, wenden Sie es auf all Ihren Routen an.Diese Lösung verwendet einen Ereignis-listener für die Umleitung an die gute url, wenn es kein
{_local}
in der url:Ändern
yoursite.com/your/route
zuyoursite.com/{_locale}/your/route
Funktioniert es mit oder ohne Parameter.