2011-08-09 23 views
12

मुझे प्रत्येक संस्कृति के लिए संसाधन फ़ाइलों के अनुसार रनटाइम पर संस्कृतियों को बदलने की जरूरत है।रनटाइम पर CurrentCulture को कैसे बदलें?

मैं अपने रूप में नियंत्रण की विशेषताओं को बदलने की जरूरत है, दो संस्कृतियों जो .resx फ़ाइलों

resorces1.aspx.resx // default 
resorces1.aspx.he-IL.resx // hebrew culture 

मैं या तो वापस आने संसाधन के साथ पेज लोड कर सकते हैं, या pageload दे पर नामित किया है के अनुसार UICulture = "he-IL" मूल्य और यह वांछित संसाधनों के साथ ठीक लोड करता है।

समस्या यह है कि मुझे रनटाइम पर इन परिवर्तनों को करने की आवश्यकता है।

1 .. मैं एक बटन क्लिक करें घटना पर मान बदलने के बाद

btn_change_Click(....) 
    { 
     UICulture = "he-IL" ; 
    } 

यह अभी भी "en-US" का प्रारंभ मूल्य रिटर्न

मैं कैसे UICulture में होने वाले बदलाव के लिए प्रतिबद्ध कर सकते हैं चलने के समय पर ?

2 .. अगर मैं उदाहरण के लिए यह "एन-यूएस" नहीं जानता तो मैं फ़ॉलबैक संसाधन फ़ाइल का संदर्भ कैसे दे सकता हूं?

उत्तर

36

वर्तमान UI संस्कृति को बदलना:

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("he-IL"); 

या बेहतर, वह आईएल संस्कृति का संचित केवल पढ़ने के लिए उदाहरण पुनः प्राप्त:

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("he-IL"); 

रन समय, ASP.NET संसाधन फ़ाइल का उपयोग करता है जो CurrentUICulture संपत्ति की सेटिंग के लिए सबसे अच्छा मिलान है। धागे के लिए यूआई संस्कृति पृष्ठ की यूआई संस्कृति के अनुसार सेट है। उदाहरण के लिए, यदि वर्तमान यूआई संस्कृति स्पेनिश है, तो ASP.NET WebResources.es.resx फ़ाइल के संकलित संस्करण का उपयोग करता है। यदि वर्तमान UI संस्कृति के लिए कोई मिलान नहीं है, तो ASP.NET संसाधन फ़ॉलबैक का उपयोग करता है। यह एक विशिष्ट संस्कृति के लिए संसाधनों की खोज करके शुरू होता है। यदि वे उपलब्ध नहीं हैं, तो यह तटस्थ संस्कृति के लिए संसाधनों की खोज करता है। यदि ये नहीं मिले हैं, तो ASP.NET डिफ़ॉल्ट संसाधन फ़ाइल लोड करता है। इस उदाहरण में, डिफ़ॉल्ट संसाधन फ़ाइल WebResource.resx है।

+0

ठीक तो मान लीजिए कि मैं CurrentUICulture बदल कैसे मैं इसे वापस डिफ़ॉल्ट संस्कृति बदल जाएगा मानते हुए मुझे नहीं पता कि यह क्या था? –

+0

डिफ़ॉल्ट संस्कृति फ़ॉलबैक संस्कृति सही है? यह संकलन समय पर सही है? यह resorces1.aspx.resx की संस्कृति है, शायद एन-यूएस .. जब तक कि मैं आपके दूसरे प्रश्न को गलत समझा नहीं जाता, यह सोचने में काफी आसान लगता है कि अब आप जानते हैं कि रनटाइम पर संस्कृति को कैसे बदला जाए :) – maxbeaudoin

+0

हाँ यह है, बीमार बस इसे बचाएं जब मैं पेज लोड करता हूं तो नाम। मैंने धन्यवाद से पहले नहीं सोचा था। –

0

अधिकतम मुझे सही रास्ते पर निर्धारित करते हैं, कुछ भी नहीं मैं पहले भर में नहीं आए हैं, लेकिन यह मुझे इस मामले पर MSDN प्रलेखन के लिए एक छोटी सी समायोजन करने में मदद की थी:

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();       
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected override void InitializeCulture() 
    { 
     if (Request.Form["ListBox1"] != null) 
     { 
      String selectedLanguage = Request.Form["ListBox1"]; 
      UICulture = selectedLanguage; 
      Culture = selectedLanguage; 

      Thread.CurrentThread.CurrentCulture = new CultureInfo(selectedLanguage); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 
     } 
     else 
     { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo(defaultLanguage); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(defaultLanguage); 
     }    
     base.InitializeCulture(); 
    } 

सूची बॉक्स में अलग-अलग संस्कृतियां होती हैं और पहली बार चयनित संस्कृति भी होती है, जिसे मैं पेज लोड पर सहेजता हूं, अन्य लोड पर इसे कोई प्रभाव नहीं पड़ता क्योंकि सूची बॉक्स पहले से ही एक मान के रूप में होता है।

0

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

मेरा एक उपयोगिता वर्ग में: सार्वजनिक स्ट्रिंग getLabelResource (स्ट्रिंग sLabelID, स्ट्रिंग sLangCd) {

 cLogger oLogger = new cLogger(); 

     try 
     { 
      Object sLabel; 
      sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID); 
      if (sLabel.ToString() == "") //label was not found in selected lang 
      { 
       //default to US language resource label 
       Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); 
       sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID); 
       //switch global lang back to selected 
       Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sLangCd); 
      } 
      return sLabel.ToString(); 

     } 
     catch (Exception ex) 
     { 
      oLogger.LogWrite("cUtils.cs", "getLabelResource", ex.Message, false); 
      return String.Empty; 
     } 
    } 
+0

जी ... धन्यवाद 2 साल पहले इसका उत्तर दिया गया था :) –

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