Я пытаюсь встроить очень удобный элемент перевода Google Translate в веб-страницу, которая очень проста и отлично работает, но мне нужно изменить текст по умолчанию, отображаемый в результирующем HTML:
Поработав с несколькими библиотеками Google API и js, я решил, что это не будет проблемой, поскольку его почти наверняка можно будет настроить, но, осмотревшись в течение некоторого времени, я не могу найти ссылку на свойство, которое позволяет вам установить это, и документация вообще кажется жалкой. Основной код:
<div id="google_translate_element"></div>
<script>
function googleTranslateElementInit() {
var translator = new google.translate.TranslateElement({
pageLanguage: 'en',
autoDisplay: false,
multilanguagePage: false,
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
Разочаровавшись в возможности установить это как свойство при создании translator
, я решил взломать его и использовать прослушиватель onDOMNodeInserted
, чтобы просто изменить полученный HTML-код после его загрузки в <div id="google_translate_element"></div>
. Я использую здесь jQuery, поэтому мой код:
$(document).ready(function(){
$('#google_translate_element').bind('DOMNodeInserted', function(event) {
$('.goog-te-menu-value span:first').html('Translate');
});
})
И вот тут все становится интереснее. Chrome отлично загружает все и прекрасно выполняет замену innerHTML. Internet Explorer (8) полностью игнорирует прослушиватель DOMNodeInserted, и страница загружается так, как будто функция jQuery никогда не вызывалась. Firefox (10) загружается нормально (но вообще без элемента перевода), а затем зависает, начинает потреблять память и вылетает.
Любые мысли о том, как я могу заставить эту замену innerHTML работать? Если вы знаете о свойстве, похожем на displayLabel : "Translate"
, которое, конечно, предпочтительно, но за исключением этого (и действительно уродливого setTimeout
хака), есть ли способ заставить это работать?