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

## 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-15 | `cons25l1`
ISO8859-2 | `cons25l2`
ISO8859-7 | `cons25l7`
KOI8-R | `cons25r`
KOI8-U | `cons25u`
CP437 (VGA default) | `cons25`
US-ASCII | `cons25w`

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

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

Глава 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

Пред. | Наверх | След.
Глава 20. Локализация - использование и настройка i18n/L10n | Начало | 20.3. Поиск приложений i18n

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

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