| |
|
|
- Seite 1 - |
|
Stephan Sonneborn | Hallo zusammen,
hat jemand von Euch Erfahrungen mit Multilanguage-DLLs? Ich habe in einem Programm das bisher mit komplett unterschiedlichen DLLs gelöst (also eine mit Texten in deutsch, eine in englisch, eine in ...) Das ist von der Verwaltung her sehr aufwendig. In den DLLs kann man ja eine Sprache mitgeben. Wie kann ich die dann im Programm zuordnen? Ich denke, das wird Windows automatisch machen: ein englisches Windows wird dann die englischen Texte lesen. Aber es gibt ja allein für englisch x verschiedene Spracheinstellungen, welche sollte man in die DLL stellen?
Kann man auch in einem deutschen Windows englische Texte verwenden? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 04.10.2011 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Andreas Miethe
| Das Umstellen auf eine andere Sprache ist eigentlich recht simpel. Danach ist das Laden der Resourcen immer gleich, egal welche Sprache.
Hier mal ein Beispiel (funktioniert nur auf NT-Systemen )
Download |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 15.10.2011 ▲ |
|
|
|
|
|
| Ja, Multi-Language-Strings auslesen geht z.B. mit der API FindResourceEx. Eine weitere Möglichkeit (Enum) zeigt dieser Code von mir: [...]
Mit dem LemonEd besteht seit neuem die Möglichkeit, auch multi-language-Strings direkt in die eigene Exe einzubauen, per RC-Script oder kompiliert als RES. |
|
|
| |
|
|
|
Stephan Sonneborn | Hallo Frank,
danke für Deine Antwort und Dein Beispiel. Damit muss ich mich mal etwas genauer beschäftigen...
Ist es denn grundsätzlich so, dass man die Strings dann einmal mit dem englischen Sprachcode und einmal mit dem deutschen Sprachcode unter einer ID in der DLL ablegen kann? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 05.10.2011 ▲ |
|
|
|
|
| Ich denke ja, gemacht habe ich es selber noch nicht. Aber Versioninfos und Icons hatte ich testweise in mehreren Sprachen eingebaut, das klappt einwandfrei. Für meinen Editor hatte ich getestet, eines der XProfanicons zu ersetzen und mich gewundert, dass er in der Exe doch immer noch das originale Icon angezeigt hat. Bis mir aufgefallen ist, dass bei Nichtangabe einer Language im Scriptfile deutsch eingebaut wird, während das Profanicon neutral eingebaut ist. Hatte dann nachgesehen und das Icon doppelt vorgefunden. Als ich als Sprache dann neutral genommen hatte, klappte es richtig und das Icon wurde ersetzt. So wird das auch mit den Stringresourcen sein, sonst würde die ganze Language-Unterscheidung ja sinnlos sein. Du kannst die Texte in vielen Sprachen gleichzeitig einbauen und beim Abrufen später mit der Language-ID bestimmen, in welcher Sprache der String geladen wird. |
|
|
| |
|
|
|
H.Brill | Geht es hier nur darum, Menüeinträge oder Buttons auf die jeweilige Sprache zu ändern ? Wenn das nicht zu viele Einträge sind, würde ich es einfach mit Bereichen# und mit Franks XProfan_Datengenerator machen. Man kann ja einen Menüeintrag zur Umstellung Deutsch/Englisch machen. Weil es mich auch interessiert, habe ich mal eine Deutsch.txt und eine Englisch.txt mit dem Editor angelegt und mit dem Generator übersetzt. Die Strings bekommt man ja leicht wieder : KompilierenMarkierenSeparierenCls
Declare Deutsch#, Englisch#,Eintrag$, position%, pos2%
Dim Deutsch#,32
Dim Englisch#,24
Clear Deutsch#
Clear Englisch#
Long Deutsch#,0=1702125892,1725332585,1852141158,1701860220,1701340009,1232891506,225404526,10
Long Englisch#,0=1701603654,1701859196,1632861294,1216111990,1869376613,2573
Print String$(Deutsch#,0)
Print String$(Englisch#, 0)
Waitkey
Dispose Deutsch#, Englisch#
End
|
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 06.10.2011 ▲ |
|
|
|
|
| Nachteil ist aber, dass die Texe so nicht mehr leicht editierbar sind...
Hab das mal getestet, es ist kein Problem, Strings mehrsprachig in die eigene Exe einzubauen. Mein Testscript (RC) hierzu:
LANGUAGE 0, SUBLANG_NEUTRAL STRINGTABLE { 1000, "Good morning" 1001, "How are you?" }
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN STRINGTABLE { 1000, "Guten Morgen" 1001, "Wie geht es dir?" }
|
|
|
| |
|
|
|
Stephan Sonneborn | Ich taste mich mal langsam ran: Wenn ich eine bestimmte Sprache einstellen will, muss ich mittels FindResourceEx das Handle auf die DLL, einen Zeiger auf den ResourcenTyp, einen Zeiger auf die ID innerhalb des Resourcentyps und die Sprache mitgeben. Also insgesamt 4 Parameter: KompilierenMarkierenSeparieren Aber in welcher System-DLL finde ich die FindResourceEx-Funktion?
Um die Sprache als ID zu übergeben, macht die Funktion MakeLangID() aus den Klartexten (z.B. "LANG_GERMAN" und "SUBLANG_GERMAN") eine ID. KompilierenMarkierenSeparieren Auch stellt sich die Frage: welche System-DLL stellt die MakeLangID zur Verfügung? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 09.10.2011 ▲ |
|
|
|
|
Detlef Jagolski | In der Kernel32. KompilierenMarkierenSeparieren Aus der API Hilfe:
The MAKELANGID macro creates a language identifier from a primary language identifier and a sublanguage identifier.
WORD MAKELANGID(
USHORT usPrimaryLanguage,// primary language identifier USHORT usSubLanguage// sublanguage identifier );
Parameters
usPrimaryLanguage
Specifies the primary language identifier. This parameter can be one of the following values:
LANG_AFRIKAANSLANG_ICELANDIC LANG_ALBANIANLANG_INDONESIAN LANG_ARABICLANG_ITALIAN LANG_BASQUELANG_JAPANESE LANG_BELARUSIANLANG_KOREAN LANG_BULGARIANLANG_LATVIAN LANG_CATALANLANG_LITHUANIAN LANG_CHINESELANG_NEUTRAL LANG_CROATIANLANG_NORWEGIAN LANG_CZECHLANG_POLISH LANG_DANISHLANG_PORTUGUESE LANG_DUTCHLANG_ROMANIAN LANG_ENGLISHLANG_RUSSIAN LANG_ESTONIANLANG_SERBIAN LANG_FAEROESELANG_SLOVAK LANG_FARSILANG_SLOVENIAN LANG_FINNISHLANG_SPANISH LANG_FRENCHLANG_SWEDISH LANG_GERMANLANG_THAI LANG_GREEKLANG_TURKISH LANG_HEBREWLANG_UKRANIAN LANG_HUNGARIANLANG_VIETNAMESE
For a user-defined language, usPrimaryLanguage can be a value in the range 0x0200 to 0x03FF. All other values are reserved for system use.
usSubLanguage
Specifies the sublanguage identifier. This parameter can be one of the following values:
SUBLANG_ARABIC_SAUDI_ARABIASUBLANG_GERMAN SUBLANG_ARABIC_IRAQSUBLANG_GERMAN_SWISS SUBLANG_ARABIC_EGYPTSUBLANG_GERMAN_AUSTRIAN SUBLANG_ARABIC_LIBYASUBLANG_GERMAN_LUXEMBOURG SUBLANG_ARABIC_ALGERIASUBLANG_GERMAN_LIECHTENSTEIN SUBLANG_ARABIC_MOROCCOSUBLANG_ITALIAN SUBLANG_ARABIC_TUNISIASUBLANG_ITALIAN_SWISS SUBLANG_ARABIC_OMANSUBLANG_KOREAN SUBLANG_ARABIC_YEMENSUBLANG_KOREAN_JOHAB SUBLANG_ARABIC_SYRIASUBLANG_NEUTRAL SUBLANG_ARABIC_JORDANSUBLANG_NORWEGIAN_BOKMAL SUBLANG_ARABIC_LEBANONSUBLANG_NORWEGIAN_NYNORSK SUBLANG_ARABIC_KUWAITSUBLANG_PORTUGUESE SUBLANG_ARABIC_UAESUBLANG_PORTUGUESE_BRAZILIAN SUBLANG_ARABIC_BAHRAINSUBLANG_SERBIAN_LATIN SUBLANG_ARABIC_QATARSUBLANG_SERBIAN_CYRILLIC SUBLANG_CHINESE_TRADITIONALSUBLANG_SPANISH SUBLANG_CHINESE_SIMPLIFIEDSUBLANG_SPANISH_MEXICAN SUBLANG_CHINESE_HONGKONGSUBLANG_SPANISH_MODERN SUBLANG_CHINESE_SINGAPORESUBLANG_SPANISH_GUATEMALA SUBLANG_DEFAULTSUBLANG_SPANISH_COSTA_RICA SUBLANG_DUTCHSUBLANG_SPANISH_PANAMA SUBLANG_DUTCH_BELGIANSUBLANG_SPANISH_DOMINICAN_ REPUBLIC SUBLANG_ENGLISH_USSUBLANG_SPANISH_VENEZUELA SUBLANG_ENGLISH_UKSUBLANG_SPANISH_COLOMBIA SUBLANG_ENGLISH_AUSSUBLANG_SPANISH_PERU SUBLANG_ENGLISH_CANSUBLANG_SPANISH_ARGENTINA SUBLANG_ENGLISH_NZSUBLANG_SPANISH_ECUADOR SUBLANG_ENGLISH_EIRESUBLANG_SPANISH_CHILE SUBLANG_ENGLISH_SOUTH_ AFRICASUBLANG_SPANISH_URUGUAY SUBLANG_ENGLISH_JAMAICASUBLANG_SPANISH_PARAGUAY SUBLANG_ENGLISH_CARIBBEANSUBLANG_SPANISH_BOLIVIA SUBLANG_ENGLISH_BELIZESUBLANG_SPANISH_EL_SALVADOR SUBLANG_ENGLISH_TRINIDADSUBLANG_SPANISH_HONDURAS SUBLANG_FRENCHSUBLANG_SPANISH_NICARAGUA SUBLANG_FRENCH_BELGIANSUBLANG_SPANISH_PUERTO_RICO SUBLANG_FRENCH_CANADIANSUBLANG_SWEDISH SUBLANG_FRENCH_SWISSSUBLANG_SWEDISH_FINLAND SUBLANG_FRENCH_LUXEMBOURGSUBLANG_SYS_DEFAULT
For a user-defined sublanguage, usSubLanguage can be a value in the range 0x20 to 0x3F. All other values are reserved for system use.
Return Values
The return value is a language identifier.
Remarks
The following three combinations of usPrimaryLanguage and usSubLanguage have special meaning:
Primary language IDSublanguage IDMeaning LANG_NEUTRALSUBLANG_NEUTRALLanguage neutral LANG_NEUTRALSUBLANG_DEFAULTUser default language LANG_NEUTRALSUBLANG_SYS_DEFAULTSystem default language
The MAKELANGID macro is defined as follows:
#define MAKELANGID(p, s) ((((WORD) (s)) << 10) | (WORD) (p)) KompilierenMarkierenSeparieren |
|
|
| XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 09.10.2011 ▲ |
|
|
|
|
Andreas Miethe
| |
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 09.10.2011 ▲ |
|
|
|
|
Detlef Jagolski | Und ich dachte die Lösung von Andreas erklärt sich durch
The MAKELANGID macro is defined as follows:
#define MAKELANGID(p, s) ((((WORD) (s)) << 10) | (WORD) (p))
von alleine. |
|
|
| |
|
|
|
Stephan Sonneborn | Hallo Detlef, hallo Andreas, vielen Dank für Eure Hilfe, aber irgendwie stehe ich immer noch aufm Schlauch: Ich hab eine DLL gebastelt mit einer STRING-Resource in den Sprachcodes Neutral, GERMAN und ENGLISH.
In allen dreien habe ich Texte hinterlegt: 100,Neutral; 100,Deutsch; 100,English
Mittels KompilierenMarkierenSeparierenFindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~Neutral, ~SUBLANG_Neutral))
FindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~German, ~SUBLANG_German))
FindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~English, ~SUBLANG_English_US))
wollte ich dann auf die Texte zugreifen.Wie müsste denn der Pointer "PointerAufID" aussehen? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 10.10.2011 ▲ |
|
|
|
|
Detlef Jagolski | Aus der API Hilfe von FindResourceEX:
Points to a null-terminated string specifying the name of the resource. For more information, see the Remarks section.
KompilierenMarkierenSeparieren Gruß
Detlef |
|
|
| XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 11.10.2011 ▲ |
|
|
|