Руководство FreeBSD
Пред. | Глава 21. Локализация - I18N/L10N использование и настройка | След.

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

При всем своем величии, I18N не специфична для FreeBSD и является, по сути, соглашением. Следование этому соглашению помогает FreeBSD, и мы это приветствуем.

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

    кодязыка_кодстраны.кодировка

## 21.3.1. Язык и код страны

Чтобы настроить FreeBSD (или любую другую UNIX®-систему, поддерживающую I18N) на использование специфического языка, пользователю нужно выяснить коды этого языка и страны (коды страны сообщают приложению какой именно диалект языка этой страны нужно использовать). К тому же, веб-браузеры, SMTP/POP серверы, веб-серверы и т.п. делают свой выбор в зависимости от этого. Далее показаны примеры кодов языка/страны:

Код языка/страны | Описание
--- | ---
en_US | Английский - Соединенные Штаты
ru_RU | Русский для России
zh_TW | Традиционный китайский для Тайваня

## 21.3.2. Кодировки

Некоторые языки используют не соответствующие ASCII кодировки, которые используют для кодирования 8 бит, расширенное или многобайтовое представление символов (подробности см. в multibyte(3)). Старые приложения не распознают такие кодировки и ошибочно принимают их за управляющие символы. Новые приложения обычно распознают 8-битные символы. В зависимости от реализации, пользователю может потребоваться компиляция приложения с поддержкой расширенного или многобайтного представления символов, или же просто правильная его настройка. Чтобы иметь возможность вводить и обрабатывать символы с расширенным или многобайтным представлением, Коллекция портов FreeBSD предоставляет поддержку разных языков для различных приложений. Смотрите документацию по I18N в соответствующем порту FreeBSD.

В частности, пользователю необходимо читать прилагаемую к приложению документацию чтобы решить, как правильно его настроить или указать правильные параметры configure/Makefile/компилятору.

Следует помнить следующие вещи:

- Наборы символов, использующие один байт для кодирования символа (см. multibyte(3)), например, ISO8859-1, ISO8859-15, KOI8-R, CP437.

- Расширенные или многобайтные кодировки, например, EUC, Big5.

Вы можете посмотреть актуальный список наборов символов на сайте IANA Registry.

> Замечание: Вместо этого, FreeBSD используют X11-совместимые кодировки для локализации.

## 21.3.3. Приложения, использующие I18N

В системе Портов и Пакетов FreeBSD в название приложений, поддерживающих I18N, включена аббревиатура `I18N` для легкой их идентификации. И, тем не менее, не все приложения поддерживают требуемый язык.

## 21.3.4. Настройка локализации

Обычно достаточно экспортировать значение имени локализации в переменной `LANG` Вашей оболочки. Это можно сделать в пользовательском `~/.login_conf` файле или в инициализационном файле пользовательской оболочки (`~/.profile`, `~/.bashrc`, `~/.cshrc`). Нет надобности устанавливать отдельные параметры локализации такие как `LC_CTYPE`, `LC_CTIME`. За дополнительной информацией, пожалуйста, обращайтесь к документации FreeBSD по нужному вам языку.

Вам следует установить следующие переменные окружения в ваших конфигурационных файлах:

- `LANG` для семейства функций POSIX® setlocale(3)

- `MM_CHARSET`набор символов MIME для приложений

Эти настройки включают конфигурацию оболочки пользователя, конфигурацию конкретных приложений и конфигурацию X11.

### 21.3.4.1. Методы настройки локализации

Существует два метода настройки локализации и оба описаны ниже. Первый (рекомендуемый) заключается в задании переменных в классе логина, другой метод заключается в задании переменных окружения в инициализационном файле системной оболочки.

#### 21.3.4.1.1. Метод Login Classes

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

##### 21.3.4.1.1.1. Настройка на уровне пользователя

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

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

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

    #Пользователи, которые не хотят использовать
    денежные единицы
    #и форматы времени Тайваня, могут вручную изменить каждую переменную
    me:\
        :lang=zh_TW.Big5:\
        :setenv=LC_ALL=zh_TW.Big:\
        :setenv=LC_COLLATE=zh_TW.Big5:\
        :setenv=LC_CTYPE=zh_TW.Big5:\
        :setenv=LC_MESSAGES=zh_TW.Big5:\
        :setenv=LC_MONETARY=zh_TW.Big5:\
        :setenv=LC_NUMERIC=zh_TW.Big5:\
        :setenv=LC_TIME=zh_TW.Big5:\
        :charset=big5:\
        :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server

За подробностями обращайтесь к разделу Настройка на уровне администратора и login.conf(5).

##### 21.3.4.1.1.2. Настройка на уровне администратора

Проверьте, что класс логина пользователя в `/etc/login.conf` задает нужный язык. Убедитесь, что эти настройки присутствуют в `/etc/login.conf`:

    language_name:accounts_title:\
        :charset=MIME_charset:\
        :lang=locale_name:\
        :tc=default:

Используя наш предыдущий пример с Latin-1, это должно выглядеть так:

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

После изменения описания классов логинов выполните команду:

    # cap_mkdb /etc/login.conf

для того, чтобы изменения в файле `/etc/login.conf` стали использоваться системой.

#### Изменение класса логина с помощью vipw(8)

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

    user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh

#### Изменение класса логина с помощью adduser(8)

Используйте `adduser` для добавления новых пользователей и сделайте следующее:

- Установите `defaultclass = `язык`` в `/etc/adduser.conf`. Помните, что в этом случае вы должны задать `default` класс для всех пользователей других языков.

- Другой способ заключается в задании класса логина каждый раз, когда adduser(8) попросит об этом:

      Enter login class: default []:

- Еще один способ - использовать следующее для каждого пользователя другого языка, которого вы хотите добавить:

      # adduser -class язык

#### Изменение класса логина с помощью pw(8)

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

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

#### 21.3.4.1.2. Метод инициализационных файлов оболочки

> Замечание: Этот метод не рекомендуется, потому что он требует разных настроек для каждой оболочки. Вместо этого используйте Метод класса логина.

Чтобы добавить локализацию и набор символов MIME, просто установите две переменные окружения, приведенные ниже, в инициализационные файлы оболочек `/etc/profile` и/или `/etc/csh.login`. Для примера мы используем немецкий язык:

В `/etc/profile`:

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

Или в `/etc/csh.login`:

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

Как вариант, вы можете добавить установки, приведенные выше в `/usr/share/skel/dot.profile` (соответствует установкам в `/etc/profile` выше), или `/usr/share/skel/dot.login` (соответствует установкам в `/etc/csh.login` выше).

Для X11:

В `$HOME/.xinitrc`:

    LANG=de_DE.ISO8859-1; export LANG

Или:

    setenv LANG de_DE.ISO8859-1

В зависимости от вашей оболочки (см. выше).

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

Для всех однобайтовых кодовых таблиц, укажите подходящие консольные шрифты в `/etc/rc.conf` для требуемого языка:

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

The `имя_шрифта` берется из каталога `/usr/share/syscons/fonts`, без указания расширения `.fnt`.

Убедитесь также в установке правильных значений keymap и screenmap для вашей однобайтовой кодовой таблицы через `sysinstall` (`/stand/sysinstall` в FreeBSD версий более ранних, чем 5.2). В sysinstall выберите Configure, затем Console. Или добавьте следующие строки в `/etc/rc.conf`:

    scrnmap=screenmap_name
    keymap=keymap_name
    keychange="fkey_number sequence"

`screenmap_name` берется из каталога `/usr/share/syscons/scrnmaps`, без суффикса `.scm`. Screenmap с соответствующим шрифтом обычно используется в качестве обходного пути для расширения 8 бит до 9 бит в псевдографическую область VGA адаптера, например для удаления букв из этой области если используется 8-битный шрифт.

Если даемон мыши moused включен добавлением в `/etc/rc.conf` следующей строки:

    moused_enable="YES"

прочтите информацию о курсоре мыши в следующем параграфе.

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

    mousechar_start=3

`keymap_name` берется из каталога `/usr/share/syscons/keymaps`, без расширения `.kbd`. Если вы не знаете какую таблицу использовать, запустите kbdmap(1) для тестирования таблицы без перезагрузки.

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

Убедитесь также, что для всех записей `ttyv*` в `/etc/ttys` установлен подходящий тип терминала. Имеющиеся типы соответствуют следующим кодировкам:

Кодовая таблица | Тип терминала
--- | ---
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 из каталога `/usr/ports/`language``. Некоторые порты выводят информацию на консоль, хотя для системы выглядят как последовательные псевдотерминалы, следовательно вы должны зарезервировать достаточное количество псевдотерминалов и для X11 и для последовательных псевдоконсолей. Вот неполный список приложений для использования этих кодировок в консоли:

Язык | Приложение
--- | ---
Традиционный китайский (BIG-5) | `chinese/big5con`
Японский | `japanese/kon2-16dot` или `japanese/mule-freewnn`
Корейский | `korean/han`

## 21.3.6. Настройка X11

Хотя X11 не является частью проекта FreeBSD, мы включили сюда некоторую информацию для пользователей FreeBSD. За детальной информацией обращайтесь к Веб сайту Xorg или к сайту того сервера X11, который вы используете.

В `~/.Xresources`, вы можете внести дополнительные I18N настройки приложений (настройки шрифтов, меню и т.п.).

### 21.3.6.1. Отображение шрифтов

Установите сервер Xorg (`x11-servers/xorg-server`) или XFree86™ (`x11-servers/XFree86-4-Server`), затем TrueType® шрифты для используемого языка. После установки корректного значения locale меню, сообщения и т.д. должны появиться на соответствующем языке.

### 21.3.6.2. Ввод не-англоязычных символов

Протокол X11 Input Method (XIM) это новый стандарт для всех клиентов X11. Все приложения X11 должны быть написаны как XIM клиенты, получающие ввод с серверов XIM Input. Существует несколько XIM серверов, доступных для различных языков.

## 21.3.7. Настройка принтера

Некоторые однобайтовые кодовые таблицы обычно поддерживаются принтерами на аппаратном уровне. Расширенные, или мультибайтовые кодовые таблицы требуют дополнительной настройки. Мы рекомендуем использование apsfilter. Кроме того, вы можете преобразовать документ в формат PostScript® или PDF с помощью поддерживающих соответствующий язык программ.

## 21.3.8. Ядро и файловые системы

Файловая система FreeBSD (fast filesystem, FFS) поддерживает 8-битные символы, ее можно использовать с любой односимвольной кодовой таблицей (см. multibyte(3)), но кодовые таблицы не хранятся в файловой системе; т.е. ей ничего не известно о порядке расположения символов в кодовой таблице. Официально FFS пока не поддерживает расширенные или много символьные кодовые таблицы. Однако, для некоторых расширенных или многобайтовых кодировок есть неофициальные патчи, включающие их поддержку в FFS. Это всего лишь временные не переносимые решения или исправления кода и мы решили не включать их в дерево исходных текстов. Обращайтесь к сайтам по соответствующим языкам за дальнейшей информацией и патчами.

Файловая система MS-DOS® в FreeBSD может быть настроена для поддержки перекодировки между MS-DOS, кодовыми таблицами Unicode и выбранной кодовой таблицей FreeBSD. Обращайтесь к mount_msdosfs(8) за подробностями.

Пред. | Начало | След.
Основы | Уровень выше | Компиляция I18N программ

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

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