比較的複雑な .NET アプリケーションのローカライズに取り組んでいます。要件は、UI を変換し、日付と数値の形式を切り替えるだけでなく、特定のロケール (地方の課税規則など) に対して異なるアルゴリズムを使用することです。
これを .NET で実装する簡単な方法はありますか (リソースのサテライト アセンブリなど)?
比較的複雑な .NET アプリケーションのローカライズに取り組んでいます。要件は、UI を変換し、日付と数値の形式を切り替えるだけでなく、特定のロケール (地方の課税規則など) に対して異なるアルゴリズムを使用することです。
これを .NET で実装する簡単な方法はありますか (リソースのサテライト アセンブリなど)?
アプリケーション文字列の直接的なローカライズはかなり単純です。適切な名前のリソース ファイルを使用し、.Net ランタイムが、UICulture 設定に従って適切なリソースがロードされていることを確認するという面倒な作業を実行できるようにします。
ロケールに基づくビジネス ルールの導入を開始すると、さらに複雑になります。これを管理するための組み込み機能はありません。代わりに、自分でコードを作成する必要があります。考慮すべきことがたくさんあります。
私が使用し、うまく機能することがわかったアプローチは次のとおりです。
Assembly.Load(name)
。Unity のような優れた IoC フレームワークを使用すると、ここで役立ちます。実際のクラス インスタンスへのインターフェイスをプログラムで登録および解決できます。または、Microsoft の Enterprise Library (" EntLib ") は宣言型プラグイン機能を提供するため、構成ファイルを使用して、検出およびロードするアセンブリを指定できます。 DynamicResource
を作成しました (マークアップ拡張機能は、私が必要としているものには不十分でした)。これのいくつかはあなたに当てはまるかもしれませんが、そうでない場合は、正しい方向に導くのに役立つことを願っています. 可能であれば、 EntLibのような製品を試してみてください。ただし、それはやり過ぎであるか、十分な柔軟性がない可能性があります。私がアドバイスできる最善のことは、コーディングを開始する前に真剣に考えて設計することです。そうしないと、間違ったオプションを選択したことがわかった場合にやり直すのが難しくなる可能性があります。適切に構造化されたローカリゼーション パターンをアプリケーションにデプロイすることは、ランダムまたはアドホックな方法で行うべきものではありません。
*通常、カルチャ固有の文字列比較を行う場合を除き、バックグラウンド スレッド (.Net 4.5 より前) でカルチャを設定する必要はありません。バックグラウンド スレッドに特定のカルチャを設定する必要がある場合は、それがいつ必要になるかを認識し、それを考慮して設計してください。カルチャを必要とする関数へのパラメータとしてカルチャを注入することを考えてみてください。または、ビジネス ロケールをアプリケーション レベルの変数に保存しておき、必要に応じて読み取ります。