वास्तव में बोझिल i18n दृष्टिकोण का एक विकल्प है। समाधान को Tr8n कहा जाता है।
आपका उपरोक्त कोड बस होगा:
<%= tr("You have {num || kid}", num: 1) %>
बस। अपने कोड से अपनी चाबियाँ निकालने और उन्हें संसाधन बंडलों में बनाए रखने की आवश्यकता नहीं है, प्रत्येक भाषा के लिए बहुवचन नियमों को लागू करने की आवश्यकता नहीं है। Tr8n सभी भाषा के लिए संख्यात्मक संदर्भ नियमों के साथ आता है। यह लिंग नियमों, सूची नियमों और भाषा मामलों के साथ भी आता है।
उपरोक्त अनुवाद कुंजी की पूरी परिभाषा वास्तव में इस तरह दिखाई देगी:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
लेकिन चूँकि हम स्थान और समय को बचाना चाहते हैं, इसलिए अंक स्वचालित रूप से संख्यात्मक नियमों के लिए मैप हो जाता है और नियम मूल्यों के लिए सभी विकल्प प्रदान करने की आवश्यकता नहीं होती है। Tr8n बहुवचन और inflectors के साथ आता है जो मक्खी पर आपके लिए काम करेंगे।
रूसी में आपकी कुंजी के लिए अनुवाद, बस होगा:
"У вас есть {num || ребенок, ребенка, детей}"
वैसे, आपका अनुवाद उन भाषाओं में गलत होगा जिनके लिंग विशिष्ट नियम हैं। उदाहरण के लिए, हिब्रू में, आपको वास्तव में अपने उदाहरण के लिए कम से कम 2 अनुवाद निर्दिष्ट करने होंगे, क्योंकि "आप" देखने वाले उपयोगकर्ता के लिंग के आधार पर भिन्न होंगे। Tr8n इसे बहुत अच्छी तरह से संभालता है। यहाँ हिब्रू अनुवाद का लिप्यंतरण है:
"Yesh leha yeled ahad" with {context: {viewing_user: male, num: one}}
"Yesh leha {num} yeladim" with {context: {viewing_user: male, num: other}}
"Yesh lah yeled ahad" with {context: {viewing_user: female, num: one}}
"Yesh lah {num} yeladim" with {context: {viewing_user: female, num: other}}
तो आपकी एकल अंग्रेजी कुंजी, इस मामले में, 4 अनुवादों की आवश्यकता है। सभी अनुवाद संदर्भ में किए गए हैं - आपको वाक्य को तोड़ने की आवश्यकता नहीं है। Tr8n में भाषा और संदर्भ के आधार पर कई अनुवादों के लिए एक कुंजी को मैप करने के लिए एक तंत्र है - यह सब मक्खी पर किया जाता है।
एक अंतिम बात। क्या होगा अगर आपको गिनती को बोल्ड करना था? यह बस होगा:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
बस अगर आप बाद में अपने "बोल्ड" को फिर से परिभाषित करना चाहते हैं - तो यह बहुत आसान होगा - आपको अपनी सभी YAML फाइलों से गुजरना और उन्हें बदलना नहीं होगा - आप बस इसे एक जगह पर करते हैं।
अधिक जानने के लिए, कृपया यहां देखें:
https://github.com/tr8n/tr8n_rails_clientsdk
प्रकटीकरण: मैं डेवलपर और Tr8n ढांचे और इसके सभी पुस्तकालयों का अनुरक्षक हूं।
"#{....}"
उपरोक्त कोड में "इंटरपोलर" और उद्धरण आवश्यक नहीं हैं।