2011-09-13 13 views
7

मेरी Silverlight 4 MVVM आवेदन में, मैं रनटाइम के दौरान भाषाओं स्विच कर सकते हैं: आदानों के लिएसिल्वरलाइट ValidatesOnException डिफ़ॉल्ट संदेश स्थानीयकरण

public void SetLanguage(string language) 
{ 
    var culture = new CultureInfo(language); 
    Thread.CurrentThread.CurrentUICulture = culture; 
    Thread.CurrentThread.CurrentCulture = culture; 
    // ... 
} 

, मैं सिर्फ कहा, "ValidatesOnException = सच" रूपांतरण समस्याओं के मामले में और यह करता है काम। लेकिन डिफ़ॉल्ट अपवाद संदेश मेरे ओएस की संस्कृति में है और मैन्युअल रूप से चुने गए में नहीं है।

इस धागे में exception message localization पर विचार वर्तमान संस्कृति और वर्तमान यूआईसील्चर को बदलना है, जो मैंने किया था। तो मैं फंस गया हूँ।

मैं क्या कर सकता हूं?

धन्यवाद :)

संपादित करें: मैं आदेश को उपयोगकर्ता के इनपुट को मान्य करने में convertback विधि में एक कस्टम अपवाद के साथ एक कस्टम कनवर्टर का उपयोग करने की कोशिश की। समस्या, कन्वर्टबैक विधि के भीतर एक अपवाद मान्यताओं द्वारा पकड़ा नहीं जाता है अपवाद, यह एप्लिकेशन को तोड़ देता है।

संपादित करें 2: स्पष्टीकरण के लिए -> यदि मेरे पास एक टेक्स्टबॉक्स से जुड़ी एक दशमलव संपत्ति है, और मैं इस टेक्स्टबॉक्स में "blabla" दर्ज करता हूं, तो मैं देखना चाहता हूं कि कोई समस्या है, और मैं संदेश में होना चाहता हूं रनटाइम लोकेल और ओएस लोकेल नहीं। मैं अपने प्रॉपर्टी सेटर में अपवाद नहीं उठा सकता क्योंकि मैं वहां कभी नहीं जाता, डिफ़ॉल्ट कनवर्टर इससे पहले अपना अपवाद उठाता है।

मुझे उम्मीद है कि यह स्पष्ट है। अगर मैं आपकी मदद करने में आपकी मदद कर सकता हूं, तो कृपया संकोच न करें :)

उत्तर

0

शायद आप शुरुआत में संस्कृति को नहीं बदल रहे हैं।

मेरा सुझाव है कि आप दृष्टिकोण इस लिंक के पहले उत्तर में दिए गए प्रयास करें:

Change culture of Silverlight application

+0

मैं कन्स्ट्रक्टर में भाषा सेट नहीं करना चाहता, मैं रनटाइम पर इसे बदलना चाहता हूं। यह लागू नहीं होता है, यह। भाषा निजी सेट है। –

+0

सिर्फ इसलिए कि यह कन्स्ट्रक्टर में है इसका मतलब यह नहीं है कि यह रनटाइम पर नहीं हो सकता है।एक पैरामीटरयुक्त कन्स्ट्रक्टर का उपयोग करें और सेटरंगेज विधि के समान तर्क शामिल करें जिसका आपने उपयोग किया है –

0

एक संभव दृष्टिकोण string को संपत्ति का प्रकार बदलने के लिए है, भले ही आप एक भंडारण कर रहे हैं decimal इसके पीछे मूल्य। गेटटर मूल्य पर ToString पर कॉल करेगा, और सेटर से decimal पर Decimal.Parse या इसी तरह के रूपांतरण का रूपांतरण करेगा। इस दृष्टिकोण का मतलब है कि आपको स्वयं प्रकार का रूपांतरण करना है, लेकिन यह कम से कम आपको थोड़ा अधिक नियंत्रण देता है।

आपका सेटर सत्यापन त्रुटियों को इंगित करने के लिए अपवाद फेंक सकता है। वैकल्पिक रूप से, आप सत्यापन त्रुटि दिखाने के लिए इंटरफेस IDataErrorInfo और INotifyDataErrorInfo का उपयोग कर सकते हैं। This page में IDataErrorInfo का उपयोग करने का एक उदाहरण है, और this one में INotifyDataErrorInfo का उपयोग करने का एक उदाहरण है।

0

आप ValidationRule के कस्टम कार्यान्वयन का उपयोग कर सकते हैं और Binding.ValidationRules संग्रह में जोड़ सकते हैं। आपको पहले संग्रह को साफ़ करना होगा (मुझे यकीन नहीं है कि इसे XAML कैसे करें) और इस नियम को जोड़ें (इसे एमएसडीएन पृष्ठ में से किसी एक में कैसे वर्णित किया गया है)।

इस कक्षा में Validate विधि है, जहां आप अपना सत्यापन कर सकते हैं और इच्छित त्रुटि संदेश लौटा सकते हैं।

+0

चांदी की रोशनी में मौजूद नहीं है, केवल wpf में:/ –

+0

आह, क्षमा करें, मुझे पूरा यकीन था कि मुझे +100 प्रतिष्ठा मिलती है;) एसएल का कौन सा संस्करण है आप उपयोग कर रहे हैं? एसएल 4 में आप IDataErrorInfo इंटरफेस को कार्यान्वित कर सकते हैं। –

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