gpt4 book ai didi

asp.net - 使用母版页在 ASP.NET 应用程序上切换语言

转载 作者:行者123 更新时间:2023-12-04 22:24:31 26 4
gpt4 key购买 nike

我正在使用 Visual Studio 2008 和 ASP.NET 来构建一个 Web 应用程序。我的大多数网页都基于一个母版页。该母版页包含三个按钮链接,用作语言切换; Click事件处理程序如下所示:

protected void lbuLangEN_Click(object sender, EventArgs e)
{
this.SwitchLanguage(string.Empty);
}

protected void lbuLangES_Click(object sender, EventArgs e)
{
this.SwitchLanguage("es");
}

然后我有我的私有(private)方法 SwitchLanguage :
private void SwitchLanguage(string culture)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
}

据我了解,这应该足以使基于我的母版页的页面表现出本地化行为,即从适当的本地 resx 获取它们的资源根据文化归档。但是,它不起作用。它们总是以西类牙语显示,这是我浏览器的默认语言。我在 SwitchLanguage 的入口和导出点设置了一些跟踪消息,并且显然当前线程没有改变其文化信息:每次 SwitchLanguage被调用时,当前线程的文化是“es-ES”,不管我的代码刚刚设置了什么。

我的代码或我采用的方法有什么问题吗?谢谢。

最佳答案

您可以使用 OnAcquireRequestStateGlobal.asax改变文化。它在 session 加载后立即调用,但在任何母版页事件之前。

因此,在按钮事件处理程序中,您将 session 变量设置为所需的当前文化。然后你重定向到当前页面。 Global.asax然后事件可以在加载母版页之前选择新语言:

protected void OnAcquireRequestState(object sender, EventArgs e)
{
string cultureName = "en-GB";
if (HttpContext.Current.Session != null &&
HttpContext.Current.Session["CultureName"] is string)
cultureName = HttpContext.Current.Session["CultureName"];

if (Thread.CurrentThread.CurrentUICulture.Name == cultureName)
return;

Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture;
}

关于asp.net - 使用母版页在 ASP.NET 应用程序上切换语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com