TTranslator: (Übersetzung/internationalisation)
Übersicht

![]() |
XeresModeratorBetreff: TTranslator: (Übersetzung/internationalisation) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Worum geht es hier?
TTranslator ist eine simple, kleine Klasse, mit der man ein Spiel oder eine Anwendung übersetzen bzw. internationalisieren kann (letzteres umfasst etwas mehr als Wörter allein, aber seien wir nicht so pingelig). Im Prinzip handelt es sich um String Ersetzungen - keine Zauberei. Code (mit Beispiel) Bevor ihr neue Dateien anlegt, um auszuprobieren, ob und wie es läuft, nehmt dies kleine Archiv (107 kb) mit fertig kompilierten Beispielen und allen nun folgenden Dateien. BlitzMax: [AUSKLAPPEN] SuperStrict de.txt Code: [AUSKLAPPEN] # Deutsche Version
{Hello} {Hallo Welt} {Fun} {Viel Spass!} {New} {Neues Spiel} {End} {Spiel Beenden} {key} {(Taste)} en.txt Code: [AUSKLAPPEN] # Englische Version
{Hello} {Hello world} {Fun} {Have fun!} {New} {New Game} {End} {End Game} {key} {(Press any key)} Debug Ausgabe: Code: [AUSKLAPPEN] Jeder Key
wie z.B. Hallo Welt wird einfach ersetzt! case sensitiv! => $HELLO$ Also: Viel Spass! [Neues Spiel], [Spiel Beenden] Jeder Key wie z.B. Hello world wird einfach ersetzt! case sensitiv! => $HELLO$ Also: Have fun! [New Game], [End Game] i18n/en.txt i18n/de.txt End => Spiel Beenden Fun => Viel Spass! Hello => Hallo Welt New => Neues Spiel key => (Taste) (Taste) Release Ausgabe: Code: [AUSKLAPPEN] Jeder Key
wie z.B. Hallo Welt wird einfach ersetzt! case sensitiv! => $HELLO$ Also: Viel Spass! [Neues Spiel], [Spiel Beenden] Jeder Key wie z.B. Hello world wird einfach ersetzt! case sensitiv! => $HELLO$ Also: Have fun! [New Game], [End Game] (Press any key) Dokumentation Function Create:TTranslator(_limit:String[]) Erzeugt ein neues TTranslator Objekt, das keys zwischen _limit[0] und _limit[1] (zwei beliebige Strings an Anfang und Ende) ersetzt. _limit sollte immer die Länge 2 haben, z.B. ["(*", "*)"] Method Add(_file:String, _limit:String[]) Lädt neue Übersetzungsdefinitionen aus einer Datei. _file ist der Dateipfad, _limit ist wiederum ein Array mit zwei Elementen, die als Begrenzung für die Wortpaare in der Datei dienen. Es wird pro Zeile ein Wortpaar erwartet, andere Zeilen werden ignoriert. Das erste Element ist der Key, nach dem gesucht wird, der zweite der Wert, mit dem ersetzt werden soll. Bereits registrierte Keys werden einfach und ohne Warnung überschrieben. Keys sind case sensitiv. Method Do:String(_source:String) Nimmt _source, ersetzt alle bekannten keys und liefert das Ergebnis zurück. Method Clear() Falls es nötig sein sollte, werden hiermit alle Wörter gelöscht. Method GetFilesLoaded:String[]() debug only Im Debugmodus schreibt die Klasse mit, welche Dateien eingeladen wurden. Hiermit bekommt ihr eine Liste zum loggen. Method GetPairsLoaded:String[]() debug only Gibt im Debugmodus alle Schlüssel mit den zugehörigen Werten zurück. Sonstiges Wie schnell ist das ganze? Ich habe keine Ahnung. Stringverarbeitung ist vergleichsweise langsam, große, lange Texte würde ich also wenn möglich cachen, wenn man Performance Einbußen bemerkt. Ich brauche aber andere Bilder und Sounds anstatt Strings! Was kann man da machen? Man kann ganz einfach die Pfade anpassen: "/gfx/%LANG%/Bild.png" oder "/gfx/Bild_%LANG%.png" lassen sich zu "/gfx/de/Bild.png" oder "/gfx/Bild_de.png" Übersetzen. Warum sollte ich mir die Mühe machen? Es ist immer nett an die zu denken, die kein englisch oder deutsch sprechen. Wenn er mit euren spielen möglichst die meisten Spieler erreichen wollt, behaltet die Möglichkeit im Hinterkopf. Warum hat vorher Niemand dran gedacht? Ich glaube, Kernle 32DLL und Jolinah waren da einen Tick schneller. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Xeres,
Das sieht ganz ordentlich aus. Leider muss man auch schon bei (einigen) kurzen Texten cachen. Aus eigener Erfahrung kann ich dir nämlich sagen, dass es die Leistung extrem drosselt, wenn man zum Beispiel einen Text anzeigt, und dafür in jedem Frame eine TMap bemühen muss. Aber die Texte die man benötigt zu cachen sollte wohl das geringste Problem sein. Ansonsten: Gute Arbeit. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group