Что именно означают строки локали 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_MESSAGES
изменяет язык сообщений и как выглядит утвердительный или отрицательный ответ. C-библиотека GNU содержит функции 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 Все вышеперечисленное.

Другие вопросы по тегам