Есть ли в любом случае сделать несколько повторных переводов с помощью API Google Translate

На данный момент у меня есть элемент script, к которому я прикрепляю свой запрос API, делая каждый раз, когда регистрируется onclick, а sourceText - это текст, который необходимо перевести. Функция обратного вызова просто печатает что-то на веб-странице (изменяет глобальную переменную, затем отдельная функция выводит эту глобальную переменную)

  source = 'https://www.googleapis.com/language/translate/v2?key=YOUR_API_KEY&source=en&target=de&callback=translateText&q=' + sourceText;
  newScript.src = source;
  document.getElementsByTagName('head')[0].appendChild(newScript);

Проблема в том, что он работает для первого перевода (первый щелчок), но после этого переводы не меняются после добавления сценария в заголовок. Фактически, функция обратного вызова никогда не вызывается после первого вызова, а новый вывод - это только первая переведенная строка. Есть ли способ это исправить?

Как я понимаю, возможно, есть более простой способ сделать это с помощью google.load("language"). Может ли кто-нибудь указать мне правильное направление?

1 ответ

На данный момент вы используете своего рода хакерский способ вызова скрипта. Несмотря на то, что скрипт является своего рода "выполнением", я бы порекомендовал написать своего рода класс и запускать реальные ajax-запросы. Чтобы вам было проще, я бы использовал jQuery (или что-то в этом роде) и написал бы класс maintanable. Это может выглядеть примерно так (не проверено никоим образом, но дает подсказку;))

var Translate = function( translateHandler ) {
    this.endpoint = 'https://www.googleapis/language/translate/v2';
    this.apiKey = 'xyz';
    this.translateHandler = translateHandler;
};

Translate.prototype.translate = function ( text, source, target ) {
    $.get(this.endpoint, {
        key: this.apiKey,
        q: text,
        source: source,
        target: target
    }, this.translateHandler.bind(this));
};

// usage
var handler = function( result) {
    // do something with the result
};
var translater = new Translate( handler );

$('#myButton').on('click', function(e) {
    e.preventDefault();
    translater.translate( $('#source').text(), 'en', 'de') );
})
Другие вопросы по тегам