什么是语言中性,用户默认LANGID和系统默认LANGID?

时间:2015-10-26 12:42:50

标签: c++ winapi localization

从MSDN了解FormatMessage功能:

  

如果传入零,FormatMessage会在LANGIDs中查找消息   以下顺序:

     
      
  • 语言中立
  •   
  • 线程LANGID,基于线程的区域设置值
  •   
  • 用户默认 LANGID,基于用户的默认语言区域值
  •   
  • 系统默认 LANGID,基于系统默认语言环境值
  •   
  • 美国英语
  •   

但零已经语言中立,因为语言中立的值为0 ......

LCID lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); // 0

什么是语言中立?对于任何一台电脑都一样吗?如果“是”那么它是en-US吗?

系统默认 LANGID是什么?它和屏幕上的一样吗?

enter image description here

用户默认 LANGID是什么?这三个本地化有什么区别?它们的值存储在Windows操作系统设置中的哪个位置?

1 个答案:

答案 0 :(得分:1)

如果FormatMessage的MSDN文档说语言中立而不是语言中立,则可以更容易理解。 Windows MUI资源可以是特定于语言的或与语言无关的(您可以了解有关此主题的更多信息here)。使用dwLanguageId=0调用FormatMessage会告诉Windows尝试从语言中立的资源加载具有给定dwMessageID的字符串。如果字符串在语言中立资源中不存在,Windows将尝试使用LANGID的文档顺序(线程默认值,用户默认值,系统默认值,1033)从特定于语言的资源加载它。这有点不寻常,因为不考虑进程默认的LANGID。

用户默认 LANGID是您通过致电GetUserDefaultUILanguage获得的回复。您可以在控制面板中更改它(对于Windows 8.1:控制面板\时钟,语言和区域\语言)。 GetSystemDefaultUILanguage返回系统默认 LANGID。我希望您可以在发布的屏幕上更改它,但我不确定上部或下部按钮是否正确。我恐怕不知道这些设置的存储位置。