В приведенном ниже файле /etc/locale.conf
задаются некоторые переменные
окружения, необходимые для поддержки вашего языка. Правильная их
установка влияет на:
Выходные данные программ, переводятся на ваш родной язык
Правильную интерпретацию символов в буквы, цифры и другие классы. Это необходимо для того, чтобы bash правильно принимал не-ASCII символы, в командной строке в неанглоязычных языковых системах
Правильную для страны сортировку по алфавиту
Подходящий формат бумаги по умолчанию
Правильное форматирование денежных значений, значений времени и дат
Ниже замените <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-битные символы.