123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #!/usr/bin/env node
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * npm install --save-dev colors
- * npm install --save-dev iconv-lite
- */
- 'use strict';
- require('colors');
- const fs = require('fs-extra');
- const readline = require('readline');
- const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
- });
- const client_id = 'J2f4lmfl2XghGb92zQ4N';
- const client_secret = '1qHQ9YQNMc';
- function translate(query, target) {
- return new Promise((resolve) => {
- if (target !== 'ko') {
- var api_url = 'https://openapi.naver.com/v1/papago/n2mt';
- var request = require('request');
- var options = {
- url: api_url,
- form: { source: 'ko', target: target, text: query },
- headers: { 'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret },
- };
- request.post(options, function (error, response, body) {
- if (!error && response.statusCode == 200) {
- resolve(JSON.parse(body).message.result.translatedText.trim());
- } else {
- resolve(query.trim());
- }
- });
- } else {
- resolve(query.trim());
- }
- });
- }
- function showLogo(callBack) {
- fs.readFile('./banner.txt', 'utf8', (error, jsonFile) => {
- const logo = jsonFile;
- fs.readFile('./package.json', 'utf8', (error, jsonFile) => {
- const packageInfo = JSON.parse(jsonFile);
- console.log(logo.green + '\n' + (packageInfo.description + ' ' + packageInfo.version).red);
- callBack();
- });
- });
- }
- var myArgs = process.argv.slice(2);
- function translateQ(translateQueue, target, callBack ) {
- const q = translateQueue.shift();
- if (q !== null && q !== undefined) {
- translate(q.query, target).then((result) => {
- process.stdout.write(".");
- q.setter(result);
- translateQ(translateQueue, target, callBack );
- });
- } else {
- callBack();
- }
- }
- showLogo(() => {
- if (myArgs.length > 0) {
- const folderName = myArgs[0];
- const question = [];
- question.push('Select Language to Translate.)');
- question.push('ko - Korean(Resort)');
- question.push('ja - Japanese');
- question.push('en - English');
- question.push('cn - Chinese');
- question.push('es, fr, vi, th, id');
- question.push('Language (ja | en | cn ...) - ? ');
- rl.question(question.join('\n'), function (locale = '') {
- let target = 'en';
- switch (locale.toLowerCase()) {
- case 'ko':
- case 'korean':
- target = 'ko';
- break;
- case 'ja':
- case 'japanese':
- target = 'ja';
- break;
- case 'en':
- case 'english':
- target = 'en';
- break;
- case 'cn':
- case 'zh':
- case 'zh-cn':
- case 'chinese':
- target = 'zh-CN';
- break;
- case 'es':
- case 'fr':
- case 'vi':
- case 'th':
- case 'id':
- target = locale.toLowerCase();
- break;
- }
- console.log("Translate Korean to " + target.red + " start !!");
- fs.readFile(folderName + '.json', 'utf-8', function (err, jsonFile) {
- const jsonInfo = JSON.parse(jsonFile);
- const translateQueue = [];
- const keys = Object.keys(jsonInfo);
- keys.forEach(key => {
- if (typeof(jsonInfo[key]) === 'string') {
- translateQueue.push({ query : jsonInfo[key], setter : (txt) => {
- jsonInfo[key] = txt;
- }})
- } else if (typeof(jsonInfo[key]) === 'object') {
- const childObj = jsonInfo[key];
- const childKeys = Object.keys(childObj);
- childKeys.forEach(childKey => {
- if (typeof(childObj[childKey]) === 'string') {
- translateQueue.push({ query : childObj[childKey], setter : (txt) => {
- childObj[childKey] = txt;
- }})
- }
- });
- }
- });
- translateQ(translateQueue, target, function() {
- fs.writeFile(
- folderName + '-' + target + '.json',
- JSON.stringify(jsonInfo, null, "\t"),
- 'utf-8',
- () => {
- console.log("\n\nTranslate Korean to " + target.red + " end !! - " + folderName + '-' + target + '.json');
- process.exit(1);
- }
- );
- });
- });
- });
- } else {
- console.log('missing argument!!'.red + ' ex) node ./scripts/translate.js docs/translate');
- process.exit(1);
- }
- });
|