はじめに
Resxマネージャーを使用して言語をリソース化しておくとサテライトアセンブリが作られます。
日本語表記を英語表記にしたいときなどに非常に便利なリソース化。
カルチャの設定を変更するだけで、日本語表記から英語表記に変換することができる。
コードはこんな感じ。(特に意味のないコードですがご了承ください)
今回は、このローカライズされたリソースのサテライトアセンブリが実行時にどのような順序で検索、利用されるのかを調べてみました。
※ここで出てきたサテライトアセンブリとは、サテライトアセンブリとは国際化対応の際に作成される特殊なアセンブリである。一般に、アセンブリはニュートラルカルチャのリソースのみを含んでいるべきであるが、アセンブリをローカライズしたい場合、サテライトアセンブリを使う。
実行時にどのような順序で検索、利用されるのか
➀まず現在実行中のアセンブリのディレクトリで、要求された [CultureInfo.Name] と一致するサブディレクトリがないか調べます。
上記コードの場合、ja-JPですね。
➁一致するものがなければサテライトアセンブリを読み込みます。
サテライトアセンブリ内で要求されたリソースがないかを調べます。
上記コードの場合、en-US、es-ESですかね。
③これもなければ、[CultureInfo.Parent]プロパティによって定義されている親カルチャを調べます。
親カルチャはenとかjpとかesとかですね。
④親カルチャのプロパティが[CultureInfo.InvariantCulture]のとき、親カルチャの検索は停止し、既定の (フォールバック) カルチャのリソースが使用されます。
ここでの、既定の (フォールバック) カルチャのリソースはずばりこれでしょう。
プロジェクトの[プロパティ]-[アプリケーション]-[アセンブリの情報]を選択すると
これが既定の (フォールバック) カルチャのリソースとなる箇所。
そしてこれが設定されていないつまり「なし」の状態で④まで来ていた場合、例外を発生します。
これを設定しておけば例外の発生は防げるということです。
以上➀~④の順でローカライズされたリソースのサテライトアセンブリが、実行時に検索、利用されているということがわかりました。
終わりに
ここまで読んでいただきありがとうございました。
今回は学習メモでありますので、もし間違っていることなどございましたらご指摘いただけると幸いです。引き続き気になった箇所はどんどん投稿していきたいと思います。