Für die Lokalisierung von Meldungen steht eine eigene Bibliothek zur Verfügung. Damit lassen sich Meldungen in der jeweils eingestellten Benutzersprache ausgeben.
Quelle: shareScriptDir/cm/serverCmds/lib/localizer.tcl
Verwendung
Nach dem Aufruf von
::localizer::new
stehen im aktuellen Namensraum die Kommandos localizer, localize sowie localizeWithLanguage zur Verfügung.
Mit localizer kann man die Zuordnung eines Schlüssels zu einer Meldung definieren. Hierbei können auch Platzhalter (im Beispiel: %version%) verwendet werden.
Beispiel
localizer addBulk de {
"word" "Wort"
"This is version %version%." "Das ist Version %version%."
"Permitted types: %types%" "Erlaubte Vorlagen: %types%"
}
Verwenden Sie zur Lokalisierung einen Aufruf nach dem folgenden Schema:
localize <key> ?substitutes?
Hierbei ist substitutes eine optionale Liste von Name-Wert-Paaren, die die Platzhalter in der Lokalisierungsmeldung ersetzen.
Ein Platzhalter ist ein in Prozentzeichen eingefasstes Wort. Optional können diesem Wort Konvertierungsfunktionen vorangestellt werden. Konvertierungsfunktion müssen in geschweifte Klammern eingefasst werden. Sie sind im Namensraum ::localizer::converter definiert.
Sofern keine Lokalisierung für einen Schlüssel gefunden wird, wird der Schlüssel selbst als Lokalisierung verwendet. Deswegen ist es empfehlenswert, als Schlüssel die Lokalisierung in der Standardsprache zu verwenden.
Beispiele
localize word
# => "Wort"
localize "This is version %version%." [list "%version%" "1.8"]
# => "Das ist Version 1.8."
localize "Permitted types: %types%" [list "%{and}{displayTitles objClass}types%" \
[list "weather" "news"]]
# => Erlaubte Vorlagen: Wetter und Nachrichten
Konvertierungsfunktionen
Konvertierungsfunktionen wandeln die zur Lokalisierung übergebenen Werte in eine geeignete Text-Repräsentation um. Die Funktionen können optional Parameter entgegennehmen. Im Lokalisierungsaufruf sind diese durch ein Leerzeichen vom Funktionsnamen und voneinander getrennt (im Beispiel oben der Parameter objClass für die Funktion displayTitles).
Folgende Konvertierungsfunktionen sind bereits definiert:
and: Wandelt die übergebene Liste mit einem lokalisierten “und” in Text um.or: Wieandmit “oder”.join: Wandelt die Werte in einen durch Kommas separierten Text um.displayTitlesclass: Wandelt die übergebenen Werte in ihre Beschreibungstexte um.classist dabei beispielsweiseattribute.displayTitleclass: WiedisplayTitles, nur dass hier lediglich ein Wert umgewandelt wird.
Außer auf den eigentlichen Platzhalter können Sie, abhängig von den Konvertierungsfunktionen, in der Lokalisierung mit #names noch auf die Ausgangswerte zugreifen.
localizer add de "Permitted types: %types%" "Erlaubte Vorlagen: %types%#names"
localize "Permitted types: %types%" [list "%{and}{displayTitles objClass}types%" \
[list "weather" "news"]]
# => Erlaubte Vorlagen: weather und news