---
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#.
