O arquivo /etc/locale.conf
abaixo
configura algumas variáveis de ambiente necessárias para suporte ao
idioma nativo. Configurá-las adequadamente resulta em:
A saída gerada de aplicativos sendo traduzida para seu idioma nativo
A classificação correta dos caracteres em letras, dígitos e outras classes. Isso é necessário para o bash aceitar adequadamente caracteres não ASCII em linhas de comando em locales não ingleses
A sequência de ordenação alfabética correta para o país
O apropriado tamanho padrão de papel
A formatação correta dos valores monetário, hora e data
Substitua <ll>
abaixo
pelo código de duas letras para seu 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 seu locale
escolhido. Modificadores opcionais, tais como “@euro”, possivelmente
também estejam 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 um locale específico. Para
determinar o nome canônico, execute o seguinte comando, onde
<nome do locale>
é a
saída gerada dada por locale
-a para seu locale preferido (“en_GB.iso88591” no nosso
exemplo).
LC_ALL=<nome do locale>
mapa de caracteres do locale
Para o locale “en_GB.iso88591”, o comando acima imprimirá:
ISO-8859-1
Isso resulta em uma configuração final de locale de “en_GB.ISO-8859-1”. É importante que o locale encontrado usando-se a heurística acima seja testado antes que ele seja adicionado 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.
Alguns pacotes além do LFS também possivelmente careçam de suporte para seu locale escolhido. Um exemplo é a biblioteca do X (parte do X Window System), a qual externaliza a seguinte mensagem de erro se o locale não corresponder exatamente a um dos nomes de mapa de carácter nos arquivos internos dela:
Warning: locale not supported by Xlib, locale set to C
Em vários casos, a Xlib espera que o mapa de carácter será listado em notação de letras maiúsculas com hifens canônicos. Por exemplo, "ISO-8859-1" em vez de "iso88591". Também é possível encontrar uma especificação apropriada removendo-se a parte do mapa de carácter da especificação de locale. Isso pode ser verificado executando-se o comando locale charmap em ambos os locales. Por exemplo, alguém poderia ter que mudar "de_DE.ISO-8859-15@euro" para "de_DE@euro" para a finalidade de conseguir que esse locale fosse reconhecido pela Xlib.
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
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"
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.
Os locales “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 nesse locale. 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 o locale “C” somente se tiver certeza de que nunca precisará de caracteres de 8 bits.