Некоторые переменные окружения, необходимые для поддержки вашего языка. Правильная их установка влияет на:
Выходные данные программ, переводятся на ваш родной язык
Правильную интерпретацию символов в буквы, цифры и другие классы. Это необходимо для того, чтобы 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.
Другие пакеты также могут работать некорректно (но не всегда будут отображать какие-либо сообщения об ошибках), если название локали не соответствует их ожиданиям. В таких случаях изучите, какие ещё дистрибутивы Linux поддерживают ваш язык, возможно, это даст некоторую полезную информацию
Как только будут определены правильные настройки локали, создайте
файл /etc/locale.conf
:
cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF
Программа оболочки /bin/bash (далее именуемая как
«оболочка»)
использует начальный набор файлов, чтобы помочь создать среду для
запуска. Каждый файл имеет определенное назначение и может по-разному
влиять на вход в систему и интерактивное окружение. Файлы в каталоге
/etc
содержат глобальные настройки.
Если в домашнем каталоге существуют эквивалентные файлы, они могут
переопределить глобальные настройки.
Интерактивная оболочка входа запускается после успешного входа с
использованием /bin/login, прочитав файл
/etc/passwd
. Интерактивная оболочка без
входа в систему запускается из командной строки (например,
[prompt]$
/bin/bash). Неинтерактивная
оболочка обычно присутствует когда выполняется скрипт оболочки. Он
неинтерактивен, поскольку обрабатывает скрипт и не ожидает ввода
пользователем между командами.
На оболочки входа в систему часто не влияют
настройки в /etc/locale.conf
.
Создайте файл /etc/profile
для чтения настроек локали из /etc/locale.conf
и экспортируйте их, но
вместо этого установите локаль C.UTF-8
при запуске консоли Linux (чтобы программы не выводили символы,
которые консоль Linux не может отобразить):
cat > /etc/profile << "EOF"
# Begin /etc/profile
for i in $(locale); do
unset ${i%=*}
done
if [[ "$TERM" = linux ]]; then
export LANG=C.UTF-8
else
source /etc/locale.conf
for i in $(locale); do
key=${i%=*}
if [[ -v $key ]]; then
export $key
fi
done
fi
# End /etc/profile
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-битные символы.