2016-10-27 2 views
1

Можно ли перевести system error codes на конкретный язык?FormatMessage на другом языке

Я могу пройти только MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) до FormatMessage. В противном случае вызов функции завершается с ошибкой 15100 (загрузчик ресурсов не смог найти файл MUI).

Где хранятся сообщения об ошибках системы? Почему я не могу загрузить сообщение в локали, отличном от системного?

+0

Если это необходимо для тестирования, вы можете установить конкретный язык на своем собственном компьютере. В противном случае просто используйте 'MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT)' или у вас есть сложная цель? –

+0

На самом деле, я хочу объединить механизм уведомления об ошибках, т. Е. Перевести коды системных ошибок на язык, выбранный в моем приложении. –

ответ

2

В основном MUI означает многоязычный пользовательский интерфейс. Это языковые пакеты. В окнах один по умолчанию их не получит. Вместо этого они должны установить

Ниже ссылка поможет вам в закупках.

https://support.microsoft.com/en-us/help/14236/language-packs

По умолчанию вышеприведенные страницы отображается для окон 10. существует опция выпадающего списка для выбора других версий окон.

Если у вас возникли трудности с вышеуказанной ссылкой, выполните поиск в google для языкового пакета MUI для Windows 10 или любой другой версии.

2

Использовать ноль для идентификатора языка, а не 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 в следующем порядке:

  1. Язык нейтральной
  2. LANGID резьбы, основываясь на значении локали потока
  3. пользователя по умолчанию LANGID, на основе по значению локального пользователя по умолчанию
  4. Системный по умолчанию LANGID, основанный на стандартном значении языкового стандарта системы
  5. US English
Смежные вопросы