无法让Windows使用中性语言MUI?

时间:2013-07-28 05:50:10

标签: windows visual-c++ localization mui

我有一个简单的本机Visual C ++程序,它使用.mui文件来实现资源本地化。如果我在SetThreadPreferredUILanguages中请求fr-fr,Windows会在fr-fr子目录中找到我的prog.exe.mui文件,并使用它。但是如果我只请求fr(没有语言环境),虽然Windows看到资源文件(由GetFileMUIPath验证),但它拒绝使用它,并转到最终的后备语言。如果我要求fr-ca,并且只提供fr,则拒绝使用它。

这也适用于“es”,我想象任何“中性语言”。它确实适用于“vi”,因此它不是两个字母的问题,但我认为这是因为vi是一个实际的语言环境,而不是一个中性语言。这种情况在Windows 7和Windows 8下都会发生。

在准备.mui文件,资源或调用SetThreadPreferredUILanguages时,我应该做些什么不同于其他所有其他4个字母的规范吗?这是如此基本......我错过了什么?

1 个答案:

答案 0 :(得分:2)

经过多次痛苦的实验后,我得出的结论是,尽管Windows会很乐意接受并报告所谓的中性语言(例如“fr”),但实际上并没有以这种方式寻找它们。

如果系统正在运行“fr-ca”但是只有一个程序可用“fr-fr”,Windows将执行智能操作并使用“fr-fr”。但如果它只是一个“fr”文件夹,Windows将不会使用它。如果在SetThreadPreferredUILanguages中明确请求“fr”,它将很乐意接受它,并愉快地从GetThreadPreferredUILanguages报告它。它会愉快地列出GetFileMUIPath提供的“fr”。但它不会做任何有效的事情,甚至不会寻找“fr-fr”。

简单回答:不要试图使用“fr”或“es”或任何其他“语言中立”的命名法。您必须始终完全指定区域设置,并且通过未说明的协议,“fr-fr”之类的内容将被视为中立。