Ein Programm - Mehrere Sprachen



  • Hallo,

    wie erreiche ich es, dass ich ein Programm mehrsprachig (durch Userwahl) gestalte ? Das Programm FlaskMPEG funktioniert beispielsweise so, dass in einem "lang"-Ordner mehrere Sprachen als Text-Files hinterlegt sind, im Programm wählt der User seine Sprache und alle Befehle, Menüs und Hinweis-Texte erscheinen in der gewählten Sprache ! Wie realisiert man dies am einfachsten über die API ? Hat da jemand eine Idee ? 😮



  • Jo, man könnte es z.B. so machen, dass man für jeden Text im Programm ne globale Variable hat und dann am Anfang des Programms einfach ne Funktion wie "Lade_Sprachdate_in_Variablen", die dann die Textdateien ausliest und entsprechen in die Variablen speichert. Im Programm benutzt man dann einfach diese Variablen. So würd's ich jedenfalls machen.

    cu





  • ich kann dir ja mal erzählen, wie ich das gemacht habe:

    1. die Strings werden sind in Stringtables als Ressource abgelegt.
    2. Je Sprache ein Tabelle, wegen der Übersichtlichkeit.
    3. Die Bezeichner hab ich manuell gesetzt, für Deutsch hab ich bei 1000 angefangen

    #define STRING1 1000
    #define STRING2 1001

    und

    STRINGTABLE
    {
    STRING1, "deutsch blabal1"
    STRING2, "deutsch blabla2"
    }

    4. Je Sprache hab ich dann einen Offset gewählt, der genug Platz für Erweiterungen lässt. War ein kleines Projekt, 100 war da ausreichend.

    5. Stringtable für die 2. Sprache:
    STRINGTABLE
    {
    STRING1+100, "englisch blabal1"
    STRING2+100, "englisch blabla2"
    }

    6. Stringtable für die 3. Sprache:
    STRINGTABLE
    {
    STRING1+200, "französisch blabal1"
    STRING2+200, "französisch blabla2"
    }

    6. im eigentlichen Proggi wird eine globale Varialbe je nach gewünschter Sprache mit dem entsprechenden Offsetwert gefüllt

    int iLangSelect;
    iLangSelect = 0; //deutsch
    iLangSelect = 100; //englisch
    iLangSelect = 200; //französisch

    7. die Strings werden dann bei Bedarf einfach aus dem Ressourcenbereich mit
    LoadString() geladen. Als ID der Bezeichner+Variable (z.B. STRING1+iLangSelect)

    Funzt prima.



  • Das mit der Stringresourcen-Methode ist nicht schlecht, nur leider befindet sich die Sprache im Quellcode. Ich möchte das ich eine weitere externe Sprachdatei habe, die die Dialog, Menü-ID´s bezeichnet, so dass sich jeder, wenn er will, eine eigene Übersetzung des Programms zusammenbasteln kann. Zwar habe ich hier schon (dank Euch) viel gehört und auch etwas von INI-Dateien nachgelesen, nur wie bringe ich das zur Laufzeit meinem Programm bei ??? Eine Sprachdatei des Programmes "FlaskMPEG" sieht beispielsweise so aus:

    ...

    // 0 => LANGUAGE ID
    #0 # "German"

    #100# "&HalbDrei"
    #101# "&Öffnen"
    #102# "&Beenden"

    #110# "&Optionen"
    #111# "&Ausgabeformat-Optionen"
    #112# "&Allgemeine Pojekt Optionen ( Film-Export-Optionen )"
    #113# "&Wähle Ausgabeformat"
    #114# "&Sprache"

    #120# "&Start ..."
    #121# "&Player"
    #122# "&Starte Umwandlung"

    #123# "&Über"

    ...

    Sieht das nicht wie ein Resource-Skript-ID Abkürzungsgeplenkel aus ????

    Was meint ihr wie lädt der Author zur Laufzeit diese Bezeichner ein ?



  • vielleicht mit
    CreateFile()
    ReadFile()
    CloseHandle()
    ????? 😉



  • oder fopen(), fread(), fclose(). 😉
    Oder zur not benutzt du die Funktionen, die normalerweise für die ini-Files da sind. Ich meine im FAQ ist nen Thread drin.



  • Ich würde eine Dll erstellen und dort alle sprachenabhänigen Resourcen reinlegen. (Dialoge, Menüs, Bitmaps...)

    Die auserwählte Sprachen-Dll mit LoadLibraray laden.
    Das zurückgegebene Handle kannst du dann bei allen Fkt. angeben (DialogBoxParam, LoadString, LoadMenu, LoadImage, ...)

    Also z.B. globale Variable HINSTANCE resInst; und diese dann bei allen Sprachenabhänigen Resourcen-zugriffen nutzen...

    [ Dieser Beitrag wurde am 30.10.2002 um 14:49 Uhr von Nemesyzz editiert. ]


Anmelden zum Antworten