.\" Automatically generated by Pod::Man 2.06 (Pod::Simple 3.04) .\" .\" 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. | will give a .\" real vertical bar. \*(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-|\(bv\*(Tr .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\} .\" .\" 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. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" 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 "2006-03-03" "DocFr" "User Contributed Perl Documentation" .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'existait pas avant Perl 5.004 \& require 5.004; \& \& # Import des outils de manipulation du "locale" \& # depuis le module POSIX. \& # Cette exemple utilise : setlocale \-\- l'appel 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'environnement 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'une 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()}{'thousands_sep', 'grouping'}; \& \& # Valeur par de\*'faut \& $thousands_sep = ',' unless $thousands_sep; \& \& # grouping et mon_grouping sont sous la forme d'un 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'il 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'utilisant 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.