2008-09-23 13 views
89

मैं सी # में कई भाषाओं के लिए उपयुक्त अनुप्रयोग बनाने में देख रहा हूं क्योंकि मुझे एक छोटी परियोजना पर काम करने की ज़रूरत है, जहां यह मामला है। मुझे मूल रूप से ऐसा करने के दो तरीके मिल गए हैं:सी #/WinForms में एक बहु भाषा आवेदन करने के लिए सबसे अच्छा अभ्यास?

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

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

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

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

+2

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

+0

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

उत्तर

18

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

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

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

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

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

स्वाद का एक प्रश्न के लिए इस्तेमाल किया जा सकता ...

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

+2

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

+1

@ मार्कज [एमएसडीएन दस्तावेज] (http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo (v = vs.80) .aspx) उल्लेख करता है कि पारंपरिक चीनी और सरलीकृत चीनी बोलीभाषा नहीं हैं (देश/क्षेत्र) लेकिन तटस्थ संस्कृतियों। एमएसडीएन: "एक तटस्थ संस्कृति एक ऐसी संस्कृति है जो किसी भाषा से जुड़ी है लेकिन देश/क्षेत्र के साथ नहीं। एक विशिष्ट संस्कृति एक ऐसी संस्कृति है जो एक भाषा और देश/क्षेत्र से जुड़ी है। उदाहरण के लिए," एफआर "एक तटस्थ है संस्कृति और "एफआर-एफआर" एक विशिष्ट संस्कृति है। ध्यान दें कि "zh-CHS" (सरलीकृत चीनी) और "zh-CHT" (पारंपरिक चीनी) तटस्थ संस्कृतियां हैं। " – broadband

+0

मैंने हाल ही में [लिंक] (http://www.codeproject.com/Articles/15248/Globalization-of-Windows- अनुप्रयोग-in-Minute) की सहायता से यह किया है, 2 चरणों का उल्लेख नहीं किया गया है: 1. सभी पर क्लिक करें .resource फ़ाइलें और "कार्य बनाएँ" संपत्ति को "सामग्री" पर सेट करें। 2. सभी .resource फ़ाइलों पर क्लिक करें और "आउटपुट निर्देशिका में कॉपी करें" संपत्ति को "हमेशा कॉपी करें" पर सेट करें। – Sourav

9

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

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

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

4

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

+0

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

+0

बहुत बहुत धन्यवाद (सराहना की)। उत्पाद (लगभग 10 साल पहले) शुरू करने से पहले मैं आपसे सहमत होता था लेकिन अगर एमएसएफटी ने इसे आज लागू किया तो यह मुझे व्यवसाय से बाहर कर देगा :) – Larry

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