一个利用百度API 做i18n自动打包的方案
2017-11-02 00:00
274 查看
含i18n的项目中,在刚开发时我们可能只有一份中文文件,在切换其他语言的时候,我们往往要用中文的源文件做其他语言的翻译。有没有自动翻译我们的中文文件到想要的其他语言文件的方法呢?请看下面,这是我的一个方案。使用node.js 和gulp 做的,若想用其他语言处理请参考自行修改。
开始只有一份中文的json文件:
在控制台运行我的gulp任务:gulp json-translate
可以看到 中文json所在的文件目录多了好多json文件,这些都是利用百度翻译API自动翻译的其他语言版本的json文件。我这里打开了一个英文版本的json文件。
利用百度可翻译的语种有一下几种:
若想了解更多,请自行参考百度翻译API文档:http://api.fanyi.baidu.com/api/trans/product/index
下面就废话少说,直接上代码:
以上的代码就可以完成本文所说的问题了。其代码没有进行优化,也称不上一个好的方案,但是基本能完成我目前的需求了。若你有好的方案,希望分享到邮箱:1428667939@qq.com.
开始只有一份中文的json文件:
在控制台运行我的gulp任务:gulp json-translate
可以看到 中文json所在的文件目录多了好多json文件,这些都是利用百度翻译API自动翻译的其他语言版本的json文件。我这里打开了一个英文版本的json文件。
利用百度可翻译的语种有一下几种:
若想了解更多,请自行参考百度翻译API文档:http://api.fanyi.baidu.com/api/trans/product/index
下面就废话少说,直接上代码:
/** **@disc:描述文件 **@date:2017/10/30 23:00 **@author:zb **@method: **@params: */ /** * 将中文json文件翻译为其他语言json文件 */ var gulp = require('gulp'), i18n = require('../functions/i18n'), rename = require('gulp-rename') ; // 翻译文件的任务 gulp.task('json-translate',function() { // 需要翻译的语种 var languges=['en','yue','wyw','jp','kor','fra','spa','th','ara','ru','pt','de', 'it','el','hl','pl','bul','est','dan','fin','cs','rom','slo','swe','hu','cht','vie']; for(var lan 7fe8 guge in languges){ gulp.src('./src/assets/i18n/zh.json') .pipe( // 翻译的具体逻辑 i18n('',languges[languge]) ) .pipe(rename({ dirname: "i18n", basename: languges[languge], extname: ".json" })) // 翻译之后的文件输出的文件路径 .pipe(gulp.dest('./src/assets/')); } })
var request = require('request'), through = require('through2'), gutil = require('gulp-util'); PluginError = gutil.PluginError; md5 = require('md5/md5'); // 常量 const PLUGIN_NAME = 'gulp-i18n'; var url="http://api.fanyi.baidu.com/api/trans/vip/translate", appid = '2015063000000001', key = '12345678', salt = (new Date).getTime(), from = 'zh', to = 'en'; /** * 转换json的语言 * @param from 翻译源语言 * @param to 译文语言 * @returns {*} */ function i18n(from,to){ // 创建一个 stream 通道,以让每个文件通过 var stream = through.obj(function(file, enc, cb) { // console.log(JSON.stringify(file)) if (file.isStream()) { this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!')); return cb(); } if (file.isBuffer()) { var json= JSON.parse(file.contents.toString()); var tJson=''; // 获取json文件要翻译的数据 for(var v in json){ if(json[v] instanceof Object){ tJson=getText(json[v],tJson); } else { tJson += json[v]+"\n"; } } if(tJson.length >2000) this.emit('error', new PluginError(PLUGIN_NAME, '源文件 大于 2000字')); // 翻译文件 post({ "from":from,"query": tJson,"to":to, "callback": (error, response, body) => { if(!error && response.statusCode === 200 ){ var result=JSON.parse(body).trans_result; var content=file.contents.toString().replace(/(:\s*")(\S+)(")/gi, function (match, p1, p2, p3, offset, string) { for (var k in result) { if (result[k]['src'] === p2) { return p1 + result[k]['dst'] + p3; } } return match }) file.contents=new Buffer(content); // 确保文件进入下一个 gulp 插件 this.push(file); // 告诉 stream 引擎,我们已经处理完了这个文件 cb(); } } }); } }); // 返回文件 stream return stream; } /** * 获取要翻译的数据 * @param src * @param dst * @returns {*} */ function getText(src,dst){ for(var k in src){ if(src[k] instanceof Object){ dst = getText(src[k],dst); } else { dst += src[k] + "\n"; } } return dst; } // 请求百度翻译要翻译的文本 function post(options) { var str1 = options.appid ? options.appid : appid + options.query + salt + key; var sign = md5(str1); request({ url: options.url ? options.url : url, method: "POST", form: { q: options.query, appid: options.appid ? optioss.appid : appid, salt: salt, from: options.from ? options.from : from, to: options.to ? options.to : to, sign: sign } }, options.callback ) } module.exports= i18n;
以上的代码就可以完成本文所说的问题了。其代码没有进行优化,也称不上一个好的方案,但是基本能完成我目前的需求了。若你有好的方案,希望分享到邮箱:1428667939@qq.com.
相关文章推荐
- 根据一个地址利用百度api返回该地址所在的省市
- 利用百度api判断已知经纬度的一个点是否在多边形内
- 利用WebBrowser控件实现百度自动搜索
- 对于FacebookF8开发者大会开源深度学习框架Caffe2以及百度开放自动驾驶平台API的看法
- 利用反射api查找一个类的具体信息
- 用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨
- Android利用productFlavors 打包不同版本API的调用
- iPhone 利用CG API画一个饼图(Pie chart) 可以用在很多地方 画弧线
- 利用Jenkins玩转Android自动打包发包
- QWebKit-Qt利用DOM API访问网页元素(百度博客下载例子)
- 如何利用百度ocr实现验证码自动识别
- 利用beego自动生成带数据库基本CRUD的API和自动化文档
- 利用Camera与Surface结合的一个自动对焦拍照Demo
- 利用NET HUNTER建立一个自动文件下载的网络接入点
- 安卓利用百度api定位遇到 经纬度经纬度返回4.9E-324
- Windows上利用Python自动切换代理IP的终极方案!
- 如何避免Docker容器启动脚本运行后自动退出——一个cron定时任务docker镜像方案
- 利用百度API实现文字识别
- PyQt利用百度API绘制行车路径
- Discuz利用百度ping把我们网站自动提交到百度