1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C# ローカライズされたリソースのサテライトアセンブリが、実行時にどのような順序で検索、利用されるのか

Posted at

はじめに

Resxマネージャーを使用して言語をリソース化しておくとサテライトアセンブリが作られます。
日本語表記を英語表記にしたいときなどに非常に便利なリソース化。
カルチャの設定を変更するだけで、日本語表記から英語表記に変換することができる。
コードはこんな感じ。(特に意味のないコードですがご了承ください)

2023-01-31_13h37_53.png

今回は、このローカライズされたリソースのサテライトアセンブリが実行時にどのような順序で検索、利用されるのかを調べてみました。
※ここで出てきたサテライトアセンブリとは、サテライトアセンブリとは国際化対応の際に作成される特殊なアセンブリである。一般に、アセンブリはニュートラルカルチャのリソースのみを含んでいるべきであるが、アセンブリをローカライズしたい場合、サテライトアセンブリを使う。


実行時にどのような順序で検索、利用されるのか

➀まず現在実行中のアセンブリのディレクトリで、要求された [CultureInfo.Name] と一致するサブディレクトリがないか調べます。
上記コードの場合、ja-JPですね。

➁一致するものがなければサテライトアセンブリを読み込みます。
サテライトアセンブリ内で要求されたリソースがないかを調べます。
上記コードの場合、en-US、es-ESですかね。

③これもなければ、[CultureInfo.Parent]プロパティによって定義されている親カルチャを調べます。
親カルチャはenとかjpとかesとかですね。

④親カルチャのプロパティが[CultureInfo.InvariantCulture]のとき、親カルチャの検索は停止し、既定の (フォールバック) カルチャのリソースが使用されます。
ここでの、既定の (フォールバック) カルチャのリソースはずばりこれでしょう。

2023-01-31_13h22_22 (1).png
プロジェクトの[プロパティ]-[アプリケーション]-[アセンブリの情報]を選択すると

2023-01-31_13h55_13.png
言語選択できる画面赤枠が出てくる。

これが既定の (フォールバック) カルチャのリソースとなる箇所。
そしてこれが設定されていないつまり「なし」の状態で④まで来ていた場合、例外を発生します
これを設定しておけば例外の発生は防げるということです。

以上➀~④の順でローカライズされたリソースのサテライトアセンブリが、実行時に検索、利用されているということがわかりました。

終わりに

ここまで読んでいただきありがとうございました。
今回は学習メモでありますので、もし間違っていることなどございましたらご指摘いただけると幸いです。引き続き気になった箇所はどんどん投稿していきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?