Запустить элемент веб-перевода Google - PullRequest
3 голосов
/ 10 июня 2011

Поскольку API-интерфейс google translation закрывается, я пытаюсь заставить веб-элемент google translate работать для пользователя в течение всего сеанса, чтобы ему не приходилось менять опцию окна выбора на свой язык для каждого отдельного пользователя. стр.

Начальная функция загрузки задается следующим образом:

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

Где google_translate_element - это div, в который нужно поместить поле выбора. Когда поле выбора находится там, оно всегда имеет класс "goog-te-combo". Я могу изменить значение окна, используя jQuery без проблем, например. $ ('. goog-te-combo'). val ('fr') поменяет поле на французский. Но когда я пытаюсь вызвать трансляцию, используя $ ('. Goog-te-combo'). Trigger (), используя всевозможные типы событий (change, click, mouseup, mousedown и т. Д.), Трансляция никогда не запускается.

Кто-нибудь знает способ запуска перевода?

Ответы [ 4 ]

10 голосов
/ 21 марта 2012

Это старый вопрос, но я отвечу, так как у меня была та же проблема, и я обошел ее. Я должен был получить DOM от jQuery и запустить и выполнить.

 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');
3 голосов
/ 21 мая 2013

У меня тоже были проблемы с этим предметом весь день :).Но я пришел к выводу.

Используя инструмент инспектора 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 голосов
/ 25 июля 2011

Язык Элемента Google Translate должен переноситься между страницами, хотя иногда может потребоваться некоторое время для его включения.В прежние времена он не сохранялся в Google Chrome, во всех браузерах, но он хорошо работал в Firefox и IE.На момент написания этой статьи у меня в Chrome тоже все было нормально.

Если вы хотите принудительно перевести перевод на определенный язык при первой загрузке страницы, вы можете использовать упомянутый Google 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 опубликовал этот кусок (в разделе «Что такое веб-элемент Google Translate?»).

1 голос
/ 10 июня 2011

Раньше этого не делали, но, глядя в инспекторе в Google Chrome, я вижу, что Google загружает файл с именем main.js.Посмотрите в этом файле, и вы, вероятно, получите представление о том, как они запускают переключатель.main.js, конечно, упакован и минимизирован, поэтому попробуйте использовать этот JS Beautifier .

Я еще посмотрю его и вернусь к вам :) Надеюсь, это поможет!

ОБНОВЛЕНИЕ

Причина, по которой вы не можете вызвать элемент подобным образом, заключается в том, что поле выбора находится внутри фрейма.Вы не можете взаимодействовать с iframe другого домена.

...