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

标签 windows visual-c++ localization windows-mui

我有一个简单的 native 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 字母规范不同的事情吗?这太基本了……我错过了什么??

最佳答案

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

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

简单的答案:不要尝试使用“fr”或“es”或任何其他“语言中立”的术语。您必须始终完全指定区域设置,并且根据不言而喻的协议(protocol),诸如“fr-fr”之类的内容被视为中性。

关于windows - 无法让 Windows 使用中性语言 MUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17905416/

相关文章:

c++ - Boost::process 在 Windows 上隐藏控制台

windows - 我在 bash for windows 中看不到粘贴的文件

windows - Qt Creator 在自定义流程步骤中将命令名称放在引号内

c++ - MSVC 上的 ctime_r

ios 将第一个字符本地化为部分名称

windows - cmd.exe 不递增 for 循环中的数字

c++ - 在 VIsual C++ 中使用 C++ 代码,没有错误,但部分代码被忽略

c++ - 为什么这个自动矢量化器关心构造函数/析构函数?

java - 带有本地化模式的 SimpleDateFormat 非法模式字符错误

asp.net - ASP.NET 页面上的多种语言(英语、法语)