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
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 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
: Wie and
mit “oder”.join
: Wandelt die Werte in einen durch Kommas separierten Text um.displayTitles
class
: Wandelt die übergebenen Werte in ihre Beschreibungstexte um. class
ist dabei beispielsweise attribute
.displayTitle
class
: Wie displayTitles
, 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