Dieser Artikel befasst sich mit erweiterten Techniken für die Verwendung der GetText -Bibliothek in PHP und konzentriert
Schlüsselkonzepte:
msgids
dgettext()
nur eine Standarddomäne verwendet, die über gettext()
festgelegt ist, während textdomain()
die Domänen mit dgettext()
vorgebunden sind. bindtextdomain()
Verzeichnisstruktur und Fallback -Orte:
Eine optimale Verzeichnisstruktur vermeidet unnötige Übersetzung des Standardgebiets (z. B. en_us). Verwenden Sie anstatt Identifikatoren wie "Hello_World" zu verwenden, die tatsächliche Standardsprachenzeichenfolge direkt als msgid
. Dieser Ansatz minimiert den Verarbeitungsaufwand.
Das folgende Bild zeigt eine Beispielverzeichnisstruktur:
Beispielübersetzungsdateien (.po
und kompiliert .mo
):
französisch (fr_FR
):
<code>#Test token 1 msgid "Hello World!" msgstr "Bonjour tout le monde!" #Test token 2 msgid "Testing Translation..." msgstr "Test de traduction..."</code>
spanisch (es_ES
):
<code>#Test token 1 msgid "Hello World!" msgstr "¡Hola mundo!" #Test token 2 msgid "Testing Translation..." msgstr "Prueba de traducción..."</code>
arabisch (ar_EG
):
<code>#Test token 1 msgid "Hello World!" msgstr "!أهلا بالعالم" #Test token 2 msgid "Testing Translation..." msgstr "...اختبار الترجمة"</code>
Umschaltungsorte:
Die locale.php
Datei verwaltet die Auswahl des Gebietsschemas mithilfe von GET -Parametern oder -sitzungen:
<?php session_start(); $language = isset($_GET["lang"]) ? $_GET["lang"] : (isset($_SESSION["lang"]) ? $_SESSION["lang"] : "en_US"); $_SESSION["Language"] = $language; $folder = "Locale"; $domain = "messages"; $encoding = "UTF-8"; putenv("LANG=" . $language); setlocale(LC_ALL, $language); bindtextdomain($domain, $folder); bind_textdomain_codeset($domain, $encoding); textdomain($domain); ?>
Eine Stichprobenverbrauch in test-locale.php
:
<?php require_once "locale.php"; echo _("Hello World!"), "<br></br>"; echo _("Testing Translation..."); ?>
Zugriff auf test-locale.php?lang=fr_FR
gibt die französische Übersetzung aus.
Überschreibung der aktuellen Domäne:
Verwenden Sie dgettext()
, um auf Übersetzungen aus einer anderen Domäne zuzugreifen (z. B. "Fehler"). Beachten Sie, dass diese Domäne mit bindtextdomain()
in locale.php
:
<?php // ... (locale.php code) ... bindtextdomain("errors", "Locale"); bind_textdomain_codeset("errors", "UTF-8"); // ... (rest of locale.php code) ... ?>
in test-locale.php
:
<?php // ... (include locale.php) ... echo "<br></br>"; echo dgettext("errors", "Error getting content"), "<br></br>"; echo dgettext("errors", "Error saving data"); ?>
Dies übersetzt korrekt "Fehler beim Erhalten von Inhalten" und "Fehler speichern Daten", wenn in der Domäne "Fehler" für das ausgewählte Gebietsschema Übersetzungen vorhanden sind.
Zusammenfassung und FAQ:
Dieser Abschnitt fasst die wichtigsten Erkenntnisse zusammen und enthält Antworten auf häufig gestellte Fragen zur PHP-Lokalisierung, die Abdeckung von Themen wie Best Practices, Handhabung von Pluralen, Sprachen von Recht nach links und Verwaltung von Übersetzungen. Der FAQ-Abschnitt ist umfangreich und bietet ausführliche Informationen zu verschiedenen Aspekten der PHP-Lokalisierung. Der ursprüngliche FAQ -Abschnitt wurde in seiner Gesamtheit beibehalten.
Das obige ist der detaillierte Inhalt vonphpmaster | Lokalisierung von PHP -Anwendungen Teil 3: Nov 2011 - SitePoint. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!