lfs-ru/chapter09/locale.xml
2023-06-04 01:44:26 +05:00

144 lines
11 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-config-locale" revision="systemd">
<?dbhtml filename="locale.html"?>
<title>Настройка системной локали</title>
<indexterm zone="ch-config-locale">
<primary sortas="e-etc-locale-conf">/etc/locale.conf</primary>
</indexterm>
<para>В приведенном ниже файле <filename>/etc/locale.conf</filename>
задаются некоторые переменные окружения, необходимые для поддержки вашего языка.
Правильная их установка влияет на:</para>
<itemizedlist>
<listitem>
<para>Выходные данные программ, переводятся на ваш родной язык</para>
</listitem>
<listitem>
<para>Правильную интерпретацию символов в буквы, цифры и другие классы.
Это необходимо для того, чтобы <command>bash</command> правильно принимал
не-ASCII символы, в командной строке в неанглоязычных языковых системах</para>
</listitem>
<listitem>
<para>Правильную для страны сортировку по алфавиту</para>
</listitem>
<listitem>
<para>Подходящий формат бумаги по умолчанию</para>
</listitem>
<listitem>
<para>Правильное форматирование денежных значений, значений времени и дат</para>
</listitem>
</itemizedlist>
<para>Ниже замените <replaceable>&lt;ll&gt;</replaceable> двухбуквенным кодом нужного вам языка
(например <quote>en</quote>), а
<replaceable>&lt;CC&gt;</replaceable> двухбуквенным кодом соответствующей страны (например <quote>GB</quote>).
<replaceable>&lt;charmap&gt;</replaceable> нужно заменить на каноническую кодировку для выбраной вами
локали. Также могут присутствовать необязательные модификаторы, такие как <quote>@euro</quote>.</para>
<para>Список всех локалей, поддерживаемых Glibc, можно получить, выполнив следующую команду:</para>
<screen role="nodump"><userinput>locale -a</userinput></screen>
<para>Таблицы символов могут иметь несколько синонимов. Например <quote>ISO-8859-1</quote>
так же называют <quote>iso8859-1</quote> и <quote>iso88591</quote>.
Некоторые приложения не могут корректно обрабатывать различные синонимы (например <quote>UTF-8</quote>
должно быть указано как <quote>UTF-8</quote>, а не <quote>utf8</quote>), поэтому
в большинстве случаев безопаснее всего выбрать каноническое имя для конкретной
локали. Для определения канонического имени локали выполните следующую команду,
заменив <replaceable>&lt;locale name&gt;</replaceable> на вывод <command>locale -a</command>
для желаемой локали (например <quote>en_GB.iso88591</quote>).</para>
<screen role="nodump"><userinput>LC_ALL=<replaceable>&lt;locale name&gt;</replaceable> locale charmap</userinput></screen>
<para>Для локали <quote>en_GB.iso88591</quote> приведенная выше команда
напечатает:</para>
<screen><computeroutput>ISO-8859-1</computeroutput></screen>
<para>Окончательная настройка локали будет выглядеть так: <quote>en_GB.ISO-8859-1</quote>.
Важно, чтобы локаль, найденная с помощью приведенной выше методики, была проверена перед
её добавлением в файлы запуска Bash:</para>
<screen role="nodump"><userinput>LC_ALL=&lt;locale name&gt; locale language
LC_ALL=&lt;locale name&gt; locale charmap
LC_ALL=&lt;locale name&gt; locale int_curr_symbol
LC_ALL=&lt;locale name&gt; locale int_prefix</userinput></screen>
<para>Приведенные выше команды должны вывести название языка, кодировку символов, используемую в локали,
местную валюту и телефонный код страны. Если какая-либо из команд завершается с сообщением об ошибке, похожим
на указанное ниже, это означает, что ваша локаль либо не была установлена в Главе 8, либо не поддерживается
стандартной установкой Glibc.</para>
<screen><computeroutput>locale: Cannot set LC_* to default locale: No such file or directory</computeroutput></screen>
<para>Если это произойдет, вам следует либо установить желаемую локаль с помощью команды
<command>localedef</command>, либо рассмотреть возможность выбора другой локали. Дальнейшие
инструкции не предполагают таких сообщений об ошибках от Glibc.</para>
<!-- FIXME: the xlib example will become obsolete in the future.-->
<para>В некоторых пакетах, выходящих за рамки LFS, также может отсутствовать поддержка выбранного вами
языка. Одним из таких примеров может служить библиотека X (часть системы X Window), которая выводит
следующее сообщение об ошибке, если локаль не соответствует таблице символов во внутренних файлах:</para>
<screen><computeroutput>Warning: locale not supported by Xlib, locale set to C</computeroutput></screen>
<para>В некоторых случаях Xlib ожидает, что таблица символов будет указана в верхнем регистре с
каноническими тире. Например, "ISO-8859-1", а не "iso88591". Также можно найти подходящий вам вариант,
удалив часть charmap из спецификации локали. Это можно проверить, выполнив команду
<command>locale charmap</command> в обеих локалях. Например, нужно было бы изменить
"de_DE.ISO-8859-15@euro " на "de_DE@euro", чтобы Xlib распознал эту локаль.</para>
<para>Другие пакеты также могут работать некорректно (но не всегда будут отображать какие-либо сообщения
об ошибках), если название локали не соответствует их ожиданиям. В таких случаях изучите, какие ещё
дистрибутивы Linux поддерживают ваш язык, возможно, это даст некоторую полезную информацию</para>
<para>Как только будут определены правильные настройки локали, создайте файл
<filename>/etc/locale.conf</filename>:</para>
<screen><userinput>cat &gt; /etc/locale.conf &lt;&lt; "EOF"
<literal>LANG=<replaceable>&lt;ll&gt;_&lt;CC&gt;.&lt;charmap&gt;&lt;@modifiers&gt;</replaceable></literal>
EOF</userinput></screen>
<para>Обратите внимание, что вы можете изменить <filename>/etc/locale.conf</filename> с помощью
утилиты из состава systemd - <command>localectl</command>. Чтобы использовать
<command>localectl</command> для приведенного выше примера, выполните:</para>
<screen role="nodump"><userinput>localectl set-locale LANG="<replaceable>&lt;ll&gt;_&lt;CC&gt;.&lt;charmap&gt;&lt;@modifiers&gt;</replaceable>"</userinput></screen>
<para>Вы также можете указать другие переменные окружения для конкретного языка, такие как
<envar>LANG</envar>, <envar>LC_CTYPE</envar>, <envar>LC_NUMERIC</envar> или
любая другая переменная окружения из вывода команды <command>locale</command>. Просто
разделите их пробелами. Пример, где <envar>LANG</envar> установлен как
en_US.UTF-8, а <envar>LC_CTYPE</envar> установлен как en_US:</para>
<screen role="nodump"><userinput>localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"</userinput></screen>
<note><para>Пожалуйста, обратите внимание, что команда <command>localectl</command>
не работает в среде chroot. Его можно использовать только после загрузки системы LFS с помощью systemd.</para></note>
<para>Локаль <quote>C</quote> (используемая по умолчанию) и <quote>en_US</quote> (одна из рекомендуемых для
англоязычных пользователей в Соединенных Штатах) это разные локали. <quote>C</quote>
использует 7-битный набор символов US-ASCII и обрабатывает байты с установленным старшим битом как
недопустимые символы. Вот почему, например, команда <command>ls</command> заменяет их вопросительными
знаками в этой локали. Кроме того, попытка отправить почту с такими символами из Mutt или Pine приводит
к тому что, отправляемые сообщения не соответствуют RFC (кодировка в исходящей почте указана как <quote>unknown
8-bit</quote>). Рекомендуется использовать локаль <quote>C</quote>, если вы уверены, что вам никогда не
понадобятся 8-битные символы.</para>
<!--
<para>UTF-8 based locales are not supported well by many programs.
Work is in progress to document and, if possible, fix such problems, see
<ulink url="&blfs-book;introduction/locale-issues.html"/>.</para>
-->
</sect1>