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