FormatMessage为另一种语言

时间:2016-10-27 07:53:26

标签: c++ windows winapi locale formatmessage

是否可以将system error codes翻译成特定语言?

我只能将MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)传递给FormatMessage。否则,函数调用将失败并显示15100 (资源加载程序无法找到MUI文件)

系统错误消息存储在哪里?为什么我不能在不同于系统的区域设置中加载消息?

2 个答案:

答案 0 :(得分:2)

MUI基本上代表多语言用户界面。这些是语言包。在Windows中,默认情况下不会获得它们。相反,他们必须安装

以下链接可帮助您进行采购。

https://support.microsoft.com/en-us/help/14236/language-packs

默认情况下,上面的页面显示为Windows 10。有一个下拉选项可供选择其他版本的Windows。

如果您在使用上述链接时遇到问题,请在Google上搜索适用于Windows 10或任何其他版本的MUI语言包。

答案 1 :(得分:2)

对语言ID使用零,而不是MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)。然后FormatMessage将根据广告的语言ID选择资源,或使用GetUserDefaultLangID

FormatMessage文档:

DWORD WINAPI FormatMessage(
  _In_     DWORD   dwFlags,
  _In_opt_ LPCVOID lpSource,
  _In_     DWORD   dwMessageId,
  _In_     DWORD   dwLanguageId,
  _Out_    LPTSTR  lpBuffer,
  _In_     DWORD   nSize,
  _In_opt_ va_list *Arguments
);
     

dwLanguageId

     

如果您在此参数中传递特定的LANGID,FormatMessage将会   仅返回该LANGID的消息。如果功能找不到   该LANGID的消息,它将Last-Error设置为   ERROR_RESOURCE_LANG_NOT_FOUND如果传入零,   FormatMessage在下面查找LANGID的消息   顺序:

     
      
  1. 语言中立
  2.   
  3. 线程LANGID,基于线程的区域设置值
  4.   
  5. 用户默认LANGID,基于用户的默认语言环境值
  6.   
  7. 系统默认LANGID,基于系统默认语言环境值
  8.   
  9. 美国英语
  10.