Brauche ich InitMUILanguage() bei Deutsch/Englisch?
-
Hi!
Ich möchte eine UI-Anwendung in Deutsch und Englisch ausliefern. Muss ich dazu die Funktion InitMUILanguage() nutzen?
Ich verstehe nicht genau, was es bewirken soll.
Wird sonst zB öüä auf englischen Windows nicht korrekt angezeigt, oder wie?
-

-
Du musst Dir zuerst mal Gedanken machen, wie Du die Sprachumschaltung machen willst. Nimmst Du "normale" Windows Resourcen, dann brauchst Du diese Methode nicht.
Ansonsten holft die Doku zu der Methode und die Links weiter...
-
Jochen Kalmbach schrieb:
Nimmst Du "normale" Windows Resourcen, dann brauchst Du diese Methode nicht.
Ich verstehe nicht, wie du das meinst.
-
Wenn du zB Zeichentabellen benutzt (STRINGTABLE)
-
Ne, benutze ich nicht. Meine Übersetzungstexte sind in einer eigenen Datei abgespeichert (translations.dat).
-
Dann musst Du eh alles selber machen... da brauchst Du gar nichts von Windows; ausser vielleicht ReadFile...
-
Aha. Ich verstehe immer noch nicht, was diese Funktion bewirkt.
Kann das nochmal jemand genau erklären?
-
msdn schrieb:
This function enables an application to override the system language setting, and specify a different language for the common controls. The selected language only applies to the process that InitMUILanguage is called from.
Damit kannst du quasi die Default-Sprache von irgendwelchen Windows-Steuerelementen ändern - Was du aber vermutlich nicht willst: Ein User mit englischem Windows z.B. möchte in aller Regel auch "Cancel" statt "Abbrechen" lesen...
Die ganzen Windows-Funktionen die Strings entgegen nehmen, gibt es immer als 2 Varianten: fooW() und fooA() (z.B. TextOutW() und TextOutA()...)
Wenn Du fooW() mit Unicode-Zeichen fütterst sieht das Ergebnis auf allen x-beliebig-sprachigen Windows-Versionen theoretisch gleich aus.
Wenn Du fooA() nimmst, hängt das Ergebnis vom aktuellen Zeichensatz ab.foo() ist immer ein Platzhalter der beim compilen je nach Zeichensatz-Einstellungen des Projekts entweder durch fooA() oder fooW() ersetzt wird.
(Ab mindestens Visual Studio 2008 standardmässig durch fooW()...)Mit GetUserDefaultLangID könntest Du dir erstmal die vom Benutzer gewünschte Sprache holen.
Wenn Du die Sprache anbieten kannst, lade die aus deiner translation-Datei.
Ansonsten halt Englisch.Wenn Du deine translation-Datei(en) direkt in Unicode speicherst und lädst und in Visual Studio den Unicode-Zeichensatz eingestellt hast, brauchste dir um Sonderzeichen, Umlaute etc. eigentlich keine Gedanken machen...
-
Hey danke für die Erklärung.
Doch was meinst du damit?
geeky schrieb:
Wenn Du fooA() nimmst, hängt das Ergebnis vom aktuellen Zeichensatz ab.
A-Funktionen nehmen ja 'char', also nur 256 Zeichen, das hat ja noch nix mit einem Zeichensatz zu tun, denke ich mir?!
-
Mit Zeichensatz meinte ich die Codepage - Bei den Codepages sind die Zeichen 0-127 immer gleich, darüber unterscheiden sie sich jedoch

Bei uns ist es z.B. Codepage 1252, Codepage 1256 weicht z.B. relativ stark davon ab.
D.h. auf einem fremdsprachigen Windows kann bei der Ansi-Variante das Zeichen 'ö' (dezimal 246) was ganz anderes sein.http://msdn.microsoft.com/en-us/library/dd317752(v=VS.85).aspx schrieb:
Many Windows API functions have "A" (ANSI) and "W" (wide, Unicode) versions. The "A" version handles text based on Windows code pages, while the "W" version handles Unicode text. See Windows Data Types for Strings and Conventions for Function Prototypes.
Windows code pages are also sometimes referred to as "active code pages" or "system active code pages". A Windows operating system always has one currently active Windows code page. All ANSI versions of API functions use the currently active code page.
http://msdn.microsoft.com/en-us/library/dd318070(v=VS.85).aspx schrieb:
The ANSI API functions, for example, the ANSI version of TextOut, implicitly use GetACP to translate text to or from Unicode.
An etlichen Stellen rät die msdn dazu Unicode zu verwenden, teilweise wird sogar vor der Nutzung der Ansi-Funktionen gewarnt ^^
-
Interessant, das wusste ich nicht.
Danke! Alles geklärt.