O que exatamente significam as strings de localidade LC_* no Linux?

O que exatamente significam as strings de localidade LC_* no Linux?

Quando digito no prompt de comando do Linux

locale

Recebo uma longa lista de LC_*variáveis ​​(como LC_TIMEe 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-15e 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-15e 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_CHto 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 LANGem quase todos os programas que possuem traduções. LC_COLLATEafeta os resultados do sortprograma; LC_DATEafeta a saída de datee 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.

informação relacionada