स्ट्रिंग संसाधन आमतौर पर कोड के लिए बाहरी क्यों रखे जाते हैं और कोड के अंदर नहीं होते हैं?


18

आमतौर पर, कई प्लेटफार्मों पर, मैं अपने स्ट्रिंग संसाधनों को .resx या .xml फ़ाइल में लिख रहा हूं, और फिर मैं उन्हें कुछ प्लेटफ़ॉर्म-निर्भर दृष्टिकोण का उपयोग करके प्राप्त कर रहा हूं।

यही है, आईओएस पर, मैं उन्हें एंड्रॉइड पर NSBundle.MainBundleउपयोग करके और प्राप्त कर रहा हूं Context.Resources

इस दृष्टिकोण के क्या फायदे हैं, और कोड में सीधे पहुंच योग्य क्यों नहीं है, इसलिए, उदाहरण के लिए:

  1. क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट में, कोई भी प्लेटफ़ॉर्म सीधे इसे एक्सेस कर सकता है, जिसमें कोई एकीकरण नहीं है।

  2. निर्माण के दौरान कोई चिंता नहीं है कि संसाधनों का निर्माण अच्छी तरह से किया गया है या नहीं।

  3. कोडर फंक्शंस का उपयोग कर सकता है जैसे कि बहुभाषी हैंडलिंग

लंबी कहानी छोटी: क्या कारण है कि स्ट्रिंग संसाधनों को उस तरह से संरचित किया जाता है?

[संपादित करें]

मान लीजिए कि मेरी फ़ाइल अन्य प्रोजेक्ट के बीच साझा की गई "कोर" परियोजना का हिस्सा है। (पीसीएल, क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट फ़ाइल संरचना के बारे में सोचें।)

और मान लीजिए कि मेरी फ़ाइल एक .resx / .xml फ़ाइल की तरह ही है, इस तरह लग रही है (मैं xml में एक समर्थक नहीं हूँ, माफ करना!): पैरामीटर Paramètres!

तो, यह मूल रूप से एक कस्टम xml है, जहां आप उचित स्ट्रिंग प्राप्त करने के लिए कुंजी / भाषा को इंगित करते हैं।

फ़ाइल एप्लिकेशन का ही हिस्सा होगी, जैसे आप किसी ऐप के अंदर कोई एक्सेसिबल फ़ाइल जोड़ते हैं, और स्ट्रिंग संसाधनों का उपयोग करने के लिए सिस्टम, 4L का उपयोग करके कोडित किया जाता है। क्या यह अनुप्रयोगों में एक ओवरहेड जोड़ देगा?



6
नहीं, मेरी चिंताएं अंतर्राष्ट्रीयकरण के बारे में नहीं हैं, बल्कि वास्तुकला और क्रॉस-प्लेटफॉर्म के बारे में क्षमा करें।
लेओन पेलेटियर

1
इस सवाल को किसी भी तरह के संसाधन के लिए सामान्यीकृत किया जा सकता है, वास्तव में, स्थानीयकरण / अंतर्राष्ट्रीयकरण में आसानी के साथ। किसी भी प्रकार के संसाधन को कोड से अलग रखने के क्या फायदे हैं? आम तौर पर बाइनरी स्ट्रिंग्स के रूप में छवियों या ऑडियो फ़ाइलों को स्रोत में एन्कोड क्यों नहीं किया जाता है? (डेटा यूआरआई मौजूद हैं, ज़ाहिर है, लेकिन आम तौर पर बड़ी फ़ाइलों के लिए अव्यावहारिक हैं)। दूसरों ने पहले से ही कुछ बहुत अच्छे जवाब दिए हैं, लेकिन मैं सिर्फ यह बताना चाहता हूं कि उपयोगकर्ता-पठनीय तार एकमात्र संसाधन प्रकार नहीं हैं जो बाहरी होने से लाभ प्राप्त करते हैं।
JAB

जवाबों:


38

स्थानीयकरण और अंतर्राष्ट्रीयकरण,

स्ट्रिंग्स को बाहरी रखने से उन्हें बदलने की आवश्यकता होती है (पढ़ें: अनुवादित) बिना रीकॉम्पाइल (केवल एक रिंकल, और बस एक नए फ़ोल्डर में सबसे अच्छे रूप में छोड़ने) की आवश्यकता के बिना।


यह relink vs recompile एक अच्छा कारण है, धन्यवाद।
लीन पेलेटियर

2
अभी भी एकमात्र व्यक्ति जिसने प्रश्न को समझा।
लेओन पेलेटियर

3
@ratchetfreak यह बहुत जल्द स्वीकार करने के लिए बुरा रूप है (घंटों के भीतर निश्चित रूप से मायने रखता है।) बुलबुले के अन्य उत्तरों के लिए समय नहीं देता है। यह सरल है, और बिंदु और सटीक है ... लेकिन कोई व्यक्ति अधिक बेहतर पूर्ण, अधिक विस्तृत उत्तर कल (या इस मामले के लिए अगले महीने) में ला सकता है।
वर्नरसीडी

3
अतिरिक्त: एक अनुवादक के लिए एक XML फ़ाइल को संपादित करना ठीक हो सकता है, लेकिन कभी भी उन्हें वास्तविक कोड के पास
फिड न करें

अब प्रश्न यह है: "क्या यह उत्तर अभी भी व्याख्या की गई भाषाओं के लिए लागू है?"। मैं पूछता हूँ क्योंकि वहाँ कोई relink या recompiling होगा।
थॉमस ईडिंग

10

यदि आपके पास एक फ़ाइल है जिसमें केवल स्ट्रिंग संसाधन हैं, तो आप संसाधन फ़ाइल को किसी अनुवाद-एजेंसी या उस जैसी किसी चीज़ को दे सकते हैं और एक अनुवाद प्राप्त कर सकते हैं। मुझे लगता है कि आप कल्पना कर सकते हैं कि अगर कोई अनुवाद करने के लिए लेपर्सन को बहुत सारे कोडफाइल्स दे सकता है तो आपको कितना मुश्किल हो सकता है (इसके अलावा शायद आप अपने कोड को जिसे भी देना नहीं चाहते)।


2
वैसे, परियोजना और संसाधन फ़ाइल में शामिल एक फ़ाइल के बीच कोई अंतर नहीं है। समस्या यह नहीं है।
लियोन पेलेटियर

मैं सीधे कोड में संसाधनों को शामिल करने और फिर कार्यक्रम के अंदर सब कुछ संभालने की बात कर रहा हूं, इसलिए यह पीसीएल / क्रॉस-प्लेटफॉर्म के अनुकूल है।
लायन पेलेटियर

2
यदि आपके पास अपने सभी स्ट्रिंग संसाधनों के साथ एक "कोड" फ़ाइल है (शब्दकोश निश्चितता या ऐसा कुछ), और इसमें कुछ भी नहीं है .. इसके अलावा मूल रूप से यह एक संसाधन फ़ाइल है (लेकिन किसी एकल प्लेटफ़ॉर्म के लिए, जैसे कि एंड्रॉइड नहीं होगा। कोई भी ऑब्जेक्टिव-सी कोड) लें। यदि इसमें कोई अन्य कोड है या यदि बाहरी अनुवाद प्राप्त करने की तुलना में इसे कई फाइलों में विभाजित किया गया है तो यह कठिन है। क्रॉस-प्लेटफ़ॉर्म दृश्य में, xml जैसे एक पाठ-प्रारूप का लाभ है जिसे आप किसी भी भाषा / मंच पर पढ़ सकते हैं और उपयोग कर सकते हैं (लेकिन आपको इसे कुछ काम करना पड़ सकता है)
फ़्लो

7

अंतर्राष्ट्रीयकरण / स्थानीयकरण के अलावा, इस तरह से टेक्स्ट स्ट्रिंग्स को अलग करना भी एक प्रूफ़रीडर को messages.${LOCALE}सही स्रोत कोड फ़ाइल को छूने के बिना , वर्तनी / व्याकरण / विराम चिह्न के लिए सुधार प्रस्तुत करने की अनुमति देता है, जिन्हें अलग-थलग किया जाता है । आपके पास कोड परिवर्तनों पर एक ब्लैकआउट हो सकता है, लेकिन ऐसे पाठ सुधारों को स्वीकार कर सकते हैं। यदि आप कोड और संदेशों दोनों में समवर्ती परिवर्तन स्वीकार कर रहे हैं, तो उन्हें अलग रखना पैच को मर्ज करना आसान बनाता है, बशर्ते कि कोड परिवर्तन किसी भी संदेश को फिर से परिभाषित न करें जो कि प्रूफ़रीडर के चेक आउट होने पर मौजूद थे messages.en_US

इसके अलावा, यह कैसे लागू किया जाता है, इसके आधार पर, आवेदन को रिलेक्स करना भी आवश्यक नहीं हो सकता है। कोड केवल messages.${LOCALE}एक विशेष संदेश के लिए लाइन 138 को पकड़ सकता है , रन समय पर निर्धारित लाइन संख्या के साथ।


0

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

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

एक सामान्य विकल्प जीएनयू गेटटेक्स्ट दृष्टिकोण है जो स्रोत कोड में अनुवाद योग्य स्ट्रिंग को चिह्नित करता है और स्वचालित रूप से इन स्ट्रिंग्स को मानक पीओ फाइलों को निकालता है जो अच्छी तरह से क्रॉस-प्लेटफॉर्म और क्रॉस-भाषाओं में काम करते हैं। डेवलपर दृष्टिकोण से यह किसी भी दिन XML संसाधन फ़ाइलों के मैनुअल रखरखाव को धड़कता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.