4

我创建了两个 .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 而不是从 WebResources.fr-FR.resx 收到 ExceptionMessages_SignupWithCard 消息。

有人可以帮忙吗?

谢谢。

4

4 回答 4

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);
于 2009-09-22T03:48:45.267 回答
1

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

由于它是一个字符串属性,它似乎不会很好。但是,有很多代码不仅会改变线程文化,还会改变资源管理器。

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

于 2009-09-23T08:46:54.060 回答
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>
于 2009-10-27T09:27:22.480 回答
0

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

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

于 2011-10-03T04:24:08.103 回答