ResourceManagerはすべての文化を自動的にロードしますか?
-
12-12-2019 - |
質問
クラスライブラリを持っています - それはフレームワークを呼び出します。 AssemblyInfo.csでは、:
[assembly: NeutralResourcesLanguage("en-US")]
.
\ Resources \ Directoryの下で、 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を介してデバッグしてホバーすることができ、IT(そして歌劇)はFR-FRに設定されています。
ResourceManagerは自動的にそれを自動的に配線するか、現在の文化を照会するためのコードを書くべきであるべきです、そして正しいファイルを開く?これが現在の文化であるため、Resource ManagerがFR-FR文字列を取得することを知っていると仮定して誤っていますか?
これが機能していないのかわかりません。
更新:
衛星アセンブリがありますので、コンパイル部分が大丈夫だと思います。問題が私のリソースマネージャーにあると思います。私はリソースセットを使い、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.
だから、すべてが整っていても、私のリソースマネージャはそれらの衛星アセンブリを調べようとしていません。また、それらのアセンブリでは、上記の文字列の翻訳版があります。
解決
私はそれを考え出した(Interweb上でより洗練されている)。私はユニットテストからコードを実行していました、そして、MSTestは衛星アセンブリを「展開」しません。テスト設定に入り、「展開」をオフにすると、すべてが期待どおりに機能します。Ugh!