TimeZoneInfo.StandardName只返回英文的值,有没有办法根据set culture获取翻译的名称?
THX。
答案 0 :(得分:3)
从注册表中提取TimeZoneInfo ...
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones
所以它的操作系统语言依赖。
更改文化将不会影响时区DisplayName。当然,您可以利用资源文件来实现所需的效果。
答案 1 :(得分:0)
您可以使用TimeZoneInfo.DisplayName
http://msdn.microsoft.com/en-us/library/system.timezoneinfo.displayname.aspx
答案 2 :(得分:0)
我认为这不可能,因为它从注册表获取信息:@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
答案 3 :(得分:0)
如何创建类似" TimeZoneInfoExtension"它将具有名为ToLocolized string的静态方法:
public static class TimeZoneInfoExtensions
{
public static string ToLocalizedString(this TimeZoneInfo timeZone)
{
switch (timeZone.Id)
{
case "Dateline Standard Time":
return i18n.DatelineStandardTime;
case "UTC-11":
return i18n.UTC11;
case "Hawaiian Standard Time":
return i18n.HawaiianStandardTime;
case "Alaskan Standard Time":
return i18n.AlaskanStandardTime;
....
default:
throw new NotImplementedException();
}
}
}
其中i18n是一个有资源的类。是的,你必须手动填写翻译。但我只是在不同的系统语言中使用这样的东西来生成翻译:
Regex rgx = new Regex("[ +-]");
foreach (var timeZone in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(" <data name=\"{0}\" xml:space=\"preserve\">", rgx.Replace(timeZone.Id, string.Empty));
Console.WriteLine(" <value>{0}</value>", timeZone.DisplayName);
Console.WriteLine(" </data>");
}
然后您可以根据您的CurrentCulture使用它,如下所示:
foreach (var timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(timeZoneInfo.ToLocalizedString());
}