Grundprinzip
Bei Objekten für international tätige Firmen sind von Beginn an die Weichen für Mehrsprachigkeit zu stellen. Kernstück ist ein Auswahlparameter, der die aktive Sprache steuert:
! Sprachparameter (Benutzerparameter)
! int_language ! Typ: Integer
! 1 = Deutsch, 2 = Englisch, etc.
Variante 1 – Benannte Einzelvariablen
Jeder zu übersetzende Begriff erhält eine eigene Variable:
! Deutsch
IF int_language = 1 THEN
_durchgangsbreite = "Durchgangsbreite"
_durchgangshoehe = "Durchgangshöhe"
ENDIF
! Englisch
IF int_language = 2 THEN
_durchgangsbreite = "Egress Width"
_durchgangshoehe = "Egress Height"
ENDIFMakroaufruf:
CALL "translation_object.gsm" PARAMETERS RETURNED_PARAMETERS _durchgangsbreite, _durchgangshoehe- Vorteil: Sehr gute Lesbarkeit beim Einsetzen der Variablen im Script
- Nachteil: Hohes Scriptvolumen – jede Variable muss einzeln als
RETURNED_PARAMETERSdeklariert werden
Variante 2 – Indexiertes Array
Alle Übersetzungen landen in einem zweidimensionalen Array:
! Deutsch
IF int_language = 1 THEN
_translation[1][1] = "Durchgangsbreite"
_translation[1][2] = "Durchgangshöhe"
ENDIF
! Englisch
IF int_language = 2 THEN
_translation[2][1] = "Egress Width"
_translation[2][2] = "Egress Height"
ENDIF
Makroaufruf:
CALL "translation_object.gsm" PARAMETERS RETURNED_PARAMETERS _translation- Vorteil: Kompaktes Script, kurze Makro-Befehle
- Nachteil: Schlechte Lesbarkeit – aus
_translation[2][1]erschließt sich der Inhalt nicht
Hinweis: Bei vielen Begriffen empfiehlt sich eine thematische Sortierung und Kommentierung der Indizes, z. B. nach UI-Texten, VALUES-Einträgen, Beschriftungen etc.
Variante 3 – Dictionary (empfohlen)
Die sauberste und wartungsfreundlichste Lösung nutzt verschachtelte Dictionaries.
Das Übersetzungs-Makro (translation_object.gsm) enthält den DICT-Parameter dict_words und folgendes Master-Script :
! -----------------------------------------------------------------------!
DICT local
! -----------------------------------------------------------------------!
IF int_language = 1 THEN
local.de.aktuell = "aktuell?"
local.de.handbuch = "Handbuch"
local.de.bugs = "Bugs"
local.de.wuensche = "Wünsche"
ENDIF
IF int_language = 2 THEN
local.en.aktuell = "Up to date?"
local.en.handbuch = "Manual"
local.en.bugs = "Bugs"
local.en.wuensche = "Wishes"
ENDIF
! ---------------------------------------------------------------------- !
DICT dict_words
IF int_language = 1 THEN dict_words = local.de
IF int_language = 2 THEN dict_words = local.en
PARAMETERS dict_words = dict_words
!GOTO "Masterend"
END dict_words
! ---------------------------------------------------------------------- !Makroaufruf und Verwendung im Hauptobjekt, welches ebenfalls den DICT-Parameter dict_words enthält:
DICT local
CALL "translation_object.gsm" PARAMETERS int_language = int_language
RETURNED_PARAMETERS dict_words
! Verwendung im Script:
TEXT2 0, 0, dict_words.handbuch
TEXT2 0, 1, dict_words.wuensche- Lesbarkeit: Schlüsselname macht den Inhalt sofort klar:
dict_words.handbuch - Erweiterbarkeit: Neue Sprachen oder Begriffe ohne Strukturänderung hinzufügbar
- Wartbarkeit: Alle Übersetzungen zentral im Makro, Hauptscript bleibt unberührt
- Kompaktheit: Ein einziger
RETURNED_PARAMETERSdict_wordsgenügt