----- Original Message -----
From: "Patrice Karatchentzeff" <patrice.karatchentzeff@???>
Cc: <guilde@???>
Sent: Tuesday, June 20, 2006 2:47 PM
Subject: Re: gettext
| Le 20/06/06, anne aublanc<anne.aublanc@???> a écrit :
| > bonjour,
| >
| > j'ai déjà utiliser gettext pour internationaliser
| >
| > Mon souci, dans le même programme, j'ai des messages pour le demandeur et d'autres pour l'administrateur qui non pas forcement la même langue.
| >
| > Je n'arrive pas à trouver d'infos pour gérer 2 langues dans le même programme avec gettext.
| >
| > Si vous avez des pistes...
|
| A priori, ce n'est pas possible (avec gettext).
|
| Par contre, s'il y deux usages (i.e. un usage utilisateur et un usage
| admin) alors c'est trivial : il suffit que chacun positionne la
| variable LANG comme il en a envie.
|
| Sinon, il te reste la possiblité de câbler la langue de l'admin en dur
| dans le programme (mais c'est crado).
|
| Sinon, c'est un problème de conception : si effectivement, ton
| programme cause à la fois à l'utilisateur et à l'admin, il te faut
| découper le programme en deux (philo unix : une tâche à la fois par
| programme mais bien fait), un qui gère la partie admin et l'autre la
| partie utilisateur, l'ensemble communiquant par ce que tu veux (pipe,
| etc.).
bon, cela y est, j'ai la solution!
J'ai fait 2 tests... je ne sais pas ce qui est le mieux
----------------------------
#!/usr/bin/perl
use strict;
use POSIX;
use Locale::gettext;
my $http_lang_util = shift;
my $http_lang_admin = $ENV{LANG};
my $fic_lang_traduc = "/home/e-smith/files/users/zoro/home/faxvm/locale/";
my $lib_name = "faxvm";
my $Debug = 1;
$http_lang_util =~ s/^(fr).*/fr_FR/g;
$http_lang_util =~ s/^(en).*/en_GB/g;
$http_lang_admin =~ s/^(fr).*/fr_FR/g;
$http_lang_admin =~ s/^(en).*/en_GB/g;
bindtextdomain("$lib_name", "$fic_lang_traduc");
textdomain("$lib_name");
# set gettext stufs :
sub _ {
return gettext($_[0]);
}
----------------------------
Je nomme mes variables différemment si admin ou demandeur
et je mets tout ce qui concerne la traduction au même endroit
----------------------------
my $mes_info="Informations Message!";
my $mes_info1 ="Temporary Directory: ";
setlocale(LC_MESSAGES, "$http_lang_util");
my $mes_info_util =_("$mes_info");
my $mes_info1_util =_("$mes_info1");
setlocale(LC_MESSAGES, "$http_lang_admin");
my $mes_info_admin =_("$mes_info");
my $mes_info1_admin =_("$mes_info1");
....
printf "util %s\n", $mes_info_util;
printf "util %s %s\n\n", $mes_info1_util , $repfax ;
...
if ($Debug) {
printf "admin %s\n", $mes_info_admin;
printf "admin %s %s\n\n", $mes_info1_admin , $repfax ;
}
----------------------------
Je déclare mes variables de traduction
et à chaque demande, j'appelle le bon locale
----------------------------
my $mes_info="Informations Message!";
my $mes_info1 ="Temporary Directory: ";
...
setlocale(LC_MESSAGES, "$http_lang_util");
printf "util %s\n", _("$mes_info");
printf "util %s %s\n\n", _("$mes_info1"), $repfax ;
...
if ($Debug) {
setlocale(LC_MESSAGES, "$http_lang_admin");
printf "admin %s\n", _("$mes_info");
printf "admin %s %s\n\n", _("$mes_info1") , $repfax ;
}
----------------------------
Voilà...
testé, les 2 solutions fonctionnent
la mieux, mystère
anne