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

598
Foo Bar

Когда я печатаю в командной строке 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

1 ответ на вопрос

2
Toby Speight

Две части образуют код языка 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), когда им рекомендуется использовать языковые настройки. Эту информацию также можно прочитать с помощью функции localeconv (3).
LC_TIME
изменяет поведение функции strftime (3) для отображения текущего времени в локально приемлемой форме; например, большая часть Европы использует 24-часовые часы по сравнению с 12-часовыми часами, используемыми в Соединенных Штатах.
LC_ALL Все вышеперечисленное.

Похожие вопросы