2011-08-09 29 views
12

Tôi cần phải thay đổi nền văn hóa trong thời gian chạy theo các tệp tài nguyên cho mỗi nền văn hóa.Làm thế nào để thay đổi CurrentCulture lúc chạy?

tôi cần phải thay đổi các thuộc tính của các điều khiển trong hình thức của tôi, theo hai nền văn hóa mà đã chỉ định Resx file

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

tôi có thể tải trang hoặc với nguồn dự phòng, hoặc trên pageload Hãy cho giá trị UICulture = "he-IL" và nó tải tốt với các tài nguyên mong muốn.

Vấn đề là tôi cần thực hiện các thay đổi này khi chạy.

1 .. sau khi tôi thay đổi giá trị trên một sự kiện nhấn nút

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

Nó vẫn trở về giá trị khởi tạo của "en-US"

Làm thế nào tôi có thể cam kết một sự thay đổi đến UICulture trong thời gian chạy ?

2 .. làm cách nào tôi có thể tham khảo tệp tài nguyên dự phòng nếu ví dụ tôi không biết đó là "en-US"?

Trả lời

36

Thay đổi văn hóa giao diện người dùng hiện tại:

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

hoặc tốt hơn, lấy một cache dụ read-only của nền văn hóa ông-IL:

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

Vào lúc chạy, ASP.NET sử dụng tệp tài nguyên phù hợp nhất với cài đặt của thuộc tính CurrentUICulture. Văn bản giao diện người dùng cho chuỗi được đặt theo văn bản giao diện người dùng của trang. Ví dụ: nếu văn bản giao diện người dùng hiện tại là tiếng Tây Ban Nha, ASP.NET sử dụng phiên bản được biên dịch của tệp WebResources.es.resx. Nếu không có kết quả phù hợp cho văn hóa giao diện người dùng hiện tại, ASP.NET sử dụng tài nguyên dự phòng. Bắt đầu bằng cách tìm kiếm tài nguyên cho một nền văn hóa cụ thể. Nếu những người không có sẵn, nó tìm kiếm các nguồn lực cho một nền văn hóa trung tính. Nếu không tìm thấy, ASP.NET tải tệp tài nguyên mặc định. Trong ví dụ này, tệp tài nguyên mặc định là WebResource.resx.

+0

ok để cho phép nói rằng tôi đã thay đổi CurrentUICulture làm thế nào tôi sẽ thay đổi nó trở lại văn hóa mặc định giả sử tôi không biết nó là gì? –

+0

Văn hóa mặc định là văn hóa dự phòng phải không? Nó được biết tại thời gian biên dịch phải không? Đó là văn hóa của resorces1.aspx.resx, có thể là en-US .. Trừ khi tôi hiểu lầm câu hỏi thứ hai của bạn, có vẻ khá dễ dàng để xem xét rằng bây giờ bạn biết cách thay đổi văn hóa lúc chạy :) – maxbeaudoin

+0

vâng, bị bệnh. tên khi tôi tải trang. tôi đã không nghĩ trước cảm ơn. –

0

max đặt tôi trên con đường đúng đắn, không có gì tôi đã không đi qua trước đó, nhưng nó đã giúp tôi thực hiện một điều chỉnh nhỏ để tài liệu MSDN về vấn đề này:

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(); 
    } 

hộp danh sách chứa các nền văn hóa khác nhau đầu tiên và được chọn cũng là nền văn hóa mặc định, mà tôi lưu trên tải trang, trên tải khác nó không có hiệu lực vì hộp danh sách đã là một giá trị.

0

Tôi chưa thể nhận được "dự phòng" như được mô tả tại đây để hoạt động. Tôi đang sử dụng các tệp tài nguyên toàn cầu cho ngôn ngữ và khi nhãn bị thiếu từ tệp văn hóa được người dùng chọn nó không mặc định trở lại nhãn trong văn hóa mặc định? Tôi đã kết thúc việc tạo phương thức để thực hiện dự phòng. Tôi đã tìm kiếm những cách tốt hơn để tạm thời thay đổi văn hóa (khi không tìm thấy nhãn) và vấp trên bài đăng này vì vậy tôi nghĩ rằng tôi và một số nội dung.

Trong một lớp tiện ích của tôi: public String getLabelResource (String sLabelID, String 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

g ... cảm ơn điều này đã được trả lời hơn 2 năm trước :) –

Các vấn đề liên quan