改变制度文化

时间:2010-08-16 07:10:08

标签: .net asp.net resources

如何更改影响所有页面的系统文化(以编程方式)? 我看到this线程。

但我希望使用此代码在我的登录页面中更改文化。

protected void btnChangeLanguage(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es");
}

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fa-IR")

我的文化由顶级代码改变。 我查了一下这段代码。

MsgBox("Current Culture is " + CultureInfo.CurrentCulture.EnglishName)

但我们的文字和标签仍然是英文。 (我有英语资源和波斯语资源。)

2 个答案:

答案 0 :(得分:4)

有关所有文化的列表,请参阅the documentation for the CultureInfo class

关于您的其他问题,您可以使用语言代码作为其值保存Cookie,并在覆盖InitializeCulture中阅读,如下所示:

用户点击按钮后,立即使用语言代码设置Cookie:

protected void btnChangeLanguage_Click(object sender, EventArgs e)
{
    Response.Cookies.Add(new HttpCookie("language") { 
        Value="es",
        Expires=DateTime.Now.AddDays(30) /* A sample timestamp */
    });
}

小方注释:我已将_Click附加到处理程序的名称,因为它可能会导致与定义中按钮名称冲突)

在页面生命周期的早期阶段调用InitializeCulture方法后立即读取cookie:

protected override void InitializeCulture()
{
    var cookie = Request.Cookies["language"];
    if (cookie != null)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cookie.Value);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
    }
    base.InitializeCulture();
}

答案 1 :(得分:2)

将以下行添加到您的web.config

<system.web>部分
<globalization culture="es" uiCulture="es"/>