Multilingualität



  • ODer geh auf torry.net und lad die das janlanguage runter. Da kannst du die Sprachen per .lang ändern und der User kann dann auch hin, weitere Sprachen hinzubinden...



  • Danke F98, so funktionierts einwandfrei 🙂



  • Ejo. Bidde. 😃



  • Jetzt hab' ich doch noch eine Frage, wie wechsle ich dann von einer Sprache zur anderen zur Laufzeit? Müssen alle Sprachen im selben File (*.rc) platziert werden?



  • Der Translation Manager beim BCB erstellt für jede Sprache in der Regel ein extra Projekt (z.B. Unterverzeichnisse für Deutsch "DEU", Englisch USA "ENU" usw.). Wie man einem Prg. zur Laufzeit beibringt eine andere Resource zu laden und alle Strings auszutauschen ... hm 😕

    Vielleicht wissen die andern Experten hier was genaueres.



  • Also der BCB hat bei mir gar kein Unterverz. erstellt... *hmm*
    Ich habe mein Test-Projekt mal unter www.rideon.ch/public/language test.zip ztur Verfügung gestellt.Vielleicht kannst du s da was ändern... *who knows*



  • 1. __pmfs_strings_rh in __prgstrings_rh umbenennen
    2. Zum Translation Manager: siehe meine Seite unter "Multilanguage Applikationen"



  • Wo steht denn __pmfs_strings_rh ?



  • *nachobenschieb*



  • Um deine Lösung mal fertig zu mache. Siehe mein Post oben "<DJ BlackEagle>":
    ODer geh auf torry.net und lad die das janlanguage runter. Da kannst du die Sprachen per .lang ändern und der User kann dann auch hin, weitere Sprachen hinzubinden...



  • für __pmfs_strings_rh siehe *.resourcen-header Datei ganz oben *ditsch* 🙄



  • @dj blackeagle

    warum denn immer auf krampf fremde komponenten verwenden? so lernt man doch nix beim programmieren!



  • Ich hab mir stumpf ne Paradoxtabelle mit den ganzen Sprachen erstellt(jede zeile ein Wort, so 5000 insgesamt, und für jede Sprache ne Spalte), nen vernünftigen Editierer dazu gebaut und die dann mit dem Programm verdratet.

    Ich hatte da noch keinen Ärger damit, kann innerhalb von 1 Sekunde die Sprache wechseln und wenn mal eine Sprache dazukommen soll klappt das ohne das ich was dazu beitragen muss.



  • Wieso muss man dazu mit resourcen arbeiten?
    Reicht es nicht, wenn ich die Strings via #define in irgendeinem header ablege und dann die verschiedenen Projekte kompiliere?
    Oder noch anderster: einfach eine INI auslesen zu beginn?



  • geht schon, machen auch viele........ nur wird irgendwann zuviel Arbeit.
    Bei Programmen mit wenig Text wie Winamp oder so würd das ohne weiteres gehen, aber bei mehr Text produziert der Übersetzer mehr Fehler als er Worte übersetzt oder weigert sich gleich ganz 😛



  • ich würds anders machen.

    1. ne Datei erstellen die in etwa so aussieht:

    Parent ; Control ; Deutsch ; Englisch  ; Französisch ; 
    -------------------------------------------------------------------
    Panel1 ;  Label1  ; Kunde   ; Customer  ; Client
    

    Die ersten zwei Spalten dienen dir zur Identifizierung die anderen für die Sprachwahl:

    enum TSprache {DEUTSCH=3,ENGLISCH=4,FRANZOESISCH=5};
    

    Daraus baust du ne Kompo und überschreibst den Komponenteneditor und/oder den Propertyeditor. Machst ein Eigabeformular, wo der Anwendungsentwickler die Daten einhacken kann. Ausserdem eine Eigenschaft vom Typ TSprache publishen.

    Diese Kompo zieht der Entwickler auf ein Formular und per doppelklick kommt er in die Eingabemaske. Er kann nun zur LAufzeit und entwurfszeit die Sprache umstellen.

    Die Komponete muss, sobald dass Formular geladen wird ( Loaded der Kompo) oder wenn die Sprache umgestellt wird, die Inhalte der in "Control" angegebenen Steuerelemente ändern.

    Bequemer gehts kaum...



  • Original erstellt von dreaddy:
    Ich hab mir stumpf ne Paradoxtabelle mit den ganzen Sprachen erstellt(jede zeile ein Wort,

    ...nur kommst du mit einzelnen Worten nicht weit, denn nicht überall sind die Satzstellungen wie im deutschen. Ich persönlich bevorzuge das Verwenden ganzer Sätze als Sprachresource. Müssen darin noch werte ausgegeben werden hilft AnsiString::sprintf herrlich weiter.

    Der Vorteil dabei ist ganz klar, dass der Übersetzer auch die Übersetzungen optimal an den Zweck anpassen kann. Wenn er nur jedes Wort übersetzen muss, kann das zu Problemen führen (Mehrdeutigkeit eines einzelnen Wortes)

    -junix

    [ Dieser Beitrag wurde am 18.06.2003 um 08:48 Uhr von junix editiert. ]



  • man muss das ja nicht auf Wörter beschränken. Ganze Texte gehen ja auch. Man muss sich nur auf ein Seperator einigen.

    Ich war nur zu faul zum tippten 😉



  • @Andreas: Was machst du mit den Texten aus den MessageBoxen, den Texten die einem Label zugewiesen werden und den diversen anderen Ausgabetexten? Die fallen da doch irgendwie aus deinem System raus?

    -junix

    **<edit>**Hatte mich oben auf dreaddys Lösung bezogen (o; Hatte deinen Post noch nicht gesehen als ich das getippt hatte (o; Deshalb hab ich das Zitat anschliessend reineditiert (o:

    Die Frage hier würde mich allerdings noch interessieren.</edit>

    [ Dieser Beitrag wurde am 18.06.2003 um 08:52 Uhr von junix editiert. ]



  • ok,

    Parent ; Control ; Deutsch ; Englisch  ; Französisch ; 
    -------------------------------------------------------------------
    Panel1 ;  Label1  ; Kunde   ; Customer  ; Client    ;           
    NULL   ;  Msg1    ; irgendwas auf Deutsch; irgendwas auf englisch; irgendwas auf franz.;
    
    String Kompo::GetValue(String IndexName, TSprache sprache)
    {
     // hier suchen nach IndexName zum Beipsiel =" Msg1" und die spalte Sprache zurückgeben
    }
    

    dann anstatt Hartkcodiert sowas schreiben:

    ShowMessage(Kompo1->GetValue("msg1",ENGLISCH));
    

    [/cpp]


Anmelden zum Antworten