Как получить boost::system::error_code::message на английском?

На Win7 локализовав UI, error_code::message() возвращает неанглийское сообщение. Насколько я вижу (в Boost 1.54, для 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 - это не помогло.

Обновление: просто пояснение: по сути, мой вопрос заключается в том, как программно "переопределить" язык пользователя по умолчанию и почему недостаточно установить языковой стандарт.

2 ответа

Я искал решение по всему интернету и наконец нашел это. В основном, вы должны позвонить SetThreadUILanguage в вашем main/WinMain,

В предположении, вам нужно будет указать английский для dwLanguageId вместо языка по умолчанию. Например:

MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)

или, если вы хотите конкретно американский английский:

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)

Обратите внимание, что это не удастся, если сообщение на указанном языке отсутствует. Так что вы можете захотеть справиться ERROR_RESOURCE_LANG_NOT_FOUND и попробуйте позвонить еще раз с dwLanguageId=0,

Для получения дополнительной информации см. MSDN.

Другие вопросы по тегам