.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "PERLLOCALE 1"
.TH PERLLOCALE 1 "2009-03-16" "DocFr" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME/NOM"
.IX Header "NAME/NOM"
perllocale \- Gestion des \*(L"locale\*(R" en Perl (internationalisation et localisation)
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Perl supporte pour les donne\*'es, des notions spe\*'cifiques a\*` la langue telles que
\&\*(L"Est-ce une lettre\*(R", \*(L"quel est l'e\*'quivalent en majuscule de cette lettre\*(R" et
\&\*(L"laquelle de ces lettres est la premie\*`re\*(R". Ce sont des sujets tre\*`s importants
spe\*'cialement pour les langues autres que l'anglais \*(-- mais aussi pour
l'anglais\ : il serait nai\*:f d'imaginer que \f(CW\*(C`A\-Za\-z\*(C'\fR de\*'crit toutes les
\&\*(L"lettres\*(R" ne\*'cessaires a\*` l'e\*'criture de l'anglais. Perl sait aussi qu'un autre
caracte\*`re que '.' peut e\*^tre utilise\*' comme se\*'parateur de\*'cimal et que la
repre\*'sentation d'une date est lie\*'e a\*` la langue. La ta\*^che consistant a\*` rendre
une application capable de ge\*'rer les pre\*'fe\*'rences de l'utilisateur dans ce
domaine s'appelle \fBl'internationalisation\fR (parfois abre\*'ge\*' en
\&\fBi18n\fR). Spe\*'cifier a\*` une telle application l'ensemble de ces pre\*'fe\*'rences pour
une langue particulie\*`re s'appelle la \fBlocalisation\fR (\fBl10n\fR).
.PP
Perl peut comprendre les donne\*'es spe\*'cifiques a\*` une langue via la me\*'thode
standard (\s-1ISO\s0 C, \s-1XPG4\s0, \s-1POSIX\s0 1.c) appele\*'e syste\*`me de \*(L"locale\*(R". Le syste\*`me de
\&\*(L"locale\*(R" est contro\*^le\*' par une application en utilisant un pragma (une
directive), un appel de fonction et plusieurs variables d'environnement.
.PP
\&\fBNote\fR\ : cette fonctionnalite\*' est nouvelle dans Perl 5.004 et ne doit pas
s'appliquer a\*` moins qu'une application le demande explicitement \*(-- voir
\&\*(L"Compatibilite\*'\*(R". La seule exception est \fIwrite()\fR qui maintenant utilise
\&\fBtoujours\fR le \*(L"locale\*(R" courant \*(-- voir \*(L"\s-1NOTES\s0\*(R".
.ie n .SH "PRE\*'\-REQUIS POUR L'UTILISATION DES ""LOCALE"""
.el .SH "PRE\*'\-REQUIS POUR L'UTILISATION DES ``LOCALE''"
.IX Header "PRE'-REQUIS POUR L'UTILISATION DES LOCALE"
Pour qu'une application Perl comprenne et pre\*'sente vos donne\*'es correctement en
fonction du \*(L"locale\*(R" de votre choix, \fBtoutes\fR les conditions suivantes
doivent e\*^tre remplies\ :
.IP "\(bu" 4
\&\fBVotre syste\*`me d'exploitation doit supporter le syste\*`me de \*(L"locale\*(R"\fR. Si
c'est le cas, vous devriez trouver la fonction \fIsetlocale()\fR dans la
documentation sa bibliothe\*`que C.
.IP "\(bu" 4
\&\fBLes de\*'finitions des \*(L"locale\*(R" que vous voulez utiliser doivent e\*^tre
installe\*'es\fR. Vous ou votre administrateur syste\*`me devez e\*^tre su\*^r que c'est
bien le cas. Les \*(L"locale\*(R" disponibles, l'endroit ou\*` ils sont stocke\*'s et la
manie\*`re dont ils sont installe\*'s varient d'un syste\*`me a\*` l'autre. Certains
syste\*`mes ne fournissent que tre\*`s peu de \*(L"locale\*(R" installe\*'s une bonne fois pour
toutes et il n'est pas possible d'en ajouter. D'autres autorisent l'ajout de
\&\*(L"locale\*(R" en conserve fournis par le fournisseur du syste\*`me. D'autres encore
vous autorisent a\*` cre\*'er et a\*` de\*'finir vos propres \*(L"locale\*(R". Lisez la
documentation de votre syste\*`me pour d'autres informations.
.IP "\(bu" 4
\&\fBPerl doit savoir que le syste\*`me de \*(L"locale\*(R" est supporte\*'\fR. Si c'est le cas,
\&\f(CW\*(C`perl \-V:d_setlocale\*(C'\fR doit dire que la valeur de \f(CW\*(C`d_setlocale\*(C'\fR est
\&\f(CW\*(C`define\*(C'\fR.
.PP
Si vous voulez qu'une application Perl traite et pre\*'sente les donne\*'es en
fonction d'un \*(L"locale\*(R" particulier, le code de l'application devrait inclure
la directive \f(CW\*(C`use\ locale\*(C'\fR (voir \*(L"La directive locale\*(R") la\*` ou\*` c'est
approprie\*' et \fBau moins\fR l'une des conditions suivantes devraient e\*^tre
remplie\ :
.IP "\(bu" 4
\&\fBles variables d'environnement (voir \*(L"\s-1ENVIRONNEMENT\s0\*(R") qui de\*'terminent le
\&\*(L"locale\*(R" doivent e\*^tre correctement positionne\*'es\fR au moment du lancement de
l'application soit par vous\-me\*^me soit par la configuration de votre compte
syste\*`me.
.IP "\(bu" 4
\&\fBL'application doit positionne\*' son propre \*(L"locale\*(R"\fR en utilisant la me\*'thode
de\*'crite dans \*(L"La fonction setlocale\*(R".
.ie n .SH "UTILISATION DES ""LOCALE"""
.el .SH "UTILISATION DES ``LOCALE''"
.IX Header "UTILISATION DES LOCALE"
.Sh "La directive locale"
.IX Subsection "La directive locale"
Par de\*'faut, Perl ignore le \*(L"locale\*(R" courant. La directive \f(CW\*(C`use\ locale\*(C'\fR
demande a\*` Perl de prendre en compte le \*(L"locale\*(R" courant pour certaines
ope\*'rations\ :
.IP "\(bu" 4
\&\fBLes ope\*'rateurs de comparaisons\fR (\f(CW\*(C`lt\*(C'\fR, \f(CW\*(C`le\*(C'\fR, \f(CW\*(C`cmp\*(C'\fR, \f(CW\*(C`ge\*(C'\fR et \f(CW\*(C`gt\*(C'\fR) et
les fonctions \s-1POSIX\s0 de tri \fIstrcoll()\fR et \fIstrxfrm()\fR utilisent
\&\f(CW\*(C`LC_COLLATE\*(C'\fR. \fIsort()\fR est aussi affecte\*' si il est utilise\*' sans une fonction de
comparaison explicite puisqu'il utilise \f(CW\*(C`cmp\*(C'\fR par de\*'faut.
.Sp
\&\fBNote:\fR \f(CW\*(C`eq\*(C'\fR et \f(CW\*(C`ne\*(C'\fR ne sont pas affecte\*'s par le \*(L"locale\*(R"\ : ils
comparent toujours leurs deux ope\*'randes octet par octet. De plus, si \f(CW\*(C`cmp\*(C'\fR
trouve que ses deux ope\*'randes sont e\*'gaux selon l'ordre spe\*'cifie\*' par le
\&\*(L"locale\*(R" courant, il lance aussi une comparaison octet par octet et retourne
\&\fI0\fR (e\*'gal) uniquement si les deux ope\*'randes sont identiques bit a\*` bit. Si
vous voulez vraiment savoir si deux chai\*^nes \- que \f(CW\*(C`eq\*(C'\fR et \f(CW\*(C`cmp\*(C'\fR conside\*`rent
comme diffe\*'rentes \*(-- sont e\*'gales selon l'ordre de tri du \*(L"locale\*(R", lisez
\&\*(L"Cate\*'gorie \s-1LC_COLLATE\s0 : tri\*(R".
.IP "\(bu" 4
\&\fBLes expressions rationnelles et les fonctions de modification de la casse\fR
(\fIuc()\fR, \fIlc()\fR, \fIucfirst()\fR et \fIlcfirst()\fR) utilisent \f(CW\*(C`LC_CTYPE\*(C'\fR.
.IP "\(bu" 4
\&\fBLes fonctions de formatage\fR (\fIprintf()\fR, \fIsprintf()\fR et \fIwrite()\fR) utilisent
\&\f(CW\*(C`LC_NUMERIC\*(C'\fR.
.IP "\(bu" 4
\&\fBLa fonction \s-1POSIX\s0 de formatage de dates\fR (\fIstrftime()\fR) utilise \f(CW\*(C`LC_TIME\*(C'\fR.
.PP
\&\f(CW\*(C`LC_COLLATE\*(C'\fR, \f(CW\*(C`LC_CTYPE\*(C'\fR et autres sont pre\*'sente\*'s plus comple\*`tement dans
\&\*(L"CATE\*'\s-1GORIES\s0 \s-1DE\s0 \*(R"\s-1LOCALE\s0"".
.PP
Le comportement par de\*'faut est re\*'tabli par la directive \f(CW\*(C`no locale\*(C'\fR ou
lorsqu'on sort du bloc englobant la directive \f(CW\*(C`use locale\*(C'\fR.
.PP
Une chai\*^ne re\*'sultat de n'importe quelle ope\*'ration qui utilise les informations
du \*(L"locale\*(R" est souille\*'e (tainted) puisqu'il vaut mieux ne pas faire confiance
au \*(L"locale\*(R" courant. Voir \*(L"SE\*'CURITE\*'\*(R".
.Sh "La fonction setlocale"
.IX Subsection "La fonction setlocale"
Vous pouvez changer de \*(L"locale\*(R" aussi souvent que ne\*'cessaire lors de
l'exe\*'cution gra\*^ce a\*` la fonction \fIPOSIX::setlocale()\fR\ :
.PP
.Vb 2
\& # Cette fonctionnalite\*' n\*(Aqexistait pas avant Perl 5.004
\& require 5.004;
\&
\& # Import des outils de manipulation du "locale"
\& # depuis le module POSIX.
\& # Cette exemple utilise : setlocale \-\- l\*(Aqappel de fonctio
\& # LC_CTYPE \-\- explique\*' plus bas
\& use POSIX qw(locale_h);
\&
\& # demande et sauvegarde le "locale" initial
\& $old_locale = setlocale(LC_CTYPE);
\&
\& setlocale(LC_CTYPE, "fr_CA.ISO8859\-1");
\& # LC_CTYPE est maintenant dans le
\& # "locale" "French, Canada, codeset ISO 8859\-1"
\&
\& setlocale(LC_CTYPE, "");
\& # LC_CTYPE revient a\*` sa valeur par de\*'faut de\*'finie par
\& # les variables d\*(Aqenvironnement LC_ALL/LC_CTYPE/LANG
\& # Voir plus bas pour la documentation
\&
\& # restaure le "locale" initial
\& setlocale(LC_CTYPE, $old_locale);
.Ve
.PP
Le premier argument de \fIsetlocale()\fR donne la \fBcate\*'gorie\fR, le seconde le
\&\fBlocale\fR. La cate\*'gorie indique a\*` quel aspect du traitement des donne\*'es vous
voulez appliquer les re\*`gles spe\*'cifiques au \*(L"locale\*(R". Les noms des cate\*'gories
sont pre\*'sente\*'s dans \*(L"CATE\*'\s-1GORIES\s0 \s-1DE\s0 \*(R"\s-1LOCALE\s0"" et \*(L"\s-1ENVIRONNEMENT\s0\*(R". Le
\&\*(L"locale\*(R" est le nom d'une collection d'information correspondant a\*` une
combinaison particulie\*`re de langues, de pays ou territoires et de
codage. Petit de\*'tail sur le nommage des \*(L"locale\*(R"\ : tous les syste\*`mes ne
nomment pas les \*(L"locale\*(R" comme dans les exemples donne\*'s.
.PP
Si le second argument n'est pas fourni et que la cate\*'gorie est autre chose que
\&\s-1LC_ALL\s0, la fonction retourne une chai\*^ne indiquant le \*(L"locale\*(R" courant pour
cette cate\*'gorie. Vous pouvez utiliser cette valeur comme second argument d'un
appel a\*` \fIsetlocale()\fR.
.PP
Si le le second argument n'est pas fourni et que la cate\*'gorie est \s-1LC_ALL\s0, le
re\*'sultat est de\*'pendant de l'imple\*'mentation. Cela peut e\*^tre une chai\*^ne
concate\*'nant tous les noms des \*(L"locale\*(R" (avec un se\*'parateur de\*'pendant de
l'imple\*'mentation) ou un seul nom de \*(L"locale\*(R". Consultez \fIsetlocale\fR\|(3) pour
plus de de\*'tails.
.PP
Si un second argument est fourni et si il correspond a\*` un \*(L"locale\*(R" valide, le
\&\*(L"locale\*(R" pour cette cate\*'gorie est positionne\*' a\*` cette valeur et la fonction
retourne la valeur du \*(L"locale\*(R" devenu le \*(L"locale\*(R" courant. Vous pouvez alors
l'utiliser dans un autre appel a\*` \fIsetlocale()\fR. (Quelques imple\*'mentations
retourne une valeur diffe\*'rente de la valeur que vous avez fournie comme second
argument \*(-- pensez-y comme si vos valeurs e\*'taient des alias).
.PP
Comme dans les exemples pre\*'sente\*'s, si le second argument est une chai\*^ne vide,
le \*(L"locale\*(R" de la cate\*'gorie revient a\*` sa valeur par de\*'faut spe\*'cifie\*'e par les
variables d'environnement correspondantes. Ge\*'ne\*'ralement, cela vous rame\*`nera
aux valeurs par de\*'faut lorsque Perl a de\*'marre\*'\ : les changements de
l'environnement faits par votre application apre\*`s le de\*'marrage peuvent ou non
e\*^tre pris en compte. Cela de\*'pend de la bibliothe\*`que C de votre syste\*`me.
.PP
Si le second argument ne correspond a\*` aucun \*(L"locale\*(R" valide, le \*(L"locale\*(R" pour
cette cate\*'gorie n'est pas modifie\*' et la fonction retourne \fIundef\fR.
.PP
Pour de plus amples informations concernant les cate\*'gories, consultez
\&\fIsetlocale\fR\|(3).
.ie n .Sh "Trouver les ""locale"""
.el .Sh "Trouver les ``locale''"
.IX Subsection "Trouver les locale"
Pour connai\*^tre les \*(L"locale\*(R" disponibles sur votre syste\*`me, consultez
\&\fIsetlocale\fR\|(3) pour savoir ou\*` re\*'side la liste des \*(L"locale\*(R" disponibles
(cherchez dans la section \fI\s-1SEE\s0 \s-1ALSO\s0\fR ou \fI\s-1VOIR\s0 \s-1AUSSI\s0\fR). Si cela e\*'choue,
essayez les lignes de commandes suivantes\ :
.PP
.Vb 1
\& locale \-a
\&
\& nlsinfo
\&
\& ls /usr/lib/nls/loc
\&
\& ls /usr/lib/locale
\&
\& ls /usr/lib/nls
\&
\& ls /usr/share/locale
.Ve
.PP
et regardez si elles listent quelque chose qui ressemble a\*`\ :
.PP
.Vb 7
\& en_US.ISO8859\-1 de_DE.ISO8859\-1 ru_RU.ISO8859\-5
\& en_US.iso88591 de_DE.iso88591 ru_RU.iso88595
\& en_US de_DE ru_RU
\& en de ru
\& english german russian
\& english.iso88591 german.iso88591 russian.iso88595
\& english.roman8 russian.koi8r
.Ve
.PP
Malheureusement, bien que l'interface d'appel a\*` \fIsetlocale()\fR ait e\*'te\*'
standardise\*'e, les noms des \*(L"locale\*(R" et les re\*'pertoires ou\*` la configuration
re\*'side ne le sont pas. La forme basique du nom est
\&\fIlangue_territoire\fR\fB.\fR\fIcodage\fR mais les dernie\*`res parties apre\*`s la langue
ne sont pas toujours pre\*'sentes. La \fIlangue\fR et le \fIpays\fR sont habituellement
sous la forme propose\*'e par les normes \fB\s-1ISO\s0 3166\fR et \fB\s-1ISO\s0 639\fR, les noms de
pays et de langues abre\*'ge\*'s sur deux lettres. La partie \fIcodage\fR mentionne
parfois un jeu de caracte\*`res \fB\s-1ISO\s0 8859\fR. Par exemple, \f(CW\*(C`ISO 8859\-1\*(C'\fR est
parfois appele\*' X jeu de caracte\*`res de l'Europe de l'Ouest X et peut e\*^tre
utilise\*' pour encoder la plupart des langues de l'Europe de l'Ouest. Me\*^me la\*`,
il y a plusieurs fac\*,ons d'e\*'crire le nom de ce standard. Lamentable.
.PP
Deux \*(L"locale\*(R" me\*'ritent une mention particulie\*`re\ : \*(L"C\*(R" et \*(L"\s-1POSIX\s0\*(R". Pour
l'instant, ce sont effectivement les me\*^mes \*(L"locale\*(R"\ : la seule diffe\*'rence
est que l'un est de\*'fini par le standard C et l'autre par le standard
\&\s-1POSIX\s0. Ils de\*'finissent le \fBlocale par de\*'faut\fR que tous les programmes
utilisent au de\*'marrage en l'absence d'informations de \*(L"locale\*(R" dans leur
environnement. Leur langue est l'anglais (ame\*'ricain) et leur jeu de caracte\*`res
est l'\s-1ASCII\s0.
.PP
\&\fBNote\fR\ : tous les syste\*`mes n'ont pas le \*(L"locale\*(R" \s-1POSIX\s0 (tous les syste\*`mes
ne sont pas conformes \s-1POSIX\s0). Donc utilisez \*(L"C\*(R" a\*` chaque fois que vous avez
besoin de spe\*'cifier le \*(L"locale\*(R" par de\*'faut.
.ie n .Sh "PROBLE\*`\s-1MES\s0 \s-1DE\s0 ""\s-1LOCALE\s0"""
.el .Sh "PROBLE\*`\s-1MES\s0 \s-1DE\s0 ``\s-1LOCALE\s0''"
.IX Subsection "PROBLE`MES DE LOCALE"
Vous pouvez obtenir le message d'avertissement suivant au de\*'marrage de Perl\ :
.PP
.Vb 6
\& perl: warning: Setting locale failed.
\& perl: warning: Please check that your locale settings:
\& LC_ALL = "En_US",
\& LANG = (unset)
\& are supported and installed on your system.
\& perl: warning: Falling back to the standard locale ("C").
.Ve
.PP
Cela signifie que vos re\*'glages de \*(L"locale\*(R" ont \s-1LC_ALL\s0 positionne\*' a\*` \*(L"En_US\*(R" et
que \s-1LANG\s0 existe mais n'a pas de valeur. Perl essaye de vous croire mais il ne
le peut pas. A\*` la place, Perl y renonce et retombe sur le \*(L"locale\*(R" \*(L"C\*(R", la
\&\*(L"locale\*(R" par de\*'faut qui est suppose\*' fonctionner en toutes circonstances. Cela
signifie que vos re\*'glages de \*(L"locale\*(R" sont mauvais. Soit ils mentionnent des
\&\*(L"locale\*(R" dont votre syste\*`me n'a jamais entendu parler, soit l'installation des
\&\*(L"locale\*(R" est mal faite sur votre syste\*`me (par exemple, certains fichiers
syste\*`mes sont de\*'fectueux ou manquants). Il y a des solutions rapides et
temporaires a\*` ces proble\*`mes mais aussi des solutions plus minutieuses et
de\*'finitive.
.ie n .Sh "Re\*'solution temporaire des proble\*`mes de ""locale"""
.el .Sh "Re\*'solution temporaire des proble\*`mes de ``locale''"
.IX Subsection "Re'solution temporaire des proble`mes de locale"
Les deux solutions les plus rapides sont soit de rendre Perl silencieux sur
d'e\*'ventuelles inconsistances des \*(L"locale\*(R" soit de faire tourner Perl avec le
\&\*(L"locale\*(R" par de\*'faut (\*(L"C\*(R").
.PP
Les plaintes de Perl au sujet des proble\*`mes de \*(L"locale\*(R" peuvent e\*^tre
supprime\*'es en positionnant la variable d'environnement \s-1PERL_BADLANG\s0 a\*` la
valeur ze\*'ro (par exemple \*(L"0\*(R"). Cette me\*'thode ne fait que cacher le proble\*`me\ : vous demandez a\*` Perl de se taire me\*^me si il voit que quelque chose ne va
pas. Ne soyez donc pas surpris, plus tard, lorsque vous constaterez des
dysfonctionnements de choses de\*'pendant des \*(L"locale\*(R".
.PP
Perl peut tourner avec le \*(L"locale\*(R" \*(L"C\*(R" par de\*'faut en positionnant la variable
d'environnement \s-1LC_ALL\s0 a\*` \*(L"C\*(R". Cette me\*'thode est peut\-e\*^tre un peu plus
civilise\*'e que l'approche par \s-1PERL_BADLANG\s0 mais la valeur de \s-1LC_ALL\s0 (ou de tout
autre variable lie\*'e au \*(L"locale\*(R") peut affecter aussi d'autres programmes en
plus de Perl. En particulier vos programmes externes lance\*'s depuis Perl
verront ces changements. Si vous rendez ces nouveaux re\*'glages permanents, tous
les programmes que vous ferez tourner les verront. Voir \*(L"\s-1ENVIRONNEMENT\s0\*(R" pour
une liste comple\*`te des variables d'environnement pertinentes et \*(L"\s-1UTILISATION\s0
\&\s-1DES\s0 \*(R"\s-1LOCALE\s0"" pour leurs effets sur Perl. Les effets sur les autres programmes
sont aise\*'ment de\*'duits. Par exemple, la variables \s-1LC_COLLATE\s0 peut tre\*`s bien
influencer votre programme \fBsort\fR (ou pluto\*^t le programme qui trient des
\&'enregistrements' dans l'ordre alphabe\*'tique, quel que soit son nom sur votre
syste\*`me).
.PP
Vous pouvez tester des changements temporaires sur ces variables puis, lorsque
les nouveaux re\*'glages semblent ame\*'liorer les choses, placer ces re\*'glages dans
l'un des fichiers de de\*'marrage de votre shell. Consultez votre documentation
locale pour les de\*'tails. Pour les shells de type Bourne-shell (\fBsh\fR, \fBksh\fR,
\&\fBbash\fR, \fBzsh\fR), cela donne\ :
.PP
.Vb 2
\& LC_ALL=en_US.ISO8859\-1
\& export LC_ALL
.Ve
.PP
Cela suppose que vous avez vu le \*(L"locale\*(R" \*(L"en_US.ISO8859\-1\*(R" en utilisant l'une
des commandes pre\*'sente\*'es plus haut. Nous avons de\*'cide\*' d'essayer celui\-la\*` a\*` la
place du \*(L"locale\*(R" fautif \*(L"En_US\*(R". En shell type C\-shell (\fBcsh\fR, \fBtcsh\fR),
cela donne\ :
.PP
.Vb 1
\& setenv LC_ALL en_US.ISO8859\-1
.Ve
.PP
Si vous ne connaissez pas le shell que vous utilisez, consultez votre aide en
ligne.
.ie n .Sh "Re\*'solution permanente des proble\*`mes de ""locale"""
.el .Sh "Re\*'solution permanente des proble\*`mes de ``locale''"
.IX Subsection "Re'solution permanente des proble`mes de locale"
La me\*'thode plus langue mais de\*'finitive de re\*'soudre les proble\*`mes de \*(L"locale\*(R"
est de corriger vous\-me\*^me la mauvaise installation ou configuration. La
correction de la mauvaise (ou inexistante) installation peut ne\*'cessiter l'aide
d'un administrateur syste\*`me complaisant.
.PP
Tout d'abord, voyez plus haut ce qui concerne \*(L"Trouver les \*(R"locale"". Cela
vous explique comment savoir les \*(L"locale\*(R" re\*'ellement supporte\*'s \- et, plus
important, installe\*'s \*(-- sur votre syste\*`me. Dans notre message d'erreur
d'exemple, les variables d'environnement affectant les \*(L"locale\*(R" sont liste\*'es
dans l'ordre de\*'croissant d'importance (la variables non positionne\*'es ne
comptent pas). Par conse\*'quent, avoir \s-1LC_ALL\s0 fixe\*' a\*` \*(L"En_US\*(R" doit e\*^tre un
mauvais choix tel que se pre\*'sente notre message d'erreur. Essayez donc de
corriger les re\*'glages de \*(L"locale\*(R" liste\*'s en premier.
.PP
En second, si en utilisant les commandes sugge\*'re\*'es, vous voyez \fBexactement\fR
quelque chose comme \*(L"En_US\*(R" sans les guillemets alors cela devrait fonctionner
puisque vous utilisez alors un \*(L"locale\*(R" qui est cense\*' e\*^tre disponible sur
votre syste\*`me. Dans ce cas, voyez \*(L"Re\*'solution permanente des proble\*`mes de
configuration syste\*`me des \*(R"locale"".
.ie n .Sh "Re\*'solution permanente des proble\*`mes de configuration syste\*`me des ""locale"""
.el .Sh "Re\*'solution permanente des proble\*`mes de configuration syste\*`me des ``locale''"
.IX Subsection "Re'solution permanente des proble`mes de configuration syste`me des locale"
C'est lorsque vous voyez quelque chose comme\ :
.PP
.Vb 4
\& perl: warning: Please check that your locale settings:
\& LC_ALL = "En_US",
\& LANG = (unset)
\& are supported and installed on your system.
.Ve
.PP
mais que vous ne trouvez pas \*(L"En_US\*(R" dans les listes produites par les
commandes mentionne\*'es plus haut. Vous pouvez voir des choses comme
\&\*(L"en_US.ISO8859\-1\*(R" mais ce n'est pas la me\*^me chose. Dans ce cas, essayez le
\&\*(L"locale\*(R" de la liste qui ressemble le plus a\*` celui que vous aviez
pre\*'ce\*'demment. Les re\*`gles pour trouver les noms des \*(L"locale\*(R" sont un peu vagues
car il y a un manque de standardisation dans ce domaine. Voir \*(L"Trouver les
\&\*(R"locale"" pour les re\*`gles ge\*'ne\*'rales.
.ie n .Sh "Configuration syste\*`me des ""locale"""
.el .Sh "Configuration syste\*`me des ``locale''"
.IX Subsection "Configuration syste`me des locale"
Contactez un administrateur syste\*`me (de pre\*'fe\*'rence le vo\*^tre), rapportez lui
exactement le message que vous avez obtenu et demandez lui de lire la
documentation que vous lisez pre\*'sentement. Il devrait e\*^tre en mesure de
trouver ce qui ne va pas dans le configuration des \*(L"locale\*(R" de votre
syste\*`me. \*(L"Trouver les \*(R"locale"" est malheureusement un peu vague a\*` propos des
commandes et des emplacements car tout cela n'est pas standardise\*'.
.Sh "La fonction localeconv"
.IX Subsection "La fonction localeconv"
La fonction \fIPOSIX::localeconv()\fR vous permet d'obtenir toutes les informations
particulie\*`res lie\*'es au formatage des valeurs nume\*'riques selon le \*(L"locale\*(R"
spe\*'cifie\*' par \f(CW\*(C`LC_NUMERIC\*(C'\fR et \f(CW\*(C`LC_MONETARY\*(C'\fR. (Si vous voulez juste le nom du
\&\*(L"locale\*(R" courant pour une cate\*'gorie particulie\*`re, utilisez \fIPOSIX::setlocale()\fR
avec un seul argument \*(-- voir \*(L"La fonction setlocale\*(R".)
.PP
.Vb 1
\& use POSIX qw(locale_h);
\&
\& # Obtention d\*(Aqune re\*'fe\*'rence vers une table de hachage
\& # des information de\*'pendant du "locale"
\& $locale_values = localeconv();
\&
\& # Affichage de la liste trie\*'e des valeurs
\& for (sort keys %$locale_values) {
\& printf "%\-20s = %s\en", $_, $locale_values\->{$_}
\& }
.Ve
.PP
\&\fIlocaleconv()\fR ne prend aucun argument et retourne \fBune re\*'fe\*'rence\fR vers une
table de hachage. Les cle\*'s de cette table sont des noms des variables de
formatage telle que \f(CW\*(C`decimal_point\*(C'\fR et \f(CW\*(C`thousands_sep\*(C'\fR. Les valeurs sont
celles associe\*'es a\*` cette cle\*'. Voir \*(L"localeconv\*(R" in \s-1POSIX\s0 pour un exemple plus
long listant les cate\*'gories qu'une imple\*'mentation devrait fournir; certaines
en fournissent plus, d'autres moins. Vous n'avez pas besoin d'un \f(CW\*(C`use locale\*(C'\fR
explicite puisque \fIlocaleconv()\fR respecte toujours le \*(L"locale\*(R" courant.
.PP
Voici un programme d'exemple simple qui re\*'e\*'crit les parame\*`tres de sa ligne de
commande comme des entiers correctement formate\*'s selon le \*(L"locale\*(R" courant\ :
.PP
.Vb 3
\& # Voir les commentaires des exemples pre\*'ce\*'dents
\& require 5.004;
\& use POSIX qw(locale_h);
\&
\& # Obtention de quelques=uns des parame\*`tres
\& # de formattage nume\*'rique
\& my ($thousands_sep, $grouping) =
\& @{localeconv()}{\*(Aqthousands_sep\*(Aq, \*(Aqgrouping\*(Aq};
\&
\& # Valeur par de\*'faut
\& $thousands_sep = \*(Aq,\*(Aq unless $thousands_sep;
\&
\& # grouping et mon_grouping sont sous la forme d\*(Aqun liste compacte de
\& # petits entiers (caracte\*`res) indiquant le regroupement (thousand_seps
\& # et mon_thousand_seps spe\*'cifiant les se\*'parateurs de groupes) des
\& # chiffres dans les nombres et la valeurs mone\*'taires. La signification
\& # de ces entiers est : 255 pour indiquer qu\*(Aqil ne faut plus regrouper,
\& # 0 pour indiquer de re\*'pe\*'ter le groupe pre\*'ce\*'dent, 1\-254 pour indiquer
\& # la taille du groupe courant. Les regroupements ont lieu de la droite
\& # vers la gauche. Dans ce qui suit, nous trichons un peu en
\& # n\*(Aqutilisant que la premie\*`re valeur de grouping.
\& if ($grouping) {
\& @grouping = unpack("C*", $grouping);
\& } else {
\& @grouping = (3);
\& }
\&
\& # Pre\*'sentation des parame\*`tres de la ligne de commandes
\& # selon le "locale" courant
\& for (@ARGV) {
\& $_ = int; # Suppresions de la partie non entie\*`re
\& 1 while
\& s/(\ed)(\ed{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
\& print "$_";
\& }
\& print "\en";
.Ve
.ie n .SH "CATE\*'GORIES DE ""LOCALE"""
.el .SH "CATE\*'GORIES DE ``LOCALE''"
.IX Header "CATE'GORIES DE LOCALE"
Les sous-sections suivantes de\*'crivent les cate\*'gories de base de \*(L"locale\*(R". En
plus, certaines combinaisons de cate\*'gories permettent la manipulation de
plusieurs cate\*'gories a\*` la fois. Voir \*(L"\s-1ENVIRONNEMENT\s0\*(R".
.Sh "Cate\*'gorie \s-1LC_COLLATE:\s0 tri"
.IX Subsection "Cate'gorie LC_COLLATE: tri"
Dans la porte\*'e de \f(CW\*(C`use\ locale\*(C'\fR, Perl regarde la variable d'environnement
\&\f(CW\*(C`LC_COLLATE\*(C'\fR pour de\*'terminer la notion de collation (ordre) des
caracte\*`res. Par exemple, 'b' suit 'a' dans l'alphabet Latin mais ou\*` se situent
\&'a\*'' et 'a\*o'\ ? Et bien que 'color' suive 'chocolate' en
Anglais, qu'en est-il en Espagnol\ ?
.PP
Les collations suivantes sont toutes sense\*'es et vous pouvez toutes les
rencontrer si vous utilisez \*(L"use locale\*(R".
.PP
.Vb 4
\& A B C D E a b c d e
\& A a B b C c D d D e
\& a A b B c C d D e E
\& a b c d e A B C D E
.Ve
.PP
Voici un petit bout de code permettant d'afficher les caracte\*`res
alphanume\*'riques du \*(L"locale\*(R" courant dans l'ordre de ce \*(L"locale\*(R"\ :
.PP
.Vb 2
\& use locale;
\& print +(sort grep /\ew/, map { chr() } 0..255), "\en";
.Ve
.PP
Comparez cela avec les caracte\*`res et l'ordre que vous obtenez si vous indiquez
explicitement que le \*(L"locale\*(R" doit e\*^tre ignore\*'\ :
.PP
.Vb 2
\& no locale;
\& print +(sort grep /\ew/, map { chr() } 0..255), "\en";
.Ve
.PP
Cette ordre natif a\*` la machine (qui est celui obtenu a\*` moins qu'apparaisse
pre\*'alablement de le bloc un \f(CW\*(C`use\ locale\*(C'\fR) doit e\*^tre utilise\*' pour trier des
donne\*'es binaires alors que l'ordre de\*'pendant du \*(L"locale\*(R" du premier exemple
est utile pour les textes en langage naturel.
.PP
Comme indique\*' dans \*(L"\s-1UTILISATION\s0 \s-1DES\s0 \*(R"\s-1LOCALE\s0"", \f(CW\*(C`cmp\*(C'\fR effectue sa comparaison
selon l'ordre du \*(L"locale\*(R" courant lorsque \f(CW\*(C`use locale\*(C'\fR est actif mais retombe
sur une comparaison octet par octet pour les chai\*^nes que le \*(L"locale\*(R" donne
e\*'gales. Vous pouvez utiliser \fIPOSIX::strcoll()\fR si vous ne voulez pas de cette
comparaison\ :
.PP
.Vb 3
\& use POSIX qw(strcoll);
\& $equal_in_locale =
\& !strcoll("space and case ignored", "SpaceAndCaseIgnored");
.Ve
.PP
\&\f(CW$equal_in_locale\fR sera vrai si l'ordre du \*(L"locale\*(R" spe\*'cifie un ordre type
dictionnaire qui ignore comple\*`tement les caracte\*`res d'espacement et ne tient
pas compte de la casse.
.PP
Si vous devez comparer l'e\*'galite\*' (au sens du \*(L"locale\*(R") d'une seule chai\*^ne avec
de nombreuses autres chai\*^nes, vous devriez gagner un peu d'efficacite\*' en
utilisant \fIPOSIX::strxfrm()\fR et \f(CW\*(C`eq\*(C'\fR\ :
.PP
.Vb 8
\& use POSIX qw(strxfrm);
\& $xfrm_string = strxfrm("Mixed\-case string");
\& print "locale collation ignores spaces\en"
\& if $xfrm_string eq strxfrm("Mixed\-casestring");
\& print "locale collation ignores hyphens\en"
\& if $xfrm_string eq strxfrm("Mixedcase string");
\& print "locale collation ignores case\en"
\& if $xfrm_string eq strxfrm("mixed\-case string");
.Ve
.PP
\&\fIstrxfrm()\fR prend une chai\*^ne et la transforme pour l'utiliser lors d'une
comparaison octet par octet avec d'autres chai\*^nes transforme\*'es. Dans les
entrailles de Perl, les ope\*'rateurs Perl de comparaison dont le comportement
est modifie\*' par le \*(L"locale\*(R" appellent \fIstrxfrm()\fR sur chacun de leurs ope\*'randes
puis effectuent une comparaison octet par octet des chai\*^nes transforme\*'es. En
appelant \fIstrxfrm()\fR explicitement et en utilisant une comparaison ne tenant
pas compte du \*(L"locale\*(R", cet exemple tente de re\*'duire le nombre de
transformation. Mais en re\*'alite\*', cela ne re\*'duit rien\ : la magie de Perl
(voir \*(L"Magic Variables\*(R" in perlguts) cre\*'e la version transforme\*'e d'une chai\*^ne la
premie\*`re fois qu'elle est ne\*'cessaire et conserve cette version au cas ou\*` elle
serait a\*` nouveau ne\*'cessaire. Un exemple re\*'e\*'crit tout simplement en utilisant
\&\f(CW\*(C`cmp\*(C'\fR tournera aussi vite. Elle ge\*`re aussi correctement les caracte\*`res nuls
pre\*'sents dans les chai\*^nes alors que \fIstrxfrm()\fR conside\*`re le premier caracte\*`re
nul rencontre\*' comme e\*'tant la fin de la chai\*^ne. N'espe\*'rez pas que les chai\*^nes
transforme\*'es soient portables d'un syste\*`me a\*` un autre \*(-- ou me\*^me d'une version
a\*` une autre d'un me\*^me syste\*`me. En re\*'sume\*', n'appelez pas \fIstrxfrm()\fR
directement\ : laissez Perl le faire pour vous.
.PP
Note\ : \f(CW\*(C`use locale\*(C'\fR n'est pas pre\*'sent dans plusieurs exemples car il n'est
pas ne\*'cessaire\ ; \fIstrcoll()\fR et \fIstrxfrm()\fR existent uniquement pour ge\*'ne\*'rer
des re\*'sultats de\*'pendant du \*(L"locale\*(R" par conse\*'quent ils respectent toujours le
\&\*(L"locale\*(R" courant \f(CW\*(C`LC_COLLATE\*(C'\fR.
.Sh "Cate\*'gorie \s-1LC_CTYPE:\s0 type de caracte\*`res"
.IX Subsection "Cate'gorie LC_CTYPE: type de caracte`res"
Dans la porte\*'e d'un \f(CW\*(C`use\ locale\*(C'\fR, Perl respecte le re\*'glage du \*(L"locale\*(R"
\&\f(CW\*(C`LC_CTYPE\*(C'\fR. Cela contro\*^le la notion de caracte\*`res alphabe\*'tiques qu'utilise
l'application. Cela affecte la meta-notation Perl \f(CW\*(C`\ew\*(C'\fR des expressions
rationnelles qui indique un caracte\*`re alphanume\*'rique \*(-- c'est a\*` dire un
caracte\*`re alphabe\*'tique ou nume\*'rique. (Consultez perlre pour plus
d'information sur les expressions rationnelles.) Gra\*^ce a\*` \f(CW\*(C`LC_CTYPE\*(C'\fR, et selon
les re\*'glages de votre \*(L"locale\*(R", des caracte\*`res tels que '\*(ae', '\*(d\-',
\&'\*8' et 'o\*/' peuvent e\*^tre conside\*'re\*'s comme des caracte\*`res \f(CW\*(C`\ew\*(C'\fR.
.PP
Le locale \f(CW\*(C`LC_CTYPE\*(C'\fR fournit aussi une table de conversion de caracte\*`res
entre majuscules et minuscules. Cela affecte les fonctions de gestion de la
casse \*(-- \fIlc()\fR, \fIlcfirst()\fR, \fIuc()\fR et \fIucfirst()\fR, les interpolations de\*'pendant de
la casse \f(CW\*(C`\el\*(C'\fR \f(CW\*(C`\eL\*(C'\fR, \f(CW\*(C`\eu\*(C'\fR et \f(CW\*(C`\eU\*(C'\fR dans les chai\*^nes entre guillemets et les
substitutions \f(CW\*(C`s///\*(C'\fR et les motifs d'expressions rationnelles inde\*'pendant de
la casse gra\*^ce au modificateur \f(CW\*(C`i\*(C'\fR.
.PP
Finalement, \f(CW\*(C`LC_CTYPE\*(C'\fR affecte les fonctions de tests \s-1POSIX\s0 portant sur les
classes de caracte\*`res \*(-- \fIisalpha()\fR, \fIislower()\fR et autres. Par exemple, si vous
passez du \*(L"locale\*(R" \*(L"C\*(R" vers un \*(L"locale\*(R" scandinave 7\-bit, vous constaterez que
\&\*(L"|\*(R" passe de la classe \fIispunct()\fR a\*` la classe \fIisalpha()\fR.
.PP
\&\fBNote\fR\ : une de\*'finition errone\*'e ou malicieuse de \f(CW\*(C`LC_CTYPE\*(C'\fR peut amener
votre application a\*` conside\*'rer comme alphanume\*'rique des caracte\*`res qui ne le
sont pas clairement. Pour une reconnaissance stricte des lettres et des
chiffres \*(-- par exemple, dans une commande \*(-- les application tenant compte
des \*(L"locale\*(R" devrait utiliser \f(CW\*(C`\ew\*(C'\fR a\*` l'inte\*'rieur d'un bloc \f(CW\*(C`no locale\*(C'\fR. Voir
\&\*(L"SE\*'CURITE\*'\*(R".
.Sh "Cate\*'gorie \s-1LC_NUMERIC:\s0 format nume\*'rique"
.IX Subsection "Cate'gorie LC_NUMERIC: format nume'rique"
Dans la porte\*'e d'un \f(CW\*(C`use\ locale\*(C'\fR, Perl respecte le re\*'glage du \*(L"locale\*(R"
\&\f(CW\*(C`LC_NUMERIC\*(C'\fR qui contro\*^le la manie\*`re dont une application doit pre\*'senter les
nombres pour e\*^tre lisible par un humain lors de leur affichage par les
fonctions \fIprintf()\fR, \fIsprintf()\fR et \fIwrite()\fR. La conversion d'une chai\*^ne vers un
nombre par la fonction \fIPOSIX::strtod()\fR est aussi affecte\*'e. Dans la plupart des
imple\*'mentations, le seul effet est le changement du caracte\*`re utilise\*' comme
se\*'parateur de\*'cimal \*(-- peut\-e\*^tre de '.' en ','. Ces fonctions ne tiennent pas
compte des raffinements tels que la se\*'paration des milliers et autres. (Voir
\&\*(L"La fonction localeconv\*(R" si vous vous inte\*'ressez a\*` cela.)
.PP
La sortie produite par \fIprint()\fR n'est \fBjamais\fR affecte\*' par le \*(L"locale\*(R"
courant\ : son comportement ne de\*'pend pas d'un \f(CW\*(C`use locale\*(C'\fR ou d'un \f(CW\*(C`no
locale\*(C'\fR et correspond a\*` celui de \fIprintf()\fR avec un \*(L"locale\*(R" \*(L"C\*(R". C'est la me\*^me
chose pour les conversions internes de Perl entre formats de chai\*^nes et
formats nume\*'riques\ :
.PP
.Vb 2
\& use POSIX qw(strtod);
\& use locale;
\&
\& $n = 5/2; # Affecte la valeur nume\*'rique 2.5 a\*` $n
\&
\& $a = " $n"; # conversion en chai\*^ne inde\*'pendant du "locale"
\&
\& print "half five is $n\en"; # Affichage inde\*'pendant du "locale"
\&
\& printf "half five is %g\en", $n; # Affichage de\*'pendant du "locale"
\&
\& print "DECIMAL POINT IS COMMA\en"
\& if $n == (strtod("2,5"))[0]; # Conversion de\*'pendante du "locale"
.Ve
.Sh "Cate\*'gorie \s-1LC_MONETARY:\s0 format des valeurs mone\*'taires"
.IX Subsection "Cate'gorie LC_MONETARY: format des valeurs mone'taires"
Le C standard de\*'finit la cate\*'gorie \f(CW\*(C`LC_MONETARY\*(C'\fR mais aucune fonction n'est
affecte\*'e par son contenu. Par conse\*'quent, Perl n'en fera rien. Si vous voulez
vraiment utiliser \f(CW\*(C`LC_MONETARY\*(C'\fR, vous pouvez demander son contenu \*(-- voir
\&\*(L"La fonction localeconv\*(R" \*(-- et utiliser l'information renvoye\*'e pour pre\*'senter
vos valeurs mone\*'taires. Par contre, vous constaterez su\*^rement que, aussi
volumineuse et complexe que soit cette information, elle ne ne vous suffira
pas\ : la pre\*'sentation de valeurs mone\*'taires est tre\*`s difficile.
.Sh "\s-1LC_TIME\s0"
.IX Subsection "LC_TIME"
La valeur produite par \fIPOSIX::strftime()\fR, qui construit une chai\*^ne contenant
une date dans un format lisible par un e\*^tre humain, est affecte\*'e par le
\&\*(L"locale\*(R" courant \f(CW\*(C`LC_TIME\*(C'\fR. Donc, avec un \*(L"locale\*(R" franc\*,ais, la valeur
produite par \f(CW%B\fR (nom complet du mois) pour le premier mois de l'anne\*'e sera
\&\*(L"janvier\*(R". Voici comment obtenir la liste des noms longs des mois du \*(L"locale\*(R"
courant\ :
.PP
.Vb 5
\& use POSIX qw(strftime);
\& for (0..11) {
\& $long_month_name[$_] =
\& strftime("%B", 0, 0, 0, 1, $_, 96);
\& }
.Ve
.PP
Note\ : \f(CW\*(C`use locale\*(C'\fR n'est pas ne\*'cessaire dans cette exemple. En tant que
fonction n'existant que pour ge\*'ne\*'rer un re\*'sultat de\*'pendant du \*(L"locale\*(R",
\&\fIstrftime()\fR respecte toujours le \*(L"locale\*(R" \f(CW\*(C`LC_TIME\*(C'\fR.
.Sh "Autres cate\*'gories"
.IX Subsection "Autres cate'gories"
La dernie\*`re cate\*'gorie de \*(L"locale\*(R" \f(CW\*(C`LC_MESSAGES\*(C'\fR n'est pas actuellement
utilise\*'e par Perl \*(-- excepter qu'elle peut affecter le comportement de
certaines fonctions de quelques bibliothe\*`ques appele\*'es par des extensions ne
faisant pas partie de la distribution Perl standard ou du syste\*`me lui\-me\*^me ou
de ses utilitaires. Remarquez bien que la valeur de \f(CW$!\fR et les messages
d'erreur produits par des utilitaires externes peuvent e\*^tre modifie\*'s par
\&\f(CW\*(C`LC_MESSAGES\*(C'\fR. Si vous voulez des codes d'erreur portable, utilisez
\&\f(CW\*(C`%!\*(C'\fR. Voir Errno.
.SH "SE\*'CURITE\*'"
.IX Header "SE'CURITE'"
Bien que la pre\*'sentation des questions de se\*'curite\*' en Perl soit faite dans
perlsec, une pre\*'sentation de la gestion par Perl des \*(L"locale\*(R" ne pourrait
e\*^tre comple\*`te si elle n'attirait pas votre attention sur les questions de
se\*'curite\*' directement lie\*'es aux \*(L"locale\*(R". Les \*(L"locale\*(R" \*(-- en particulier sur
les syste\*`mes qui autorisent les utilisateurs non privile\*'gie\*'s a\*` construire leur
propre \*(L"locale\*(R" \*(-- ne sont pas su\*^r. Un \*(L"locale\*(R" malicieux (ou tout simplement
mal fait) peut amener une application lie\*'e aux \*(L"locale\*(R" a\*` produire des
re\*'sultats inattendus. Voici quelques possibilite\*'s\ :
.IP "\(bu" 4
Les expressions rationnelles ve\*'rifiant la validite\*' des noms de fichiers ou des
adresses mail en utilisant \f(CW\*(C`\ew\*(C'\fR peuvent e\*^tre abuse\*'es par un \*(L"locale\*(R"
\&\f(CW\*(C`LC_CTYPE\*(C'\fR qui pre\*'tend que des caracte\*`res tels que \*(L">\*(R" et \*(L"|\*(R" sont
alphanume\*'riques.
.IP "\(bu" 4
Les interpolations de chai\*^nes avec des conversions majuscules/minuscules
telles que \f(CW\*(C`$dest = "C:\eU$name.$ext"\*(C'\fR peuvent produire de dangereux
re\*'sultats si une table de conversion \s-1LC_CTYPE\s0 errone\*'e est active.
.IP "\(bu" 4
Certains syste\*`mes mal conc\*,us autorisent me\*^me les utilisateurs a\*` modifier le
\&\*(L"locale\*(R" \*(L"C\*(R". Si le se\*'parateur de\*'cimal de la cate\*'gorie \f(CW\*(C`LC_NUMERIC\*(C'\fR du
\&\*(L"locale\*(R" \*(L"C\*(R" est sournoisement change\*' du point vers la virgule alors
\&\f(CW\*(C`sprintf("%g", 0.123456e3)\*(C'\fR produira le re\*'sultat \*(L"123,456\*(R". De nombreuses
personnes l'interpre\*'teront alors comme cent vingt trois mille quatre cent
cinquante six.
.IP "\(bu" 4
Un \*(L"locale\*(R" \f(CW\*(C`LC_COLLATE\*(C'\fR sournois peut amener les e\*'tudiants avec une note \*(L"D\*(R"
a\*` e\*^tre classe\*'s devant ceux ayant un \*(L"A\*(R".
.IP "\(bu" 4
Une application se reposant sur les informations de \f(CW\*(C`LC_MONETARY\*(C'\fR pourrait
produire des de\*'bits comme si c'e\*'tait des cre\*'dit et vice versa si son \*(L"locale\*(R"
a e\*'te\*' perverti. Ou elle pourrait faire des paiements en dollars \s-1US\s0 au lieu de
dollars de Honk Kong.
.IP "\(bu" 4
Les dates et le nom des jours dans les dates formate\*'es par \fIstrftime()\fR pourrait
e\*^tre manipule\*'s avantageusement par un utilisateur malicieux ayant la
possibilite\*' de modifier le \*(L"locale\*(R" \f(CW\*(C`LC_DATE\*(C'\fR.
.PP
De tels dangers ne sont pas spe\*'cifiques au syste\*`me de \*(L"locale\*(R"\ : tous les
aspects de l'environnement d'une application qui peuvent e\*^tre malicieusement
modifie\*'s pre\*'sente les me\*^mes risques. De me\*^me, ils ne sont pas spe\*'cifiques a\*`
Perl\ : tous les langages de programmation qui vous permettent d'e\*'crire des
programmes qui tiennent compte de leur environnement sont expose\*'s a\*` ces
proble\*`mes.
.PP
Perl ne peut pas vous prote\*'ger de toutes les possibilite\*'s pre\*'sente\*'es dans ces
exemples \*(-- il n'y a rien de mieux que votre propre vigilance \*(-- mais, lorsque
\&\f(CW\*(C`use locale\*(C'\fR est actif, Perl utilise le me\*'canisme de souillure (voir
perlsec) pour marquer les chai\*^nes qui sont de\*'pendantes du \*(L"locale\*(R" et qui,
par conse\*'quence, ne sont pas su\*^res. Voici une liste des ope\*'rateurs et
fonctions dont le comportement vis\-a\*`\-vis des souillures peut e\*^tre affecte\*' par
le \*(L"locale\*(R"\ :
.ie n .IP "\fBOpe\*'rateurs de comparaison\fR (""lt""\fR, \f(CW""le""\fR, \f(CW""ge""\fR, \f(CW""gt""\fR et \f(CW""cmp""):" 4
.el .IP "\fBOpe\*'rateurs de comparaison\fR (\f(CWlt\fR, \f(CWle\fR, \f(CWge\fR, \f(CWgt\fR et \f(CWcmp\fR):" 4
.IX Item "Ope'rateurs de comparaison (lt, le, ge, gt et cmp):"
Les scalaires vrai/faux (ou plus petit/e\*'gal/plus grand) ne sont jamais
souille\*'s.
.ie n .IP "\fBInterpolation de\*'pendant de la casse\fR (avec ""\el""\fR, \f(CW""\eL""\fR, \f(CW""\eu""\fR ou \f(CW""\eU"")" 4
.el .IP "\fBInterpolation de\*'pendant de la casse\fR (avec \f(CW\el\fR, \f(CW\eL\fR, \f(CW\eu\fR ou \f(CW\eU\fR)" 4
.IX Item "Interpolation de'pendant de la casse (avec l, L, u ou U)"
Les chai\*^nes re\*'sultant d'une telle interpolation sont souille\*'es si \f(CW\*(C`use
locale\*(C'\fR est actif.
.ie n .IP "\fBOpe\*'rateur de reconnaissance\fR (""m//""):" 4
.el .IP "\fBOpe\*'rateur de reconnaissance\fR (\f(CWm//\fR):" 4
.IX Item "Ope'rateur de reconnaissance (m//):"
Les scalaires vrai/faux ne sont jamais souille\*'s.
.Sp
Les sous-motifs de\*'livre\*'s soit par un re\*'sultat dans un contexte de liste soit
par \f(CW$1\fR, etc. sont souille\*'s si \f(CW\*(C`use locale\*(C'\fR est actif et si le sous-motif de
l'expression rationnelle contient \f(CW\*(C`\ew\*(C'\fR (pour reconnai\*^tre un caracte\*`re
alphanume\*'rique), \f(CW\*(C`\eW\*(C'\fR (un caracte\*`re non alphanume\*'riques), \f(CW\*(C`\es\*(C'\fR (un caracte\*`re
blanc) ou \f(CW\*(C`\eS\*(C'\fR (un caracte\*`re non blanc). Les variables $&, $`, $' et $+ sont
aussi souille\*'es si \f(CW\*(C`use locale\*(C'\fR est actif et si l'expression rationnelle
contient \f(CW\*(C`\ew\*(C'\fR, \f(CW\*(C`\eW\*(C'\fR, \f(CW\*(C`\es\*(C'\fR ou \f(CW\*(C`\eS\*(C'\fR.
.ie n .IP "\fBOpe\*'rateur de substitution\fR (""s///""):" 4
.el .IP "\fBOpe\*'rateur de substitution\fR (\f(CWs///\fR):" 4
.IX Item "Ope'rateur de substitution (s///):"
A le me\*^me comportement que l'ope\*'rateur de reconnaissance. De plus, l'ope\*'rande
de gauche d'un \f(CW\*(C`=~\*(C'\fR devient souille\*' lorsque \f(CW\*(C`use locale\*(C'\fR est actif et si la
modification est le re\*'sultat d'une substitution base\*'e sur une expression
rationnelle impliquant \f(CW\*(C`\ew\*(C'\fR, \f(CW\*(C`\eW\*(C'\fR, \f(CW\*(C`\es\*(C'\fR ou \f(CW\*(C`\eS\*(C'\fR ainsi que les changements
de casse avec \f(CW\*(C`\el\*(C'\fR, \f(CW\*(C`\eL\*(C'\fR,\f(CW\*(C`\eu\*(C'\fR ou \f(CW\*(C`\eU\*(C'\fR.
.IP "\fBFonctions de pre\*'sentation\fR (\fIprintf()\fR et \fIwrite()\fR):" 4
.IX Item "Fonctions de pre'sentation (printf() et write()):"
Le re\*'sultat (e\*'chec ou re\*'ussite) n'est jamais souille\*'.
.IP "\fBLes fonctions de changement de casse\fR (\fIlc()\fR, \fIlcfirst()\fR, \fIuc()\fR, \fIucfirst()\fR):" 4
.IX Item "Les fonctions de changement de casse (lc(), lcfirst(), uc(), ucfirst()):"
Le re\*'sultat est souille\*' si \f(CW\*(C`use locale\*(C'\fR est actif.
.ie n .IP "\fBLes fonction \s-1POSIX\s0 de\*'pendant du ""locale""\fR (\fIlocaleconv()\fR, \fIstrcoll()\fR, \fIstrftime()\fR, \fIstrxfrm()\fR):" 4
.el .IP "\fBLes fonction \s-1POSIX\s0 de\*'pendant du ``locale''\fR (\fIlocaleconv()\fR, \fIstrcoll()\fR, \fIstrftime()\fR, \fIstrxfrm()\fR):" 4
.IX Item "Les fonction POSIX de'pendant du locale (localeconv(), strcoll(), strftime(), strxfrm()):"
Le re\*'sultat n'est jamais souille\*'.
.IP "\fBLes tests de classes de caracte\*`res \s-1POSIX\s0\fR (\fIisalnum()\fR, \fIisalpha()\fR, \fIisdigit()\fR, \fIisgraph()\fR, \fIislower()\fR, \fIisprint()\fR, \fIispunct()\fR, \fIisspace()\fR, \fIisupper()\fR, \fIisxdigit()\fR):" 4
.IX Item "Les tests de classes de caracte`res POSIX (isalnum(), isalpha(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), isxdigit()):"
Le re\*'sultat (vrai/faux) n'est jamais souille\*'.
.PP
Les trois exemples suivant illustrent les souillures de\*'pendant du \*(L"locale\*(R".
.PP
Le premier programme, qui ignore les \*(L"locale\*(R", ne fonctionne pas\ : une
valeur prise directement de la ligne de commande ne peut e\*^tre utilise\*'e pour
nommer un fichier de sortie lorsque le mode souille\*' est actif.
.PP
.Vb 2
\& #/usr/local/bin/perl \-T
\& # mode souille\*' actif (\-T)
\&
\& # Omission de la ve\*'rification de la ligne de commande
\& $tainted_output_file = shift;
\&
\& open(F, ">$tainted_output_file")
\& or warn "Open of $untainted_output_file failed: $!\en";
.Ve
.PP
Ce programme peut e\*^tre transforme\*' afin de \*(L"blanchir\*(R" la valeur souille\*'e gra\*^ce
a\*` une expression rationnelle\ : le deuxie\*`me exemple \*(-- qui ignore encore les
informations du \*(L"locale\*(R" \*(-- fonctionne et cre\*'e le fichier dont le nom est
donne\*' sur la ligne de commande si il le peut.
.PP
.Vb 1
\& #/usr/local/bin/perl \-T
\&
\& $tainted_output_file = shift;
\& $tainted_output_file =~ m%[\ew/]+%;
\& $untainted_output_file = $&;
\&
\& open(F, ">$untainted_output_file")
\& or warn "Open of $untainted_output_file failed: $!\en";
.Ve
.PP
Comparez avec le programme suivant qui, lui, prend en compte les \*(L"locale\*(R"\ :
.PP
.Vb 1
\& #/usr/local/bin/perl \-T
\&
\& $tainted_output_file = shift;
\& use locale;
\& $tainted_output_file =~ m%[\ew/]+%;
\& $localized_output_file = $&;
\&
\& open(F, ">$localized_output_file")
\& or warn "Open of $localized_output_file failed: $!\en";
.Ve
.PP
Ce troisie\*`me programme ne peut pas fonctionner parce que $& est souille\*'e\ :
c'est le re\*'sultat d'une reconnaissance impliquant \f(CW\*(C`\ew\*(C'\fR alors que \f(CW\*(C`use
locale\*(C'\fR est actif.
.SH "ENVIRONNEMENT"
.IX Header "ENVIRONNEMENT"
.IP "\s-1PERL_BADLANG\s0" 12
.IX Item "PERL_BADLANG"
Une chai\*^ne qui peut supprimer l'avertissement de Perl au de\*'marrage au sujet
des re\*'glages de \*(L"locale\*(R" incorrectes. L'e\*'chec peut provenir d'un support
de\*'fectueux des \*(L"locale\*(R" sur votre syste\*`me \*(-- ou d'une faute de frappe dans le
nom du \*(L"locale\*(R" lors de l'e\*'criture de votre environnement. Si cette variable
d'environnement est absente ou si sa valeur ne vaut pas ze\*'ro \*(-- \*(L"0\*(R" ou "\*(L" \*(--
Perl se plaindra au sujet des re\*'glages de \*(R"locale" incorrectes.
.Sp
\&\fBNote\fR\ : \s-1PERL_BADLANG\s0 ne vous donne qu'un moyen de cacher le message
d'avertissement. Ce message vous signale un proble\*`me de votre syste\*`me de
\&\*(L"locale\*(R" et vous devriez poussez vos investigations pour savoir d'ou\*` vient ce
proble\*`me.
.PP
Les variables d'environnement suivantes ne sont pas spe\*'cifiques a\*` Perl\ :
elles font parties de la me\*'thode standard (\s-1ISO\s0 C, \s-1XPG4\s0, \s-1POSIX\s0 1.c) \fIsetlocale()\fR
permettant de contro\*^ler la manie\*`re dont les applications ge\*`rent les donne\*'es.
.IP "\s-1LC_ALL\s0" 12
.IX Item "LC_ALL"
\&\f(CW\*(C`LC_ALL\*(C'\fR est la variable d'environnement \*(L"cache-tout-le-reste\*(R". Si elle
existe, elle cache toutes les autres variables d'environnement lie\*'es au
\&\*(L"locale\*(R".
.IP "\s-1LANGUAGE\s0" 12
.IX Item "LANGUAGE"
\&\fB\s-1NOTE\s0\fR\ : \f(CW\*(C`LANGUAGE\*(C'\fR est une extension \s-1GNU\s0. Elle ne vous affectera que si
vous utilisez la libc \s-1GNU\s0. C'est le cas si vous utilisez Linux. Si vous
utilisez un \s-1UNIX\s0 \*(L"commercial\*(R", vous n'utilisez probablement \fIpas\fR la libc \s-1GNU\s0
et vous pouvez ignorer \f(CW\*(C`LANGUAGE\*(C'\fR.
.Sp
En revanche, si votre bibliothe\*`que utilise \f(CW\*(C`LANGUAGE\*(C'\fR, cela affectera la
langue des messages d'information, d'avertissement et d'erreur produits par
vos commandes (autrement dit, c'est comme \f(CW\*(C`LC_MESSAGES\*(C'\fR) en ayant une
priorite\*' plus e\*'leve\*'e que \f(CW\*(C`LC_ALL\*(C'\fR. De plus, ce n'est une simple valeur mais
une suite (une liste se\*'pare\*'e par \*(L":\*(R") de \fIlangues\fR (pas des \*(L"locale\*(R"). Voir
\&\f(CW\*(C`gettext\*(C'\fR dans la documentation de votre bibliothe\*`que \s-1GNU\s0 pour plus
d'information.
.IP "\s-1LC_CTYPE\s0" 12
.IX Item "LC_CTYPE"
En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR, \f(CW\*(C`LC_CTYPE\*(C'\fR de\*'termine le type de caracte\*`res du
\&\*(L"locale\*(R". En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR et de \f(CW\*(C`LC_CTYPE\*(C'\fR, \f(CW\*(C`LANG\*(C'\fR est utilise\*'
pour choisir le type de caracte\*`res.
.IP "\s-1LC_COLLATE\s0" 12
.IX Item "LC_COLLATE"
En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR, \f(CW\*(C`LC_COLLATE\*(C'\fR de\*'termine l'ordre (de tri) du
\&\*(L"locale\*(R". En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR et de \f(CW\*(C`LC_COLLATE\*(C'\fR, \f(CW\*(C`LANG\*(C'\fR est utilise\*'
pour choir l'ordre.
.IP "\s-1LC_MONETARY\s0" 12
.IX Item "LC_MONETARY"
En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR, \f(CW\*(C`LC_MONETARY\*(C'\fR de\*'termine les re\*'glages mone\*'taires du
\&\*(L"locale\*(R". En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR et de \f(CW\*(C`LC_MONETARY\*(C'\fR, \f(CW\*(C`LANG\*(C'\fR est utilise\*'
pour choir les re\*'glages mone\*'taires.
.IP "\s-1LC_NUMERIC\s0" 12
.IX Item "LC_NUMERIC"
En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR, \f(CW\*(C`LC_NUMERIC\*(C'\fR de\*'termine l'affichage des nombres du
\&\*(L"locale\*(R". En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR et de \f(CW\*(C`LC_NUMERIC\*(C'\fR, \f(CW\*(C`LANG\*(C'\fR est utilise\*'
pour choir l'affichage des nombres.
.IP "\s-1LC_TIME\s0" 12
.IX Item "LC_TIME"
En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR, \f(CW\*(C`LC_TIME\*(C'\fR de\*'termine l'affichage des dates et
heures du \*(L"locale\*(R". En l'absence de \f(CW\*(C`LC_ALL\*(C'\fR et de \f(CW\*(C`LC_TIME\*(C'\fR, \f(CW\*(C`LANG\*(C'\fR est
utilise\*' pour choir l'affichage des dates et heures.
.IP "\s-1LANG\s0" 12
.IX Item "LANG"
\&\f(CW\*(C`LANG\*(C'\fR est la variable d'environnement ge\*'ne\*'rale des \*(L"locale\*(R". Si elle est
positionne\*'e, elle est utilise\*'e en dernier recours apre\*`s \f(CW\*(C`LC_ALL\*(C'\fR et \f(CW\*(C`LC_...\*(C'\fR
spe\*'cifique a\*` chaque cate\*'gorie.
.SH "NOTES"
.IX Header "NOTES"
.Sh "Compatibilite\*'"
.IX Subsection "Compatibilite'"
Les versions de Perl ante\*'rieures a\*` 5.004 ignorent la plupart du temps les
informations de \*(L"locale\*(R" et adoptent un comportement ge\*'ne\*'ral similaire au
choix du \*(L"locale\*(R" \f(CW"C"\fR me\*^me si l'environnement du programme sugge\*`re autre
chose (voir \*(L"La fonction setlocale\*(R"). Par de\*'faut, Perl conserve ce
comportement pour des raisons de compatibilite\*'. Si vous voulez qu'une
application Perl tienne compte aux informations de \*(L"locale\*(R", vous \fBdevez\fR
utiliser la directive \f(CW\*(C`use\ locale\*(C'\fR pour lui dire.
.PP
Les versions de Perl 5.002 et 5.003 utilisait l'information \f(CW\*(C`LC_CTYPE\*(C'\fR si
elle e\*'tait pre\*'sente. C'est a\*` dire que \f(CW\*(C`\ew\*(C'\fR comprenait ce qui e\*'tait une lettre
au sens du \*(L"locale\*(R" indique\*' par les variables d'environnement. Mais
l'utilisateur n'avait aucun contro\*^le sur cette fonctionnalite\*'\ : si la
bibliothe\*`que C supportait les \*(L"locale\*(R", Perl les utilisait.
.Sh "I18N:Collate obsole\*`te"
.IX Subsection "I18N:Collate obsole`te"
Dans les versions de Perl ante\*'rieures a\*` 5.004, il e\*'tait possible de ge\*'rer des
ordres lie\*'s aux \*(L"locale\*(R" gra\*^ce au module \f(CW\*(C`I18N::Collate\*(C'\fR. Ce module est
maintenant devenu largement obsole\*`te et devrait e\*^tre e\*'vite\*' dans de nouvelles
applications. La fonctionnalite\*' \f(CW\*(C`LC_COLLATE\*(C'\fR est maintenant comple\*`tement
inte\*'gre\*'e dans le coeur du langage Perl.
.Sh "Impactes sur la vitesses des tris et sur l'utilisation de la me\*'moire"
.IX Subsection "Impactes sur la vitesses des tris et sur l'utilisation de la me'moire"
Comparer et trier en respectant le \*(L"locale\*(R" est normalement plus lent que le
tri par de\*'faut. Des temps deux a\*` quatre fois plus longs ont e\*'te\*' observe\*'s. Ce
consomme aussi plus de me\*'moire\ : une fois qu'une variable scalaire de Perl
a\*` participe\*' a\*` une comparaison de chai\*^ne ou a\*` une ope\*'ration de tri respectant
les re\*`gles de tri du \*(L"locale\*(R", elle peut occuper de 3 a\*` 15 fois plus de
me\*'moire qu'avant (le facteur multiplicatif exact de\*'pend du contenu de la
chai\*^ne, du syste\*`me d'exploitation et du \*(L"locale\*(R"). Cette de\*'gradation est plus
dicte\*'e par l'imple\*'mentation des \*(L"locale\*(R" dans le syste\*`me d'exploitation que
par Perl.
.Sh "\fIwrite()\fP et \s-1LC_NUMERIC\s0"
.IX Subsection "write() et LC_NUMERIC"
Les formats constituent le seul endroit ou\*` Perl utilise inconditionnellement
les informations du \*(L"locale\*(R". Si l'environnement du programme spe\*'cifie un
\&\*(L"locale\*(R" \s-1LC_NUMERIC\s0, il est toujours utilise\*' pour spe\*'cifier le se\*'parateur
de\*'cimale des donne\*'es sorties par format. Les sorties formate\*'es ne peuvent pas
e\*^tre contro\*^le\*'es par \f(CW\*(C`use locale\*(C'\fR car cette directive est rattache\*'e a\*` la
structure de bloc du programme alors que, pour des raisons historiques, les
formats existent en dehors de cette structure.
.ie n .Sh "De\*'finitions de ""locale"" disponibles librement"
.el .Sh "De\*'finitions de ``locale'' disponibles librement"
.IX Subsection "De'finitions de locale disponibles librement"
Vous trouverez une grosse collection de de\*'finitions de \*(L"locale\*(R" sur
\&\f(CW\*(C`ftp://dkuug.dk/i18n/WG15\-collection\*(C'\fR. Il n'y a aucune garantie de
fonctionnement ni aucun support. Si votre syste\*`me d'exploitation accepte
l'installation de \*(L"locale\*(R" arbitraire, cela peut vous e\*^tre utile soit comme
\&\*(L"locale\*(R" directement utilisables soit comme base de de\*'veloppement de vos
propres \*(L"locale\*(R".
.Sh "I18n et l10n"
.IX Subsection "I18n et l10n"
\&\*(L"Internationalization\*(R" est souvent abre\*'ge\*' en \fBi18n\fR puisque la premie\*`re et la
dernie\*`re lettres sont se\*'pare\*'es par 18 autres lettres. De la me\*^me manie\*`re,
\&\*(L"localization\*(R" donne \fBl10n\fR.
.Sh "Un standard imparfait"
.IX Subsection "Un standard imparfait"
L'internationalisation, telle que de\*'finie par les standard C et \s-1POSIX\s0, peut
e\*^tre conside\*'re\*'e comme incomple\*`te, de faible gain et d'une granularite\*' trop
grossie\*`re (les \*(L"locale\*(R" s'appliquent a\*` l'ensemble d'un process alors qu'ils
devraient pouvoir s'appliquer a\*` un seul fil (thread), a\*` un seul groupe de
fene\*^tres ou autres). Elle a aussi tendance, comme dans tous les groupes de
standardisation. a\*` diviser le monde en nations alors que nous savons tous
qu'il peut aussi se diviser en cate\*'gories telles les banquiers, les cyclistes,
les joueurs, etc. Mais, pour l'instant, c'est le seul standard que nous
ayons. Cela peut e\*^tre conside\*'re\*' comme un bug.
.SH "BUGS"
.IX Header "BUGS"
.Sh "Les syste\*`mes bugue\*'s"
.IX Subsection "Les syste`mes bugue's"
Sur certains syste\*`mes, le support des \*(L"locale\*(R" est bugue\*' et ne peut e\*^tre
corrige\*' ou utilise\*' par Perl. De telles de\*'ficiences peuvent aboutir a\*` de
myste\*'rieux plantage de Perl lorsque \f(CW\*(C`use locale\*(C'\fR est actif. Si vous e\*^tes
confronte\*' a\*` un tel syste\*`me, rapportez ces de\*'tails insupportables a\*`
<\fIperlbug@perl.com\fR> et plaignez-vous aupre\*`s de votre vendeur\ : peut\-e\*^tre
existe-t-il des correctifs pour votre syste\*`me. Parfois, ces correctifs
s'appellent une mise a\*` jour.
.SH "VOIR AUSSI"
.IX Header "VOIR AUSSI"
\&\*(L"isalnum\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isalpha\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isdigit\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isgraph\*(R" in \s-1POSIX\s0
.PP
\&\*(L"islower\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isprint\*(R" in \s-1POSIX\s0,
.PP
\&\*(L"ispunct\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isspace\*(R" in \s-1POSIX\s0
.PP
\&\*(L"isupper\*(R" in \s-1POSIX\s0,
.PP
\&\*(L"isxdigit\*(R" in \s-1POSIX\s0
.PP
\&\*(L"localeconv\*(R" in \s-1POSIX\s0
.PP
\&\*(L"setlocale\*(R" in \s-1POSIX\s0,
.PP
\&\*(L"strcoll\*(R" in \s-1POSIX\s0
.PP
\&\*(L"strftime\*(R" in \s-1POSIX\s0
.PP
\&\*(L"strtod\*(R" in \s-1POSIX\s0,
.PP
\&\*(L"strxfrm\*(R" in \s-1POSIX\s0
.SH "HISTORIQUE"
.IX Header "HISTORIQUE"
Document original \fIperli18n.pod\fR de Jarkko Hietaniemi modifie\*' par Dominic
Dunlop assiste\*' des perl5\-porters. Prose un peu ame\*'liore\*'e par Tom Christiansen.
.PP
Dernie\*`re mise a\*` jour : Thu Jun 11 08:44:13 \s-1MDT\s0 1998
.SH "TRADUCTION"
.IX Header "TRADUCTION"
.Sh "Version"
.IX Subsection "Version"
Cette traduction franc\*,aise correspond a\*` la version anglaise distribue\*'e avec
perl 5.6.0. Pour en savoir plus concernant ces traductions, consultez
.
.Sh "Traducteur"
.IX Subsection "Traducteur"
Paul Gaborit
.Sh "Relecture"
.IX Subsection "Relecture"
Personne pour l'instant.