.resx本地化不能与ASP.Net一起使用 - C#

时间:2009-09-22 03:40:51

标签: c# asp.net localization resx

我创建了两个.resx文件 - WebResources.resx和WebResources.fr-FR.resx。

两者都包含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的消息。

有人可以帮忙吗?

感谢。

4 个答案:

答案 0 :(得分:8)

ASP.Net(具体而言,ResourceManager)使用CurrentUICulture来检索资源。

尝试设置Thread的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 :(得分:1)

尝试直接设置Page.Culture和Page.UICulture而不是Thread Culture。

因为它是一个字符串属性,所以看起来不是很好。但是,有很多代码不仅要改变Threads Cultures,还要改变ResourceManagers。

这似乎是标准方法,而不是分配Thread的文化。

答案 2 :(得分: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>

答案 3 :(得分:0)

有两种方法可以设置asp.net网页的UICulture。

选项#1是Web浏览器可以通过在Web浏览器中设置当前语言来调整UI Culture(自动)。在FireFox中,您可以转到“选项”中的“内容”选项卡,然后单击“语言”,然后添加法语并将其移至列表顶部。 IE类似,它在“选项”页面中有一个“语言”按钮,您可以添加法语并将其移动到订单的顶部。为了使您的网页支持这种自动调整方式,您必须在网页编译指示中设置'UICulture = auto',如下所示: &lt;%@ Page Language =“C#”AutoEventWireup =“true” UICulture =“auto” ...... ......%&gt; 如果您使用此方法,它将显示您不理解的任何Web浏览器语言的默认语言。您只需定义一个文化中立的资源来涵盖语言的所有版本,或者您可以定义特定的语言(fr-CA,es-mx等),它将回退到中性语言文件(fr-fr)如果没有定义特定语言。 MSDN有更多关于汽车文化的信息以及如何向IE添加更多Web浏览器语言: 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来检查查询字符串,并以这种方式为当前页面请求设置文化。