js教程

js谷歌批量翻译接口代码

我的站长站 2023-04-16 人阅读
async function translation(array) {
    var splicing = []
    if (!(array instanceof Array)) {
        array = [array]
    }
    for (let i = 0; i < array.length; i++) {
        splicing.push(
            {
                "originalText": array[i],
                "translatedText": null,
                "detectedLanguage": null,
                "status": "translating",
                "waitTranlate": {}
            }
        )
    }
    return await makeRequest("auto", "zh-CN", splicing)//无并发限制接口
    async function makeRequest(sourceLanguage, targetLanguage, requests) {
        return await new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open(
                "POST",
                "https://translate.googleapis.com/translate_a/t?anno=3&client=te&v=1.0&format=html" + GetExtraParameters(sourceLanguage, targetLanguage, requests)
            );
            xhr.setRequestHeader(
                "Content-Type",
                "application/x-www-form-urlencoded"
            );
            xhr.responseType = "json";
            xhr.onload = (event) => {
                resolve(xhr.response);
            };
            xhr.onerror = xhr.onabort = xhr.ontimeout = (event) => { console.error(event); reject(); };
            xhr.send(getRequestBody(sourceLanguage, targetLanguage, requests));
        });
        function getRequestBody(sourceLanguage, targetLanguage, requests) {
            return requests
                .map((info) => `&q=${encodeURIComponent(info.originalText)}`)
                .join("");
        }
        function GetExtraParameters(sourceLanguage, targetLanguage, requests) {
            return `&sl=${sourceLanguage}&tl=${targetLanguage}&tk=${calcHash(requests.map((info) => info.originalText).join(""))}`
            function calcHash(query) {
                const windowTkk = "448487.932609646";
                const tkkSplited = windowTkk.split(".");
                const tkkIndex = Number(tkkSplited[0]) || 0;
                const tkkKey = Number(tkkSplited[1]) || 0;
                const bytesArray = transformQuery(query);
                let encondingRound = tkkIndex;
                for (const item of bytesArray) {
                    encondingRound += item;
                    encondingRound = shiftLeftOrRightThenSumOrXor(
                        encondingRound,
                        "+-a^+6"
                    );
                }
                encondingRound = shiftLeftOrRightThenSumOrXor(
                    encondingRound,
                    "+-3^+b+-f"
                );
                encondingRound ^= tkkKey;
                if (encondingRound <= 0) {
                    encondingRound = (encondingRound & 2147483647) + 2147483648;
                }
                const normalizedResult = encondingRound % 1000000;
                return normalizedResult.toString() + "." + (normalizedResult ^ tkkIndex);
                function transformQuery(query) {
                    /** @type {Array<number>} */
                    const bytesArray = [];
                    let idx = 0;
                    for (let i = 0; i < query.length; i++) {
                        let charCode = query.charCodeAt(i);
                        if (128 > charCode) {
                            bytesArray[idx++] = charCode;
                        } else {
                            if (2048 > charCode) {
                                bytesArray[idx++] = (charCode >> 6) | 192;
                            } else {
                                if (
                                    55296 == (charCode & 64512) &&
                                    i + 1 < query.length &&
                                    56320 == (query.charCodeAt(i + 1) & 64512)
                                ) {
                                    charCode =
                                        65536 +
                                        ((charCode & 1023) << 10) +
                                        (query.charCodeAt(++i) & 1023);
                                    bytesArray[idx++] = (charCode >> 18) | 240;
                                    bytesArray[idx++] = ((charCode >> 12) & 63) | 128;
                                } else {
                                    bytesArray[idx++] = (charCode >> 12) | 224;
                                }
                                bytesArray[idx++] = ((charCode >> 6) & 63) | 128;
                            }
                            bytesArray[idx++] = (charCode & 63) | 128;
                        }
                    }
                    return bytesArray;
                }
                function shiftLeftOrRightThenSumOrXor(num, optString) {
                    for (let i = 0; i < optString.length - 2; i += 3) {
                        /** @type {string|number} */
                        let acc = optString.charAt(i + 2);
                        if ("a" <= acc) {
                            acc = acc.charCodeAt(0) - 87;
                        } else {
                            acc = Number(acc);
                        }
                        if (optString.charAt(i + 1) == "+") {
                            acc = num >>> acc;
                        } else {
                            acc = num << acc;
                        }
                        if (optString.charAt(i) == "+") {
                            num += acc & 4294967295;
                        } else {
                            num ^= acc;
                        }
                    }
                    return num;
                }
            }
        }
    }
}
console.log(await translation(['hi', 'omg', 'yes']));


相关专题
翻译
翻译
2023-12-28 23

我们常常需要参考国外开发文献,翻译工具是日常开发中必备工具.目前很多大厂的免费翻译工具都停止更新了,部分好用的翻译软件也都需要收费.以下是我的站长站收集整...

相关推荐
  • js代码
  • 谷歌翻译
  • js指定时间定时自动执行代码分享

    示例代码用的`setTimeout()`函数,在指定的时间后执行。代码非常的简单,获取当前时间和设定一个指定时间,指定时间减去当前时间就是定时的时间,如果定时器到期时等于0,就代表时间到了,就运行executeAtTime函数的方法。function executeAtTime() { console....

    js教程 40 6个月前
  • JS代码解除网页右键限制

    JS解除右键限制方法一javascript:(function () {function R(a) {ona = "on" + a;if (window.addEventListener){window.addEventListener(a, function (e) {for (var n = e.originalTarget; n; n = n.parentNode){n[ona] = null;}}, true);}window[o...

    js教程 171 3年前
  • 淘宝买家秀API+ajax代码

    淘宝买家秀API+ajax代码,用的是这个API,https://api.66mz8.com/api/rand.tbimg.php?format=jsonJSON返回格式,测试依旧可用。$(function(){ $.get('https://api.66mz8.com/api/rand.tbimg.php?format=json',function(data){ document.getElementB...

    js教程 713 3年前
  • 谷歌翻译修复程序,修改谷歌翻译网站打不开
    谷歌翻译修复程序,修改谷歌翻译网站打不开

    软件介绍谷歌翻译网站是:http://translate.google.cn/,如果访问不了网站打不开,就可以尝试使用这款谷歌翻译修复程序。软件截图软件通过自动ping谷歌路线,找出最快有效的IP,最后通过修改host,来达到恢...

    软件分享 14 8个月前
  • 利用谷歌翻译制作免费伪原创API接口源码

    目前市面上的伪原创很多都是利用文字翻译功能来实现的,先把文字翻译成英文或其他语言,再转换回中文。就实现少部分文字同义字替换,大体内容又读的通顺的效果,非常符合伪原创的要求。部分好用稳定的伪原创工具还收费,免费的又不稳定,那么怎么自己开发搭建一...

    php教程 155 1年前
  • js谷歌批量翻译接口代码

    async function translation(array) { var splicing = [] if (!(array instanceof Array)) { array = [array] } for (let i = 0; i < array.length; i++) { splicing.push( { "originalText":...

    js教程 52 1年前
最新更新
  • js截取字符串教程

    slice()方法接受两个参数,起始索引和结束索引(可选)。它返回从起始索引到结束索引(不包括结束索引)之间的子字符...

    js教程 2个月前
  • find findIndex indexOf索引选择器使用方法

    find使用方法find方法是ES6引入的一种数组方法,可以用来查找数组中符合条件的元素。语法是:array.find(callba...

    js教程 3个月前
  • js复制网页内容教程

    Async Clipboard API方法HTML5新增的方法,无需引入第三方插件,直接就可以复制内容。低版本的浏览器可能会不兼...

    js教程 3个月前
  • js获取字符长度函数分享

    js获取字符长度函数function objLen(str) { if (str == null) return 0; if (typeof str != "string") { ...

    js教程 3个月前
  • 网站LED跑马灯效果广告代码

    网站可以看到很多的论坛网站都会用到这种网站LED跑马灯效果,这种效果实现也很简单,分享给大家。LED跑马灯效果...

    js教程 4个月前