FormatMessage на другой язык
Можно ли перевести системные коды ошибок на конкретный язык?
Я могу только пройти MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
в FormatMessage
, В противном случае вызов функции завершится с ошибкой 15100 (загрузчику ресурсов не удалось найти файл MUI).
Где хранятся системные сообщения об ошибках? Почему я не могу загрузить сообщение в локали, отличной от системной?
2 ответа
В основном MUI обозначает многоязычный пользовательский интерфейс. Это языковые пакеты. В окнах по умолчанию их не получить. Вместо этого они должны установить
Ниже ссылка поможет вам в отношении закупок.
https://support.microsoft.com/en-us/help/14236/language-packs
По умолчанию вышеупомянутая страница отображается для Windows 10 . есть вариант выпадающего меню для других версий окон.
Если у вас возникли проблемы с приведенной выше ссылкой, поищите в Google языковой пакет MUI для Windows 10 или любой другой версии.
Используйте ноль для идентификатора языка, а не 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
ищет сообщение для идентификаторов LANGID в следующем порядке:
- Нейтральный язык
- LANGID потока, основанный на значении локали потока
- LANGID пользователя по умолчанию на основе значения локали пользователя по умолчанию
- Системный LANGID по умолчанию на основе значения локали системы по умолчанию
- Американский английский