我无法改变.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>
谢谢
答案 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)
通过执行响应重定向,您可以启动一个新线程。获取所需的文化,将其保存在会话中,然后在页面加载时将文化设置为会话中的值。