Существует ли способ сказать, предпочел ли пользователь метрику или империал, не спрашивая в C#?

Механизм PowerShell был разработан, чтобы быть легко встроенным в приложение для создания его scriptable. На самом деле PowerShell CLI является просто основанным на тексте интерфейсом к механизму.

Редактирование: См. https://devblogs.microsoft.com/powershell/making-applications-scriptable-via-powershell /

6
задан Instance Hunter 10 December 2009 в 16:50
поделиться

5 ответов

Используйте класс RegionInfo в пространстве имен System.Globalization :

bool isMetric = RegionInfo.CurrentRegion.IsMetric;

Если вам нужен конкретный регион, вы можете использовать одно из следующих :

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

// from a string
RegionInfo r = new RegionInfo("us");
20
ответ дан 8 December 2019 в 03:53
поделиться

Отчасти проблема заключается в том, что даже если вы используете их RegionInfo, не все в регионе используют одну и ту же систему. В США ученые часто используют метрики в своих исследованиях, а здесь, в Канаде, это немного смешанное, поскольку мы получаем много упаковок для пищевых продуктов из США, но мы обучаем наших детей метрическим единицам (но только с недавнего времени - мои родители

При этом вы можете сделать справедливое предположение, используя класс RegionInfo .

3
ответ дан 8 December 2019 в 03:53
поделиться

Похоже, что уже есть реализация в System.Globalization.RegionInfo ( regionInfo.IsMetric ).

Вы могли бы ] используйте класс CultureInfo , который может возвращать Culture операционной системы, в которой вы работаете - обычно в формате en-US en- GB de-DE и т. Д. Культуры чаще используются для перевода приложений с одного языка на другой в зависимости от культуры операционной системы.

Это все для определенной локализации - вы можете прочитать некоторые учебные пособия и статьи по этому поводу (например, здесь ).

2
ответ дан 8 December 2019 в 03:53
поделиться

Это свойство класса 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");
2
ответ дан 8 December 2019 в 03:53
поделиться

Для «удара в темноте» достаточно информации о RegionInfo.

Однако на практике такие места, как Великобритания, имеют исключения. Например:

  • все, что связано с трафиком, является имперской
  • температуры для погоды являются метрическими, но некоторые люди предпочитают имперские
  • измерения оборудования метрическими ... в основном

Многое зависит от поколения, в котором вы находитесь и ваше отношение к изменениям.

Итак - на практике - обеспечьте и то, и другое, сделайте предположение о разумном значении по умолчанию, но если это важно , всегда позволяйте пользователю отменять предпочтение и убедитесь, что эти изменения запоминаются.

0
ответ дан 8 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: