“中性”、“中性(默认)”和“中性(系统默认)”之间的区别?

xml*_*lmx 3 windows user-interface internationalization visual-studio visual-c++

我想将应用程序分发到许多不同的国家,因此我必须将多语言字符串嵌入到其资源中。

Visual Studio 提供了世界主流语言的列表,如日语、英语、中文等,但除此之外,还有其他三种选择:

  1. “中性的”;

  2. “中性(默认)”;

  3. “中性(系统。默认)”。

它们之间有什么区别?

She*_* 蒋晟 6

假设您在这里谈论本机资源(托管资源是另一种野兽)

  • 中性=LANG_NEUTRAL|SUBLANG_NEUTRAL。FindResourceEx 回退到线程本地。见GetThreadLocale
  • 中性(默认)=LANG_NEUTRAL|SUBLANG_DEFAULT 回退到用户的默认语言。见获取用户默认LCID
  • 中性(系统默认)=LANG_NEUTRAL|SUBLANG_SYS_DEFAULT。见GetSystemDefaultUILanguage

如果用户运行带有 MUI 包的英文版 Windows,默认语言为简体中文,然后通过istream打开需要本地日语线程的文件,则这些语言 ID 在不同时间可能很有用。

在很多情况下,资源加载器没有首选语言(例如 CString::LoadString/LoadStringW)。调用者指定其中一个中性标志,并希望 FindResourceEx 能找到足够接近的东西。如果资源文件中有完全匹配(即使是中性语言),则返回资源(呃,我猜 LoadStringW 是中性语言的一个坏例子,LoadIcon 可能更好),如果没有找到完全匹配并且未指定语言,然后启动复杂的回退过程。这里是 XP 版,这里是 Vista 版。

有时保持中立是值得的,如果您的资源在全球范围内被审查为不具有攻击性,并且与属于世界各地当地实体之一的东西不太相似(尤其是当地党旗,请参阅纳粹使用的卐字符号),您可以跨所有语言共享资源并节省一些空间。但是,一旦团队切换到本地化的卫星 dll 作为默认资源源(请参阅 AfxSetResourceHandle),坚持使用中性资源就会变得更加困难。哦,全球审查是昂贵的。

参考: .RES 文件中 LANGUAGE 语句的格式