Como alterar a variável de ambiente de localidade?

Como alterar a variável de ambiente de localidade?

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. LANGaplica-se apenas às categorias que não estão explicitamente definidas.

LANGe LC_xxxsão variáveis ​​de ambiente comuns. Elas não são configurações do localeutilitário: o localeprograma 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 -acomando 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:

             ss de lang. 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 localespara definir o idioma principal e disponibilizar outros; então pode-se executar update-localepara definir a LANGUAGEvariável de ambiente /etc/default/localepara ter linguagens substitutas.

informação relacionada