从MSDN了解FormatMessage功能:
如果传入零,
FormatMessage
会在LANGIDs
中查找消息 以下顺序:
- 语言中立
- 线程
LANGID
,基于线程的区域设置值- 用户默认
LANGID
,基于用户的默认语言区域值- 系统默认
LANGID
,基于系统默认语言环境值- 美国英语
但零已经语言中立,因为语言中立的值为0 ......
LCID lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); // 0
什么是语言中立?对于任何一台电脑都一样吗?如果“是”那么它是en-US
吗?
系统默认 LANGID
是什么?它和屏幕上的一样吗?
用户默认 LANGID
是什么?这三个本地化有什么区别?它们的值存储在Windows操作系统设置中的哪个位置?
答案 0 :(得分:1)
如果FormatMessage的MSDN文档说语言中立而不是语言中立,则可以更容易理解。 Windows MUI资源可以是特定于语言的或与语言无关的(您可以了解有关此主题的更多信息here)。使用dwLanguageId=0
调用FormatMessage会告诉Windows尝试从语言中立的资源加载具有给定dwMessageID
的字符串。如果字符串在语言中立资源中不存在,Windows将尝试使用LANGID的文档顺序(线程默认值,用户默认值,系统默认值,1033)从特定于语言的资源加载它。这有点不寻常,因为不考虑进程默认的LANGID。
用户默认 LANGID是您通过致电GetUserDefaultUILanguage获得的回复。您可以在控制面板中更改它(对于Windows 8.1:控制面板\时钟,语言和区域\语言)。 GetSystemDefaultUILanguage返回系统默认 LANGID。我希望您可以在发布的屏幕上更改它,但我不确定上部或下部按钮是否正确。我恐怕不知道这些设置的存储位置。