2009-08-24 21 views
6

पर Winforms बटन के पाठ को कैसे बाध्य करें हमारे पास संसाधन फ़ाइल है जिसमें कई अनुवादित स्ट्रिंग्स हमारे एप्लिकेशन में विभिन्न स्थानों का उपयोग करते हैं। उदाहरण के लिए बाध्यकारी के लिए एक बेहतर तरीका है एक बटन के पाठ को एक निश्चित स्ट्रिंग में?सी #: संसाधन

वर्तमान में हम आम तौर पर सिर्फ कुछ इस तरह निर्माता में कर रहे हैं, एक लोड ईवेंट हैंडलर में या एक पद्धति उन में से एक ने कहा जाता है में:

someButton.Text = CommonTexts.SomeString; 
someMenuItem.Text = CommonTexts.SomeOtherString; 

वहाँ यह करने के लिए एक बेहतर तरीका है? शायद डिजाइनर में? या यह करने का यह अनुशंसित तरीका है?


बस आपको यह बताने के लिए कि हम वास्तविक अनुवाद कैसे करते हैं: हमारे पास एक क्लास लाइब्रेरी प्रोजेक्ट है जिसमें केवल resx फ़ाइलें हैं। मुख्य resx फ़ाइलें अंग्रेजी में लिखा है (बेशक)। फिर हम उन बेस रेस फाइलों को ResEx नामक एप्लिकेशन में खोलते हैं जहां हम (या कोई और) अन्य भाषाओं में अनुवाद करता है। जब संकलित दृश्य स्टूडियो स्वचालित रूप से प्रत्येक भाषा के लिए असेंबली बनाता है जो वर्तमान संस्कृति सेट के आधार पर स्वचालित रूप से उपयोग किया जाता है। यह बहुत अच्छी तरह से काम करता है, इसलिए मुझे वास्तव में अनुवाद कैसे करें और इस तरह की जानकारी की आवश्यकता नहीं है (हालांकि मैं हमेशा पाठ्यक्रम में सुधार के लिए उत्सुक हूं)। मैं जो पूछ रहा हूं वह यह है कि संसाधन असेंबली से और उन सभी Text गुणों में उन अनुवादित तारों को प्राप्त करने का एक बेहतर तरीका है।

+0

पुन: संपादित करें: काउंटर प्रश्न यह है: आप डिफ़ॉल्ट फॉर्मलोड सिस्टम का उपयोग क्यों नहीं करते? यह बनाया गया है और अदृश्य है। –

+1

क्योंकि मैं सोच रहा था कि क्या कोई बेहतर तरीका है। – Svish

उत्तर

3

आप कर सकते हैं:

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

यह वही तरीका होगा जैसा कि मैंने पहले से ही किया है, बहुत अधिक जटिल: पी – Svish

+0

@ थॉमस: मुझे नहीं लगता कि पोस्टर का मतलब "डेटा बाध्यकारी" के रूप में बाध्यकारी था। – MusiGenesis

+0

वीएस -2008 (और शायद 2005) में आपके प्रोजेक्ट में संसाधन फ़ाइल जोड़ने से प्राप्त डिफ़ॉल्ट संसाधन प्रबंधक कुंजी मान के लिए नामित गुणों का खुलासा करता है, ताकि यह केवल "btnButton.Text = resman.ButtonName" होगा, टाइपो के बारे में चिंताएं सहेजना डोर। –

0

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

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

0

इस प्रयास करें:

someButton.DataBindings.Add ("पाठ", CommonTexts, "SomeString");

1

LingoBit Localizer नामक एक अच्छा टूल है जो सभी रीसावर्स फ़ाइलों को बनाने के लिए उस समय के अंश के लिए नौकरी करता है।

विकास प्रक्रिया के दौरान आपको अन्य भाषाओं की परवाह नहीं है, तो आप केवल एक कोडिंग सॉफ्टवेयर सेट करने के लिए प्रोग्रामिंग करते समय कोडों को सेट और सेट करते हैं। पूरा करने के बाद, या जब भी आप चाहें, तो आप अपने डीएलएल या विंडोज फॉर्म एप्लिकेशन पर लिंगोबिट लोकलाइज़र चलाते हैं। यह आपके जीयूआई के भीतर आपके लिए एक ग्रिड के लिए उपयोगकर्ता-प्रदर्शित करने योग्य तारों को प्राप्त करेगा। अब, शायद एक पेशेवर अनुवादक शब्द का अनुवाद करने के लिए उपयोग कर सकता है यदि आपके प्रोग्रामर उस भाषा को नहीं जानते हैं जिसके लिए आवेदकॉन का अनुवाद किया जाना है। फिर, जब आप पूरा कर लेंगे तो आप बस प्रोजेक्ट को सेव करें। यह एक डीएलएल फ़ाइल तैयार करेगा जिसे आप बस अपनी बाइनरी परिनियोजन निर्देशिका में जोड़ते हैं, फिर आपका एप्लिकेशन स्वचालित रूप से वर्तमान संस्कृति जानकारी के आधार पर सही भाषा पर सेट हो जाएगा जिस पर ऐप। स्थापित है या तो। यह बहुत सारे प्रोग्रामिंग समय और सिरदर्द बचाता है।

उम्मीद है कि यह संसाधन-आधारित समाधान नहीं होने के बावजूद मदद करता है।

+0

यह इस समस्या का एक उचित दृष्टिकोण है। अगर वे केवल पुर्तगाली का समर्थन करते हैं ... – MusiGenesis

+0

आप VisualLocalize का भी उपयोग कर सकते हैं। हम अक्सर उस उपकरण का उपयोग करते हैं। यहां अच्छी बात यह है कि यदि आप अनुवादित पाठ नियंत्रण में फिट बैठते हैं और यदि आप इस भाषा में केवल नियंत्रण का आकार बदल नहीं सकते हैं और नए आकार को सैटेलाइट-असेंबली में स्थानीयकृत टेक्स्ट को अलग किया जाएगा तो आप अपने सभी संवादों को जांच सकते हैं। – PVitt

1

यह होम कीवर्ड का मूल्य निकाल देगा और Text1 बॉक्स में पॉप्युलेट करेगा।

Text1.Text= Resource.Home.ToString(); 
3

मैं समझता हूँ, यह एक पुराने सवाल है, लेकिन अभी भी, मैं एक ही मुद्दा (वी.एस. 2010) था, और गूगल में पहली लिंक में से एक इस विषय है।

सभी ग्रंथों को संसाधन फ़ाइल बनाने के लिए स्थानांतरित करने के लिए - आपको Winform स्थानीयकरण योग्य संपत्ति को सही पर सेट करने की आवश्यकता है। और बस। :) (सी) कैप। ओ

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