Ver Mensaje Individual
  #9  
Antiguo 02-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Reputación: 19
jmariano Va por buen camino
Cita:
Empezado por Hugorr
Buenas,

jmariano bueno pues tenias rarón crea un archivo con extensión del idioma seleccionado caso de español (*.ESP). Ahora que ya hay cosa claras. Me gustaria meter todos esos archivo en una carpeta llamese "lang" y yo desde mi programa elegir un idioma de los disponibles y cambiarlo. Claro esta el problema que para cambiar depende del idioma del S.O. ¿Que pasa si el S.O. tiene un idioma que en la aplicación no está creado?

Si no es molestia prodrias mandarme un emplico....


Un saludo....
A tu última pregunta, si no existiera el idioma en tu aplicación, entonces, creo que no se cargará ningún archivo de recursos y tu aplicación se mostrará tal y como es originalmente.

A la cuestión de poder seleccionar el idioma en tiempo de ejecución, el problema está en que el sistema fue pensado para que el idioma se seleccionara automáticamente según el de Windows, al ejecutar la aplicación. Pero, despues de buscar un poco en la ayuda, resulta que si existe una manera (aunque es con "truco", claro, y no es algo soportado por la VCL y las funciones de Delphi). Así que te explico según lo que leí:

- Primero has de localizar una unidad llamada "ReInit.pas", forma parte del ejemplo de Delphi "Richedit" que se encuentra dentro de la carpeta "Demos". Esta unidad la has de añadir a la cláusula "Uses" de tu aplicación (lo mejor sería que la copiaras tambien a la carpeta de tu proyecto). Esta unidad es necesaria porque contiene algunos métodos que nos permitirán cambiar el idioma en ejecución.

- Por último, en el lugar donde quieras cambiar el idioma, llama a la función "LoadNewResourceModule" (pasándole como parámetro el identificador del idioma a cargar), comprueba que la función te devuelve un valor distinto de 0 (si devuelve 0 es que el idioma no se cargó) y, si es así, llama al procedimiento "ReinitializeForms" (este procedimiento lo que hace es volver a leer los recursos para todos los formularios ya instanciados en memoria). Una vez que hayas hecho todo (y si fue bien), verás que, a partir de ahora, todos tus formularios, mensajes, etc., son presentados en el idioma seleccionado.

Te pongo el ejemplo que viene en la ayuda:

Código Delphi [-]
uses
  ReInit, ...;

const
  FRENCH = (SUBLANG_FRENCH shl 10) or LANG_FRENCH;

if LoadNewResourceModule(FRENCH) <> 0 then
  ReinitializeForms;

(En el ejemplo carga, en tiempo de ejecución, todos los recursos para el idioma francés sin importar las diferentes variantes, es decir, carga el mismo recurso para todas las variantes que hubiera del francés).

Lo único que veo dificil es saber que identificador hay que utilizar para un idioma determinado. De todas formas, puedes hacer una búsqueda por el tipo "LCID" (utilizado para especificar un idioma) y ver el tema de los identificadores válidos.

Espero que te sirva!

Saludos!

P.D: Se me olvidó comentarte que si colocas los archivos de recursos en otra carpeta distina a la de la aplicación, entonces, tendrás que añadir dicha carpeta al "PATH" de Windows.

Chao!

Última edición por jmariano fecha: 02-09-2005 a las 22:17:29.
Responder Con Cita