2018-10-17 Chrome插件实现GitHub代码翻译v0.0.3

续前文浏览器插件实现GitHub代码翻译原型演示, 通过调用浏览器插件-离线英汉词典的批量查词接口, 实现了源码的初步命名直译.
源码库仍在: program-in-chinese/webextension_github_code_translator
还缺失的功能: 驼峰命名法拆分. 比如图中所示, BasicCalculator未翻译.
语言关键词词典.js. 內建词典包括常用关键词, 以及Java和Python的专用关键词:
var 通用关键词 = {
'assert': "断言",
'import': "导入",
"if": "如果",
"else": "否则",
"while": "每当",
"for": "对于",
"in": "在",
"switch": "岔",
"case": "分支",
"break": "跳出",
"continue": "继续",
"return": "返回",
"throw": "抛出",
"finally": "善后",
'class': "类别",
'is': "为"
}
var 专用关键词 = {
/*
参考 http://zetcode.com/lang/python/keywords/
import keyword
print("Python keywords: ", keyword.kwlist)
*/
"python": {
'False': "假",
'None': "空",
'True': "真",
'and': "且",
'as': "as",
'def': "定义",
"del": "删除",
'elif': "否则如果",
'except': "except",
'from': "从",
'global': "全局",
'lambda': "lambda",
'nonlocal': "nonlocal",
'not': "不",
'or': "或",
'pass': "轮空",
'raise': "抛出",
'with': "with",
'yield': "产出"
},
// 参考 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
"java": {
...
}
}
释义处理.js. 查词后, 选取一个"合适"的词义, 这里还很粗糙:
function 首选(中文释义, 所有词性) {
if (!中文释义) {
return;
}
var 首选词义 = "";
var 词性到释义 = 分词性(中文释义, 所有词性);
//console.log(词性到释义);
if (词性到释义[词性_计算机]) {
首选词义 = 词性到释义[词性_计算机][0];
} else {
// 取第一个词性的第一释义
for (var 词性 in 词性到释义) {
首选词义 = 词性到释义[词性][0];
break;
}
}
return 首选词义;
}
主界面.js中进行翻译的主体部分:
function 翻译() {
var 原代码拷贝 = document.getElementsByTagName('table')[0];
var 顶节点 = 原代码拷贝.parentElement;
var 编程语言 = 取编程语言(顶节点);
var span字段列表 = 原代码拷贝.getElementsByTagName('span');
var 文本字段列表 = 取子文本节点(document);
关键词词典 = 取所有关键词(编程语言);
// 合并两个部分
添加所有待查词(span字段列表);
添加所有待查词(文本字段列表);
chrome.runtime.sendMessage(
"ndifefelacmidghjaehmhicbchbidhpe",
命名词典,
function(返回值) {
命名词典 = 返回值.所有释义;
for (var 词 in 命名词典) {
命名词典[词] = 常用命名[词] ? 常用命名[词] : 首选(命名词典[词], 词性);
}
翻译字段列表(span字段列表);
翻译字段列表(文本字段列表);
顶节点.insertBefore(document.createTextNode("编程语言: " + 编程语言), 原代码拷贝);
}
);
}
2018-10-17 Chrome插件实现GitHub代码翻译v0.0.3的更多相关文章
- 2018-10-19 Chrome插件实现GitHub代码离线翻译v0.0.4
续前文Chrome插件实现GitHub代码翻译v0.0.3. 添加了对驼峰命名的支持. 由于调用浏览器插件-离线英汉词典进行词汇翻译, 因此也不依赖于任何在线翻译服务. Chrome插件: 官网链接 ...
- 2018-08-29 浏览器插件实现GitHub代码翻译原型演示
此原型源自此想法: 中文化源码. 考虑到IDE插件工作量较大, 且与IDE绑定. 在代码转换工具的各种实现中, 综合考虑实用+易用+长远改进潜力, 浏览器插件似乎较有优势. 于是用最快捷的方式实现这一 ...
- Dell Technology Summit(2018.10.17)
时间:2018.10.17地点:北京国家会议中心
- octotree-chrome插件,Github代码阅读神器
1.下载octotree-chrome插件 下载地址 2.安装问题 由于新版chrome为了安全,已经不支持像以前一样拖拽插件进行安装,只能从其 Chrome Web Store 下载安装扩展程序. ...
- dream(2018.10.17)
一句话题意:讲什么题意啊,见usaco2017feb silver的T1,一模一样,就是牛和鸡的读入顺序反过来了一下,数据范围大了10倍,卡掉了\(O(n^2)\)的算法. 数据范围: 对于 30%的 ...
- 2018.10.17 NOIP模拟 管道(状压dp)
传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...
- 2018.10.17 NOIP模拟 发电机(概率dp)
传送门 考试空间开大了爆零不然只有30分爆栈? 话说这题真的坑1e7没法写dfsdfsdfs 其实很好推式子. 考虑每个点安一个发动机的概率,推一波式子做个等比数列求和什么的可以证明出来是严格的1si ...
- 2018.10.17校内模拟赛:T2神光
题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...
- icekingdom(2018.10.17)
一句话题意:给你一颗n个点的树,节点初始状态下都是白色,有q次修改,每次修改会把[li,ri]区间内的点染成黑色,并且问黑色点能形成几个联通块,然后会将所有点染回白色.(也就是说每次都只有[li,ri ...
随机推荐
- Python学习笔记【第七篇】:文件及文件夹操作
介绍 我们用pytthon.C#.Java等这些编程语言,想要把文件(文字.视频....)永久保存下来就必须将文件写入到硬盘中,这就需要我们应用程序去操作硬件,我们这些编程语言是无法直接操作硬件的. ...
- NumPy 学习笔记(二)
数组索引: 1.ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样: 由于数组可能是多维的,所以必须为数组的每个维度指定一个切片,使用切片时返回 ...
- [原创]K8 Cscan 3.6大型内网渗透自定义扫描器
前言:无论内网还是外网渗透信息收集都是非常关键,信息收集越多越准确渗透的成功率就越高但成功率还受到漏洞影响,漏洞受时效性影响,对于大型内网扫描速度直接影响着成功率漏洞时效性1-2天,扫描内网或外网需1 ...
- java mongodb连接配置实践——生产环境最优
之前百度,google了很多,发现并没有介绍mongodb生产环境如何配置的文章, 当时想参考下都不行, 所以写篇文章,大家可以一块讨论下. 1. MongoClientOptions中的连接池配置: ...
- (转)python异步编程--回调模型(selectors模块)
原文:https://www.cnblogs.com/zzzlw/p/9384308.html#top 目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分 ...
- MFC原理第二讲.MFC的初始化过程
MFC原理第二讲MFC的初始化过程 一丶简介 通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里. 这一节主要就是讲解Winmain在哪里. ...
- NiftyNet开源平台的使用 -- 配置文件
NiftyNet开源平台的使用 NiftyNet基础架构是使研究人员能够快速开发和分发用于分割.回归.图像生成和表示学习应用程序,或将平台扩展到新的应用程序的深度学习解决方案. 详细介绍请见: ...
- 详细分析MySQL的日志(一)
官方手册:https://dev.mysql.com/doc/refman/5.7/en/server-logs.html 不管是哪个数据库产品,一定会有日志文件.在MariaDB/MySQL中,主要 ...
- Python 的反射机制
什么叫做反射 利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型.然后,可以 ...
- Java编译与反编译
Javac是一种编译器,它的作用是将符合Java语言规范的源代码转化成符合Java虚拟机规范的Java字节码. 一.编译过程 词法分析:找出源代码中的所有关键字,生成Token流 语法分析:检查Tok ...