2016-10-27 126 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でWindows 10または他のバージョンのMUI言語パックを検索してください。

2

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)ではなく、言語IDにゼロを使用します。その後、FormatMessageはスレッドの言語IDに基づいてリソースを選択するか、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. 英語英語
関連する問題