9

在具有本地化 UI 的 Win7 上,error_code::message()返回非英文消息。据我所见(在 Boost 1.54 中,for system_error_category),上述函数归结为以下 WinAPI 调用:

DWORD retval = ::FormatMessageA( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    ev,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPSTR) &lpMsgBuf,
    0,
    NULL 
);

如何让上面FormatMessage返回一个英文消息?我试图设置语言环境,无论是使用std功能还是使用SetThreadLocale- 它都没有帮助。

更新:只是澄清一下:本质上,我的问题是如何以编程方式“覆盖”用户默认语言以及为什么设置区域设置是不够的。

4

2 回答 2

4

一直在互联网上寻找解决方案,终于找到了这个SetThreadUILanguage基本上,您应该调用main/ WinMain

于 2014-06-23T07:19:54.583 回答
2

猜测一下,您需要指定英语dwLanguageId而不是默认语言。例如:

MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)

或者,如果您特别想要美国英语:

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)

请注意,如果指定语言的消息不存在,这将失败。因此,您可能需要处理ERROR_RESOURCE_LANG_NOT_FOUND并尝试再次使用dwLanguageId=0.

有关详细信息,请参阅 MSDN

于 2013-07-04T11:54:02.383 回答