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

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

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

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

Таблица 20.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/share/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/share/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/share/syscons/fonts. Чтобы настроить консольный шрифт, укажите в /etc/rc.conf имя_шрифта без расширения .fnt:

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

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

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

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

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

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

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

Таблица 20.2. Типы терминалов для набора символов
Набор символовТип терминала
ISO8859-1 or ISO8859-15cons25l1
ISO8859-2cons25l2
ISO8859-7cons25l7
KOI8-Rcons25r
KOI8-Ucons25u
CP437 (VGA default)cons25
US-ASCIIcons25w

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

Таблица 20.3. Доступные консоли из Коллекции Портов
ЯзыкРасположение порта
Традиционный китайский (BIG-5)chinese/big5con
Chinese/Japanese/Koreanchinese/cce
Chinese/Japanese/Koreanchinese/zhcon
Japanesechinese/kon2
Japanesejapanese/kon2-14dot
Japanesejapanese/kon2-16dot

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

mousechar_start=3

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

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

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

Таблица 20.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

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

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

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