Symfony - Internationalisierung
Internationalization (i18n) und Localization (l10n)helfen, die Kundenabdeckung einer Webanwendung zu erhöhen. Symfony bietet zu diesem Zweck eine hervorragende Übersetzungskomponente. In diesem Kapitel erfahren Sie, wie Sie die Übersetzungskomponente verwenden.
Übersetzung aktivieren
Standardmäßig deaktiviert das Symfony-Webframework die Übersetzungskomponente. Fügen Sie zum Aktivieren den Übersetzerabschnitt in der Konfigurationsdatei app / config / config.yml hinzu.
framework: translator: { fallbacks: [en] }
Übersetzungsdatei
Die Übersetzungskomponente übersetzt den Text mithilfe der Übersetzungsressourcendatei. Die Ressourcendatei kann in PHP, XML und YAML geschrieben sein. Der Standardspeicherort der Ressourcendatei istapp/Resources/translations. Es wird eine Ressourcendatei pro Sprache benötigt. Schreiben wir eine Ressourcendatei.messages.fr.yml für die französische Sprache.
I love Symfony: J'aime Symfony
I love %name%: J'aime %name%
Der Text auf der linken Seite ist in Englisch und der Text auf der rechten Seite ist in Französisch. Die zweite Zeile zeigt die Verwendung eines Platzhalters. Die Platzhalterinformationen können während der Übersetzung dynamisch hinzugefügt werden.
Verwendung
Standardmäßig wird das Standardgebietsschema des Benutzersystems vom Symfony-Webframework festgelegt. Wenn das Standardgebietsschema nicht in der Webanwendung konfiguriert ist, wird auf Englisch zurückgegriffen. Das Gebietsschema kann auch in der URL der Webseite festgelegt werden.
http://www.somedomain.com/en/index
http://www.somedomain.com/fr/index
Verwenden wir in unserem Beispiel das URL-basierte Gebietsschema, um das Übersetzungskonzept leicht zu verstehen. Neue Funktion erstellen,translationSample mit Route /{_locale}/translation/samplein DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} ist ein spezielles Schlüsselwort in Symfony, um das Standardgebietsschema anzugeben.
/**
* @Route("/{_locale}/translation/sample", name="translation_sample")
*/
public function translationSample() {
$translated = $this->get('translator')->trans('I love Symfony');
return new Response($translated);
}
Hier haben wir Übersetzungsmethode verwendet, trans, der den Inhalt in das aktuelle Gebietsschema übersetzt. In diesem Fall ist das aktuelle Gebietsschema der erste Teil der URL. Führen Sie nun die Anwendung aus und laden Sie die Seite.http://localhost:8000/en/translation/sample im Browser.
Das Ergebnis ist "I love Symfony" in englischer Sprache. Laden Sie nun die Seitehttp://localhost:8000/fr/translation/sampleim Browser. Nun wird der Text wie folgt ins Französische übersetzt.
Ebenso hat Zweigschablone {% trans %}Block, um die Übersetzungsfunktion auch in Ansichten zu aktivieren. Um dies zu überprüfen, fügen Sie eine neue Funktion hinzu:translationTwigSample und die entsprechende Ansicht bei app/Resources/views/translate/index.html.twig.
/**
* @Route("/{_locale}/translation/twigsample", name="translation_twig_sample")
*/
public function translationTwigSample() {
return $this->render('translate/index.html.twig');
}
Aussicht
{% extends 'base.html.twig' %}
{% block body %}
{% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %}
{% endblock %}
Hier gibt der Transblock auch den Platzhalter an. Das Seitenergebnis ist wie folgt.