[caracas-pm] Re: [l-desarrollo] Internacionalización en Perl

Ernesto Hernandez-Novich emhn at telcel.net.ve
Tue Sep 7 21:10:50 CDT 2004


On Tue, 7 Sep 2004, Jorge Guerra wrote:
> Actualmente estoy trabajando en mi tesis de pregrado en la cual tengo
> código en java, lisp y perl.  Uno de los requerimientos del compilador
> que estoy desarrollando es que sea "internacionalizable".  Esto lo he
> logrado en java colocando todos los mensajes del compilador en un
> archivo externo el cual lleva como subfijo las primeras dos letras que
> identifican una localidad (locale), este archivo es manejado por la
> clase java.util.ResourceBundle que se encarga de obtener el archivo
> correcto de acuerdo a la localidad del sistema, ej. Syntax_es para el
> español.
>
> Actualmente y único código no internaciolizable en el que tengo escrito
> en perl :(.  Llevo unos días buscando y lo único que he conseguido
> similar es perllocale, pero esto no me permite hacer lo anteriormente
> descrito.
>
> ¿Alguno ha usado la internacionalización de perl?


La i18n en Unix se hace con gettext(). Tu programa tiene cadenas
codificadas y con la función gettext() se busca la i18n adecuada. No
usar gettext() es contradecir años no sólo de tradición sino de
funcionalidad comprobada (y Java debería tener acceso a gettext()).
Así que comienza por estudiar gettext().


Existen módulos Perl que permiten utilizar gettext() directamente, de
modo que escribes tu programa en Perl y las cadenas a utilizar son
obtenidas con gettext() dependiendo del LC_*

En Debian tienes el paquete liblocale-gettext-perl, y si no usas Debian
y tu distro no los tiene empaquetado, puedes bajarlo desde CPAN. En CPAN
hay (¿había?) un módulo Gettext más precario; no lo uses.

use Locale::gettext;
use POSIX;
setlocale(LC_MESSAGES, "");
print gettext("This is a message"), "\n";

y tienes tus archivos /usr/share/locale/<idioma>/<programa-perl> que
tiene los mensajes que quieres mostrar. Dependiendo de lo que tengas en
LC_MESSAGES, se busca en el idioma correspondiente y en vez de salir
"This is a message", sale "Este es un mensaje".

Sería una buena charla de quince minutos para la próxima reunión de Perl
Mongers...
-- 
Ernesto Hernández-Novich - On Linux 2.6.8.1 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3


More information about the caracas-pm mailing list