Wie finde ich System-Strings in der Landessprache?



  • Normalerweise schreibe ich die Texte natürlich schon selber und lade sie in meine Dialoge; dafür ist eine eigene Klasse zuständig. Aber in diesem speziellen Dialog MUSS die Dialogklasse unabhängig von der selbstgeschriebenen Sprachverwaltungsklasse sein. Zu erklären, wieso, würde zu weit führen. Aber sie MUSS es wirklich!
    Leider findet sich in der MSDN nichts Brauchbares, es geht um Codepages, Datumsformat, MBCS etc.
    Wenn man aber z. B.

    MessageBox(..., MB_YESNOCANCEL)
    

    aufruft, setzt Windows die Beschriftung der Knöpfe auf [deutsch] "Ja", "Nein" und "Abbrechen".
    Wie kann ich auf diese Strings zugreifen, ohne die für mich nutzlose MessageBox()-Funktion aufzurufen?
    Übrigens benutzt Windows nicht automatisch die Systemsprache, denn wenn ich einen Dialog erstelle und im Ressourcen-Editor auf den IDCANCEL-Knopf "Hallo Welt" schreibe, bringt er mir im Programm dann (leider?) auch "Hallo Welt".



  • Niemand eine Idee???!!!???



  • Original erstellt von <Krösus>:
    Übrigens benutzt Windows nicht automatisch die Systemsprache, denn wenn ich einen Dialog erstelle und im Ressourcen-Editor auf den IDCANCEL-Knopf "Hallo Welt" schreibe, bringt er mir im Programm dann (leider?) auch "Hallo Welt".

    🙄

    Das war dann wohl der Schenkelklopfer des Tages. @Moderatoren: Könnte man das irgendwo sichern und für die Nachwelt erhalten?

    Sag mal denkst du das VC enthält ein komplettes Übersetzungsmodul oder was, welches dir deine Text automatsch von alleine übersetzt? 😕

    Also die Buttons der Messagebox sind automatisch in der Landessprache des Betriebssystems. Sieht man bei englischen Anwendungen: Der Text ist in englsich, die Buttons aber in deutsch.

    Willst du deine Anwendung mehrsprachig machen, geht es am einfachsten, wenn du für jede Sprache einen Stringtable anlegst und alle Texte dynamisch aus dem Stringtable lädst. Windows entscheidet, dann alleine welcher Stringtable genommen werden muß.

    [ Dieser Beitrag wurde am 06.03.2003 um 07:50 Uhr von Luckie editiert. ]



  • Danke Lucky für Deinen leider völlig nutzlosen Beitrag. Du hast weder meine eigentliche Frage, noch die vorigen Beiträge gelesen!
    Erstens: Die Idee "Eventuell benutzt er automatisch die Systemsprache" stammt nicht von mir, sondern von ReneS
    Zweitens: Du hast richtig erkannt, daß "die Buttons der Messagebox automatisch in der Landessprache des Betriebssystems sind", jedoch war ja die Frage, "wie kann ich auf diese Strings zugreifen, ohne die für mich nutzlose MessageBox()-Funktion aufzurufen".
    Drittens: Dein toller Vorschlag mit der Stringtabelle - "Normalerweise schreibe ich die Texte natürlich schon selber und lade sie in meine Dialoge ... in diesem speziellen Dialog MUSS die Dialogklasse unabhängig von der selbstgeschriebenen Sprachverwaltungsklasse sein." Man kann doch wirklich leicht erraten, daß meine Sprachverwaltungsklasse genau eine solche Stringtabelle benutzt. Ich muß davon aber unabhängig sein!
    Bevor Du hier verbreitest, daß ich wohl auf den Kopf gefallen sei, beantworte mir bitte meine Frage!! Wie komme ich an die MessageBox-Strings ran, ohne die MessageBox()-Funktion aufrufen zu müssen? Wahrscheinlich stehen die Strings in irgendeinerWindows-DLL, aber in welcher???
    MfG, Krösus

    [ Dieser Beitrag wurde am 06.03.2003 um 15:13 Uhr von Krösus editiert. ]



  • Hallo,

    sach mal, ich versteh dein problem auch nicht...
    vielleicht beschreibst du einfach mal warum das unabhängig sein muß 😕
    kapier ich nämlich garnicht...
    wenn dus nicht in mit stringtable machen willst, ja mei wo ist dann das problem die strings die du brauchst einfach im prog zu haben, von mir aus in ner eigenen klasse, datei usw:

    CString engStringOK = "OK";
    CString engStringCancel = "Cancel";
    CString deuStringOK = "OKey";  ;) 
    CString deuStringCancel = "Abbrechen";
    usw.
    

    vielleicht der klasse im konsti dann sowas sagen:
    MySprache UsedSprache(GetSprache vom System);

    wie gesagt ich verstehs auch net 😕 🙂



  • Also ich hab das so verstanden:
    Wenn man eine "deutsche" Anwendung auf einem Rechner mit einer englischen Windows-Version ausführt werden ja z.B. die Buttons von MessageBox automatisch in der Landessprache beschriftet. Dieses "Feature" will er auch nutzen, aber halt nicht die MessageBox Funktion aufrufen. D.h. er will sich z.B. einen eigenen Dialog basteln, aber trotzdem sollen die Standart-Schaltflächen wie Abbrechen, Ja, Nein, usw. in der jeweiligen Landessprache des BS erscheinen 🙂



  • Flenders: Ganz genau.
    RPD: Das Problem liegt darin, daß ich gar nicht weiß, in welchen Sprachen mein Dialog - der ein Teil unserer Bibliothek wird - später laufen soll.
    MfG, Krösus



  • Hallo,

    Das Problem liegt darin, daß ich gar nicht weiß, in welchen Sprachen mein Dialog - der ein Teil unserer Bibliothek wird - später laufen soll.

    das ist das problem?! ich sach mal wie ich das machen tät:
    zuerst mit GetSystemDefaultLangID(VOID) die LANGID holen. dann kucken welche sprache. man weiß doch vorher ungefähr wo das prog verwendet werden soll?! wenn nicht, dann halt alle abfragen:

    Language Identifiers
    0x0000 Language Neutral
    0x0400 Process Default Language
    0x0401 Arabic (Saudi Arabia)
    0x0801 Arabic (Iraq)
    0x0c01 Arabic (Egypt)
    0x1001 Arabic (Libya)
    0x1401 Arabic (Algeria)
    0x1801 Arabic (Morocco)
    0x1c01 Arabic (Tunisia)
    0x2001 Arabic (Oman)
    0x2401 Arabic (Yemen)
    0x2801 Arabic (Syria)
    0x2c01 Arabic (Jordan)
    0x3001 Arabic (Lebanon)
    0x3401 Arabic (Kuwait)
    0x3801 Arabic (U.A.E.)
    0x3c01 Arabic (Bahrain)
    0x4001 Arabic (Qatar)
    0x0402 Bulgarian
    0x0403 Catalan
    0x0404 Chinese (Taiwan Region)
    0x0804 Chinese (PRC)
    0x0c04 Chinese (Hong Kong SAR, PRC)
    0x1004 Chinese (Singapore)
    0x0405 Czech
    0x0406 Danish
    0x0407 German (Standard)
    0x0807 German (Swiss)
    0x0c07 German (Austrian)
    0x1007 German (Luxembourg)
    0x1407 German (Liechtenstein)
    0x0408 Greek
    0x0409 English (United States)
    0x0809 English (United Kingdom)
    0x0c09 English (Australian)
    0x1009 English (Canadian)
    0x1409 English (New Zealand)
    0x1809 English (Ireland)
    0x1c09 English (South Africa)
    0x2009 English (Jamaica)
    0x2409 English (Caribbean)
    0x2809 English (Belize)
    0x2c09 English (Trinidad)
    0x040a Spanish (Traditional Sort)
    0x080a Spanish (Mexican)
    0x0c0a Spanish (Modern Sort)
    0x100a Spanish (Guatemala)
    0x140a Spanish (Costa Rica)
    0x180a Spanish (Panama)
    0x1c0a Spanish (Dominican Republic)
    0x200a Spanish (Venezuela)
    0x240a Spanish (Colombia)
    0x280a Spanish (Peru)
    0x2c0a Spanish (Argentina)
    0x300a Spanish (Ecuador)
    0x340a Spanish (Chile)
    0x380a Spanish (Uruguay)
    0x3c0a Spanish (Paraguay)
    0x400a Spanish (Bolivia)
    0x440a Spanish (El Salvador)
    0x480a Spanish (Honduras)
    0x4c0a Spanish (Nicaragua)
    0x500a Spanish (Puerto Rico)
    0x040b Finnish
    0x040c French (Standard)
    0x080c French (Belgian)
    0x0c0c French (Canadian)
    0x100c French (Swiss)
    0x140c French (Luxembourg)
    0x040d Hebrew
    0x040e Hungarian
    0x040f Icelandic
    0x0410 Italian (Standard)
    0x0810 Italian (Swiss)
    0x0411 Japanese
    0x0412 Korean
    0x0812 Korean (Johab)
    0x0413 Dutch (Standard)
    0x0813 Dutch (Belgian)
    0x0414 Norwegian (Bokmal)
    0x0814 Norwegian (Nynorsk)
    0x0415 Polish
    0x0416 Portuguese (Brazilian)
    0x0816 Portuguese (Standard)
    0x0418 Romanian
    0x0419 Russian
    0x041a Croatian
    0x081a Serbian (Latin)
    0x0c1a Serbian (Cyrillic)
    0x041b Slovak
    0x041c Albanian
    0x041d Swedish
    0x081d Swedish (Finland)
    0x041e Thai
    0x041f Turkish
    0x0421 Indonesian
    0x0422 Ukrainian
    0x0423 Belarusian
    0x0424 Slovenian
    0x0425 Estonian
    0x0426 Latvian
    0x0427 Lithuanian
    0x0429 Farsi
    0x042a Vietnamese
    0x042d Basque
    0x0436 Afrikaans
    0x0438 Faeroese

    😉
    defaultmäßig einfach englisch nehmen 😃
    Yes, No und Cancel verstehen die meisten...

    viel anderst macht das die messagebox wohl auch nicht. wie man aber an die konkreten strings der mbuttons rankommt?! k.a. 😕
    sorry! erzähls uns aber bitte wenn du ne messagebox lösung hast. also mich interessierts...



  • hola,

    ich weiß, elends-alter thread. aber falls es jemanden interessiert:

    die gesuchten strings findet man in der user32.dll
    seit vista oder so kann man ja mehrere sprachen gleichzeitig installiert haben.
    da findet man die strings dann in (hab nur windows 10 hier, und da sind sie in)

    %windows%\system\<language>\user32.dll.mui
    

    ich hab hier deutsch und englisch installiert. so sieht die string table der beiden dateien aus:

    deutsch

    2     Fehler
    13    &Weiter Fenster...
    ...
    706   Herunterfahren
    707   Ausschalten
    708   Neustart
    709   Unbekannt
    ...
    800   OK
    801   Abbrechen
    802   A&bbrechen
    803   Wieder&holen
    804   &Ignorieren
    805   &Ja
    806   &Nein
    

    englisch

    2     Error
    13    &More Windows...
    ...
    706   shotdown
    707   power off
    708   restart
    709   unknown
    ...
    800   OK
    801   Cancel
    802   &Abort
    803   &Retry
    804   &Ignore
    805   &Yes
    806   &No
    

    Meep Meep



  • Ich hoffe, da steht aber "shutdown" und nicht "shotdown" 😃


Anmelden zum Antworten