【问题标题】:Google Translate Widget - Translation complete callback谷歌翻译小部件 - 翻译完成回调
【发布时间】:2012-10-15 11:01:31
【问题描述】:

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

<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 翻译代码,但翻译异步运行,因此我的代码在翻译完成之前运行。

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

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

【问题讨论】:

  • 我没有任何示例,但您可以尝试在 googleTranslateElementInit.. 中添加函数调用? IE。功能 googleTranslateElementInit() { 新 google.translate.TranslateElement(...); myFuncInvocation(); }
  • 试过那个 Eric,在我的代码之前调用谷歌翻译也有同样的问题。它异步运行,因此立即从 google.translate.TranslateElement() 调用返回(即在翻译完成之前) - 我会更新我的问题
  • 老实说,我宁愿看一个它运行的例子。您可以做的是在 webkit 中的“新 google.translate..”中放置一个断点并尝试调试,看看是否可以添加处理程序或可能调用可选的默认现有处理程序。
  • 当 googleTranslateElementInit 函数被执行时......它调用了什么事件......

标签: javascript google-translate


【解决方案1】:

这是我最终使用的修复:

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())。

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

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

【讨论】:

  • 注意:在很多情况下,一段文本(尤其是菜单项)在翻译后可能会保持不变,例如:“contact”的拼写可能不仅仅是英语。不确定这个技巧是否会起作用。
【解决方案2】:

您可以像这样检测变化:

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

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

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

【讨论】:

    【解决方案3】:
    $( 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
        });
    });
    

    【讨论】:

    • 你应该添加一些关于这里发生了什么以及这段代码将做什么的解释
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2011-12-26
    • 2015-05-19
    • 2012-01-26
    • 2016-11-18
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    相关资源
    最近更新 更多