我想将应用程序分发到许多不同的国家,所以我必须将多语言字符串嵌入到它的资源中。
Visual Studio提供了世界上主流语言的列表,如日语、英语、中文等。然而,除此之外,还有其他三种选择:
"中立";
"中立(默认)";
"中性(系统默认值)"。
它们之间有什么区别?
假设您在这里谈论的是本地资源(托管资源是另一种野兽)
- neutral=LANG_NOTRAL | SUBLANG_NOTAL。FindResourceEx回退到线程本地。请参阅GetThreadLocale
- neutral(默认)=LANG_NUMTRAL|SUBLANG_default回退到用户的默认语言。请参阅GetUserDefaultLCID
- neutral(sys.default)=LANG_NUMTRAL|SUBLANG_sys_default。请参阅GetSystemDefaultUILanguage
如果用户运行的是带有MUI包的英文版Windows,默认语言为简体中文,然后通过istream打开一个需要日语线程的文件,那么这些语言ID在不同时间都会很有用。
在许多情况下,资源加载器没有首选语言(例如CString::LoadString/LoadStringW)。调用方指定了一个中立标志,并希望FindResourceEx能够找到足够接近的标志。如果资源文件中存在完全匹配(即使是中性语言),则返回资源(嗯,我想LoadStringW对于中性语言来说是个糟糕的例子,LoadIcon可能更好),如果没有找到完全匹配并且没有指定语言,则启动复杂的回退过程。这是XP版和Vista版。
有时,保持中立是值得的,如果你的资源在全球范围内被审查为不具攻击性,也不太类似于世界各地某个地方实体的东西(尤其是当地党旗,参见纳粹使用的纳粹标记),你可以在所有语言中共享资源,并节省一些空间。但是,一旦团队切换到本地化的卫星dll作为默认资源源(请参阅AfxSetResourceHandle),就更难坚持中立资源。哦,而且全球评论是昂贵的。
参考:.RES文件中LANGUAGE语句的格式