2010-05-27 139 views
3

我想获得时区列表,以便我可以填充下拉列表。在.NET 3.5中,我们有TimeZoneInfo命名空间,这里是代码:GetSystemTimeZones全球化()

ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones(); 
foreach (TimeZoneInfo timeZone in timeZones) 
    string name = timeZone.DisplayName 

但是,“DisplayName”是英文的。我如何传递cultureInfo以便它可以返回其他语言?我尝试设置Thread.CurrentCulture和CurrentUICulture,它没有工作。我错过了什么吗?

回答

3

这取决于操作系统。直接从MSDN blog

在低级别的平台,如 Windows XP和Windows Server 2003中,仅 显示,标准,和DLT键 存在。 Display,Std和Dlt键 的值仅在 系统的 默认语言中进行了本地化。由于Windows时区注册表体系结构,CurrentUICulture设置不会影响这些TimeZoneInfo属性的值。

看来,在赢得XP和服务器2003年,你是运气不好。

在vista,win7和server 2008上,您应该可以通过更改区域设置来获得其他语言。多语言用户界面(MUI)的支持似乎是关键:

启用MUI的操作系统,如 Windows Vista中包含MUI_Display, MUI_Std和MUI_Dlt键,这是 由操作系统 系统的区域间接控制设置

编辑:我做了一个快速测试win7,设置CurrentUICulture不会改变这些键的输出语言。看起来改变区域设置是唯一的方法。这确实需要您关闭会话才能生效。