Что именно означают строки локали LC_* в Linux?

Что именно означают строки локали LC_* в Linux?

Когда я набираю в командной строке Linux

locale

Я получаю длинный список LC_*переменных (типа LC_TIMEи т. д.). Значения переменных выглядят примерно так, как в этом списке:

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

Что именно означают отдельные части?

Я знаю, что @euroэто идентично .8859-15и, как правило, последняя часть означает фактический набор символов (сопоставление байтов с фактическими символами). Но что именно «делают» первые два кода? На какие свойства системы они влияют? Например (просто чтобы иметь пример для работы), в чем разница между en_US.8859-15, de_DE.8859-15, de_CH.8859-15и en_CU.8859-15? У всех одинаковая кодировка, поэтому все текстовые файлы, которые я открываю в редакторе по своему выбору, будут выглядеть одинаково. Так что же произойдет, если я переключусь с одного «кода предварительной кодировки» на другой «код предварительной кодировки» (например, с на de_CH) en_US?

Есть ли таблицы, в которых перечислены различия в удобном и легко читаемом виде?

решение1

Две части образуютКод языка ISO-639. Первая часть — это сам язык, а вторая — (обычно)код страныс указанием местного варианта.

Вы можете наблюдать эффект изменения LANGпрактически в любой программе, в которой есть переводы. LC_COLLATEвлияет на результаты программы sort; LC_DATEвлияет на вывод dateи ls -l. Для некоторых настроек локали возможно (даже вероятно), что у вас не установлено ничего, что их использует.

В большинстве систем LC_LANGзадан только параметр, а все остальные настройки наследуются от него.

Следующая цитата из страницы руководства locale(7) актуальна:

LC_COLLATE
Это используется для изменения поведения функций strcoll(3) и strxfrm(3), которые используются для сравнения строк в локальном алфавите. Например, немецкая диез s сортируется как "ss".
LC_CTYPE
Это изменяет поведение функций обработки и классификации символов, таких как isupper(3) и toupper(3), а также функций многобайтовых символов, таких как mblen(3) или wctomb(3).
LC_MONETARY
изменяет информацию, возвращаемую localeconv(3), которая описывает способ, которым числа обычно печатаются, с такими подробностями, как десятичная точка или десятичная запятая. Эта информация используется внутренне функцией strfmon(3).
LC_СООБЩЕНИЯ
изменяет язык сообщений, отображаемых на экране, и то, как выглядит утвердительный или отрицательный ответ. Библиотека GNU C содержит функции gettext(3), ngettext(3) и rpmatch(3) для упрощения использования этой информации. Семейство функций GNU gettext также подчиняется переменной окружения LANGUAGE (содержащей разделенный двоеточием список локалей), если категория установлена ​​на допустимую локаль, отличную от "C".
LC_NUMERIC
изменяет информацию, используемую семейством функций printf(3) и scanf(3), когда им рекомендуется использовать locale-settings. Эту информацию также можно прочитать с помощью функции localeconv(3).
LC_TIME
изменяет поведение функции strftime(3) для отображения текущего времени в локально приемлемой форме; например, в большей части Европы используется 24-часовой формат времени, а не 12-часовой, используемый в Соединенных Штатах.
LC_ALLВсе вышеперечисленное.

Связанный контент