C # / WinForms में एक बहु भाषा अनुप्रयोग बनाने के लिए सबसे अच्छा अभ्यास? [बन्द है]


94

मैं C # में कई भाषाओं के लिए उपयुक्त एप्लिकेशन बनाने के लिए देख रहा हूं क्योंकि मुझे एक छोटी परियोजना पर काम करने की आवश्यकता है जहां यह मामला है। मुझे मूल रूप से ऐसा करने के दो तरीके मिले हैं:

फ़ॉर्म की स्थानीय संपत्ति को सही पर सेट करें, भाषा की संपत्ति सेट करें, सभी लेबल भरें और इस तरह, और आप 'काम' कर रहे हैं। इसमें जो बड़ी कमी मुझे दिख रही है, वह यह है: अन्य सामान कैसे बनाया जाए जो कई भाषाओं (जैसे पॉप-अप विंडो, लॉग फाइल या विंडो आदि) के लिए तैयार फॉर्म का हिस्सा नहीं है।

एक संसाधन फ़ाइल बनाएँ, उदाहरण के लिए 'Lang.en-us.resx' और प्रत्येक भाषा के लिए, उदाहरण के लिए 'Lang.nl-nl.resx' और इसे स्ट्रिंग्स के साथ भरें। आईडीई स्वचालित रूप से मेरे लिए एक वर्ग उत्पन्न करता है, इसलिए कोड में मैं सिर्फ Lang.SomeText का उपयोग कर सकता हूं। इसमें जो सबसे बड़ी कमी मुझे दिखती है, वह यह है: हर फॉर्म के लिए मुझे कोड में सभी लेबल और अन्य कैप्शन सेट करने की आवश्यकता है (और यह इन संसाधनों के साथ डेटा बाइंडिंग कार्य नहीं लगता है)।

मुझे यकीन है, हालांकि, यह करने के लिए अन्य तरीके भी हैं।

तो, सबसे अच्छा अभ्यास क्या है? छोटे अनुप्रयोगों (कुछ रूपों, डेटाबेस कनेक्शन आदि) के लिए सबसे आसान क्या है और बड़े अनुप्रयोगों के लिए सबसे अच्छा क्या है?


3
मैंने देखा है, कि रचनात्मक (या अन्य "एसओ के प्रकारों के लिए वैध नहीं") सबसे मूल्यवान प्रश्नों में से एक हैं :) यह भी एक अच्छा सवाल है (मुझे लगता है कि वोट साबित होते हैं) यहां एक अच्छा प्रदर्शन है बहु भाषा के ऐड-इन के लिए मल्टी लैंग्वेज सपोर्ट youtube.com/watch?v=SNIyP1QQdVs
प्रोक्योरर्स

1
यह मुश्किल है कि कभी-कभी इंटरनेट के चारों ओर ज्ञान के सभी टुकड़ों को एक साथ जोड़ दिया जाए, और मुझे अभी यह प्रश्न अमूल्य लगता है। निश्चित रूप से ऐसे समय होते हैं जब नरम सवालों को बंद करना उन्हें खुला छोड़ने से कम रचनात्मक होता है, और मुझे लगता है कि यह उन समयों में से एक है। :)

जवाबों:


20

मैंने हमेशा बहु-भाषा अनुप्रयोगों के लिए संसाधन फ़ाइलों का उपयोग किया है।
वेब पर कई लेख बता रहे हैं कि उनका उपयोग कैसे किया जाए।

मैंने दो अलग-अलग तरीकों का इस्तेमाल किया है:

  • प्रति प्रपत्र संसाधन फ़ाइल
  • एक वैश्विक संसाधन फ़ाइल

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

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

स्वाद का एक सवाल ...

एक अंतिम बिंदु, मैं अंग्रेजी और फ्रेंच में कार्यक्रम लिखता हूं, मैं "एन" और "एफआर" का उपयोग करता हूं और "एन-यूएस" और "एफआर-एफआर" का उपयोग नहीं करता हूं। चीजों को जटिल मत करो, अंग्रेजी (अमेरिकी, अंग्रेजी, ऑस्ट्रेलियाई आदि) के विभिन्न dilelects में केवल एक का उपयोग करने के लिए कुछ पर्याप्त अंतर हैं (वही फ्रेंच के लिए जाता है)।


2
आपको कभी-कभी बोलियों के बारे में चिंता करनी होगी। उदाहरण के लिए चीनी अक्षर पारंपरिक चीनी (ताइवान) बनाम सरलीकृत चीनी (मुख्य भूमि चीन) में पूरी तरह से अलग हैं।
मार्कजे

1
@ मर्कज MSDN प्रलेखन में उल्लेख किया गया है कि पारंपरिक चीनी और सरलीकृत चीनी बोलियाँ (देश / क्षेत्र) नहीं हैं, लेकिन तटस्थ संस्कृतियाँ हैं। Msdn: "एक तटस्थ संस्कृति एक संस्कृति है जो एक भाषा से जुड़ी होती है, लेकिन किसी देश / क्षेत्र के साथ नहीं। एक विशिष्ट संस्कृति एक संस्कृति है जो भाषा और देश / क्षेत्र से जुड़ी होती है। उदाहरण के लिए," fr "एक तटस्थ है। संस्कृति और "fr-FR" एक विशिष्ट संस्कृति है। ध्यान दें कि "zh-CHS" (सरलीकृत चीनी) और "zh-CHT" (पारंपरिक चीनी) तटस्थ संस्कृतियां हैं। "
ब्रॉडबैंड

मैंने हाल ही में लिंक की मदद से ऐसा किया है , 2 चरणों का उल्लेख नहीं किया गया है: 1. सभी .resource फ़ाइलों पर क्लिक करें और "Content" के लिए "Build Action" संपत्ति सेट करें। 2. सभी .resource फ़ाइलों पर क्लिक करें और "Copy to Output Directory" संपत्ति को "हमेशा कॉपी करें" सेट करें।
सौरव

1
@Kiquenet .NET व्यापक समर्थन सहित एक पूर्ण (कोड के साथ) उत्तर के लिए, देखें: stackoverflow.com/a/35813707/2901207
CularBytes

9

मैंने हाल ही में जर्मन और अंग्रेजी भाषा समर्थन के साथ एक कार्यक्रम लिखा था। मुझे यह जानकर आश्चर्य हुआ कि यदि मैंने अपने अंग्रेजी संसाधनों का नाम LanguageResource.resx और मेरे जर्मन संसाधन LanguageResources.de.resx रखा है, तो यह स्वतः ही सही भाषा का चयन करता है। ResXFileCodeGenerator ने मेरे लिए यह सब ध्यान रखा।

ध्यान दें कि दो फ़ाइलों में फ़ील्ड समान थे और कोई भी अभी तक दर्ज नहीं किए गए जर्मन फ़ील्ड एप्लिकेशन में दिखाएंगे क्योंकि अंग्रेजी सबसे विशिष्ट फ़ाइल भाषा वार डिफ़ॉल्ट फ़ाइल है। एक स्ट्रिंग की तलाश में यह सबसे विशिष्ट (पूर्व .de-DE.resx) से कम से कम विशिष्ट (पूर्व .resx) तक जाता है।

अपने स्ट्रिंग्स पर जाने के लिए ResourceManager.GetString या ResourceManager.GetObject कॉल्स का उपयोग करें। आवेदन आपको मुक्त करने के लिए ResourceManager देना चाहिए।


6

अन्य लोगों के लाभ के लिए जो इस (अंतिम पोस्ट के 1 साल बाद) भर में आ सकते हैं, मैं एक पेशेवर स्थानीयकरण उत्पाद का लेखक हूं जो संपूर्ण अनुवाद प्रक्रिया को बेहद आसान बनाता है। यह एक विजुअल स्टूडियो ऐड-इन है जो किसी भी मनमाने समाधान से सभी ".resx" तार निकाल देगा और उन्हें एक सिंगल फाइल में लोड कर देगा जिसे एक मुफ्त स्टैंडअलोन एप्लिकेशन का उपयोग करके अनुवादित किया जा सकता है (अनुवादक मेरी साइट से इसे डाउनलोड कर सकते हैं)। एक ही ऐड-इन तब अनुवादित स्ट्रिंग्स को आपके समाधान में वापस आयात करेगा। कई अंतर्निहित सुरक्षा उपायों, बहुत सारी घंटियों और सीटी के साथ उपयोग करने में आसान, और ऑनलाइन मदद (आपको इसकी बहुत आवश्यकता नहीं होगी)। देखें http://www.hexadigm.com


1
यह विज़ुअलस्टडियो के मूल फ़ंक्शन के रूप में जोड़ा जाना चाहिए! महान सॉफ्टवेयर!
Caverna

बहुत बहुत धन्यवाद (सराहना)। मैं उत्पाद शुरू करने से पहले आपसे सहमत होता (लगभग 10 साल पहले) लेकिन अगर MSFT ने आज इसे लागू किया तो यह मुझे व्यवसाय से बाहर कर देगा :)
Larry
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.