マイクロソフトによると、言語ごとのリソースはリソース専用DLLに格納すればいいらしい。そうすると、以下の順番でリソースの読み込みにチャレンジしてくれる。
- GetUserDefaultUILanguage() が返す、現在のユーザーにおけるデフォルトUI言語。
-
現在のユーザーにおけるデフォルトUI言語から副言語設定を削除したもの。例:ENC(カナダ英語)⇒ENU(アメリカ英語)。
-
GetSystemDefaultUILanguage() が返す、現在のシステムUIのデフォルト言語。
-
システムUIのデフォルト言語から副言語設定を削除したもの。
-
偽言語コード:LOC。
- アプリ内部のリソース
この自動読み込みをするために、リソース専用DLLの名前は以下の命名規則に従う必要がある。
[アプリケーション名][言語コード].dll
ここで言語コードは3桁のアルファベットである。このコードは残念ながらマイクロソフト固有のものであり、ISO639とは無関係であることに注意。対応の一覧は例えば以下に記載のコードで取得できる。
マイクロソフト公式からは、なぜか一覧を入手できないが、たとえば以下の非マイクロソフトサイトから入手できる。
Language and country codes (ISO IETF RFC .NET LCID) - table
リソース専用DLLについては、以下のMSDNにて述べられている。
英語版:
これについては、日本語への翻訳が正しくできている気がする。なので、リソースのみのDLLの作り方は以下を参照すること。
日本語版:リソースのみの DLL の作成 | Microsoft Docs