DEV Community

loading...
Cover image for Cómo crear aplicaciones multilenguaje con C#

Cómo crear aplicaciones multilenguaje con C#

Juan Diego Mejía Maestre
Soy un apasionado de la programación, manejo programación de escritorio, web y móvil
Updated on ・4 min read

Clic aquí para ver un proyecto de ejemplo.

Para crear una aplicación multilenguaje en C# lo primero es crear una carpeta donde vamos a colocar cada uno de los lenguajes llamada Lenguajes o el nombre que desees.
image

Luego agregamos un archivo de recurso en la carpeta con el nombre de Strings o cadenas en español.

image

y por cada texto en el formulario o mensaje de alerta en el formulario procedemos hacer una propiedad o fila en el archivo de recurso, para agregar una propiedad se debe abrir el archivo de recurso.
image

image

image

Una vez tengamos el archivo procedemos hacer un archivo resx por cada lenguaje con las mismas propiedad, pero se llamará cómo el archivo anterior pero con un punto y el código de lenguaje, así :
image

El código del lenguaje es la unión de la abreviatura del idioma más un "-" seguido de la abreviatura del país, la abreviatura del idioma en minúscula y la del país en mayúscula.

Ejemplo, el idioma Ingles es "en" y el país de Estados Unido es "US" entonces el idioma ingles de estados unidos queda así "en-US" clic aquí para ver los código de los idiomas y clic aquí para ver la abreviatura de todos los paises

Una vez tengamos el archivo por cada lenguaje, lo que procedemos hacer el cargar el idioma al cargar el formulario.

con esta línea cambiamos el lenguaje de la aplicación

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
Enter fullscreen mode Exit fullscreen mode

pero antes de crear un método que cargue el idioma necesitamos guardar el idioma que el programa tuvo antes de cerrarse para que al volverlo abrir se cargue de nuevo.

eso lo hacemos creado una propiedad para guardar el idioma, sino sabes cómo hacerlo, mira este vídeo.

image

creamos un método que cargue el idioma al cargar el formulario

  public void CargarIdioma()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Settings.Default.Idioma);
            lblLenguaje.Text = Strings.lblLenguaje;
            lblnuevo.Text = Strings.lblnuevo;
            ckActivo.Text = Strings.ckActivo;
            btnMensaje.Text = Strings.btnMensaje;
            this.Text = Strings.titulo;
            btnAplicar.Text = Strings.btnAplicar;

        }
Enter fullscreen mode Exit fullscreen mode

Al cambiar el idioma, cambiamos la configuración y volvemos a cargar el idioma

  Settings.Default.Idioma = "en-US";
  CargarIdioma();
Enter fullscreen mode Exit fullscreen mode
  Settings.Default.Idioma = "es-CO";
  CargarIdioma();
Enter fullscreen mode Exit fullscreen mode

al cerrar el formulario debemos guardar el último idioma que se seleccionó

Settings.Default.Save();
Enter fullscreen mode Exit fullscreen mode

Trucos

1- Crear una clases que controles los idiomas

Creamos una clase con todos los atributos de un idioma y un método estático que devuelta todos los idiomas.

Clase : Idioma.cs

public class Idioma
    {
        public String Nombre { get; set; }
        public String Abreviacion{ get; set; }
        public String Pais { get; set; }
        public String AbreviacionPais{ get; set; }

        public String NombrePais
        {
            get
            {
                return Nombre + "(" + Pais + ")";

            }
        }
        public String CultureInfo
        {
            get
            {
                return Abreviacion + "-" + AbreviacionPais;
            }
        }

        public static List<Idioma> ObtenerIdiomas()
        {
            return new List<Idioma> {
                new Idioma
                {
                    Nombre = "Español",
                    Abreviacion = "es",
                    Pais = "Colombia",
                    AbreviacionPais = "CO"
                },
                 new Idioma
                {
                    Nombre = "English",
                    Abreviacion = "en",
                    Pais = "Estados Unidos",
                    AbreviacionPais = "US"
                },
                  new Idioma
                {
                    Nombre = "português",
                    Abreviacion = "pt",
                    Pais = "Brazil",
                    AbreviacionPais = "BR"
                }
            };
        }

        public static void CambiarTexto(Control.ControlCollection controls)
        {
            foreach (Control c in controls)
            {
                if(c is Panel)
                {
                    CambiarTexto(c.Controls);
                }
                else
                {
                    String text = Strings.ResourceManager.GetString(c.Name);
                    if (text != null)
                    {
                        c.Text = text;
                    }
                }

            }
        }

    }
Enter fullscreen mode Exit fullscreen mode

para llenar un combobox sería así :

  public void LlenarIdiomaCombobox()
        {
            comboBox1.DataSource = Idioma.ObtenerIdiomas();
            comboBox1.DisplayMember = "Nombre";
            comboBox1.ValueMember = "CultureInfo";
        } 
Enter fullscreen mode Exit fullscreen mode

Resultado :

image

otra forma es :

  public void LlenarIdiomaCombobox()
        {
            comboBox1.DataSource = Idioma.ObtenerIdiomas();
            comboBox1.DisplayMember = "NombrePais";
            comboBox1.ValueMember = "CultureInfo";
        } 
Enter fullscreen mode Exit fullscreen mode

Resultado :

image

Cargar los idiomas dinámicamente, el único requisito es que el nombre del control se debe llamar igual que la propiedad del archivo de recurso.

    public void CargarIdioma()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Settings.Default.Idioma);
            Idioma.CambiarTexto(this.Controls);
            this.Text = Strings.titulo;

        }
Enter fullscreen mode Exit fullscreen mode

2- Instalar ResXManager

Instalar la extensión desde el menú de Herramientas, descargas la extensión y cierras visual studio.

image

presionas en modificar (Modify) y luego en finalizar tarea (end Task).

luego vamos donde están los idiomas, clic derecho en uno de ellos y luego clic izquierdo para desplegar las opciones y luego lo abrimos con la extensión

image

luego puedes ver y editar todos los idiomas al mismo tiempo y agregar un nuevo idioma

image

Discussion (0)