Google API не будет переводить иностранные буквы. - PullRequest
0 голосов
/ 29 ноября 2018

Я создаю приложение, которое использует Google API для перевода текста.Тем не менее, приложение работает нормально, если я пытаюсь перевести слово, которое использует внешний ключ, например, På, например, запрос API, кажется, пропускает 'å' и отвечает ответом P. Это происходит со всеми словами с неанглийскими буквами.,

Чтобы сделать вещи еще более странными, я создаю небольшое веб-расширение, которое использует window.addEventListener для получения слова с веб-страницы.Использование этого метода для отправки слов в API не вызывает проблем.

Вот код, который работает.Сценарий содержимого выбирает слово и отправляет его в background.js.Фоновый скрипт берет это слово и отправляет его во всплывающее окно.При нажатии кнопки выбранное слово отправляется в Google API, и перевод отправляется обратно.

Сценарий содержимого:

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();
        })
    }  
}

Вот часть другого кода, которая не работает.req.query.q - это слово, которое вставляется в поле ввода.Кроме того, я могу удалить `req.query.q и вставить слово непосредственно в это пространство, и вызов API все еще не работает.

//GET request to Google Translate API
router.get('/', (req,res)=>{
    console.log(req.query);
    axios.get(`https://translation.googleapis.com/language/translate/v2?q=${req.query.q}&target=${req.query.target}&source=${req.query.source}&key=${process.env.GOOGLE_API_KEY}`)
    .then(response => {
        if(req.query.q == response.data.data.translations[0].translatedText){
            res.send('reverse')
        } else {
            console.log(response.data.data)
            res.send(response.data)
        }    
    }).catch(err=> {
        console.log(err)
    })
})

1 Ответ

0 голосов
/ 29 ноября 2018

Вам необходимо правильно кодировать специальные символы с помощью encodeURIComponent(), например:

....?q=${encodeURIComponent(word)}....

или разделенные:

var encodedWord = encodeURIComponent(word);
//
....?q=${encodedWord}....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...