Geschrieben von kaini am 29.04.2006, 15:32

Windapple’s Translatetool

Hier will ich das Langtool von Windapple beschreiben.
Downloadlink:
http://www.gm-d.de/board/jgs_db.php?action=show&eintrags_id=50&katid=8&sid=
Ich gebe keine Garantie ob das die Effizientesten Methoden sind!

Wir öffnen die Datei "LanguagePack.gml" mit dem Editor:

#define ls_count
/*
argument0 = Stringrumpf, der gezählt werden soll

Zählt die Anzahl von Strings mit einem bestimmten Prfäfix. Sehr nützlich, wenn die Übersetzungen
verschiedene Anzahlen von "Textboxen" für eine vorgegebene Nachricht benötigen.
*/

var i;

i=1;

while ds_map_exists(global.langpack1223,argument0+'_'+string(i))
i+=1;

return i-1;
#define lsg
/*
Skript Langstring_get, benutze es um den Text einer Sprache zu bekommen.

argument0 = Schlüssel des gewünschten Strings

Gibt den Sprachtext zurück.
*/

return ds_map_find_value(global.langpack1223,argument0);
#define lp_load
/*
argument0 = einzulesendes Sprachpaket (string)

Dieses Skript liest eine Sprachdatei in eine Map im Speicher ein.
*/

var file_id, tmp_string, div_pos;

file_id=file_text_open_read(argument0);
global.langpack1223=ds_map_create();
file_text_readln(file_id);

while (!file_text_eof(file_id)) {

tmp_string=file_text_read_string(file_id);
if (tmp_string!='') {
div_pos=string_pos('=',tmp_string);
ds_map_add(global.langpack1223,string_copy(tmp_string,1,div_pos-1),string_copy(tmp_string,div_pos+1,string_length(tmp_string)-div_pos));}
file_text_readln(file_id);
}

file_text_close(file_id);

Diese zerstückeln wir in diese 3 Scripte:
1. scr_lang_zaelen

/*
argument0 = Stringrumpf, der gezählt werden soll

Zählt die Anzahl von Strings mit einem bestimmten Prfäfix. Sehr nützlich, wenn die Übersetzungen
verschiedene Anzahlen von "Textboxen" für eine vorgegebene Nachricht benötigen.
*/

var i;

i=1;

while ds_map_exists(global.langpack1223,argument0+'_'+string(i))
i+=1;

return i-1;

2. scr_lang

/*
Skript Langstring_get, benutze es um den Text einer Sprache zu bekommen.

argument0 = Schlüssel des gewünschten Strings

Gibt den Sprachtext zurück.
*/

return ds_map_find_value(global.langpack1223,argument0);

3. scr_lang_fopen

/*
argument0 = einzulesendes Sprachpaket (string)

Dieses Skript liest eine Sprachdatei in eine Map im Speicher ein.
*/

var file_id, tmp_string, div_pos;

file_id=file_text_open_read(argument0);
global.langpack1223=ds_map_create();
file_text_readln(file_id);

while (!file_text_eof(file_id)) {

tmp_string=file_text_read_string(file_id);
if (tmp_string!='') {
div_pos=string_pos('=',tmp_string);
ds_map_add(global.langpack1223,string_copy(tmp_string,1,div_pos-1),string_copy(tmp_string,div_pos+1,string_length(tmp_string)-div_pos));}
file_text_readln(file_id);
}

file_text_close(file_id);

Diese 3 Skripts kommen gleich in unser Spiel.

Jetzt öffnen wir die *.exe Datei.
Dort auf "Datei -> Neu Erstellen".
In diesem bekannten Fenster Speicherort, Dateiname und co. eingeben.

Jetzt gebt ihr bei Schlüssel den Variablenname ein, und bei Wert den Text (alles noch auf Deutsch). Dann auf hinzufügen.
Bei mir sieht das in etwa so aus:
(schlüssel = wert)

start=Start
score=Score
score_online=Score - Online
beenden=Beenden
f1_hilfe=F1 - Hilfe
score:=Score:
muenzen:=Münzen:
level:=Level:
leben:=Leben:

So, jetzt klickt ihr auf "Datei -> Speichern" und dann "Übersetzung -> Neu erstellen"
Alle fett gedruckten Schlüssel sind noch nicht übersetzt.
Jetzt klickt ihr Schlüssel für Schlüssel durch und schreibt in das Feld "Übersetzter Wert" z. B. die englischen Worte hin.
Wieder: "Übersetzung -> Speichern".

Ab ins Spiel, vergewissere dich das Spiel und Übersetzungsdaten im selben Ordner liegen.

Im System/Controller/Was_auch_immer - Objekt kommt ins „Create event“:

script_execute(scr_lang_fopen,"DATEINAME")

Ob man die Englische oder die Deutsche Datei braucht kann man mit z.B. einer Abfrage als String in einer Variable weitergeben...
und sonst wird aus:

draw_text(50,50,TEXT1); //Text schreiben
draw_text(50,100,TEXT7); //...
/* u.s.w. */

das:

draw_text(50,50,script_execute(scr_lang,"SCHLÜSSELNAME FÜR TEXT 1")); //Text schreiben
draw_text(50,100,script_execute(scr_lang,"SCHLÜSSELNAME FÜR TEXT 7")); //...
/* u.s.w. */

Bewertung Anzahl