Globalización y localización
Introducción
Aunque se puedan considerar como objetivos próximos entre sí, la globalización y la localización de una aplicación son dos cosas distintas. La globalización es el proceso que permite formatear los datos en función del país o la cultura, como ocurre con la moneda o las fechas, mientras que la localización es el proceso que permite mostrar estos datos de forma diferente dependiendo de la cultura de la aplicación, como por ejemplo el texto de los elementos de la interfaz de usuario.
La globalización y la localización se basan en el concepto de cultura. La cultura hace referencia a los rasgos específicos de un país o idioma. Las clases que permiten gestionar la cultura se encuentran en el espacio de nombres System.Globalization.
La cultura
Las diferentes culturas disponibles se identifican mediante un código de cultura que está compuesto por dos caracteres que indican el idioma y, opcionalmente, pueden estar seguidos por otros dos caracteres adicionales para especificar la región. Estos dos elementos están separados por un guión:
-
es es el código del idioma español sin especificar la región.
-
es-ES es el código del idioma español en España.
-
es-MX es el código del idioma español en México.
-
en es el código del idioma inglés sin especificar la región.
Existen muchos códigos de cultura para cada idioma y cada especificación de región. La lista completa de esos códigos está disponible en el MSDN, bajo el título Clase CultureInfo. Los códigos de cultura sin especificación de lenguaje se llaman culturas neutras, mientras que los códigos de cultura con indicación de la región se llaman culturas específicas.
De manera predeterminada, cuando una aplicación se ejecuta, los argumentos culturales son idénticos a los del sistema. Es posible programar la aplicación para modificar este valor.
Cree un nuevo formulario en el proyecto SelfMailer y llámelo ElegirCultura. Agregue un control ComboBox y un control Label de la siguiente manera:
Es posible acceder a la cultura actual mediante...
La globalización
Según el país, se debe formatear la moneda de diferentes maneras: algunos países utilizan la coma como separador decimal, mientras que otros usan el punto. Lógicamente, los datos a mostrar son idénticos de un país a otro.
Cuando se modifica la cultura, cualquier dato formateado por la aplicación se deberá cambiar automáticamente al nuevo formato. Añada dos controles Label en el formulario ElegirCultura como se muestra a continuación:
Para mostrarse correctamente en función de la cultura, un valor debe utilizar el formato suministrado por el Framework .NET. Por ejemplo, si usa la siguiente instrucción para mostrar la fecha:
this.lblDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
el cambio de cultura no tendrá ningún efecto, ya que el formato se especifica explícitamente. Por el contrario, si utiliza la visualización por defecto, el formato usado será el de la cultura actual.
Modifique el controlador del evento SelectedIndexChanged para modificar el valor de los controles:
this.lblDate.Text = string.Format("Fecha: {0}",
DateTime.Now.ToString());
this.lblMoney.Text = string.Format("Moneda: {0}",
...
La localización
La localización implica que todos los elementos que cambian de un idioma a otro, incluso en función del país, se deben modificar. El ejemplo más común son los textos de los formularios. El Framework .NET ofrece los archivos de recursos que van a almacenar los valores en el ensamblado de la aplicación o en otro ensamblado satélite, que será referenciado en la aplicación. Es en tiempo de la ejecución cuando se debe escoger los recursos en función de la cultura.
Los archivos de recursos se eligen en tiempo de ejecución en función de la propiedad CurrentUICulture del thread actual. Esta propiedad de tipo CultureInfo puede ser diferente de la propiedad CurrentCulture. Son distintas y no se incluyen la una en la otra.
La modificación de la cultura de localización mediante programación se realiza de la misma manera que para la cultura de globalización.
Agregue la actualización de la propiedad CurrentUICulture al thread actual en el controlador del evento del formulario ElegirCultura:
Thread.CurrentThread.CurrentUICulture = culture;
Para que esta propiedad se tenga en cuenta es necesario localizar los formularios. Cada uno de ellos tiene una propiedad Localizable con el valor por defecto False. Abra el formulario Main y sustituya este valor por True desde la ventana Propiedades. En la ventana Explorador...