O que exatamente as cadeias de local LC_ * no Linux significam?

1

Quando eu digito no meu prompt de comando do Linux

locale

Eu obtenho uma longa lista de variáveis LC_* (como LC_TIME e assim por diante). O valor das variáveis é parecido com o da lista:

en_US.8859-1
de_DE@euro
fr_FR.utf-8

O que exatamente as partes individuais significam?

Eu sei que @euro é idêntico a .8859-15 e geralmente a última parte significa o charset real (o mapeamento de bytes para símbolos reais). Mas o que exatamente os dois primeiros códigos "fazem"? Quais propriedades do sistema elas influenciam? Por exemplo (apenas para ter algum exemplo para trabalhar com), 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 charset, então todos os arquivos de texto que eu abro no editor de minha escolha ficariam parecidos. Então, o que aconteceria se eu mudasse de um "código pré-charset" para outro "código pré-charset" (como de de_CH para en_US )?

Existem tabelas que listam as diferenças em uma tabela agradável e de fácil leitura?

    
por Foo Bar 08.06.2015 / 16:37

1 resposta

2

As duas partes formam um código de idioma ISO-639 . A primeira parte é a própria linguagem e a segunda é (geralmente) um código do país especificando qual variante local.

Você pode observar o efeito da alteração de LANG em quase todos os programas que possuem traduções. LC_COLLATE afeta os resultados do programa sort ; LC_DATE afeta a saída de date e ls -l . Para algumas configurações locais, é possível (mesmo provável) que você não tenha nada instalado que as use.

Na maioria dos sistemas, apenas LC_LANG é definido e todas as outras configurações são herdadas disso.

A seguinte citação da página man de locale (7) é relevante:

LC_COLLATE
This is used to change the behavior of the functions strcoll(3) and strxfrm(3), which are used to compare strings in the local alphabet. For example, the German sharp s is sorted as "ss".
LC_CTYPE
This changes the behavior of the character handling and classification functions, such as isupper(3) and toupper(3), and the multibyte character functions such as mblen(3) or wctomb(3).
LC_MONETARY
changes the information returned by localeconv(3) which describes the way numbers are usually printed, with details such as decimal point versus decimal comma. This information is internally used by the function strfmon(3).
LC_MESSAGES
changes the language messages are displayed in and what an affirmative or negative answer looks like. The GNU C-library contains the gettext(3), ngettext(3), and rpmatch(3) functions to ease the use of these information. The GNU gettext family of functions also obey the environment variable LANGUAGE (containing a colon-separated list of locales) if the category is set to a valid locale other than "C".
LC_NUMERIC
changes the information used by the printf(3) and scanf(3) family of functions, when they are advised to use the locale-settings. This information can also be read with the localeconv(3) function.
LC_TIME
changes the behavior of the strftime(3) function to display the current time in a locally acceptable form; for example, most of Europe uses a 24-hour clock versus the 12-hour clock used in the United States.
LC_ALL All of the above.

    
por 08.06.2015 / 17:42