4

非常に便利な Google 翻訳の翻訳要素を Web ページに埋め込もうとしています。これは非常にシンプルでうまく機能しますが、結果の 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リスナーを使用して、 に読み込まれた結果の HTML を変更することにしました<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"、それを除いて (そして本当に醜いsetTimeoutハック)、これを機能させる方法はありますか?

4

3 に答える 3

2

あなたのように、私はinit paramsを介してガジェットをカスタマイズする方法を見つけることができませんが、HTMLで独自のカスタマイズされたガジェットを作成し、その上でg.translate機能を呼び出すことは可能のようです。http://www.toronto.ca/(ページフッター)を参照してください。それがどのように行われるかを正確に確認するには、もう少し掘り下げる必要があるのではないかと思います。

このg.translateの使用は、ここでも参照されています。残念ながら、議論は今ではかなり古いものですが、うまくいけばまだ関連性があります。

于 2012-02-16T06:21:25.053 に答える
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 に答える