2012-05-18 12 views
19

सामान्य रूप से, अनुवाद विधियां एक कुंजी> मान मैपिंग लेती हैं और इसे किसी मान में बदलने के लिए कुंजी का उपयोग करती हैं। अब मैं आपकी अनुवाद कुंजी का नाम देने के लिए दो अलग-अलग तरीकों को पहचानता हूं और मेरी टीम के भीतर हम सर्वसम्मति से नहीं आते हैं जो सबसे अच्छा तरीका प्रतीत होता है।अनुवाद फ़ाइलों में प्रमुख मानों के लिए सर्वोत्तम अभ्यास

विधि 1: पूर्ण अंग्रेजी शब्दों या वाक्यों उपयोग:

Name => Name 
Please enter your email address => Please enter your email address 

विधि 2: उपयोग कीवर्ड स्थिति का वर्णन:

NAME => Name 
ENTER_EMAIL => Please enter your email address 

मैं व्यक्तिगत रूप से पसंद करते हैं विधि # 1 क्योंकि यह सीधे संदेश का अर्थ दिखाता है। यदि अनुवाद मौजूद नहीं है, तो आप कुंजी पर वापस आ सकते हैं और इससे कोई समस्या नहीं आती है। हालांकि, जब अनुवाद अक्सर बदलता है, तो विधि बोझिल होती है, क्योंकि सभी फ़ाइलों को अद्यतन करने की आवश्यकता होती है। इसके अलावा लंबे ग्रंथों के लिए ये चाबियाँ बहुत बड़ी हो जाती हैं। यह ENTER_EMAIL जैसी चाबियों का उपयोग करके हल किया जाता है, लेकिन वाक्यांश पूरी तरह से संदर्भ से बाहर है। अमूर्त अनुवाद कुंजी की सूची बहुत बड़ी होगी, आपको अपने उपयोग को समझाते हुए सभी कुंजियों के लिए मेटा डेटा की आवश्यकता है और टक्कर बहुत आसान हो सकती है।

क्या दोनों दुनिया या तीसरी विधि का सर्वोत्तम है? आप अपने आवेदन में अनुवाद कुंजी का उपयोग कैसे करते हैं? हमारे मामले में यह एक php- आधारित वेबप्लिकेशंस है, लेकिन मुझे लगता है कि ऊपर की समस्या सामान्य रूप से i18n के बारे में बात करने के लिए सामान्य है।

+0

दिलचस्प सवाल। मैं # 1 का भी पक्ष लेता हूं, लेकिन हालात वारंट करते समय हाइब्रिड जाते हैं। –

+1

मैं आवश्यकता के साथ # 2 पसंद करता हूं, ज़ाहिर है कि हमेशा एक अंग्रेजी (या मूल भाषा) प्रविष्टि होती है। प्रत्येक रिकॉर्ड में एक तिथि/समय भी शामिल होना चाहिए जब इसे आखिरी बार अपडेट किया गया था, जो कि बदले गए संदेशों को इंगित करने के लिए अद्यतन किया गया था और अद्यतन अनुवादों की आवश्यकता थी। अलग-अलग, एक रिकॉर्ड संग्रहित किया जाना चाहिए जो बताता है कि मूल भाषा क्या है। –

उत्तर

18

यह एक सवाल है जिसे आईओएस/ओएसएक्स डेवलपर्स का भी सामना करना पड़ता है। और उनके लिए एक standard tool called genstrings भी है जो विधि 1 मानता है। लेकिन निश्चित रूप से ऐप्पल डेवलपर्स को इस टूल का उपयोग करने की आवश्यकता नहीं है - मैं नहीं करता हूं।

जबकि विधि 1 के साथ आपको प्राप्त सुरक्षा नेट अच्छा है (यानी यदि आप किसी स्ट्रिंग को स्थानीयकृत करना भूल गए हैं तो आप कुंजी प्रदर्शित कर सकते हैं) यह नकारात्मक है कि इससे विरोधाभासी कुंजी हो सकती है। कभी-कभी व्याकरण नियमों या संदर्भ में मतभेदों के कारण प्रदर्शन टेक्स्ट के एक समान टुकड़े को दो अलग-अलग तरीकों से स्थानांतरित करने की आवश्यकता होती है। मिसाल के तौर पर "ई-मेल" के लिए फ्रांसीसी अनुवाद "ई-मेल" होगा यदि यह एक संवाद शीर्षक है और "यह एक बटन है तो" एन्वायर अन ई-मेल "(फ्रेंच में शब्द" ई-मेल "केवल एक संज्ञा है और एक क्रिया के रूप में उपयोग नहीं किया जा सकता है, अंग्रेजी के विपरीत जहां यह एक संज्ञा और एक क्रिया दोनों है)। विधि 2 के साथ आप इस समस्या को हल करने के लिए EMAIL_TITLE और EMAIL_BUTTON कुंजी प्राप्त कर सकते हैं, और बोनस के रूप में यह अनुवादकों को सही तरीके से अनुवाद करने में सहायता करने के लिए संकेत देगा।

विधि 2 का एक और लाभ यह है कि आप अंग्रेजी में और अपने सभी स्थानीयकरण में कुंजी को अपडेट करने के बारे में चिंता किए बिना अंग्रेजी टेक्स्ट बदल सकते हैं।

तो मैं विधि 2 की सिफारिश करता हूं!

+0

'EMAIL_TITLE' और' EMAIL_BUTTON' का आपका उदाहरण बहुत अच्छा है, हालांकि मुझे नहीं लगता कि यह एक यथार्थवादी है। अंग्रेजी डेवलपर के रूप में, आप इस फ्रेंच मामले को नहीं जानते हैं। तो आप पहली जगह 'ई-मेल' (# 1) या 'EMAIL' (# 2) लिखते हैं। फिर आपका फ्रांसीसी अनुवादक उस संदेश के साथ वापस आता है जिसकी उसे दो चाबियाँ चाहिए, इसलिए आप बटन को 'ई-मेल (बटन)' (# 1) या 'EMAIL_BUTTON' (# 2) में बदल दें। दोनों विधियों के लिए प्रक्रिया एक जैसी है, अंत में आप टकराव करते हैं और आपको इसे हल करने की आवश्यकता होती है। इस बारे में आपका क्या विचार है? –

+1

डेवलपर्स को कुछ अंतर्राष्ट्रीयकरण नियमों से अवगत होना चाहिए। उन्हें किसी विशेष भाषा को जानने की ज़रूरत नहीं है, बस इस मामले में, टेक्स्ट के एक टुकड़े को विभिन्न संदर्भों में पुन: प्रयोज्य होने की उम्मीद नहीं की जा सकती है (यहां तक ​​कि जहां यह अंग्रेजी में कोई समस्या नहीं है)। तो अपने ऐप को विकसित करते समय, जब आप "ईमेल" बटन के लिए एक नई स्ट्रिंग पेश करते हैं, तो आप अपनी स्ट्रिंग टेबल में एक एंट्री जोड़ते हैं, भले ही आप देखते हैं कि आपके पास पहले से ही "ईमेल" है लेकिन एक अलग संदर्भ के लिए। – Clafou

+0

ध्यान दें कि कई प्लेटफार्मों के लिए इस गैर-पुन: उपयोग नियम को इस तथ्य से मदद मिली है कि यूआई विचारों को बंडलों में स्थानीयकृत किया गया है और आप स्ट्रिंग टेबल से टेक्स्ट के प्रत्येक टुकड़े को लोड करने के लिए कोड नहीं लिखते हैं (इसलिए आपको अक्सर एक ही टुकड़े के कई उदाहरण मिलते हैं अनुवाद करने के लिए अंग्रेजी पाठ का, लेकिन यह ठीक है क्योंकि उनका संदर्भ अलग हो सकता है) – Clafou

1

क्यों दोनों दुनिया का उपयोग नहीं करते? मैं छोटी तारों के लिए विधि # 1 का उपयोग करता हूं, और लंबी स्ट्रिंग्स के लिए विधि # 2 जो पूर्ण वाक्य हैं। मैं एक ही फाइल में मिश्रण करने से डरता नहीं हूं।

उदाहरण के लिए, निम्न स्ट्रिंग में पाठ करता है, तो एक नए एप्लिकेशन संस्करण में उपयोगकर्ता अनुभव संशोधित किया गया है बदल सकता है:

"screen description" = "Tap the plus button to add a new item. Tap an item for more options or to edit its details."; 

तो यहाँ यह समझ में आता है विधि # 2 लागू करने के लिए।जब लोग बातें यह अक्सर मेरे लिए प्रतिबंधात्मक प्रकट होता है मानकीकृत करने के लिए कोशिश

"Preferences" = "Preferences"; 

सामान्य में: हालांकि, निम्न उदाहरण में की तरह साधारण तार के लिए, विधि # 1 अधिक उपयोगी है। व्यक्तिगत रूप से, मैं एक और "अराजकतावादी" दृष्टिकोण पसंद करता हूं जहां कई विधियां मान्य होती हैं (न केवल इस विधि # 1 बनाम विधि # 2 धागे में, बल्कि उदाहरण के लिए जब डेवलपर्स की एक टीम कोडिंग शैली से लड़ती है)।

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