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

Aplicación con diferentes idiomas.

Estas en el tema de Aplicación con diferentes idiomas. en el foro de .NET en Foros del Web. Hola foreros. Alguien sabe como crear una aplicación multilenguaje? Tengo un menu donde tengo una opcion Idioma donde puedo elegir entre 3 idiomas, me gustaria ...
  #1 (permalink)  
Antiguo 09/03/2008, 10:16
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 6 meses
Puntos: 3
Aplicación con diferentes idiomas.

Hola foreros. Alguien sabe como crear una aplicación multilenguaje? Tengo un menu donde tengo una opcion Idioma donde puedo elegir entre 3 idiomas, me gustaria que al apretar sobre alguno me cambie el idioma de todos los textos de la aplicación. Algun ejemplo? Como lo puedo implementar?

Un saludo y gracias
  #2 (permalink)  
Antiguo 09/03/2008, 10:30
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Aplicación con diferentes idiomas.

http://www.codeproject.com/KB/cs/mul...lications.aspx

revisa ese ejemplo basico

Pues requieres crear Assemblies Satelites para hacer ello.
No es nada que un archivo de recursos por idioma.

Y de ahi asingar con los DataBids a cada control cada propiedad q requiera el idioma.

saludos
peter
  #3 (permalink)  
Antiguo 09/03/2008, 11:03
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 6 meses
Puntos: 3
Re: Aplicación con diferentes idiomas.

Gracias por tu rápida contestación. Revisare el link y haver si me salgo con la mia :)

Unm saludo!
  #4 (permalink)  
Antiguo 10/03/2008, 11:42
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 6 meses
Puntos: 3
Re: Aplicación con diferentes idiomas.

Hola de nuevo! Eso sirve para un win forms hecho en VB .NET 2003? He probado de implementarlo pero me salen errores por todas partes.. Te explico mejor, tengo un menu en el que hay una pestaña idioma y tengo diferentes opciones, me gustaria que al apretar en algun idioma me traduzca toda la aplicación. He visto también que se puede hacer con un XML pero todo lo que consigo de ejemplos no me ha funcionado. Alguna idea?

Saludos y gracias de nuevo
  #5 (permalink)  
Antiguo 10/03/2008, 17:35
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 17 años, 6 meses
Puntos: 3
Re: Aplicación con diferentes idiomas.

He encontrado un ejemplo que utiliza una bbdd access, el problem es que esta en VB 6. En el siguiente enlace está el ejemplo:

http://www.recursosvisualbasic.com.a...je-con-ado.htm

Yo lo he intentado adaptar para utilizarlo en .NET, el resultado es el siguiente:
Cita:
Sub Cargar_Valores(ByVal Lenguaje As String)

Dim seleccion As String
Dim scnn As String
Dim El_Control As Control
Dim i As Integer
scnn = "DSN=Access-vb;DBQ=" & Application.StartupPath & "\idiomas\language.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
seleccion = "SELECT * FROM language WHERE Idioma=" & Lenguaje & ""
da2 = New OdbcDataAdapter(seleccion, scnn)
dt2 = New DataTable
'da2.Fill(dt2)
For i = 0 To dt2.Columns.Count - 1
'Hace referencia al formulario
If dt2.Columns("NombreControl").ColumnName.ToString = El_Control.Name Then
El_Control.Text = dt2.Columns("CaptionDelControl").ColumnName.ToStri ng
Else

El_Control = Me.Controls(dt2.Columns("NombreControl").ColumnNam e.ToString)

' Agregar mas controles si es necesario
If (TypeOf El_Control Is Label) Or _
(TypeOf El_Control Is GroupBox) Or _
(TypeOf El_Control Is CheckBox) Or _
(TypeOf El_Control Is RadioButton) Or _
(TypeOf El_Control Is Menu) Or _
(TypeOf El_Control Is Button) Then

'Asigna el caption
El_Control.Text = dt2.Columns("CaptionDelControl").ColumnName.ToStri ng

ElseIf (TypeOf El_Control Is TextBox) Then
'si es un textbox, RichTexbox etc...
El_Control.Text = dt2.Columns("CaptionDelControl").ColumnName.ToStri ng
Else
'Error
MsgBox("Error: " & Err.Description, vbCritical)
End If
End If
Next

End Sub
Como podreis imaginar no funciona. Como hago para recorrer todos los controles del formulario?

If dt2.Columns("NombreControl").ColumnName.ToString = me.Name Then
me.Text = dt2.Columns("CaptionDelControl").ColumnName.ToStri ng

Como veis necesito decir que si el nombre del control en la bbdd es igual al control del formulario me cambie el text de este control por el de la base de datos. El error esta en el "me" no sé como decir que me coja los controles del formulario, de esta manera me esta haciendo Form1.name y necesito por ejemplo que haga Label1.Name, etc.. asi con todos los controles..

Alguna solución?

Gracias
  #6 (permalink)  
Antiguo 30/08/2010, 08:34
Avatar de JuanKSolocodigo  
Fecha de Ingreso: agosto-2010
Ubicación: Colombia
Mensajes: 2
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Aplicación con diferentes idiomas.

Hola ha pasado tiempo 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 06:16.