.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模式还是能起到一点作用的。

 

——

20201206更新:

2.0版本的UniTranslator:支持中文界面,修复了数个可能导致crash的bug,文本导出/导入格式改用CSV。

评论 (20) -

  • 赞!这种不用逆向,就能汉化的手法,对我们这种业余小白,真是太方便了。我折腾了好几天的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%接受,谢谢你的工具,很好用
  • 有点小问题,1、没有搜索功能,2、快速保存不能保存未翻译内容,
    • 第2点有选项:Option - Save Untranslated
      第1点记下了,但短期内没有改进的时间和动力。后续可能会把导出格式改成CSV吧,方便在excel里直接做翻译。
    • 2.0版的导出格式已改为CSV。可以用Excel去搜索了。至于保存未翻译内容,前面有提到过是可以设置的,这次也加入了中文界面,方便理解各个设置选项。
  • 很好的软件,近期又要对巨型.NET工具包开刀了,顺便看了下有没有更新,居然发现今年有个1.3版本出来,艰难从github上下载试试看。早年发现了此工具,虽然不能完全解决我的问题,但是磕磕绊绊的还是基本搞定,减少很多手工操作。感谢作者。
  • 另外希望作者如果有空研究下对于BAML中包含的UI主题字体、颜色字串调整的稳定方法就好了。
  • X
    新1.3有个BUG,还好发现的早,不然翻译多了就全跪...现象是翻译完并处理保存为新的文件之后,我不小心点了“Locked”按钮,马上又点回来,结果程序就立刻崩溃了。
    • bug确实存在,会尽快修复的,这两天可以关注下github。
      > UI主题字体、颜色字串调整
      这些理论上都能做到,但是很难做成一个通用的方式。我曾建议dnSpy作者0xd4d制作BAML的重编译插件,0xd4d大佬虽然也觉得有用,但并没有做。还是得有空自己再搓了。
      • 总要重新输入名字,哈,不小心少打了。X还是我。要有个替换功能就太好了。我也曾搞过强行人肉修改BAML的字串,烦得要死。尤其是面对的是个1.5G的巨型套件,有这个修修无法用本地化工具解决的字体修正问题帮了我大忙,非常感谢。网上也各种搜索都没有找到有人提供BAML和XAML互转的功能。
        • 2.0版本的UniTranslator已经修正了crash的问题。你可以导出csv文本到excel中去做翻译/替换等操作了。
          • 很速度啊,马上试试去。
  • Lin
    需要的功能:导出csv 或者txt !!!这个最重要。其他就是搜索 过滤 排序 啥的了。其实只要有了导出,其他就都不重要了
    • 上个月更新的2.0版本已经支持导出/导入csv。
  • 非常好的工具,最近帮上了我的大忙,这里请教一个问题:

    我汉化的这个程序的菜单中有个“Help”菜单栏,但是这个“Help”单词不能汉化,否则启动程序就出错,类似的还有“Properties”和“Close”这几个单词,您有没有碰到过?有没有什么办法处理?
    • 这大概是遇到了Binding字符串和文本字符串撞车的情况。Binding字符串是不能够修改的,而且Binding字符串和普通字符串并没有能自动区分的方式。
      如果一个BAML中既有叫Help的Binding字符串、又有叫Help的普通字符串,那现在的默认行为是全部修改掉,因此会造成程序出错。
      近期如果有空的话,可能会研究一下,提供一种可以避免汉化Binding字符串的方式。

添加评论

Loading