在线代码离线翻译Chrome插件"一马"v0.0.8

简介: 实现Chrome插件, 基于本地词典数据, 提供Github和码云在线源码翻译功能. Implement a Chrome extension to translate English source code to Chinese on Github pages.

续前文: Chrome插件实现GitHub代码离线翻译v0.0.4

添加了对"码云"在线代码的翻译支持, 因此改名暂为"一马". 在此贴中调研了常用的在线代码网站: 各位都在什么源码站上在线看代码? - V2EX, 暂未发现其他.

注: 此插件调用浏览器插件-离线英汉词典 0.0.7进行查词, 因此也不依赖任何在线翻译服务, 不存在API调用限制.

改进功能:

  • 支持"码云"代码翻译
  • 添加 C/PHP 关键词的翻译
  • 删除释义中的括号内内容

无法粘贴图片。详见原文:https://zhuanlan.zhihu.com/p/48120706
2018-10-30-gitee演示

"码云"的代码段与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"
  }
}

Chrome插件商店

下个版本打算改进的(11/02/2018: 在0.0.11版中已基本完成):

相关文章
|
6天前
|
Web App开发 存储 开发者
Chrome 插件上架发布全流程指南
浏览器插件开发完以后,要发布到 Chrome Web Store上,也是需要颇费一番周折的,本文就从注册账号开始,一直到最后发布上架的全流程进行指导,希望帮助你提供一些经验,避免踩坑,耗时耗力。
107 7
|
3月前
|
Web App开发 JSON JavaScript
vue学习:chrome 中 vuetools 开发插件 的下载、安装
这篇文章介绍了如何在Chrome浏览器中下载、安装并测试Vue.js开发插件——vue-devtools。
574 0
vue学习:chrome 中 vuetools 开发插件 的下载、安装
|
5月前
|
Web App开发 存储 前端开发
《Chrome谷歌插件Top10》开发最好用的谷歌插件
本文介绍了多个实用的浏览器插件及其安装方法。包括CSDN浏览器助手,提供高效开发工具;FeHelper,前端必备工具,支持格式化、压缩等功能;uBlock Origin,有效屏蔽广告和弹窗;PageLiner,网页标尺工具,便于前端设计;Fatkun,批量下载图片;Smallpdf,文件转换工具;Octotree,GitHub代码树插件;Awesome Screenshot,截图与录屏工具;ColorZilla,颜色拾取器;Dark Reader,暗黑模式阅读插件。安装方式有通过Chrome商店搜索或下载crx插件本地安装。
101 11
|
5月前
|
Web App开发 JSON 前端开发
30个Chrome 灵魂插件!
30个Chrome 灵魂插件!
74 4
|
5月前
|
Web App开发 前端开发 JavaScript
灵魂拷问-前端到底能做些什么?--chrome插件篇
本文会从浏览器插件应用场景切入,穿插插件基础能力和常见入口的介绍,核心回答如下三个问题:插件可以被使用在哪些场景?不同的使用场景我们的主要代码实现思路是怎样的?我们可以从哪些角度入手自己开发一款可以落地实用的浏览器插件?
|
4月前
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
633 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
15天前
|
Web App开发 安全 前端开发
一个接口4个步骤轻松搞定最新版Chrome、Edge、Firefox浏览器集成ActiveX控件
目前的浏览器市场,谷歌浏览器占据了半壁江山,因此,谷歌也是最有话语权的,2015年开始取消支持 NPAPI 插件,2022 年10月停止支持 PPAPI 插件;而曾经老大哥IE浏览器也已停止服务,退出历史舞台,导致大量曾经安全、便捷的ActiveX控件无法使用。为了解决这个难题,本人特研发出allWebPlugin中间件,重新让所有ActiveX控件能在谷歌、火狐等浏览器使用。
|
16天前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
2月前
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
242 2
|
2月前
|
Web App开发 Linux iOS开发
Chrome浏览器如何导出所有书签并导入书签
【11月更文挑战第4天】本文介绍了如何在 Chrome 浏览器中导出和导入书签。导出时,打开书签管理器,点击“整理”按钮选择“导出书签”,保存为 HTML 文件。导入时,同样打开书签管理器,点击“整理”按钮选择“导入书签”,选择之前导出的 HTML 文件即可。其他主流浏览器也支持导入这种格式的书签文件。
1537 2