.NET汉化用工具:UniTranslator

之前,为了汉化某WPF软件,我开发了一个针对WPF中的BAML的工具BAML Translator。后来,当初的汉化目标的新版本越来越复杂,也渐渐遇到了其他.NET小玩意儿的汉化,于是我对它进行了各种修补。终于我发现当文本条目比较多的时候,没有进行行虚拟化的WinForm的列表控件用起来很卡(其实可以实现,只是有些麻烦),而且在高分屏下的显示也一片糊(其实也可以解决,不过同时适配高分屏和普通屏会更加麻烦),遂决定用WPF重写。于是就有了现在的UniTranslator。——这也是Uni家族的第二个工具了(<ゝω・)☆ 

最早的BAML Translator只能针对WPF中的BAML,但如今UniTranslator已能汉化.NET中三种类型的字符串:BAML,硬编码(Hard Code)和资源(Resource)。这基本上已经涵盖了.NET桌面程序(WinForm、WPF、Console等等)中字符串的大部分情况(当然图片资源就不在讨论范围了)。其实除了BAML之外,能实现另外两种汉化的方式已经很多。不过在UniTranslator中你将能得到简易且一致的体验:

选择模式——读取.NET文件——自动提取所有字符串——在右侧填写汉化文本(随时保存/读取汉化文本)——点击Process处理程序集——另存.NET文件。这样就完成了汉化。

更多使用说明可以参考BAML Translator那边的说明,大体上操作都是类似的。

但是用WPF撸的界面真的比之前的WinForm赏心悦目太多了,而且即使文本很多也不会卡,舒服(>ω<*) 

下载还是在原来的地址

 

除了界面好看之外,我通过WPF中的Command大法实现了各种快捷键,其中最有用的小技巧就是在没填写翻译的栏上按Ctrl+D就可以把原文复制到翻译栏上啦。不过有一点小瑕疵:效果不会立即刷新,只有当你进入这一栏的编辑模式或者上下滚动才会刷新,不过这应该影响不大。另外Ctrl+S也是需要经常按的,万一崩了呢……(*/ω\*)

——

偶尔会翻到我blog的朋友中,可能有人会关心这玩意儿能不能用到Unity上。这个通常是不行的,因为Unity中的文本通常不会存在dll里,而是会在资源里。所以还是需要多研究别的方案。不过如果真的有存到dll中的文本的话,本工具的HardCode模式还是能起到一点作用的。

评论 (6) -

  • 赞!这种不用逆向,就能汉化的手法,对我们这种业余小白,真是太方便了。我折腾了好几天的die、DotNet_Id、de4dot……又是侦壳又是脱壳又是去混淆,累死了,还没一丝进展。用这个竟然直接就打开了。简直帅呆了
    • 试了下,字符串确实能解析,但是,在填入翻译后,先选process assembly,再save assembly,然后存成的新exe文件,打开还是没翻译的啊……不知道为什么:
      原文件和翻译后resave的文件:https://pan.baidu.com/s/1dykNz4jxqDqabMR3bCoO0A
      • 你好,我测试过了,是可以正确汉化的。
        请再次尝试或者换一台电脑尝试,不行可以把翻译文本发来我给你执行一哈。
        • 谢谢你确认,这是翻译文本:https://notepad.pw/share/16w6b3dv5
          但后续文本要反复修改,不能总麻烦你,还得我本地解决呀。刚发现连load text都load不进去了…看来不是我电脑问题,就是使用方法不对了=。=
          上面那个链接里Modified后的文件,你运行后是翻译还是没翻译的呢?
          • 显然你并没有正确操作,而且你也没有舍得花时间仔细观看文中这张软件截图。
            你的错误操作是把翻译填到了原文的位置(显然你也没意识到Origin和Translation想表达什么意思,这对于一个翻译者来说是不应该的),而翻译框内什么都没填,这样当然是不会有任何文本被翻译了。
            一个正常的翻译软件必定会在界面上保留原文文本的,否则怎样对照和纠错呢?
            至于为什么原文栏是可修改的而非锁定的,那是因为此工具在某些模式下会过滤文本(如Unicode Only模式会过滤掉纯英文文本),所以多提供一种手动设置原文的途径罢了。
            如果你习惯用Tab键,你会发现:当你当前光标在原文栏时,按Tab键会进入当前行的翻译栏;而当你光标在翻译栏时,按Tab键会进入下一行的翻译栏,这也是提高效率、专注于翻译栏的设计。但是,读入文本的时候,由于某些文本很长,会把原文栏也撑得很长,所以你并没注意到后面还有一栏。但是观察刚启动的本程序(有4栏)、或是注意观察截图、或是有阅读BAML Translator的使用说明,都不可能会出现这种问题。
            • 很棒,填对栏后成功解决~批评100%接受,谢谢你的工具,很好用

添加评论

Loading