2012-10-15 19 views
7

मैं गूगल निम्नलिखित गूगल के साथ अपनी साइटों में से एक पर का अनुवाद विजेट का उपयोग कर रहा आपूर्ति कोड:अनुवाद Google विजेट - अनुवाद पूर्ण कॉलबैक

<div id="google_translate_element"></div><script type="text/javascript"> 
function googleTranslateElementInit() { 
    new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, 'google_translate_element'); 
} 
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 

<script> 

मेरे समस्या: रन का अनुवाद के बाद पृष्ठ के लोड होते लेकिन मैं एक स्क्रिप्ट भी है जो ऑटो को मेरे प्राथमिक नेविगेशन तत्वों को उनकी चौड़ाई के आधार पर आकार देती है।

अनुवाद समाप्त होने से पहले यह चलता है, इसलिए यह अप्रतिबंधित अंग्रेजी लेबल के आधार पर आकार बदलता है। एक बार अनुवाद ने नेविगेशन शब्द बदल दिया है, तो नेविगेशन तत्वों को नए अनुवादित शब्दों को फिट करने के लिए आकार बदलने की आवश्यकता है क्योंकि वे अंग्रेजी के लिए अलग आकार (चौड़ाई) होने की संभावना है।

मैंने प्राथमिक नेविगेशन का आकार बदलने के लिए कोड चलाने से पहले Google अनुवाद कोड को कॉल करने का प्रयास किया है, लेकिन अनुवाद अतुल्यकालिक रूप से चलता है, इसलिए अनुवाद पूरा होने से पहले मेरा कोड चलता है।

क्या अनुवाद पूरा होने पर कॉलबैक ईवेंट उठाया गया है (या अनुवाद पूरा होने पर पता लगाने का कोई तरीका), इसलिए मैं नेविगेशन का आकार बदलने का प्रयास करने से पहले प्रतीक्षा कर सकता हूं?

इसके अलावा, पृष्ठ के अनुवाद के बाद मुझे एक स्क्रिप्ट चलाने की आवश्यकता है।

+0

मेरे पास कोई उदाहरण सामग्री नहीं है लेकिन आप googleTranslateElementInit .. में फ़ंक्शन कॉल जोड़ने का प्रयास कर सकते हैं ..? अर्थात। फ़ंक्शन googleTranslateElementInit() { नया google.translate.TranslateElement (...); myFuncInvocation(); } – EricG

+0

कोशिश की कि एरिक, मेरे कोड से पहले Google अनुवाद को कॉल करने के साथ एक ही समस्या है। यह अतुल्यकालिक रूप से चलता है, इसलिए 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

क्या चुनी हुई भाषा पाने के लिए कोई स्मार्ट तरीका है ??? –

संबंधित मुद्दे