Eu criei os arquivos de localização en_US.utf8 , et_EE.iso88591 e ru_RU.utf8 . Agora, se eu tentar alterar qualquer uma das variáveis de localidade para um ru_RU.utf8 ou en_US.utf8 , isso não terá nenhum efeito:
# 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"
#
No entanto, se eu alterar a variável LANG = , todas as outras variáveis, exceto LANGUAGE = e LC_ALL =, receberão o valor da variável LANG = . Existe uma maneira de modificar cada variável de localidade separadamente? Além disso, estou correto de que as variáveis de localidade não são variáveis comuns do shell, mas mais como parâmetros para o utilitário de localidade ?
fonte
LANG
eLC_xxx
são variáveis de ambiente? meus testes mostram que apenasLANG
eLANGUAGE
eLC_MESSAGES
eLC_ALL
são variáveis de ambiente, enquanto outras variáveis gostamLC_CTYPE
eLC_MONETARY
não são variáveis de ambiente (também, elas não são variáveis de shell)?env LC_TIME=en_GB date
comenv LC_TIME=fr_FR date
eenv PATH="$PATH" date
(obviamente, escolha locais que existem no seu sistema). Obviamente, cada variável pode ou não ser definida no ambiente de um determinado processo. Que teste você fez? Tem certeza de que o aplicativo que você usou se comporta de maneira diferente com base emLC_CTYPE
(bastante comum) eLC_MONETARY
(bastante raro)?printenv
comando para listar as variáveis de ambiente do bash, e onlyLANG
eLANGUAGE
eLC_MESSAGES
andLC_ALL
foram listados como variáveis de ambiente. Também executei o comandoset -o posix
seguido pelo comandoset
para obter as variáveis de ambiente e as variáveis de shell do bash, e onlyLANG
eLANGUAGE
andLC_MESSAGES
andLC_ALL
foram listados. Então isso significa queLANG
eLANGUAGE
eLC_MESSAGES
eLC_ALL
são variáveis de ambiente e o resto das variáveis de localidade não são, e também eles não são variáveis do shell.LANG
,LANGUAGE
,LC_MESSAGES
eLC_ALL
. (Você fez isso explicitamente ou sua distribuição ou o administrador do sistema fez isso por você.) Você pode definir uma variável de ambiente com qualquer nome (válido sintaticamente)! Mas alguns nomes são significativos para alguns aplicativos e outros não.LC_MESSAGES
,LC_CTYPE
,LC_TIME
E assim por diante são utilizadas por aplicações que se preocupam com o idioma das mensagens de erro, a codificação de caracteres, o formato da hora, e assim por diante.LC_ALL
substitui todas as outras configurações, portanto, o valor das outras variáveis de localidade não importa. Normalmente, ele é usado apenas temporariamente para forçar um programa a usar um determinado local, não faz sentido tê-lo em seu ambiente normal.Nas distros baseadas no Fedora / CentOS / RHEL, acredito que você pode alterar o código do idioma para um dos códigos de idioma exibidos quando você executa o
locale -a
comando neste arquivo de sistema:Por exemplo, no meu sistema Fedora 14:
No GNOME, você pode executar o aplicativo de ajuda:
O que traz essa GUI:
Eu acho que é um pouco diferente para as distribuições Debian / Ubuntu. Eu acredito que é este arquivo:
Acredito que sejam variáveis de ambiente, mas não tenho certeza de como os aplicativos as utilizam, se é que o fazem.
Referências
fonte
No RedHat 6, pelo menos, observe que se LC_ALL estiver definido, a definição de outras variáveis de ambiente LC_ * não terá efeito, pois LC_ALL terá precedência sobre todas as outras variáveis de ambiente LC_ *.
fonte
Nos sistemas Debian, pode-se executar
dpkg-reconfigure locales
para definir o idioma principal e disponibilizar outros; pode-se executarupdate-locale
para definir aLANGUAGE
variável de ambiente/etc/default/locale
para ter idiomas de fallback.fonte
dpkg-reconfigure locales
, nãolocale