【问题标题】:Trigger Google Web Translate Element触发谷歌网页翻译元素
【发布时间】:2011-09-12 06:43:35
【问题描述】:

由于谷歌翻译 api 正在关闭,我试图让谷歌翻译网络元素在用户的整个会话中工作,这样他们就不必在每个不同的地方将选择框选项更改为他们的语言页面。

初始加载函数如下:

function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en'}, "google_translate_element");
 };

其中 google_translate_element 是放置选择框的 div。 When the select box is in there it always has the class "goog-te-combo".我可以毫无问题地使用 jQuery 更改框的值,例如。 $('.goog-te-combo').val('fr') 会将框更改为法语。 但是,当我尝试使用各种事件类型(更改、单击、mouseup、mousedown 等)使用 $('.goog-te-combo').trigger() 触发翻译时,翻译永远不会触发。

有人知道触发翻译的方法吗?

【问题讨论】:

  • 如果您只是想触发动态加载内容的翻译,Google 最近发布了一个更新,应该可以为您解决这个问题。我的问题概念验证 jsFiddle 现在是新系统的概念验证。

标签: jquery google-translate


【解决方案1】:

这是一个老问题,但我会回答,因为我遇到了同样的问题并且解决了它。 我必须从 jQuery 获取 DOM 并触发并执行。

 function fireEvent(element,event){
     console.log("in Fire Event");
    if (document.createEventObject){
            // dispatch for IE
            console.log("in IE FireEvent");
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
            // dispatch for firefox + others
            console.log("In HTML5 dispatchEvent");
            var evt = document.createEvent("HTMLEvents");
            evt.initEvent(event, true, true ); // event type,bubbling,cancelable
            return !element.dispatchEvent(evt);
    }
 }

我用它来称呼它

 var jObj = $('.goog-te-combo');
 var db = jObj.get(0);
 jObj.val(Lang);
 fireEvent(db, 'change');

【讨论】:

  • 这对我有用,但它产生了很多“达到最大堆栈”。我必须做的唯一改变是将 initEvent 的第二个参数更改为“false”。所以,这条线运行良好:evt.initEvent(event, false, true );。真的希望这对某人有所帮助。
【解决方案2】:

我也整天都在处理这个问题:)。但我得出了一个结论。

使用 Chrome 检查器工具,我发现 Google 翻译选择框是在 window.load 事件触发之后创建的!如果您尝试使用 jQuery 对其进行编辑,这是一个大问题。

所以我找到了解决方法。我知道这可能是一种错误的方法,但它对我有用。就我而言,我希望(与工作相关的请求)将选择框的第一个选项(通常是“选择您的语言”)更改为不同的内容,例如。 123.

所以我实现了以下解决方案:

$(window).load(function () {
   setTimeout(function () {
      if ($("select.goog-te-combo option:first").val()=='')
      {
         $("select.goog-te-combo option:first").text("123");
      }
   }, 1000);
});

希望我以某种方式帮助了某人。

大家好。

【讨论】:

  • 感谢您的拼写更正,我是葡萄牙人,我知道这不是借口,下次我会尝试正确输入:)。问候。
【解决方案3】:

谷歌翻译元素语言应该在页面之间进行,尽管有时可能需要一些时间才能启动。在早期,它不会在所有浏览器中的 Google Chrome 上持续存在,但它在 Firefox 和 IE 中运行良好。在撰写本文时,它在 Chrome 中对我来说也很好用。

如果您想在第一个页面加载时强制翻译为特定语言,您可以在页面加载时使用Google-mentioned URL 哈希/片段。但是,由于在页面加载后添加哈希似乎不会触发它,因此您必须将它放在一个链接中,以便用户第一次加载。这是强制立即翻译的哈希语法。

http://www.somedomain.com/#googtrans(en|TARGET_LANG)

例如,强制页面尽快翻译成法语。

http://www.somedomain.com/#googtrans(en|fr)

我似乎无法破译语法的含义,但我只是在最初的英文页面上尝试它。 #googtrans(en|fr|ja) 产生日语,但 #googtrans(en|ja|fr) 也是如此。省略 en| 似乎也没有任何效果。他们没有详细说明Google posted this tidbit 所在的细节(在“什么是 Google 翻译 Web 元素?”下)。

【讨论】:

    【解决方案4】:

    以前没有这样做过,但是通过查看 Google Chrome 中的检查器,我看到 google 加载了一个名为 main.js 的文件。查看该文件,您可能会知道它们是如何触发开关的。 main.js 当然是打包和缩小的,所以尝试使用这个JS Beautifier

    我会更多地查看它并回复您:) 希望它有所帮助!

    更新

    您无法触发这样的元素的原因似乎是因为选择框位于 iframe 内。您不能与不同域的 iframe 进行交互。

    【讨论】:

    • 该死,我有一种感觉,可能是它。感谢您的帮助!
    • 绝对不是 iframe 的问题。使用select.goog-te-combo 填充的div#google_translate_element Google 嵌入在页面本身中。不幸的是,与select 交互同样没有效率。您向它抛出的任何事件代码都不会触发 Google 用于切换语言的任何代码。
    • 使用谷歌翻译元素有两种选择语言的方法。如果您已经选择了一种语言,或者您的浏览器报告了与相关页面不同的语言(在iframe 中完成,是的,但是锚点/JS 系统而不是select,则通过顶部栏显示)盒子)。另一种是通过占位符div 你给谷歌翻译填充一些 UI 元素,select 就是这样一个元素。在我使用过的任何浏览器(IE9、FF、Chrome)中,这个select 框绝对不在iframe 中。 Google 在你的占位符 div 深处嵌套了两个 divs。
    • Example 用于您最喜欢的 DOM 检查浏览器。它适用于similar SO question,但它仍然显示 GT 注入的结构(假设您不考虑 jsFiddle iframe)。
    猜你喜欢
    • 2014-03-24
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多