Die Übersetzungsoperatoren i18n, d18n und x18n
eZi18nOperator (kernel/common/ezi18noperator.php) registriert i18n, x18n und d18n in
kernel/common/eztemplateautoload.php. Alle drei enden in ezpI18n::tr() (kernel/common/ezpi18n.php), derselben
Funktion, mit der PHP-Code übersetzt.
Inhalt
Die Operatoren
i18n
Generierte Seite: i18n.
| Parameter | Typ | Erforderlich | Standardwert |
|---|---|---|---|
context | Zeichenkette | nein | false |
comment | Zeichenkette | nein | leer |
arguments | Hash | nein | false |
- Eingabe: der Quelltext (amerikanisches Englisch).
- Rückgabe: der übersetzte Text mit eingesetzten Argumenten.
Der Kontext benennt die Gruppe von Meldungen in der Übersetzungsdatei (design/admin/content/edit). Der Kommentar
unterscheidet zwei gleiche Quelltexte innerhalb eines Kontexts. Die Argumente werden nach der Übersetzung mit strtr()
ersetzt: Ein Schlüssel wie %count wird so ersetzt, wie er geschrieben ist, ein ganzzahliger Schlüssel n ersetzt
%1 bis %9 ('%' . ( ( n % 9 ) + 1 )), sodass array( 3, 7 ) die Platzhalter %1 und %2 füllt.
Das Werkzeug ezlupdate sucht in Templates nach |i18n( mit einem konstanten Text, um die Übersetzungsdateien zu
erstellen; deshalb sollte der Text ein Literal sein.
d18n
Generierte Seite: d18n.
Dieselben Parameter und derselbe Code wie bei i18n. Der Kommentar im Konstruktor sagt, warum es ihn gibt: Er ist ein
Alias "for use with dynamic variables as input where you don't want ezlupdate to pick up the string", also für
dynamische Variablen als Eingabe, deren Zeichenkette ezlupdate nicht aufnehmen soll, zum Beispiel Menübezeichnungen
aus Einstellungen. Die Admin-Designs verwenden ihn so für die Menüeinträge aus menu.ini
(design/admin4/templates/parts/ini_menu.tpl).
x18n
Generierte Seite: x18n.
| Parameter | Typ | Erforderlich | Standardwert |
|---|---|---|---|
extension | Zeichenkette | ja | false |
context | Zeichenkette | nein | false |
comment | Zeichenkette | nein | leer |
arguments | Hash | nein | false |
Der erste Parameter nennt eine Erweiterung, danach folgen die Parameter von i18n. Im aktuellen Code liest modify()
den Namen der Erweiterung, verwendet ihn aber nicht: Der Text wird genau wie bei i18n mit ezpI18n::tr() aus den
Übersetzungen aller aktiven Erweiterungen übersetzt. x18n hat keine Template-Hinweise und wird daher nie beim
Kompilieren übersetzt.
Wie ein Text übersetzt wird
ezpI18n::tr( $context, $source, $comment, $arguments ):
- Mit
[RegionalSettings] TextTranslation=disabled(und ohne dynamische Übersetzungen) werden nur die Argumente eingesetzt. - Für das Locale
eng-GB(das Quell-Locale, ohne Übersetzungsdatei) werden nur die Argumente eingesetzt. - Andernfalls wird die
translation.tsdes Locales des Siteaccess geladen (aus[RegionalSettings] TranslationRepository, dann aus dem Ordnertranslations/jeder Erweiterung inTranslationExtensions[]) und zwischengespeichert, außer beiTranslationCache=disabled. Mit aktiviertem[RegionalSettings] DevelopmentModewerden fehlende Texte in "Bork"-Form zwischen eckigen Klammern angezeigt. - Ein Text, den die Datei nicht enthält, kommt unverändert zurück. Für
eng-USgeschieht das stillschweigend (die Quelltexte sind amerikanisches Englisch); für andere Locales wird die Debug-Meldung "Missing translation for message in context" geschrieben.
Beispiele
Dasselbe Template zweimal gerendert: auf dem Siteaccess site (Locale eng-US) und auf bold_ger (Locale ger-DE).
def $label = 'Search'
locale: ezini( 'RegionalSettings', 'Locale' )
1 'Search'|i18n( 'design/standard/content/search' )
2 '%count items'|i18n( 'design/admin/node/view/full', '', hash( '%count', 12 ) )
3 'Page %1 of %2'|i18n( 'example/context', 'positional arguments', array( 3, 7 ) )
4 $label|d18n( 'design/standard/content/search' )
5 'Search'|x18n( 'myextension', 'design/standard/content/search' )Ausgabe:
locale: eng-US
1 Search
2 12 items
3 Page 3 of 7
4 Search
5 SearchAuf bold_ger:
locale: ger-DE
1 Suchen
2 12 items
3 Page 3 of 7
4 Suchen
5 SuchenSearch hat im Kontext design/standard/content/search eine deutsche Übersetzung (Suchen); die beiden anderen
Texte stehen in keiner deutschen Datei und kommen daher so zurück, wie sie geschrieben sind, mit eingesetzten
Argumenten. x18n (Zeile 5) hat wie i18n übersetzt.
Kompilierte Templates
operatorTemplateHints() gibt i18n und d18n die Transformation i18nTrans(). Sind Text, Kontext und Kommentar
Konstanten, übersetzt der Compiler den Text beim Kompilieren und schreibt die übersetzte Zeichenkette in die
kompilierte Datei; sind auch die Argumente konstant, schreibt er Code, der nur noch die Argumente einsetzt. Ein
kompiliertes Template behält daher die Übersetzung vom Zeitpunkt des Kompilierens: Leeren Sie nach einer Änderung an
einer translation.ts den Übersetzungs-Cache und die kompilierten Templates
(php bin/php/ezcache.php --clear-id=template,translation).
Verwandte Seiten
- Der Operator i18n für Designer
- Zeichenketten in Templates übersetzen
- Alle Template-Operatoren (generiert)
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.