1

是否可以将系统错误代码翻译成特定语言?

我只能MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)传给FormatMessage. 否则,函数调用失败并返回 15100 (The resource loader failed to find MUI file)

系统错误消息存储在哪里?为什么我不能在不同于系统的语言环境中加载消息?

4

2 回答 2

3

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

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

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

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

如果您对上述链接有困难,请在 Google 中搜索适用于 Windows 10 或任何其他版本的 MUI 语言包。

于 2016-10-27T08:17:17.960 回答
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如果传入 zeroFormatMessage则按以下顺序查找 LANGID 消息:

  1. 语言中立
  2. 线程 LANGID,基于线程的语言环境值
  3. 用户默认 LANGID,基于用户的默认语言环境值
  4. 系统默认 LANGID,基于系统默认语言环境值
  5. 美国英语
于 2016-10-27T16:12:09.037 回答