触发Google Web翻译元素



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

初始加载函数如下所示:

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

其中,google_translate_element是要将选择框放入其中的div。当选择框在那里时,它总是有类"goog-te combo"。我可以使用jQuery毫无问题地更改框的值,例如$('.goog-te-comport').val('fr')会将框更改为法语。但是,当我尝试使用$('.goog-te-comport').triger()触发翻译时,使用所有排序的事件类型(更改、单击、鼠标上移、鼠标下移等),翻译永远不会启动。

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

这是一个老问题,但我会回答,因为我遇到了同样的问题,并解决了它。我必须从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');

我一整天都在这个主题上遇到问题:)。但我已经得出结论了。

使用Chrome检查器工具,我发现谷歌翻译选择框是在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);
});

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

向所有人致以问候。

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

不过,如果你想在第一次加载页面时强制翻译成特定语言,你可以在页面加载时使用谷歌提到的URL哈希/片段。不过,由于在页面加载后添加哈希似乎不会触发它,因此您必须将它放在一个链接中,该链接将用户带到那里进行第一次加载。以下是用于强制立即转换的哈希语法。

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

例如,强制页面在翻译系统允许的情况下尽快翻译成法语。

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

我似乎无法理解语法的含义,但我只是在一个原始的英文页面上尝试。CCD_ 2在日语中产生,但CCD_。省略en|似乎也没有任何效果。他们没有详细说明谷歌发布这则花絮的细节(在"谷歌翻译网络元素是什么?"下面)。

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

我会多看一眼,然后回复你:)希望它能有所帮助!

更新

不能像那样触发元素的原因似乎是因为选择框在iframe中。您不能与其他域的iframe进行交互。

将cookie googtrans设置为/en/XX并重新加载页面:

document.cookie = 'googtrans=/en/fr';
location.reload();

(当然,在重新加载之前,请检查cookie是否未设置,否则将获得无限的重新加载循环)

最新更新