9.7. Настройка системной локали

В приведенном ниже файле /etc/locale.conf задаются некоторые переменные окружения, необходимые для поддержки вашего языка. Правильная их установка влияет на:

Ниже замените <ll> двухбуквенным кодом нужного вам языка (например «en»), а <CC> двухбуквенным кодом соответствующей страны (например «GB»). <charmap> нужно заменить на каноническую кодировку для выбраной вами локали. Также могут присутствовать необязательные модификаторы, такие как «@euro».

Список всех локалей, поддерживаемых Glibc, можно получить, выполнив следующую команду:

locale -a

Таблицы символов могут иметь несколько синонимов. Например «ISO-8859-1» так же называют «iso8859-1» и «iso88591». Некоторые приложения не могут корректно обрабатывать различные синонимы (например «UTF-8» должно быть указано как «UTF-8», а не «utf8»), поэтому в большинстве случаев безопаснее всего выбрать каноническое имя для конкретной локали. Для определения канонического имени локали выполните следующую команду, заменив <locale name> на вывод locale -a для желаемой локали (например «en_GB.iso88591»).

LC_ALL=<locale name> locale charmap

Для локали «en_GB.iso88591» приведенная выше команда напечатает:

ISO-8859-1

Окончательная настройка локали будет выглядеть так: «en_GB.ISO-8859-1». Важно, чтобы локаль, найденная с помощью приведенной выше методики, была проверена перед её добавлением в файлы запуска Bash:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

Приведенные выше команды должны вывести название языка, кодировку символов, используемую в локали, местную валюту и телефонный код страны. Если какая-либо из команд завершается с сообщением об ошибке, похожим на указанное ниже, это означает, что ваша локаль либо не была установлена в Главе 8, либо не поддерживается стандартной установкой Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Если это произойдет, вам следует либо установить желаемую локаль с помощью команды localedef, либо рассмотреть возможность выбора другой локали. Дальнейшие инструкции не предполагают таких сообщений об ошибках от Glibc.

В некоторых пакетах, выходящих за рамки LFS, также может отсутствовать поддержка выбранного вами языка. Одним из таких примеров может служить библиотека X (часть системы X Window), которая выводит следующее сообщение об ошибке, если локаль не соответствует таблице символов во внутренних файлах:

Warning: locale not supported by Xlib, locale set to C

В некоторых случаях Xlib ожидает, что таблица символов будет указана в верхнем регистре с каноническими тире. Например, "ISO-8859-1", а не "iso88591". Также можно найти подходящий вам вариант, удалив часть charmap из спецификации локали. Это можно проверить, выполнив команду locale charmap в обеих локалях. Например, нужно было бы изменить "de_DE.ISO-8859-15@euro " на "de_DE@euro", чтобы Xlib распознал эту локаль.

Другие пакеты также могут работать некорректно (но не всегда будут отображать какие-либо сообщения об ошибках), если название локали не соответствует их ожиданиям. В таких случаях изучите, какие ещё дистрибутивы Linux поддерживают ваш язык, возможно, это даст некоторую полезную информацию

Как только будут определены правильные настройки локали, создайте файл /etc/locale.conf:

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Обратите внимание, что вы можете изменить /etc/locale.conf с помощью утилиты из состава systemd - localectl. Чтобы использовать localectl для приведенного выше примера, выполните:

localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

Вы также можете указать другие переменные окружения для конкретного языка, такие как LANG, LC_CTYPE, LC_NUMERIC или любая другая переменная окружения из вывода команды locale. Просто разделите их пробелами. Пример, где LANG установлен как en_US.UTF-8, а LC_CTYPE установлен как en_US:

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
[Примечание]

Примечание

Пожалуйста, обратите внимание, что команда localectl не работает в среде chroot. Его можно использовать только после загрузки системы LFS с помощью systemd.

Локаль «C» (используемая по умолчанию) и «en_US» (одна из рекомендуемых для англоязычных пользователей в Соединенных Штатах) это разные локали. «C» использует 7-битный набор символов US-ASCII и обрабатывает байты с установленным старшим битом как недопустимые символы. Вот почему, например, команда ls заменяет их вопросительными знаками в этой локали. Кроме того, попытка отправить почту с такими символами из Mutt или Pine приводит к тому что, отправляемые сообщения не соответствуют RFC (кодировка в исходящей почте указана как «unknown 8-bit»). Рекомендуется использовать локаль «C», если вы уверены, что вам никогда не понадобятся 8-битные символы.