Strings für verschiedene Sprachen verwalten



  • Hallo,

    ein Programm von mir soll nun mehrsprachig werden. So daß der Benutzer die Sprache selber einstellen kann.

    a) StringTables, wobei die Software auf einen davon zugreift
    b) eigene Ablage in einer Datendatei

    Bis jetzt sind alle Strings hard gecoded.

    Es geht also um alle Meldungen und Controls (www.skittel.de/p2s.php)

    Wie handelt Ihr das in Euren Projekten?

    Stefan



  • Webseiten: Datenbank.
    Anwendungen (zum Installieren und so): entweder einfaches Textfile oder auch kleine Datenbank (sqlite oder so).


  • Mod



  • Martin Richter schrieb:

    http://www.mpdvc.de/artikel/MultilingualeProgramme.htm

    Hallo Martin, ich möchte aber ungern das durch das builden realisieren. Das erschein mit zuviel Arbeit wenn sich ein Dialog ändern.

    Ich würde lieber auf eine interne oder externe StringTable zurückgreifen.

    Der 2. Teil des Projektes ist ein Dienst. Da gibts also nur Textausgaben für das Protkoll.

    Stefan



  • Du hast dir doch schon selber ne Antwort gegeben, daher weiß ich nicht, warum du da noch Fragen hast:

    interne oder externe StringTable

    Extern: Datei
    Intern: Hardcodiert *brrr*

    Also ne Textdatei kann so aussehen:

    lang_de.txt

    menu.speichern=Speichern
    menu.beenden=Beenden
    

    lang_en.txt

    menu.speichern=Save
    menu.beenden=Quit
    

    Und dann wird die Datei halt am Programmstart je nach eingestellter Sprache gelesen und in eine std::mapstd::string,std::wstring geschrieben.
    Gelesen wirds dann so:

    std::wstring str = mymap["menu.speichern"];
    

  • Mod

    Ich sehe das nicht problematisch. Wir haben direkt RC-WinTrans in den Build Projekt eingebaut. Dadurch werden die sprachlich abweichenden DLLs automatisch erzeugt. *

    Mit Texttabelen alleine wirst Du nicht hinkommen (außer bei einem Service).
    Das Problem ist, dass Du mit "nur Textänderungen" nicht hinkommst. Sobald Du Sprachen wie Türkisch, Ungarisch etc. hast musst Du die Dialogpositionen anpassen.
    Vor allem bei vorgestellten und nachgestellten Textten.

    * Bei uns wird alles in Englisch entwickelt. Die anders sprachlichen Oberflächen werden nachgepflegt und fliessen erst wieder in den Final-Build ein.
    Das geht schon ohne großen Aufwand.



  • Martin Richter schrieb:

    Mit Texttabelen alleine wirst Du nicht hinkommen (außer bei einem Service).
    Das Problem ist, dass Du mit "nur Textänderungen" nicht hinkommst. Sobald Du Sprachen wie Türkisch, Ungarisch etc. hast musst Du die Dialogpositionen anpassen.
    Vor allem bei vorgestellten und nachgestellten Textten.

    Na, das ist aber eindeutig ein Defizit von der MFC das die bis heute immer noch kein Layout-Management (oder auch Sizer genannt) beherrcht. 👎 Obwohl das nun wirklich einfache Algorithmen sind.



  • Beides hat so seine Vor- und Nachteile

    bei externen Dateien habe ich keine Kontrolle beim Build ob ein Eintrag fehlt.
    Außerdem gibt es die Möglichkeit, dass Jemand die Datei ändernt und dann bestimmte Texte nicht mehr erscheinen oder passen.

    Die Strings würde ich wegen der Parameter mit einer eigenen Routine aufrufen.
    "Die Größe der %1 Dateien beträgt %2".
    Hierbei macht es keinen Unterschied wie die Sprache aufgebaut ist.

    Dein (Martin) Vorschlag paßt natürlich immer für alle Sprachen, hat aber auch den größten Aufwand...

    Ich glaube ich werde erstmal auf eine externe Sprachdatei zurückgreifen. Das hat in diesem (Freeware) Projekt den Vorteil, dass evtl. einige Personen mir solche Dateien frei Haus liefern 🙂

    Vielen Dank auf alle Fälle. Ich werden Deinen Ansatz garantiert nochmal verwenden.

    Stefan


Anmelden zum Antworten