2009-07-28 4 views
5

Ich habe schon immer von Gettext gehört - ich weiß, dass es eine Art Unix-Befehl ist, um eine Übersetzung basierend auf dem Stringargument zu suchen, und erzeugt dann eine .pot-Datei, aber kann mir jemand in Laienform erklären, wie das gehandhabt wird in einem Web-Framework?Hinzufügen von Unterstützung für i18n in PHP mit gettext?

Ich könnte zu sehen, wie einige etablierte Rahmen getan hat, aber eine Laien Erklärung würde helfen, weil es nur dazu beitragen könnte, das Bild ein wenig mehr, bevor ich tatsächlich in Dinge eintauchen, um meine eigene Lösung zu bieten.

Antwort

12

Das gettext-System gibt Strings aus einer Reihe von Binärdateien wieder, die aus Quelltextdateien erstellt wurden, die die Übersetzungen in verschiedenen Sprachen für denselben Satz enthalten.

Der Suchschlüssel ist der Satz in einer "Basis" -Sprache.

in Ihrem Quellcode Sie so etwas wie

echo _("Hello, world!"); 

für jede Sprache haben erhalten Sie eine entsprechende Textdatei mit dem Schlüssel und der übersetzten Version (beachten Sie die% s, die mit printf-Funktionen verwendet werden können) haben

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

Dies sind die wichtigsten Schritte, die Sie für die Erstellung Ihrer Lokalisierungen zu durchlaufen müssen

  • alle Textausgabe müssen gettext Funktionen (gettext(), ngettext() _())
  • Verwendung xgettext (* nix) Ihre PHP-Dateien zu analysieren und die Basis .po Textdatei
  • Verwendung poedit erstellen Übersetzung hinzufügen Texte zu den .po Dateien
  • Verwendung msgfmt (* nichts)
  • setzten die .mo-Dateien in einer Verzeichnisstruktur zu erstellen, wie

locale/die binäre .mo-Datei aus der .po-Datei de_DE/LC_MESSAGES/myPHPApp.mo

locale/de_DE/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

dann Sie PHP-Skript muss das Gebietsschema festgelegt, die

Das Beispiel aus dem php verwendet werden müssen Handbuch ist sehr klar für den Teil

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

immer aus dem pHP-Handbuch schauen here für ein gutes Tutorial

+0

Aber die oben Das PHP-Handbuchbeispiel scheint die angegebene Zeichenfolge nicht zu übersetzen. Gibt es noch etwas anderes mit dem Beispiel zu tun? –

Verwandte Themen