【问题标题】:How to prevent Thread.CurrentThread.CurrentCulture to switch to the default browser value after setting it manually?手动设置后如何防止Thread.CurrentThread.CurrentCulture切换到默认浏览器值?
【发布时间】:2010-08-26 08:16:46
【问题描述】:

在我当前的应用程序中,我想使用全球资源实现 ASP.Net 本地化。我的问题是,在更改 CurrentThread.CurrentUICulture 和 CurrentThread.CurrentCulture 并更改到另一个页面后,这些值会被浏览器默认值覆盖。

我有一个可以在不同语言之间进行选择的 DropDownList。在 ItemChanged 事件中,我将culturename 存储在会话中,重定向到我的默认页面并使用此代码

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

切换到另一个内容页面后,它不会覆盖 InitializeCulture 我回到默认浏览器语言。我怎样才能让它持久化?

我有什么选择?我想到了以下几点:

  • 在每个 *.aspx 页面上我都会实现 InitializeCulture
  • 我创建了一个派生自 System.Web.UI.Page 并覆盖 InitializeCulture 事件处理程序的新类。我使用的每个 *.aspx 页面都源自它。

难道没有更“内置”的方式吗? ASP.net 提供了如此好的本地化支持,所以我想一定有一种更简单/更有效的方法来实现我的目标。有哪一个?

【问题讨论】:

    标签: c# asp.net localization culture


    【解决方案1】:

    您需要按照您的描述在基本页面的 InitializeCulture 方法中重新设置文化。这应该在每次请求时完成。 CurrentCulture 值是根据浏览器发送的 Accept-Languages 标头设置的,并且对于每个新请求始终以这种方式设置。没有其他选择,只能在之后为每个新请求手动设置,Page.InitializeCulture 是这样做的好地方。

    【讨论】:

    • 我决定创建一个派生自 System.Web.UI.Page 的新类并覆盖其中的 InitializeCulture。每个内容页都派生自该类。
    • 始终使用基本页面是一个好习惯。然后,您可以覆盖像这样的基本方法,而无需更改每个类文件来更改它继承的内容。
    【解决方案2】:

    查看Asp.Net modules,或在 global.asax 中挂钩events

    使用所有页面都来自的基类是另一个不错的选择,但在模块之间的项目之间重用基类更难。

    【讨论】:

    • 我假设您的意思是 global.asax。我应该挂钩哪个事件? Session_Start 或 Application_Start 不会为此做这项工作,因为它们不是每个请求都执行
    • @citronas,对不起,自从我这样做以来已经有很多时间了,据我记得我使用了 global.asax 中的每个请求事件之一(它可能是一个标准事件模块) - 我无法访问系统的源代码,因为它是为老雇主服务的。
    • 无论如何我都会给你 +1 建议一个 HTTP 模块。
    【解决方案3】:

    您可以将文化放在web.configsystem.web 部分中:

    <globalization culture="de-DE"/>
    

    【讨论】:

    • 我想让用户能够在应用程序运行时更改文化。在 web.config 中手动设置只能帮助我设置所需的默认值,但不能解决问题
    • @citronas:我明白了......好吧,当您使用内容页面时,母版页中的 Page_Init 事件似乎是设置文化的好地方。
    • 这对我不起作用。我一直在恢复英语。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2018-02-21
    • 2020-11-08
    • 2011-11-18
    • 2014-05-30
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多