TOC

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 с еще более полезной информацией о конкретной стране/регионе. Это позволяет узнать больше о личности и валюте конкретного региона, и это может помочь вам получить список стран/регионов.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!