2008-11-19 63 views
1

早上好,ASP.NET全球化 - 显示日期

道歉为新手问题。我刚刚开始使用ASP.NET国际化设置。

背景信息:

我有一个网站,该网站显示<table> HTML对象。在那个HTML对象中,我有一个显示日期的列。我的服务器在美国,这些日期显示为MM/DD/YYYY。我的许多用户通过数据 - >导入外部数据 - >导入Web查询界面,通过Excel插入此网页。我的用户大部分在美国,所以这些日期在他们的Excel屏幕中正确显示。

现在我需要使网页为英国用户工作。因为他们正在下载日期MM/DD/YYYY,这使得他们的电子表格不可用,因为他们的区域设置被设置为DD/MM/YYYY

我的问题是:

我如何使它所以Web服务器意识到传入的请求具有en-GB文化背景?我可以设计自己的小型自定义解决方案,但我确定我不是第一个遇到此问题的程序员。亲们如何处理这件事?我正在寻找一种相对简单和快速的解决方案,但我不想仅仅放入一些蹩脚的多功能自己的逻辑,以免我会在6个月后面对恐惧。

非常感谢, -Alan。

+0

这是国际化不是i13n。有人可以改变这个标签吗? – 2008-11-19 17:00:12

回答

2

几个要点:

  • 的<全球化>元素也需要文化属性= “自动”。 uiCulture属性影响用于检索资源的语言。文化属性影响用于格式化数字和日期的文化。

  • this MSDN article所述,仅依靠浏览器设置来确定页面的UI文化不是最佳实践。用户经常使用未设置为其偏好的浏览器(例如,在网吧中)。您应该为用户提供一种方法,以明确地为页面选择语言或语言和文化(CultureInfo名称)。

+0

就是这样!谢谢。我无法让web.config工作,但是您的第一条评论一切正常。这样我就不必编写任何代码。非常感谢。 – AlanR 2008-11-19 16:57:42

2

可以让浏览器设置你的UI文化,如果自动希望,通过打开web.config中,像这样:

<configuration> 
    <system.web>  
     <globalization uiCulture="auto" /> 
     ... 

,然后通过浏览器设置的文化都被自动设置你的应用。这意味着当你有框架显示日期/时间值时,它们将根据当前线程的UI Culture进行格式化。

如果您使用货币和/或本地化文本(但您必须提供您支持的每种文化的本地化资源),这也会有所帮助。

1

您也可以接受用于覆盖文化设置的查询字符串参数。

文化初始化应该放在Page.InitializeCulture方法中。

protected override void InitializeCulture () 
{ 
    Thread.CurrentThread.CurrentCulture 
    = Thread.CurrentThread.CurrentUICulture 
    = Request.QueryString [ "culture" ] != null ? new CultureInfo (Request.QueryString [ "culture" ]) : CultureInfo.InvariantCulture; 
    //base.InitializeCulture (); 
} 

用法:http://tempuri.org/page.aspx?culture=en-GB

+0

实际上,这个网页是从一个Excel加载项调用的。我不想在VBA中检测机器的区域设置:)。 – AlanR 2008-11-19 16:55:26