2008-09-11 16 views
10

कुछ समय पहले मैं 'Re-using Strings in Scripted Content' पर डब्ल्यू 3 सी लेख पढ़ रहा था, जिसमें अंतर्राष्ट्रीयकरण पर कुछ उपयोगी सलाह है, लेकिन जो मुझे DRY (खुद को दोहराएं) सिद्धांत के बावजूद मुझे मारता है दोहराव कोड को खत्म करने के लिए।अपने आप को अंतर्राष्ट्रीयकरण बनाम दोहराएं

उनके उदाहरण लेते हैं, हम इस तरह कुछ कोड हो सकता है ...

print "The printer is "; 
if (printer.working) { 
    print "on.\n"; 
} else { 
    print "off.\n"; 
} 

print "The stapler is "; 
if (stapler.working) { 
    print "on.\n"; 
} else { 
    print "off.\n"; 
} 

मेरे वृत्ति मोटे तौर पर इस प्रकार पुनरावृत्ति को खत्म करने की होगी ...

report-state(printer, "printer"); 
report-state(stapler, "stapler"); 

function report-state(name, object) { 
    print "The "+name+" is "; 
    if (object.working) { 
     print "on\n"; 
    } else { 
     print "off\n"; 
    } 
} 

... लेकिन ऐसा करने से हमें कोड में कठिनाई होगी यदि हमें इसे स्पेनिश में स्थानांतरित करने की आवश्यकता है क्योंकि 'ऑन' शब्द उन दो मामलों में स्पष्ट रूप से अलग है।

तो, मुझे लगता है कि मेरा सवाल यह है कि, अन्य डेवलपर्स ने अपने कोड के अंतर्राष्ट्रीयकरण के साथ डीआरवाई सिद्धांत को संतुलित करने के लिए कैसे संपर्क किया है?

मेरा हिस्सा यह तर्क देना चाहता है कि अंतर्राष्ट्रीयकरण उन अत्यधिक प्रोग्रामिंग "you arent gonna need it" स्थितियों में से एक है। फ्लिप पक्ष पर, हालांकि, डीआरवाई सिद्धांत के साथ दोबारा प्रतिक्रिया करना इसे कार्यक्षमता को कार्यान्वित करना आसान बनाता है, क्योंकि यह आवश्यक है, जैसा कि यह यहां कठिन नहीं है।

उत्तर

16

मैं भाषा संसाधन में पूर्ण वाक्य रखने की कोशिश करता हूं। जैसा कि आपने कहा था कि आपको अलग-अलग संदर्भों में अलग-अलग शब्दों की आवश्यकता हो सकती है। लेकिन एक बड़ी समस्या यह है कि विभिन्न भाषाओं में वाक्यों का क्रम अलग हो सकता है। इसलिए शब्दों से तारों का निर्माण समस्याएं पैदा कर सकता है।

बस हर भाषा के लिए भाषा का संसाधन में

The printer is on 
The printer is off 
The stapler is on 
The stapler is off 

की दुकान। यह पता लगाने की कोशिश करने की तुलना में यहां पुनरावृत्ति एक रखरखाव सिरदर्द से कम है जहां आपके एकल एप्लिकेशन में आपके सभी एप्लिकेशन पॉप अप होने जा रहे हैं।

+0

देखें [i18next] का उपयोग करके (http://i18next.com/pages/doc_features.html#nesting) के घोंसले कार्यक्षमता मैं एक शब्दकोष का पुन: उपयोग करने का प्रयास करें, उदाहरण: '$ टी (प्रिंटर) चालू है इसलिए मेरे पास प्रिंटर शब्द एक ही स्थान पर है। – jamuhl

0

मैं स्थानीयकरण को कवर करने के लिए अपने टेक्स्ट मानों में हार्डकोडिंग के बजाय एक सीएमएस का उपयोग करने का सुझाव दूंगा।

2

मैं Mendelt Siebenga से सहमत हूं जब वह कहता है कि आपको अपनी भाषा संसाधन फ़ाइलों में पूरे वाक्यों या वाक्यांशों को रखना चाहिए। व्याकरण में मतभेद हमेशा आपको भाषाओं में एकल शब्द प्रतिस्थापन करने से रोकेंगे। यह अभी भी आपके पहले उदाहरण की तुलना में कम दोहराव कोड का कारण बन जाएगा क्योंकि आपको केवल ऑब्जेक्ट प्रकार और उसके राज्य की जांच करने की आवश्यकता है, फिर भाषा संसाधन से उपयुक्त संदेश प्रिंट करें।

1

मुझे लगता है कि यह उस भाषा की गुणवत्ता के स्तर पर निर्भर करता है जिसे आप प्राप्त करना चाहते हैं।

इन असली भाषा तारों से निपटने वाले कोड की पुनरावृत्ति को कम करने की कोशिश करके, आप सिंटैक्स और विभिन्न भाषाओं के ढांचे में तर्क की एक पूरी दूसरी परत पर खुद को उजागर कर रहे हैं। कोड बनाने में शामिल भारी मात्रा में काम होगा जो पुनरावृत्ति को कम करने के दौरान भाषा की मूल संरचना को बरकरार रखेगा।

आपको यह तय करना होगा कि किसी विशेष समस्या के लिए कौन सा उपयुक्त दृष्टिकोण था; कोड जो खुद को दोहराता है, या कोड जो सभी ट्रेडों का जैक बनने की कोशिश करता है और भाषा के अनगिनत नियमों के लिए रहता है (इसमें कोई शक नहीं है कि रखरखाव दुःस्वप्न)।

बेशक, आप एक मध्य-मैदान पर हमला कर सकते हैं और अपने कोड प्रतिष्ठा को कम कर सकते हैं लेकिन संतोषजनक व्याकरणिक वार्तालाप छोड़ सकते हैं।अल्टिमा ऑनलाइन का उदाहरण लें - जब इसे स्थानीयकृत किया गया था, एक स्ट्रिंग जो पहले "32 9 सोने के सिक्कों का ढेर" पढ़ती थी, जैसे "सोने के सिक्कों का ढेर: 32 9"। अच्छा नहीं है, लेकिन एक काफी उचित समाधान है जो स्थानीयकरण के लिए आसानी से उधार देता है।

2

हम प्रोग्राम मैनिपुलेशन द्वारा संदेश तार बनाने की कोशिश नहीं करते क्योंकि लोक। टीम उन्हें नहीं देख सकती है।

लोक। टीम वास्तव में अलग लेकिन लगभग डुप्लिकेट संदेश पसंद करते हैं। हालांकि वे पैरामीटरकृत संदेशों को स्वीकार करेंगे।

उदा।, "% (उपकरण)%% (on_or_off)% है।"

पैरामीटर टूट सकते हैं लेकिन कम से कम यह स्थानीय टीम के लिए अधिक स्पष्ट है जब यह काम करेगा और जब यह नहीं होगा।

6

100% मेंडेल से सहमत हैं।

यह केवल एक रखरखाव समस्या नहीं है, बल्कि एक भाषाई भी हो सकता है। सभी लैटिन भाषाओं में लिंग, संख्या, और विषय के मामले अन्य तत्वों को प्रभावित करते हैं। रोमानियाई

The printer is on: Imprimanta este pornită // feminine 
    The printer is off: Imprimanta este oprită 
    The stapler is on: Perforatorul este pornit // masculine 
    The stapler is off: Perforatorul este oprit 

के लिए उदाहरण भी http://www.mihai-nita.net/article.php?artID=20060430a

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