diff --git a/chapter09/chapter09.xml b/chapter09/chapter09.xml index 625c842..dcdb501 100644 --- a/chapter09/chapter09.xml +++ b/chapter09/chapter09.xml @@ -26,14 +26,13 @@ - - + diff --git a/chapter09/locale.xml b/chapter09/locale.xml index 2944204..f5b8a59 100644 --- a/chapter09/locale.xml +++ b/chapter09/locale.xml @@ -5,18 +5,21 @@ %general-entities; ]> - + Настройка системной локали - /etc/locale.conf + /etc/profile - В приведенном ниже файле /etc/locale.conf - задаются некоторые переменные окружения, необходимые для поддержки вашего языка. - Правильная их установка влияет на: + + /etc/locale.conf + + + Некоторые переменные окружения, необходимые для поддержки вашего языка. Правильная их + установка влияет на: @@ -55,7 +58,7 @@ в большинстве случаев безопаснее всего выбрать каноническое имя для конкретной локали. Для определения канонического имени локали выполните команду ниже, заменив <locale name> на вывод locale -a - для желаемой локали (например en_GB.iso88591). + для желаемой локали (например en_GB.iso88591 в нашем примере). LC_ALL=<locale name> locale charmap @@ -88,28 +91,90 @@ LC_ALL=<locale name> locale int_prefix об ошибках), если название локали не соответствует их ожиданиям. В таких случаях изучите, какие ещё дистрибутивы Linux поддерживают ваш язык, возможно, это даст некоторую полезную информацию - Как только будут определены правильные настройки локали, создайте файл + Как только будут определены правильные настройки локали, создайте файл /etc/locale.conf: -cat > /etc/locale.conf << "EOF" +cat > /etc/locale.conf << "EOF" LANG=<ll>_<CC>.<charmap><@modifiers> EOF - Обратите внимание, что вы можете изменить /etc/locale.conf с помощью + Программа оболочки /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 + +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 + export LANG=<ll>_<CC>.<charmap><@modifiers> +fi + +# End /etc/profile +EOF + + Обратите внимание, что вы можете изменить /etc/locale.conf с помощью утилиты из состава systemd - localectl. Чтобы использовать localectl для приведенного выше примера, выполните: -localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>" +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 set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US" - Пожалуйста, обратите внимание, что команда localectl + Пожалуйста, обратите внимание, что команда localectl не работает в среде chroot. Его можно использовать только после загрузки системы LFS с помощью systemd. Локаль C (используемая по умолчанию) и en_US (одна из @@ -121,10 +186,6 @@ EOF указана как unknown 8-bit). Рекомендуется использовать локаль C, если вы уверены, что вам никогда не понадобятся 8-битные символы. - + diff --git a/chapter09/profile.xml b/chapter09/profile.xml deleted file mode 100644 index 5af27a3..0000000 --- a/chapter09/profile.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - %general-entities; -]> - - - - - Файлы запуска оболочки Bash - - - /etc/profile - - - Программа оболочки /bin/bash (далее именуемая как - оболочка) использует начальный набор файлов, чтобы помочь - создать среду для запуска. Каждый файл имеет определенное назначение и может по-разному - влиять на вход в систему и интерактивное окружение. Файлы в каталоге /etc содержат глобальные настройки. Если в домашнем - каталоге существуют эквивалентные файлы, они могут переопределить глобальные настройки. - - Интерактивная оболочка входа запускается после успешного входа с использованием - /bin/login, прочитав файл /etc/passwd. Интерактивная - оболочка без входа в систему запускается из командной строки (например, - [prompt]$/bin/bash). Неинтерактивная оболочка обычно - присутствует когда выполняется скрипт оболочки. Он неинтерактивен, поскольку обрабатывает скрипт - и не ожидает ввода пользователем между командами. - - Для получения дополнительной информации смотрите разделы - Загрузочные файлы Bash и Интерактивные оболочки - главы Возможности Bash на информационных страницах Bash - (info bash). - - Файлы /etc/profile и - ~/.bash_profile считываются при вызове оболочки как интерактивной - оболочки входа в систему. - - По умолчанию в файле /etc/profile задаются некоторые переменные окружения, - необходимые для поддержки вашего языка. Правильная их установка влияет на: - - - - Выходные данные программ переводятся на ваш родной язык - - - Правильную интерпретацию символов в буквы, цифры и другие классы. Это необходимо для того, - чтобы 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 - - Приведенные выше команды должны вывести название языка, кодировку символов, используемую в локали, - местную валюту и телефонный код страны. Если какая-либо из команд завершается с сообщением об ошибке, похожим - на указанное ниже, это означает, что ваша локаль либо не была установлена в , - либо не поддерживается стандартной установкой Glibc - -locale: Cannot set LC_* to default locale: No such file or directory - - Если это произойдет, вам следует либо установить желаемую локаль с помощью команды - localedef, либо рассмотреть возможность выбора другой локали. Дальнейшие - инструкции не предполагают таких сообщений об ошибках от Glibc. - - Другие пакеты также могут работать некорректно (но не обязательно будут отображать - какие-либо сообщения об ошибках), если название локали не соответствует их ожиданиям. В - таких случаях может оказаться полезной информация о том, как другие дистрибутивы Linux - поддерживают вашу локаль. - - Как только будут определены правильные настройки локали, создайте файл - /etc/profile: - -cat > /etc/profile << "EOF" -# Begin /etc/profile - -export LANG=<ll>_<CC>.<charmap><@modifiers> - -# End /etc/profile -EOF - - Локаль C (используемая по умолчанию) и en_US.utf8 (рекомендуемая для - англоязычных пользователей в Соединенных Штатах) это разные локали. C - использует 7-битный набор символов US-ASCII и обрабатывает байты с установленным старшим битом как - недопустимые символы. Вот почему, например, команда ls заменяет их вопросительными - знаками в этой локали. Кроме того, попытка отправить письмо с такими символами из Mutt или Pine приводит - к отправке сообщений не соответствующих RFC (кодировка в исходящей почте указана как unknown - 8-bit). Таким образом, вы можете использовать локаль C, только в том случае, - если уверены, что вам никогда не понадобятся 8-битные символы. - - Некоторые программы не поддерживают локали на основе UTF-8. Ведется работа по документированию и, - по возможности, устранению таких проблем. Некоторые подробности смотрите по ссылке: - . - -