アプリケーションの初期化とカルチャ
.NETはカルチャを取得、設定することでアプリケーションの国際化、地域化を簡単に実装できる。
O/Sのカルチャをそのまま使うのであればコードを書く必要は無い。例えば、WindowsFormやWebFormでは、Localizableプロパティをtrueにしておく等、適切にプロパティを設定しておけば適切なカルチャが決定される。
では逆に任意のカルチャ(例えば英語-米国を表す"en-US")でアプリケーションを開始したいとしよう。その場合、現在のスレッドのカルチャを書き換えることで対応できるので、アプリケーションの先頭で以下のコードでカルチャを設定すれば良いはずだ。
//例 en-USのカルチャに設定 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
このようにアプリケーションの開始時に任意のカルチャが決まっている場合は何も問題は無いが、以下のケースのようにまだカルチャを決定すべきではない場合はどうすれば良いのだろう。
まだカルチャを任意に決定できないケース
・DIコンテナの初期化時
・システム起動時のブートログ採取時
・認証(システムログイン)処理時
これらの処理を行っている最中は、まだアプリケーション本体の処理を実行している訳では無いので、明示的なカルチャも決定できない。
すぐさま考えられるのは、上記のようなケースではまず先んじて"インバリアントな"カルチャに設定してしまうことだ。
//インバリアントカルチャに設定 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(""); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
WindowsFormやWebFormの言語のデフォルトも"インバリアント"なので悪くは無いと思うが、これがベストなのか今ひとつ自信が無い。