web-dev-qa-db-fra.com

Comment changer la variable d'environnement locale?

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?

18
Martin

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:

ss of lang. gui

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.

Références

6
slm

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=
4
Kiwicmc

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.

1
Leandro