TOC

This article has been localized into Portuguese by the community.

Trabalhando com Culture & Regions:

A classe RegionInfo

No artigo anterior sobre a classe CultureInfo, discutimos um pouco a parte do país/região, mas podemos realmente fazer mais coisas baseadas na região com uma das outras classes no System.Globalization namespace: a classe RegionInfo . Ele conterá muitas informações úteis sobre uma região específica (geralmente um país), por exemplo, o nome e símbolo de sua moeda, se eles usam o sistema métrico ou não e assim por diante.

Obtendo uma instância RegionInfo

Para ter acesso a informações regionais, você precisa de uma instância da classe RegionInfo. Ele tem um construtor que pode ter um código ISO 3166 ou o código de idioma/país da região (por exemplo "en -NOS"). Aqui está um exemplo:

RegionInfo regionInfo = new RegionInfo("en-US");
Console.WriteLine(regionInfo.EnglishName);

Isso também significa que, se você já tiver uma referência a uma classe CultureInfo, poderá usá-la facilmente para garantir que obtenha o RegionInfo correspondente. E como aprendemos em um artigo anterior, seu aplicativo sempre tem uma instância CultureInfo de fallback que você pode referenciar:

RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine(regionInfo.EnglishName);

Com isso, vamos dar uma olhada em alguns dos recursos úteis da classe RegionInfo.

Propriedades importantes da classe RegionInfo

Nós já verificamos a propriedade EnglishName - ela simplesmente retorna o nome da região, em inglês. Mas é claro que há mais coisas boas lá - por exemplo, várias propriedades relacionadas à moeda:

RegionInfo regionInfo = new RegionInfo("sv-SE");
Console.WriteLine(regionInfo.CurrencySymbol);
Console.WriteLine(regionInfo.ISOCurrencySymbol);
Console.WriteLine(regionInfo.CurrencyEnglishName);
Console.WriteLine(regionInfo.CurrencyNativeName);

Usando CurrencySymbol , ISOCurrencySymbol , CurrencyEnglishName e/ou CurrencyNativeName , obtemos as informações de que precisamos para gerar mensagens relacionadas monetariamente . O resultado será semelhante a este (neste caso para sueco/sueco):

kr
SEK
Swedish Krona
Svensk krona

Você também pode verificar facilmente se a região em questão usa o sistema métrico, usando a propriedade IsMetric :

RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine("Is the metric system used in " + regionInfo.EnglishName + "? " + (regionInfo.IsMetric ? "Yes" : "No"));

Isso nos deixa com todas as propriedades relacionadas à identidade:

  • Nome fornecerá o código ISO 3166, que identifica o idioma e o país/região, por exemplo, "en-US" _ para inglês/Estados Unidos.
  • DisplayName fornecerá o nome completo do país/região na versão do .NET Framework localizada.
  • EnglishName fornecerá o nome completo do país/região em inglês.
  • NomeNativo fornecerá o nome completo do país/região no idioma especificado, por exemplo, "Estados Unidos" para en-US ou "Deutschland" para de-DE .
  • TwoLetterISORegionName fornecerá o código ISO 3166 de duas letras para o país/região, por exemplo, "EUA" para os Estados Unidos ou "DE" para a Alemanha.
  • ThreeLetterISORegionName fornecerá a você o código ISO 3166 de três letras para o país/região, por exemplo, "EUA" para os Estados Unidos ou "DEU" para a Alemanha.

Obviamente, essas propriedades serão úteis quando você precisar exibir informações sobre um país/região, como veremos em nosso próximo exemplo.

Obtendo uma lista de países com RegionInfo

Em um artigo anterior, mostrei como obter uma lista de todas as culturas definidas na estrutura .NET, o que basicamente nos deixa com uma lista de combinações de país/região de idioma. Podemos usar isso em combinação com a classe RegionInfo para obter uma lista de países/regiões:

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);
}
    }
}

Portanto, este exemplo é um pouco mais longo do que os outros exemplos neste artigo, mas deixe-me dividi-lo para você. Começamos obtendo uma lista de todas as culturas específicas disponíveis - como aprendemos em um artigo anterior, culturas específicas são as que definem um idioma E uma região/país. Passamos por essa lista e em cada iteração, usamos a instância CultureInfo para criar uma instância RegionInfo correspondente. Verificamos se um país com esse nome já foi adicionado à nossa lista e, se não tiver, nós o adicionamos. Quando o loop terminar, agora temos uma lista completa dos países definidos pelo .NET framework, que podemos percorrer e gerar no console, ou fazer praticamente qualquer outra coisa que possamos achar útil.

Este é um ótimo exemplo do que você pode realizar com a combinação de CultureInfo e RegionInfo, mas permita-me enfatizar que essa não é uma lista completa e precisa de países. Em vez disso, é uma lista completa de países definidos na versão do framework .NET que você está usando, basicamente significando que alguns países podem estar ausentes ou podem ter mudado de nome desde que a versão foi lançada. Portanto, se você precisar de uma lista de países 100% precisos e atualizados, provavelmente terá que criá-los e mantê-los por conta própria.

Resumo

A classe RegionInfo é basicamente uma extensão da classe CultureInfo com informações ainda mais úteis sobre um país/região específico. Ele permite que você saiba mais sobre a identidade e a moeda de uma região específica e pode ajudar você a obter uma lista de países/regiões.


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!