À (at) 06 Oct 2008 21:40:58 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
Paul Gaborit wrote in message <wt9tzbpqwcv.fsf@marceau.enstimac.fr>:
'const char *' ? En Perl ?
gettext, c'est une API C, à la base. Tu peux avoir un wrapper en perl
autour, mais je doute qu'il ajoute ce genre de cache.
En lisant la description de Gettext (que je n'utilise pas) :
Gettext.pm emulates the gettext library routines in Perl, although
it calls the external utility program gettext to actually read .mo
files.
j'en avais conclu que tout était réécrit en Perl (sauf la lecture des
fichiers .mo eux-mêmes) et donc avec des tables de hachages.
Mais ton message m'a fait douté. J'ai donc été lire le code. Et là...
Horreur ! On trouve des lignes du genre :
return `LC_MESSAGES=$oldlocale;$gettextcmd $self->{'DOMAINNAMÉ} $msgid`;
(J'ai un peu simplifié la commande).
Tu as donc raison sur les performances et c'est même bien pire
puisqu'il y a appel à un shell et à gettext (donc deux processus) à
chaque fois. Là, la longueur de la chaine ne pose plus de problème.
C'est *lent* quoi qu'on fasse ! (il faut dire que c'est une version
0.01)
Il existe aussi un module Locale::gettext (1.05) qui semble mieux
développé mais qui fait encore appel aux fonctions externes sans
utiliser la puissance de Perl.
Reste donc le module que de nombreuses personnes conseillent avec
raison : Locale::Maketext et sa variante Locale::Maketext::Gettext.
--
Paul Gaborit - <
http://perso.enstimac.fr/~gaborit/>
Perl en français - <
http://perl.enstimac.fr/>