// src/libs/google-translate/index.js
var querystring = require("querystring");
var axios = require("axios");
var languages = require("./languages");
function translate(text, opts) {
opts = opts || {};
var e;
[opts.from, opts.to].forEach(function (lang) {
if (lang && !languages.isSupported(lang)) {
e = new Error();
e.code = 400;
e.message = "The language '" + lang + "' is not supported";
}
});
if (e) {
return new Promise(function (resolve, reject) {
reject(e);
});
}
opts.from = opts.from || "auto";
opts.to = opts.to || "en";
opts.from = languages.getCode(opts.from);
opts.to = languages.getCode(opts.to);
// 完整的地址是 http://translate.google.com/translate_a/single
// 如果是浏览器端发出的请求可以让后端配置代理
let url = "/translate_a/single";
const data = {
client: "gtx",
dt: "t",
dj: 1,
ie: "UTF-8",
sl: opts.from,
tl: opts.to,
q: text,
};
url = `${url}?${querystring.stringify(data)}`;
return axios
.get(url)
.then(function (res) {
const { sentences } = res.data;
let result = {};
if (sentences && sentences[0]) {
const { trans, orig } = sentences[0];
result = { trans, orig };
}
return result;
})
.catch(function (err) {
console.log("err", err);
var e = new Error();
if (err.statusCode !== undefined && err.statusCode !== 200) {
e.code = "BAD_REQUEST";
} else {
e.code = "BAD_NETWORK";
}
throw e;
});
}
module.exports = translate;
module.exports.languages = languages;
// src/libs/google-translate/languages.js
/**
*
* Generated from https://translate.google.com
*
* The languages that Google Translate supports (as of 5/15/16) alongside with their ISO 639-1 codes
* See https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
*/
var langs = {
auto: "Automatic",
af: "Afrikaans",
sq: "Albanian",
am: "Amharic",
ar: "Arabic",
hy: "Armenian",
az: "Azerbaijani",
eu: "Basque",
be: "Belarusian",
bn: "Bengali",
bs: "Bosnian",
bg: "Bulgarian",
ca: "Catalan",
ceb: "Cebuano",
ny: "Chichewa",
"zh-cn": "Chinese Simplified",
"zh-tw": "Chinese Traditional",
co: "Corsican",
hr: "Croatian",
cs: "Czech",
da: "Danish",
nl: "Dutch",
en: "English",
eo: "Esperanto",
et: "Estonian",
tl: "Filipino",
fi: "Finnish",
fr: "French",
fy: "Frisian",
gl: "Galician",
ka: "Georgian",
de: "German",
el: "Greek",
gu: "Gujarati",
ht: "Haitian Creole",
ha: "Hausa",
haw: "Hawaiian",
iw: "Hebrew",
hi: "Hindi",
hmn: "Hmong",
hu: "Hungarian",
is: "Icelandic",
ig: "Igbo",
id: "Indonesian",
ga: "Irish",
it: "Italian",
ja: "Japanese",
jw: "Javanese",
kn: "Kannada",
kk: "Kazakh",
km: "Khmer",
ko: "Korean",
ku: "Kurdish (Kurmanji)",
ky: "Kyrgyz",
lo: "Lao",
la: "Latin",
lv: "Latvian",
lt: "Lithuanian",
lb: "Luxembourgish",
mk: "Macedonian",
mg: "Malagasy",
ms: "Malay",
ml: "Malayalam",
mt: "Maltese",
mi: "Maori",
mr: "Marathi",
mn: "Mongolian",
my: "Myanmar (Burmese)",
ne: "Nepali",
no: "Norwegian",
ps: "Pashto",
fa: "Persian",
pl: "Polish",
pt: "Portuguese",
ma: "Punjabi",
ro: "Romanian",
ru: "Russian",
sm: "Samoan",
gd: "Scots Gaelic",
sr: "Serbian",
st: "Sesotho",
sn: "Shona",
sd: "Sindhi",
si: "Sinhala",
sk: "Slovak",
sl: "Slovenian",
so: "Somali",
es: "Spanish",
su: "Sundanese",
sw: "Swahili",
sv: "Swedish",
tg: "Tajik",
ta: "Tamil",
te: "Telugu",
th: "Thai",
tr: "Turkish",
uk: "Ukrainian",
ur: "Urdu",
uz: "Uzbek",
vi: "Vietnamese",
cy: "Welsh",
xh: "Xhosa",
yi: "Yiddish",
yo: "Yoruba",
zu: "Zulu",
};
/**
* Returns the ISO 639-1 code of the desiredLang – if it is supported by Google Translate
* @param {string} desiredLang – the name or the code of the desired language
* @returns {string|boolean} The ISO 639-1 code of the language or false if the language is not supported
*/
function getCode(desiredLang) {
if (!desiredLang) {
return false;
}
desiredLang = desiredLang.toLowerCase();
if (langs[desiredLang]) {
return desiredLang;
}
var keys = Object.keys(langs).filter(function (key) {
if (typeof langs[key] !== "string") {
return false;
}
return langs[key].toLowerCase() === desiredLang;
});
return keys[0] || false;
}
/**
* Returns true if the desiredLang is supported by Google Translate and false otherwise
* @param desiredLang – the ISO 639-1 code or the name of the desired language
* @returns {boolean}
*/
function isSupported(desiredLang) {
return Boolean(getCode(desiredLang));
}
module.exports = langs;
module.exports.isSupported = isSupported;
module.exports.getCode = getCode;
const translate = require("@/libs/google-translate");
translate(this.original, { from: "en", to: this.targetLang })
.then((res) => {})
.catch((err) => {})
.finally(() => {});