ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

MFCを使う場合の多言語化

MFCを使う場合の多言語化メモ。以下の英語版より抜粋。

docs.microsoft.com

マイクロソフトによると、言語ごとのリソースはリソース専用DLLに格納すればいいらしい。そうすると、以下の順番でリソースの読み込みにチャレンジしてくれる。

  1. GetUserDefaultUILanguage() が返す、現在のユーザーにおけるデフォルトUI言語。
  2. 現在のユーザーにおけるデフォルトUI言語から副言語設定を削除したもの。例:ENC(カナダ英語)⇒ENU(アメリカ英語)。

  3. GetSystemDefaultUILanguage() が返す、現在のシステムUIのデフォルト言語。

  4. システムUIのデフォルト言語から副言語設定を削除したもの。

  5. 言語コード:LOC。

  6. アプリ内部のリソース

この自動読み込みをするために、リソース専用DLLの名前は以下の命名規則に従う必要がある。

[アプリケーション名][言語コード].dll

ここで言語コードは3桁のアルファベットである。このコードは残念ながらマイクロソフト固有のものであり、ISO639とは無関係であることに注意。対応の一覧は例えば以下に記載のコードで取得できる。

docs.microsoft.com

マイクロソフト公式からは、なぜか一覧を入手できないが、たとえば以下の非マイクロソフトサイトから入手できる。

Language and country codes (ISO IETF RFC .NET LCID) - table

リソース専用DLLについては、以下のMSDNにて述べられている。

英語版:

docs.microsoft.com

これについては、日本語への翻訳が正しくできている気がする。なので、リソースのみのDLLの作り方は以下を参照すること。

日本語版:リソースのみの DLL の作成 | Microsoft Docs