2009-09-22 5 views
6

.NET से पहले, हमारे पास अपना स्वयं का वाक्यांश स्थानीयकरण प्रणाली थी और हमने फ़ॉर्मेटिंग स्ट्रिंग में टिप्पणियों के रूप में टिप्पणियों के लिए एक तरीके से बनाया: "{0: price}"। मुझे लगता है कि साल बीतने के साथ ही मैं इसे और अधिक याद करता हूं।.NET स्वरूपण तार - टिप्पणी के लिए अच्छा अभ्यास?

यह प्रकट नहीं होता है .NET में इस तरह सीटू तार स्वरूपण दस्तावेज़ के लिए एक तरह से है कि वहाँ:

string.Format("{0//numerator}/{1//denominator} = {2//ratio}" 
       ,somevar 
       ,anothervar 
       ,yetanothervar); 

विशेष रूप से यह स्थानीयकरण/पदावली जहां प्रविष्टि अंक पुनर्क्रमित पाने में उपयोगी है, बिना

string.Format("Dividing {1//denominator} into {0//numerator} gives {2//ratio}" 
       ,somevar 
       ,anothervar 
       ,yetanothervar); 

कोई भी किसी भी चाल वे दस्तावेज़ के लिए जब मामले रखरखाव/स्थानीयकरण आदि में पुन: व्यवस्थित करने के इन गलतियों से बचने के लिए उपयोग करते हैं: कोड को बदलने?

कारण यह महत्वपूर्ण है कि स्थानीयकरण और कॉन्फ़िगरेशन के लिए, आमतौर पर स्ट्रिंग चर के साथ कोड में नहीं है - मैंने उन्हें app.config और डेटाबेस में संसाधन फ़ाइलों में रखा है।

एक वास्तविक उदाहरण में, एक उपखंडित नियंत्रण एक वाक्यांश आईडी संपत्ति का खुलासा करता है (फ़ॉर्म से उत्पन्न XML फ़ाइल में नियंत्रण आईडी में मैप किए जाते हैं, और फॉर्म नियंत्रण फ्लाई पर अनुवादित होते हैं), इसलिए उप-वर्गीकृत रूप कुछ ऐसा करता है :

// Handle the phrases without insertion points - this is in the base class 
foreach (Control in this.Controls) { 
    IXLatable ixl = (IXLatable) Control; 
    ixl.Text = GetPhrase(ixl.PhraseID); 
} 

// in the individual form classes, they override the behavior for complex displays: 
lnkPublish.Text = string.Format(GetPhrase(lnkPublish.PhraseID), filename, foldername, userid); 

कहाँ शब्दकोश डिफ़ॉल्ट और तरह स्थानीय स्ट्रिंग है:

phraseid, language code, phrase 
1,en,"{0//filename} published to {1//foldername} by {2//userid}" 
1,pl,"{2//userid} ublishedpay ethay ilefay {0//filename} otay {1//foldername}" 

यह एक बहुत कम संभावना है कि एक अनुवादक (जो कभी स्रोत कोड को देखता है) अनुक्रमित गलत करता है, तो वे कर रहे हैं मिल जाएगा है डी में टिप्पणियों के साथ प्रदान की efault वाक्यांश। और एक गैर-स्थानीयकृत स्पीकर के लिए एक अनुवादित संसाधन में समस्याओं का निवारण करने के लिए आसान है।

+0

शुद्ध नहीं स्वरूपों का उपयोग करने की अनुमति देता है, लेकिन संदेश स्वरूप बहुत दिलचस्प स्थानीयकरण है बुद्धिमान https://github.com/jedtoolkit/messageformat.js –

उत्तर

4

आप Phil Haack's NamedFormat extension पर दिखाई दे सकता है, जो आप की तरह

NamedFormat("{{{foo}}}", new {foo = 123}) 
+0

मैं स्थितिगत उपयोग से खुश हूं, लेकिन यह दिलचस्प है। मुझे लगता है कि नामित उपयोग के साथ खराब रनटाइम मुद्दे संभव हैं। –

2

आपके उदाहरण में कुछ अर्थपूर्ण रूपों को नामकरण करने के लिए, टिप्पणियों के समान ही प्रभाव होगा।

+1

कि गैर-तुच्छ उदाहरणों में मामला नहीं बनता है। –