Qual é a diferença entre as propriedades CurrentCulture e CurrentUICulture do CultureInfo no .NET?


359

No .NET, há a CultureInfoclasse no System.Globalizationespaço para nome. Possui duas propriedades semelhantes, ambas retornando valores do CultureInfotipo: CurrentCulturee CurrentUICulture.

Qual a diferença entre eles?

Qual devo usar quando e por quê?


28
Lembre-se de que a Microsoft, em sua sabedoria, não separa as culturas da interface do usuário do inglês dos EUA e do inglês (britânico) ou de outros ingleses. Não há MUI para o inglês, o que significa CurrentUICultureque sempre estará nos EUA em uma máquina no idioma inglês, independentemente do CurrentCulture, que pode ser definido para localizar as Configurações regionais.
— precisa

11
Sim. Estou no Reino Unido e acho que CurrentCultureé 'en-GB', mas CurrentUICultureé 'en-US'.
— Coronel Panic

Só encontrei este artigo explicando isso em detalhes: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
— RinoTom

Respostas:


347

CurrentCultureé a representação do .NET da localidade padrão do usuário do sistema. Isso controla a formatação padrão de número e data e similares.

CurrentUICulture refere-se ao idioma padrão da interface do usuário, uma configuração introduzida no Windows 2000. Isso se refere principalmente à parte de localização / tradução da interface do usuário do seu aplicativo.

Quaisquer que sejam as opções regionais em que o sistema está configurado, serão os valores "Atual" no seu aplicativo .NET.

Muitas vezes, eles são os mesmos. Porém, no meu sistema, eles seriam diferentes: prefiro meus números e datas no formato alemão, então CurrentCultureseria alemão, mas também prefiro todos os meus aplicativos em inglês, portanto, oCurrentUICulture inglês.

Há um belo artigo sobre o tópico: Classificando tudo: por que temos o CurrentCulture e o CurrentUICulture


5
Na verdade, essa pode ser uma boa alternativa para explicações detalhadas: forums.asp.net/post/1080435.aspx #
— Michael12345

@ Michael12345 Obrigado pela dica. Eu atualizei o link. A postagem para a qual você vincula também é decente, talvez até melhor.
— Tomalak

5
Esses são nomes terríveis, pois CurrentUICulture realmente significa CurrentLanguageCulture e CurrentCulture realmente significa CurrentDataCulture.
— Pxtl

2
@Xtxt: eu optaria por CurrentFormattingCulture ao invés de CurrentDataCulture . Ainda assim, observe que esses podem não ser tão obviamente desassociados quanto o próprio nome sugere. Por exemplo, eu argumentaria que o formato de data longa ( D) pode conter bastante "idioma": en-USretorna "sexta-feira, 6 de abril de 2018", enquanto ru-RUretorna "6 de abril de 2018 às.".
— OR Mapper

107

Este é um truque simples que eu uso para lembrar qual usar:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Se os comentários de nicodemus13 e do coronel Panic são confiáveis, parece que a segunda parte do seu truque não deve funcionar.
— OR Mapper

15

Uma boa maneira de fazer a diferença, além das boas explicações feitas por outros usuários, e um aspecto importante no desenvolvimento de aplicativos da web é o seguinte:

  • CurrentCulturerepresenta a configuração do servidor web. Por exemplo, se seu aplicativo Web ASP.NET estiver hospedado na Alemanha, o valor de CutlureInfo.CurrentCultureprovavelmente seria de-DE. Assim, a .ToString()formatação padrão para IFormattabletipos usaria as formações padrão em alemão, ou aquelas que foram configuradas no sistema operacional do servidor como padrões.

  • CurrentUICulturepode ser capturado do agente do usuário e pode representar a cultura da interface do usuário do cliente que está se conectando ao site. Por exemplo, se você carregar o website da Rússia, suas configurações locais são definidas para usar língua russa, e seu agente usuário envia suas definições de locale para o servidor (Opera e IE fazer isso automaticamente, não tenho certeza para o Chrome e Firefox), o CurrenUICulturefaria representar ru-RU. Isso fará com que todos os recursos, como seqüências de caracteres localizadas recuperadas pelo ResourceManager ou expressões de localização nos arquivos aspx / ascx do ASP.NET, estejam em russo (se houver traduções disponíveis).


13

Diferenças:

  1. CurrentCultureé para formatação de datas e moedas, CurrentUICultureacompanhando o idioma / traduções. Será usado porResourceManager para procurar recursos por cultura.
  2. O espaço para nome da CurrentCultureclasse está dentro do System.Globalizationtempo em que CurrentUICulturevem System.Threading.
  3. CurrentCultureé persistente em diferentes solicitações na sessão, enquanto CurrentUICultureprecisa ser definido com todas as solicitações.

Semelhança:

Ambos são System.Globalization.CultureInfoinstâncias.


8

Vale a pena notar que ele CurrentUICulturesuporta locais não específicos de países como 'en' (culturas neutras), enquanto CurrentCultureAPENAS suporta locais específicos de países como 'en-GB'. Definir CurrentCultureuma cultura neutra gerará umaArgumentException .

Suponho que isso ocorra porque formatos como datas e moeda estão mais fortemente vinculados ao próprio país, mas o idioma exibido geralmente é intercambiável entre os países.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.