【问题标题】:TimeZoneInfo -- translated standard name based on cultureTimeZoneInfo——基于文化的标准翻译名称
【发布时间】:2011-04-08 17:40:35
【问题描述】:

TimeZoneInfo.StandardName 仅返回英文值,有没有办法根据设置的文化获取翻译后的名称?

谢谢。

【问题讨论】:

  • 简短的回答是:不可能。它在本地化的 Windows 上本地化。时期。正如彼得建议的那样,看看 DisplayName 看看这是否适合您。

标签: c# .net localization globalization


【解决方案1】:

TimeZoneInfo 已从注册表中提取...

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones

所以它的操作系统语言依赖。

更改区域性不会对时区 DisplayName 产生影响。当然,您可以利用资源文件来实现所需的效果。

【讨论】:

    【解决方案2】:

    如何创建像“TimeZoneInfoExtension”这样的类,它的静态方法命名为ToLocalizedString

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

    【讨论】:

      【解决方案3】:

      我认为不可能,因为它是从注册表中获取信息的:@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"

      【讨论】:

        【解决方案4】:

        您可以使用TimeZoneInfo.DisplayName获取本地化名称

        http://msdn.microsoft.com/en-us/library/system.timezoneinfo.displayname.aspx

        【讨论】:

        • 这是错误的,因为对于英语文化,我得到“布拉格”,这没问题,但对于捷克文化,我得到相同的“布拉格”,但对于捷克本地化,它必须是“布拉格”。
        • 此链接指出:“备注 - 显示名称已根据随 Windows 操作系统安装的区域性进行本地化。”
        猜你喜欢
        • 1970-01-01
        • 2013-02-22
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多