如何根据用户的时区确定用户在 Web 上的区域性?



新手。事实上,第一个问题。

我一直在使用nodeatime(在ASP。Net MVC 3 c#)来绕过不同的时区,我对结果非常满意。但是…我想知道是否有一种方法可以根据时区获取用户的文化信息-即:显示日期/时间。

提前感谢您的帮助!

让我更清楚一点…

我能够使用jsTimeZoneDetect和NodaTime确定用户时区。它工作得很好。现在,我需要的是找出用户地区信息(日期/时间格式等),以便能够正确显示这些信息。例如:基于US的用户将看到日期为3/21/2013。

我已经尝试从请求中获取区域设置。用户语言毫无用处。IE正确返回我的区域设置(en-GB),但Firefox和Chrome总是返回en-US。我也改变了网络。配置并添加以下元素:

<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />

这就是我一直在写的代码:

var userLanguages = Request.UserLanguages;
CultureInfo ci;
if (userLanguages.Length > 0)
{
    try
    {
        ci = new CultureInfo(userLanguages[0]);
    }
    catch (CultureNotFoundException)
    {
        ci = CultureInfo.InvariantCulture;
    }
}
else
{
    ci = CultureInfo.InvariantCulture;
}
string cultureName = ci.Name /* Always returns en-US */

作为另一点,要求用户选择他们的区域设置信息对我来说不是一个选项。例如:网站上的下拉列表等

需要进一步帮助吗?提前谢谢。

更新2

根据@JonSkeet的建议,我已经改变了问题的标题和标签,以更好地适应我的问题。

更新3

刚刚发现了一些事情。语言(区域设置)的返回方式取决于浏览器,如下所示:

  • Internet Explorer返回操作系统设置或浏览器设置中的语言设置。
  • Firefox, Chrome, Safari和Opera返回浏览器设置中的语言设置。

考虑到这一点,我甚至不能考虑使用这些信息,因为没有办法保证每个用户都会更改他们的浏览器设置。我唯一能依赖的信息是来自操作系统设置的信息。

我不知道现在该做什么。

按要求回答问题,不管是否要求澄清…

在1.0中,我们没有任何可用的地理信息。在1.1中,我们将公开来自zoneinfo.tab的信息,该信息将位置与每个时区(或至少大多数时区)关联起来,包括国家。它没有提供完整的文化信息(例如,它没有区分法语加拿大人和英语加拿大人,也没有区分瑞士所说的各种语言),但它给了你一些的想法。你可以通过TzdbDateTimeZoneSource.GeoLocations获取信息。(仅适用于TZDB)

当然,1.1还没有发布——但我们希望在接下来的几周内发布,几乎可以肯定不会有任何大的API变化。

我仍然建议通常通过HTTP请求检测区域性

相关内容

  • 没有找到相关文章

最新更新