4

我正在尝试将非常方便的 Google Translate 翻译元素嵌入到网页中,这非常简单并且效果很好,但是我需要更改在生成的 HTML 中显示的默认文本:

在此处输入图像描述

在使用了许多 Google API 和 js 库之后,我认为这不会有问题,因为它几乎可以肯定是可配置的,但是环顾了一段时间,我找不到任何可以让您设置的属性的引用,并且一般来说,文档似乎很可怜。基本代码是:

<div id="google_translate_element"></div>
<script>
   function googleTranslateElementInit() {
      var translator = new google.translate.TranslateElement({
      pageLanguage: 'en',
      autoDisplay: false,
      multilanguagePage: false,
      layout: google.translate.TranslateElement.InlineLayout.SIMPLE
   }, 'google_translate_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

translator创建. onDOMNodeInserted_ <div id="google_translate_element"></div>我在这里使用 jQuery,所以我的代码是:

$(document).ready(function(){
   $('#google_translate_element').bind('DOMNodeInserted', function(event) {
       $('.goog-te-menu-value span:first').html('Translate');
   });
})

这就是事情变得有趣的地方。Chrome 完美地加载了所有内容,并完美地完成了 innerHTML 替换。Internet Explorer (8) 完全忽略了 DOMNodeInserted 侦听器,页面加载就像从未调用过 jQuery 函数一样。Firefox (10) 似乎加载良好(但根本没有翻译元素)然后冻结,开始吞噬内存,然后崩溃。

关于如何让这个 innerHTML 替换起作用的任何想法?如果您知道displayLabel : "Translate"当然是首选的 -like 属性,但除非(和一个非常丑陋的setTimeout黑客),否则我有什么办法可以让它工作吗?

4

3 回答 3

2

和你一样,我不知道如何通过 init 参数自定义小工具,但似乎可以用 HTML 编写自己的自定义小工具,然后在其上调用 g.translate 功能。请参阅http://www.toronto.ca/(页脚)。恐怕你将不得不做更多的挖掘才能确切地看到它是如何完成的。

此处还引用了 g.translate 的这种用法。不幸的是,讨论现在已经很老了,但希望仍然相关。

于 2012-02-16T06:21:25.053 回答
2

您可以使用 CSS 来完成,只有在选择语言时它不会更改标签。

#google_translate_element .goog-te-gadget-simple .goog-te-menu-value span:first-child{display: none;}
#google_translate_element .goog-te-gadget-simple .goog-te-menu-value:before{content: 'Translate'}

于 2017-09-19T17:49:41.800 回答
1

如果翻译模块尚未加载到页面中,我正在使用此代码每 3 毫秒检查一次;如果是这样,它会更新文本并在之后清除间隔检查。

function cleartimer() {     
    setTimeout(function(){ 
        window.clearInterval(myVar); 
    }, 1000);             
}
function myTimer() {
    if ($('.goog-te-menu-value > span:first-child').length) {
        $('.goog-te-menu-value > span:first-child').html('Translate');
        cleartimer();
    }
}
var myVar = setInterval(function(){ myTimer() }, 300); 
于 2016-12-15T00:35:23.347 回答