• Inicio
  • Acerca de
  • Contacto

Destino DotNet

Blog de ayuda y recursos sobre tecnologías .NET

Oct 4, 2014

Localización en aplicativos .NET

Localización Aplicativos .NET
Facebook0
Twitter0
Google+0
Linkedin0
E-Mail0

Este artículo trata un tema muy interesante que quiero abordar: cómo aplicar la localización en aplicativos .NET. En los últimos años, la globalización ha tomado mucha fuerza en los sistemas de información, ya no es raro tener a usuarios que sean, culturalmente, diferentes o que estén ubicados en diferentes regiones.

Por esto es muy importante que nuestro aplicativo tenga en cuenta esta característica, y más importante aún es que su implementación se dé desde el principio, ya que nos puede ahorrar mucho trabajo comparándolo si lo implementáramos de forma posterior.

Conceptos

¿Qué es Globalización?

La globalización es la generación de un esquema en nuestro aplicativo que controle y gestione la interface de usuario de forma localizada, basándose en su configuración regional y referencia cultural.

La decisión de aplicarla en nuestros aplicativos implica aspectos de diseño y programación en las interfaces y componentes.

¿Qué es Localización?

La localización implica la aplicación de una configuración de globalización para la interface del usuario en la aplicación. Como se dijo en el concepto de globalización, esto depende de la referencia cultural o región específica de ejecución, ya sea de forma automática o manual.

La localización implica principalmente el idioma, pero además incluye otros factores como el formato de las fechas, la representación de los números decimales, la moneda a mostrar, entre otros.

Ventajas de aplicar Localización

Entre las ventajas de implementar la localización en nuestro aplicativo tenemos:

  • Sólo es necesario crear un aplicativo, si el requerimiento implica que sea multi-región (más de una referencia cultural). Por ejemplo, en el caso que se necesite un aplicativo que funcione en inglés y español.
  • Es más sencillo de mantener (actualizaciones, depuración de errores) un solo aplicativo, y es más estable.

Cómo usar Localización especificando la cultura

Podemos aplicar la localización en nuestros aplicativos especificando, por código, la cultura a utilizar. Veamos un ejemplo simple, creamos un proyecto de consola con el siguiente código:

using System;
using System.Globalization;
using System.Threading;

namespace LocalizacionNET
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            // Inglés - Estados Unidos
            Console.WriteLine("------ INGLÉS | ESTADOS UNIDOS -----");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            Console.WriteLine("Fecha actual:\t {0:D}" ,DateTime.Now);
            Console.WriteLine("Valor decimal:\t {0:N}", (decimal)15 / 23);
            Console.WriteLine("Valor monetario:\t {0:C}", 1464.35);
            Console.WriteLine("\n\n");
            
            // Español - Perú
            Console.WriteLine("------ ESPAÑOL | PERÚ -----");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("es-PE");
            Console.WriteLine("Fecha actual:\t {0:D}", DateTime.Now);
            Console.WriteLine("Valor decimal:\t {0:N}", (decimal)15 / 23);
            Console.WriteLine("Valor monetario:\t {0:C}", 1464.35);
            Console.WriteLine("\n\n");

            // Español - España
            Console.WriteLine("------ ESPAÑOL | ESPAÑA -----");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
            Console.WriteLine("Fecha actual:\t {0:D}", DateTime.Now);
            Console.WriteLine("Valor decimal:\t {0:N}", (decimal)15 / 23);
            Console.WriteLine("Valor monetario:\t {0:C}", 1464.35);
            Console.WriteLine("\n\n");

            Console.ReadKey();

        }
    }
}

La cultura especificada por código tiene la siguiente nomenclatura: [idioma]-[país].

Si ejecutamos el proyecto vemos lo siguiente:

Localización: Aplicativo consola .NET

Lo que hace el aplicativo es imprimir 3 veces el mismo juego de valores (Fecha, decimal, monto), pero en cada caso cambiamos la cultura. Vemos que puede ser diferente el formato e idioma de fecha, el valor numérico o el valor monetario.

Lo que podemos concluir es que para una buena implementación de localización en nuestros aplicativos, debemos usar formatos de impresión estándar para los números, fechas, valores monetarios, entre otros. También vemos que la especificación de la cultura se puede hacer a través del código fuente, ya sea configurando a nivel de aplicativo un parámetro que la especifique (por ejemplo en el archivo web.config), o dicho parámetro lo pueda elegir el usuario al iniciar la sesión o en alguna sección de configuración.

Cómo usar Localización con archivo de recursos

Una manera de implementar la localización en aplicativos ASP .NET es usando archivos de recursos. Estos archivos se generan con una herramienta del IDE, y se debe crear un archivo por cada idioma y/o cultura a localizar. En el ejemplo anterior hemos visto cómo podemos imprimir los valores del aplicativo con una cultura específica, pero ahora veremos cómo podemos implementar algo parecido a nivel de los controles de la interface de usuario, es decir las cajas de texto, botones, etiquetas, etc.; para que sean multi-idiomas.

Vamos con un ejemplo práctico. Haremos una página web con tres controles donde mostraremos los mismos datos que el ejemplo anterior: Fecha actual, Valor decimal y valor monetario. La página web quedaría así:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="IngresoDatos.aspx.cs" Inherits="Localizacion_ASP_NET_WebForms.IngresoDatos" %>


    

En el code-behing de la página podemos el código necesario para pintar los valores indicados en las cajas de texto. Quedaría así:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Globalization;

namespace Localizacion_ASP_NET_WebForms
{
    public partial class IngresoDatos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            txtFecha.Text = string.Format("{0:D}", DateTime.Now);
            txtValorDecimal.Text = string.Format("{0:N}", (decimal)15 / 23);
            txtValorMonetario.Text = string.Format("{0:C}", 1464.35);
        }
    }
}

Ahora creamos la carpeta de recursos locales. Vamos al Explorador de soluciones y agregamos la carpeta ASP .NET llamada App_LocalResources.

Luego seleccionamos la página web (archivo .aspx) que hemos creado, y en el menú Herramientas seleccionamos Generar recurso local. Vemos que se ha creado el archivo IngresoDatos.aspx.resx. Para este ejemplo copiaremos 2 veces este archivo recién creado, para tener un par de regiones/culturas configuradas. La carpeta con los archivos queda de la siguiente manera:

Carpeta de recursos locales

Algunas consideraciones de los archivos de recursos:

  • Los archivos de recursos tienen la siguiente nomenclatura: [nombre_archivo].[cultura].resx.
  • EL archivo de recursos que no tiene especificado una cultura es el que se carga por defecto.
  • La cultura especificada puede referenciar sólo al idioma, o al idioma y país.

En cada archivo establecemos los valores de los controles generados.

Para el archivo de recursos local con cultura es:

Archivo de recurso local, cultura es

Para el archivo de recursos local con cultura en-US:

Archivo de recurso local, cultura en-US

También veremos que a los controles de nuestra página web se le ha agregado la etiqueta meta:resourcekey, que es la que servirá para imprimir el valor correcto de la cultura seleccionada. Nuestros controles quedaron así:

    

Ahora, ¿cómo el aplicativo sabe que valores mostrar para las etiquetas? Para eso, sobreescribimos el procedimiento InitializeCulture en la página web, de la siguiente manera:

        protected override void InitializeCulture()
        {
            Page.Culture = "en-US";
            Page.UICulture = "en-US";
        }

Nuevamente, podemos establecer este parámetro a nivel del aplicativo, o que sea el usuario el que lo seleccione a través de un control accesible. Eso es un tema de diseño.

Si ejecutamos el aplicativo con la cultura en-US, nos aparecerá algo así:

Ejecución del aplicativo, cultura en-US

Pero si ejecutamos el aplicativo con la cultura es-PE, saldrá lo siguiente:

Ejecución del aplicativo, cultura es

Como podemos ver, es posible tener un archivo de recursos local por cada idioma, pero si queremos podemos especificar la cultura hasta el país inclusive. Si es que la cultura especificada no concuerda con el idioma y/o país de un archivo de recurso, entonces se usará el archivo de recursos local por defecto.

Conclusiones

En estos ejemplos hemos podido ver cómo aplicar la localización a través del código o usando archivos de recursos. Se pueden combinar ambos métodos, buscando siempre minimizar el tiempo dedicado al mantenimiento del aplicativo, por ejemplo para agregar o modificar controles, e inclusive para agregar una región y/o cultura.

Como recomendaciones finales de la implementación de la localización, puedes tener en cuenta reservar espacio suficiente en los controles para los diferentes idiomas a mostrar, trasladar todos los archivos de recursos de una cultura o región a un ensamblado para su mejor distribución, usar una codificación lo bastante general para los idiomas a mostrar, por ejemplo UTF8; y finalmente, asegúrate que las traducciones de los textos a otros idiomas sean de nivel profesional.

Facebook0
Twitter0
Google+0
Linkedin0
E-Mail0

Relacionado

Berto Martinez
Berto Martinez

Ingeniero de Software, desarrollador a tiempo completo y entusiasta de las tecnologías de la Web 2.0 a tiempo incompleto. También soy autor de este blog, donde comparto lo aprendido en estos años sobre tecnologías .NET, esperando que sea últil para los visitantes.

Article by Berto Martinez / Tutoriales / .NET, ASP .NET, localización, localization 2 comentarios

Suscríbete al Blog

Recibirás todos los contenidos en tu correo electrónico:

Categorías

  • General
  • Opinión
  • Recursos
  • Tutoriales

Lo que Google obliga a hacer

Síguenos en Twitter

Mis tuits
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Política de cookies
Licencia Creative Commons
Destino DotNet y su contenido es creado por Joel Martinez y se distribuyen bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

Copyright © 2026 · Education Pro Theme en Genesis Framework · WordPress · Iniciar sesión