netcore net istringlocalizer español asp and .net internationalization globalization culture

istringlocalizer - .NET: ¿Hay alguna diferencia entre InvariantCulture y en-US?



net core culture (6)

Teniendo en cuenta las siguientes dos culturas:

CultureInfo c1 = InvariantCulture; CultureInfo c2 = new CultureInfo("en-US");

y tuve que examinar cada pieza de información específica de ambas culturas, por ejemplo:

c1.DateTimeInfo.ShortDatePattern; c2.DateTimeInfo.ShortDatePattern; c1.DateTimeInfo.LongDatePattern; c2.DateTimeInfo.LongDatePattern; c1.NumberFormat.CurrencyDecimalDigits; c2.NumberFormat.CurrencyDecimalDigits; c1.TextInfo.IsRightToLeft; c2.TextInfo.IsRightToLeft;

¿Encontraría alguna diferencia?

En otras palabras, ¿es InvariantCulture, para todos los propósitos, idéntica a la cultura "en-US"?


Bueno, si miras lo que tu fragmento de código podría producir:

CultureInfo c1 = CultureInfo.InvariantCulture; CultureInfo c2 = new CultureInfo("en-US"); Console.WriteLine( c1.DateTimeFormat.ShortDatePattern.ToString()); Console.WriteLine( c2.DateTimeFormat.ShortDatePattern.ToString()); Console.WriteLine( c1.DateTimeFormat.LongDatePattern.ToString()); Console.WriteLine( c2.DateTimeFormat.LongDatePattern.ToString()); Console.WriteLine( c1.NumberFormat.CurrencyDecimalDigits.ToString()); Console.WriteLine( c2.NumberFormat.CurrencyDecimalDigits.ToString()); Console.WriteLine( c1.TextInfo.IsRightToLeft.ToString()); Console.WriteLine( c2.TextInfo.IsRightToLeft.ToString());

Verás algunas diferencias:

MM/dd/yyyy M/d/yyyy dddd, dd MMMM yyyy dddd, MMMM dd, yyyy 2 2 False False

Y piense, cuando EE. UU. Pierde su espina dorsal y decide comenzar a usar las fechas de estilo europeo o se traslada al sistema métrico (¡el sistema métrico es la herramienta del diablo! Mi auto lleva cuarenta varas al tonto y así es como me gusta !), el InvariantCulture puede mantenerse fresco y sin problemas como está. Así que todas esas fechas que has escondido en una base de datos en forma de texto usando InvariantCulture continuarán trabajando ...


Es muy importante tener en cuenta la intención de los datos. Si está serializando, asegúrese de usar InvariantCulture.

Consulte: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

De la documentación de microsoft:

Datos de la cultura dinámica

A excepción de la cultura invariante, los datos de la cultura son dinámicos . Esto es cierto incluso para las culturas predefinidas. ...

Precaución

Al guardar datos, su aplicación debe utilizar la cultura invariante , utilizar un formato binario o un formato independiente de la cultura específica. Los datos guardados de acuerdo con los valores actuales asociados con una cultura particular, distintos de la cultura invariante, pueden volverse ilegibles o pueden cambiar de significado si esa cultura cambia.

Acabo de encontrar esto recientemente, donde el usuario tenía la configuración de Región e Idioma configurada en inglés (Estados Unidos), pero había elegido su formato de fecha personal para dd-MMM-yy. Recibió un proyecto de un cliente con una fecha en el formato predeterminado en-EE. UU. "29/04/2010 1:45:30 PM" y el código:

customValue = DateTime.Parse (customValue.ToString (), CultureInfo.CreateSpecificCulture ("en-US"));

lanzó una excepción porque sus preferencias locales anulan el formato típico en EE. UU.


Existen algunas diferencias reales (verifique ambos valores en una ventana de Vigilancia), pero la diferencia más relevante es la intención . InvariantCulture muestra su intención de analizar algunos datos de una manera independiente de la cultura, si está relacionada con el inglés, mientras que en-US declara su intención real de analizar los datos de una manera específica de los EE. UU.


Respuesta corta si. InvariantCulture es lo que dice, no una cultura específica. Es inglés, pero no una región específica.

Puedes leer más sobre esto aquí: MSDN


Sé que tienen un CultureName y un CultureName diferentes (consulte esta lista ).

Además, los símbolos de moneda son diferentes: ¤ para InvariantCulture y $ para en-US.

De InvariantCulture :

It is used in almost any method in the Globalization namespace that requires a culture.

Lo que sugiere que en su mayor parte, son intercambiables. Sin embargo, los nombres indican la intención, así que debes pensar en eso cuando CultureInfo .


Sí.

Por ejemplo: InvariantCulture usa el símbolo internacional para la moneda: "¤" frente al signo de dólar: "$" cuando se formatea la moneda.

En su mayor parte, sin embargo, son muy similares.

Edición : Lista de diferencias entre en-US e Invariant :

en-US Invariant ===================== ================== ================== Number 123456.78 +123456.78 Currency Symbol $ ¤ Currency $123456.78 ¤123456.78 Short Date 1/11/2012 01/11/2012 Time 10:36:52 PM 22:36:52 Metric No Yes Long Date Wednesday, January 11, 2012 Wednesday, 11 January, 2012 Year Month January, 2012 2012 January