Qual é a diferença entre Culture e UICulture?

126

Alguém poderia me dar um pouco mais de informação sobre a diferença entre Culturee UICulturedentro do .NET framework? O que eles fazem e quando usar o quê?

Niklas
fonte

Respostas:

148

Cultureafeta como os dados dependentes da cultura (datas, moedas, números etc.) são apresentados. Aqui estão alguns exemplos:

var date = new DateTime(2000, 1, 2);
var number = 12345.6789;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68

A cultura também afeta a análise da entrada do usuário da mesma maneira:

const string numberString = "12.345,68";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false

Cuidado com os casos em que a análise é bem-sucedida, mas o resultado não é o que você esperaria.

const string numberString = "12.345";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point

UICultureafeta qual arquivo de recurso (Recursos. lang .resx) será carregado pelo seu aplicativo.

Portanto, para carregar recursos em alemão (texto provavelmente localizado), você deve definir UICulturea cultura alemã e exibir a formatação em alemão (sem qualquer impacto sobre os recursos carregados) Culture.

dee-see
fonte
39
O que significa que você pode ter rótulos em inglês e interface do usuário (UICulture em inglês) e moeda norueguesa, data, hora e formatação de números (cultura norueguesa.) Nos termos do Windows, pense nisso como um pacote de idiomas instalado para os menus e caixas de diálogo (UICulture), mas executando com configurações regionais norueguesas (Culture.)
Lasse V. Karlsen
2
Para enfatizar as implicações disso: Mesmo que você não suporte o idioma de um usuário, suporte a cultura dele para formatação! Vi erros nos quais um aplicativo volta a "en-US", tanto para cultura quanto para idioma, quando só precisa fazer o fallback para o idioma.
Página Inicial>
1
Qual é o sentido de usar um CultureInfoobjeto inteiro apenas para determinar o arquivo de recurso onde a stringseria suficiente? (Por exemplo, Languagepropriedade do FrameworkElement)
Wouter
2

Culture and UICulture

Os valores são pares de cadeias de caracteres de duas letras, o primeiro é para definir o idioma e o segundo para definir a região. Exemplo:

en-GBaqui enrepresenta Englishe GBrepresentaGreat Briton

en-USaqui enrepresenta Englishe USrepresentaUnited States

Use Culturepara funções dependentes da cultura, como data, hora. e UICultureé para o carregamento correto do arquivo de recursos.

Arma X
fonte
0

Apenas uma pequena questão a considerar, além da explicação impressionante do @ Vache: Você pode definir UICulture e Culture em (nível da página e nível do aplicativo).

Para defini-los no nível do aplicativo, basta adicionar a sessão de globalização no web.config

por exemplo <globalization uiCulture="es" culture="es-MX" />

E para defini-los no nível da página, o que é bom adicionar em uma página específica (individual), defina os atributos Culture e UICulture na diretiva @ page

por exemplo <%@ Page UICulture="es" Culture="es-MX" %>

Hooman
fonte
-4

A propriedade UICulture pode mudar para cada navegador da Web, enquanto a Cultura permanece constante.

O valor da cultura pode ser definido apenas para culturas específicas, como en-US ou en-GB. Isso evita o requisito de identificar o símbolo de moeda correto a ser usado para en, onde en-US e en-GB têm símbolos de moeda diferentes. Os usuários podem definir a cultura da interface do usuário e a cultura em seus navegadores.

Mohammed Nazer
fonte