Foros del Web » Programación para mayores de 30 ;) » .NET »

aplicaciones multilenguaje

Estas en el tema de aplicaciones multilenguaje en el foro de .NET en Foros del Web. Hola foreros, los molesto pidiéndoles su opinión sobre como manejar aplicaciones multilenguaje o en varios idiomas. Primero es justo decir que no tengo mucha experiencia ...
  #1 (permalink)  
Antiguo 11/03/2006, 11:32
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
aplicaciones multilenguaje

Hola foreros, los molesto pidiéndoles su opinión sobre como manejar aplicaciones multilenguaje o en varios idiomas.

Primero es justo decir que no tengo mucha experiencia en .net pero estoy investigando y autocapacitándome. Tengo el paradigma de Delphi para manejar el multilenguaje, es decir, en la misma IDE solecciono la opción de aplicación multilenguaje, especifico los diferentes idiomas que deseo y me genera una serie de diccionarios (.DLL) que voy traduciendo "a pie" para cada idioma, pero con ello logro que mi aplicación cambie de idioma sin tener que cerrarla y volverla a abrir.

Estoy buscando algo similar, pero definitivamente el C# Express no tiene esa opción (no se si el VS 2005 la tenga), así que investigué en internet y he encontrado algunas técnicas basadas en XML que creo me obligan a leer el archivo y luego y cambiando el caption de mis controles uno a uno en tiempo de ejecuación.

¿Esta es la forma de hacerlo en .NET? ¿tienen alguna referencia que confirme esto o que me diga otra forma de hacerlo?

He estado investigando y buscando, pero si alguno de ustedes ya lo ha hecho, le agradecería mucho diera una pista.

Saludos
  #2 (permalink)  
Antiguo 13/03/2006, 19:26
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
Aquí un articulo algo antiguo pero interesante (para .NET 2):
http://www.theserverside.net/news/th...hread_id=33877

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 13/03/2006, 19:57
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
vale, gracias, pero no me refiero a la cultura de los símbolos (el artículo es para web), sino para todos los textos que hay en una aplicación (mensajes de alerta MsgBox, por ejemplo), captions de ventanas, labels, etc, etc.

Saludos
  #4 (permalink)  
Antiguo 13/03/2006, 20:24
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
Te sugiero que revises un poco mejor el artículo, no es sólo para web...

En todo caso, también sería bueno que revises la documentación (.net 2) http://msdn2.microsoft.com/en-us/lib...z0(VS.80).aspx

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 14/03/2006, 09:28
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Te agadezco la sugerencia, pero me bastó la primera vez para conocer la orientación del artículo y no es lo que necesito.

Tambien he revisado con anterioridad la documentación, y por eso dije en el primer post: "... pero si alguno de ustedes ya lo ha hecho ...". Seguramente no has realizado este tipo de aplicaciones, y por ello no me doy a entender contigo.

Gracias de todas formas

Saludos
  #6 (permalink)  
Antiguo 15/03/2006, 10:17
 
Fecha de Ingreso: agosto-2005
Mensajes: 42
Antigüedad: 19 años, 3 meses
Puntos: 0
Desde la experiencia te digo que es mucho mejor manejarse todo en el mismo lenguaje....si bien compilado es todo lo mismo. Dentro de la IDE del 2003 un proyecto C# no se lleva del todo bien con otro VB.Net o viceversa.
  #7 (permalink)  
Antiguo 16/03/2006, 04:18
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
aquí puedes encontrar una pequeña idea:

http://www.elguille.info/colabora/vb...tilenguaje.htm

está en VB6, pero bueno, es casi similar llevarlo a VB.Net

Otro ejemplo pero en Vb.Net:

http://www.bhashaindia.com/developer...ingualApp.aspx

saludos!

Última edición por freegirl; 16/03/2006 a las 04:24
  #8 (permalink)  
Antiguo 16/03/2006, 04:21
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Me he dejado de decir que una buena forma sería cargar los textos de los caption, los mensajes, etc desde un archivo Xml, pudiendo así añadir más idiomas una vez compilado el programa.
  #9 (permalink)  
Antiguo 16/03/2006, 20:32
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Cita:
Iniciado por jsolis
Desde la experiencia te digo que es mucho mejor manejarse todo en el mismo lenguaje....si bien compilado es todo lo mismo. Dentro de la IDE del 2003 un proyecto C# no se lleva del todo bien con otro VB.Net o viceversa.
Hola
No me refiero a tener un proyecto con clases hechas en diferentes lenguajes de programación, más bien una aplicación que presente una interfaz en cada uno de los idiomas que se definan.

Gracias

Cita:
Iniciado por freegirl
aquí puedes encontrar una pequeña idea:

http://www.elguille.info/colabora/vb...tilenguaje.htm

está en VB6, pero bueno, es casi similar llevarlo a VB.Net
Esto es precisamente no lo que no quiero hacer, es bastante engorroso y poco práctico. Es un poco mejor la técnica que también mencionas del XML pero igual buscaba la forma equivalente a como Borland atacó este problema.

Cita:
Iniciado por freegirl
Otro ejemplo pero en Vb.Net:

http://www.bhashaindia.com/developer...ingualApp.aspx

saludos!
¡Eso es justamente lo que buscaba!, suponía que algo tan sencillo definitivamente debería de ser implementado en .NET. No tengo el VS.NET aquí pero por el artículo parace ser que le haz dado.

Muchas, muchas gracias amig@
  #10 (permalink)  
Antiguo 05/10/2006, 20:37
 
Fecha de Ingreso: octubre-2003
Ubicación: Lima
Mensajes: 319
Antigüedad: 21 años, 1 mes
Puntos: 2
Estoy empezando con el .net en este tema, si por favor me podrian ayudar para crear una aplicacion multilenguaje se lo agradeceria mucho
  #11 (permalink)  
Antiguo 06/10/2006, 08:11
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 8 meses
Puntos: 76
Hace algunos días estuve leyendo un manual con preguntas de certificacion y había una pregunta similar, sobre aplicaciones multilenguaje, y hacia referencia a los archivos de recursos para este tipo de aplicaciones, podrías comenzar investigando este tema, cuando llegue a mi casa buscare la pregunta y la posteo, para que la mires


Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #12 (permalink)  
Antiguo 16/10/2006, 08:06
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Gracias

Ya se ha solucionado el porblema con archivos de recursos para los textos fijos y xml para los datos dimámicos (nombre de columnas, por ejemplo), pero igual, si hay algo mejor estoy muy agradecido de lo que nos puedas recomendar
  #13 (permalink)  
Antiguo 16/10/2006, 08:44
 
Fecha de Ingreso: octubre-2003
Ubicación: Lima
Mensajes: 319
Antigüedad: 21 años, 1 mes
Puntos: 2
estimado Myakire si pudieras pasarme el codigo o la forma como hacerlo te lo agradeceria bastante, esto es algo confuso aun para mi.

Graciasss
  #14 (permalink)  
Antiguo 30/08/2010, 08:35
Avatar de JuanKSolocodigo  
Fecha de Ingreso: agosto-2010
Ubicación: Colombia
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación Respuesta: aplicaciones multilenguaje

Hola el hilo ya esta abandonado, pero seguramente esto le servira a muchas personas.
Este artículo es una copia cruzada del artículo original en mi blog:
[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"]C# – Aplicaciones multilenguaje ( globalización y localización )[/URL]
------------------------------


Continuamente en mis conferencias y de paso por los foros a través de internet encuentro multitud de dudas e inquietudes al respecto de Cómo hacer una aplicación que soporte múltiples idiomas, ciertamente hay varias formas de conseguirlo y no todas esas formas son buenas en todos los escenarios, dependiendo de diferentes factores como por ejemplo el tamaño de la aplicación o la cantidad de idiomas soportados.

Sin embargo yo tengo mi método preferido, el cual considero que es válido para la inmensa mayoría de aplicaciones desarrolladas, el método de los archivos de recursos y ese es el tema principal de este artículo.

En tres pasos enseñare como hacerlo.
  1. Utilizar archivos de recursos para manipular las cadenas de texto
  2. Soportar múltiples lenguajes con los archivos de recursos
  3. Aislar los archivos de recursos para facilitar la actualización

Finalmente relacionare otros temas de interés para tener una funcionalidad más robusta.

1. UTILIZAR ARCHIVOS DE RECURSOS PARA MANIPULAR LAS CADENAS DE TEXTO

PREPARAR LA APLICACION


Lo primero que debemos hacer es crear una aplicación de Windows Forms con 1 ListBox y 5 Botones como se ven la siguiente imagen.

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image.png[/IMG][/URL]

Para fines de este ejemplo con excepción de los textos del listbox ninguno de los textos es obligatorio.
Ahora, dentro de la solución, creamos una carpeta la cual llamaremos “Recursos Localizables”, justo como se ve a continuación.

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image1.png[/IMG][/URL]

Ahora creamos un nuevo archivo de recursos y lo llamaremos StringResources, debemos crearlo junto dentro de la carpeta “Recursos Localizables” que acabamos de crear.

Revisamos las propiedades del archivo recién creado y nos aseguramos que en Build Action diga “Embedded Resource”.

Ahora utilizaremos ese archivo de recursos para guardar las cadenas en el idioma principal (por defecto ) de nuestra aplicación, así que le damos doble clic y adicionamos los valores que se ven en la siguiente imagen.

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image2.png[/IMG][/URL]

Para efectos del ejemplo es importante hacerlo con los valores que ven.

UTILIZAR EL ARCHIVO DE RECURSOS EN NUESTRA APLICACION

Esta parte es muy sencilla, creamos un método llamado AplicarIdioma con el siguiente código:

Código PHP:
private void AplicarIdioma()
{
    
button1.Text StringResources.ButtonLabel1;
    
button2.Text StringResources.ButtonLabel2;
    
button3.Text StringResources.ButtonLabel3;
    
button4.Text StringResources.ButtonLabel4;
    
button5.Text StringResources.ButtonLabel5;
    
this.Text StringResources.WindowTitle;

Y lo llamamos desde el Form_Load, ejecutamos la aplicación y obtenemos esto

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image3.png[/IMG][/URL]

2. SOPORTAR MÚLTIPLES LENGUAJES CON LOS ARCHIVOS DE RECURSOS

Casi todo el trabajo de codificación ha terminado ahora viene ‘la magia’ . En la carpeta “Recursos Localizables” creamos 3 copias de el archivo de recursos original, nos aseguramos de que cada una de ellas quede con los siguientes nombres.

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image4.png[/IMG][/URL]

Ahora editamos cada uno de ellos dejándolos con los textos que se ven a continuación (pueden ayudarse de traductores online para obtener los caracteres en japonés).

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image5.png[/IMG]
[IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image6.png[/IMG]
[IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image7.png[/IMG][/URL]

Una vez hecho esto procedemos a modificar el evento SelectedIndexChanged del listbox y lo dejamos así:
Código PHP:
private void listBox1_SelectedIndexChanged(object senderEventArgs e)
{
    
Thread.CurrentThread.CurrentUICulture = new CultureInfo((string)listBox1.SelectedItem);
    
AplicarIdioma();

Lo que hemos hecho es hacer que cada vez que se de clic en uno de los miembros de la lista se cambie la cultura de la interfaz de usuario del hilo actual de la aplicación, y dado que cada miembro del listbox es el nombre corto de cada una de las tres culturas que tenemos, basta con crear un nuevo objeto de tipo CultureInfo que coincida con el nombre corto del ítem seleccionado.

PORQUÉ Y PARA QUÉ?

Esto que acabamos de hacer tiene un importante objetivo.
Cuando se utiliza un archivo de recursos el CLR busca primero cual es la cultura del hilo actual, entonces con ese dato automáticamente utiliza el archivo de recursos cuya nomenclatura coincide con esa cultura, sino encuentra dicho archivo de recursos entonces el CLR utiliza el archivo de recursos que no tiene cultura específica.

FUNCIONA!

Ejecutamos la aplicación, damos clic en cada uno de los ítems del listbox y podemos ver esto :
[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/CultureAnimation.gif[/IMG][/URL]

3. AISLAR LOS ARCHIVOS DE RECURSOS PARA FACILITAR LA ACTUALIZACIÓN

Hasta aquí nuestro proyecto ya esta terminado y ya estamos en capacidad de hacer aplicaciones multilenguaje, sin embargo como tip final de este artículo les recomiendo que si piensan incluir alguna funcionalidad de actualizaciones en sus aplicaciones y tienen planeado actualizar o incluir nuevos idiomas en su aplicación, coloquen los archivo de recursos en una dl por aparte donde solo se coloquen archivos de recursos, esto permitirá que las actualizaciones relacionadas con cadenas de lenguaje se aíslen en un solo componente.

Para que esto funcione, en el proyecto de la librería que utilicen para tal fin, recuerden establecer en cada archivo de recursos el modificador de acceso en public como lo muestra esta imagen.

[URL="http://juank.black-byte.com/c-aplicaciones-multilenguaje-globalizacion-localizacion/"][IMG]http://juank.black-byte.com/wordpress/uploads/2010/08/image8.png[/IMG][/URL]

LECTURAS RECOMENDADAS

Este tema puede ir aún más allá de donde lo hemos llevado, los invito averiguar acerca de como utilizar ensamblados satélite para brindar algunas funcionalidades adicionales y que intenten utilizar la clase CultureInfo y demás relacionadas para detectar el idioma de la interfaz de usuario actual o el idioma con el cual se ha instalado el sistema operativo.

En Sistemas como Windows 7 si instalas el sistema en inglés y luego le actualizadas el lenguaje a español, algunas funciones te seguirán reportando que el idioma del sistema esta en inglés por lo que hay que hacer un trabajo adicional para detectar el idioma actual de la interfaz de usuario actual.

Pueden bajar la solución completa aquí: [URL="http://cid-3cf9030fe691dc06.office.live.com/self.aspx/.Public/Mi%20Blog/CultureExample.rar"]Articulo Aplicaciones multilenguaje ( globalización y localización )[/URL]

Espero que le puedan sacar mucho provecho.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.