Глава 20. Локализация - использование и настройка i18n/L10n

20.1. Краткий обзор

FreeBSD - это распределенный проект, пользователи и контрибьюторы которого находятся в самых разных частях света. Поэтому FreeBSD поддерживает локализацию на многие языки, что позволяет просматривать, вводить и обрабатывать данные на языках, отличных от английского. Можно выбрать среди большинства основных языков, в том числе: китайский, немецкий, японский, корейский, французский, русский и вьетнамский.

Термин интернационализация (internationalization) сокращают до i18n, по числу символов в английском слове. Сокращение L10n аналогично получается от слова localization. i18n/L10n методы, протоколы и приложения позволяют пользователям использовать языки по своему выбору.

В этой главе обсуждаются особенности интернационализации и локализации FreeBSD, включая следующие темы:

  • Схема именования локалей.

  • Установка региональных настроек для оболочки.

  • Локализация консоли.

  • Локализация Xorg.

  • Поиск i18n-совместимых приложений.

  • Информация по настройке для некоторых языков.

Перед чтением этой главы вам следует знать:

20.2. Использование локализации

Настройки локализации состоят из трёх компонентов: код языка, код страны и кодировка. Из этих частей формируются названия локалей:

КодЯзыка_КодСтраны.Кодировка

КодЯзыка и КодСтраны используются для определения страны и конкретного диалекта языка. Основные коды языка и страны содержит некоторые примеры пар КодЯзыка_КодСтраны:

Таблица 1. Основные коды языка и страны
КодЯзыка_КодСтраныОписание

en_US

Английский, Соединенные Штаты

ru_RU

Русский, Россия

zh_TW

Традиционный китайский, Тайвань

Полный список локалей доступен по команде:

% locale -a | more

Чтобы определить текущую локаль:

% locale

Специфичные для языков наборы символов ISO8859-1, ISO8859-15, KOI8-R, CP437 описаны в multibyte(3). Актуальный список наборов символов находится на сайте IANA Registry.

Некоторые языки, такие как китайский или японский, не могут быть представлены с использованием символов ASCII, и для них требуется дополненная языковая кодировка с использованием расширенного или многобайтового представления символов. Такими кодировками являются EUC и Big5. Старые приложения могут ошибочно принимать символы в таких кодировках за управляющие, в то время как новые обычно их распознают. В зависимости от реализации, пользователю может потребоваться компиляция приложения с поддержкой расширенного или многобайтового представления символов или правильная его настройка.

Во FreeBSD используются Xorg-совместимые кодировки.

В продолжении этого раздела рассматриваются различные способы настройки локализации в системе FreeBSD. В следующем разделе выносятся соображения по поиску и компиляции приложений с поддержкой i18n.

20.2.1. Настройка локализации для оболочки

Для настроек локализации используется пользовательский ~/.login_conf или инициализационый файл пользовательской оболочки: ~/.profile, ~/.bashrc или ~/.cshrc.

Следует задать две переменные окружения:

  • LANG задаёт локаль *

    MM_CHARSET задаёт набор символов MIME для приложений

В дополнение к настройкам пользовательской оболочки эти переменные также следует задать в конфигурации конкретного приложения и в конфигурации Xorg.

Существует два способа выполнить необходимые присвоения переменным: класс логина, который является рекомендуемым, и файл инициализации. В следующих двух разделах будет показано, как использовать оба способа.

20.2.1.1. Настройка через классы логина

Первый способ является рекомендуемым, поскольку в нём необходимые для выбора локализации и набора символов MIME значения переменных окружения присваиваются для всех оболочек. Эту процедуру может выполнить пользователь для себя, а также это может сделать в виде настройки суперпользователь для всех пользователей системы.

В этом минимальном примере обе переменные задаются для кодировки Latin-1 в .login_conf домашнего каталога отдельного пользователя:

me:\
	:charset=ISO-8859-1:\
	:lang=de_DE.ISO8859-1:

Ниже дан ~/.login_conf, в котором переменные заданы для традиционного китайского в кодировке BIG-5. Здесь нужно больше переменных, потому что некоторые программы некорректно воспринимают переменные окружения локализации для Китая, Японии и Кореи:

#Пользователи, которые не хотят использовать денежные единицы
#и форматы времени Тайваня, могут вручную изменить каждую переменную
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

Как вариант, суперпользователь может настроить локализацию для всех пользователей системы. Следующие переменные в /etc/login.conf используются для установки локализации и набора символов MIME:

название_языка|подробное описание:\
	:charset=кодировка_MIME:\
	:lang=название_локализации:\
	:tc=default:

Таким образом, на предыдущем примере с Latin-1 это бы выглядело так:

german|German Users Accounts:\
	:charset=ISO-8859-1:\
	:lang=de_DE.ISO8859-1:\
	:tc=default:

За информацией по этим переменным обращайтесь к login.conf(5). Отметим, что там уже присутствует класс russian.

После каждого изменения /etc/login.conf не забывайте выполнить команду для обновления базы данных:

# cap_mkdb /etc/login.conf
20.2.1.1.1. Утилиты для смены класса логина

В дополнение к ручному редактированию /etc/login.conf имеется несколько утилит, которые позволяют задать локаль при создании новых пользователей:

Если для добавлении новых пользователей используется vipw, то чтобы задать локаль, укажите язык:

user:password:1111:11:язык:0:0:User Name:/home/user:/bin/sh

Если для добавления новых пользователей используется adduser, то язык по умолчанию можно предварительно выбрать для всех новых пользователей или указать его для отдельного пользователя.

Если все новые пользователи используют общий язык, задайте defaultclass=язык в /etc/adduser.conf.

Чтобы переопределить эту настройку при создании пользователя, введите требуемую локаль в запросе командной строки:

Enter login class: default []:

или укажите её в команде adduser(8):

# adduser -class язык

Если для добавления новых пользователей используется pw, укажите локаль так:

# pw useradd имя_пользователя -L язык

Изменить класс логина у существующего пользователя можно с помощью chpass, передав имя пользователя через параметр:

# chpass имя_пользователя

20.2.1.2. Файл инициализации оболочки

Второй способ не рекомендуется, поскольку для каждой используемой оболочки требуется ручная конфигурация, при этом в каждой оболочке используется собственный файл конфигурации и разный синтаксис. Например, чтобы задать немецкий язык в оболочке sh, эти строчки можно было бы добавить в ~/.profile для настройки оболочки отдельного пользователя. Также их можно было бы добавить в /etc/profile или /usr/shared/skel/dot.profile, чтобы применить ко всем пользователям:

LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET

Тем не менее, путь к файлу конфигурации и используемый синтаксис отличаются в оболочке csh. Следующие настройки можно одинаково успешно задать в ~/.csh.login, /etc/csh.login и /usr/shared/skel/dot.login:

setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1

Используемый в ~/.xinitrc синтаксис для настройки Xorg также зависит от оболочки. Первый пример для оболочки sh, и второй для csh:

LANG=de_DE.ISO8859-1; export LANG
setenv LANG de_DE.ISO8859-1

20.2.2. Настройка консоли

Для консоли имеется несколько локализованных шрифтов. Для их просмотра наберите ls /usr/shared/syscons/fonts. Чтобы настроить консольный шрифт, укажите в /etc/rc.confимя_шрифта без расширения .fnt:

font8x16=имя_шрифта
font8x14=имя_шрифта
font8x8=имя_шрифта

Значения keymap и screenmap можно задать в /etc/rc.conf:

scrnmap=название_screenmap
keymap=название_keymap
keychange="последовательность fkey_number"

Чтобы просмотреть доступные таблицы screenmap, наберите ls /usr/shared/syscons/scrnmaps. Значение screenmap указывается без расширения .scm. Таблица screenmap с соответствующим шрифтом обычно используется в качестве обходного пути для расширения 8 бит до 9 бит в матрице символов шрифта адаптора VGA. Это будет приводить к вынесению букв за границы псевдографической области, если используется 8-битный шрифт.

Чтобы просмотреть доступные таблицы keymap, наберите ls /usr/shared/syscons/keymaps. Значение keymap указывается без расширения .kbd. Чтобы проверить keymap без перезагрузки системы, используйте kbdmap(1).

Запись keychange обычно нужна для сопоставления функциональных клавиш выбранному типу терминала, поскольку последовательности функциональных клавиш не могут быть определены в keymap.

После этого задайте правильный консольный тип терминала в /etc/ttys для всех виртуальных терминалов. Типы терминалов для набора символов содержит доступные типы терминалов:

Таблица 2. Типы терминалов для набора символов
Набор символовТип терминала

ISO8859-1 or ISO8859-15

cons25l1

ISO8859-2

cons25l2

ISO8859-7

cons25l7

KOI8-R

cons25r

KOI8-U

cons25u

CP437 (VGA default)

cons25

US-ASCII

cons25w

Для языков с расширенной или многобайтовой кодировкой установите консоль для данного языка из Коллекции Портов FreeBSD. Доступные консоли из Коллекции Портов содержит доступные порты. После установки смотрите pkg-message или страницы Справочника по конфигурации и использованию данного порта.

Таблица 3. Доступные консоли из Коллекции Портов
ЯзыкРасположение порта

Традиционный китайский (BIG-5)

chinese/big5con

Chinese/Japanese/Korean

chinese/cce

Chinese/Japanese/Korean

chinese/zhcon

Japanese

chinese/kon2

Japanese

japanese/kon2-14dot

Japanese

japanese/kon2-16dot

Если moused включен в /etc/rc.conf, может потребоваться дополнительная настройка. По умолчанию драйвер syscons(4) выделяет для курсора мыши в таблице символов диапазон 0xd0-0xd3. Если в языке этот диапазон используется, переместите диапазон курсора посредством добавления следующей строки в /etc/rc.conf:

mousechar_start=3

20.2.3. Настройка Xorg

X Window System описывает процедуру установки и настройки Xorg. Для настройки локализации Xorg в Коллекции Портов FreeBSD имеются дополнительные шрифты и методы ввода. Настройки i18n для отдельных приложений, такие как шрифты и меню, можно внести в ~/.Xresources, чтобы меню в графических приложениях отображались на выбранном языке.

Протокол X Input Method (XIM) - это стандарт Xorg для ввода неанглийских символов. Доступные метода ввода описывает приложения для методов ввода, которые содержатся в Коллекции Портов FreeBSD. Также доступны дополнительные приложения Fcitx и Uim.

Таблица 4. Доступные метода ввода
ЯзыкМетод ввода

китайский

chinese/gcin

китайский

chinese/ibus-chewing

китайский

chinese/ibus-pinyin

китайский

chinese/oxim

китайский

chinese/scim-fcitx

китайский

chinese/scim-pinyin

китайский

chinese/scim-tables

японский

japanese/ibus-anthy

японский

japanese/ibus-mozc

японский

japanese/ibus-skk

японский

japanese/im-ja

японский

japanese/kinput2

японский

japanese/scim-anthy

японский

japanese/scim-canna

японский

japanese/scim-honoka

японский

japanese/scim-honoka-plugin-romkan

японский

japanese/scim-honoka-plugin-wnn

японский

japanese/scim-prime

японский

japanese/scim-skk

японский

japanese/scim-tables

японский

japanese/scim-tomoe

японский

japanese/scim-uim

японский

japanese/skkinput

японский

japanese/skkinput3

японский

japanese/uim-anthy

корейский

korean/ibus-hangul

корейский

korean/imhangul

корейский

korean/nabi

корейский

korean/scim-hangul

корейский

korean/scim-tables

вьетнамский

vietnamese/xvnkb

вьетнамский

vietnamese/x-unikey

20.3. Поиск приложений i18n

i18n приложения пишутся с применением набора i18n в библиотеках. Это позволяет разработчикам писать простые файлы и переводить отображаемые меню и надписи на любые языки.

В Коллекции портов FreeBSD содержится множество приложений со встроенной поддержкой символов с расширенным и многобайтовым представлением для нескольких языков. Чтобы упростить поиск таких приложений, в их названии содержится аббревиатура i18n. Тем не менее, они не всегда поддерживают нужный язык.

Некоторые приложения могут быть собраны с конкретной кодировкой. Обычно это делается через Makefile порта или передачей параметра configure. Для получения этой информации смотрите документацию i18n для соответствующего порта FreeBSD.

20.4. Настройка локализации для некоторых языков

В этом разделе приведены примеры локализации системы FreeBSD на русский язык. В завершение приводится дополнительная информация для локализации на другие языки.

20.4.1. Русский язык (кодировка KOI8-R)

В этом разделе приведены настройки, специфичные для локализации системы FreeBSD на русский язык. Для более полного описания каждой из настроек обращайтесь к разделу Использование локализации.

Чтобы задать эту локаль для программной оболочки, добавьте в ~/.login_conf каждого пользователя следующие строки:

me:My Account:\
	:charset=KOI8-R:\
	:lang=ru_RU.KOI8-R:

Чтобы настроить консоль, добавьте в /etc/rc.conf такие строки:

keymap="ru.utf-8"
scrnmap="utf-82cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
mousechar_start=3

Для каждой записи ttyv в /etc/ttys используйте cons25r в качестве типа терминала.

Чтобы настроить печать, требуется специальный выходной фильтр для перекодировки из KOI8-R в CP866, поскольку большинство принтеров для России поставляются с аппаратной кодовой страницей CP866. Для этой цели в состав FreeBSD включён фильтр по умолчанию /usr/libexec/lpr/ru/koi2alt. Для его использования добавьте в /etc/printcap такую запись:

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:

Обратитесь к printcap(5) за более подробным разъяснением.

Чтобы настроить поддержку русских названий имён файлов при монтировании файловых систем MS-DOS®, включите в добавляемую в /etc/fstab запись -L с названием локали:

/dev/ad0s2      /dos/c  msdos   rw,-Lru_RU.KOI8-R 0 0

За дополнительной информацией обращайтесь к странице справочника mount_msdosfs(8).

Чтобы настроить русские шрифты в Xorg, установите пакет x11-fonts/xorg-fonts-cyrillic. Затем проверьте раздел "Files" в /etc/X11/xorg.conf. Перед всеми записями FontPath должна быть добавлена следующая строка:

FontPath   "/usr/local/lib/X11/fonts/cyrillic"

Дополнительные кириллические шрифты доступны в Коллекции Портов.

Для настройки ввода на русском языке добавьте следующие строки в /etc/xorg.conf, раздел "Keyboard":

Option "XkbLayout"   "us,ru"
Option "XkbOptions"  "grp:toggle"

Убедитесь, что в этом файле закомментирован XkbDisable.

Для grp:toggle используйте Right Alt, для grp:ctrl_shift_toggle - Ctrl+Shift. Для grp:caps_toggle используйте CapsLock. Прежняя функция CapsLock всё ещё доступна в режиме LAT с использованием Shift+CapsLock. grp:caps_toggle по неустановленной причине не работает в Xorg.

Если на клавиатуре есть клавиши "Windows®" и некоторые неалфавитные клавиши работают неправильно, добавьте в /etc/xorg.conf следующую строку:

Option "XkbVariant" ",winkeys"

Ввод с клавиатуры XKB на русском может не работать с нелокализованными приложениями. Минимально локализованные приложения должны в начале программы вызывать функцию XtSetLanguageProc (NULL, NULL, NULL);.

За дальнейшими инструкциями по локализации приложений Xorg обращайтесь к странице http://koi8.pp.ru/xwin.html. Для получения более общей информации по KOI8-R смотрите http://koi8.pp.ru/.

20.4.2. Информация для других языков

В этом разделе приводится дополнительная информация по настройке других локалей.

Традиционный китайский для Тайваня

У проекта FreeBSD-Taiwan есть FreeBSD Chinese HOWTO.

Локализация на греческий язык

Исчерпывающая статья по поддержке греческого во FreeBSD есть в официальной греческой документации здесь.

Локализация на японский и корейский языки

Для японского обратитесь к http://www.jp.FreeBSD.org/, а для корейского к http://www.kr.FreeBSD.org/.

Неанглоязычная документация FreeBSD

Контрибьюторы FreeBSD перевели отдельные части документации FreeBSD на другие языки. Эти переводы доступны по ссылкам на сайте FreeBSD или из каталога /usr/shared/doc.


Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <freebsd-questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <freebsd-doc@FreeBSD.org>.