2010-07-09 21 views
5

Tôi đang cố gắng thiết lập văn hóa trang web của mình theo chương trình, vì vậy khi người dùng nhấp vào nút, họ có thể thay đổi văn bản trên trang từ tiếng Anh sang tiếng Tây Ban Nha. đây là mã của tôi:ASP.NET: Thay đổi văn hóa của trang web theo lập trình

protected void btnChangeLanguage(object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es); 
} 

<asp:Label ID="lblDisplay" runat="server" meta:ResourceKey="lblDisplay" /> 

<asp:Button ID="btnChangeLanguage" runat="server" Text="Change Language" 
     OnClick="btnChangeLanguage_Click" /> 

tôi có nộp với một chìa khóa/giá trị của một Default.aspx.resx: lblDisplay.text/English và Default.aspx.es.resx nộp với một chìa khóa/giá trị: lblDisplay.text/Espanol

tôi không thể nhận được văn bản của Nhãn để thay đổi từ "tiếng Anh" thành "tiếng Tây Ban Nha". bất cứ ai nhìn thấy những gì tôi đang làm sai?

Trả lời

11

Chủ đề ASP.Net được sử dụng cho toàn bộ thời gian của một yêu cầu, không phải toàn bộ phiên của người dùng. Tồi tệ hơn, đôi khi khung công tác sẽ tái chế cùng một luồng để xử lý các yêu cầu bổ sung thay vì trả lại nó cho hồ bơi và nhận một yêu cầu mới (nó không phải là một thỏa thuận lớn vì yêu cầu tiếp theo sẽ khởi tạo lại văn hóa, nhưng vẫn còn).

Thay vào đó, bạn cần ghi đè phương thức InitializeCulture() cho trang của mình. Xem liên kết này để xem chi tiết hơn:
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

+0

+1 Câu trả lời xuất sắc, chỉ cần đánh tôi với nó :) – armannvg

+0

Xin chào, cảm ơn câu trả lời của bạn. chương trình ví dụ từ liên kết bạn đã cung cấp cho tôi là những gì tôi đang tìm kiếm. tôi có một số câu hỏi mặc dù, như tôi vẫn không thể có được trang web của tôi để làm việc. chương trình ví dụ đặt văn hóa tùy thuộc vào ngôn ngữ nào được chọn từ một hộp danh sách. tôi không thể tìm ra những gì mã nên được khi sử dụng một nút liên kết. kể từ khi tôi không sử dụng một ListBox, nhấp vào linkbutton của tôi nên chuyển đổi giữa tiếng Anh và tiếng Tây Ban Nha. nên có một số mã trong sự kiện click của linkbutton của tôi? –

+0

bạn sẽ cần mã trong sự kiện nhấp của nút và bạn sẽ cần phải giữ một biến ở đâu đó giống như phiên mà bạn có thể sử dụng để biết những gì hiện đang được bật. –

8
  1. Tạo biến Session gọi là "CurrentUI". và thay đổi nó về sự kiện nút liên kết ví dụ:

    Ở đây tôi có hai nút liên kết cho mỗi ngôn ngữ

    protected void EnglishLinkButton_Click(object sender, EventArgs e) { 
        Session["CurrentUI"] = "en-US"; 
        Response.Redirect(Request.Url.OriginalString); 
    
    } 
    
    protected void SinhalaLinkButton_Click(object sender, EventArgs e) { 
        // සිංහල (ශ්‍රී ලංකා) 
        Session["CurrentUI"] = "si-LK"; 
        Response.Redirect(Request.Url.OriginalString); 
    
    } 
    
  2. Bây giờ bạn cần phải ghi đè lên InitializeCulture() trong lớp cơ sở của trang

    protected override void InitializeCulture() { 
        if (Session["CurrentUI"] != null) { 
         String selectedLanguage = (string)Session["CurrentUI"]; 
         UICulture = selectedLanguage; 
         Culture = selectedLanguage; 
    
         Thread.CurrentThread.CurrentCulture = 
          CultureInfo.CreateSpecificCulture(selectedLanguage); 
         Thread.CurrentThread.CurrentUICulture = new 
          CultureInfo(selectedLanguage); 
        } 
    
        base.InitializeCulture(); 
    } 
    
  3. Lưu ý rằng tôi đã sử dụng

    //Response.Redirect(Request.Url.OriginalString); 
    

    sau khi gán khóa văn bản vào phiên để tạo bài đăng thứ hai trở lại trang. Vì InitializeCulture() xảy ra trước khi sự kiện và thay đổi sẽ chỉ được áp dụng trong yêu cầu tiếp theo.

+3

+1 cho "සිංහල (ශ්‍රී ලංකා)" :) –

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