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. Ведется работа по документированию и,
- по возможности, устранению таких проблем. Некоторые подробности смотрите по ссылке:
- .
-
-