2012-10-22 16 views
20

के साथ समस्याएं मैं अपने jQuery मोबाइल और jQuery वेबसाइड पर एक अंतर्राष्ट्रीयकरण विकल्प का उपयोग करना चाहता हूं। मैंने http://i18next.com पर प्रलेखन के साथ एक उदाहरण उत्पन्न करने का प्रयास किया लेकिन ऐसा लगता है कि मैं असफल रहा। क्या किसी को i18next के साथ अनुभव है?i18next का उपयोग कैसे करें? अनुवाद

यहाँ मेरी उदाहरण:

index.html:

<html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> 
    <script src="jquery-mobile/jquery-1.6.4.min.js"  type="text/javascript"></script> 
    <script src="jquery-mobile/jquery.mobile-1.0.min.js" type="text/javascript"></script> 
    <script src="js/i18next-1.5.6.min.js"     type="text/javascript"></script> 
    <script src="js/translation.js"      type="text/javascript"></script> 
    </head> 
    <body> 
    <div data-role="page" id="page"> 
    <div data-role="content"> 
     <div id="headline1" data-i18n="headline"></div> 
     <table width="100%" border="0" id="menu1" class="menu"> 
      <tr id="surname"> 
      <td width="50%" data-i18n="menu.surname"></td> 
      <td width="50%">&nbsp;</td> 
      </tr> 
      <tr id="firstName"> 
      <td width="50%" data-i18n="menu.firstName"></td> 
      <td width="50%">&nbsp;</td> 
      </tr> 
     </table> 
     </div> 
    </div> 
    </body> 
</html> 

अनुवाद फ़ाइलें: /locales/de/translation.json

{ 
    "menu": { 
    "surname": "Name:", 
    "firstName": "Vorname:" 
    }, 

    "headline": "Daten:", 
    "headline_1": "Daten Allgemein:", 
    "headline_2": "Daten Speziell:" 
} 

/locales/en/translation.json

/locales/dev/translation.json

{ 
    "menu": { 
    "surname": "Name:", 
    "firstName": "First Name:" 
    }, 

    "headline": "Data:", 
    "headline_1": "Daten Common:", 
    "headline_2": "Daten Specific:" 
} 

/js/translation.js

$(document).ready(function(){ 
    language_complete = navigator.language.split("-"); 
    language = (language_complete[0]); 
    console.log("Sprache (root): %s", language); 

    i18n.init({ lng: language }); 
    i18n.init({ debug: true }); 
    $(".menu").i18n(); 
    $("headline").i18n(); 
}); 

मेनू मैं "menu.name" है के बजाय उम्मीद पाने के लिए अनुवाद "नाम:"। शीर्षक के लिए मुझे कोई अनुवाद नहीं मिला लेकिन मुझे "डेटा:" या "डेटन:" की उम्मीद थी।

यदि मैं निम्नलिखित प्रत्यक्ष कॉल का प्रयास करता हूं तो मुझे कोई अनुवाद नहीं मिलता है: i18n.t ("menu.surname", {defaultValue: "name:"});

क्या कोई जानता है कि समस्या क्या है? या क्या किसी के पास एक कामकाजी उदाहरण है जो मैं करने की कोशिश करता हूं?

उत्तर

25

मुख्य समस्या यह है कि आप शुरुआतीकरण के बाद सीधे i18n.t("menu.surname", { defaultValue: "Name:"}); पर कॉल नहीं कर सकते हैं, क्योंकि सर्वर से संसाधन लोड करना एसिंक है, इसलिए मूल रूप से आप i18next संसाधनों को प्राप्त करने से पहले अनुवाद करने का प्रयास करते हैं।

इसके बजाय कॉलबैक के साथ इसे लोड:

$(document).ready(function(){ 
    language_complete = navigator.language.split("-"); 
    language = (language_complete[0]); 
    console.log("Sprache (root): %s", language); 

    i18n.init({ lng: language, debug: true }, function() { 
     // save to use translation function as resources are fetched 
     $(".menu").i18n(); 
     $("headline").i18n(); 
    }); 
}); 

या संसाधनों SYNCHRON लोड करने के लिए ध्वज का उपयोग करें।

वैसे: आपके एचटीएमएल कोड में एक बंद </div> बहुत अधिक है।

$("headline").i18n(); पर कॉल $("#headline").i18n(); होना चाहिए।

+0

यदि यह आपकी समस्या हल करता है तो आप इसे उत्तर के रूप में चिह्नित कर सकते हैं। तो सवाल बंद हो जाता है। – jamuhl

+0

एक और सवाल: यदि मेरे पास एक उत्परिवर्तित स्वर (उमलॉट) के साथ एक अनुवाद पाठ है, तो मुझे बस " " मिलता है। अगर मैं HTML नोटेशन का उपयोग करता हूं (उदा। "ä") मैं HTML नोटेशन देखता हूं और उत्परिवर्तित स्वर नहीं। क्या मैं गलत हूं? मदद के लिए शुक्रिया। – Thomas

+0

पृष्ठ पर और जेसन में एन्कोडिंग जोर देना utf8 है। <मेटा http-equiv = "content-type" content = "text/html; charset = utf-8"> – jamuhl

1
<!DOCTYPE html> 
    <html> 

    <head> 
     <title>Basic Sample Usage</title> 

     <script src="js/jquery.js" type="text/javascript"></script> 
     <script src="js/i18next.js" type="text/javascript"></script> 
    </head> 

    <body> 

     <h3> you can switch lng via ?setLng='lngTag' </h3> 
     <a id="en" href="?setLng=en"> en </a> 
      | &nbsp; 
     <a id="de" href="?setLng=de"> de </a> 

     <h3>loaded via attribute 'data-i18n' and $('.nav').i18n();</h3> 

     <h5>basic text</h5> 
     <ul class="nav"> 
      <li class="active"><a href="#" id = "navy" data-i18n="nav.home"></a></li> 
      <li><a href="#" data-i18n="nav.1"></a></li> 
      <li><a href="#" data-i18n="nav.2"></a></li> 
     </ul> 

     <button id="btn" data-i18n="ns.common:add"></button> 

     <h5>extended usage of 'data-i18n' - apply to other attributes</h5> 
     <div id="extendedAttr"> 
      <input data-i18n="[placeholder]ns.common:attr.placeholder;" type="text"></input> 
      <button data-i18n="[title]ns.common:attr.title;btn.hoverMe;"></button> 
     </div> 

     <script> 

     $.i18n.init({ 
      //lng: 'en', 
      ns: { namespaces: ['ns.common', 'ns.special'], defaultNs: 'ns.special'}, 
      useLocalStorage: false, 
      debug: true 
     }, function(t) { 

      //$('#navy').i18n(); for single 
      $('.nav').i18n(); // for group 
      $('#btn').i18n(); 
      $('#extendedAttr').i18n(); 
     }); 



     </script> 

    </body> 

    </html> 


locales/en/ns.special.json <=> make same for de/ns.speacial.json 
{ 
    "nav": { 
     "home": "en home", 
     "1": "en link 1", 
     "2": " en link 2" 
    }, 
    "btn": { 
     "hoverMe": "en hover me!" 
    } 
} 

and locales/de/ns.common.json <=> make same for en/ns.speacial.json 
{ 
    "app": { 
     "company": { 
      "name": "my company" 
     } 
    }, 
    "attr": { 
     "placeholder": "de translated placeholder", 
     "title": "translated title" 
    }, 
    "add": "de add" 
} 
+0

विवरण के लिए: https://github.com/i18next/i18next – gnganpath

+0

i18n के लिए backbone.js कार्यान्वयन के साथ नीचे दिए गए लिंक को require.js के साथ देखें https://github.com/manishcm/i18n-backbone – gnganpath

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