我有一个 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 同步。它们必须相同。(Rick Stahl 在这里解释了这一点。)
我试图修改我的 C# 项目文件以自动复制该文件。但是,我无法让它工作。我不是 msbuild 专家!我添加了以下构建目标:
<Target Name="BeforeResGen">
<Copy SourceFiles="@(CopyAsLocalizedResources)" DestinationFiles="$(IntermediateOutputPath)Resources.$(UICulture).resx">
<Output ItemName="EmbeddedResource" TaskParameter="DestinationFiles"/>
</Copy>
</Target>
我将 Resources.resx 的 Build Action 从 None 更改为 CopyAsLocalizedResources。
我看到我的 Resources.en.resx 文件在构建过程中被复制到中间目录,但在运行时找不到我的资源,并且出现异常。据推测,它们永远不会被编译到卫星程序集中。
任何人都可以通过修改项目文件来帮助我实现这一目标吗?