1) Вы делаете асинхронный запрос, у него есть несколько состояний. Нам нужно 4-е. Для этого переделаем функцию translateText.
function translateText() {
var xhr = new XMLHttpRequest();
var url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&hl=ru&dt=t&dt=bd&dj=1&source=icon&tk=467103.467103&q=';
xhr.open('POST', url, true);
xhr.send(result);
xhr.onreadystatechange = function () { // (3)
if (xhr.readyState != 4) return;
if (xhr.status != 200) {
// обработать ошибку
alert(xhr.status + ': ' + xhr.statusText); // пример вывода: 404: Not Found
} else {
// вывести результат
names = xhr.responseText;
console.log( JSON.parse(xhr.responseText) );
}
}
}
2) В ответе нет массива sentences, поэтому slovo = data.sentences[0].trans выдаст исключение.
3) console.log(translateText()) работать не будет, т.к. console.log не будет ждать полного выполнения запроса. Поэтому его надо засунуть в саму функцию.
4) У XHR есть современные асинхронные аналоги, например fetch
function translateText() {
let url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&hl=ru&dt=t&dt=bd&dj=1&source=icon&tk=467103.467103&q=';
fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json;charset=utf-8' },
body: JSON.stringify({ room: Object.fromEntries(map) })
})
.then(response => response.ok ? response.json() : response.status)
.then(result => console.log(result));
/*
Выполняем запрос. Далее если он усешен, распаршиваем его, в ином случае передаем статус.
Далее выводим это в консоль.
*/
}