Как получить 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.