我在C#中有一個WPF應用程序,可能需要在未來進行本地化。我想支持XAML/BAML本地化和傳統的resx本地化。 (前者對於大多數代碼很有用,但是某些本地化內容來自視圖模型,使用resx文件更直接。)如何修改我的C#項目文件,以便將Resources.resx編譯到我的UICulture的衛星程序集中?
我已閱讀WPF Localization Guidance的相關部分。我已經在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 explains that here.)
我試圖修改我的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文件在構建過程中被複制到中間目錄,但是我的資源在運行時沒有找到,並且出現異常。他們從未被編入衛星組件。
任何人都可以幫助我實現這個使用項目文件的修改?
謝謝,但我的行動旨在運行_before_構建。它應該創建一個新的源文件並將其推送到EmbeddedResource組中。 – Olly