ASP.NET全球化 - 显示日期

时间:2008-11-19 15:07:03

标签: c# asp.net internationalization globalization

早上好,

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

背景资料:

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

现在我需要让网页为英国用户服务。因此,他们将日期下载为MM/DD/YYYY,这使得他们的电子表格无法使用,因为他们的区域设置已设置为DD/MM/YYYY

我的问题是:

如何让Web服务器意识到传入的请求具有en-GB文化设置?我可以设计自己的小定制解决方法,但我确信我不是第一个遇到此问题的程序员。专业人士如何处理这个问题?我正在寻找一种相对简单快速的解决方案,但我不想只是把我自己逻辑上的一些蹩脚的错误用来表示我将在6个月后害怕。

提前多多感谢, -Alan。

3 个答案:

答案 0 :(得分:2)

如果您愿意,可以允许浏览器自动设置您的UI文化,方法是打开web.config,如下所示:

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

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

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

答案 1 :(得分:2)

有几点:

  • &lt; globalization&gt; element还需要属性culture =“auto”。 uiCulture属性会影响用于检索资源的语言。 culture属性会影响用于格式化数字日期的文化。

  • this MSDN article所述,完全依赖浏览器设置来确定页面的UI文化并非最佳做法。用户经常使用未设置为其首选项的浏览器(例如,在网吧中)。您应该为用户提供一种方法,以明确选择页面的语言或语言和文化(CultureInfo名称)。

答案 2 :(得分: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