无法更改.aspx页的区域性

本文关键字:区域性 aspx | 更新日期: 2023-09-27 17:49:27

我无法更改.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、索引.aspx ur.resx等

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

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

感谢

无法更改.aspx页的区域性

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

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就可以在每个页面上继承,这会更好。

您必须在Page_PreInit中执行此操作,因为只有在这种情况下才能更改本地化。

请注意,无论您在哪里更改区域设置,页面声明性都会覆盖它,但您可以更改Page_PreInit

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

您的Click处理程序只需更改当前请求的线程区域性-当页面在您的Response.Redirect.之后刷新时,这一点早已被遗忘

你需要将新的区域性保存在某个地方,然后阅读它,并在每个后续请求的开头设置区域性(例如在Page.InitializeCulture中(。保存它的常见位置包括:

  • 服务器上的数据库。

  • 随响应一起发送到客户端的cookie。

  • 在重定向到的URL中(例如在Querystring中-例如?lang=ur PK(

  • 会话(但如果会话过期,它将被遗忘(

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