Die Sprachdateien (Language Files) sind im den allgemein Bekannten INI datein nachempfunden.
Warum dies so ist lässt sich leicht begründen, so können INI datein ohne besondere kenntnisse
und/oder Software bearbeitet und damit übersetzt werden, zum anderen lassen sich INI datein
auch gut mit anderen Programmiersprachen lesen, so könnte im ramen eines "remote launchers"
zum Beispiel in C einfach ein wert mit iniGetPrivateString(..) geholt werden.
Warum kein XML? Weil XML zwar gleichermassen geeignet wäre, jedoch keine besonderen fähigkeiten benötigt
werden, und INI Datein somit völlig ausreichend sind, des weiteren benötigt man zum Bearbeiten von
XML Datein gewisse grundkenntnisse, über welche villeicht nicht alle evtl. in frage kommenden übersetzer
der Software verfügen. Ausserdem ist das Parsen von INI Datein schneller als von XML Datein - Warum also den
Hammer nehmen wenn es auch eine Nagelfeile tut?
Die dateien werden wie in RFC 1766 vorgeschlagen benannt.
Für Deutsch wie in deutschland gesprochen wird zum Beispiel de-DE benutzt, für deutsch generell nur de.
Für English wie man es in Japan spricht (Auch wenn es unwarscheinlich ist) könnte man en-JP benutzen.
Ich hoffe das grundsystem des aufbaus ist klar. Selbstdefinierte sprachen können mit einem x beginnen, wenn also
die nicht offizielle sprach Borg verwendet werden soll, kann zum beispiel x-Borg benuzt werden.
Für nähere details zu diesen Codes siehe RFC 1766.
Die dateiendung ist *.ini, die deutsche datei für Deutschlang könnte also "de-DE.ini" heißen, die generell deutsch "de.ini" usw.
Bei Vorkompilierten datein ist die endung nicht *.ini sondern *.lng.
Wenn zwei datein, eine *.ini und eine *.lng mit gleichem namen existieren wird von LanguageSys automatisch die Vorkompilierte *.lng datei benutzt.
Die Language dateien (Nicht vorkompilierte!) sind im Stiel von Initialisierungsdateien (INI-Dateien) aufgebaut,
jedoch müssen alle Werte in anführungszeichen (") geschrieben werden.
In Initialisierungsdateien werden einzelne Sektionen benannt, dannach werden unterhalb von diesen Sektionen werte zugewiesen,
Sektionen werden durch eckige klammern ([ und ]) gekennzeichnet, zwischen diesen wird der name der Sektion geschrieben.
Der Name der sektion ist Caseinsensitiv, was bedeutet das gross/kleinschreibung keine rolle spielt, jedoch sollte er immer klein geschrieben werden.
Werte werden zugewiesen, indem nach dem beginn einer Sektion eine zeichenfolge (regex: `/\w/i´) gefolgt von einem gleichheitszeichen (`=´) und dem Wert (Beliebige zeichenfolge (Ohne \r und \n) eingeschlossen in anführungszeichen).
Beispiel:
[Sektion1] ;Beginn der ersten Sektion..
Hier sind auch gleich zwei weitere interessante features erkennbar,
zum ersten werden hier in einer Zeile leerzeichen vor dem = benutzt, oder gar in dem string "f_A z" in zeile 3,
werden jedoch alle gleich bewertet, das liegt daran, dass vor und nach dem = alle leerzeichen bis zum ersten anderen zeichen ignoriert werden.
Das "f_A z" als "f_a_z" angesehen wird liegt an der behandlungsroutine, hier werden die leerzeichen automatisch durch unterstriche erstezt und alles wird kleingeschrieben (Caseinsensitive), dies ist nämlich vorraussetztung für das spätere verarbeiten als variable.
foo = "bar" ;Weist "foo" den wert "bar" zu.
f_A z ="The BAZ";Weist "f_a_z" den wert "The BAZ" zu
[Sektion2] ;Beginn einer zweiten sektion..
foo= "bar" ;Weist "foo" den wert "bar" zu.
leer= ;"leer" ist leer..
Das zweite interessante sind die Kommentare, kommentare werden mit ";" eingeleitet und können überall stehen. Sobald ausserhalb von zwei anführungszeichen (") ein ; auftauchtm wird der rest der zeile ignoriert.
Wenn ";" das erste zeichen in einer Zeile ist, wird die ganze zeile so wie eine leere zeile ignoriert.
Zu beachten ist nun nurnoch, das Language-Dateien nur zwei sektionen nach werten durchsuchen, dass sind [info] und [lang].
Unter info könne werte die als informationen zu der Sprachdatei dienen festgelegt werden.
Im moment werden folgende werte unterstützt: