Re: gettext

トップ ページ

このメッセージに返信
著者: anne aublanc
日付:  
To: guilde
題目: Re: gettext

----- 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