7

ローカライズされた文字列を後でライブASP.NET(MVC4)サイト/アプリケーションに挿入するプロジェクトに取り組んでいます。これを実現するために計画している方法(検証メッセージなど)は、クライアントから文字列を取得し、それらを.resxファイルに入れ、この.resxファイルを.resourcesファイルにコンパイルしてから.dllにコンパイルすることです。最後に、この.dllは、ライブサイトの関連する言語フォルダーに配置されます。ただし、この手動で作成された.dllは、アプリケーションによって取得されていません。代わりに、デフォルト言語の.dllにフォールバックします。一方、.resxファイルがVisual Studio(2012)を介してコンパイルされた場合、.dllはアプリケーションによって正常に取得され、そこからローカライズされたテキストが表示されます。

.dllを手動で作成する方法に問題があると思いますが、問題は見つかりません。コマンドラインコンソールで実行する内容は次のとおりです。

resgen Strings.fr-FR.resx Strings.fr-FR.resources

それから、

al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll
4

1 に答える 1

3

これは、生成時にフランス語でローカライズされたリソースDLLで使用されている名前空間が、アプリケーションでリソースファイルに使用されている名前空間とは異なることが原因である可能性があります。

リソースファイルの名前をからに変更する必要がありStrings.fr-FR.resourcesますMyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources

デフォルトでは、リソースファイルはプロパティフォルダにあります。これは、完全修飾名を使用してローカライズされた文字列にアクセスできることを意味しますMyApplication.Properties.Resources.MyString

アプリケーションの名前がMyApplicationで、リソースファイルがPropertiesフォルダーの下にある場合は、次の方法でリソースファイルを生成します。

resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources

次に、次の方法でDLLを生成します。

al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll

これで、アプリケーションのbinフォルダーのfr-FRフォルダーに配置すると、認識されるはずです。

以前に生成したアセンブリのマニフェストと、ildasm.exeを使用して現在生成されているアセンブリを確認してください。2番目のケースでは、次の行が表示されますが.mresource public 'MyApplication.Properties.Resources.fr-FR.resources'、最初のケースでは、次のようになります.mresource public 'Strings.fr-FR.resources'。アプリケーションは名前空間「MyApplication.Properties」にローカライズされた文字列を検索するため、それを見つけることができませんでした...もちろん、「MyApplication.Properties.Resources」をアプリケーションで使用されているもの(おそらく「MyApplication.Localization」)に適合させます。 .Strings')。

于 2012-11-17T13:25:00.667 に答える