我有一个简单的本地Visual C ++程序,它使用.mui文件来实现资源本地化。 如果我在SetThreadPreferredUILanguages中请求fr-fr,Windows会在fr-fr子目录中find我的prog.exe.mui文件,并使用它。 但是,如果我只是请求fr(没有语言环境),尽pipeWindows看到资源文件(通过GetFileMUIPathvalidation),但它拒绝使用它,并转到最终的回退语言。 如果我请求fr-ca,只有fr可用,它拒绝使用它。
这也发生在“es”上,我想象任何“中性语言”。 它适用于“vi”,所以这不是一个双字母的问题,但我认为这是因为vi是一个真实的语言环境,而不是一个中性的语言。 这发生在Windows 7和Windows 8下。
在准备.mui文件,资源或调用SetThreadPreferredUILanguages方面,我应该做什么不同于每隔四个字母的规范? 这是如此基本…我在想什么?
经过很多痛苦的实验,我得出这样的结论:尽管Windows会乐于接受和报告所谓的中性语言(例如“fr”),但实际上并没有这样的方式。
如果系统运行“fr-ca”,但是程序只有“fr-fr”可用,Windows将做出聪明的事情并使用“fr-fr”。 但是,如果它只是一个“fr”文件夹,Windows将不会使用它。 如果在SetThreadPreferredUILanguages中明确请求“fr”,它会高兴地接受它,并从GetThreadPreferredUILanguages愉快地报告它。 它会高兴地列出从“GetFileMUIPath”可用的“fr”。 但是它不会做任何有效的工作,甚至不会去寻找“fr-fr”。
简单的答案:不要尝试使用“fr”或“es”或任何其他“语言中立”的术语。 您必须始终完全指定区域设置,通过不言而喻的协议,像“fr-fr”这样的内容被视为中性。