Como traducir fácilmente una aplicación a otros idiomas
Hola.
Existe un Unit que permite traducir una aplicación a otros idiomas de forma muy sencilla y rápida. Es IniLang vs. 0.9. Se encuentra en http://www.torry.net/pages.php?id=273 y aparece como un componente (realmente es un Unit) para Delphi 4. Al ser de 1999 y aparecer como para Delphi 4, seguramente muchas personas lo desestimarán. Sin embargo, creo que es una joya. Funciona bien en Delphi 4, 5, 6 y 7; quizás también lo haga en versiones posteriores. Traduce los caption, los hint, las líneas de memos y richedit, las constantes de texto, etc. y permite cambiar de idioma en ejecución. Para utilizarlo, primero se añade IniLang.pas a la aplicación, todos los form que tengan componentes que deban ser traducidos deben incluir IniLang en el Uses. Luego se guardan todas las constantes de texto en un Unit específico. Después se añade la llamada al procedimiento "Fillcustomini", que crea el archivo INI (custom.ini) con los datos de todos los componentes de todos los form y con los datos de todas las constantes de texto. Y ya está hecho el trabajo. Finalmente se traduce el texto del archivo creado (custom.ini) y se guarda con el nombre del nuevo idioma. Se añade al programa una llamada a ese archivo y unos pocos detalles más. Incluye un ejemplo bastante claro. Aclarar que seguramente no funcionará con idiomas como el árabe, el japonés, etc. El componente comete uno o dos errores que se resuelven con unas modificaciones que están incluidas en IniLang2. Todo ello se encuentra en el archivo de descarga que aparece en mi mensaje del día 30-04-2010. En ese archivo la unit se llama IniLang2 y sustituye a IniLang. Y aquí van algunas recomendaciones de uso: - El ejemplo incluido es muy claro. - Los nombres de los componentes deben ser diferentes de los caption, pues si son iguales, los caption son ignorados por INILang2. - Para que un componente sea ignorado por INILang2, su nombre debe comenzar por "out"; por ejemplo, "outLabel1". - Cuando se va a crear el archivo "custom.ini" con el procedimiento "Fillcustomini" hay que asegurarse antes de que todos los form están cargados en memoria. Es decir, que en menú Project/Options.../Forms (pestaña) todos los forms están en el cuadro de la izquierda (Auto-create forms). Si alguno está en el cuadro de la derecha (Avalaible Forms), sus datos no se incluirán en el archivo "custom.ini". - Cuando se ejecuta el programa desde Delphi (con F9) para crear el archivo "custom.ini" (con el procedimiento "Fillcustomini" ), aparece un error al leer las constantes, y no se crea el archivo "custom.ini" de forma completa. Para solucionarlo, hay que compilar con Ctrl-F9 y luego ejecutar el programa desde el navegador de windows. - Para obtener el texto de una constante de texto (por ejemplo, una cuyo nombre sea "Form1_01") hay que utilizar la función "misc( , )", que recibe 2 parámetros. De esta manera: "misc(Form1_01,'Form1_01')". Un ejemplo sería: showMessage( misc(Form1_01,'Form1_01') ); - Importante: Este error se encuentra en IniLang, pero está resuelto en IniLang2. En el código del programa (después de "implementation") no pueden haber líneas que, después de eliminar los espacios en blanco (con Trim() ), se inicien con alguno de estos 3 caracteres (# ' +) . Si hay líneas que se inicien con alguno de estos 3 caracteres (# ' +), IniLang las confundirá con constantes de texto que contienen varias líneas y se producirá un error al crear la sección [Misc] del archivo "Custom.ini" Un ejemplo de esto sería: Label3.caption := Label1.caption + Label2.caption ; La segunda línea ( "+ Label2.caption ;" ) producirá un error cuando INILang vaya a crear el archivo "Custom.ini". Si es necesario que existan estas líneas, el autor recomienda esta solución utilizando las llaves de comentarios para evitar que, tras usar Trim(), "+" sea el primer caracter de la línea y respetando el código: Label3.caption := Label1.caption {} + Label2.caption ; Como ya se mencionó, este error no aparecerá en IniLang2. El cambio, es decir, el añadir los comentarios "{}" lo realizará automáticamente el procedimiento "Before_SearchStr". Esa es la mejora principal que aporta INILang2 0.9 . Debido a estos cambios (añadiendo "{}"), después de ejecutar el programa, Delphi le anunciará que aquellos archivos modificados (que estuvieran cargados por Delphi) han sufrido cambios y le preguntará si deben ser leidos de nuevo. - Es recomendable borrar el fichero "custom.ini" antes de utilizar la función "Fillcustomini". Por ello, IniLang2 incluye este proceso al inicio del procedimiento "Fillcustomini". Salu2. Ramón Localización, traducción. |
Gracias
Se agradece el mini-tutorial. :)
|
La verdad es que, con lo útil que me pareció IniLang (después de investigar otras 10 ó 12 opciones) y con todo lo que he aprendido de este foro y todas las ayudas que he recibido en él, me sentí casi obligado a compartir esta información con quien la pudiera utilizar.;)
Salu2. Ramón. |
Cita:
|
1 Archivos Adjunto(s)
Maxium, gracias por el enlace al tutorial de Neftali. Y mis felicitaciones a Neftali por la calidad y claridad de su tutorial.
Hace un tiempo también encontré el GNU Gettext pero, como ya había probado IniLang anteriormente (y conocía su facilidad de uso), deseché GNU Gettext porque me pareció muy complicado el proceso que exige, aunque no llegué a probarlo. Gracias a la guía de Neftali y a tu recomendación, me animé a probarlo y se confirmó mi impresión inicial: para mí, GNU Gettext exige un proceso (bastante) más laborioso que IniLang. Sin embargo, ofrece más posibilidades que IniLang, como utilizar Google para hacer la traducción (lo vi en un menú, no lo he probado) o trabajar con textos en Unicode (también visto, pero no probado) y seguro que muchas más. A pesar de ello, si se trata de hacer una traducción a idiomas que utilizan el alfabeto europeo occidental (español, inglés, francés, alemán, catalán, gallego, euskera, etc.), creo que IniLang es mucho más rápido y sencillo de usar. He modificado mi primer comentario de este hilo, donde explico como usar IniLang para actualizar cosas que antes no estaban incluidas. Por ejemplo, he retirado el código en Delphi (porque ya está incluido en el zip de descarga), lo demás son cambios en los comentarios. He intentado ponerme en contacto con el autor de IniLang, pero su correo electrónico no existe (tiene más de 10 años). Y creo que IniLang es una aportación demasiado buena como para que quede olvidada por las personas que podrían beneficiarse de ella. IniLang no se puede actualizar (en torry.net) porque no soy el autor original. Por ello, he pensado en incluir todos estos cambios y enviarlos a torry.net como un nuevo componente, que se llamaría IniLang2. Para hacerlo pido ayuda a otros miembros del foro porque, aunque he podido probar IniLang en Delphi 5, 6 y 7 (el autor ya la hizo en Delphi 4) y sería interesante probarlo en Delphi 2005, 2006, 2007, 2009 y 2010. Incluyo un archivo zip de descarga en el que se incluye todo lo necesario para hacer la prueba. Basta con cargar el proyecto en Delphi, compilar con Ctrl-F9 y ejecutar el programa desde el navegador de Windows. ¿Qué hay que probar?. Pues 2 cosas: 1- Que el archivo "custom.ini" (lo creará el programa al hacer clic en el botón 'Crear "Custom.ini" (FR)' o 'Create "Custom.ini"') es igual que el archivo 'Custom_muestra.ini' que se incluye en el archivo zip. 2- Que el programa permite cambiar de idioma los caption de los botones, etiquetas, etc. Haciendo clic en los botones 'Français/French' y 'Anglais/English'. Si lo pruebas, incluye en este hilo el resultado como una respuesta y así podré incluir esa información para indicar las versiones de Delphi en las que funciona. La Unit 'IniLang2' incluida en el fichero zip es la versión modificada del IniLang original. Gracias de antemano. Ramón. |
A ver si durante el fin de semana o a lo más tardar el lunes le puedo echar un vistazo.
|
1 Archivos Adjunto(s)
Pues parece que funciona sin problemas en Delphi 2010. He añadido un nuevo idioma y compilado sin problemas.
|
Neftali, muchas gracias por probarlo y por tu aportación del catalán.
Bueno, parece que funciona en Delphi 2010. Vuelvo a pedir ayuda a los miembros del foro que tengan acceso a una versión de Delphi 2005, 2006, 2007 ó 2009 para que hagan la prueba que explico en mi mensaje del día 30 de Abril (hace 4 días). Como ya comenté, la intención es la de publicar IniLang2 en torry.net para que otros usuarios de Delphi puedan beneficiarse de su facilidad de uso y posibilidades. Es por ello que pido ayuda para facilitar una información lo más completa posible y poder indicar si esas versiones de Delphi funcionan bien con IniLang2. Salu2. Ramón. |
Es casi seguro que funcionando en D2010 no tendrás ningun problema en las anteriores desde D2006 hasta D2009.
|
Torry publicó IniLang2
Hola a todos/as.
Después de unas semanas de espera, Torry publicó IniLang2. Por si a alguien le puede interesar está en este enlace. Espero sea útil a mucha gente. Muchas gracias Neftali. Salu2 a to2/as. Ramón. P.D.: :rolleyes: La petición de que alguien que tenga Delphi 2006, 2007 ó 2009 lo pruebe y diga si funcionó o no, sigue en pie. Si se tuviera esa confirmación, posiblemente se podría modificar el texto en Torry acerca de qué versiones de Delphi lo pueden usar y posiblemente más personas podrían beneficiarse de su uso. ;) |
Buenas noticias.
|
Hola, y disculpen que este post es un poco antiguo, pero necesito saber como usar el componente inilang, para traducir una serie de valores de constantes de un idioma a otro que se encuentran en una units de resourcestring, por ejemplo en esta unit guardo el caption en español de un botón que se encuentra en un determinado formulario, este al crearse habre la unit de recurso para obtener el valor de la propiedad caption para el botón de comado.
|
¿Has descargado y revisado el componente? (descarga la versión 2 que aparece más arriba)
Descargalo, descomprímelo y revisa los ficheros que hay dentro. A parte de los ficheros de texto de cómo utilizarlo hay alguna demo que puedes revisar. |
Hola, gracias. ya he estado revisando los ejemplos, pero me salta una duda, sabes si acepta el idioma ruso ?
|
Cita:
¿Porqué no debería aceptarlo? |
Funciona con el ruso, pero solo cambiando la configuración regional. saludos a todos
|
Cmfab, gracias por tu aportación, y lo mismo para Neftali.
Ramón. |
Neftalí estuve revisando el tutorial sobre las GNU Gettext
dejé un post agregado sobre los menuitems porque no me funciona correctamente por ejemplo en español sería Archivo - Abrir - Cerrar en inglés sería File - Open - Close. es decir para que me entiendan mejor Abrir y Cerrar serían subitems del item principal Archivo. sin embargo nunca traduce a File cuando presiono el idioma inglés siempre se mantiene Archivo que es el idioma por defecto con el que se diseñó la pequeña aplicación de prueba. saludos y gracias a todos |
Si tengo un hueco lo probaré. No recuerdo que me pasara nada raro y lo he utilizado con menús. :confused::confused::confused:
|
Gracias por el tutorial.
Yo para mis proyectos me he creado una minilibrería de funciones que me hace la función de traductor en unicode. Aquí os dejo una función de autodetecta los ficheros .ini que sean de idioma que haya en un directorio determinado de la aplicación.
Espero que os sirva. Luego solo hay que crear el procedimiento "IDI_cambia_idioma" y leer las cadenas del fichero de idioma asignado y cambiarla a los componentes y cadenas del programa. |
Hola compañeros,
He implementado algunas modificaciones al IniLang2, que amplian el abanico de componentes que permte traducir (DBgrid, Panel, TabControl) dejo el codigo para quien lo quiera utilizar: Código:
{ This is a text added for IniLang2. Saludos, |
Da error en esta línea:
No se si puede haber sido un problema con las etiquetas al poner el mensaje. Tal vez sea mejor que subas el PAS como archivo adjunto. AÑADO: Hay algun error más, como si faltase parte del código; Por ejemplo, no hay definición para: strList |
Hola Neftali,
He subido el fichero .pas pruebalo ahora, deberia funcionar. Saludos. |
1 Archivos Adjunto(s)
Perdon, perdon..... Ahora si esta subido el archivo. Es un archivo .zip pero realmente es un .rar (no me dejaba subirlo)
Saludos, |
Ok. Gracias.
Ahora compila y funciona perfectamente. |
Hola.
Bueno, me he llevado una alegría porque estoy preparando una actualización para IniLang2 que aparecerá en breve. Por mi parte, una mejora es que leerá las líneas de los ListBox, pero hay algún detalle más... del que por ahora no quiero hablar. Y...¡sorpresa!, alguien más ha trabajado en la misma dirección (y de forma complementaria), pues ¡genial!. Bueno, aprovecho para pedir cosas... Toni ¿Me autorizas a incluir tus modificaciones en la nueva versión?. Si quieres ser citado como colaborador, por favor, dime también los datos tuyos que quieres que aparezcan. Neftali ¿Me autorizas a incluir la traducción que hiciste al catalán en el ejemplo que incluí aquí hace meses?. Si quieres ser citado como colaborador, por favor, dime también los datos tuyos que quieres que aparezcan. Salu2. |
Hola Rrf,
Por mi parte puedes darle el uso que quieras. Para eso lo he subido al foro. Las modificaciones que yo le he realizado son minimas pero creo que necesarias porque sino estaba muy limitado en los controles que traducia. Tengo pendiente otro pequeño cambio interesante, pero siempre siguiendo la linea del 'proyecto' inicial. Que creo que es muy simple pero a la vez practico y util. saludos. Nota: Creo que si seria interesante ponerle un numero de subversion para no liarnos, si vamos añadiendo cosas. |
Cita:
Cita:
Cita:
Cita:
Salu2. |
Hola rrf, no, no hace falta que me pongas como colaborador. Pero si que me gustaria que cuando la tengas nos digas que novedades incluye.
Nota: si, me refereia a eso mismo lo de la version. |
Hola de nuevo.
Por fin llegó la nueva versión de IniLang2. Será la 0.9.03 . Incluye algunos cambios menores que no vale la pena mencionar y, como cambios interesantes está el que ahora también lee los textos de los DBGrid, los PageControl y los ListBox. Bueno, también se incluye un nuevo ejemplo con las versiones antes y después de aplicar IniLang2, y un par de textos con explicaciones de uso. Pero ninguna de esas es la mejora más importante de esta versión (al menos desde mi punto de vista). La mejora más importante es que se acompaña de Utili_IniLang2, que es una utilidad que facilita (mucho) la adaptación de una aplicación para que utilice IniLang2. Casi todo lo que hay que hacer para usar IniLang2 lo hace Utili_IniLang2 y a base de unos pocos clic. Ahora, en la mayoría de los casos, lo más complicado para adaptar una aplicación es asegurarse de que las constantes están bien declaradas con relación a como las interpreta IniLang2. El resto se hace en unos pocos minutos (dependiendo del tamaño de la aplicación) y con bastante poco esfuerzo. Aclaro que la versión no es definitiva en cuanto a la presentación. Por ej. hay textos que no están completamente traducidos, hay varios detalles que habría que modificar, etc. Pero está completa en cuanto a lo que se espera que sea la versión pública, al menos en lo importante. Lo he puesto a descargar en un lugar externo al foro para no reducir mucho la capacidad de subir archivos al foro por mi parte. ESTÁ EN ESTE ENLACE. Me da problemas para acceder a esa descarga. Pongo aquí el enlace directamente, porque en la redacción del mensaje me daba problemas para acceder a la descarga: www.inilang2.000a.biz/inilang2.zip (Basta con copiar el enlace y pegarlo en un navegador de internet y se puede descargar sin problemas. Lo probé en Firefox) Cualquier aportación, opinión, sugerencia, crítica, etc. será bienvenida. Saludos. |
Hola otra vez.
Les informo que ya está disponible la versión 0.9.04 de IniLang2. Sobre la anterior versión, incluye el trabajar con más componentes y con las propiedades text de diferentes componentes. También incluye mejoras y corrección de errores de la anterior versión. Ahora se automatiza casi totalmente la adaptación de una aplicación a usar IniLang2, utilizando la utilidad Utili_IniLang2. Además, se mejoraron los textos explicando su uso. Por último, incluye un editor sencillo que facilita la edición de los archivos *.ini con los textos traducidos. Todo ello está descargable desde LA PÁGINA DE INILANG2. Creo que la facilidad que ofrece ahora, para hacer una aplicación multiidiomas, es muy grande. Aunque, como se suele decir, "el ojo del amo engorda el caballo...". Saludos. |
Hola Ramón.
Buen trabajo con este componente. Si me permites algunos comentarios acerca de él, espero que los aceptes de buen grado. El primer vistazo que le he echado a la aplicación da una buena impresión, pero al intentar extraer constantes de un proyecto me he devuelto que no encontraba nada. :( Revisando un poco he visto que es porque: * Las constantes de IMPLEMENTACIÓN no las acepta (esto le he visto luego en la documentación). * Las constantes definidas con un espacio a los lados del = tampoco. Esta tal vez es un poco más grave ya que en mi caso siempre las coloco así (tal vez otras personas también). No he revisado a fondo la documentación, pero seguro que debe estar también. Tal vez intentaría mejorar este reconocimiento. En cuanto a la utilidad he detectado algunos pequeños detalles que se pueden corregir. * En el editor de la última pestaña si se pudieran añadir columnas para editar más idiomas sería muy bueno. * Al grabar con F5 no graba utilizando la extensión del cuadro de diálogo. * En algun momento me crea un fichero CUSTOM.INI de idioma que no comprendo de dónde sale, aunque el código insertado en el formulario parece correcto: . Otra cosa a mejorar, es que si no se copian los ficheros INI junto con el EXE (por ejemplo, los que acompañan a la utilidad Utili_IniLang2.exe) en pantalla aparacen las constantes completas. Tal vez habría que retocarlo para que aparecieran sólo las originales (en caso de que falten los ficheros). Otra mejora creo que sería la posibilidad de que los ficheros estuvieran en un directorio (no se si ahora se puede configurar fácil). Tengo un par de proyectos pendientes; A medida que lo vaya utiliznado ya te iré comentando. Gracias de nuevo y enhorabuena por el trabajo realizado. Un saludo. |
Hola Neftali.
Gracias por tus opiniones y sugerencias. Te contesto algunos detalles. Cita:
Cita:
Cuando no se incluyen los ficheros INI, la aplicación presenta el contenido de los caption, hint, etc. que tiene. Cita:
Cita:
Cita:
Cita:
Cita:
Y también sugerirte que dediques un rato a leer los textos con las explicaciones y comentarios, no solo los de IniLang2, sino también los del autor original de IniLang. Es poco texto y creo que sería un esfuerzo bien invertido. Neftali, gracias por tus aportaciones. Saludos. |
Cita:
Cita:
Cita:
Cita:
Simple comodidad, nada importante. Un saludo. |
Hola otra vez.
Con relación a lo comentado en el hilo por Neftali: Cita:
Permite hacer búsquedas y sustituciones de texto solo en la parte del texto donde se declaran las constantes (antes y/o después de "implementation") y lo hace en todos los Unit de la aplicación; lo que creo que simplifica bastante el adaptar las constantes. También incluye la posibilidad de hacer búsquedas y sustitución en todo el código de la aplicación. Estas mejoras ya se pueden descargar desde http://www.inilang2.000a.biz/ Saludos. |
Hola otra vez.
Les informo de que ya está disponible una nueva versión de IniLang2 en la página web de descarga. Es la 0.9.08 y la Unit IniLang2 tiene solo 1 mejora. Sin embargo, los programas que le acompañan (Utili_IniLang2 y Edit_ini) si que tienen muchas mejoras. Utili_IniLang2 ahora diferencia, en los archivos *.pas, los que pertenecen a un Form a un Datamodule o son un Unit, se ha reestructurado la presentación de las opciones del programa para que sigan el proceso de traducir una aplicación, se ha incluido la opción de reemplazar texto en el código de una aplicación eligiendo en qué partes de la aplicación se actúa, se ha mejorado la "automatización" del proceso de insertar IniLang2 en una aplicación y más mejoras que no me vienen ahora a la mente. Edit_ini ofrece bastantes mejoras con respecto a la anterior versión pública. Pero la más interesante (al menos para mí) es la de permitir hacer automaticamente la traducción de los textos de una aplicación (guardados a un fichero INI con IniLang2) usando Google Traslator. Se pudo hacer GRACIAS AL EJEMPLO OFRECIDO EN ESTE HILO. Ahora es bastante más fácil y rápido adaptar una aplicación para que pueda utilizarse en diferentes idiomas. Si lo pruebas, es muy recomendable que leas (aunque sea superficialmente) la documentación. Hay una guía que explica, paso por paso, lo que hay que ir haciendo y está adaptada al programa Utili_IniLang2. La documentación está en español y en inglés. Todo lleva el código fuente incluido y se permite utilizarlo libremente, incluso para desarrollar programas comerciales. Si usas Delphi 2006, 2007, 2009 ó XE y lo pruebas, te agradecería que me comentaras si te ha funcionado bien. Pues así podré informar si funciona correctamente en esas versiones de Delphi. LA PÁGINA WEB DE DESCARGA ES ESTA. Cualquier aportación, comentario y/o crítica será bienvenida. Saludos. |
Buena noticia.
Sólo comentarte que actualmente la página "está en OFF" y no es posible descargar el componente. Un saludo. |
Bueno, ya la página funciona y permite la descarga.
Aprovecho (ayer lo olvidé) para añadir que, siguiendo la sugerencia de Neftali, ahora IniLang2 es menos exigente al leer las constantes de texto en la aplicación. Saludos. |
La franja horaria es GMT +2. Ahora son las 01:46:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi