Home > PHP > Symfony2: Webseite in eine andere Sprache übersetzen

Symfony2: Webseite in eine andere Sprache übersetzen

Wer das Symfony 2 Framework nutzt, der kann auf schnelle Weise seine Webseite in mehreren Sprachen aufbauen. Vorher sind einige Sachen zu beachten und in den Einstellungen (in der Konfigurationdatei) zu treffen. In der Konfigurationsdatei config.yml sind zuerst folgende Einträge zu setzen:

Wir nehmen an, wir wollen eine Seite auch in englischer Sprache anzeigen lassen. Dazu wird im Controller die gleiche Methode ausgeführt, allerdings nur die Texte ins Englische übersetzt. Wir haben einen DefaultController im Bundle „POBundle“ im Namespace „ProgrammierenOptimieren“ mit einer index-Methode angelegt. Das Routing kann auf verschiedene Weisen vorgenommen werden, z.B. in der routing.yml. In diesem Beispiel habe ich für das Routing die Annotationen (Annotations) in Symfony 2 verwendet:

ProgrammierenOptimieren/POBundle/Controller/DefaultController.php:

Hier waren wir nun das dazugehörige Twig Template. Da die default_locale, also unsere Standardsprache Deutsch ist, schreiben wir in unser Template deutsche Texte:

ProgrammierenOptimieren/POBundle/Resources/views/Home/index.html.twig:

Wie man sieht, sind die H1 Überschrift und der Paragraph von einem trans Tag (translate) umschlossen. Dies ist nötig, damit das Symfony2 Framework, die Anweisung bekommen kann nach den entsprechenden Texten zu suchen und zu übersetzen, und zwar in die Sprache die in der aktuellen Session als „locale“ gesetzt ist. Standardmäßig haben wir in unserem Beispiel Deutsch.

Nun brauchen wir noch eine Datei mit den Übersetzungen ins Englische. Dazu müssen wir in unserem Bundle „POBundle“ im Ordner Resources/translations eine Datei „messages.en.yml“ anlegen, oder in einer anderen von Symfony2 akzeptierten Sprache wie XML oder PHP. Ich bevorzuge YML:

ProgrammierenOptimieren/POBundle/Resources/translations/messages.en.yml:

Wie man oben sieht, haben wir die Übersetzung für die beiden Stringketten definiert. Das Framework sucht bei trans-Tags automatisch nach den Übersetzungen und zeigt diese statt des vordefinierten deutschen Textes an. Wird in der Session kein locale-Wert gefunden oder kommt der Besucher zum ersten Mal auf die Seite, so wird auf die Defaultsprache zurückgegriffen. Wenn eine Locale in der Session gesetzt ist, für die keine Datei mit der entsprechenden Übersetzung gefunden wurde, dann greift der Translator (Übersetzer) auf die Locale zu, die in der Config unter „fallback“ angegeben wurde (siehe oben).

Unsere Testseite kann jetzt unter http://localhost/de/ aufgerufen werden und es wird der deutsche Text angezeigt. Bei Aufruf der Seite http://localhost/en/ wird die englische Übersetzung angezeigt.

  1. Johann
    4. August 2016, 10:32 | #1

    Danke! Es hat mir sehr geholfen!

  1. Bisher keine Trackbacks