欢迎光临 - 我的站长站,本站所有资源仅供学习与参考,禁止用于商业用途或从事违法行为!

js教程

js谷歌批量翻译接口代码

js教程 我的站长站 2023-04-16 共52人阅读
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教程 41 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教程 714 3年前
  • JS判断电脑端手机端自动跳转代码

    JS判断电脑端手机端自动跳转代码,这段代码已经封装好了,不需要任何处理,复制引用就可以使用了。相比网上的JS判断终端代码,这点代码是直接判断终端然后判断域名是否带www.wdzzz.com,带就跳转到m.wdzzz.com//是否是移动端function is_mobile() {var regex_...

    js教程 93 3年前
  • JS年月日星期早中午时间代码

    JS年月日星期早中午时间代码,我的站长站自用时间代码,完美简单。var day=""; var month=""; var ampm=""; var ampmhour=""; var myweekday=""; var year=""; var hh;var wh;mydate=new Date(); myweekday=mydate.getDay(); mymonth=mydate.g...

    js教程 81 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年前
  • Google翻译host修复工具v1.2
    Google翻译host修复工具v1.2

    软件介绍Google翻译最近直接停止运行了,网站打不开了,喜欢用Google翻译的朋友,可以试试这款Google翻译host修复工具,就可以继续使用Google翻译了。Google翻译虽然网页翻译给停用了,但是API并没有停,稍...

    软件分享 65 1年前
  • GoogleTranslateIpCheck谷歌翻译host修复工具V1.6
    GoogleTranslateIpCheck谷歌翻译host修复工具V1.6

    软件介绍自从谷歌离开后,谷歌所有的服务都无法使用,包含谷歌翻译。GoogleTranslateIpCheck谷歌翻译host修复工具就可以轻松解决这个问题,通过此软件,可以正常使用谷歌浏览器的谷歌翻译。GoogleTransl...

    开发软件 74 1年前