将来ローカライズする必要があるかもしれないC#のWPFアプリケーションがあります。XAML/BAMLローカリゼーションと従来のresxローカリゼーションをサポートしたいと思います。(前者はほとんどのコードで役立ちますが、一部のローカライズされたコンテンツはビューモデルからのものであり、resxファイルを使用する方が簡単です。)
WPFローカリゼーションガイダンスの関連部分を読みました。msbuildファイルでUICultureプロパティを設定しました。AssemblyInfo.csに次の行を追加しました。
[assembly: NeutralResourcesLanguage("en", UltimateResourceFallbackLocation.Satellite)]
ローカライズされたリソースがサテライトアセンブリに書き込まれるように、Resources.resxをResources.en.resxとしてコピーする必要があることを理解しています。
Resources.resxのビルドターゲットをNoneに設定し、Resources.en.resxのビルドターゲットをEmbeddedResourceに設定しました。Resources.resxのカスタムツールは、強く型付けされたリソースクラスを生成するPublicResXFileCodeGeneratorです。ジェネレーターは、カルチャ固有のサフィックスがないファイルでのみ機能することを知っています。
現時点では、Resources.resxとResources.en.resxの同期を手動で維持する必要があります。それらは同一でなければなりません。(リック・スタールはここでそれを説明しています。)
C#プロジェクトファイルを変更して、ファイルを自動的にコピーしようとしました。しかし、これを機能させることはできません。私はmsbuildのエキスパートではありません!次のビルドターゲットを追加しました。
<Target Name="BeforeResGen">
<Copy SourceFiles="@(CopyAsLocalizedResources)" DestinationFiles="$(IntermediateOutputPath)Resources.$(UICulture).resx">
<Output ItemName="EmbeddedResource" TaskParameter="DestinationFiles"/>
</Copy>
</Target>
Resources.resxのビルドアクションをNoneからCopyAsLocalizedResourcesに変更しました。
ビルド中にResources.en.resxファイルが中間ディレクトリにコピーされているのがわかりますが、実行時にリソースが見つからず、例外が発生します。Presumabyは、衛星アセンブリにコンパイルされることはありません。
プロジェクトファイルへの変更を使用してこれを達成するのを誰かが助けてくれますか?