【问题标题】:Is there a way to tell if the user would prefer metric or imperial without asking in C#?有没有办法在不询问 C# 的情况下判断用户是否更喜欢公制或英制?
【发布时间】:2009-12-10 16:50:58
【问题描述】:

我现在正在做:

bool UseMetricByDefault() {
    return TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours >= 0;
}

这适用于区分美国与欧洲和亚洲,但它忽略了南美洲。

有没有更好的办法?

【问题讨论】:

  • 如果我在伦敦的一家网吧,我也会无视我。我将非常感谢您提供覆盖猜测的选项。
  • 当然会有覆盖。因此函数名称中的“ByDefault”。
  • 嗯,在控制面板下的区域和语言选项中有一个“测量系统”设置(在自定义按钮后面)。我想知道在 .NET 中映射到什么。
  • 不应该每个人都改用公制吗? O:-)) 这有点像......嗯......标准:-)

标签: c# .net localization internationalization globalization


【解决方案1】:

在System.Globalization 命名空间中使用RegionInfo 类:

bool isMetric = RegionInfo.CurrentRegion.IsMetric;

如果您想要特定区域,可以使用以下方法之一:

// from a CultureInfo
CultureInfo culture = ...;
RegionInfo r = new RegionInfo(culture.Name);

// from a string
RegionInfo r = new RegionInfo("us");

【讨论】:

    【解决方案2】:

    部分问题在于,即使您使用他们的 RegionInfo,也不是区域中的每个人都使用相同的系统。在美国,科学家们经常在他们的研究中使用公制,而在加拿大,它有点混合,因为我们从美国得到了很多食品包装,但我们用公制教我们的孩子(但直到最近 - 我的父母仍然认为是英制)。

    话虽如此,您可以使用RegionInfo 类进行合理猜测。

    【讨论】:

      【解决方案3】:

      看起来System.Globalization.RegionInfo (regionInfo.IsMetric) 中已经有一个实现。

      您可以使用CultureInfo class,它可以返回您正在运行的操作系统的Culture——通常格式为en-USen-GBde-DE等。 文化更常用于将应用程序从一种语言翻译成另一种语言,具体取决于操作系统的文化。

      这都是针对特定本地化的——您可能想阅读一些关于它的教程和文章(即here)。

      【讨论】:

      • 你不是说 RegionInfo 类吗? CultureInfo 得到这个与语言相关的信息 - RegionInfo 有语言、度量和货币。
      • 是的,是的。反正我已经把CultureInfo 的信息留在那里了,看来我可以休息半小时左右......
      【解决方案4】:

      这是RegionInfo 类的属性:

      // en-US, en-GB, de-DE etc.
      string cultureName = CultureInfo.CurrentCulture.Name;
      RegionInfo regionInfo = new RegionInfo(cultureName);
      Console.WriteLine("You prefer to see {0}", regionInfo.IsMetric ? "metric" : "imperial");
      

      【讨论】:

        【解决方案5】:

        对于“在黑暗中刺伤”,RegionInfo 信息就足够了。

        但在实践中,像英国这样的地方也有例外。例如:

        • 任何与流量相关的东西都是英制的
        • 天气温度是公制的,但有些人更喜欢英制
        • 设备的测量值是公制的......主要是

        很大程度上取决于你所处的时代以及你改变的态度。

        所以 - 在实践中 - 提供两者,猜测一个合理的默认值,但如果它很重要 始终允许用户覆盖首选项,并确保记住这些更改。

        【讨论】:

          猜你喜欢
          • 2023-01-24
          • 2011-05-18
          • 2013-07-15
          • 2012-02-14
          • 1970-01-01
          • 1970-01-01
          • 2015-07-31
          • 2012-04-07
          相关资源
          最近更新 更多