2009-09-22 69 views
4

我創建了兩個.resx文件--WebResources.resx和WebResources.fr-FR.resx。.resx本地化不能與ASP.Net一起使用 - C#

兩者都包含ExceptionMessages_SignupWithCard。

爲了測試我所做的:

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 
Response.Write("Current Culture is " + CultureInfo.CurrentCulture.EnglishName); 
Response.Write("<br>Message is: " + Resources.WebResources.ExceptionMessages_SignupWithCard); 

的問題是,我仍然得到WebResources.resx的ExceptionMessages_SignupWithCard消息,而不是一個從WebResources.fr-FR.resx。

有人可以協助嗎?

謝謝。

回答

8

ASP.Net(具體而言,ResourceManager)使用CurrentUICulture來檢索資源。

嘗試設置線程的CurrentUICulture。

CultureInfo french = new CultureInfo("fr-FR"); 
Thread.CurrentThread.CurrentCulture = french; 
Thread.CurrentThread.CurrentUICulture = french; 
Response.Write("Current Culture is " + CultureInfo.CurrentCulture.EnglishName); 
Response.Write("<br>Message is: " + 
      Resources.WebResources.ExceptionMessages_SignupWithCard); 
+1

太棒了,工作,謝謝,但是當我把它放在一個按鈕的onclick事件中時,它不會保留用於重新加載(在on_load事件中顯示.resx內容)。 我想我需要知道如何改變它的會議,所以它維護我的所有網頁。 謝謝。 – ElHaix 2009-09-22 15:51:49

1

嘗試直接設置Page.Culture和Page.UICulture,而不是線程文化。

由於它是一個字符串屬性,它似乎不會很好。但是,有很多代碼不僅要改變線程文化,還要改變ResourceManagers。

這似乎是標準的方法,而不是分配線程的文化。

1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LanugageChanger._Default" meta:resourcekey="PageResource1"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div style="height: 481px"> 

     <asp:Label ID="Label1" runat="server" Text="Hello" 
      meta:resourcekey="Label1Resource1"></asp:Label> 

     <asp:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1"></asp:TextBox> 
     <br /> 
     <asp:Label ID="Label2" runat="server" Text="Goodbye" 
      meta:resourcekey="Label2Resource1"></asp:Label> 

     <asp:TextBox ID="TextBox2" runat="server" meta:resourcekey="TextBox2Resource1"></asp:TextBox> 
     <br /> 
     <asp:Label ID="Label3" runat="server" Text="Welcome" 
      meta:resourcekey="Label3Resource1"></asp:Label> 

     <asp:TextBox ID="TextBox3" runat="server" meta:resourcekey="TextBox3Resource1"></asp:TextBox> 
     <br /> 
     <asp:Label ID="Label4" runat="server" Text="Terminate" 
      meta:resourcekey="Label4Resource1"></asp:Label> 

     <asp:TextBox ID="TextBox4" runat="server" meta:resourcekey="TextBox4Resource1"></asp:TextBox> 
     <br /> 
     <asp:Label ID="Label5" runat="server" Text="End" 
      meta:resourcekey="Label5Resource1"></asp:Label> 

     <asp:TextBox ID="TextBox5" runat="server" meta:resourcekey="TextBox5Resource1"></asp:TextBox> 
     <br /> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Add new values" 
      meta:resourcekey="Button1Resource1" onclick="Button1_Click1" /> 

     <br /> 
     <asp:Button ID="Button2" runat="server" Text="Change language" 
      meta:resourcekey="Button2Resource1" onclick="Button2_Click" /> 

     <br /> 
     <br /> 
     <asp:Label ID="Label6" runat="server" meta:resourcekey="Label6Resource1" 
      Text="English 1"></asp:Label> 
     <br /> 
     <asp:Label ID="Label7" runat="server" meta:resourcekey="Label7Resource1" 
      Text="English 2"></asp:Label> 
     <br /> 
     <asp:Label ID="Label8" runat="server" meta:resourcekey="Label8Resource1" 
      Text="English 3"></asp:Label> 
     <br /> 
     <asp:Label ID="Label9" runat="server" meta:resourcekey="Label9Resource1" 
      Text="English 4"></asp:Label> 
     <br /> 
     <asp:Label ID="Label10" runat="server" meta:resourcekey="Label10Resource1" 
      Text="Default" />></asp:Label> 

     <br /> 
     <asp:TextBox ID="TextBox6" runat="server" Height="153px" Width="543px"></asp:TextBox> 

    </div> 
    </form> 
</body> 
</html> 
0

有兩種方法來設置一個asp.net網頁的UICulture。

選項1是Web瀏覽器可以通過在Web瀏覽器中設置當前語言來調整UI Culture(自動)。在FireFox中,選擇「選項」中的「內容」選項卡,然後單擊「語言」,然後添加法語並將其移至列表頂部。 IE類似,在選項頁面中有一個語言按鈕,然後添加法語並將其移到訂單的頂部。爲了讓您的網頁支持這種自動調整方式,您必須在網頁編譯指示中設置'UICulture = auto',如下所示: <%@ Page Language =「C#」AutoEventWireup =「true」UICulture =「auto」 ... ... ...%> 如果您使用此方法,它將顯示您不懂的任何Web瀏覽器語言的默認語言。你只需要定義一個與文化無關的資源來涵蓋一個語言的所有版本,或者你可以定義特定的語言(fr-CA,es-mx等),它將回退到中性語言文件(fr-fr)如果特定語言沒有定義。 MSDN對汽車文化的詳細信息,以及如何更Web瀏覽器語言添加到IE: http://msdn.microsoft.com/en-us/library/fw69ke6f.aspx

選項#2是在網頁編譯將其設置爲一個特定的語言,像的UICulture =「FR-FR」 ,或者在整個網站的web.config中。

MSDN在下面的鏈接中解釋這些設置,以及如何通過web.config爲您網站上的所有頁面設置它們。 http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

您正在使用的編程方法正常工作,但正如您注意到的,它只能暫時運行。我使用編程方法來讀取通過查詢字符串指定的語言並以這種方式改變文化。您可以實現HttpModule來檢查查詢字符串,並以此方式設置當前頁面請求的區域性。