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文件中原有的资源文件


效果示例:

233138_nAWZ_1457169.png

汉化前的某WPF程序。

233138_4GMN_1457169.png

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

233137_8OlG_1457169.png

汉化后的效果。

转载于:https://my.oschina.net/UlyssesWu/blog/404698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值