Como alterar a variável de ambiente local?

15

Gerei 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 local para um ru_RU.utf8 ou en_US.utf8 , isso não terá 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, mas LANGUAGE = e LC_ALL = , terão o valor < em> LANG = variável. Existe uma maneira de modificar cada variável de localidade separadamente? Além disso, estou correto que as variáveis de localidade não são variáveis de shell regulares, mas mais como parâmetros para o utilitário locale ?

    
por Martin 04.05.2013 / 00:55

4 respostas

9

Você pode definir qualquer categoria de localidade de forma independente. LANG aplica-se apenas às categorias que não estão definidas explicitamente.

LANG e LC_xxx são variáveis de ambiente comuns. Elas não são configurações para o utilitário locale : o programa locale não está envolvido em nenhum processamento de código de idioma, é apenas um pequeno utilitário para relatar 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, elas não são vistas por outros programas. Variáveis de ambiente, por outro lado, são herdadas pelos programas que o shell inicia. Você precisa exportar a variável para o ambiente também:

$ 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"
    
por 04.05.2013 / 03:03
6

Sob as distros baseadas no Fedora / CentOS / RHEL eu acredito que você pode mudar a localidade para uma das localidades exibidas quando você executar o comando locale -a 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:

EuachoqueéumpoucodiferenteparaasdistribuiçõesDebian/Ubuntu.Euacreditoqueéessearquivo:

/etc/default/locale

Acreditoquesejamvariáveisdeambiente,masnãointeiramentesegurasdecomoosaplicativosasutilizam.

Referências

por 04.05.2013 / 01:52
1

Em RedHat 6, pelo menos, observe que se LC_ALL estiver configurado, a configuração de outras variáveis de ambiente LC_ * não terá efeito, já que 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=
    
por 21.02.2018 / 22:40
1

Nos sistemas Debian, pode-se executar dpkg-reconfigure locales para definir o idioma principal e disponibilizar outros; então, é possível executar update-locale para definir a variável de ambiente LANGUAGE em /etc/default/locale para ter idiomas de fallback.

    
por 01.03.2017 / 23:57