Sprachanpassung
Clonk ermöglicht es, Unterstützung für mehrere Sprachen in Objekte und Szenarien zu integrieren. Dazu können jeweils bestimmte Elemente sprachabhängig überladen werden.
Anpassbare Elemente
- Title.txt
-
Die Komponente Title.txt kann in Szenarien und Objektordnern verwendet werden, um den Titel für verschiedene Sprachen zu definieren.In jeder Zeile wird dabei ein Sprachkürzel dem gewünschten Titel vorangestellt. Beispiel:
DE:Angriff der Killerwipfe US:Attack of the Killer Wipfs
In externen Sprachpaketen sollte an der entsprechenden Verzeichnis-Position eine Komponente Title*.txt stehen (wobei * durch das entsprechende Sprachkürzel ersetzt wird), die dann den Titel für die jeweilige zusätzliche Sprache enthalten kann. Beispiel für den Inhalt einer TitleFR.txt:FR:Les wipfes moerderesque attaquent
Ist ein Eintrag für die gewählte Sprache vorhanden, so wird der Title-Eintrag aus der Scenario.txt durch den entsprechenden Namen überschrieben.Wichtig: Es sollten keine Anführungszeichen oder Sonderzeichen verwendet werden. - Desc*.txt
-
To customize the description of a scenario language dependant, a Desc*.txt in the scenario has to be present. (The * is a placeholder for the language abbreviation)
- Script.c, Teams.txt
-
Um sprachabhängig Texte in Scripts einzufügen, kommen sogenannte String Tables zum Einsatz. Im Script wird dazu, anstatt des Textes ein Verweis auf einen Eintrag einer solchen String-Tabelle eingefügt. Die Tabelle muss sich im selben Verzeichnis wie das darauf verweisende Script befinden und den Namen StringTbl*.txt haben (wobei * für den Sprachcode steht).Der Verweis im Script besteht aus einem Namen für den zu verwendenden String (String-ID), der mit Dollarzeichen ("$") als ein solcher Stringtabellenverweis gekennzeichnet ist.
Beispiel:local Name = "$NameGPS$";
Setzt den Namen einer Objektdefinition. Siehe properties. An die Stelle des Platzhalters NameGPS wird der Text aus der String-Tabelle eingefügt.
Ein weiteres Beispiel:protected func Activate(object caller) { [$DescActivate$] caller->Nachricht("$MsgYourPosition$ %d / %d", caller->GetX(), caller->GetY()); }
Hier werden zwei Strings mit den Namen "DescActivate" und "MsgYourPosition" eingebunden.Eine passende StringTblDE.txt (für deutsche Sprache) könnte folgendermaßen aussehen:# Beschreibungstexte und Name NameGPS=Positionierungssystem DescActivate=Position bestimmen # Nachrichten MsgYourPosition=Deine Position ist:
Im Objekt hätte also Activate den Beschreibungstext "Position bestimmen" und würde z.B. die Nachricht "Deine Position ist: 252 / 352" ausgeben. In der Stringtabelle wurden hier zwei Kommentare eingefügt. Sie beginnen mit einem '#'-Zeichen und werden ignoriert.Zur Vollständigkeit - eine passende StringTblUS.txt:# Description texts and name NameGPS=Positioning system DescActivate=Tell position # Messages MsgYourPosition=Your position is:
Hier würden also z.B. die Nachricht "Your position is: 252 / 352" erzeugt, wenn Englisch als Sprache eingestellt ist.