6

私は最初にスタックオーバーフローで私のような質問に出くわしました:ResourceManagerのすべてのリソースをループします-C#。それは私がしなければならないことの一部しか解決しませんでした。特定のカルチャのリソースファイルへのエントリを要求すると、存在しない場合は、デフォルトでニュートラルカルチャリソースファイルに戻ります。

特定のリソースファイルの各エントリをループする必要があり、GetResourceSetにはカルチャが必要です。たとえば、3つのエントリを持つニュートラルリソースファイルと、1つのエントリを持つニュートラルファイルに付随するカルチャ固有のリソースファイルがあります。

ニュートラルリソースのサンプルファイルはMyResource.resxであり、カルチャ固有のリソースのサンプルファイルはMyResource.en-gb.resxです。次のコードは、現在、すべてのリソースエントリをループしてアクセスしようとしている方法を示しています。

Dim cultInfo as New CultureInfo(culture)
For Each entry As System.Collections.DictionaryEntry In myResourceManager.GetResourceSet(cultInfo, True, True)

Next

ニュートラルリソースファイルエントリ

  • フルネーム/フルネーム
  • 電話番号/電話番号
  • 州/州

カルチャ固有のリソースファイルエントリ

  • 州/郡

特定のカルチャに対してGetResourceSetを呼び出すと、1つのエントリしか返されません。私は、1つのカルチャ固有のエントリが上書きされた状態で、3つのエントリすべてを取り戻すことを期待していました(そして望んでいました)。これが私が返したいものです:

  • フルネーム/フルネーム
  • 電話番号/電話番号
  • 州/

とにかく私がこれを行うことができますか?ありがとう。

4

1 に答える 1

9

ResourceManager オブジェクトの GetString メソッドは、リソース ファイルのトラバースを適切に処理し、カルチャに基づいて特定のキーの正しい値を見つけます。base/neutral/default リソース ファイルは、CultureInfo.InvariantCultureを使用して取得できます。これにより、リソース ファイルのすべての可能なキーが得られます (リソース ファイルをこのようにセットアップすると仮定します)。

インバリアント カルチャに基づいて ResourceManager の GetResourceSet メソッドで見つかった DictionaryEntry オブジェクトをループし、渡された特定のカルチャを使用して各キーに対して GetString を呼び出すと、カルチャに基づいて特定のキーの正しい値が取得されます。

For Each entry As DictionaryEntry In myResourceManager.GetResourceSet(CultureInfo.InvariantCulture, True, True)
     Dim strKey as String = entry.Key.ToString()
     Dim strValue as String = myResourceManager.GetString(entry.Key.ToString(), cultInfo)
Next

お役に立てれば!

于 2011-04-27T12:14:45.427 に答える