Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: AbelNightroad en 07 de Julio de 2006, 03:13:53 PM

Título: soporte para diferentes idiomas
Publicado por: AbelNightroad en 07 de Julio de 2006, 03:13:53 PM
Que sistema utilizariais para crear un programa en c# que soportase diferentes idiomas? Tal vez, un XML por idioma, con un codigo numerico por cada string?  :roll:
Título: soporte para diferentes idiomas
Publicado por: Vicente en 07 de Julio de 2006, 03:34:10 PM
La globalización que trae por defecto el Visual mete todas esas cosas en un archivo de recursos  (un resx). Te vale eso?

Un saludo!

Vicente
Título: soporte para diferentes idiomas
Publicado por: bnl en 07 de Julio de 2006, 05:43:57 PM
Yo para los textos siempre he usado ficheros de recursos.
Y los valores que se guardan en una BD (por ejemplo los elementos de un combo) los sigo manteniendo en la BD pero modificando las tablas para soportar el multilenguaje.  En //www.panoramabox.com creo que habia un articulo sobre esto.
Título: soporte para diferentes idiomas
Publicado por: Vicente en 07 de Julio de 2006, 07:46:58 PM
Hombre, los archivos de recursos están bastante bien porque no solo guardan los textos, también guardan posiciones, tamaños, etc etc. Los botones pueden variar de tamaño según el texto que lleven dentro, etc etc.

Un saludo!

Vicente
Título: soporte para diferentes idiomas
Publicado por: AbelNightroad en 07 de Julio de 2006, 09:00:59 PM
Si os referiis a este metodo:
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=211

lo he probado, pero no me acaba de convencer. Me genera una DLL para cada idioma que ademas debe de estar dentro de un directorio (a pesar de que en el recurso ponga "Recurso incrustado"). Ademas tb tiene la pega de que si quiero darle al usuario la posibilidad de poder traducirlo, no puede sin el codigo fuente. ¿alguna alternativa?
Título: soporte para diferentes idiomas
Publicado por: MA]Mestre en 08 de Julio de 2006, 05:48:32 PM
Cita de: "Vicente"Hombre, los archivos de recursos están bastante bien porque no solo guardan los textos, también guardan posiciones, tamaños, etc etc. Los botones pueden variar de tamaño según el texto que lleven dentro, etc etc.

Un saludo!

Vicente


Yo tb uso ese sistema...lo que no he logrado conseguir es cambiar de indiomas mientras se ejecuta la App. Vicente, sabes algo sobre esto ?

Un saludo.
Título: soporte para diferentes idiomas
Publicado por: zupervaca en 08 de Julio de 2006, 06:53:48 PM
El motivo de que no se pueda cambiar durante la aplicacion es que el .net el idioma es automatico si se hace con el sistema que trae el, es decir, si un italiano ejecuta la aplicacion y tu aplicacion da el soporta para idioma italiano, esta persona lo vera directamente en italiano, si es frances pues frances, etc. (siempre que hableis de .net claro)

Si es para vc++6.0 tienes esta solucion:

HINSTANCE hInst = LoadLibrary( szIdiomaDLL );
if( hInst != NULL )
{
afxCurrentResourceHandle = hInst;
}

Este codigo te cambiara todos los recursos de la aplicacion a los de la dll, este sistema es el que usaba para el wic messenger.
Título: soporte para diferentes idiomas
Publicado por: MA]Mestre en 08 de Julio de 2006, 07:56:22 PM
Desde .NET se puede cambiar "el idioma" recorriendote con un bucle todos los controles y accediendo al recurso pertinente para cambiarle el .text

Esa es la forma q empleo, pero buscaba otra más elegante, supongo q .NET debe prever esta situación y debe tener un CambiameElIdiomaPorElMorro (NuevoIdima)
Título: soporte para diferentes idiomas
Publicado por: Diferencial en 08 de Julio de 2006, 08:10:49 PM
Pues yo he visto una forma de hacer ese cambio, lo vi creo que en la página del guille  :(  lo que no recuerdo como era. Pero sé, que no era recorriendote los controles.
Título: soporte para diferentes idiomas
Publicado por: fiero en 08 de Julio de 2006, 08:20:10 PM
Cita de: "zupervaca"El motivo de que no se pueda cambiar durante la aplicacion es que el .net el idioma es automatico si se hace con el sistema que trae el, es decir, si un italiano ejecuta la aplicacion y tu aplicacion da el soporta para idioma italiano, esta persona lo vera directamente en italiano, si es frances pues frances, etc. (siempre que hableis de .net claro)

Si es para vc++6.0 tienes esta solucion:

HINSTANCE hInst = LoadLibrary( szIdiomaDLL );
if( hInst != NULL )
{
afxCurrentResourceHandle = hInst;
}

Este codigo te cambiara todos los recursos de la aplicacion a los de la dll, este sistema es el que usaba para el wic messenger.

En VC++ 6.0  funciona tambien automático, simplemente se hacen más copias de los recursos, poniendo la misma ID, pero cambiando el idioma del recurso (en el combo que hay debajo de la ID)

un saludo
Título: soporte para diferentes idiomas
Publicado por: zupervaca en 08 de Julio de 2006, 09:17:02 PM
En el wic messenger lo tuve que hacer asi ya que de esta manera solo descargabas la dll del idioma, cosas del tamaño de descarga.
Título: soporte para diferentes idiomas
Publicado por: AbelNightroad en 08 de Julio de 2006, 09:18:37 PM
Cita de: "Diferencial"Pues yo he visto una forma de hacer ese cambio, lo vi creo que en la página del guille  :(  lo que no recuerdo como era. Pero sé, que no era recorriendote los controles.

Debe de ser esto:
http://www.elguille.info/colabora/NET2006/miliuco_web2.htm
Título: soporte para diferentes idiomas
Publicado por: AbelNightroad en 08 de Julio de 2006, 09:21:18 PM
Y digo yo... no seria una mejor idea un ficherito de texto plano ( utf-8 ) con un código numerico y una string por linea? No se,,.... lo de una .dll me parece absurdo... esperaba que en c# se usase un .xml o algo asi...  :?
Título: soporte para diferentes idiomas
Publicado por: zupervaca en 08 de Julio de 2006, 11:44:56 PM
En csharp puedes usar el sistema nativo que explique antes:

(http://img136.imageshack.us/img136/6214/dibujo1ar.th.jpg) (http://img136.imageshack.us/my.php?image=dibujo1ar.jpg)
Título: soporte para diferentes idiomas
Publicado por: Warchief en 09 de Julio de 2006, 01:24:58 AM
Recientemente hice unas pruebas para cambiar idiomas con ficheros .ini (eran en C++/MFC, no C#, pero supongo que sirve igual).

Más o menos:
Ignora por completo los mecanismos de Microsoft, pero es lo que yo quería.
Título: soporte para diferentes idiomas
Publicado por: Vicente en 09 de Julio de 2006, 01:42:34 AM
Esto... en .NET es bástante más fácil que hacer lo de los controles de MA]Mestre u otras cosas que comentáis (en un formulario).

Los formularios tienen una propiedad que es Localizable y otra que es Language. Esto hace que todas las cosas que se hagan (textos, posiciones, tamaños, etc etc), se localicen para la cultura seleccionada. Si se selecciona otra cultura, pues todo lo que se haga es para esa otra cultura, etc etc.

Luego la aplicación mira el idioma del SO y según eso lanza la aplicación con una cultura u otra. Supongo que si cambias la cultura a mano desde el código cargará los recursos adecuados también (algo parecido al CambiameElIdiomaPorElMorro (NuevoIdima) que comentaba MA]Mestre).

Un saludo!

Vicente
Título: soporte para diferentes idiomas
Publicado por: fiero en 09 de Julio de 2006, 08:15:00 AM
Cita de: "AbelNightroad"Y digo yo... no seria una mejor idea un ficherito de texto plano ( utf-8 ) con un código numerico y una string por linea? No se,,.... lo de una .dll me parece absurdo... esperaba que en c# se usase un .xml o algo asi...  :?

Se suelen utilizar DLL porque hay que almacenar recursos enteros, es decir, no solo las  cadenas de texto, sino botones, menus, diálogos... Ya que la longitud de las cadenas de texto varía con cada idioma y si haces solo un cambio del texto te pueden salir todos los botones con el texto cortado. Pero vamos, si lo haces "a pelo", cambiando los textos de los recursos uno a uno te lo puedes currar como quieras...

De todas formas, en el caso del fichero de texto, mejor utilizar Unicode, por si te da por traducirlo a alguna cosa rara.

un saludo
Título: soporte para diferentes idiomas
Publicado por: fiero en 28 de Julio de 2006, 02:36:17 AM
Por comentar mi caso particular. Llevaba un tiempo re-convirtiendo todo mi código para soportar Unicode. Hace dos dias por fin acabé de adaptar todo el código. Yo me he decidido por utilizar ficheros de texto en Unicode, ya que solo uso menús y tooltips en mi aplicación, nada de diálogos. He cogido todos los textos que aparecen en mi programa y los he metido en un fichero de texto, después lo incluyo directamente en el programa como un resource. Hice una petición en un foro especializado y en un dia tengo el programa traducido a 8 idiomas. Incluir un nuevo fichero me lleva un par de minutos.

Según como sea la aplicación y el número de idiomas que tengas pensado meter, este sistema de ficheros de texto me parece perfecto. Claro que yo no tengo diálogos con botones que se puedan descuadrar. Esta es mi aplicación, es un visor panorámico, lo mismo que mi plugin si lo habeis vito, pero en modo local: http://www.devalvr.com/descargas/dps/playerUnicode.zip y los ficheros que me ha ido mandando la gente: http://www.devalvr.com/fiero/translations.zip

En el menú contextual he incluido un submenú para cambiar de idioma. Lo hago como se comentó por aquí, recorriendo todos los controles, no es nada engorroso, con un par de "for" en la mayoría de los casos está hecho.

un saludo
Título: soporte para diferentes idiomas
Publicado por: AbelNightroad en 28 de Julio de 2006, 02:14:44 PM
Al final estoy usando el fichero plano, y creo que para lo que estoy haciendo va bien. No tengo previsto un numero de traducciones en concreto; de "serie" me conformo con ingles y español.