Heim >Backend-Entwicklung >PHP-Tutorial >Einfache multisprachige Zweig-Apps mit GetText
Dieses Tutorial zeigt, wie man einer PHP-Anwendung mit Twig und GetText eine Mehrsprach-Unterstützung hinzufügt. Es ist wesentlich schneller als Userland -Lösungen wie die Übersetzungskomponente von Symfony. Wir werden eine bereits bestehende englische Anwendung (NOFW) ändern, um dies zu veranschaulichen.
Schlüsselvorteile:
xgettext
), .po
und .mo
Dateigenerierung, Zweigintegration über die Erweiterung i18n
und hilfreiche Dienstprogramme Skripte . Setup und Grundlagen:
Wir werden das Homestead verbessert (vorausgesetzt, GetText ist bereits installiert; Anweisungen zur manuellen Installation werden später angegeben). Da NofW Twig verwendet, ist die Erweiterung i18n
erforderlich:
<code class="language-bash">git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions</code>
(Hinweis: Dies kloniert eine ältere NOFW-Version ohne integrierte Internationalisierung für Tutorialzwecke.)
Folgen Sie dem NOFW Readme, um die Datenbank zu konfigurieren. Die Anwendung sollte jetzt ausgeführt werden.
getText verwendet gettext("string")
oder sein Alias _("string")
, um übersetzbare Zeichenfolgen zu markieren. Wenn eine Übersetzung nicht gefunden wird, wird die ursprüngliche Zeichenfolge (der Platzhalter) zurückgegeben.
Testen wir dies mit einer einfachen PHP -Datei (außerhalb von Twig), um die GetText -Funktionalität zu überprüfen. Erstellen Sie i18n.php
:
<code class="language-php"><?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");</code>
Erstellen Sie die Verzeichnisstruktur:
Der Code legt die Sprache, das Gebietsschema und die Domäne für GetText fest. Ausführen dieses Ausführens wird "Hello_world" wiedergeben, weil die Sprachdatei fehlt.
String -Extraktion:
Verwenden Sie xgettext
, um Zeichenfolgen aus Ihren Dateien zu extrahieren:
<code class="language-bash">xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php</code>
Dies erstellt messages.pot
(tragbare Objektvorlage). Generieren Sie eine englische .po
Datei:
<code class="language-bash">msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot</code>
bearbeiten messages.po
, übersetzen "hello_world" (z. B. in "Howdy"). Kompilieren Sie zu .mo
:
<code class="language-bash">msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po</code>
Hinzufügen einer neuen Sprache (z. B. Kroatischer):
sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
.po
Datei: mkdir -p Locale/hr_HR/LC_MESSAGES; msginit --locale=hr_HR --output-file=Locale/hr_HR/LC_MESSAGES/messages.po --input=Locale/messages.pot
messages.po
. .mo
: msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
i18n.php
und test. Möglicherweise ist ein Server -Neustart erforderlich. hr_HR.UTF-8
twig Integration:
fügen Sie dies zu: app/config/config_web.php
hinzu
<code class="language-bash">git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions</code>Verwenden Sie in Ihren Zweigvorlagen den
Block: trans
<code class="language-php"><?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");</code>
behandelt den Zweig nicht direkt, daher verwenden wir einen Caching -Mechanismus. Erstellen Sie xgettext
: app/bin/twigcache.php
<code class="language-bash">xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php</code>Dann extrahieren Sie Zeichenfolgen aus den zwischengespeicherten Dateien:
<code class="language-bash">msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot</code>Aktualisieren
Dateien mit .po
und neu kompilieren msgmerge
Dateien. .mo
Bonus: Dienstprogrammskripte (App/bin/i18n):
Das Tutorial enthält BASH -Skripte (, addlang.sh
, update-pot.sh
, update-mo.sh
), um den Hinzufügen von Sprachen, die Aktualisierung config.sh
und .pot
zu automatisieren. Diese Skripte sind im Originaltext detailliert. .mo
Bereitstellung:
Stellen Sie sicher, dass GetText installiert ist und auf Ihrem Server die Lokale generiert werden. Auf Ubuntu:
<code class="language-bash">msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po</code>Die Dateien
, .pot
und .po
sollten Teil Ihrer Versionskontrolle sein. Passen Sie den Installationsbefehl und die Skripte für Nicht-Ubuntu-Systeme an. Der FAQS -Abschnitt enthält weitere Details und Fehlerbehebungsinformationen. .mo
Das obige ist der detaillierte Inhalt vonEinfache multisprachige Zweig-Apps mit GetText. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!