Почему не все страны представлены в CultureInfo.GetCultures()?

Я использую этот стандартный код для заполнения списка стран:

static void Main(string[] args)
{
    List cultureList = new List();

    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);

    foreach (CultureInfo culture in cultures)
    {
        try
        {
            RegionInfo region = new RegionInfo(culture.LCID);

            if (!(cultureList.Contains(region.EnglishName)))
            {
                cultureList.Add(region.EnglishName);
                Console.WriteLine(region.EnglishName);
            }
        }
        catch (ArgumentException ex) 
        {
            // just ignore this
            continue;
        }
    }
}

Я видел, что некоторые страны пропущены. Просто задавался вопросом, в чем причина такой ситуации?

Ответы

Ответ 1

Ответ: По дизайну

CultureInfo.GetCultures не, разработанный как полный и окончательный список всех культур в мире. Он предназначен только для того, чтобы получить культуры, которые можно найти на компьютере.

Документация CultureInfo говорит:

Помните, что имена и идентификаторы культуры представляют только подмножество культур, которое можно найти на конкретном компьютере. Windows версии или пакеты обновления могут изменять доступные культуры. Приложения добавляют пользовательские культуры, используя CultureAndRegionInfoBuilder класс. Пользователи добавляют свои собственные культуры с помощью Microsoft Locale Инструмент Builder. Microsoft Locale Builder написан в управляемом коде используя класс CultureAndRegionInfoBuilder.


Примечания

Ссылки на MSDN, которые могут быть полезны:

И, кстати, вы можете сократить свой код с помощью простой команды LINQ:

var regionInfos = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
  .Select(c => new RegionInfo(c.LCID))
  .Distinct()
  .ToList();

Ответ 2

Вы не получаете все культуры:

CultureTypes.AllCultures & ~CultureTypes.NeutralCultures

Ответ 3

Я бы использовал CultureTypes.SpecificCultures, но он не ответил на ваш вопрос.

Почему существует только подмножество стран мира? Ну, их так много. Кто-то должен будет их поддерживать, и это стоит денег. Я думаю, что Microsoft решила поддержать только самые "популярные".

BTW. Вы можете создать свою собственную CultureInfo. Кроме того, я не пробовал, но вы можете создать экземпляр RegionInfo, передав его код ISO в конструкторе. Я не уверен, что произойдет, если не будет сопоставления с CultureInfo.