无论如何使用谷歌翻译API进行多次重复翻译

时间:2016-06-06 07:56:39

标签: javascript html translation google-translate google-api-js-client

截至目前,我有一个脚本元素,每当注册onclick并且sourceText是需要翻译的文本时,我都会附加我的api请求。回调函数只是在网页上打印出一些内容(更改全局变量,然后单独的函数输出该全局变量)

  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(“语言”)可能有一种更简单的方法可以让某人指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

截至目前,您正在使用一种调用脚本的hackyish方式。虽然脚本是某种“执行”,但我建议写一种类并激发真正的ajax请求。为了让自己更容易一些,我会使用jQuery(或类似的东西),并编写一个可维护的类。它可能看起来像这样(没有以任何方式测试,但给你一个线索;))

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