把你的JS代码翻译成中文书写的代码,并且可执行
Switch branches/tags
Nothing to show
Clone or download
sunxinyu
sunxinyu 文章
Latest commit e00a59e Mar 4, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin 处理重复变量 Mar 4, 2016
.gitignore 你好世界 Mar 4, 2016
README.md 文章 Mar 4, 2016
article.md 文章 Mar 4, 2016
code.js 更新示例代码 Mar 4, 2016
code.汉.js 更新示例代码 Mar 4, 2016
index.js 文章 Mar 4, 2016
package.json 更新示例代码 Mar 4, 2016
translate_util.js 处理重复变量 Mar 4, 2016

README.md

把你的JS代码转换成中文版。。。

就是这么变态。

使用AST替换变量名,使用百度翻译服务翻译代码。

使用方式:

sudo npm install hancode -g;

#定位到某个目录

hancode -s ./code.js

#会在当前目录生成一个 code.汉.js

#code.汉.js 的代码其实就是本库的中文版,测试可以跑通,并且结果一样。

todolist

  • 翻译属性名
  • 多个文件联合编译

示例:

var 丑化JS = require("uglify-js");

var _ = require("underscore");

var 翻译工具 = require("./translate_util");

var 翻译对象 = {};

module.exports = function(源代码, 回调) {
    var AST的代码 = 丑化JS.parse(源代码);
    var 无功节点 = [];
    var 参考节点 = [];
    var 跨语言 = [];
    AST的代码.walk(new 丑化JS.TreeWalker(function(结) {
        if (结 instanceof 丑化JS.AST_SymbolVar) {
            无功节点.push(结);
            跨语言.push(结.name);
        }
    }));
    AST的代码.walk(new 丑化JS.TreeWalker(function(结) {
        if (结 instanceof 丑化JS.AST_SymbolRef) {
            if (跨语言.indexOf(结.name) != -1) {
                参考节点.push(结);
                跨语言.push(结.name);
            }
        }
    }));
    跨语言 = _.uniq(跨语言);
    console.log("翻译中");
    翻译工具(跨语言, function(E, 结果) {
        翻译对象 = 结果;
        使uniq对象(翻译对象);
        无功节点.forEach(function(结) {
            结.name = 翻译对象[结.name] || 结.name;
        });
        参考节点.forEach(function(结) {
            结.name = 翻译对象[结.name] || 结.name;
        });
        回调(null, AST的代码.print_to_string({
            beautify: true
        }));
    });
};

var 使uniq对象 = function(obj) {
    var 扫描值 = [];
    for (varin obj) {
        var 价值 = obj[我];
        if (扫描值.indexOf(价值) != -1) {
            var 重复计数 = 0;
            扫描值.forEach(function(v) {
                if (v == 价值) {
                    重复计数++;
                }
            });
            obj[我] = 价值 + "_" + 重复计数;
        }
        扫描值.push(价值);
    }
};