TimeZoneInfo - 基于文化的翻译标准名称

时间:2011-04-08 17:40:36

标签: c# .net localization globalization

TimeZoneInfo.StandardName只返回英文的值,有没有办法根据set culture获取翻译的名称?

THX。

4 个答案:

答案 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());
}