eu tenho geradoen_US.utf8,et_EE.iso88591eru_RU.utf8arquivos de localização. Agora, se eu tentar alterar qualquer uma das variáveis de localidade para umru_RU.utf8ouen_US.utf8, então isso não tem 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 mudar oLANG =variável, então todas as outras variáveis, masIDIOMA=eLC_ALL=pegue o valor doLANG =variável. Existe uma maneira de modificar cada variável de localidade separadamente? Além disso, estou certo de que as variáveis de localidade não são variáveis regulares do shell, mas mais como parâmetros paralocalidadeUtilitário?
Responder1
Você pode definir qualquer categoria de localidade de forma independente. LANG
aplica-se apenas às categorias que não estão explicitamente definidas.
LANG
e LC_xxx
são variáveis de ambiente comuns. Elas não são configurações do locale
utilitário: o locale
programa não está envolvido em nenhum processamento de localidade, é apenas um pequeno utilitário para relatar as configurações de localidade atuais e disponíveis.
Quando você escreve LC_TIME=ru_RU.utf8
, isso não define uma variável de ambiente, apenas uma variável de shell. As variáveis do shell são internas ao shell e não são vistas por outros programas. As variáveis de ambiente, por outro lado, são herdadas pelos programas que o shell inicia. Você também precisa exportar a variável para o ambiente:
$ 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 diretamente
$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
Responder2
Nas distros baseadas em Fedora/CentOS/RHEL, acredito que você pode alterar o código do idioma para um dos códigos de idioma exibidos ao executar o locale -a
comando neste arquivo de sistema:
/etc/sysconfig/i18n
Por exemplo, no meu sistema Fedora 14:
$ more /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
No GNOME você pode executar o aplicativo de ajuda:
system-config-language
O que traz esta GUI:
Acho que é um pouco diferente para as distros Debian/Ubuntu. Acredito que seja este arquivo:
/etc/default/locale
Acredito que sejam variáveis de ambiente, mas não tenho certeza de como os aplicativos as utilizam.
Referências
Responder3
Pelo menos no RedHat 6, observe que se LC_ALL estiver definido, então definir outras variáveis de ambiente LC_* não terá efeito, pois LC_ALL tem precedência sobre todas as outras variáveis de ambiente 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=
Responder4
Em sistemas Debian, pode-se executar dpkg-reconfigure locales
para definir o idioma principal e disponibilizar outros; então pode-se executar update-locale
para definir a LANGUAGE
variável de ambiente /etc/default/locale
para ter linguagens substitutas.