Heim >PHP-Framework >Denken Sie an PHP >Wie implementiere ich Internationalisierung (I18N) und Lokalisierung (L10N) in ThinkPhp?
ThinkPhp hat keine integrierte, umfassende I18N/L10N-Unterstützung wie einige größere Frameworks. Sie können es jedoch effektiv mit einer Kombination von Techniken und potenziell nutzenden externen Bibliotheken implementieren. Die Kernstrategie beinhaltet die Trennung von übersetzbaren Zeichenfolgen von Ihrem Code und die Verwendung eines Mechanismus, um die entsprechenden Übersetzungen basierend auf dem Gebietsschema des Benutzers auszuwählen.
Hier ist ein gemeinsamer Ansatz:
en.php
, es.php
, fr.php
) in einem dedizierten Verzeichnis (z. B. application/lang
). Jede Datei enthält ein assoziatives Array, in dem Schlüssel die eindeutigen Kennungen für Ihre Zeichenfolgen und Werte den übersetzten Text darstellen. Zum Beispiel en.php
:<code class="php"><?php return [ 'hello' => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
Spracherkennung: Bestimmen Sie die bevorzugte Sprache des Benutzers. Dies kann durch verschiedene Methoden erfolgen:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
um die bevorzugte Sprache des Browsers zu erhalten. Dies ist oft unzuverlässig, aber ein guter Ausgangspunkt./en
, /es
).Lang
-Klasse von ThinkPhp (falls in Ihrer Version verfügbar) oder eine benutzerdefinierte Funktion verwenden. Beispiel unter Verwendung einer benutzerdefinierten Funktion:<code class="php">function loadLanguage($locale = 'en') { $langFile = APP_PATH . 'lang/' . $locale . '.php'; if (file_exists($langFile)) { return require $langFile; } return []; // Fallback to default language } $lang = loadLanguage(getLocale()); // getLocale() is a helper function to detect the locale</code>
<code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>
Denken Sie daran, potenzielle Fehler anmutig zu behandeln, wenn ein Übersetzungsschlüssel fehlt.
'submit'
'submit_form'
. ThinkPhp hat keinen integrierten i18n für Datum und Zahlenformatierung. Sie müssen die Intl
-Erweiterung von PHP verwenden. Stellen Sie sicher, dass es in Ihrer PHP -Konfiguration aktiviert ist.
Die IntlDateFormatter
und NumberFormatter
-Klassen innerhalb der Intl
-Erweiterung sind entscheidend. Hier ist ein Beispiel:
<code class="php">use IntlDateFormatter; use NumberFormatter; // ... (Language detection as before) ... $formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); echo $formatter->format(time()); // Formats the current date according to the locale $numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); echo $numberFormatter->format(1234.56); // Formats the number according to the locale</code>
Denken Sie daran, die Konstanten IntlDateFormatter
-Stil (z. B. IntlDateFormatter::SHORT
, IntlDateFormatter::MEDIUM
) so einzustellen, dass sie mit Ihrem gewünschten Datum/Uhrzeitformat übereinstimmen. Passen Sie den NumberFormatter
-Stil nach Bedarf an.
Es gibt keine weit verbreiteten, dedizierten ThinkPhp -Erweiterungen, die sich ausschließlich auf i18n/l10n konzentrieren. Der oben beschriebene Ansatz ist typischerweise ausreichend. Sie können jedoch vorhandene PHP -Bibliotheken wie:
Denken Sie daran, dass für einfachere Anwendungen der im erste Abschnitt beschriebene manuelle Ansatz ausreichend sein kann. Für größere Projekte mit vielen Übersetzungen kann ein strukturierterer Ansatz mit gettext
oder einer ähnlichen Bibliothek vorzuziehen sein. Wechseln Sie vor der Auswahl einer bestimmten Bibliothek sorgfältig die Komplexität der Integration gegen die Vorteile ab.
Das obige ist der detaillierte Inhalt vonWie implementiere ich Internationalisierung (I18N) und Lokalisierung (L10N) in ThinkPhp?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!