J'ai généré en_US.utf8, et_EE.iso88591 et ru_RU.utf8 fichiers de localisation. Maintenant, si j'essaie de changer l'une des variables locales en ru_RU.utf8 ou en_US.utf8, cela n'a aucun effet:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
Cependant, si je change la variable LANG =, toutes les autres variables mais LANGUAGE = et LC_ALL = prennent la valeur de LANG = variable. Existe-t-il un moyen de modifier chaque variable locale séparément? De plus, ai-je raison de dire que les variables locales ne sont pas des variables Shell régulières, mais plutôt des paramètres pour l'utilitaire locale?
Vous pouvez définir n'importe quelle catégorie de paramètres régionaux indépendamment. LANG
s'applique uniquement aux catégories qui ne sont pas définies explicitement.
LANG
et LC_xxx
sont des variables d'environnement ordinaires. Ce ne sont pas des paramètres pour l'utilitaire locale
: le programme locale
n'est impliqué dans aucun traitement de paramètres régionaux, c'est juste un petit utilitaire pour signaler les paramètres régionaux actuels et disponibles.
Lorsque vous écrivez LC_TIME=ru_RU.utf8
, cela ne définit pas une variable d'environnement, seulement une variable Shell. Les variables du shell sont internes au shell, elles ne sont pas vues par les autres programmes. Les variables d'environnement, en revanche, sont héritées par les programmes que Shell démarre. Vous devez également exporter la variable dans l'environnement:
$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
ou directement
$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
Sous les distributions basées sur Fedora/CentOS/RHEL, je pense que vous pouvez remplacer les paramètres régionaux par l'un des paramètres régionaux affichés lorsque vous exécutez locale -a
commande dans ce fichier système:
/etc/sysconfig/i18n
Par exemple sur mon système Fedora 14:
$ more /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-Sun16"
Sous GNOME, vous pouvez exécuter l'application d'aide:
system-config-language
Ce qui fait apparaître cette interface graphique:
Je pense que c'est légèrement différent pour les distributions Debian/Ubuntu. Je crois que c'est ce fichier:
/etc/default/locale
Je pense que ce sont des variables d'environnement, mais je ne sais pas trop comment les applications les utilisent, le cas échéant.
Sur RedHat 6 au moins, notez que si LC_ALL est défini, la définition d'autres variables d'environnement LC_ * n'aura aucun effet, car LC_ALL a priorité sur toutes les autres variables d'environnement LC_ *.
[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=
Dans les systèmes Debian, on peut exécuter dpkg-reconfigure locales
pour définir la langue principale et en rendre d'autres disponibles; alors on peut exécuter update-locale
pour définir la variable d'environnement LANGUAGE
dans /etc/default/locale
pour avoir des langues de secours.