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:

GDL
! Sprachparameter (Benutzerparameter) 
! int_language ! Typ: Integer
! 1 = Deutsch, 2 = Englisch, etc. 

Variante 1 – Benannte Einzelvariablen

Jeder zu übersetzende Begriff erhält eine eigene Variable:

GDL
! Deutsch 
IF int_language = 1 THEN 
    _durchgangsbreite = "Durchgangsbreite" 
    _durchgangshoehe = "Durchgangshöhe" 
ENDIF 
! Englisch 
IF int_language = 2 THEN 
    _durchgangsbreite = "Egress Width" 
    _durchgangshoehe = "Egress Height" 
ENDIF

Makroaufruf:

GDL
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_PARAMETERS deklariert werden

Variante 2 – Indexiertes Array

Alle Übersetzungen landen in einem zweidimensionalen Array:

GDL
! 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:

GDL
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 :

GDL
! -----------------------------------------------------------------------!
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:

GDL
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_PARAMETERS dict_words genügt