Path: blob/main/documentation/content/ru/books/handbook/l10n/_index.adoc
18098 views
---
description: 'FreeBSD поддерживает локализацию на множество языков, позволяя пользователям просматривать, вводить или обрабатывать данные на языках, отличных от английского'
next: books/handbook/cutting-edge
params:
path: /books/handbook/l10n/
part: 'Часть III. Администрирование системы'
prev: books/handbook/virtualization
showBookMenu: 'true'
tags: ["i18n", "L10n", "localization", "Locale", "LANG", "MM_CHARSET", "cap_mkdb"]
title: 'Глава 25. Локализация — использование и настройка i18n/L10n'
weight: 29
---
[[l10n]]
= Локализация - использование и настройка i18n/L10n
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 25
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/l10n/
ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]
ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[[l10n-synopsis]]
== Обзор
FreeBSD — это распределённый проект с пользователями и участниками по всему миру. Поэтому FreeBSD поддерживает локализацию на множество языков, позволяя пользователям просматривать, вводить и обрабатывать данные на языках, отличных от английского. Доступны многие основные языки, включая, но не ограничиваясь: китайский, немецкий, японский, корейский, французский, русский и вьетнамский.
Термин "internationalization" был сокращён до i18n, где число 18 обозначает количество букв между первой и последней буквами слова "internationalization". L10n использует ту же схему сокращения, но от слова "localization". Методы, протоколы и приложения i18n/L10n позволяют пользователям работать на предпочитаемых ими языках.
Эта глава рассказывает о возможностях интернационализации и локализации в FreeBSD.
Прочтите эту главу, чтобы узнать:
* Как формируются названия локалей.
* Как установить локаль для входной оболочки.
* Как настроить консоль для неанглийских языков.
* Как настроить Xorg для разных языков.
* Как найти приложения, соответствующие стандарту i18n.
* Где найти дополнительную информацию по настройке конкретных языков.
Прежде чем читать эту главу, необходимо:
* Знать, как crossref:ports[ports,устанавливать дополнительные сторонние приложения].
[[using-localization]]
== Использование локализации
Настройки локализации основаны на трёх компонентах: коде языка, коде страны и кодировке. Названия локалей формируются из этих частей следующим образом:
[.programlisting]
....
LanguageCode_CountryCode.Encoding
....
_ЯзыковойКод_ и _КодСтраны_ используются для определения страны и конкретного варианта языка. crossref:l10n[locale-lang-country,Распространённые языковые коды и коды стран] содержит несколько примеров __ЯзыковойКод_КодСтраны__:
[[locale-lang-country]]
.Часто используемые коды языков и стран
[cols="1,1", frame="none", options="header"]
|===
| КодЯзыка_КодСтраны
| Описание
|en_US
|Английский, Соединённые Штаты
|ru_RU
|Русский, Россия
|zh_TW
|Традиционный китайский, Тайвань
|===
Полный список доступных локалей можно получить, набрав:
[source, shell]
....
% locale -a | more
....
Для определения текущих настроек локали:
[source, shell]
....
% locale
....
Языковые наборы символов, такие как ISO8859-1, ISO8859-15, KOI8-R и CP437, описаны в man:multibyte[3]. Актуальный список наборов символов доступен в http://www.iana.org/assignments/character-sets[Реестре IANA].
Некоторые языки, такие как китайский или японский, не могут быть представлены с использованием символов ASCII и требуют расширенной кодировки с использованием широких или многобайтовых символов. Примерами широких или многобайтовых кодировок являются EUC и Big5. Старые приложения могут ошибочно принимать эти кодировки за управляющие символы, в то время как новые приложения обычно распознают их правильно. В зависимости от реализации, пользователям может потребоваться скомпилировать приложение с поддержкой широких или многобайтовых символов или правильно его настроить.
[NOTE]
====
FreeBSD использует совместимые с Xorg кодировки локалей.
====
Остальная часть этого раздела описывает различные методы настройки локали в системе FreeBSD. Следующий раздел будет посвящен вопросам поиска и компиляции приложений с поддержкой i18n.
[[setting-locale]]
=== Установка локали для входной оболочки
Настройки локали настраиваются либо в файле [.filename]#~/.login_conf# пользователя, либо в стартовом файле его оболочки: [.filename]#~/.profile#, [.filename]#~/.bashrc# или [.filename]#~/.cshrc#.
Должны быть установлены две переменные окружения:
* `LANG`, который устанавливает локаль
* `MM_CHARSET`, который устанавливает MIME-кодировку, используемую приложениями
В дополнение к настройкам оболочки пользователя, эти переменные также должны быть установлены для конкретной конфигурации приложений и конфигурации Xorg.
Доступны два метода для задания необходимых переменных: метод crossref:l10n[login-class,класса входа], который является рекомендуемым, и метод crossref:l10n[startup-file,файла запуска]. В следующих двух разделах показано, как использовать оба метода.
[[login-class]]
==== Метод классов входа
Этот первый метод является рекомендуемым, так как он устанавливает необходимые переменные окружения для названия локали и MIME-кодировок символов для всех возможных командных оболочек. Данную настройку может выполнить как каждый пользователь в отдельности, так и суперпользователь для всех пользователей сразу.
Этот минимальный пример устанавливает обе переменные для кодировки Latin-1 в файле [.filename]#.login_conf# домашнего каталога отдельного пользователя:
[.programlisting]
....
me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:
....
Вот пример файла [.filename]#~/.login_conf# пользователя, который устанавливает переменные для традиционного китайского в кодировке BIG-5. Требуется больше переменных, так как некоторые приложения некорректно обрабатывают локали для китайского, японского и корейского языков:
[.programlisting]
....
#Users who do not wish to use monetary units or time formats
#of Taiwan can manually change each variable
me:\
:lang=zh_TW.Big5:\
:setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\
:charset=big5:\
:xmodifiers="@im=gcin": #Set gcin as the XIM Input Server
....
Или суперпользователь может настроить локализацию для всех пользователей системы. Следующие переменные в [.filename]#/etc/login.conf# используются для установки локали и набора символов MIME:
[.programlisting]
....
language_name|Account Type Description:\
:charset=MIME_charset:\
:lang=locale_name:\
:tc=default:
....
Итак, предыдущий пример с Latin-1 будет выглядеть так:
[.programlisting]
....
german|German Users Accounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:
....
Подробнее об этих переменных смотрите в man:login.conf[5]. Обратите внимание, что там уже есть предопределённый класс _russian_.
При редактировании файла [.filename]#/etc/login.conf# не забудьте выполнить следующую команду для обновления базы данных возможностей:
[source, shell]
....
# cap_mkdb /etc/login.conf
....
[NOTE]
====
Для конечного пользователя команда `cap_mkdb` должна быть выполнена для его файла [.filename]#~/.login_conf#, чтобы изменения вступили в силу.
====
===== Утилиты, изменяющие классы входа в систему
В дополнение к ручному редактированию [.filename]#/etc/login.conf# доступно несколько утилит для установки локали для вновь создаваемых пользователей.
При использовании `vipw` для добавления новых пользователей укажите _language_, чтобы задать локаль:
[.programlisting]
....
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
....
При использовании `adduser` для добавления новых пользователей язык по умолчанию может быть предварительно настроен для всех новых пользователей или указан для отдельного пользователя.
Если все новые пользователи используют один и тот же язык, укажите `defaultclass=_language_` в [.filename]#/etc/adduser.conf#.
Чтобы переопределить этот параметр при создании пользователя, введите требуемую локаль в этом запросе:
[source, shell]
....
Enter login class: default []:
....
или указать локаль для установки при вызове `adduser`:
[source, shell]
....
# adduser -class language
....
Если `pw` используется для добавления новых пользователей, укажите локаль следующим образом:
[source, shell]
....
# pw useradd user_name -L language
....
Для изменения класса входа существующего пользователя можно использовать `chpass`. Запустите её от имени суперпользователя и укажите имя пользователя для редактирования в качестве аргумента.
[source, shell]
....
# chpass user_name
....
[[startup-file]]
==== Метод файла запуска оболочки
Этот второй метод не рекомендуется, так как каждая используемая оболочка требует ручной настройки, причём у каждой оболочки свой файл конфигурации и разный синтаксис. Например, чтобы установить немецкий язык для оболочки `sh`, можно добавить следующие строки в [.filename]#~/.profile# для настройки оболочки только этого пользователя. Эти же строки можно добавить в [.filename]#/etc/profile# или [.filename]#/usr/share/skel/dot.profile#, чтобы настроить эту оболочку для всех пользователей:
[.programlisting]
....
LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET
....
Однако имя файла конфигурации и используемый синтаксис отличаются для оболочки `csh`. Вот эквивалентные настройки для [.filename]#~/.login#, [.filename]#/etc/csh.login# или [.filename]#/usr/share/skel/dot.login#:
[.programlisting]
....
setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1
....
Чтобы усложнить ситуацию, синтаксис, необходимый для настройки Xorg в [.filename]#~/.xinitrc#, также зависит от оболочки. Первый пример приведён для оболочки `sh`, а второй — для `csh`:
[.programlisting]
....
LANG=de_DE.ISO8859-1; export LANG
....
[.programlisting]
....
setenv LANG de_DE.ISO8859-1
....
[[setting-console]]
=== Настройка консоли
Доступно несколько локализованных шрифтов для консоли. Чтобы просмотреть список доступных шрифтов, введите `ls /usr/share/syscons/fonts`. Для настройки шрифта консоли укажите _font_name_ без суффикса [.filename]#.fnt# в файле [.filename]#/etc/rc.conf#:
[.programlisting]
....
font8x16=font_name
font8x14=font_name
font8x8=font_name
....
Раскладки клавиатуры (keymap) и карты экрана (screenmap) можно настроить добавлением следующих команд в [.filename]#/etc/rc.conf#:
[.programlisting]
....
scrnmap=screenmap_name
keymap=keymap_name
keychange="fkey_number sequence"
....
Чтобы просмотреть список доступных карт экрана, введите `ls /usr/share/syscons/scrnmaps`. Не указывайте суффикс [.filename]#.scm# при указании _screenmap_name_. Обычно требуется карта экрана с соответствующим сопоставленным шрифтом в качестве обходного решения для расширения 8-го бита до 9-го в матрице символов шрифта адаптера VGA, чтобы буквы были выведены из области псевдографики, если экранный шрифт использует столбец 8-го бита.
Чтобы просмотреть список доступных раскладок клавиатуры, введите `ls /usr/share/syscons/keymaps`. При указании _keymap_name_ не включайте суффикс [.filename]#.kbd#. Для проверки раскладок без перезагрузки используйте man:kbdmap[1].
Запись `keychange` обычно требуется для программирования функциональных клавиш в соответствии с выбранным типом терминала, так как последовательности функциональных клавиш нельзя определить в keymap.
Затем установите правильный тип консольного терминала в [.filename]#/etc/ttys# для всех записей виртуальных терминалов. В crossref:l10n[locale-charset,Определенные типы терминалов для наборов символов] приведены доступные типы терминалов:
[[locale-charset]]
.Определенные типы терминалов для наборов символов
[cols="1,1", frame="none", options="header"]
|===
| Набор символов
| Тип терминала
|ISO8859-1 или ISO8859-15
|`cons25l1`
|ISO8859-2
|`cons25l2`
|ISO8859-7
|`cons25l7`
|KOI8-R
|`cons25r`
|KOI8-U
|`cons25u`
|CP437 (VGA default)
|`cons25`
|US-ASCII
|`cons25w`
|===
Для языков с широкими или многобайтовыми символами установите консоль для этого языка из коллекции портов FreeBSD. Доступные порты перечислены в crossref:l10n[locale-console,Доступные консоли из коллекции портов]. После установки обратитесь к [.filename]#pkg-message# или man-страницам порта для получения инструкций по настройке и использованию.
[[locale-console]]
.Доступная консоль из коллекции портов
[cols="1,1", frame="none", options="header"]
|===
| Язык
| Расположение порта
|Традиционный китайский (BIG-5)
|package:chinese/big5con[]
|Китайский/Японский/Корейский
|package:chinese/cce[]
|Китайский/Японский/Корейский
|package:chinese/zhcon[]
|Японский
|package:chinese/kon2[]
|Японский
|package:japanese/kon2-14dot[]
|Японский
|package:japanese/kon2-16dot[]
|===
Если moused включен в [.filename]#/etc/rc.conf#, может потребоваться дополнительная настройка. По умолчанию курсор мыши драйвера man:syscons[4] занимает диапазон `0xd0`-`0xd3` в наборе символов. Если язык использует этот диапазон, измените диапазон курсора, добавив следующую строку в [.filename]#/etc/rc.conf#:
[.programlisting]
....
mousechar_start=3
....
=== Настройка Xorg
В главе crossref:x11[x11,Система X Window] описана установка и настройка Xorg. При настройке локализации в Xorg дополнительные шрифты и методы ввода доступны в коллекции портов FreeBSD. Настройки интернационализации для конкретных приложений, такие как шрифты и меню, можно настроить в [.filename]#~/.Xresources#, что должно позволить пользователям видеть выбранный язык в меню графических приложений.
Протокол X Input Method (XIM) является стандартом Xorg для ввода неанглийских символов. В crossref:l10n[locale-xim,Доступные методы ввода] приведены приложения для ввода, доступные в коллекции портов FreeBSD. Также доступны дополнительные приложения Fcitx и Uim.
[[locale-xim]]
.Доступные методы ввода
[cols="1,1", frame="none", options="header"]
|===
| Язык
| Метод ввода
|Китайский
|package:chinese/gcin[]
|Китайский
|package:chinese/ibus-chewing[]
|Китайский
|package:chinese/ibus-pinyin[]
|Китайский
|package:chinese/oxim[]
|Китайский
|package:chinese/scim-fcitx[]
|Китайский
|package:chinese/scim-pinyin[]
|Китайский
|package:chinese/scim-tables[]
|Японский
|package:japanese/ibus-anthy[]
|Японский
|package:japanese/ibus-mozc[]
|Японский
|package:japanese/ibus-skk[]
|Японский
|package:japanese/im-ja[]
|Японский
|package:japanese/kinput2[]
|Японский
|package:japanese/scim-anthy[]
|Японский
|package:japanese/scim-canna[]
|Японский
|package:japanese/scim-honoka[]
|Японский
|package:japanese/scim-honoka-plugin-romkan[]
|Японский
|package:japanese/scim-honoka-plugin-wnn[]
|Японский
|package:japanese/scim-prime[]
|Японский
|package:japanese/scim-skk[]
|Японский
|package:japanese/scim-tables[]
|Японский
|package:japanese/scim-tomoe[]
|Японский
|package:japanese/scim-uim[]
|Японский
|package:japanese/skkinput[]
|Японский
|package:japanese/skkinput3[]
|Японский
|package:japanese/uim-anthy[]
|Корейский
|package:korean/ibus-hangul[]
|Корейский
|package:korean/imhangul[]
|Корейский
|package:korean/nabi[]
|Корейский
|package:korean/scim-hangul[]
|Корейский
|package:korean/scim-tables[]
|Вьетнамский
|package:vietnamese/xvnkb[]
|Вьетнамский
|package:vietnamese/x-unikey[]
|===
[[l10n-compiling]]
== Поиск приложений с поддержкой i18n
Приложения i18n разрабатываются с использованием наборов i18n в библиотеках. Это позволяет разработчикам написать один простой файл и перевести отображаемые меню и тексты на каждый язык.
Коллекция портов FreeBSD (link:https://ports.FreeBSD.org[FreeBSD Ports Collection]) включает множество приложений со встроенной поддержкой широких или многобайтовых символов для различных языков. Такие приложения содержат в своих названиях `i18n` для удобства идентификации. Однако они не всегда поддерживают нужный язык.
Некоторые приложения могут быть скомпилированы с указанием конкретной кодировки. Обычно это делается в [.filename]#Makefile# порта или путем передачи значения в configure. Для получения дополнительной информации о том, как определить необходимое значение configure или параметры компиляции при сборке порта, обратитесь к документации по i18n в исходном коде соответствующего порта FreeBSD или к [.filename]#Makefile# порта.
[[lang-setup]]
== Настройка локали для определённых языков
Этот раздел содержит примеры настройки локализации системы FreeBSD для русского языка. Далее приведены дополнительные ресурсы для локализации других языков.
[[ru-localize]]
=== Русский язык (КОИ8-R кодировка)
В этом разделе показаны конкретные настройки, необходимые для локализации системы FreeBSD на русский язык. Подробное описание каждого типа настроек приведено в crossref:l10n[using-localization,Использование локализации].
Чтобы установить эту локаль для регистрационной оболочки, добавьте следующие строки в файл [.filename]#~/.login_conf# каждого пользователя:
[.programlisting]
....
me:My Account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:
....
Для настройки консоли добавьте следующие строки в [.filename]#/etc/rc.conf#:
[.programlisting]
....
keymap="ru.utf-8"
scrnmap="utf-82cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
mousechar_start=3
....
Для каждой записи `ttyv` в [.filename]#/etc/ttys# используйте `cons25r` в качестве типа терминала.
Для настройки печати необходим специальный выходной фильтр для преобразования из KOI8-R в CP866, так как большинство принтеров с русскими символами используют аппаратную кодовую страницу CP866. FreeBSD включает стандартный фильтр для этой цели — [.filename]#/usr/libexec/lpr/ru/koi2alt#. Чтобы использовать этот фильтр, добавьте следующую запись в [.filename]#/etc/printcap#:
[.programlisting]
....
lp|Russian local line printer:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
....
Обратитесь к man:printcap[5] для более подробного объяснения.
Для настройки поддержки русских имён файлов в монтируемых файловых системах MS-DOS(R) добавьте параметр `-L` и указание локали при добавлении записи в [.filename]#/etc/fstab#:
[.programlisting]
....
/dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0
....
Обратитесь к man:mount_msdosfs[8] для получения дополнительной информации.
Для настройки русских шрифтов в Xorg установите пакет package:x11-fonts/xorg-fonts-cyrillic[]. Затем проверьте раздел `"Files"` в [.filename]#/etc/X11/xorg.conf#. Следующая строка должна быть добавлена _перед_ всеми остальными записями `FontPath`:
[.programlisting]
....
FontPath "/usr/local/lib/X11/fonts/cyrillic"
....
Дополнительные кириллические шрифты доступны в Коллекции портов.
Чтобы активировать русскую раскладку клавиатуры, добавьте следующее в раздел `"Keyboard"` файла [.filename]#/etc/xorg.conf#:
[.programlisting]
....
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:toggle"
....
Убедитесь, что `XkbDisable` закомментирован в этом файле.
Для `grp:toggle` используйте kbd:[Right Alt], для `grp:ctrl_shift_toggle` — kbd:[Ctrl+Shift]. Для `grp:caps_toggle` используйте kbd:[CapsLock]. Прежняя функция kbd:[CapsLock] остаётся доступной только в режиме LAT при использовании kbd:[Shift+CapsLock]. `grp:caps_toggle` не работает в Xorg по неизвестной причине.
Если на клавиатуре есть клавиши «Windows(R)» и некоторые неалфавитные клавиши отображаются неправильно, добавьте следующую строку в файл [.filename]#/etc/xorg.conf#:
[.programlisting]
....
Option "XkbVariant" ",winkeys"
....
[NOTE]
====
Русская раскладка XKB может не работать с нелокализованными приложениями. Минимально локализованные приложения должны вызывать функцию `XtSetLanguageProc (NULL, NULL, NULL);` в начале программы.
====
См. http://koi8.pp.ru/xwin.html[http://koi8.pp.ru/xwin.html] для получения дополнительных инструкций по локализации приложений Xorg. Более общую информацию о кодировке KOI8-R можно найти на http://koi8.pp.ru/[http://koi8.pp.ru/].
=== Дополнительные ресурсы для конкретных языков
В этом разделе приведены дополнительные ресурсы для настройки других локалей.
Традиционный китайский для Тайваня::
Проект FreeBSD-Taiwan предлагает руководство на китайском языке по FreeBSD по адресу http://netlab.cse.yzu.edu.tw/\~statue/freebsd/zh-tut/[http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/].
Локализация на греческий язык::
Полная статья о поддержке греческого языка в FreeBSD доступна https://www.FreeBSD.org/doc/gr/articles/greek-language-support/[здесь], только на греческом, как часть официальной документации FreeBSD на греческом языке.
Японская и корейская локализация::
Для японского языка обратитесь к http://www.jp.FreeBSD.org/[http://www.jp.FreeBSD.org/], а для корейского — к http://www.kr.FreeBSD.org/[http://www.kr.FreeBSD.org/].
Неанглоязычная документация FreeBSD::
Некоторые участники проекта FreeBSD перевели части документации FreeBSD на другие языки. Они доступны по ссылкам на link:https://www.FreeBSD.org/[веб-сайте FreeBSD] или в [.filename]#/usr/share/doc#.