【问题标题】:How get current CultureInfo in wrapper class?如何在包装类中获取当前的 CultureInfo?
【发布时间】:2011-05-24 07:12:52
【问题描述】:

我有 Main.Master 页面,其中包含设置 CultureInfo 并将其存储在会话中的按钮:

protected void RU_Click(object sender, ImageClickEventArgs e)
{
    Session["MyCulture"] = CultureInfo.CreateSpecificCulture("ru-Ru");
    Server.Transfer(Request.Url.LocalPath);     
}

protected void USA_Click(object sender, ImageClickEventArgs e)
{
    Session["MyCulture"] = CultureInfo.CreateSpecificCulture("en-AU");
    Server.Transfer(Request.Url.LocalPath);  
}

我在包装类后面写了我的非页面,在这个类中我需要从会话中获取这个文化。我怎样才能得到它?

【问题讨论】:

    标签: c# asp.net culture


    【解决方案1】:

    处理文化和本地化信息时最好的办法是将其设置到它们所属的位置:在当前线程上。试试这个:

    System.Threading.Thread.CurrentThread.CurrentCulture = yourCulture;
    

    这样,您始终可以从运行您的请求的线程中获取当前文化。您还可以考虑设置 CurrentUICulture 以及一些本地化机制使用该值。

    【讨论】:

    • 当我尝试像这样设置 Cultule 时: protected void USA_Click(object sender, ImageClickEventArgs e) { Session["MyCulture"] = CultureInfo.CreateSpecificCulture("en-AU"); Server.Transfer(Request.Url.LocalPath); CultureInfo 美国 = new CultureInfo("en-AU"); System.Threading.Thread.CurrentThread.CurrentCulture = 美国; } 它不设置。
    • 您也可以尝试设置 System.Threading.Thread.CurrentThread.CurrentUiCulture (您必须在每个请求开始时设置它)。
    • 我已经尝试过了,但它没有帮助,在 Thread.CurrentThread.CurrentCulture 中只保留一种文化。
    【解决方案2】:

    如果您只想访问不从 System.Web.UI.Page 继承的类中的会话变量,则按照您当前的方法,您可以像这样简单地访问它。

    return (CultureInfo)HttpContext.Current.Session["MyCulture"];
    

    我假设您添加了一个单独的类。

    如果您有一个网络项目,您可以尝试将其集成到您的 Global.asax 中,并让您的包装类也包装 Global.asax 属性。

    【讨论】:

    • 我也不明白如何使用 Global.asax 包装属性。
    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 2012-04-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多