Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





soporte para diferentes idiomas

Iniciado por AbelNightroad, 07 de Julio de 2006, 03:13:53 PM

« anterior - próximo »

AbelNightroad

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:
bel Nightroad (a.k.a. Lord Trancos)

Vicente

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

bnl

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.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

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

AbelNightroad

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?
bel Nightroad (a.k.a. Lord Trancos)

MA]Mestre

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.

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.

MA]Mestre

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)

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.
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.

fiero

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
www.videopanoramas.com Videopanoramas 3D player

zupervaca

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.

AbelNightroad

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
bel Nightroad (a.k.a. Lord Trancos)

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...  :?
bel Nightroad (a.k.a. Lord Trancos)

zupervaca

En csharp puedes usar el sistema nativo que explique antes:


Warchief

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:

  • Cada contenedor se crea heredando de interfaz ITraducible, que tiene el método ActualizarTraduccion();
  • Un Singleton mantiene el acceso al ini actual, teniendo como método GetMensaje( clave );
  • Las traducciones se indexan en el ini con "clave = valor en este idioma"
  • Cuando se cambia el idioma, se llama a ActualizarTraduccion() para cada contenedor, que debe llamar a ActualizarTraduccion() de cada contenedor hijo, así como a sus componentes, quendando al final métodos como:

    ActualizarTraduccion() {
     m_labelX1.SetText( SingletonTraductor.GetMensaje( clave1 );
     m_labelX2.SetText( SingletonTraductor.GetMensaje( clave2 );
     m_contenedor1.ActualizarTraduccion();
    }

Ignora por completo los mecanismos de Microsoft, pero es lo que yo quería.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.