2

我有一个简单的原生 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 字母规范?这太基本了......我错过了什么?

4

1 回答 1

2

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

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

简单的回答:不要尝试使用“fr”或“es”或任何其他“语言中性”命名法。您必须始终完全指定语言环境,并且通过不言而喻的协议,诸如“fr-fr”之类的内容被认为是中立的。

于 2013-07-28T15:17:28.560 回答