Update 05.11.2024
Es ist wichtig, dass man DS Listen nach dem Auslesen wieder löscht oder, wenn man sie wiederverwendet, global macht und dann nur 1 mal erstell. Ansonsten füllt sich ganz schnell der Arbeitsspeicher. Code Beispiel wurde angepasst.
Update 31.10.2024
Das Script funktioniert wie erwartet. Allerdings sollte man es nur im Erstellen Event verwenden, da die Suche durch die DS Liste in jedem Frame wie bei Step oder GUI Zeichnen, nicht performant ist.
Ich übersetze gerade Periodicity für die Demo und Vollversion und habe mir dieses Script ausgedacht.
Ich nutze DS lIsten und maps um die unterschiedlichen Übersetzungen zu halten und später finden zu können.
global.language_text = ds_list_create();
// the script for your init object
function load_translation() {
ds_list_clear(global.language_button);
ds_list_clear(global.language_text);
get_button_translation(global.language_button);
get_text_translation(global.language_text);
}
// the get function you call to get a token
function get_translation(_search, _type, _lang = global.language){
var _translation = find_translation(_type);
var _return = "";
for (var _i = 0; _i < ds_list_size(_translation); _i++) {
var _value = ds_list_find_value(_translation, _i);
if (_value[? "token"] == _search) {
_return = _value[? _lang];
break;
}
continue;
}
return _return;
}
function find_translation(_type) {
switch (_type) {
case "button":
return global.language_button;
case "text":
default:
return global.language_text;
}
}
function get_button_translation(_translation_list) {
ds_list_add(_translation_list, set_translation("button_game_start", "Start EN", "Start DE"));
}
function get_text_translation(_translation_list) {
ds_list_add(_translation_list, set_translation("text_intro_headline", "This is a headline EN", "Dies is eine Überschrift DE"));
ds_list_add(_translation_list, set_translation("text_intro_text", "This is text EN", "Dies is ein Text DE"));
}
function set_translation(_token, _en, _de) {
var _map = ds_map_create();
ds_map_replace(_map, "token", _token);
ds_map_replace(_map, "en", _en);
ds_map_replace(_map, "de", _de);
// add more
return _map;
}
Ich versuche das Script mit einem Beispiel in den Gamemaker Marktplatz zu bringen. Mal sehen wie das klappt.
Schreibe einen Kommentar