2012-02-06 14 views
7

मैं सी # के साथ एसएल 5 ऐप पर काम कर रहा हूं और मैं इसे अंतर्राष्ट्रीय बनाना चाहता हूं। मुझे यूआई संस्कृति सेट करने के लिए निम्नलिखित पाया गया:सिल्वरलाइट CurrentUICulture/CurrentCulture सही ढंग से कैसे सेट करें?

var culture = new CultureInfo(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName); 
Thread.CurrentThread.CurrentUICulture = culture; 
Thread.CurrentThread.CurrentCulture = culture; 

डेटपिकर जैसे कुछ नियंत्रण इसे चुनते हैं। यदि मैं 'डी' प्रारूप स्ट्रिंग का उपयोग कर किसी भी डेटाटाइम को प्रारूपित करता हूं, तो मुझे अभी भी डिफ़ॉल्ट प्रारूप "एम/डीडी/वाईवाय" मिलता है।

वास्तव में एसएल संस्कृति की व्याख्या कैसे करता है और मैं इसे पूरे एप्लिकेशन के लिए सही तरीके से कैसे सेट कर सकता हूं?

धन्यवाद

अद्यतन:

मिले जवाब:

सबसे पहले, Application_Startup में उपयुक्त संस्कृतियों सेट:

var culture = new CultureInfo("nl-BE"); 
Thread.CurrentThread.CurrentUICulture = culture; 
Thread.CurrentThread.CurrentCulture = culture; 

प्रमुख तत्व हालांकि करने के लिए है रूटविज़ुअल की संस्कृति/भाषा को मजबूर करने के लिए निम्नलिखित जोड़ें:

var root = RootVisual as Page; 
if (root != null) 
{ 
    root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 
} 

उत्तर

10

संपादित करें: @Rumble मिली जानकारी के साथ अपडेट किया गया।

आपको इसे अपनी यूआई ऑब्जेक्ट्स पर भी लागू करने के लिए ऐसा करने की आवश्यकता है।

जब आपका एप्लिकेशन लोड हो रहा है तो पहले उपयुक्त संस्कृतियों को सेट करें।

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN"); 

अगला आपको XML भाषा संपत्ति सेट करने की आवश्यकता है।

सिल्वरलाइट लिए

var root = RootVisual as Page; 
if (root != null) 
{ 
    root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 
} 

WPF

लिए
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
      XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

आप WPF here के लिए एक स्पष्टीकरण मिल सकता है।

+0

पहले, तेजी से जवाब के लिए धन्यवाद। एसएल 5 में, कोई 'ओवरराइड मेटाडाटा' विधि प्रतीत नहीं होती है। CurrentCulture में 'IetfLanguageTag' संपत्ति भी नहीं है ... – rumblefx0

+0

आपने मुझे सही दिशा में बंद कर दिया, धन्यवाद! – rumblefx0

+1

ऐसा लगता है कि आपको इसे सॉर्ट किया गया है। मैंने आपके उत्तर को आपके द्वारा मिली जानकारी के साथ अपडेट किया। – eandersson

1

eandersson के लिए धन्यवाद मैं विशिष्ट नियंत्रण के लिए इस एक्सटेंशन के साथ आया था। मुझे अपने दशमलव इनपुट, पार्सिंग और सत्यापन के साथ कोई समस्या थी। कहीं भी इस InvariantCulture के साथ '।' ',' के बजाय विभाजक के रूप में। इसे विशिष्ट संस्कृति स्थापित करने के लिए आसानी से संशोधित किया जा सकता है।

public class ElementCultureExtension 
{ 
    public static bool GetForceCurrentCulture(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(ForceCurrentCultureProperty); 
    } 

    public static void SetForceCurrentCulture(DependencyObject obj, bool value) 
    { 
     obj.SetValue(ForceCurrentCultureProperty, value); 
    } 

    public static readonly DependencyProperty ForceCurrentCultureProperty = 
     DependencyProperty.RegisterAttached(
      "ForceCurrentCulture", typeof(bool), typeof(ElementCultureExtension), new PropertyMetadata(false, OnForceCurrentCulturePropertyChanged)); 

    private static void OnForceCurrentCulturePropertyChanged(
     DependencyObject d, 
     DependencyPropertyChangedEventArgs e) 
    { 
     var control = (FrameworkElement)d; 
     if((bool)e.NewValue) 
     { 
      control.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 
     } 
    } 
} 

Xaml में:

सभी की
<TextBox Text="{Binding Path=DecimalValue, Mode=TwoWay}" 
         tools:ElementCultureExtension.ForceCurrentCulture="True" /> 
संबंधित मुद्दे