正しいリソース ファイル エントリの取得に問題があり、助けが必要です...これが私のシナリオです
この形式に従う大規模なレポート ソリューションの一部である一連のプロジェクトがあります。
Plugin.****レポート
- 参照(フォルダ)
- DataAccessLayer (フォルダー)
- DataSet (フォルダー)
- DataWrappers (フォルダー)
ローカリゼーション (フォルダー)
*.cs
* は生成するレポートの名前です
*.cs には export ステートメントが含まれているため、MEF を使用して取得できます (これが関連しているかどうかはわかりませんが、言及する価値があると思います)。*.cs の名前空間は CompanyName.DataShaper.Plugin.*Report です。プロジェクト名とファイルの場所により、各プロジェクトのデフォルトの名前空間を CompanyName.DataShaper.Plugin.*Report に変更しました (変更前は Plugin.*Report でした)。
ここで問題が発生しました.. *.cs の内部で、ResourceManager をインスタンス化しています。それはこのように見えます...
_resourceManager =
new ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report",
Assembly.GetExecutingAssembly());
私のresxデザイナーファイル内には、次のものがあります...
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report", typeof(*Report).Assembly);
resourceMan = temp;
}
return resourceMan;
}
リソースマネージャーへの呼び出しは次のようになります...
string resourceString = _resourceManager.GetString(resourceKey, _currrentCultureInfo);
ここで、_currentCultureInfo は正しい CultureInfo オブジェクトです。
各プロジェクトの Localization フォルダーに 4 つの異なる resx ファイルがあります (****Report.resx、****Report.fr-ca.resx、****Report.en-gb.resx、*** *Report.de-de.resx)。
リソース マネージャーを呼び出すと、常に .resx からエントリを取得します。呼び出しに渡す CultureInfo オブジェクトに関係なく、他の言語ファイルは取得しません。私は何を台無しにしましたか?
--> 元の質問を簡単に更新しますが、これは MEF に関連しているようです。クラスを昔ながらの方法 (new *Report()) でインスタンス化し、ローカリゼーション呼び出しを行ったところ、正常に動作しました