在线代码离线翻译Chrome插件"一马"v0.0.8
续前文: Chrome插件实现GitHub代码离线翻译v0.0.4
添加了对"码云"在线代码的翻译支持, 因此改名暂为"一马". 在此贴中调研了常用的在线代码网站: 各位都在什么源码站上在线看代码? - V2EX, 暂未发现其他.
注: 此插件调用浏览器插件-离线英汉词典 0.0.7进行查词, 因此也不依赖任何在线翻译服务, 不存在API调用限制.
改进功能:
- 支持"码云"代码翻译
- 添加 C/PHP 关键词的翻译
- 删除释义中的括号内内容
无法粘贴图片。详见原文:https://zhuanlan.zhihu.com/p/48120706
"码云"的代码段与GitHub的HTML结构略有不同, 暂时分别处理如下:
function 获取代码段() { var 当前域名 = window.location.host; // 默认, 适用于GitHub var 代码段节点 = document.body.getElementsByTagName('table')[0]; if (当前域名 == "gitee.com") { 代码段节点 = document.body.getElementsByClassName('code')[0] } // GitHub: 父节点的class包含编程语言信息, 如class="blob-wrapper data type-python " return [代码段节点.parentElement.outerHTML]; } function 翻译() { // TODO: 避免与`获取代码段()`重复 var 编程语言 = ""; var 原代码拷贝 = document.body.getElementsByClassName('code'); var 顶节点 = null; if (原代码拷贝.length == 0) { 原代码拷贝 = document.getElementsByTagName('table')[0]; 顶节点 = 原代码拷贝.parentElement; 编程语言 = 取编程语言(顶节点); } else { 添加CSS("https://gitee.com/assets/application-e5df8140372297eda15f23497886ffdb.css"); 原代码拷贝 = 原代码拷贝[0]; } ... }
大幅增加了通用关键词的手工翻译, 以覆盖尽可能多的编程语言:
// TODO: 并非所有编程语言都有. 会影响命名翻译. var 通用关键词 = { "abstract": "抽象", "and": "且", "as": "as", "assert": "断言", "break": "跳出", "boolean": "布尔", "byte": "字节", "char": "字节", "const": "const", "case": "分支", "class": "类别", "catch": "接住", "continue": "继续", "default": "默认", "do": "执行", "double": "双浮点", "else": "否则", "enum": "枚举", "extends": "扩展", "extern": "外部", "false": "假", "final": "最终", "finally": "善后", "float": "单浮点", "for": "对于", "function": "函数", "global": "全局", "goto": "goto", "if": "如果", "implements": "实现", "import": "导入", "in": "在", "include": "包括", "instanceof": "为实例", "int": "整数", "interface": "接口", "is": "为", "long": "长整数", "native": "native", "new": "新", "null": "空", "or": "或", "package": "包", "private": "私有", "protected": "保护", "public": "公有", "return": "返回", "short": "短整数", "signed": "有符号", "sizeof": "大小", "static": "静态", "struct": "结构", "super": "父类", "switch": "岔", "synchronized": "同步", "this": "本身", "throw": "抛出", "throws": "会抛出", "transient": "transient", "true": "真", "try": "尝试", "typedef": "类型定义", "union": "联合", "unsigned": "无符号", "void": "无值", "volatile": "volatile", "while": "每当", "with": "with", "yield": "产出" } var 专用关键词 = { // https://msdn.microsoft.com/en-us/library/befeaky0.aspx "c": { "auto": "auto", "register": "register" }, // http://php.net/manual/en/reserved.keywords.php "php": { // array() "callable": "可调用", "clone": "克隆", "const": "const", "declare": "声明", // die() "echo": "回响", "elseif": "否则如果", // empty() "enddeclare": "结束声明", "endfor": "结束for", "endforeach": "结束foreach", "endif": "结束if", "endswitch": "结束switch", "endwhile": "结束while", // eval() // exit() "foreach": "对每个", "implements": "实现", "include_once": "包括_单次", "instanceof": "为实例", "insteadof": "insteadof", "interface": "接口", // isset() // list() "namespace": "命名空间", "print": "打印", "require": "需要", "require": "需要_单次", "trait": "trait", // unset() "use": "use", "var": "var", "xor": "异或" }, "javascript": { "arguments": "参数", "await": "等待", "debugger": "调试器", "delete": "删除", "eval": "eval", "export": "导出", "let": "让", "typeof": "为类型", "var": "变量" }, /* 参考 http://zetcode.com/lang/python/keywords/ import keyword print("Python keywords: ", keyword.kwlist) */ "python": { "False": "假", "None": "空", "True": "真", "def": "定义", "del": "删除", "elif": "否则如果", "except": "except", "from": "从", "lambda": "lambda", "nonlocal": "nonlocal", "not": "不", "pass": "轮空", "raise": "抛出", }, // 参考 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html "java": { "strictfp": "strictfp" } }
下个版本打算改进的(11/02/2018: 在0.0.11版中已基本完成):
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Chrome插件实现GitHub代码离线翻译v0.0.4
续前文Chrome插件实现GitHub代码翻译v0.0.3. 添加了对驼峰命名的支持. 由于调用浏览器插件-离线英汉词典进行词汇翻译, 因此也不依赖于任何在线翻译服务. Chrome插件: 官网链接 支持所有编程语言 因为并不需要对源代码进行语法分析(之前Java源码英翻中进展-内测上线中使用了语法分析, 工作量大很多), 因此原则上已经支持所有编程语言的源代码. 但对一些编程语言效果更好, 见下面效果. Java: 源码来源 Python: 源码来源 C: 源码来源 接下去添加C的关键词翻译后, include/char就不会那么坑了. 阶段小结 翻译方面做下去会遇到和自然语言机器翻译类似的问题. 当然会比自然语言好一些, 因为命名往往使用的是最正式(非口语化)的词汇, 连接词的使用也较少, 而且基本没有完整语句. 即便如此, 也会存在词汇的歧义, 比如词性问题, 比如顶图例子中BasicCalculator, Basic在內建词典中有名词/形容词几种词义: n. 基本原理, 要素, 基本规律 a. 基本的, 碱性的 (计算机)BASIC语言 现在的算法是直接用首个词义, 就是名词的...
- 下一篇
在代码中进行中文命名实践的短期目标
对中文命名的意义不再赘述, 请参看之前的对在代码中使用中文命名的质疑与回应. 去年中文命名实践的阻力和应对之后, 在一些小项目中继续实践了中文命名(Java/JS/Python等, 详见之前的专栏文章), 涉及领域不少但尚未形成明确的重点项目. 发现了一些在业务相关代码使用中文命名的例子(你们在怎样的项目中使用过中文命名? - V2EX), 还未形成社区. 下面是可能的努力方面: 编写示例代码为中文命名的教程. 之前有一些尝试, 专栏中带有示例代码的文章也都采用了中文命名 在开源项目中实践中文命名, 也欢迎提出实用项目的想法或者例题面试题等 开发中文命名的API, 如之前的简繁转换库, 离线英汉词典等 补: 在IDE中进行中文命名的辅助工具, 包括输入法与自动补全集成等. 开发工具, 辅助翻译现有英文命名的源码为中文命名, 以 #1 辅助在线阅读学习代码或者 #2 批量转换一个项目中的所有源码等等 打算将最后一项作为短期内的中心内容, 围绕它开发一系列开源工具. 包括浏览器插件, IDE插件等. 1从两个月前开始实践, 最近基本实现了翻译在线代码段(GitHub和码云)的浏览器插件原型...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度