3

我想将一个应用程序分发到许多不同的国家,所以我必须将多语言字符串嵌入到它的资源中。

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

  1. “中性的”;

  2. “中性(默认)”;

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

它们之间有什么区别?

4

1 回答 1

6

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

  • 中性=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 可能更好),如果没有找到完全匹配并且未指定语言,然后启动复杂的回退过程。这里是 XP 版,这里是 Vista 版。

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

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

于 2013-02-23T21:54:08.180 回答