无法更改.aspx页面的文化

时间:2011-04-06 09:42:14

标签: c# .net asp.net resources localization

我无法改变.aspx页面的文化。

当我在顶部使用page指令指定文化时:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="VideoPlayerPrototype.Index" Culture="ur-PK" UICulture="ur-PK" %>

一切都按预期工作。

我想做的是,当用户点击链接时能够更改本地化。

链接:

<asp:ImageButton ID="lang_ur-PK" 
                            ImageUrl="~/content/image/flag-of-pakistan.png" 
                            runat="server" 
                            CssClass="language" 
                            Height="64px" 
                            Width="64px"
                            OnClick="setLanguage" />

setLanguage方法:

        protected void setLanguage(Object sender, EventArgs e)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ur-PK");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ur-PK");
            Response.Redirect(Request.Path);
        }

调用此代码只是重新加载页面而不加载正确的语言。

我有.resx文件存储在App_LocalResources和App_GlobalResources中:

Index.aspx.resx,Index.aspx.en.resx,Index.aspx.ur-PK.resx,Index.aspx.ur.resx等。

以下是必须进行本地化的控制示例:

 <asp:Label id="lblInfoWelcomeMsg" runat="server" 
                            Text="<%$ Resources:LocalizedText, Summary_Info_WelcomeMsg %>"></asp:Label>       

谢谢

4 个答案:

答案 0 :(得分:7)

您必须在代码中添加此方法:

protected override void InitializeCulture()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ur-PK");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ur-PK");
        base.InitializeCulture();
    }

如果您可以将BasePage作为一个类并在其中添加,然后BasePage可以在每个页面上继承,那会更好。

答案 1 :(得分:1)

您必须在Page_PreInit中执行此操作,因为本地化只能在该事件中进行更改。

请注意,除非您更改区域设置,否则页面声明会覆盖它,但您可以在Page_PreInit

中更改它

只在imageButton_Click()中设置一个标志,然后在Page_PreInit中根据标志值更改区域设置。

答案 2 :(得分:1)

您的Click处理程序只是更改了当前请求的线程文化 - 在您的Response.Redirect页面刷新后,很久就忘记了这一点。

您需要在某处保留新文化,然后阅读并在每个后续请求的开头设置文化(例如,在Page.InitializeCulture中)。常见的地方包括:

  • 服务器上的数据库。

  • 通过回复发送给客户的Cookie。

  • 在您重定向的网址中(例如在查询字符串中 - 例如?lang = ur-PK)

  • 会话(但会议过期时会被遗忘)

答案 3 :(得分:0)

通过执行响应重定向,您可以启动一个新线程。获取所需的文化,将其保存在会话中,然后在页面加载时将文化设置为会话中的值。