2009-09-22 71 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来检查查询字符串,并以此方式设置当前页面请求的区域性。