by Michael S. Kaplan, published on 2007/07/13 16:59 -04:00, original URI: http://blogs.msdn.com/b/michkap/archive/2007/07/13/3852677.aspx
Serdar asked:
Hi,
Is it possible to call GetLocaleInfo in a different language? What I’m trying to do is as follows:
- Installed a Vista English machine.
- Installed German and Spanish language packs.
- UI language is set to English.
- Want to learn what “German” (language name) is in Spanish.
I believe I can do this by loading kernel32.dll and using FindResourceEx to find the language I want. However, I just wanted to learn whether there is a shorter way.
Thanks,
Serdar
A very good question. And although the FindResourceEx route will work, it has several challenges:
A much cooler way was suggested by Erik Fortune (the MUI development manager):
If GetLocaleInfo follows the UI language, you should(*) be able to set the thread language to “es-ES” and call GetLocaleInfo.
-- Erik
(*) I haven’t actually tried it and can think of a number of ways it might break, but it’s probably your best bet.
It actually does work (though Erik's response may seem to be a blatant contradiction to the first tester's axiom, though in truth the scenario was tested by others so the fact that he had not tried it was just a good reason for a disclaimer!).
All of the following LCType values for GetLocaleInfo/GetLocaleInfoEx can be expected to return localized results that could be impacted by changing a thread's UI language:
As a fun experiment if you have lots of UI languages installed, you can compare the first three values to the following values for that locale in that language:
Any time the translation is different, you have found either a localization bug or a core bug! :-)
This post brought to you by ྅ (U+0f85, a.k.a. TIBETAN MARK PALUTA)