此文是前文使用现有在线翻译服务进行代码翻译的体验的编程语言方面第二点的一个尝试. 参考Which framework to generate source code ? - Cleancode and Refactoring, 选了一个综合代价看来最小的, forge/roaster, 因为它同时具备解析和生成两方面功能.

初步汉化后代码效果如下(尚未有语法高亮, 仅作演示用. 之后的在线翻译结果也是同样处理):

package com.company.example;import java.io.Serializable;public class 人 implements Serializable {private static final long serialVersionUID = 1L;private final 整型 号;private 字符串 全名;public 整型 get号() {return 号;}public 字符串 get全名() {return 全名;}public void set全名(字符串 全名) {this.全名 = 全名;}public 人(java.lang.Integer id) {this.id = id;}
}

实现的源码在: https://github.com/program-in-chinese/java_code_translator/blob/8c038261bd797d9738de182f3e0f8ac111402704/src/main/java/com/codeinchinese/code_translator/%E7%BF%BB%E8%AF%91Java%E4%BB%A3%E7%A0%81.java

相关实现比较简单. 因为侧重代码解析生成, 翻译部分最简化(采用纯映射表):

  static Map<String, String> 字典 = new HashMap<>();static {字典.put("id", "号");字典.put("fullName", "全名");字典.put("getId", "取号");字典.put("Integer", "整型");字典.put("String", "字符串");字典.put("Person", "人");}public static void main(String[] 参数) throws Exception {String 源码 = 文件功用.取源文件文本("测试.java");JavaClassSource 分析结果 = Roaster.parse(JavaClassSource.class, 源码);// 汉化类名分析结果.setName(查词(分析结果.getName()));// 汉化Bean属性名, 以及属性的类型名for (PropertySource<JavaClassSource> 某属性 : 分析结果.getProperties()) {String 属性名 = 某属性.getName();某属性.setName(查词(属性名));String 属性类型名 = 某属性.getType().getName();某属性.setType(查词(属性类型名));}System.out.println(分析结果);}private static String 查词(String 英文) {return 字典.containsKey(英文) ? 字典.get(英文) : 英文;}

Roaster一大缺陷是, 还不支持对方法内容的解析: ROASTER-1: Java Statement Fluent Model by sotty · Pull Request #27 · forge/roaster 貌似主创最近不很活跃, 很可能需要另辟蹊径.

顺便把源码用在线翻译服务翻译一下进行比较.

谷歌几乎没有翻译:

package com.company.example;import java.io.Serializable;public class Person实现Serializable {private static final long serialVersionUID = 1L;private final Integer id;private String fullName;public Integer getId(){返回id;}public String getFullName(){return fullName;}public void setFullName(String fullName){this.fullName = fullName;}public Person(java.lang.Integer id){this.id = id;}
}

百度改变源码太大:

包装公司。
导入JavaIO.SerialCalab化;
公共类人谓词可序列化{
私有静态最终的长序列化版本UID=1L;
私有最终整数ID;
私有字符串全名;
公共整数gTiID()
序列标识;
}
公共字符串GETFuleNAMEL()
返回全名;
}
公共空隙设置FULL NULL(String FulnNeX){
全名=全名;
}
公共人(java.郎.整数ID){
这个ID=ID;
}
}

个人感觉即使是这样初步的翻译, 也是有优势的. 至于编程语言关键词不翻译, 尚不是致命问题, 毕竟下面打算与英汉词典API结合一下试试(这里有一点初步尝试, 对释义的选取还需改进). 如效果还可以接受就上线做一下内测.

2018-09-13

代码翻译尝试-使用Roaster解析和生成Java源码相关推荐

  1. 2018-09-13 代码翻译尝试-使用Roaster解析和生成Java源码

    此文是前文使用现有在线翻译服务进行代码翻译的体验的编程语言方面第二点的一个尝试. 参考Which framework to generate source code ? - Cleancode and ...

  2. 我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)

    Python代码用"命令容器"方法os.system(),调用Linux命令行工具crul获取CSDN博文页面源码,Python内置re正则解析出博文笔记信息,按阅读量降序模块输出 ...

  3. android 解析、生成二维码

    android 解析.生成二维码 (1)ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台 ...

  4. DIY官网可视化工具打造低代码可视化一键生成导出源码工具

    DIY官网可视化工具 打造低代码可视化一键生成导出源码工具 设计一次打通设计师+产品经理+技术开发团队必备低代码可视化工具 从想法到原型到源码,一步到位低代码生成源码工具 立即定制DIY官网可视化工具 ...

  5. 面试官系统精讲Java源码及大厂真题 - 30 AbstractQueuedSynchronizer 源码解析(上)

    30 AbstractQueuedSynchronizer 源码解析(上) 不想当将军的士兵,不是好士兵. 引导语 AbstractQueuedSynchronizer 中文翻译叫做同步器,简称 AQ ...

  6. 面试官系统精讲Java源码及大厂真题 - 27 Thread 源码解析

    27 Thread 源码解析 书籍乃世人积累智慧之长明灯. 引导语 从本章开始我们开始学习线程的知识,线程是非常有趣的一个章节,大多数同学对于线程 API,属于不用就忘,到用时需要百度的情况,希望通过 ...

  7. 华为OD机试(21-40)老题库解析Java源码系列连载ing

    华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...

  8. Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]

    Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介: A.代码生成器(开发利器) 生成Java各层次的类和JSP等文件,提高开发效率 B.阿里巴巴 ...

  9. 编译与代码安全之认识(二):Source2Source源码混淆方法

    一.说明:            针对源码混淆其实在代码保护中应用很多,大部分是应用在像JS这种脚本语言中,因为很多时候JS是以源码的形式出现,网上有很多关于JS保护的工具,比较出名的是JSugly和 ...

最新文章

  1. 点、线、面生成mvt(MapBox Vector Tile)格式的瓦片总结
  2. Devexpress的Datalayout控件
  3. lua-nginx-module directives 中文版
  4. [激励机制]浅谈内部竞争——如何让你的员工玩命干活?
  5. javascrip学习之 数据类型和变量
  6. DSP28335学习记录(三)——ePWM
  7. 搭建邮件服务器2003,用Windows Server 2003来搭建简易的邮件服务器
  8. G: LZY的计算器
  9. 对数及对比度拉伸变换
  10. 《学Unity的猫》——第十章:Unity的物理碰撞,流浪喵星计划
  11. python微信刷票脚本在哪_微信刷票Python脚本教程
  12. SCI和EI的索引号查询方法
  13. 梅科尔工作室-梁嘉莹-鸿蒙笔记1
  14. GZOI2019GXOI2019 滚粗记
  15. 软件架构设计师:软件架构风格
  16. 手机无线网卡最高支持到866Mbps
  17. [OHIF-Viewers]医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性...
  18. 备案,备案!段总的Blog被叫停了!
  19. 分子动力学系综小结 (转)
  20. Liferay开发学习(1)

热门文章

  1. IDEA Git缓慢
  2. 第二篇:读曹德旺《心若菩提》
  3. PSIFT:Pore Scale-invariant feature transform;毛孔尺度不变特征点
  4. 全国大学生数学竞赛备考——高数上(极限、导数、微分、积分、级数)
  5. TensorFlow - 使用Eigen进行矩阵计算
  6. Qt sender()用法详解
  7. 棋类游戏的真正收获 - 延迟满足感
  8. [转载]C++URL编码转换
  9. office picture manger图片处理工具下载与安装教程
  10. android 方向键 按钮,这不科学!安卓虚拟按键、实体键谁更好?