post icon

Guía para crear aplicaciones Multilenguajes con dotNet

Siempre me preguntaba como crear programas multilenguajes, ya tenía una idea bastante robusta para hacerlo y luego de investigar en varias fuentes me he quedado con un método sencillo (casi todos son sencillos de hecho), pero éste es el más práctico.

Para ejemplificar vamos a crear un proyecto WinForm con C# en Visual Studio, el formulario debe quedar algo así:

Lo que haremos será escribir las 3 comidas principales del dia, Desayuno, Almuerzo y Cena en los Label de los botones, obviamente cada uno en una lengua según los radio button que elijamos. Si ya se pude haber tenido una mejor idea :[

Luego vamos a crear una carpeta llamada Lenguajes (o como les guste) y crearemos dentro de él, 4 archivos de recursos, uno para cada idioma, teniendo en cuenta uno por defecto por si no podemos detectar correctamente la cultura o no tenemos un recurso para dicha cultura .

Quedaría así mas o menos el contenido de cada recurso.

Ya solo nos queda crear un archivo de recurso por cada idioma y al final del nombre agregarle la Cultura, en este ejemplo use

  1. DE-DE: Alemán
  2. ES-PY: Paraguay
  3. ES-US: Inglés

Necesitamos crear un método que se encargue de asignar los labels correctos para cada idioma, de este modo:

1
2
3
4
5
6
private void SwitchIdioma()
{
    Boton1.Text = Lenguajes.Recurso.Boton1;
    Boton2.Text = Lenguajes.Recurso.Boton2;
    Boton3.Text = Lenguajes.Recurso.Boton3;
}

Ahora en el evento de change selection de cada radio button escribimos el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void rdbEspañol_CheckedChanged(object sender, EventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ES-PY");
    SwitchIdioma();
}
 
private void rdbIngles_CheckedChanged(object sender, EventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ES-US");
    SwitchIdioma();
}
 
private void rdbAleman_CheckedChanged(object sender, EventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("DE-DE");
    SwitchIdioma();
}

En todo caso para que cuando se cargue el formulario se vean ya bien configurado un idioma llamamos al metodo en el Load del Form:

1
2
3
4
private void FrmDevTroce_Load(object sender, EventArgs e)
{
    SwitchIdioma();
}

Finalmente los formularios se verán asi:

Comentarios desde Facebook:

  1. avatar
    LG Google Chrome Windows
    15 Abril 2017 at 11:01 #

    esta ayuda no es ayuda,..dejan a medias… si lo hacen por favor dignensé en hacerlo completo y bien!!!

  2. avatar
    Techy COSTA RICA Google Chrome Windows
    8 Julio 2012 at 16:44 #

    Pero no me quedo claro una parte, cuando yo hago el .resx le puedo poner cualquier nombre cierto?

    En donde establezco la cultura? Porque luego me da un error aca

    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(“EN-US”);

    Me indica que falta una directiva using o referencia de ensamblado.

    AYUDA por fa urge

  3. avatar
    natanael MEXICO Google Chrome Windows
    4 Abril 2011 at 16:39 #

    COMO LE HAGO PARA QUE ME APAREZCAN LOS OBJETOS, EN AUTOMATICO EN EL FORMULARIO DE IDIOMAS Y NO LLENARLOS AUTOMATICAMENTE. ESPERO ME PUEDADN AYUDAR. GRACIAS

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      4 Abril 2011 at 21:10 #

      Lamentablemente no es posible hacerlo. Quiza exista algun plugin en codeplex que lo haga pero no me consta..

      • avatar
        natanael MEXICO Google Chrome Windows
        5 Abril 2011 at 09:36 #

        muchas gracias por contestar. ME GUSTARIA QUE ME AYUDARAS PARA HACER UNA APLICACION MULTILENGUAJE CON LA OPCION DE GLOBALIZACION EN INGLES Y ESPAÑOL. ESPERO Y SE PUEDA.

  4. avatar
    JM SPAIN Internet Explorer Windows
    5 Enero 2011 at 15:36 #

    Muchas gracias!!
    Se hace un poco peliagudo googlear una buena guía para principiantes de Visual Studio,como es mi caso, y aunque trabajo en Visual Basic,esta guía me ha ayudado mucho.
    Gran trabajo!;-)

Responder