PDA

Ver la Versión Completa : Multi-idioma en Delphi 7


Titanio Verde
25-04-2007, 13:25:45
Buenos días. He retomado la programación recientemente en Delphi (aunque antes no tenía apenas nivel... y sigo sin tener mucho ^^u). Espero no ser de mucha molestia para ustedes, expertos. Y perdón si no escribo en la sección correcta.

Estoy metido en un par de programillas muy básicos, y lo que me trae de cabeza es mantenerlos en dos idiomas (castellano e inglés, por ahora).

De momento lo que he hecho ha sido tener dos proyectos separados, uno en cada idioma. Acabo de descubrir que con Delphi 7 se puede tener un proyecto traducido a varios idiomas, pero no acabo de entender cómo funciona.

¿El idioma del proyecto cambia según el idioma del sistema operativo? (Supongo que será lo lógico) O ¿cómo se puede elegir el idioma dentro del mismo programa (mediante un menú, por ejemplo)? O sino, ¿hay algún tipo de compatibilidad con los archivos PO?

Otro punto que me preocupa sobre esto es que no consigo traducir los botones mbYes y mbNo en una ventana de diálogo.

Gracias por su paciencia.

dec
25-04-2007, 14:05:51
Hola,


O sino, ¿hay algún tipo de compatibilidad con los archivos PO?


Ahí quería yo llegar. Afortunadamente también contamos con GetText (http://www.gnu.org/software/gettext/), de la mano de DXGetText (http://dybdahl.dk/dxgettext/), por lo que podrás valerte, entre otras cosas, de los archivos ".po", ".mo" y editores como PoEdit (http://www.poedit.org/).

Respecto de la última cuestión... me temo que una solución podría pasar por utilizar otro tipo de diálogo. O bien construyes tú mismo un diálogo partiendo de un formulario y lo adaptas a tus necesidades, o bien, si no estoy equivocado, puedes usar los "Application.MessageBox", puesto que de la localización de los botones de estos diálogos se encarga el propio Windows.

Pero no sé hasta qué punto no te resultará mejor construir tus propios diálogos, puesto que si tu aplicación permite cambiar el idioma de la aplicación "cuando se quiera", los diálogos de "MessageBox" seguirían estando en el lenguaje "del sistema". Pero, vamos, creo que lo de los diálogos es un "mal menor" si se pretende usar algo como DxGetText.

Otra cosa más es que Delphi incorpora su propia "forma" de localizar programas. Sin embargo no puedo comentar nada de esta forma, puesto que nunca la utilizé. Sólo sé que existe algo así. Como también sé que existen no pocos intentos de montar un "framework" para localizar aplicaciones en Delphi. La Jedi Library (http://www.delphi-jedi.org/), por ejemplo, incorpora clases y componentes para esta tarea. Pero hay más aún.

Sin embargo, el que DXGetText pueda aprovecharse de POEdit, por ejemplo, ya es una ventaja muy difícil de igualar, en mi opinión. :)

Titanio Verde
27-04-2007, 14:50:26
Bueno, el PO me vendrá estupendo cuando monte alguna aplicación que merezca la pena estar en muchos idiomas, y dejase sitio para traductores aficionados.
Y DXGetText no tiene mala pinta. Gracias por la sugerencia.

He probado, con las herramientas de traducción de Delphi 7, a darle dos idiomas a una de mis aplicaciones, dejando el inglés de Estados Unidos (ENU) como base, y el español de alfabetización internacional (ESP) como alternativo. Pero la aplicación me sale en inglés (más o menos me lo esperaba).

Esto me recuerda un poco a un programilla que probé hace tiempo, ÜberIcon (http://www.punksoftware.com/ubericon), cuyo único menú contextual era también multi-idioma, y se supone que detectaba automáticamente el idioma del sistema operativo. Pero me salía en inglés, y tenía que elegir yo el español de alfabetización tradicional.
Por cierto, creo que los idiomas estaban en archivos INF.

La cuestión es que... ¿nadie ha usado las herramientas de traducción de Delphi 7? ... De algo servirán, supongo.

dec
27-04-2007, 18:00:01
Hola,


La cuestión es que... ¿nadie ha usado las herramientas de traducción de Delphi 7? ... De algo servirán, supongo.


En estos Foros es ha tratado alguna vez este tema, aunque, reconozco que si tuviera que empezar la localización de una aplicación con las herramientas del propio Delphi me vería obligado a buscar ejemplos, información, etc.

Lo que sí puedo decir es que hay no pocos intentos de solución para la localización de un programa desarrollado en Delphi: completas librerías de componentes, uso de archivos XML, INI, etc., usar DxGetText... en fin, que por algo debe ser esto también...

Intuyo que a las herramientas de Delphi les falta "algo" que tratan de aportar tantas herramientas como hay para la localización de una aplicación, pienso que sino fuera así, ¿para qué iba nadie a molestarse en reinventar la rueda cuando algo funciona bien?

Pero, ya estoy adelantando más de la cuenta: ya he dicho que no conozco bien cómo se supone que hemos de trabajar con Delphi para localizar aplicaciones: insisto en que en estos Foros se ha tratado sobre el tema. Espero que puedas encontrar más información aquí y en otros sitios.

yordan
27-11-2007, 14:53:51
Hola Dec y Todos,
uso el gettext, pero al utilizar un MessageBox tengo algun problemita de tipos aqui, solo me traduce el primer caracter, y es que el tipo que tengo en el MessageBox es PChar, y el tipo de la funcion _() es WideString, luego en mi Messagebos lo tengo así:
IF IDYES = MessageBox(Handle,
PChar(_('Texto del Mensaje?')),
PChar(_('Atención')),...

No sé si está bien pero al menos pude traducirlo y mi .po está ok, funciona bien para un Showmessage, pero no para el MessageBox.

a ver si me dan una mano
gracias

yordan