Quando digito no prompt de comando do Linux
locale
Recebo uma longa lista de LC_*
variáveis (como LC_TIME
e assim por diante). O valor das variáveis se parece com os desta lista:
en_US.8859-1
de_DE@euro
fr_FR.utf-8
O que exatamente significam as partes individuais?
Eu sei que @euro
é idêntico .8859-15
e geralmente a última parte significa o conjunto de caracteres real (o mapeamento de bytes para símbolos reais). Mas o que exatamente os dois primeiros códigos “fazem”? Que propriedades do sistema eles influenciam? Por exemplo (só para ter algum exemplo para trabalhar), qual é a diferença entre en_US.8859-15
, de_DE.8859-15
, de_CH.8859-15
e en_CU.8859-15
? Todos têm exatamente o mesmo conjunto de caracteres, então todos os arquivos de texto que eu abrir no editor de minha escolha teriam a mesma aparência. Então, o que aconteceria se eu mudasse de um "código pré-charset" para outro "código pré-charset" (como from de_CH
to en_US
)?
Existe alguma tabela que liste as diferenças em uma tabela bonita e fácil de ler?
Responder1
As duas partes formam umCódigo de idioma ISO-639. A primeira parte é a própria linguagem, e a segunda é (geralmente) umCódigo do paísespecificando qual variante local.
Você pode observar o efeito da mudança LANG
em quase todos os programas que possuem traduções. LC_COLLATE
afeta os resultados do sort
programa; LC_DATE
afeta a saída de date
e ls -l
. Para algumas configurações de localidade, é possível (e até provável) que você não tenha nada instalado que as utilize.
Na maioria dos sistemas, apenas LC_LANG
é definido e todas as outras configurações herdam disso.
A seguinte citação da página de manual de locale
(7) é relevante:
LC_COLLATE
Isso é usado para alterar o comportamento das funções strcoll(3) e strxfrm(3), que são usadas para comparar strings no alfabeto local. Por exemplo, o s sustenido alemão é classificado como "ss".
LC_CTYPE
Isso altera o comportamento das funções de manipulação e classificação de caracteres, como isupper(3) e toupper(3), e das funções de caracteres multibyte, como mblen(3) ou wctomb(3).
LC_MONETARY
altera as informações retornadas por localeconv(3) que descreve a forma como os números são normalmente impressos, com detalhes como ponto decimal versus vírgula decimal. Esta informação é usada internamente pela função strfmon(3).
LC_MESSAGES
altera o idioma em que as mensagens são exibidas e a aparência de uma resposta afirmativa ou negativa. A biblioteca C GNU contém as funções gettext(3), ngettext(3) e rpmatch(3) para facilitar o uso dessas informações. A família de funções gettext do GNU também obedece à variável de ambiente LANGUAGE (contendo uma lista de localidades separadas por dois pontos) se a categoria for definida como uma localidade válida diferente de "C".
LC_NUMERIC
altera as informações usadas pelas famílias de funções printf(3) e scanf(3), quando são aconselhadas a usar as configurações de localidade. Esta informação também pode ser lida com a função localeconv(3).
LC_TIME
altera o comportamento da função strftime(3) para exibir a hora atual em um formato localmente aceitável; por exemplo, a maior parte da Europa usa um relógio de 24 horas em vez do relógio de 12 horas usado nos Estados Unidos.
LC_ALLTudo o que precede.