10

我在我的一个网站上使用谷歌翻译小部件,并使用以下谷歌提供的代码:

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

<script>

我的问题:翻译在页面加载后运行,但我还有一个脚本,可以根据它们的宽度自动调整主要导航元素的大小。

这在翻译完成之前运行,因此它会根据未翻译的英文标签调整大小。一旦翻译改变了导航措辞,导航元素需要调整大小以适应新翻译的单词,因为它们的大小(宽度)可能与英文不同。

在运行代码以调整主导航的大小之前,我尝试调用 Google 翻译代码,但翻译异步运行,因此我的代码在翻译完成之前运行。

翻译完成时是否会引发回调事件(或以某种方式检测翻译何时完成),所以我可以在尝试调整导航大小之前等待?

此外,我需要在页面完成翻译后运行脚本。

4

3 回答 3

6

这是我最终使用的修复程序:

jQuery(function(){
    firstMenu = $("#nav li:first").text();

    setTimeout(waitNav, 500);
});

function waitNav() {

    if (firstMenu != $('#nav li:first').text()) {

        initNav();
        firstMenu = $('#nav li:first').text();
        setTimeout(waitNav, 500);

    }
    else {
        setTimeout(waitNav, 500);
    }

}

基本上,继续检查已知文本是否已更改(在这种情况下,它是导航块中的第一项)。

如果它已更改,则意味着翻译器已运行,请运行翻译后需要运行的代码(此处为 initNav())。

如果用户选择另一种语言,我会不断检查更改。

它并不完美,但它对我有用:-)

于 2012-10-15T15:46:05.467 回答
1

您可以检测到这样的变化:

$('#some-translatable-element').bind('DOMSubtreeModified', function() {
  yourCallback();
});

缺点是该事件被多次触发,因为谷歌翻译在该过程中进行了多次更改。

一个建议是检测页面上最后一个元素的变化,因为你知道上面的所有元素都已翻译。

于 2014-12-01T08:49:08.733 回答
1
$( document ).ready(function() {
    $('#google_translate_element').bind('DOMSubtreeModified', function() {
        var val = $(this);
        var strlang = "" + val[0].innerText + "";
        console.log(strlang); // print your selected language in console
    });
});
于 2018-09-17T09:17:50.720 回答