代码之家  ›  专栏  ›  技术社区  ›  citronas

如何预防线程.CurrentThread.CurrentCulture手动设置后切换到默认浏览器值?

  •  1
  • citronas  · 技术社区  · 14 年前

    在我当前的应用程序中,我想实现ASP.Net全球资源本地化。我有个问题,那就是CurrentThread.CurrentUI区域性以及当前线程。当前区域性并切换到另一页,这些值将被浏览器默认值覆盖。

    我有一个下拉列表,可以在不同的语言之间进行选择。在ItemChanged事件中,我将culturename存储在会话中,重定向到我的defaultpage并使用以下代码

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

    切换到另一个contentpage后,这不会覆盖InitializeCulture,我将返回默认浏览器语言。我怎样才能让它持久?

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

    • 我创建了一个从系统.Web.UI.Page并重写InitializeCulture Eventhandler。我使用的每个*.aspx页都是从它派生的。

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

    3 回复  |  直到 14 年前
        1
  •  2
  •   Chris    14 年前

    如前所述,您需要在基页的InitializeCulture方法中重新设置区域性。应在每次请求时这样做。CurrentCulture值是基于浏览器发送的Accept Languages标头设置的,并且对于每个新请求都将始终以这种方式设置。除了为每个新请求手动设置之外,别无选择,而且页码:InitializeCulture是个好地方。

        2
  •  1
  •   Ian Ringrose    14 年前

    看一看 Asp.Net modules ,或钩住 events

    使用包含其中所有页的基类是另一个不错的选择,但在包含模块的项目之间重用基类比较困难。

        3
  •  0
  •   Guffa    14 年前

    你可以把文化融入你的生活 web.config ,在 system.web 章节:

    <globalization culture="de-DE"/>