Alguém poderia me dar um pouco mais de informação sobre a diferença entre Culture
e UICulture
dentro do .NET framework? O que eles fazem e quando usar o quê?
126
Culture
afeta 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
UICulture
afeta 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 UICulture
a cultura alemã e exibir a formatação em alemão (sem qualquer impacto sobre os recursos carregados) Culture
.
CultureInfo
objeto inteiro apenas para determinar o arquivo de recurso onde astring
seria suficiente? (Por exemplo,Language
propriedade doFrameworkElement
)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-GB
aquien
representaEnglish
eGB
representaGreat Briton
en-US
aquien
representaEnglish
eUS
representaUnited States
Use
Culture
para funções dependentes da cultura, como data, hora. eUICulture
é para o carregamento correto do arquivo de recursos.fonte
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" %>
fonte
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.
fonte