0

比較的複雑な .NET アプリケーションのローカライズに取り組んでいます。要件は、UI を変換し、日付と数値の形式を切り替えるだけでなく、特定のロケール (地方の課税規則など) に対して異なるアルゴリズムを使用することです。

これを .NET で実装する簡単な方法はありますか (リソースのサテライト アセンブリなど)?

4

1 に答える 1

1

アプリケーション文字列の直接的なローカライズはかなり単純です。適切な名前のリソース ファイルを使用し、.Net ランタイムが、UICulture 設定に従って適切なリソースがロードされていることを確認するという面倒な作業を実行できるようにします。

ロケールに基づくビジネス ルールの導入を開始すると、さらに複雑になります。これを管理するための組み込み機能はありません。代わりに、自分でコードを作成する必要があります。考慮すべきことがたくさんあります。

私が使用し、うまく機能することがわかったアプローチは次のとおりです。

  • アプリの起動時に、ビジネス ルールに適用される場所/ロケールを決定します。私の場合、この情報はデータベースに保存されます。文字列のローカリゼーションよりも複雑な要件がある場合、開始スレッドのUICultureに頼ることはできません。Windowsをインストールすると、デフォルトで en-US のカルチャになります。修正に失敗する頻繁なユーザー数に対応する必要があります。これ。
  • そのロケール情報を使用して、( を使用して) プラグ可能なアセンブリを動的に読み込みますAssembly.Load(name)Unity のような優れた IoC フレームワークを使用すると、ここで役立ちます。実際のクラス インスタンスへのインターフェイスをプログラムで登録および解決できます。または、Microsoft の Enterprise Library (" EntLib ") は宣言型プラグイン機能を提供するため、構成ファイルを使用して、検出およびロードするアセンブリを指定できます。
  • 以前に検出されたロケールを初期 (UI) スレッドの UICulture に適用する* ロケール固有の文字列とテーマを、テーマおよび一般的なリソース (つまり、文字列固有ではない) アセンブリから取得するのに役立ちます。WPF を使用すると、ロケール固有の色、コントロール テンプレート、画像 (一部はテキスト付き) などを読み込むことができます。
  • テーマ ファイルに動的に読み込まれる文字列を挿入するために XAML で使用するカスタムマークアップ拡張機能DynamicResourceを作成しました (マークアップ拡張機能は、私が必要としているものには不十分でした)。
  • ロケール固有の画像の使用を支援するカスタム コンバーターを作成しました (組み込みの .Net フレームワーク ローカリゼーション機能は、テキストを含む画像がある場合には役に立ちません)。

これのいくつかはあなたに当てはまるかもしれませんが、そうでない場合は、正しい方向に導くのに役立つことを願っています. 可能であれば、 EntLibのような製品を試してみてください。ただし、それはやり過ぎであるか、十分な柔軟性がない可能性があります。私がアドバイスできる最善のことは、コーディングを開始する前に真剣に考えて設計することです。そうしないと、間違ったオプションを選択したことがわかった場合にやり直すのが難しくなる可能性があります。適切に構造化されたローカリゼーション パターンをアプリケーションにデプロイすることは、ランダムまたはアドホックな方法で行うべきものではありません。

*通常、カルチャ固有の文字列比較を行う場合を除き、バックグラウンド スレッド (.Net 4.5 より前) でカルチャを設定する必要はありません。バックグラウンド スレッドに特定のカルチャを設定する必要がある場合は、それがいつ必要になるかを認識し、それを考慮して設計してください。カルチャを必要とする関数へのパラメータとしてカルチャを注入することを考えてみてください。または、ビジネス ロケールをアプリケーション レベルの変数に保存しておき、必要に応じて読み取ります。

于 2014-02-04T09:33:02.800 に答える