3

ローカライズが必要な C# アプリがあります。これには、 RESX .NET MUI 戦略を使用できます。現在、ビルド/コンパイル後の追加のローカライズされたリソース (XML ファイル) を提供する別のチームがあります。優れたフォールバック メカニズムを提供する .NET の MUI 戦略を利用したいのですが、それを実現する方法が見つからないようです。

アプリの文字列リソース ファイルにローカライズされたファイル名 (私が知っている) を追加することを考えました。ただし、実行時にファイルが存在しない場合は、問題が発生します (自動的にフォールバックする方法はありません)。

では、このシナリオで .NET MUI 戦略を利用する方法はありますか?

4

1 に答える 1

1

オプション1:

XML ファイルをリソースに格納し、ストリーム オブジェクトを取得してそれを読み取ることができます。これは、文字列などで行われるのと同じアプローチを使用します。http://msdn.microsoft.com/en-us/library/を参照してください。そのためのzxee5096.aspx

オプション 2:

リソースで使用されるのと同じ基本的なアプローチを自分で適用することもできます。いずれにせよ、多くのファイル (.aspx、.html、.css、.js、.png など) に基づいていることが多い Web アプリケーションでは便利であることがわかりました。次のようなディレクトリがたくさんあるとします。

localized/en/SomeFile1.xml (およびその他...) localized/en-US/SomeFile1.xml (およびその他...) localized/en-GB/SomeFile.xml localized/fr/SomeFile.xml

私は en-IE の好みに合わせて、あなたはそれに一致しませんが、あなたは en に一致し、それで十分です (理想的には、en-IE が en-US よりも en-GB に近いことを理解する必要がありますが、これは完全にボーナス クレジットの領域に入り、.NET がリソースを処理するよりもはるかに優れています)。

マッチング アルゴリズムは次のようになります。

  1. 探しているロケールに一致するものを見つけようとし、見つかった場合は返します。
  2. ロケールの末尾を削除すると、en-GB-OED が en-GB になり、en-GB が en- になります。それでもすべてが削除されない場合は、この新しいロケールでステップ 1 に戻ります。
  3. zxx を試してみてください ( zxx.NET では使用されていませんが、BCP 47/RFC 4647 および ISO 639 では、言語コンテンツのないアイテムに使用されます。たとえば、あなたのパスポート写真はロケール zxx です。ヨルバ語またはウェールズ語としてのフランスの文書)。
  4. あなたが定義した「デフォルト」のロケールを試してください (または、アプリケーションが適切な一致を約束している場合はエラーになります)。

その時点で、リソース ファイルよりもわずかに優れた結果が得られます。それでも、ほとんどの場合、オプション 1 ははるかに単純で、はるかに自己完結型です。

于 2012-08-24T22:15:28.847 に答える