nodejs自动批量翻译中文到其它语言 下载本文

内容发布更新时间 : 2024/5/12 0:33:28星期一 下面是文章的全部内容请认真阅读。

/**

* 批量对中文文本进行翻译,我自己用在了源代码中对中文注释翻译成英文,使用谷歌翻译完成

* nodejs +selenium实现,使用简单,一下步骤:

* 1、下载driver“chromedriver.storage.googleapis.com/71.0.3578.80/chromedriver_win32.zip” * 2、配置环境变量,在path加入“C:\\work\\source\\driver\\” 这是我的解压后的路径 * 3、创建一个nodejs项目,然后安装npm install selenium-webdriver * 4、设置好需要翻译的文件路径

* 5、checkFilePath可以设置忽略的路径,checkFileType 可以设置允许翻译的文本文件类型,不支持word */

let fs = require('fs'); let path = require('path'); //解析需要遍历的文件

let filePath = path.resolve('C:\\\\work\\\\workspace\\\\Indonesia\\\\kuliner-saya\\\\microservice_backend\\\\'); //存放文件路径的数组 let fileArr = [];

//存放中文翻译的结果

let translateMap=new Map();

var webdriver = require('selenium-webdriver'), By = webdriver.By, until = webdriver.until;

var driver = new webdriver.Builder() .forBrowser('chrome') .build(); /**

* 格式化时间 * @param fmt * @returns {*} * @constructor */

Date.prototype.Format = function(fmt) { var o = {

\ \ \ \ \

\ \ };

if (/(y+)/.test(fmt))

fmt = fmt.replace(RegExp.$1, (this.getFullYear() + \ for (var k in o)

if (new RegExp(\

fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\o[k]).length))); return fmt; };

async function init() {

//初始化需要翻译的文件 fileDisplay(filePath); var len = fileArr.length; /* for(var i in fileArr){ console.log(fileArr[i]); }*/

// 初始化google翻译地址

await driver.get(\CN&tl=en\汉语 -> 英语

let source = await driver.wait(until.elementLocated(By.id('source')), 10000); var sb =null;

for(var i in fileArr){

sb = new StringBuffer();

sb.append(\

hh:mm:ss\lating file: \ console.log(sb.toString());

await analyticalFile(source,fileArr[i]); } }

init(); /**

* 调用谷歌翻译 */

async function translate(source,chinese){ await source.sendKeys(chinese);

let resElement = await driver.wait(until.elementLocated(By.className(\translation\

let str = await resElement.getText();

let clear = await driver.wait(until.elementLocated(By.className(\ await clear.click(); return str; }

/**

* 文件遍历方法

* @param filePath 需要遍历的文件路径 */

function fileDisplay(filePath){ if(!checkFilePath(filePath)){ return; }

//根据文件路径读取文件,返回文件列表 var files = fs.readdirSync(filePath); //遍历读取到的文件列表

files.forEach(function(filename){ //获取当前文件的绝对路径

var filedir = path.join(filePath,filename); var stats =fs.statSync(filedir); var isFile = stats.isFile();//是文件

var isDir = stats.isDirectory();//是文件夹 if(isFile && checkFileType(filedir)){ fileArr.push(filedir); }

if(isDir){

fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件 } }); } /**

* 判断文件路径 * @param filePath

* @returns {boolean} true 不包含忽略的文件 false 包含忽略的文件 */

function checkFilePath(filePath){

var ignorePath = [\ for(var i in ignorePath){

if(filePath.indexOf(ignorePath[i]) != -1){ return false; } }

return true; }

/**

* 判断文件类型 * @param filedir

* @returns {boolean} true 允许翻译的文件 false 不允许翻译的文件 */

function checkFileType(filedir){ let idx = filedir.lastIndexOf(\ if(idx == -1){ return false; }

var availableSuffixs = [\ let suffix = filedir.substring(idx,filedir.length); if(availableSuffixs.indexOf(suffix) != -1){ return true; }

return false; } /**

* 读取文件

* @param filePath */

async function analyticalFile(source,filePath){ var data = fs.readFileSync(filePath, 'utf8'); //console.log(data);

var match = data.match(/[\一-\?]+/g); if (!!match) {

//排序把字符串长度越长的放在最前面 match.sort(function (a,b) { if (a.length < b.length) { return 1; } else { return -1; } });

//去重复与过滤短文本 match = uniqFilter(match);

//循环遍历文件中的中文进行翻译 var keyword = null; for(var i in match){ keyword = match[i];

if(translateMap.containsKey(keyword)){ continue; }

//console.log(keyword);

let res = await translate(source,keyword); //随机睡眠1-3秒,防止被识别 sleep(sum(1,3000));

translateMap.put(keyword,res) } }

//console.log(\ var tStr =null; //替换原来的内容 for(var n in match){ keyword = match[n];

//console.log(\ tStr = new StringBuffer();

tStr.append(keyword).append(\ data = data.replace(new RegExp(keyword, 'g'), tStr.toString()); }

//console.log(data); writeFile(data,filePath); }

function writeFile(data,filePath){

var w = fs.writeFileSync(filePath,data);

//console.log(\ } /**

* 程序随眠的时间 * @param sleepTime */

function sleep(sleepTime) {

var start = new Date().getTime(); while(true) {

if(new Date().getTime()-start > sleepTime){ break; } } } /**

* 取随机数