新手。事实上,第一个问题。
我一直在使用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请求检测区域性