Globalización y Localización usando Microsoft .NET (Parte I)

¿Qué pasa si es que está desarrollando un aplicación web que pueda ser utilizado por personas de culturas diferentes e idiomas diferentes?. Entonces es necesario, en estos casos, implementar localización y globalización .NET, en otras palabras, usted globalizar su aplicación. Así que, .NET Framework ha simplificado mucho la tarea de crear las aplicaciones que se concentran en los clientes de múltiples culturas, para esto utiliza Unicode UTF-16 para representar caracteres. En algunos casos, utiliza internamente UTF-8. El estándar Unicode es el esquema universal de codificación de caracteres para caracteres y texto. Antes de continuar debo dejar claro que todo esto de globalización de aplicaciones se irá detallando paso a paso, en sus diersas modalidades y usos tanto para aplicaciones windows como web, es así que esta primera parte se dejará bien claros las ideas base y un pequeño ejemplo. Dada las aclaraciones del caso, sigamos...

Ahora, los namespaces que envuelven la funcionalidad .NET para la creación de globalización y localización de aplicaciones son: System.Globalization, System.Resources, System.Text. Desarrollar aplicaciones para uso global usando .NET Framework ( internalización de aplicaciones) incluye tanto localización como globalización:

Localización es el proceso de traducir los recursos para una cultura específica. La clasesResourceManager (más conocido como ResourceManager) es ideal para esta parte, mientras que, globalización es el proceso de diseñar y desarrollar aplicaciones que se adapten a culturas diferentes, es decir, esto incluye el uso de interfaces de usuario localizadas y datos regionales para usuarios de varias referencias culturales. La clases CultureInfo es usado en esta parte.

La entidad básica de todo en .NET es la clase CultureInfo ( dentro de System.Globalization, y basada en el estándar RFC 1766), que tiene información de cultura tanto el lenguaje, país/región, los calendarios utilizados, convenciones de formato de fecha y hora, convenciones de números y de moneda, y las reglas de ordenación, además proporciona la información necesaria para realizar operaciones específicas de la referencia cultural, como la distinción de mayúsculas y minúsculas, el formato de fechas y números, y la comparación de cadenas, mediantes el uso de las clases DateTimeFormatInfo, NumberFormatInfo, CompareInfo y TextInfo.

CultureInfo tiene los siguientes usos básicos: controlar como se realizan las comparaciones de strings, números y fechas, como también, los formatos de los mismos y, controlar cómo los recursos recibidos deben ser usados. CultureInfo especifica un nombre único para cada referencia cultural, evitando código fragmentado, varias codificaciones, etc). Este nombre nombre es una combinación, separados por un guión (-), de un código de referencia cultural de dos letras en minúscula asociado con un idioma(basado en ISO 639-1), y un código de referencia cultural secundaria de dos letras en mayúscula asociado con un país o región(basado en ISO 3166). Por ejmplo, el formato para el Español de Perú es "es-PE". Esto no siempre es así, existen casos en los que no hay un código de idioma de dos letras disponible, para solucionar esto se usa el código de tres letras que se deriva de ISO 639-2. Ejemplo: código de tres letras "syr" para referenciar el idioma Sirio. Globalización de Aplicaciones .NET (PARTE I)

Las diferentes referencias culturales(respetan el estándar RFC 1766) se han dividido en tres categorías:

  • Culturas invariables: no tiene en cuenta la referencia cultural. Se puede especificar mediante cadena vacía ("") o por el identificador de referencia cultural 0x007F. Sólo deben utilizarla los procesos que requieran resultados independientes de la referencia cultural, como por ejemplo, cuando se crea aplicaciones trial con un código de expiración.
  • Culturas Neutras: asociada a un idioma pero no a un país o región. Ejm: "es"
  • Culturas Específicas: asociada a un idioma y a un país o región. Ejm: "es-PE"


Para terminar pasamos con el ejemplo. Este es una aplicación donde se hace uno de un array bidimensional para almanecar la información de cada cultura (tanto el nombre como la referencia cultural). Es en realidad que una vez elegido un item del listbox se capturará el índice del mismo, dicho indice se usará para extraer la referencia cultural del array donde están almacenda toda las información de cada cultura. Es así que se listan en un listbox toda información de las culturas no neutrales, y en base a la cultura eligida en dicho listbox se asiganará el formato respectivo tanto de la fecha como de la moneda. Podemos ir cambiando entre estas culturas para ver cada uno de los formatos usado para cada cultura específica. El código que hace posible esto lo dejo a continuación, el cual está documento y será de fácil comprensión para todos. [Descargar Ejemplo]

//variables 
ArrayList Array_Culturas  = new ArrayList();
double nValor= 7814.86;
String[,] dataCulture = new String[226, 226];

// llenado de culturas en un array, para luego mostrarlo en un listbox.
private void fillListaCulturas()
{
    listBox2.Items.Clear();
    int i = 0;
    CultureInfo[] culturas = CultureInfo.GetCultures(CultureTypes.AllCultures);

    foreach (CultureInfo ci in culturas)
    {  
        if (!ci.IsNeutralCulture)
        {
            dataCulture[i, 0] = ci.DisplayName;
            dataCulture[i, 1] = ci.ToString();
            // desplegar en el listbox
            listBox2.Items.Add(dataCulture[i, 0].ToString() + 
            " [" + dataCulture[i, 1].ToString() + "]");
            i++;
        } 
    }           
    // total de culturas.
    label5.Text = "(Total " + i.ToString() +")";
}


private void Form1_Load(object sender, EventArgs e)
{
    //averiguamos la cultura instalada de interfaz de usuario,
    String UICulture = CultureInfo.InstalledUICulture.ToString();
    //y los mostramos,
    label3.Text = "La referencia de cultura es: "  + new CultureInfo(UICulture).Name;
    // Formateamos la fecha conforme a esta referencia de cultura.
    textBox1.Text =  DateTime.Now.ToString("d", CultureInfo.InstalledUICulture);
    // lo mismo para el formato de moneda.
    textBox2.Text = (nValor.ToString("c", CultureInfo.InstalledUICulture));
    // Llenar ComboBox con la Colección de Culturas
    fillListaCulturas();
}      

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{    // ubicamos y extraemos la cultura seleccionada        
    String oCulture = dataCulture[listBox2.SelectedIndex,1];
    CultureInfo cu = new CultureInfo(oCulture);
    // siempre que no sea una cultura neutral

    // aplicamos el formato correspondiente en base a la cultura
    // para la fecha...
    textBox1.Text = System.DateTime.Now.ToString("d", cu);
    // y para la moneda...
    textBox2.Text = nValor.ToString("c", cu);
    //mostramos el nombre en español de la cultura.
    label3.Text = cu.DisplayName;                                
}

Más adelante veremos de manera más detallada lo referente a Culture (CultureInfo) y UICulture (UICultureInfo), manejos de recursos para localizar un aplicación para culturas específicas, personalización de culturas y el uso de archivos LDML. Mientras tanto vale deja la idea de que el valor Culture determina o influye en los resultados de las funciones dependientes de la referencia cultural, como la presentación de la fecha. En contraste, el valor UICulture determina cómo se cargan los recursos del formulario y se utiliza para la búsqueda de datos de recursos específicos de la referencia cultural. El único propósito del valor UICulture es indicar qué idioma deben cargar los recursos, es decir, determinar qué idioma deben utilizar las cadenas de la interfaz de usuario. El valor Culture determina todo lo demás: formato de fechas, formato de números, etc. Ya sabes, todo esto más adelante, poco a poco.

Saludos.

Published 10/12/2006 1:37 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2006/12/10/globalizaci-243-n-y-localizaci-243-n-usando-microsoft-net-parte-i.aspx

Comentarios

# re: Globalización y Localización usando Microsoft .NET (Parte I)

ok tengo una preguta? como es que puedo realiazar un archivo de recursos en c#? un ejemplo por favor me urge

Thursday, March 15, 2007 8:54 PM por Nancy

# re: Globalización y Localización usando Microsoft .NET (Parte I)

Donde está la segunda parte ???

Tuesday, April 07, 2009 9:34 AM por preguntoncojonero

# re: Globalización y Localización usando Microsoft .NET (Parte I)

Esa segunda parte !!!

Tuesday, June 02, 2009 2:20 PM por preguntoncojonero

# re: Globalización y Localización usando Microsoft .NET (Parte I)

Que código tan feo e ineficiente, te deberia dar pena publicarlo.

Tuesday, March 23, 2010 7:15 PM por John

# re: Globalización y Localización usando Microsoft .NET (Parte I)

Gracias amigo, tu artículo ha sido vital para aprobar el exámen de MVA :D

Friday, March 11, 2011 2:14 AM por Mauricio Masís V.