Probleme avec les locales

Le
Denis Joiret
Bonjour,

J'ai un problème avec la fonction POSIX strftime et la localisation.
J'aimerais afficher la date en anglais, mais je n'y arrive pas, bien que je
modifie dans mon script l'environnement au travers de la variable %ENV pour
dupprimer la variable d'environnement "LANG".

Voici le script :

#!/usr/local/bin/perl5 -w

BEGIN {
delete $ENV{"LANG"};
}

use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

print rfc822date(), "";

La variable LANG est positionnée à "fr" dans mon environnement :
% echo $LANG
fr

Si je lance l'exécution, voici ce que j'obtiens :
% perl rfc822date.pl
mar, 4 mai 2004 10:05:25

Pourtant, la ligne delete dans le block BEGIN devrait supprimer la variable
LANG le temps de l'exécution du programme. Si je supprime en dehors du
script cette variable, j'obtins le résultat voulu :
% unsetenv LANG
% perl ~/rfc822date.pl
Tue, 4 May 2004 10:05:41


Comment obtenir ce résultat sans modifier mon environnement à l'extérieur du
script ? Si quelqu'un a une idée, je suis preneur.

Denis Joiret
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Denis Joiret
Le #121821
J'ai trouvé. Il suffit de rajouter un appel à setlocale en positionnant
LC_ALL à "". Voici le script modifié et qui fonctionne cette fois:

#!/usr/local/bin/perl5 -w
use POSIX qw{:locale_h};
use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

delete $ENV{"LANG"};
setlocale(LC_ALL, "");
print rfc822date(), "n";


"Denis Joiret" news:c77jcv$7r3$
Bonjour,

J'ai un problème avec la fonction POSIX strftime et la localisation.
J'aimerais afficher la date en anglais, mais je n'y arrive pas, bien que
je

modifie dans mon script l'environnement au travers de la variable %ENV
pour

dupprimer la variable d'environnement "LANG".

Voici le script :

#!/usr/local/bin/perl5 -w

BEGIN {
delete $ENV{"LANG"};
}

use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

print rfc822date(), "n";

La variable LANG est positionnée à "fr" dans mon environnement :
% echo $LANG
fr

Si je lance l'exécution, voici ce que j'obtiens :
% perl rfc822date.pl
mar, 4 mai 2004 10:05:25

Pourtant, la ligne delete dans le block BEGIN devrait supprimer la
variable

LANG le temps de l'exécution du programme. Si je supprime en dehors du
script cette variable, j'obtins le résultat voulu :
% unsetenv LANG
% perl ~/rfc822date.pl
Tue, 4 May 2004 10:05:41


Comment obtenir ce résultat sans modifier mon environnement à l'extérieur
du

script ? Si quelqu'un a une idée, je suis preneur.

Denis Joiret




FDA
Le #121819
Denis Joiret wrote:

J'ai trouvé. Il suffit de rajouter un appel à setlocale en positionnant
LC_ALL à "". Voici le script modifié et qui fonctionne cette fois:

#!/usr/local/bin/perl5 -w
use POSIX qw{:locale_h};
use POSIX qw{strftime};

sub rfc822date() {


Pas de "use locale;" ?

Denis Joiret
Le #121680
Bonjour,

De ce que je comprends, "use locale;" est un pragma qui sert à faire prendre
en compte la localisation pour les opérateurs build-in de perl, comme sort,
gt, lt, etc. Ici pour mon besoin, il s'agit d'appeler une fonction externe
de perl (strftime) via le module POSIX, je ne pense donc pas que cela puisse
servir. En plus, ce que je veux est justement ne pas utiliser la
localisation, donc cela serait plutôt "no locale;" que "use locale;".

De toutes façon, quelle que soit la forme utilisée, cela ne fonctionne pas :

% cat rfc822date-bis.pl
#!/usr/local/bin/perl5 -w
use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

no locale;
print rfc822date(), "n";
use locale;
print rfc822date(), "n";

% perl ~/rfc822date-bis.pl
jeu, 6 mai 2004 16:31:27
jeu, 6 mai 2004 16:31:27
%

Denis

"FDA" news:4098a9e4$0$11486$
Denis Joiret wrote:

J'ai trouvé. Il suffit de rajouter un appel à setlocale en positionnant
LC_ALL à "". Voici le script modifié et qui fonctionne cette fois:

#!/usr/local/bin/perl5 -w
use POSIX qw{:locale_h};
use POSIX qw{strftime};

sub rfc822date() {


Pas de "use locale;" ?



Scetbon Cyril
Le #121679
Et pourquoi $ENV{LC_ALL}="" ne fonctionne pas ?
quelqu'un a une explication ?
je pensais que celà modifier la variable d'environnement durant le
script et que c'était pris en compte par les commandes suivantes.

Denis Joiret wrote:
J'ai trouvé. Il suffit de rajouter un appel à setlocale en positionnant
LC_ALL à "". Voici le script modifié et qui fonctionne cette fois:

#!/usr/local/bin/perl5 -w
use POSIX qw{:locale_h};
use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

delete $ENV{"LANG"};
setlocale(LC_ALL, "");
print rfc822date(), "n";


"Denis Joiret" news:c77jcv$7r3$

Bonjour,

J'ai un problème avec la fonction POSIX strftime et la localisation.
J'aimerais afficher la date en anglais, mais je n'y arrive pas, bien que


je

modifie dans mon script l'environnement au travers de la variable %ENV


pour

dupprimer la variable d'environnement "LANG".

Voici le script :

#!/usr/local/bin/perl5 -w

BEGIN {
delete $ENV{"LANG"};
}

use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

print rfc822date(), "n";

La variable LANG est positionnée à "fr" dans mon environnement :
% echo $LANG
fr

Si je lance l'exécution, voici ce que j'obtiens :
% perl rfc822date.pl
mar, 4 mai 2004 10:05:25

Pourtant, la ligne delete dans le block BEGIN devrait supprimer la


variable

LANG le temps de l'exécution du programme. Si je supprime en dehors du
script cette variable, j'obtins le résultat voulu :
% unsetenv LANG
% perl ~/rfc822date.pl
Tue, 4 May 2004 10:05:41


Comment obtenir ce résultat sans modifier mon environnement à l'extérieur


du

script ? Si quelqu'un a une idée, je suis preneur.

Denis Joiret









Jack
Le #121677
Bonjour,

rfc1766 pourrait-elle t'aider?

Jack

Le 04/05/2004 10:14, :
Bonjour,

J'ai un problème avec la fonction POSIX strftime et la localisation.
J'aimerais afficher la date en anglais, mais je n'y arrive pas, bien que je
modifie dans mon script l'environnement au travers de la variable %ENV pour
dupprimer la variable d'environnement "LANG".

Voici le script :

#!/usr/local/bin/perl5 -w

BEGIN {
delete $ENV{"LANG"};
}

use POSIX qw{strftime};

sub rfc822date() {
strftime("%a, %e %b %Y %T", localtime(time));
}

print rfc822date(), "n";

La variable LANG est positionnée à "fr" dans mon environnement :
% echo $LANG
fr

Si je lance l'exécution, voici ce que j'obtiens :
% perl rfc822date.pl
mar, 4 mai 2004 10:05:25

Pourtant, la ligne delete dans le block BEGIN devrait supprimer la variable
LANG le temps de l'exécution du programme. Si je supprime en dehors du
script cette variable, j'obtins le résultat voulu :
% unsetenv LANG
% perl ~/rfc822date.pl
Tue, 4 May 2004 10:05:41


Comment obtenir ce résultat sans modifier mon environnement à l'extérieur du
script ? Si quelqu'un a une idée, je suis preneur.

Denis Joiret




Denis Joiret
Le #121543
Bonjour,

Pas vraiment, cette rfc décrit la manière d'informer sur le langage utilisé
(ex: "fr" => langue française)

Mon problème n'est pas un problème de définition des valeurs, mais un
problème de manipulation spécifique à l'implémentation sous Un*x.

Je n'ai pas compris pourquoi on ne peut pas agir en modifiant seulement les
variables d'environnement liées au locale (LANG, LC_*), c'est pourtant bien
ce que la documentation standard indique (man 3 locale)

Petite précision: si j'avais mis dans un block BEGIN la ligne "delete
$ENV{LANG}", c'est pour que la destruction de la variable soit effective au
moment du "use POSIX qw{strftime}". Cela ne suffit cependant pas, et créer
une variable "LC_ALL" ne règle pas non plus le problème. Seule la methode
avec "setlocale" fonctionne correctement, et encore uniquement si je
supprime également la variable "LANG", ce qui est contraire à ce qu'indique
la page de manuel de la fonction "setlocale(3)" et "locale(7)" qui précise
que "LC_ALL" prévaut sur le reste, notamment sur "LANG".

Denis

"Jack" news:c7g168$
Bonjour,

rfc1766 pourrait-elle t'aider?

Jack




Jack
Le #121541
Bonjour,


Il est utile de préciser l'OS, car certains systèmes ne supportent pas
le formatage. La rfc1766 permet d'aménager dans certains langages (ex:
php) la compatibilité Unix et Windows, l'utilisation de setlocale en
conjonction avec strftime est alors nécessaire. C'est ce qui se passe
ailleurs mais dans perl?


Bon courage
JacK


Le 10/05/2004 09:22, :
Bonjour,

Pas vraiment, cette rfc décrit la manière d'informer sur le langage utilisé
(ex: "fr" => langue française)

Mon problème n'est pas un problème de définition des valeurs, mais un
problème de manipulation spécifique à l'implémentation sous Un*x.

Je n'ai pas compris pourquoi on ne peut pas agir en modifiant seulement les
variables d'environnement liées au locale (LANG, LC_*), c'est pourtant bien
ce que la documentation standard indique (man 3 locale)

Petite précision: si j'avais mis dans un block BEGIN la ligne "delete
$ENV{LANG}", c'est pour que la destruction de la variable soit effective au
moment du "use POSIX qw{strftime}". Cela ne suffit cependant pas, et créer
une variable "LC_ALL" ne règle pas non plus le problème. Seule la methode
avec "setlocale" fonctionne correctement, et encore uniquement si je
supprime également la variable "LANG", ce qui est contraire à ce qu'indique
la page de manuel de la fonction "setlocale(3)" et "locale(7)" qui précise
que "LC_ALL" prévaut sur le reste, notamment sur "LANG".

Denis

"Jack" news:c7g168$

Bonjour,

rfc1766 pourrait-elle t'aider?

Jack









Publicité
Poster une réponse
Anonyme