WPF的本地化思路提示:直接汉化BAML

首先是看到这篇博文:《WPF四年,尤不足以替代WinForm》其中就提到了WPF本地化的问题。其中是这么说的:

编译之后XAML会被编译成二进制的BAML,而BAML的格式是非公开的。这样就不能去改被引用的对象属性名。

然而,非公开的就一定无从知晓了吗?也许是时代进步了,那篇博文发布已经五年过去了,很多事实都已经发生了变化:WPF引入的XAML继续用于Windows应用、WindowsPhone甚至是Android、iOS(Xamarin)的开发、WPF本身的效率也在改进、界面效果完胜WinForm。然而说了这么多其实我也没少用WinForm……

总之,事实上现在BAML的格式已经不是一个秘密。通过解析BAML文件(甚至是直接解析.NET文件资源中的BAML流),我们可以做到直接基于BAML的汉化,就像广大汉化工作者汉化Win32或是Winform程序一样,并不需要源文件。

过程思路:

  1. 从.NET文件中取出资源

  2. 从资源文件中取出BAML文件(以上两步也可换为直接读取.NET文件并定位到资源的位置)

  3. 解析BAML文件

  4. 对BAML的相关条目(Record)进行更改

  5. 重新生成(写入)BAML文件

  6. 重新构建资源文件

  7. 用新的资源文件替换.NET文件中原有的资源文件


效果示例:

WPF的本地化思路提示:直接汉化BAML_第1张图片

汉化前的某WPF程序。

WPF的本地化思路提示:直接汉化BAML_第2张图片

上图是我写的BAML Translator。仅仅是一个简易的实现,仍然存在一些问题。

WPF的本地化思路提示:直接汉化BAML_第3张图片

汉化后的效果。

你可能感兴趣的:(本地化,汉化,WPF,XAML,BAML)