2011-04-14 9 views
8

मुझे आश्चर्य है कि अलग-अलग क्या हैं और कुछ बहुभाषी जावास्क्रिप्ट एप्लिकेशन सेट अप करने का सबसे अच्छा तरीका कौन सा है। मैं स्ट्रिंग को आसानी से बदलने या बाद में और अधिक भाषाओं को जोड़ने के लिए एक फ़ाइल में सभी प्रयुक्त स्ट्रिंग्स रखना चाहता हूं।बहुभाषी जावास्क्रिप्ट अनुप्रयोगों के विभिन्न दृष्टिकोण क्या हैं

thnx!

+1

जरूरत है आप स्टैंड-अलोन मतलब है जावास्क्रिप्ट समाधान? Node.js में के रूप में? वे अभी समाधान पर काम कर रहे हैं। क्या आप कृपया उस तकनीक के बारे में कुछ और बता सकते हैं जिसका आप उपयोग करना चाहते हैं। –

+0

@ Paweł Dyda: सेन्चा टच या सरल जेएस ढांचे में अधिक पसंद है। – headkit

+0

बस यह https://github.com/fwg/jsgettext मिला। यह जीएनयू गेटटेक्स्ट का जावास्क्रिप्ट कार्यान्वयन है, जो जावास्क्रिप्ट के लिए अंतर्राष्ट्रीयकरण समर्थन प्रदान करता है। – RRG

उत्तर

23

आप बस एक बड़ा वस्तु पेड़ बना सकते हैं:

var languages = { 
    english:{ 
     Save:"Save" 
    }, 
    german:{ 
     Save:"Speichern" 
    } 
}; 

अपने अनुप्रयोग में:

var l = languages.german; 
alert(l.Save); //Alerts "Speicher" 

इस प्रणाली का लाभ यह है कि आप कुछ मान एक साथ समूह में उप वस्तुओं बना सकते हैं।

+0

thx! उपयोग अच्छा लग रहा है लेकिन ऑब्जेक्ट पेड़ में बहुत सारी अनावश्यक जानकारी है, जो "पॉइंटर्स" को दोहराती है ... – headkit

1

मुझे "भाषा शब्दकोश सरणी" का उपयोग करना पसंद है, जिसे आप JSON या एक साधारण सरणी का उपयोग करके कर सकते हैं।

यह लागू करने के लिए आसान है:

var lang = 0 //0 = english, 1=french 

var phrases=[] 
phrases['cancel'] = "cancel,annuler".split(",") 

alert(phrases['cancel'][lang]) 
4

तुम जो भी करते हैं, सबसे महत्वपूर्ण बात यह अपने कोड और ग्रंथों के बीच अलग है।

यदि कोड और ग्रंथ मिश्रित हैं, रखरखाव असंभव होगा और आप जल्द ही इसे छोड़ देंगे।

अनुवाद योग्य ग्रंथों को आसानी से स्कैन किया जाना चाहिए, ताकि अनुवादक केवल ग्रंथों का अनुवाद कर सकें। फिर, आप आसानी से अनुवाद सम्मिलित करने में सक्षम होना चाहिए।

हम एक जेएस फ़ाइल का उपयोग करते हैं जिसमें तारों का नक्शा शामिल होता है। हमारे पास एक साधारण पायथन लिपि है जो अनुवाद करने योग्य तारों को निकालती है। एक ही स्क्रिप्ट आउटपुट जेएस फ़ाइल भी बनाता है जिसमें अनुवादित तारों के साथ समान लेबल शामिल होते हैं।

परिणाम है:

  • जब अनुप्रयोग विकसित होता है, यह नया तार जोड़ना आसान है।
  • स्क्रिप्ट स्वचालित रूप से नए स्ट्रिंग्स पाती है और हम उनका अनुवाद कर सकते हैं।
  • पूर्ण अनुवाद मैन्युअल कार्य के बिना जेएस फ़ाइल पर वापस जाएं।
1

यहाँ एक समारोह है मैं एक साथ रखा इस सवाल में स्वीकार किए जाते हैं उत्तर के आधार पर भाषा अनुवाद को संभालने के लिए:

/** 
Core script to handle language translations 
**/ 
var Language = function() { 

    var activeLanguage = 'en'; 

    var languagePack = { 

     'en': { 
      'hello-world': 'Hello World', 
      'show-variants': 'Show Variants', 
      'hide-variants': 'Hide Variants' 
     }, 
     'fr': { 
      'hello-world': 'Bonjour World', 
      'show-variants': 'représentent des variantes', 
      'hide-variants': 'masquer variantes' 
     } 

    } 
    var translate = function(key, language) 
    { 
     if (typeof languagePack[language] == 'undefined') 
     { 
      return; 
     }else { 
      return languagePack[language][key]; 
     } 
    }; 

    return { 
     init: function(language) 
     { 
      activeLanguage = language; 
     }, 
     getString: function(key, defaultText) 
     { 
      var text = translate(key, activeLanguage); 
      if (typeof(text) === 'undefined' || text.length == 0 || text == null) 
      { 
       text = defaultText; 
      } 
      return text; 
     } 


    } 


}(); 

तो आम पेज कोड में यह आरंभ करने के लिए है, जहां ${language.language} jsp कोड भाषा सेट करने के लिए है एक सर्वर पक्ष विन्यास से।

<script type="text/javascript"> 
jQuery(document).ready(function() { 
     Language.init('${language.language}'); 

    }); 
</script> 

इसके बाद जब भी आप एक संदेश उपयोग

Language.getString('hello-world', 'Hi World');

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