1

複数のプロジェクト タイプ (Web フロント エンド、WCF、Windows サービスなど) 間でローカリゼーションを共有する必要があるシナリオがあるため、すべての resx ファイルを埋め込み、いつでも追加/変更できるローカリゼーション アセンブリを作成することを考えました。これらは、すべてのアプリを更新するために単一の dll を再デプロイするだけで済みます。

そこで、テストするためにクラス ライブラリ プロジェクトを作成し、TestLocalization という名前を付けました。LocalizationManager という名前のクラスを追加しましたが、これは今のところ単なるスタブです (後でいくつかのユーティリティ メソッドを配置する予定です)。次に、それぞれに 1 つのテスト エントリを含む 2 つの resx ファイルを追加しました。1 つのファイルには Resource.resx という名前を付け、もう 1 つのファイルには Resource.fr.resx という名前を付けました。resx ファイルの Build Action が「Embedded Resource」に設定されていることを確認してからコンパイルし、次のコードで呼び出してみました。

Assembly assembly = typeof(TestLocalization.LocalizationManager).Assembly;
ResourceManager rm = new ResourceManager("Resource", assembly);
string str = rm.GetString("AKey");

次のエラーが表示されます。

「指定されたカルチャまたはニュートラル カルチャに適したリソースが見つかりませんでした。コンパイル時に "Resource.resources" がアセンブリ "TestLocalization" に正しく埋め込まれているか、リンクされていること、または必要なすべてのサテライト アセンブリが読み込み可能で完全に署名されていることを確認してください。 "

ここで何が間違っていますか?ありがとう!

4

1 に答える 1

0

最初に何が間違っていたのかわかりませんが、アセンブリ + 名前空間 + リソース名のすべての可能な順列でテストしたと断言できましたが、機能しませんでしたが、実際には次のように単純だったので、保存などを忘れていたのかもしれません:

ResourceManager rm = new ResourceManager("TestLocalization.Resource", assembly);

私のプロジェクト名は TestLocalization で、resx ファイルはすべてルートにあります。ルートの下のサブディレクトリにそれらがある場合は、それも含める必要があります。

そして、ロケールを切り替えたい場合は、次のようにします。

CultureInfo french = new CultureInfo("fr-FR");
string translatedVal = rm.GetString("keyname", french);
于 2012-09-12T19:22:10.000 に答える