2012-10-15 4 views
7

코드를 제공 너비에 따라 내 기본 탐색 요소 크기를 자동으로 조정하는 스크립트도 있습니다.구글 위젯을 번역 번역 완료 콜백 나는 구글이 다음 구글 내 사이트 중 하나에 위젯을 번역 사용하고

번역이 완료되기 전에 실행되므로 번역되지 않은 영어 레이블을 기준으로 크기가 조정됩니다. 번역이 탐색 단어를 변경하면 탐색 요소는 새로 번역 된 단어에 맞게 크기를 조정해야합니다. 영어와 다른 크기 (너비)가 될 가능성이 있기 때문입니다.

기본 탐색의 크기를 조정하기 위해 코드를 실행하기 전에 Google translate 코드를 호출 해 보았습니다. 그러나 번역이 비동기 적으로 실행되어 번역이 완료되기 전에 코드가 실행됩니다.

번역이 완료되면 (또는 번역이 완료되었을 때 감지 할 수있는 방법) 콜백 이벤트가 발생하여 탐색의 크기를 조정하기 전에 기다릴 수 있습니까?

또한 페이지가 번역을 마친 후 스크립트를 실행해야합니다.

+0

예제가 없지만 googleTranslateElementInit ...에서 함수 호출을 추가 할 수 있습니까? 나는. function googleTranslateElementInit() { new google.translate.TranslateElement (...); myFuncInvocation(); } – EricG

+0

에릭, 내 코드를 호출하기 전에 구글 번역과 동일한 문제가 발생했습니다. 비동기 적으로 실행되므로 google.translate.TranslateElement() 호출에서 즉시 반환됩니다 (즉, 번역이 끝나기 전에). - 제 질문을 업데이트하겠습니다. – RichardAtHome

+0

솔직히 말해서 나는 그것이 실행되는 예제를 보게됩니다. 할 수있는 일은 웹킷의 'new google.translate ..'에 중단 점을 넣고 디버깅을 시도하고 처리기를 추가 할 수 있는지 또는 선택적 기본 처리기가 호출되는지 확인하는 것입니다. – EricG

답변

6

여기 내가 사용 결국 수정입니다 :

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())를 실행하십시오.

사용자가 다른 언어를 선택한 경우 변경 사항을 계속 확인합니다.

이건 완벽한 건 아니지만, 그것은 당신이 같은 변화를 감지 할 수

+1

참고 : 많은 상황에서 번역 후에도 텍스트 (특히 메뉴 항목)가 변경되지 않은 상태로 유지 될 수 있습니다. 예 : '연락처'가 그 다음에 동일한 철자를 지정할 수 있습니다. 영어. 이 트릭이 제대로 작동하는지 확신 할 수 없습니다. – frnhr

0

:-) 나를 위해 작동 :

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

을 단점은 구글이 여러 않습니다 번역 때문에 이벤트가 여러 번 발사에 beeing된다는 것이다 프로세스의 변화.

페이지의 마지막 요소에 대한 변경 사항을 감지하면 위의 모든 요소가 번역 된 것입니다.

+1

선택한 언어를 얻는 방법이 있습니까? –