This article has been localized into Russian by the community.
Класс RegionInfo
В предыдущей статье, посвященной классу CultureInfo, мы немного обсудили его часть "страна / регион", но на самом деле мы можем сделать гораздо больше региональных вещей с одним из других классов в пространстве имен System.Globalization: классRegionInfo . Он будет содержать много полезной информации о конкретном регионе (обычно стране), например, название и символ их валюты, используют ли они метрическую систему или нет, и так далее.
Получение экземпляра RegionInfo
Чтобы получить доступ к региональной информации, необходим экземпляр класса RegionInfo. Он имеет конструктор который может принять ISO 3166 code или код региона languagecode/region-country (например, "en-US"). Вот пример:
RegionInfo regionInfo = new RegionInfo("en-US");
Console.WriteLine(regionInfo.EnglishName);
Это также означает, что если у вас уже есть ссылка на класс CultureInfo, вы можете легко использовать ее, чтобы получить соответствующий RegionInfo. Как мы узнали из предыдущей статьи, в приложении всегда есть резервный экземпляр CultureInfo, на который можно ссылаться:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine(regionInfo.EnglishName);
Теперь давайте рассмотрим некоторые полезные функции класса RegionInfo.
Важные свойства класса RegionInfo
Мы уже проверили свойство EnglishName - оно просто возвращает название региона на английском языке. Но, конечно, там есть и более хорошие вещи - например, несколько свойств, связанных с валютой:
RegionInfo regionInfo = new RegionInfo("sv-SE");
Console.WriteLine(regionInfo.CurrencySymbol);
Console.WriteLine(regionInfo.ISOCurrencySymbol);
Console.WriteLine(regionInfo.CurrencyEnglishName);
Console.WriteLine(regionInfo.CurrencyNativeName);
Используя CurrencySymbol в ISOCurrencySymbol в CurrencyEnglishName и/или CurrencyNativeName, мы получим информацию, которая нам нужна для вывода соответствующего денежной сообщения. Результат будет выглядеть следующим образом (в данном случае для Швеции):
kr
SEK
Swedish Krona
Svensk krona
Вы можете легко проверить, использует ли данный регион метрическую систему с применением свойства IsMetric:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine("Is the metric system used in " + regionInfo.EnglishName + "? " + (regionInfo.IsMetric ? "Yes" : "No"));
Это оставляет нас со всеми свойствами, связанными с идентификацией:
- Name вы получите код ISO 3166, который идентифицирует язык и страну/регион, например, "en-US"_ для английского языка / США.
- DisplayName вы получите полное название страны/региона в локализованной версии .NET framework.
- EnglishName вы получите полное название страны/региона на английском
- NativeName даст вам полное название страны/региона на данном языке, например, "Соединенные Штаты" для en-USили "Германия" для de-DE.
- TwoLetterISORegionName даст вам двухбуквенный код ISO 3166 для страны/региона, например, "СШ" для Соединенных Штатов или "ДЕ" для Германии.
- ThreeLetterISORegionName даст вам трехбуквенный код ISO 3166 для страны/региона, например, "США" для Соединенных Штатов или "DEU" для Германии.
Очевидно, эти свойства пригодятся, когда вам нужно отобразить информацию о стране/регионе, как мы увидим в следующем примере.
Получение списка стран с помощью RegionInfo
В предыдущей статье я показал, как получить список всех определенных языков и региональных параметров в .NET framework, в результате чего мы получим список сочетаний язык-страна/регион. Мы можем использовать это в сочетании с классом RegionInfo для получения списка стран / регионов:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace RegionInfoCountries
{
class Program
{
static void Main(string[] args)
{
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
List<RegionInfo> countries = new List<RegionInfo>();
foreach (CultureInfo ci in cultures)
{
RegionInfo regionInfo = new RegionInfo(ci.Name);
if (countries.Count(x => x.EnglishName == regionInfo.EnglishName) <= 0)
countries.Add(regionInfo);
}
foreach (RegionInfo regionInfo in countries.OrderBy(x => x.EnglishName))
Console.WriteLine(regionInfo.EnglishName);
}
}
}
Итак, этот пример немного длиннее, чем другие примеры в этой статье, но позвольте мне разбить его для вас. Мы начинаем с получения списка всех доступных, конкретных культур-как мы узнали в предыдущей статье, конкретные культуры-это те, кто определяет язык и регион/страну. Мы циклически просматриваем этот список и на каждой итерации используем экземпляр CultureInfo для создания соответствующего экземпляра RegionInfo. Мы проверяем, была ли страна с таким именем уже добавлена в наш список, и если нет, мы добавляем ее. Когда цикл завершен, у нас теперь есть полный список стран, определенных .NET framework, который мы можем циклически просматривать и выводить на консоль, или делать почти все, что мы могли бы найти полезным.
Это отличный пример того, чего можно достичь с помощью сочетания CultureInfo и RegionInfo, но позвольте мне подчеркнуть, что это не полный и точный список стран. Вместо этого это полный список стран, определенных в используемой версии .NET framework, что в основном означает, что некоторые страны могут отсутствовать или, возможно, изменили свое имя с момента выпуска версии. Таким образом, если вам нужен список стран, который на 100% точен и актуален, вам, вероятно, придется создавать и поддерживать его самостоятельно.
Резюме
Класс RegionInfo в основном является расширением класса CultureInfo с еще более полезной информацией о конкретной стране/регионе. Это позволяет узнать больше о личности и валюте конкретного региона, и это может помочь вам получить список стран/регионов.