TOC

This article is currently in the process of being translated into Spanish (~99% done).

Working with Culture & Regions:

Application Culture & UICulture

Como comentamos en el artículo anterior, tratar con la cultura es muy importante, especialmente cuando se está trabajando con fechas y números. Por ello, tu aplicación siempre deberá tener una instancia de la clase CultureInfo definida como "CurrentCulture" - una instancia para todas las situaciones donde no se ha especificado cual cultura se usará, p.ej. el formato de un número. A menos que se cambie dicha propiedad, la cual existe en la clase CultureInfo, se asignará la misma cultura que utilice tu sistema operativo. Esta es una forma simple para revisarlo:

Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

En este artículo, usaremos la clase CultureInfo todo el tiempo, así que no olvide incluirla con la declaración "using", como se muestra en la parte de arriba del ejemplo.

El ejemplo mostrará la cultura usada por su aplicación, por ejemplo "en-US" para una computadora corriendo con el lenguaje Inglés en los Estados Unidos. Si usted vive en Alemania y su computadora usa el lenguaje Aleman, el resultado será por el contrario "de-DE". En otras palabras, las dos primeras letras especificas el lenguaje, mientras las dos últimas letras especifican el país o región.

Sin embargo, también podría ser que quisiera más control de cual cultura es usada por su aplicación. Por ejemplo, si su aplicación usa el lenguaje Inglés en todas partes, ¿Hace sentido desplegar números en un formato Aleman o Sueco solamente porque la computadora de su usuario lo especifica? Quizá si, pero si no, puede muy fácilmente especificar una nueva cultura por omisión/retroceso, usando la propiedad CurrentCulture de nuevo:

CultureInfo.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

float largeNumber = 12345.67f;
Console.WriteLine("Number format (Current culture): " + largeNumber.ToString());

CultureInfo germanCulture = new CultureInfo("de-DE");
Console.WriteLine("Number format (German): " + largeNumber.ToString(germanCulture));

Básicamente vamos y anulamos la propiedad CurrentCulture al asignarle una cultura en-US. Luego la desplegamos, junto con un número de punto flotante largo. Verá que el resultado es un número formatedo a la manera del Inglés. En el último par de líneas, ilustramos como puede, por supuesto, anular la cultura usada por omisión al pasar otra instancia de CultureInfo al método ToString() - en este caso el número será mostrado también con un formato Alemán. La salida resultante de este ejemplo debe mostrar algo como esto:

Current culture: en-US
Number format (Current culture): 12345.67
Number format (German): 12345,67

CurrentCulture vs. CurrentUICulture

Puede notar que CultureInfo también tiene una propiedad llamada CurrentUICulture. Esta propiedad es solamente relevante si está usando archivos de recursos para traducir una interface de usuario - en ese case, su aplicación conocerá cuales versiones de los archivos de recursos deben ser cargados, basado en la propiedad CurrentUICulture. Para todos los otros propósitos, incluyendo el formateo de números, fechas, etc, usted debe usar la propiedad CurrentCulture.

CurrentCulture y Threads

Realmente no hemos hablado aún de los hilos de ejecución [threads], pero son básicamente un concepto el cual le permitira a su aplicación trabajar varias cosas al mismo tiempo. Cuendo una aplicación .NET es iniciada, un solo hilo de ejecución [thread] es creado y solamente este hilo será usado a menos que usted específicamente cree uno nuevo, usando una de las muchas estrategias multi-hilos del ambiente. Menciono esto aquí por que también es muy relevante cuando se trata de la cultura por omisión/retroceso de su aplicación. De hecho, CultureInfo.CurrentCulture es básicamente un atajo a la propiedad Thread.CurrentThread.CurrentCulture, lo cual significa que cuando usted define la CurrentCulture, es solamente válida para el hilo actual.

Antes de la versión 4.5 del ambiente .NET, usted tendría que especificar manualmente la cultura de cada nuevo hilo de ejecución que usted creaba. Sin embargo, en .NET 4.5, la propiead CultureInfo.DefaultThreadCurrentCulture fue introducida. Cuando la asigna, cada nuevo hilo de ejecución creado usará esta cultura también, y es tán fácil como usar la propiedad CurrentCulture:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");

¿Pero que hay acerca del hilo de ejecución ya existente? Bueno realmente, si usted no tiene definida ya otra cultura para la propiedad CurrentCulture, asignando la propiead DefaultThreadCurrentCulture también será aplicada a la propiedad CurrentCulture. En otras palabras, hace sentido usar DefaultThreadCurrentCulture en lugar de CurrentCulture si planea usar múltiples hilos de ejecución en su aplicación - se encargará de todos los esenarios.

Resumen

Usando las propiedades CultureInfo.CurrentCulture y CultureInfo.DefaultThreadCurrentCulture, puede definir una cultura por omisión para su aplicación - siempre será usada cuando un número o fecha sea desplegado, a menos que usted específicamente anule esto en cada situación.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!