Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌API赢得';不要翻译外国字母。_Javascript_Reactjs_Api_Google Api - Fatal编程技术网

Javascript 谷歌API赢得';不要翻译外国字母。

Javascript 谷歌API赢得';不要翻译外国字母。,javascript,reactjs,api,google-api,Javascript,Reactjs,Api,Google Api,我正在开发一个应用程序,使用谷歌API翻译文本。但是,如果我尝试翻译使用外键的单词På,例如,API请求似乎忽略了“å”,并以P的答案进行响应,那么应用程序工作正常。所有带有非英语字母的单词都会出现这种情况 为了让事情变得更奇怪,我构建了一个小型web扩展,它使用窗口。addEventListener从网页中抓取一个单词。使用此方法将单词发送到API不会导致问题 下面是有效的代码。内容脚本选择一个单词并将其发送到background.js。背景脚本接受该单词并将其发送到弹出窗口。在一个按钮上,点

我正在开发一个应用程序,使用谷歌API翻译文本。但是,如果我尝试翻译使用外键的单词På,例如,API请求似乎忽略了“å”,并以P的答案进行响应,那么应用程序工作正常。所有带有非英语字母的单词都会出现这种情况

为了让事情变得更奇怪,我构建了一个小型web扩展,它使用
窗口。addEventListener
从网页中抓取一个单词。使用此方法将单词发送到API不会导致问题

下面是有效的代码。内容脚本选择一个单词并将其发送到background.js。背景脚本接受该单词并将其发送到弹出窗口。在一个按钮上,点击所选单词将被发送到GoogleAPI,翻译将被发回

内容脚本:

window.addEventListener('mouseup', checkWord);

function checkWord() {

    let word = window.getSelection().toString();
    console.log(word);
    if(word.length > 0) {
        let message = {
            text: word,
        }
        chrome.runtime.sendMessage(word)
    }

}
背景脚本:

chrome.runtime.onMessage.addListener(receiver);

function receiver(request, sender, sendResponse) {

    console.log(request);
    word = request;
}
最后,单击按钮调用我的弹出页面功能:

function sendToAPI() {
    let bgpage = chrome.extension.getBackgroundPage();
    let word = bgpage.word;
    console.log(word)
    if(word.length> 0 && word.length< 100){
    $.ajax({
        type: 'GET',
        url: `https://translation.googleapis.com/language/translate/v2?q=${word}&target=en&source=no&key=${API_KEY}`,       
    }).then(function(response) {      
            translated =response.data.translations[0].translatedText;
            $('.word').empty();
            $('.word').append(`${word}  |  ${translated}`);

            return translated;

        }).catch(function(err) {

            sendReverse();
        })
    }  
}

您需要使用
encodeURIComponent()
对特殊字符进行正确的编码,如下所示:

....?q=${encodeURIComponent(word)}....
或分开:

var encodedWord = encodeURIComponent(word);
//
....?q=${encodedWord}....

您需要使用
encodeURIComponent()
对特殊字符进行正确的编码,如下所示:

....?q=${encodeURIComponent(word)}....
或分开:

var encodedWord = encodeURIComponent(word);
//
....?q=${encodedWord}....

谢谢,这是正确的解决方案。您知道为什么在获取复制和粘贴后需要对单词进行编码,而在我使用
window.getSelection
获取单词时则不需要编码吗?URL参数需要编码,对于不是常规可打印/可见ASCII字符的所有字符(包括空格)。使用
getSelection
所做的操作不涉及URL,而是直接调用函数。谢谢,这是正确的解决方案。您知道为什么在获取复制和粘贴后需要对单词进行编码,而在我使用
window.getSelection
获取单词时则不需要编码吗?URL参数需要编码,对于不是常规可打印/可见ASCII字符的所有字符(包括空格)。使用
getSelection
所做的操作不涉及URL,而是直接调用函数。