Когда я набираю в командной строке 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Все вышеперечисленное.