2012-06-02 9 views
13

मुझे आश्चर्य है कि एक्सप्रेस में एक ही लेआउट में एक ही सामग्री के एकाधिक संस्करण/भाषाओं को लागू करने का सबसे अच्छा तरीका क्या होगा।बहुभाषी एक्सप्रेस ऐप

क्या मुझे यह करना चाहिए?

app.get("/", function(req, res) { 
    res.render(language + "/index"); 
}); 

या क्या कोई बेहतर/बेहतर तरीका है?

उत्तर

21

मैं केवल एक टेम्पलेट रखने का सुझाव दूंगा, जैसे कि आप प्रति भाषा एक टेम्पलेट का उपयोग करते हैं, यह बहुत जल्दी हाथ से बाहर हो जाएगा, अकेले ही बहुत अधिक सामग्री डुप्लिकेट करें (और "तर्क" की छोटी राशि जिसे आप टेम्पलेट में डाल देंगे भी)। कई अनुप्रयोग अंतर्राष्ट्रीयकरण की बात करने के लिए गेटटेक्स्ट नामक टूल का उपयोग करते हैं। https://github.com/DanielBaulig/node-gettext

पर इसके लिए node.js लाइब्रेरी है वैकल्पिक रूप से i18n-node भी है। ऐसा लगता है कि एक्सप्रेस जेएस के साथ थोड़ा और एकीकरण है।

+3

धन्यवाद! मैं i18n-node ले जाऊंगा। :) – buschtoens

2

मैंने सोचा कि हम जेएनएस ऑब्जेक्ट्स को लैंग फ़ोल्डर जैसे en.js, fr.js में परिभाषित कर सकते हैं और इस जेसन फाइलों में उपयोगकर्ता की भाषा सेटिंग के अनुसार टेम्पलेट को प्रस्तुत करने से महत्वपूर्ण मूल्य जोड़े हैं, लैंग सेटिंग्स डेटाबेस में हो सकती हैं।

और हम इस टेम्पलेट को किसी भी टेम्पलेट को कॉल करने के लिए res.locals में सहेज सकते हैं।

क्या यह उपयुक्त है?

5

i18n-node सबसे सरल और सबसे बड़ा मॉड्यूल है जिसका उपयोग आप करना चाहिए। आप सीधे जावास्क्रिप्ट कोड या जेड/हैंडलबार टेम्पलेट्स के साथ एक्सप्रेस जेएस के साथ उपयोग कर सकते हैं।

आपको i18n का उपयोग क्यों करना चाहिए?

  • आपके सेटअप के आधार पर हेडर, कुकी या क्वेरी पैरामीटर द्वारा ब्राउज़र से लोकेल का ऑटो डिटेक्शन।
  • यह उदाहरणों के साथ आता है।
  • यह स्वचालित रूप से ./locales/ के अंदर en.json उत्पन्न करता है। नए अनुवादों को शुरू करने के लिए यह आपके लिए एक मास्टर फाइल के रूप में कार्य करता है।
  • एकवचन और बहुवचन रूपों का समर्थन करता है मापदंडों के लिए
  • समर्थन: __('Hello %s', 'Marcus') रिटर्न Hallo Marcus
संबंधित मुद्दे