WPF应用程序的本地化是一个复杂的过程,涉及到大量的细节和手动步骤。本文旨在介绍一种简化本地化流程的方法,通过使用Visual Studio项目模板和一些自动化工具,使开发多语言WPF应用程序变得更加高效和便捷。
微软推荐的使用LocBaml工具进行本地化有很多优点,但维护起来较为困难。André van Heerwaarde在其文章中提出了一种简化的方法,通过配置构建步骤来合并翻译后的文本片段。尽管如此,文章中仍然包含了许多手动步骤。
为了简化本地化流程,创建了一个“本地化的WPF应用程序”模板。使用此模板创建的项目已经包含了所有必要的本地化工具,并且自动化了本地化过程。在应用程序开发过程中,只需添加新的XAML文件,而无需担心本地化问题。完成更改后,只需构建项目即可。
自定义构建步骤将调用以下命令:
msbuild /t:updateuid [Project Name].csproj
此步骤将自动为包含文本元素的每个元素添加x:Uid属性。然后构建过程将自动启动LocBaml,它将找到XAML文件中的所有文本元素并生成一个包含这些文本元素的CSV文件。
接下来,将运行André van Heerwaarde的MergeLocBamlCsv工具。结果将是之前翻译的片段与新的片段合并。然后,StripLocBamlCsv工具将从CSV文件中删除未使用的项目。
要添加新语言,需要执行以下步骤:
<LocBamlCsv Include="Translation\Translate.ru-RU.csv">
<Culture>ru-RU</Culture>
</LocBamlCsv>
复制中立语言的位置到新的CSV文件中。
在文本编辑器中打开项目文件,并在以下行之后添加新语言的配置:
<!-- Add new language here -->
然后需要在Visual Studio中重新打开项目。如果项目已经打开,IDE会询问是否重新打开项目以反映更改,回答“是”。
如果没有错误,新打开的项目文件夹Translation将包含一个新文件Translate.ru-RU.csv。启动程序以更新翻译文件,然后可以打开新文件并开始翻译。
StringResources.xaml是一个资源字典示例,用于翻译字符串:
<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Uid="system:String_1" x:Key="TestString1">
Test
</system:String>
<system:String x:Uid="system:String_2" x:Key="MainWindow">
Main Window
</system:String>
</ResourceDictionary>
C# this.Title = (string)FindResource("MainWindow");