9.7. Configurando o Locale do Sistema

Algumas variáveis de ambiente são necessárias para suporte ao idioma nativo. Configurá-las adequadamente resulta em:

Substitua <ll> abaixo pelo código de duas letras para teu idioma desejado (por exemplo, en) e <CC> pelo código de duas letras para o país apropriado (por exemplo, GB). <charmap> deveria ser substituído pelo mapa de caracteres canônico para a tua localidade escolhida. Modificadores opcionais, tais como @euro, também podem estar presentes.

A lista de todos os locales suportados pela Glibc pode ser obtida executando-se o seguinte comando:

locale -a

Mapas de caracteres podem ter um número de apelidos, por exemplo, ISO-8859-1 também é referenciado como iso8859-1 e iso88591. Alguns aplicativos não conseguem lidar com os vários sinônimos corretamente (por exemplo, exigem que UTF-8 seja escrito como UTF-8, não utf8), de forma que é mais seguro, na maioria dos casos, escolher o nome canônico para uma localidade específica. Para determinar o nome canônico, execute o seguinte comando, onde <nome da localidade> é a saída gerada dada por locale -a para a tua localidade preferida (en_GB.iso88591 no nosso exemplo).

LC_ALL=<nome do locale> mapa de caracteres do locale

Para a localidade en_GB.iso88591, o comando acima imprimirá:

ISO-8859-1

Isso resulta em uma configuração final de localidade de en_GB.ISO-8859-1. É importante que a localidade encontrada usando-se a heurística acima seja testada antes que seja adicionada aos arquivos de inicialização do "Bash":

LC_ALL=<nome do locale> locale language
LC_ALL=<nome do locale> locale charmap
LC_ALL=<nome do locale> locale int_curr_symbol
LC_ALL=<nome do locale> locale int_prefix

Os comandos acima deveriam imprimir o nome do idioma, a codificação de caracteres usada pelo locale, a moeda local, e o prefixo para discar antes do número de telefone para a finalidade de se alcançar o país. Se quaisquer dos comandos acima falhar com uma mensagem similar àquela mostrada abaixo, [então] isso significa que seu locale ou não foi instalado no Capítulo 8 ou não é suportado pela instalação padrão da Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Se isso acontecer, [então] você deveria ou instalar o locale desejado usando o comando localedef, ou considerar escolher um locale diferente. As instruções posteriores assumem que não existem tais mensagens de erro originárias da Glibc.

Outros pacotes também podem funcionar incorretamente (mas, possivelmente não necessariamente exibam quaisquer mensagens de erro) se o nome do locale não corresponder às expectativas deles. Nesses casos, investigar-se como outras distribuições do Linux suportam seu locale poderia fornecer alguma informação útil.

Uma vez que as configurações adequadas de locale tenham sido determinadas, crie o arquivo /etc/locale.conf:

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<mapa_caracteres><@modificadores>
EOF

O aplicativo de shell /bin/bash (aqui chamado de o shell) usa uma coleção de arquivos de iniciação para ajudar a criar o ambiente para execução. Cada arquivo tem um uso específico e pode afetar o login e os ambientes interativos diferentemente. Os arquivos no diretório /etc fornecem configurações globais. Se arquivos equivalentes existirem no diretório inicial, eles poderão substituir as configurações globais.

Um shell interativo de login é iniciado depois de um login bem-sucedido, usando /bin/login, lendo o arquivo /etc/passwd. Um shell interativo sem login é iniciado na linha de comando (por exemplo, [prompt]$/bin/bash). Um shell não interativo geralmente está presente quando um conjunto de comandos sequenciais de shell está em execução. Não é interativo porque está processando um conjunto de comandos sequenciais e não aguardando a entrada do(a) usuário(a) entre os comandos.

Os shells de login geralmente não são afetados pelas configurações em /etc/locale.conf. Crie o /etc/profile para ler as configurações de localidade a partir de /etc/locale.conf e exportá-las, mas defina a localidade C.UTF-8 se executar no console do Linux (para evitar que aplicativos emitam caracteres que o console do Linux não consiga renderizar):

cat > /etc/profile << "EOF"
# Inicia /etc/profile

for i in $(locale); do
  unset ${i%=*}
done

if [[ "$TERM" = linux ]]; then
  export LANG=C.UTF-8
else
  source /etc/locale.conf

  for i in $(locale); do
    key=${i%=*}
    if [[ -v $key ]]; then
      export $key
    fi
  done
fi

# Termina /etc/profile
EOF

Observe que você consegue modificar o /etc/locale.conf com o utilitário localectl do systemd. Para usar o localectl para o exemplo acima, execute:

localectl set-locale LANG="<ll>_<CC>.<mapa_caracteres><@modificadores>"

Você também pode especificar outras variáveis de ambiente específicas de idioma, tais como LANG; LC_CTYPE; LC_NUMERIC; ou qualquer outra variável de ambiente oriunda da saída gerada de locale. Apenas separe-as com um espaço. Um exemplo onde LANG é configurada como en_US.UTF-8, porém LC_CTYPE é configurada apenas como en_US é:

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
[Nota]

Nota

Por favor, observe que o comando localectl não funciona no ambiente chroot. Ele somente pode ser usado depois que o sistema LFS for inicializado com o systemd.

As localidades C (padrão) e en_US (aquele recomendado para usuários(as) do inglês dos Estados Unidos da América do Norte) são diferentes. C usa o conjunto de caracteres de 7 bits US-ASCII e trata bytes com o bit de ordem alta configurado como caracteres inválidos. Esse é o porquê, por exemplo, do comando ls substitui-los por pontos de interrogação nessa localidade. Também, uma tentativa de enviar correio com tais caracteres a partir do Mutt ou do Pine resulta em mensagens de não conformidade com RFC sendo enviadas (o conjunto de caracteres no correio de saída é indicado como unknown 8-bit). É sugerido que você use a localidade C somente se tiver certeza de que nunca precisará de caracteres de 8 bits.