Использовать ноль для идентификатора языка, а не MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
. Затем FormatMessage
будет выбирать ресурс на основе идентификатора языка потока, или он использует 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
. Если вы передаете в ноль, FormatMessage
ищет сообщение для LANGIDs в следующем порядке:
- Язык нейтральной
- LANGID резьбы, основываясь на значении локали потока
- пользователя по умолчанию LANGID, на основе по значению локального пользователя по умолчанию
- Системный по умолчанию LANGID, основанный на стандартном значении языкового стандарта системы
- US English
Если это необходимо для тестирования, вы можете установить конкретный язык на своем собственном компьютере. В противном случае просто используйте 'MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT)' или у вас есть сложная цель? –
На самом деле, я хочу объединить механизм уведомления об ошибках, т. Е. Перевести коды системных ошибок на язык, выбранный в моем приложении. –