2011-01-31 26 views
9

के लिए दृष्टिकोण ऐसा लगता है कि एक WPF अनुप्रयोग में एकाधिक भाषाओं को कार्यान्वित करने के तरीके पर कई दृष्टिकोण हैं। लेकिन मुझे कुछ और जानकारी चाहिए कि मुझे निम्नलिखित आवश्यकताओं के साथ किस विधि का उपयोग करना चाहिए:एक बहुभाषी WPF अनुप्रयोग

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

क्या कोई मुझे इस बारे में सलाह दे सकता है कि इसे कैसे प्राप्त किया जाए?

धन्यवाद!

उत्तर

3

इस बीच मैं एक खुला स्रोत परियोजना है कि वास्तव में अच्छी तरह से काम करता है पाया: http://wpflocalizeextension.codeplex.com । यह सिर्फ डीएलएल का संदर्भ जोड़ रहा है, अनुवादों के साथ संसाधन जोड़ रहा है, और एक्सएएमएल में इसका उपयोग कर रहा है। यह 5 मिनट में काम किया। मैं अलग-अलग मॉड्यूल में एकाधिक संसाधन जोड़ सकता हूं; और यह दृश्य स्टूडियो डिजाइनर और मिश्रण में ठीक काम करता है। और, फ्लाई पर लोकेल बदल दिया जा सकता है। मेरी आवश्यकताओं को पूरा करता है :)

+0

हाय वहाँ। मैं अपने प्रिज्म एप्लिकेशन में भी WPFLocalizeExtension को अभिन्न करने की कोशिश कर रहा हूं। लेकिन मेरा ऐप रनटाइम पर संसाधनों को हल नहीं कर सका। डिजाइन समय पर यह ठीक है।क्या आपके पास एक कामकाजी उदाहरण है जिसे मैं देख सकता हूं? धन्यवाद। –

+0

आपने संसाधन फ़ाइलों को 'एम्बेडेड संसाधन' के रूप में कॉन्फ़िगर किया है? –

+0

हाँ। प्रकाशित करने के लिए एक्सेस संशोधक सेट करें, –

4

एक आम दृष्टिकोण एक स्थिर परिभाषित स्थानीयकरण संसाधन पर अपने textblocks/लेबल आदि का पाठ संपत्ति बाध्य करने के लिए .. कुछ संपत्ति के लिए है:

<Label Content="{Binding Source={x:Static loc:LanguageContext.Instance}, 
         Path=Dictionary, Mode=OneWay, 
         Converter={StaticResource languageConverter}, 
         ConverterParameter=TextId}" /> 

यानी LanguageContext.Instance एक संपत्ति शब्दकोश के माध्यम से एक शब्दकोश को उजागर करता है, कनवर्टर TextId के माध्यम से पहचाने गए पाठ को देखने के लिए दिए गए कनवर्टर पैरामीटर का उपयोग करता है।

यह एक बोझिल दृष्टिकोण है, और आपकी सभी आवश्यकताओं को पूरा नहीं करेगा।

इस प्रकार के तर्क को करने के लिए अपने स्वयं के मार्कअप एक्सटेंशन को परिभाषित करने का एक बेहतर तरीका है। वहाँ मैं वेब पर देखा है समाधान के एक जोड़े हैं, यह उच्च दर्जा codeproject लेख:

http://www.codeproject.com/KB/WPF/realtime_multilingual.aspx

और एक ऐसी ही समाधान है कि यहाँ, मिश्रण प्रदान करता है ऑन-द-मक्खी भाषा बदलती है, जिससे शायद एक अच्छा है आप के लिए विकल्प:

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx

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

नोट: यह सिर्फ पाठ जो यहाँ अनुवाद किया जा रहा है नहीं है, अक्सर आप रंग/ग्राफिक्स आदि बदलने के लिए है ...

+0

धन्यवाद, दूसरा लिंक एक अच्छा दृष्टिकोण प्रतीत होता है, लेकिन मुझे इसे अनुकूलित करना है क्योंकि वर्तमान में ऐसा लगता है कि आप प्रत्येक क्षेत्र के लिए केवल एक बार संसाधन पंजीकृत कर सकते हैं; और मुझे प्रति क्षेत्र कई संसाधनों की आवश्यकता होगी क्योंकि प्रत्येक मॉड्यूल अपना संसाधन पंजीकृत करेगा। मुझे यह देखने के लिए एक नज़र आएगा कि यह संभव है या नहीं! –

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