As configurações de localidade são preferências do usuário relacionadas à sua cultura.
Nomes de localidade
Em todas as variantes atuais do unix que eu conheço (mas não em algumas antiguidades), os nomes de localidades seguem o mesmo padrão:
- Um código de idioma com duas letras minúsculas ISO 639-1 ou um código de idioma com três letras ISO 639-2 se o idioma não possuir código de duas letras. Por exemplo,
en
para inglês, de
alemão, ja
japonês, uk
ucraniano, ber
berbere,…
- Para muitos idiomas, mas não todos, um sublinhado
_
seguido por um código de país com duas letras maiúsculas ISO 3166 . Assim: en_US
para inglês dos EUA, inglês en_UK
britânico, francês fr_CA
canadense (Quebec), de_DE
alemão da Alemanha, de_AT
alemão da Áustria, ja_JP
japonês (do Japão), etc.
- Opcionalmente, um ponto
.
seguido do nome de uma codificação de caracteres , como UTF-8
, ISO-8859-1
, KOI8-U
, GB2312
, Big5
, etc. Com GNU libc, pelo menos, (eu não sei como difundido este é), caso e pontuação é ignorada na codificação de nomes. Por exemplo, o zh_CN.UTF-8
chinês mandarim (simplificado) é codificado em UTF-8, enquanto o zh_CN
chinês mandarim é codificado em GB2312 e o zh_TW
chinês taiwanês (tradicional) é codificado em Big5.
- Opcionalmente, um sinal de arroba
@
seguido pelo nome de uma variante. O significado de variantes depende da localidade. Por exemplo, muitos países europeus têm uma @euro
variante de localidade em que o sinal de moeda é € e a codificação é aquela que inclui esse caractere (ISO 8859-15 ou ISO 8859-16), em oposição à variante sem adornos do sinal de moeda mais antigo. Por exemplo, en_IE
(inglês, Irlanda) usa a codificação latin1 (ISO 8859-1) e £ como símbolo da moeda, enquanto en_IE@euro
usa a codificação latin9 (ISO 8859-15) e € como o símbolo da moeda.
Além disso, existem dois nomes de código de idioma que existem em todos os sistemas do tipo unix: C
e POSIX
. Esses nomes são sinônimos e significam computador, ou seja, configurações padrão apropriadas para dados analisados por um programa de computador.
Configurações de localidade
As seguintes categorias de localidade são definidas pelo POSIX :
LC_CTYPE
: o conjunto de caracteres usado pelos aplicativos do terminal: dados de classificação (quais caracteres são letras, pontuação, espaços, inválidos etc.) e conversão de maiúsculas e minúsculas. Os utilitários de texto normalmente atendem LC_CTYPE
à determinação dos limites de caracteres.
LC_COLLATE
: ordem de agrupamento (ou seja, classificação). Essa configuração é de uso muito limitado por vários motivos:
- A maioria dos idiomas possui regras complexas que dependem do que está sendo classificado (por exemplo, palavras do dicionário e nomes próprios podem não usar a mesma ordem) e não podem ser expressadas por
LC_COLLATE
.
- Existem poucos aplicativos em que a ordem de classificação adequada é importante, executada pelo software que usa as configurações de localidade. Por exemplo, os processadores de texto armazenam o idioma e a codificação de um arquivo no próprio arquivo (caso contrário, o arquivo não seria processado corretamente em um sistema com diferentes configurações de localidade) e não se preocupa com as configurações de localidade especificadas pelo ambiente.
LC_COLLATE
pode ter efeitos colaterais desagradáveis, principalmente porque causa a ordem de classificação A <a <B <..., que faz com que "entre A e Z" inclua as letras minúsculas de a a y. Em particular, expressões regulares muito comuns, como [A-Z]
quebram alguns aplicativos .
LC_MESSAGES
: o idioma das mensagens informativas e de erro.
LC_NUMERIC
: formatação numérica: separador decimal e milhares.
Muitos aplicativos codificam .
como separador decimal. Isso LC_NUMERIC
não é muito útil e potencialmente perigoso:
- Mesmo se você configurá-lo, ainda verá o formato padrão com bastante frequência.
- É provável que você entre em uma situação em que um aplicativo produz saída dependente da localidade e outro aplicativo espere
.
ser o ponto decimal ou ,
um separador de campos.
LC_MONETARY
: como LC_NUMERIC
, mas para montantes em moeda local.
Muito poucos aplicativos usam isso.
LC_TIME
: formatação de data e hora: nomes de dias da semana e meses, relógio de 12 ou 24 horas, ordem das partes da data, pontuação etc.
O GNU libc, que você encontrará no Linux não incorporado, define categorias de código de idioma adicionais:
LC_PAPER
: o tamanho do papel padrão (definido por altura e largura).
LC_NAME
, LC_ADDRESS
, LC_TELEPHONE
, LC_MEASUREMENT
, LC_IDENTIFICATION
: Eu não sei de qualquer aplicativo que usa estes.
Variáveis ambientais
Os aplicativos que usam configurações de localidade os determinam a partir de variáveis de ambiente.
- Em seguida, o valor da
LANG
variável de ambiente é usado, a menos que seja substituído por outra configuração. Se LANG
não estiver definido, o código do idioma padrão é C
.
- Os
LC_xxx
nomes podem ser usados como variáveis de ambiente.
- Se
LC_ALL
estiver definido, todos os outros valores serão ignorados; isso é útil principalmente para definir LC_ALL=C
aplicativos de execução que precisam produzir a mesma saída, independentemente de onde eles são executados.
- Além disso, o GNU libc usa
LANGUAGE
para definir fallbacks para LC_MESSAGES
(por exemplo, LANGUAGE=fr_BE:fr_FR:en
para preferir o francês belga ou, se não estiver disponível, o francês, ou se o inglês não estiver disponível).
Instalando localidades
Os dados de localidade podem ser grandes, portanto, algumas distribuições não os enviam de forma utilizável e requerem uma etapa de instalação adicional.
- No Debian, para instalar localidades, execute
dpkg-reconfigure locales
e selecione na lista na caixa de diálogo ou edite /etc/locale.gen
e execute locale-gen
.
- No Ubuntu, para instalar localidades, execute
locale-gen
os nomes das localidades como argumentos.
Você pode definir seu próprio código de idioma .
Recomendação
As configurações úteis são:
- Defina
LC_CTYPE
o idioma e a codificação em que você codifica seus arquivos de texto. Verifique se os seus terminais usam essa codificação.
Para a maioria dos idiomas, apenas a codificação é importante. Há poucas exceções; por exemplo, uma maiúscula i
está I
na maioria dos idiomas, mas İ
em turco ( tr_TR
).
- Defina
LC_MESSAGES
para o idioma em que você deseja ver as mensagens.
- Defina
LC_PAPER
como en_US
se você deseja que US Letter seja o tamanho de papel padrão e praticamente qualquer outra coisa (por exemplo en_GB
), se você deseja A4.
- Opcionalmente, defina o
LC_TIME
seu formato de hora favorito.
Como explicado acima, evite configurar LC_COLLATE
e LC_NUMERIC
. Se você usar LANG
, substitua explicitamente essas duas categorias, configurando-as para C
.
LC_PAPER
. E posso atualizar isso no sistema sem reiniciar?/etc/default/locale
. Esses arquivos entram em vigor quando você faz login; você pode fazerexport LC_PAPER=…
em um shell para afetar os comandos lançados a partir desse shell.