“中性”,“中性(默认)”和“中性(系统默认值)”之间的差异?

时间:2013-02-23 17:52:22

标签: windows visual-studio visual-c++ user-interface internationalization

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

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

  
      
  1. “中性”;

  2.   
  3. “中性(默认值)”;

  4.   
  5. “中立(系统默认)”。

  6.   

它们之间有什么区别?

1 个答案:

答案 0 :(得分:4)

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

  • 中性= LANG_NEUTRAL | SUBLANG_NEUTRAL。 FindResourceEx回退到本地线程。见GetThreadLocale
  • 中立(默认)= LANG_NEUTRAL | SUBLANG_DEFAULT回退到用户的默认语言。见GetUserDefaultLCID
  • neutral(sys.default)= LANG_NEUTRAL | SUBLANG_SYS_DEFAULT。见GetSystemDefaultUILanguage

如果用户运行带有MUI包的英文版Windows,默认语言为简体中文,然后通过istream打开一个期望日语线程的文件,那么这些语言ID在不同时间会很有用

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

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

参考: Format for LANGUAGE Statement in .RES Files

相关问题