asp.net无法改变当前的文化

时间:2012-03-11 23:05:29

标签: asp.net multilingual

我正在使用asp.net本地化尝试创建一个多语言网站,基本上我有两个全球资源,一个用于英语,另一个用于阿拉伯语。

我添加了一个包含两种语言的下拉列表:

  <asp:DropDownList runat="server" ID="changeLang" AutoPostBack="true" >
      <asp:ListItem Value="en">English</asp:ListItem>
      <asp:ListItem Value="ar">Arabic</asp:ListItem>
      </asp:DropDownList>

我正在使用此代码隐藏:

 protected override void InitializeCulture() //changing the languages
    {
        string lang = Request["changeLang"];

        if (lang != null && lang != "")
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
        }
    }

但语言不会改变,调试字符串lang的值总是为空。

我正在使用asp.net 4.0。

问题是什么,谢谢。

2 个答案:

答案 0 :(得分:0)

听起来有两个不同的问题。

1)您没有从代码隐藏中的下拉列表中获取值,只是null。您是否尝试过直接访问对象而不是通过Request对象。例如:
string lang = changeLang.SelectedValue

2)文化没有被设定。对于第二项,请先尝试创建特定文化,然后将其用于CurrentUICultureCurrentCulture。例如:

CultureInfo info = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = info;
Thread.CurrentThread.CurrentCulture = info;

此外,您可能正在关注此MSDN article的代码示例。您需要在下拉列表中使用特定的文化标识符(例如en-US和ar-EG)

答案 1 :(得分:-1)

我建议将页面设置为自动从用户的浏览器设置中确定文化​​:

<%@ Page UICulture="auto" Culture="auto" %>

或者整个网站,将这些条目添加到web.config文件中:

<globalization uiCulture="auto" culture="auto" /><!-- Automatically set culture from HTTP request -->
<globalization uiCulture="auto:en" culture="auto:en-US" /><!-- Optionally set a default culture -->

然后在控件上使用隐式声明绑定

<asp:Button ID="btnSubmit" runat="server" 
    meta:resourcekey="btnSubmit" />

有关详细信息和代码示例,请参阅Resources and Localization in ASP.NET 2.0。如果您希望按照示例以编程方式执行此操作,请参阅以下资源: