2013-07-04 59 views
7

在具有本地化UI的Win7上,error_code::message()返回非英文消息。據我看到(在升壓1.54,爲system_error_category),上述功能可以歸結爲以下WinAPI的呼叫:如何在英文中獲取boost :: system :: error_code :: message?

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 - 它沒有幫助。

更新:只是澄清:本質上,我的問題是如何以編程方式「覆蓋」user default language和爲什麼設置區域設置是不夠的。

回答

1

根據猜測,您需要爲dwLanguageId指定英文,而不是默認語言。例如: -

MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT) 

,或者,如果你想明確美國英語:

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) 

請注意,如果在指定的語言信息不存在,這將失敗。因此,您可能需要處理ERROR_RESOURCE_LANG_NOT_FOUND並嘗試使用dwLanguageId=0再次調用它。

欲瞭解更多信息,請致電see MSDN

+1

正如我所提到的,它不是我的代碼,而是調用'FormatMessage'的Boost.System。 –

+0

好吧,然後寫你自己的功能。這並不困難。 –

+0

補丁增強是一個選項,但我更喜歡更乾淨的解決方案。實際上,問題是是否可以覆蓋(LANG_NEUTRAL,SUBLANG_DEFAULT),即「用戶默認語言」(http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85) )的.aspx)。不應該線程語言環境或全局語言環境影響它? –

3

一直在尋找遍佈互聯網的解決方案,最後找到了this。 基本上,您應該在main/WinMain中撥打SetThreadUILanguage

相關問題