2009-06-08 15 views
20

इस परियोजना के लिए जो मैं वर्तमान में चालू हूं, मुझे प्रसंस्करण के लिए किसी तृतीय पक्ष सेवा में विशेष रूप से स्वरूपित स्ट्रिंग देना होगा। और इसलिए मैं तो जैसे तार का निर्माण कर रहा हूँ:क्या हमें संसाधनों में प्रारूप तारों को स्टोर करना चाहिए?

string someString = string.Format("{0}{1}{2}: Some message. Some percentage: {3}%", token1, token2, token3, number); 

बल्कि तो स्ट्रिंग को हार्डकोड, मैं परियोजना संसाधनों में यह हिलाने की सोच रहा था:

string someString = string.Format(Properties.Resources.SomeString, token1, token2, token3, number); 

दूसरा विकल्प मेरी राय में है , जैसा कि पहले व्यक्ति के रूप में पठनीय नहीं है, यानी कोड पढ़ने वाले व्यक्ति को अंतिम परिणाम दिखने के लिए स्ट्रिंग संसाधनों को खींचना होगा।

मैं इसके आसपास कैसे हो सकता हूं? क्या हार्डकोडेड प्रारूप इस मामले में एक आवश्यक बुराई है?

उत्तर

14

मुझे लगता है कि यह एक आवश्यक बुराई है, जिसे मैंने अक्सर उपयोग किया है। कुछ बदबूदार है कि मुझे क्या करना है:

// "{0}{1}{2}: Some message. Some percentage: {3}%" 
string someString = string.Format(Properties.Resources.SomeString 
            ,token1, token2, token3, number); 

..at से कम जब तक कोड है कि मैं दूसरों के द्वारा देखा गया है कि होने शर्मिंदा हो सकता है काफी स्थिर है।

+5

का उपयोग कर रहा हूँ तुम भी चाहिए द्वारा हर बार

दिया की सुविधा देता है देखना पैरामीटर क्या कहने के लिए संसाधन फ़ाइल में टिप्पणियां जोड़ें। यदि फ़ाइल कभी भी अनुवाद में जाती है तो यह स्थानीयकरण के लिए बहुत उपयोगी है। –

+0

@ कोडिंगमोन्की: सहमत हुए। जैसा कि आप कर सकते हैं स्थानीयकरण इंजीनियरों के लिए जीवन को आसान बनाओ। आप अनुवाद अनुमान नहीं चाहते हैं। –

+1

@MichaelPetrotta> आप कोड को कैसे व्यवस्थित करेंगे ताकि ये {0} तार अब आवश्यक न हों? मैं व्यक्तिगत रूप से 'string.Format' का उपयोग न करने के बारे में सोच रहा हूं लेकिन इसका उपयोग करें: '" प्रारंभ {मध्य} अंत "। रद्द करें (" {middle} ", मध्य)'। इस दृष्टिकोण के बारे में इसकी समस्याएं हैं ... – Laoujin

2

मुझे नहीं पता कि प्रोग्राम में प्रारूप स्ट्रिंग सहित एक बुरी चीज क्यों है। पारंपरिक अनियंत्रित जादू संख्याओं के विपरीत, यह स्पष्ट है कि यह पहली नज़र में क्या करता है। बेशक, यदि आप एकाधिक स्थानों में प्रारूप स्ट्रिंग का उपयोग कर रहे हैं तो इसे निश्चित रूप से अनावश्यकता से बचने के लिए उचित पढ़ने-योग्य चर में संग्रहीत किया जाना चाहिए।

मैं मानता हूं कि संसाधनों में इसे रखना अनावश्यक संकेत है। एक संभावित अपवाद होगा यदि आपके कार्यक्रम को स्थानीयकृत करने की आवश्यकता है, और आप संसाधन फ़ाइलों के माध्यम से स्थानीयकरण कर रहे हैं।

+0

हाँ, यह दर्द है, लेकिन स्थानीयकरण के लिए पुनर्निर्देशन का कुछ रूप लगभग आवश्यक है। मैंने उस बाड़ के दूसरी तरफ, सॉफ्टवेयर स्थानीयकरण में काम किया है, और मेरा विश्वास करो, आप * हमें कोड भेजना नहीं चाहते हैं। या वापस कोड में परिवर्तन विलय करने का प्रयास करें। –

+0

हां, लेकिन गेटटेक्स्ट-शैली स्थानीयकरण कोड में मूल स्ट्रिंग को रखने की अनुमति देता है, जबकि अभी भी अनुवादकों को केवल एक बर्तन (टेम्पलेट) फ़ाइल भेजता है। तो संसाधन फाइलें एकमात्र विकल्प नहीं हैं। –

15

ऐसे कई कारण हैं जिन्हें आप करना चाहते हैं, लेकिन एकमात्र महान कारण यह है कि यदि आप अपने आवेदन को किसी अन्य भाषा में स्थानांतरित करने जा रहे हैं।

यदि आप संसाधन तारों का उपयोग कर रहे हैं तो ध्यान में रखने के लिए कुछ चीजें हैं।

  1. जब भी आप स्थानीयकरण चाहते हैं संसाधन स्ट्रिंग के सेट में प्रारूप स्ट्रिंग शामिल करें। यह अनुवादक को अनुवादित पाठ के संदर्भ में बेहतर फिट करने के लिए स्वरूपित वस्तुओं की स्थिति को पुन: व्यवस्थित करने की अनुमति देगा।

  2. अपनी भाषा में मौजूद प्रारूप प्रारूपों में स्ट्रिंग होने से बचें। संख्याओं के लिए का उपयोग करना बेहतर है। उदाहरण के लिए, संदेश:

    महान है अगर {0} और {1} कर रहे हैं 5 और 10 की तरह जो नंबर आप स्वरूपण रहे हैं, तो "मान आपके द्वारा निर्दिष्ट के बीच {0} और {1} होना चाहिए" "पांच" और "दस" जैसे तारों में यह स्थानीयकरण को मुश्किल बनाने जा रहा है।

  3. आप अपने संसाधनों को आसानी से नाम देकर पढ़ने योग्यता समस्या के बारे में बात कर सकते हैं।

    स्ट्रिंग someString = string.Format (Properties.Resources.IntegerRangeError, minValue, maxValue);

  4. मूल्यांकन करें कि क्या आप अपने कोड में सही अमूर्त स्तर पर उपयोगकर्ता दृश्य स्ट्रिंग उत्पन्न कर रहे हैं। आम तौर पर मैं जितना संभव हो सके उपयोगकर्ता इंटरफ़ेस के निकट कोड में सभी उपयोगकर्ता दृश्य स्ट्रिंग को समूहित करता हूं।यदि कुछ निम्न स्तर की फ़ाइल I/O कोड को त्रुटियां प्रदान करने की आवश्यकता है, तो इसे अपवादों के साथ ऐसा करना चाहिए जो आप अपने अनुप्रयोग में संभालते हैं और लगातार त्रुटि संदेश के लिए करते हैं। यह आपके सभी तारों को भी समेकित करेगा जिसके लिए उन्हें आपके कोड में पेपर करने की जगह स्थानीयकरण की आवश्यकता होती है।

3

एक बात आप हार्ड कोडित तार जोड़ने के लिए या यहां तक ​​कि एक संसाधन फ़ाइल को तार जोड़ने में तेजी लाने में मदद करने के लिए कर सकते हैं CodeRush एक्सप्रेस जो आप मुफ्त यहाँ डाउनलोड कर सकते हैं उपयोग करने के लिए है: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/

एक बार जब आप लिखना अपने स्ट्रिंग आप कोडरश मेनू तक पहुंच सकते हैं और एक ही चरण में संसाधन फ़ाइल में निकालेंगे। बहुत अच्छा।

Resharper similar functionality है।

+0

यह शायद ही कभी एक दीर्घकालिक समाधान है। आपका कोड अभी भी 'Properties.Resources.SomeString'nnn से भरा जाएगा ** जब आप अपने कोड पर जाते हैं ** ** रूपांतरण के बाद, जैसे रखरखाव – MickyD

+0

के दौरान यह टिप्पणी काफी पुरानी थी। हालांकि 'Properties.Resources.SomeString' यह है कि आप उस समय सी # प्रोजेक्ट में तारों का उपयोग कैसे करेंगे और बाहरी प्रक्रिया में resource.dll को स्थानीयकरण करना सही था। आप हमेशा बाइनरी फ़ाइल को सीधे स्थानीयकृत नहीं करना चाहते हैं, इसलिए संसाधन फ़ाइल में टेक्स्ट रखना महत्वपूर्ण था। –

1

हाँ आप enter image description here

नया कर सकते हैं कि

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) 

इस वसीयत मुझे गतिशील संदेश तरह से मैं ResXManager

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