我想将一个应用程序分发到许多不同的国家,所以我必须将多语言字符串嵌入到它的资源中。
Visual Studio 提供了日文、英文、中文等世界主流语言的列表,但除此之外,还有其他三种选择:
"Neutral";
"Neutral(Default)";
"Neutral(Sys. Default)".
它们之间有什么区别?
最佳答案
假设您在这里谈论 native 资源(托管资源是另一种野兽)
- 中性=LANG_NEUTRAL|SUBLANG_NEUTRAL。 FindResourceEx 回退到本地线程。见GetThreadLocale
- 中性(默认)=LANG_NEUTRAL|SUBLANG_DEFAULT 回退到用户的默认语言。见GetUserDefaultLCID
- 中性(系统默认)=LANG_NEUTRAL|SUBLANG_SYS_DEFAULT。见GetSystemDefaultUILanguage
如果用户运行的是带有 MUI 包的英文版 Windows,默认语言是简体中文,然后通过 istream 打开一个需要本地日语线程的文件,那么这些语言 ID 在不同的时间可能会有用。 .
很多情况下资源加载器没有首选语言(例如 CString::LoadString/LoadStringW)。调用者指定其中一个中性标志,并希望 FindResourceEx 能找到足够接近的东西。如果资源文件中存在完全匹配(即使对于中性语言),则返回资源(呃,我猜 LoadStringW 是中性语言的一个坏例子,LoadIcon 可能更好),如果找不到完全匹配并且未指定语言然后启动复杂的回退过程。 Here是 XP 版和 here是 Vista 版本。
有时保持中立是值得的,如果你的资源在全局范围内被审查为不具有攻击性并且与属于世界各地某个地方实体的东西不太相似(尤其是地方党旗,请参阅纳粹使用的卐字符号),您可以跨所有语言共享资源并节省一些空间。但是,一旦团队切换到本地化的附属 dll 作为默认资源源(请参阅 AfxSetResourceHandle),坚持使用中性资源就会变得更加困难。哦,全局审查很昂贵。
关于windows - "Neutral"、 "Neutral(Default)"和 "Neutral(Sys. Default)"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043624/