有没有针对源代码的在线翻译服务? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
xuanwu
V2EX    奇思妙想

有没有针对源代码的在线翻译服务?

  •  
      xuanwu 2018-08-31 13:27:00 +08:00 5022 次点击
    这是一个创建于 2607 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如, 输入英文代码:

    # This is my shopping list shoplist = ['apple', 'mango', 'carrot', 'banana'] print('I have', len(shoplist), 'items to purchase.') print('These items are:', end=' ') for item in shoplist: print(item, end=' ') print('\nI also have to buy rice.') shoplist.append('rice') print('My shopping list is now', shoplist) print('I will sort my list now') shoplist.sort() print('Sorted shopping list is', shoplist) print('The first item I will buy is', shoplist[0]) olditem = shoplist[0] del shoplist[0] print('I bought the', olditem) print('My shopping list is now', shoplist) 

    返回中文对应代码:

    # 这是我的购物单 购物单 = ['苹果', '芒果', '胡萝卜', '香蕉'] 打印('我有', 长度(购物单), '要购买的产品.') 打印('这些物品是:', 结尾=' ') 对于 物品 在 购物单: 打印(物品, 结尾=' ') 打印('\n 我还得买大米.') 购物单.添加('米') 打印('我的购物单现在在', 购物单) 打印('我现在就整理我的清单') 购物单.排序() 打印('排序的购物清单是', 购物单) 打印('我要买的第一件东西是', 购物单[0]) 第一项 = 购物单[0] 删除 购物单[0] 打印('我买过', 第一项) 打印('我的购物单现在在', 购物单) 
    20 条回复    2018-10-08 15:05:54 +08:00
    Inod
        1
    Inod  
       2018-08-31 14:13:33 +08:00
    一些拼音自编缩写变量名怎么办 :狗头
    xuanwu
        2
    xuanwu  
    OP
       2018-08-31 14:47:00 +08:00 via Android
    @Inod 毕竟是极少数吧。绝大多数应该还是英文命名的, 尤其是教程等的示例代码。
    1313213
        3
    1313213  
       2018-08-31 15:33:28 +08:00
    为什么会有这种需求?
    Greendays
        4
    Greendays  
       2018-08-31 17:25:10 +08:00
    看来楼主被领导安排了一些很那啥的工作吧
    persimmon
        5
    persimmon  
       2018-08-31 17:44:24 +08:00
    是想要转译成易语言吗?
    dingdangnao
        6
    dingdangnao  
       2018-08-31 19:59:05 +08:00 via iPad
    意义是什么?
    fox0001
        7
    fox0001  
       2018-09-01 18:15:40 +08:00 via Android
    没意思…这种代码都看不懂,怎么编程?更何况很多自定义方法都不是一两个字就能说明清楚的…

    不过,如果能做成代码自动注释,那就是另一个境界的事情了
    yuanxing008
        8
    yuanxing008  
       2018-09-03 03:53:58 +08:00
    然而。。这种翻译的目的性呢?无实际应用价值的东西为什么要做
    976683240
        9
    976683240  
       2018-09-03 09:58:45 +08:00
    毫无意义的工作
    xuanwu
        10
    xuanwu  
    OP
       2018-09-03 13:21:17 +08:00 via Android
    看来是没有这样的工具 /服务。
    如认为有价值的但不便现身的不妨点感谢。
    无论如何都会尽量实现, 但估计会是长期项目。会在此帖报告进展。
    flynaj
        11
    flynaj  
       2018-09-06 00:59:16 +08:00 via Android
    这个字典替换就可以,非常简单,只是更加不好阅读
    youngxhui
        12
    youngxhui  
       2018-09-06 07:52:21 +08:00   1
    这是搜狗翻译的结果,直接调用这些翻译的接口基本可以实现

    ![]( http://7xt81u.com2.z0.glb.qiniucdn.com/Snipaste_2018-09-06_07-50-30.png)
    xuanwu
        13
    xuanwu  
    OP
       2018-09-06 08:12:15 +08:00
    @youngxhui 多谢. 之前在 GG 翻译也测试过. 看起来搜狗结果没有考虑到代码语法. GG 的好像考虑了, 但翻译效果欠佳.
    这些翻译接口都不免费, 而且长期来看不可能有永久免费的(像之前的有道).
    现在正在实现一个英汉词典 API: t/485481
    之后再着手这个原型. 大概思路在 https://github.com/program-in-chinese/overview/issues/86

    ```
    #这是我的购物清单
    shoplist = ['apple','mango','胡萝卜','香蕉']

    打印('我有',len (商店列表),'要购买的商品。')

    print ('这些项目是:',end ='')
    对于商店列表中的项目:
    print ( item,end ='')

    打印('\ n 我还要买米饭。')
    shoplist.append ( '大米')
    打印('我的购物清单现在',店铺列表)

    打印('我现在将对我的列表进行排序')
    shoplist.sort ()
    print ('Sorted shopping list is',shoplist )

    print ('我要买的第一件商品是',shoplist [0])
    olditem = shoplist [0]
    del shoplist [0]
    打印('我买了',olditem )
    打印('我的购物清单现在',店铺列表)
    ```
    xuanwu
        14
    xuanwu  
    OP
       2018-09-10 13:50:44 +08:00
    发帖时写的一个浏览器插件实现 GitHub 代码翻译原型演示: https://zhuanlan.zhihu.com/p/43304088
    正写篇调研文, 在几个在线文本翻译服务(gg, 搜狗, 百度, 有道等等)中尝试翻译源码, 看看效果.
    可以料想的是它们都不具备语法高亮功能. 主要关注点在于代码可读性和格式保全等问题.
    xuanwu
        15
    xuanwu  
    OP
       2018-09-10 15:07:36 +08:00
    "使用现有在线翻译服务进行代码翻译的体验": https://zhuanlan.zhihu.com/p/44169542
    用两个小例程测试了楼上的 4 个翻译服务. 最后有初步的需求分析.
    xuanwu
        16
    xuanwu  
    OP
       2018-09-14 14:00:09 +08:00
    "代码翻译尝试-使用 Roaster 解析和生成 Java 源码": https://zhuanlan.zhihu.com/p/44536065
    此文是前文使用现有在线翻译服务进行代码翻译的体验的编程语言方面第二点的一个尝试. 初步汉化后 Java 代码效果如下:

    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;
    }
    }
    xuanwu
        17
    xuanwu  
    OP
       2018-09-16 03:09:44 +08:00
    Java 源码英翻中库以及服务原型 https://zhuanlan.zhihu.com/p/44644112
    在前文代码翻译尝试-使用 Roaster 解析和生成 Java 源码的基础上, 作了一些改进. 主要有:

    - 对一般词汇使用普通英汉词典进行直译(优先选取计算机领域词义或者第一个词义)
    - 支持术语词典, 比如'instance', 上面的英汉词典中的第一个词义是'建议', 于是在术语词典中添加此项, 暂时译为'个例
    - 支持驼峰命名和下划线分隔法命名
    - 各种忽略. 详见命名翻译.java:
    - 一些歧义太多的词, 如 to for of
    - 单字符字段如 M
    对释义进行清理, 如括号中的内容, 特殊符号等等
    xuanwu
        18
    xuanwu  
    OP
       2018-09-19 07:53:14 +08:00
    很简陋的网页界面用于演示上面的封装服务. 在线演示地址: http://74.91.17.250:9000/

    测试用例:

    https://gist.github.com/nobodxbodon/25fd1d59027181ed317d7ca17ac5f153

    点击"翻译"即可
    xuanwu
        19
    xuanwu  
    OP
       2018-09-24 07:42:09 +08:00
    前端:
    添加了语法高亮 (基于 CodeMirror).
    考虑设置为根据内容自动调节编辑器高度, 以便通过浏览器滚动条同时滚动两个浏览器 (类似谷歌翻译等).
    还需调整字体大小, 现在翻译后带中文的行宽一些, 两边代码并不同样长度.

    语法分析部分:
    支持了数组类型的翻译.
    xuanwu
        20
    xuanwu  
    OP
       2018-10-08 15:05:54 +08:00
    Java 源码英翻中进展-内测上线: https://zhuanlan.zhihu.com/p/46207832
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2929 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:23 PVG 08:23 LAX 17:23 JFK 20:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86