WebTML-Labels sind ein Mechanismus um WebTML-Design mehrsprachig gestalten zu können.
Der Label-Mechanismus sieht vor, dass für Textbausteine die in mehreren Sprachen verfügbar sein sollen, Labels hinterlegt werden. Dies sind Textschlüssel für welche in unterschiedlichen Sprachen unterschiedliche Textbausteine vorliegen. So kann ein Labelschlüssel "user" sowohl als englischer Textbaustein "User" als auch als deutscher Textbaustein "Benutzer" vorliegen.
Labels werden in Java-Properties-Dateien hinterlegt. Dies sind
standardisierte Dateien die pro Zeile ein Label für eine spezielle
Sprache definieren. Die Zeile beginnt mit dem Labelschlüssel und wird
nach einem Gleichheitszeichen mit dem Textbaustein in einer Sprache
fortgesetzt:
toc=Kapitelverzeichnis
tocLink=Kapitelverzeichnis einblenden
Eine Besonderheit von Java-Properties-Dateien ist, dass sie IMMER in der Textkodierung "ISO-8859-1" kodiert werden müssen. Zeichen die in diesem Zeichensatz nicht vorkommen werden über die Notation "\ u
XXXX" dargestellt (sog. "Unicode Escapes"), wobei XXXX für den hexadezimalen Unicode-Zeichencode des gewünschten Zeichens steht.
Das Befehlszeilen-Kommando "native2ascii" des Java-Development-Kits kann benutzt werden um Properties-Dateien einer beliebigen Kodierung in ISO-8859-1 mit Unicode-Escapes umzuwandeln. Mehr Informationen sind in den
Javadocs zum Objekt "java.util.Properties" verfügbar.
Diese
Label-Dateien werden in den Datei-Containern des WGA Designs hinterlegt, so genannten
Label-Container.
Ein Label-Container beinhaltet die Properties-Dateien zu einer Sprache.
Sein Name beginnt normalerweise mit "labels", dem nach einem
Unterstrich der Sprachcode der Sprache angefügt wird, die der Container
enthält. Dementsprechend gibt es zu jeder Sprache, in welchem ein
Design verfügbar sein soll, einen Label-Container mit dem gleichen
Basisnamen. Des weiteren kann ein Container mehrere Label-Dateien
unterschiedlichen Namens enthalten:

Da
sowohl die Namen der Label-Dateien als auch jene der Label-Container
variieren können hat man, zusammen mit dem eigentlichen Labelschlüssel
eine dreistufige Kategorisierung um ein Label zu adressieren:
- Name des Label-Containers (ohne Sprachcode), Default: "labels"
- Name der Label-Datei (ohne Suffix ".properties"), Default: "general"
- Labelschlüssel
Will man nun Labels für ein WGA Design erfassen so geht man wie folgt vor:
- Man legt Label-Container für jede Sprache an, in welcher das Design verfügbar sein soll
- In diesem Label-Containern legt man Label-Dateien an. Es werden Label-Dateien desselben Namens in allen Containern angelegt, z.B. in allen Containern "general.properties"
- In diesen Label-Dateien definiert man zu den Labelschlüsseln Textbausteine, und zwar in der Sprache auf deren Sprachcode der Name des aktuellen Label-Containers endet, also grundsätzlich deutsche Textbausteine in "labels_de", englische Bausteine in "labels_en" usw.
WebTML-labels werden über den Tag <tml:
label> in ein WebTML-Design eingebunden. Hier kann die dreistufige Adressierung von Labels über die Attribute
container,
file und
key vorgenommen werden:
<tml:label container="labels" file="general" key="toc"/>
Werden für "container" und "file" die Defaults benutzt so können die entsprechenden Attribute auch weggelassen werden.
<tml:label key="toc"/>
Andere Funktionalitäten um auf Labels zuzugreifen sind:
Wird ein Label über <tml:label> angezeigt, so sucht WGA die unter den Sprachen in welchen das Label definiert ist eine geeignete aus. Dies geschieht über den folgenden Prozeß:
- Grundsätzlich:
Wird ein Label zu einem Sprachkürzel gesucht, welches die
Sprachvariation einer Basissprache bezeichnet (z.B. "en_us" für
US-amerikanisches Englisch), und das Label wird nicht zu dieser
Variation gefunden, so fährt WGA fort das Label in der Basissprache zu
suchen (z.B. "en" bei "en_us") bevor ein weiterer Suchschritt
eingeleitet wird.
- Liegt das gewünschte Label in der bevorzugten Sprache des WGA-Benutzers vor, so wird dies angezeigt
- Liegt
das Label in einer der Locale-Sprachen vor, welche der Browser des
Benutzers als akzeptierte Sprachen übermittelt hat, so wird dieses
angezeigt
- Liegt das Label in der Default-Sprache der Datenbank vor, so wird dieses angezeigt
- Liegt
das Label in keiner dieser Sprachen vor, so wird der Label-Schlüssel
mit einem "#" als Präfix ausgegeben, um dem Designer anzuzeigen dass
dieses Label noch angelegt werden muss
Label können dynamische
Parameter enthalten.
Parameter sind spezielle Textstrecken innerhalb eines Labels, deren
Inhalt nicht vordefiniert ist, sondern bei jeder individuellen Nutzung durch den <tml:label>-Tag (oder andere
Label-Ermittlungsfunktionen) bestimmt und automatisch eingesetzt
wird. So wird es möglich dasselbe Label mit unterschiedlichen
Detailinformationen zu versehen.
Die Parameter, die ein Label
empfangen kann, werden bei der Definition des Labels mitdefiniert,
indem als Platzhalter die Notationen {1} bis {5} verwendet wird:
cannotfind=Kann das Dokument mit dem Schlüssel {1} nicht finden!
Bei
der Verwendung des Labels gibt der <tml:label>-Tag den anstelle
des Parameters zu verwendenden Text als Attribut "param1" bis "param5"
an, z.B.:
<tml:label key="cannotfind" param1="home"/>
Was dann zur Ausgabe führt:
Kann das Dokument mit dem Schlüssel home nicht finden!
Die Platzhalter von Label-Parametern, deren Wert bei der Verwendung des Labels nicht angegeben wird, werden bei der Ausgabe entfernt.
Diese Funktionalität ist auch bei der TMLScript-Methode
this.label() verfügbar.