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.
PeterW, 2002-04
matthes, 2004-04