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ê?

splattne
fonte
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

Tomalak
fonte
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
foxontherock
fonte
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).

Ivaylo Slavov
fonte
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.

Matas Vaitkevicius
fonte
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.

Sebris87
fonte