lfs-ru/chapter09/locale.xml

153 lines
8.8 KiB
XML
Raw Normal View History

2023-05-23 09:22:34 +03:00
<?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>For the <quote>en_GB.iso88591</quote> locale, the above command
will print:</para>
<screen><computeroutput>ISO-8859-1</computeroutput></screen>
<para>This results in a final locale setting of <quote>en_GB.ISO-8859-1</quote>.
It is important that the locale found using the heuristic above is tested prior
to it being added to the Bash startup files:</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>The above commands should print the language name, the character
encoding used by the locale, the local currency, and the prefix to dial
before the telephone number in order to get into the country. If any of the
commands above fail with a message similar to the one shown below, this means
that your locale was either not installed in Chapter&nbsp;8 or is not
supported by the default installation of Glibc.</para>
<screen><computeroutput>locale: Cannot set LC_* to default locale: No such file or directory</computeroutput></screen>
<para>If this happens, you should either install the desired locale using the
<command>localedef</command> command, or consider choosing a different locale.
Further instructions assume that there are no such error messages from
Glibc.</para>
<!-- FIXME: the xlib example will become obsolete in the future.-->
<para>Some packages beyond LFS may also lack support for your chosen locale. One
example is the X library (part of the X Window System), which outputs the
following error message if the locale does not exactly match one of the character
map names in its internal files:</para>
<screen><computeroutput>Warning: locale not supported by Xlib, locale set to C</computeroutput></screen>
<para>In several cases Xlib expects that the character map will be listed in
uppercase notation with canonical dashes. For instance, "ISO-8859-1" rather
than "iso88591". It is also possible to find an appropriate specification by
removing the charmap part of the locale specification. This can be checked
by running the <command>locale charmap</command> command in both locales.
For example, one would have to change "de_DE.ISO-8859-15@euro" to
"de_DE@euro" in order to get this locale recognized by Xlib.</para>
<para>Other packages can also function incorrectly (but may not necessarily
display any error messages) if the locale name does not meet their expectations.
In those cases, investigating how other Linux distributions support your locale
might provide some useful information.</para>
<para>Once the proper locale settings have been determined, create the
<filename>/etc/locale.conf</filename> file:</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>Note that you can modify <filename>/etc/locale.conf</filename> with the
systemd <command>localectl</command> utility. To use
<command>localectl</command> for the example above, run:</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>You can also specify other language specific environment variables such
as <envar>LANG</envar>, <envar>LC_CTYPE</envar>, <envar>LC_NUMERIC</envar> or
any other environment variable from <command>locale</command> output. Just
separate them with a space. An example where <envar>LANG</envar> is set as
en_US.UTF-8 but <envar>LC_CTYPE</envar> is set as just en_US is:</para>
<screen role="nodump"><userinput>localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"</userinput></screen>
<note><para>Please note that the <command>localectl</command> command
doesn't work in the chroot environment. It can only
be used after the LFS system is booted with systemd.</para></note>
<para>The <quote>C</quote> (default) and <quote>en_US</quote> (the recommended
one for United States English users) locales are different. <quote>C</quote>
uses the US-ASCII 7-bit character set, and treats bytes with the high bit set
as invalid characters. That's why, e.g., the <command>ls</command> command
substitutes them with question marks in that locale. Also, an attempt to send
mail with such characters from Mutt or Pine results in non-RFC-conforming
messages being sent (the charset in the outgoing mail is indicated as <quote>unknown
8-bit</quote>). It's suggested that you use the <quote>C</quote> locale only
if you are certain that you will never need 8-bit characters.</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>