C# ASP.NET全球化--显示日期

C# ASP.NET全球化--显示日期,c#,asp.net,internationalization,globalization,C#,Asp.net,Internationalization,Globalization,早上好 为这个新手问题道歉。我刚刚开始使用ASP.NET国际化设置 背景资料: 我有一个显示HTML对象的网站。在那个HTML对象中,我有一列显示日期。我的服务器在美国,这些日期显示为MM/DD/YYYY。我的许多用户通过Excel,通过数据-->导入外部数据-->导入Web查询界面,插入此网页。我的用户大部分在美国,因此这些日期会正确地显示在他们的Excel屏幕上 现在,我需要使英国用户的网页工作。目前,他们下载的日期为MM/DD/YYYY,这使得他们的电子表格无法使用,因为他们的区域设置设置

早上好

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

背景资料:

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

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

我的问题是:

如何使web服务器意识到传入请求具有
en GB
区域性设置?我可以设计自己的小定制解决方案,但我肯定我不是第一个遇到这种情况的程序员。职业选手是如何处理的?我正在寻找一个相对简单、快速的解决方案,但我不想把我自己的逻辑中的一些蹩脚的错误放在一起,这是我6个月后会害怕的

提前多谢了,
-Alan。

如果愿意,您可以打开web.config,允许浏览器自动设置UI区域性,如下所示:

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

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


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

如果您愿意,您可以打开web.config,允许浏览器自动设置UI区域性,如下所示:

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

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

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

以下几点:

  • 元素还需要属性culture=“auto”。uiCulture属性影响用于检索资源的语言。“区域性”属性影响用于格式化数字和日期的区域性

  • 如中所述,完全依赖浏览器设置来确定页面的UI区域性不是最佳做法。用户经常使用未设置为其首选项的浏览器(例如,在网吧中)。您应该提供一种方法,让用户为页面显式选择语言或语言和区域性(CultureInfo名称)

    • 有几点:

      • 元素还需要属性culture=“auto”。uiCulture属性影响用于检索资源的语言。“区域性”属性影响用于格式化数字和日期的区域性

      • 如中所述,完全依赖浏览器设置来确定页面的UI区域性不是最佳做法。用户经常使用未设置为其首选项的浏览器(例如,在网吧中)。您应该提供一种方法,让用户为页面显式选择语言或语言和区域性(CultureInfo名称)


      您还可以接受一个查询字符串参数来覆盖区域性设置

      区域性初始化应在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 ( );
      }
      

      用法:

      您还可以接受用于覆盖区域性设置的查询字符串参数

      区域性初始化应在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 ( );
      }
      

      用法:

      实际上,此网页是从Excel加载项调用的。我不想在VBA:)之外检测机器的区域设置。不过,我应该在哪里初始化区域性还是很好的。实际上,这个网页是从Excel加载项调用的。我不想在VBA中检测机器的区域设置。不过,我应该在哪里初始化区域性还是很好的。就是这样!谢谢我无法让web.config正常工作,但通过您的第一条评论,一切都正常了。这样我就不必写任何代码了。非常非常感谢,就这样!谢谢我无法让web.config正常工作,但通过您的第一条评论,一切都正常了。这样我就不必写任何代码了。非常非常感谢。这是i18n,不是i13n。有人能换一下标签吗?是i18n不是i13n。谁能换一下标签吗?