私はクラスライブラリを持っています-それをフレームワークと呼びます。assemblyinfo.csには、次のものがあります。
[assembly: NeutralResourcesLanguage("en-US")]
\ Resources \ディレクトリの下に、FrameworkResources.resxとFrameworkResources.fr-FR.resxがあります。
ヘルパークラスでは、これをリソースマネージャーとして使用しています。
private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());
コードでは、私がこのようなことをすると:
String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);
CurrentCultureにデバッグしてカーソルを合わせると、それ(およびUICulture)がfr-FRに設定されますが、これは常にデフォルトの英語メッセージを返します。fr-FRリソースファイルからのフランス語メッセージではありません。
ResourceManagerはそれを自動的に接続する必要がありますか、それとも現在のカルチャをクエリするコードを記述してから、適切なファイルを開く必要がありますか?それが現在の文化であるため、Resource Managerがfr-FR文字列を取得することを知っていると仮定するのは間違っていますか?
なぜこれが機能しないのかわかりません。
更新: 私は衛星アセンブリを持っているので、コンパイル部分はうまくいくと信じています。問題は私のリソースマネージャーにあると思います。ResourceSetsを使用し、ResourceManagerを次のように明示的に使用してみました。
ResourceManager manager =
new ResourceManager("Framework.Resources.FrameworkResources",
Assembly.GetExecutingAssembly());
Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));
その結果、次のようになります。
de-DE : Argument '%ArgumentName%' cannot be null or empty. el : Argument '%ArgumentName%' cannot be null or empty. es-MX : Argument '%ArgumentName%' cannot be null or empty. fr-FR : Argument '%ArgumentName%' cannot be null or empty. hi : Argument '%ArgumentName%' cannot be null or empty. zh-CN : Argument '%ArgumentName%' cannot be null or empty.
したがって、すべてが整っていても、私のリソースマネージャーは単にそれらの衛星アセンブリを調べようとはしていません。そして明確にするために、これらのアセンブリには、上記の文字列の翻訳バージョンがあります。したがって、カルチャ固有のファイルではなく、デフォルトのFrameworkResources.resxファイルから確実に読み取っています。