Локализация FreeBSD - I18N/L10N Использование и настройка

Перевод 14 главы из FreeBSD 5.1 HandBook

[Перевод Вадим С. Сабинич (mef@ats32.ru) [2:5070/264@fidonet]]

Локализация - I18N/L10N Использование и настройка

Содержание

  • 14.1 Синтаксис
  • 14.2 Основы
  • 14.3 Использование локализации
  • 14.4 Компилирование I18N-программ
  • 14.5 Локализация FreeBSD на определенные языки

Contributed by Andrey A. Chernov. Rewritten by Michael C. Wu.

14.1 Синтаксис

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

После прочтения главы вы узнаете:

  • Как раскодировать различные языки и локали в современных операционных системах.
  • Как установить локаль в вашем шелле.
  • Как настроить вашу консоль для языков, отличных от английского.
  • Как пользоваться X Window с разными языками.
  • Где найти больше информации о приложениях, легко поддающихся локализации.
Перед прочтением, вам следует:
  • Знать, как установить дополнительные third-party приложения (Глава 4).

14.2 Основы

14.2.1 Что такое I18N/L10N?

Разработчики свернули интернационализацию в терминал I18N, считающим число букв между первым и последним символом интернационализации. L10N использует подобной схемой, исходя из ``локализации''. Комбинируя эти два метода, протоколы и приложения, пользователи добиваются использования языка по их выбору.

I18N-приложения написаны с использованием I18N-библиотек. Что предоставляет разработчикам возможность написать простой файл и перевод, выводя меню и тексты в каждый язык. Мы настойчивл рекомендуем программистам придерживаться этого способа.

14.2.2 Почему мне следует использовать I18N/L10N?

I18N/L10N используется всегда, как только вы хотите посмотреть, ввести или обработать данные на языке, отличном от английского.

14.2.3 Какие языки поддерживаются в I18N?

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

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

Во всем этом великолепии, I18N не является специфичной для FreeBSD и это, можно сказать, обычай. Мы поддержим вас в ваших начинаниях по локализации FreeBSD.

Установки локализации основаны на трех основных terms: Language Code, Country Code и Encoding. Имена локалей состоят именно из этих частей: LanguageCode_CountryCode.Encoding

14.3.1 Язык и код страны

В процессе локализации FreeBSD на определенный язык (или какой из других I18N-поддерживающих Юниксов) пользователю требуется узнать коды для указания страны и языка (код страны дает понять приложениям, какой из предложеных вариантов языков использовать). В дополнение, веб-броузеры, SMTP/POP серверы, веб-серверы и тому подобное, основываются на нем. Ниже небольшие примеры кодов страны и языка:

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

14.3.2 Кодировка

Многие языки используют не-ASII кодирование, в том числе и 8-битные, широкие или многобайтовые символы; для более подробной информации смотрите мануал multibyte(3). Старые приложения не распознают их и ошибочно используют эти символы в качестве управляющих. Новые приложения, обычно, распознают 8-битные символы. В зависимости от запросов, пользователям может потребоваться компиляция приложения с поддержкой широких или многобайтовых символов или правильная их настройка. Коллекция портов FreeBSD поставляет каждый язык с различными программами для возможности ввода и обработки широких или многобайтовых символов и избежания путаницы. Обратите внимание на документацию I18N в каждом уважающем себя порте FreeBSD. Вообще, пользователю следует изучить документацию к приложению для того, чтобы решить, как ему правильней настроить программу или прописать корректные значения в configure/Makefile/compiler.

Вещи, которые следует запомнить:

  • Определенный язык устанавливается одним символом Си (см. multibyte(3)), напр., ISO-8859-1, ISO-8859-15, KOI8-R, CP437.
  • Широкое или многобайтовое кодирование напр., EUC, Big5.
Вы можете проверить список активных символьных установок в IANA Registry.

Замечание: FreeBSD 4.5 и выше использует X11-совместимое кодирование локали.

14.3.3 I18N-приложения

В портах FreeBSD и системе пакетов, для более понятной идентификации, I18N-приложения содержат в своих названиях "I18N". К тому же, они не всегда поддерживают нужный язык.

14.3.4 Настройка локали

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

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

  • LANG for POSIX setlocale(3) family functions
  • MM_CHARSET for applications' MIME character set

Это всталяется в конфигурацию пользовательского шелла, конфигурацию определенного приложения и X11-конфигурацию.

14.3.4.1 Методы установки локали

Существует два метода установки локали и каждый из них будет описан ниже. Первый метод (рекомендуемый) построен на добавлении переменных окружения в login class. Второй - на добавлении в стартовый файл системного шелла.

14.3.4.1.1 Метод Login Class'а

Данный метод предоставляет возможность добавления переменных окружения, требуемых для названия локали и установки MIME-символа, всего лишь один раз для всех возможных шеллов, вместо установок для каждого в отдельности. Настройка на пользовательском уровне может быть выполнена пользователем самостоятельно, настройка на администраторском уровне требует привилегий суперпользователя.

14.3.4.1.1.1 Настройка на пользовательском уровне

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

me:\
    :charset=ISO-8859-1:\
    :lang=de_DE.ISO8859-1:
А ниже приведен пример того же самого файла .login_cong, в котором находятся настройки для Традиционного Китайского в кодировке BIG-5. Заметно, что установлено намного больше переменных; это обьясняется тем, что многое программное обеспечение не правильно отражает переменные локали Китая, Японии и Кореи.
#Пользователи, которые не желают пользоваться тайваньским форматом времени
# или денежными знаками, могут изменить каждую переменную вручную
me:\
    lang=zh_TW.Big5:\
    lc_all=zh_TW.Big:\
    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=xcin": #Установка XIM Input Server
Для более подробной информации смотрите главу "Настройка на администраторском уровне" и мануал login.conf(5).

14.3.4.1.1.2 Настройка на администраторском уровне

Убедитесь, что пользовательский login class в /etc/login.cons содержит правильную информацию о языке. Вы можете добавить новые или изменить текущие настройки в /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:
Изменение Login Classes с помощью vipw(8)

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

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

Изменение Login Classes с помощью adduser(8)

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

  • Установка defaultclass равнозначна language в /etc/adduser.conf. Запомните, какой следует вводить defaultclass для пользователейт вашем случае.
  • Альтернативой вышеописанного будет указание language при каждом новом пользователе
    Enter login class: default []:
           appears from adduser(8).
    
  • Другой альтернативой может послужит использование следующего для каждого пользователя, добавляя различный язык по желанию:
    # adduser -class language
    
Изменение Login Classes с помощью pw(8)

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

# pw useradd user_name -L language

14.3.4.1.2 Метод стартового файла шелла

Замечание: Использование этого метода не рекомендуется в связи с тем, что требуется различная настройка для каждого из выбранного шелла. Рекомендуется использовать метод Login Class'а.

Для добавления названия локали и 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.

Для X11:

   В $HOME/.xinitrc:
LANG=de_DE.ISO8859-1; export LANG
Или:
setenv LANG de_DE.ISO8859-1

Относительно вашего шелла (см. выше).

14.3.5 Настройка консоли

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

font8x16=font_name
font8x14=font_name
font8x8=font_name
Font_name берется из директории /usr/share/syscons/fonts, без указания расширения '.fnt'.

Так же будет правильным установить корректные keymap и screenmap вашего однобайтового набора символов, установленные через /stand/sysinstall. Если быть точней, то установка находится /stand/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 битную колонку.

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

moused_enable="YES"
то следующий параграф как раз для вас. В нем рассматривается информация о мышином курсоре.

По умолчанию, курсор мыши занимает место с 0xd0 по 0xd3 в таблице символов. Если ваш язык использует данный диапазон, вам следует переместить диапазон курсора мыши. Для включения рабочего окружения для FreeBSD версий до 5.0, вставьте следующую строку в конфигурацию вашего ядра:

options        SC_MOUSE_CHAR=0x03
Для FreeBSD 4.4 и выше, вставьте следующую строку в /etc/rc.conf:
mousechar_start=3
Keymap_name взят из директории /usr/share/syscons/keymaps (без расширения). Если вы сомневаетесь в том, какой из keymap использовать, - прочитайте мануал kbdmap(1) для тестирования разных keymap без перезагрузки.

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

Так же желательно установить правильный тип терминала в /etc/ttys для всех ttyv*. В данный момент работают ниженаписанные варианты:

   Character Set             Terminal Type
   ISO-8859-1 or ISO-8859-15 cons25l1
   ISO-8859-2                cons25l2
   ISO-8859-7                cons25l7
   KOI8-R                    cons25r
   KOI8-U                    cons25u
   CP437 (VGA default)       cons25
   US-ASCII                  cons25w
Для расширенных и многобайтовых языковых символов, используется корректный порт FreeBSD из директории /usr/ports/<language> (где <language> - язык, который вы выбрали). Многие порты имеют вид консоли, пока система видит из как терминалы, следовательно, вы должны зарезервировать несколько терминалов для X11 и псевдоконсолей. Ниже приведен частичный список приложений для использования других языков в консоли:
   Language                    Location
   Traditional Chinese (BIG-5) chinese/big5con
   Japanese                    japanese/ja-kon2-* or japanese/Mule_Wnn
   Korean                      korean/ko-han

14.3.6 Настройка X11

Хотя X11 и не является частью проекта FreeBSD, мы решили добавить некоторое количество информации для пользователей. Не мешает так же изучить информацию с сайта XFree86 о используемом вами X11-сервере.

В ~/.Xresources вы можете внести дополнительные настройки для локализации шрифтов, меню и тому подобное.

14.3.6.1 Шрифты вывода

Установите X11 True Type-Common server (x11-servers/XttX86srv-common) и truetype шрифты для вашего языка. Правильная настройка локали позволит вам видеть выбранный язык в меню и прочих графических приложениях.

14.3.6.2 Ввод не английских символов

X11 Input Metod (XIM) Protocol является новым стандартов для всех X11-клиентов. Все приложения следует быть написанными как XIM-клиенты, что даст возможность ввода с серверов XIM Input. Так же, некоторые серверы XIM уже имеют встроенную поддержку различных языков.

14.3.7 Настройка печати

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

14.3.8 Ядро и файловые системы

Быстрая файловая система FreeBSD (FFS, от 'fast filesystem') является 8-битной, поэтому она может использоваться с любым однобитовым символьным набором (см. multibyte(3)), но только там, где нет ни одной символьной таблицы в файловой системе; напр., ругает 8-битный и не знает никаких других кодировок. Официально, FFS не поддерживает любые из форм расширенных и многобайтовых символьных таблиц. Хотя, некоторые их них уже имеют патчи для FFS, включающие поддержку. Но это всего лишь временные и непортируемые заплатки или хакерские поделки и мы решили не вставлять из в дерево исходников. FreeBSD MS-DOS файловая система может настраиваться на конвертирование между MS-DOS, Unicode и выбранной символьной таблицей файловой системы FreeBSD. Подробней можно прочитать в mount_msdos(8).

14.4 Компиляция I18N-программ

Многие программы FreeBSD могут быть портированы с поддержкой I18N. Некоторые из них имеют отметку '-I18N' в своем названии. Они и многие другие программы собираются с поддержкой I18N и не требуют специальных ухищрений.

Хотя, некоторый приложения, такие как MySQL, требуют настройку Makefile с указанной кодировкой. Обычно это проделывается в Makefile или изменяются некоторые переменные в исходном коде.

14.5 Локализация FreeBSD на определенные языки

14.5.1 Русский (кодировка KOI8-R)

Originally contributed by Andrey A. Chernov.

Для более подробной информации о кодировке KOI8-R, смотри KOI8-R References (Russian Net Character Set).

14.5.1.1 Настройка локали

Поместите следующие линии в ваш ~/.login_conf:

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

В начале этой главы были приведены примеры настройки локали.

14.5.1.2 Настройка консоли

  • Для версий FreeBSD до 5.0 добавьте следующую строку в конфигурационный файл вашего ядра:
    options        SC_MOUSE_CHAR=0x03
    
    Для версия 4.4 и выше, вставьте следующую строку в /etc/rc.conf:
    mousechar_start=3
    
  • Используйте следующие установки в /etc/rc.conf:
    keymap="ru.koi8-r"
    scrnmap="koi8-r2cp866"
    font8x16="cp866b-8x16"
    font8x14="cp866-8x14"
    font8x8="cp866-8x8"
    
  • Для каждой строки ttyv* в /etc/ttys в качестве типа терминала используйте cons25r.
В начале этой главы были приведены примеры настройки консоли.

14.5.1.3 Настройка принтера

Большинство принтеров для России поставляются с аппаратной кодовой страницей CP866, поэтому требуются специальный выходной фильтр для перекодировки с KOI8-R на CP866. По умолчанию, подобный фильт установлен сюда /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).

14.5.1.4 MS-DOS FS и русские имена файлов

Следующий пример fstab(5) включает поддержку русских имен файлов в примонитрованное файловой системе MS-DOS:

/dev/ad0s2      /dos/c  msdos   rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0
Так же смотрите mount_msdos(8) для более подробного описания ключей -W и -L.

14.5.1.5 Настройка X11

  1. Настроить не-X локаль, как описано выше.

    Замечание: Русская KOI8-R локаль может не работать со старыми релизами XFree86 (до 3.3 версии включительно). Сейчас по умолчанию используются XFree86 4.X. Это следует учитывать при использовании старых версий FreeBSD.

  2. Перейдите в директорию russian/X.language и введите следующую команду:
    # make install
    
    После этого установит порт шрифтов KOI8-R последней версии. XFree86 3.3 уже имеет эти шрифты, но лучше их заменить. Проверьте в файле /etc/XF86Config раздел "Files". Следующие строки должны быть добавлены перед любыми другими строками FontPath:
    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/misc"
    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi"
    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"
    
    Если вы используете видеорежим с высоким разрешением поменяйте местами строки 75dpi и 100dpi.
  3. Активируйте русскую клавиатуру, добавив следующий раздел "Keyboard" в файл XF86Config. Для XFree86 3.X:
    XkbLayout  "ru"
    XkbOptions "grp:caps_toggle"
    
    Для XFree86 4.X:
           
    Option "XkbLayout"   "ru"
    Option "XkbOptions"  "grp:caps_toggle"
    
    Так же отключите XkbDisable (просто закоментируйте). Переключение рус/лат будет производиться с помощью клавиши CapsLock. Старая функция CapsLocj будет доступна через комбинацию Shift+CapsLock (только в режиме латиницы). Если у вас на клавиатуре имеются клавиши ``Windows'' и притензии некорректной работе каких-нибудь не-алфавитных клавиш в режиме кириллицы, добавьте следующую строку в XF86Config. Для XFree86 3.X:
    XkbVariant "winkeys"
    
    Для XFree86 4.X:
    Option "XkbVariant" "winkeys"
    
Замечание: Русская XKB-клавиатура может не работать со старыми версиями XFree86, более подробно описано выше. Так же эта клавиатура может работать с нелокализованными приложениями не всегда так, как требуется. Минимально локализованные приложения следует вызывать с помощью XtSetLanguageProc (NULL, NULL, NULL); старая функция в программе. Для более подробных инструкций по локазации X11-приложений читайте KOI8-R for X Window.

14.5.2 Локализация традиционного китайского для Тайваня

Проект FreeBSD-Taiwan имеет руководство по I18N/L10N для FreeBSD на http://freebsd.sinica.edu.tw/~ncvs/zh-l10n-tut/ используя много китайских портов. Редактором zh-L10N-tut является Клив Лин (Clive Lin) <Clive@CirX.org. Так же вы можете обновить через CVS следующие коллекции на freebsd.sinica.edu.tw:

Collection Description
outta-port  tag=. Бета-версия коллекции портов для Китая
zh-L10N-tut tag=. Руководство по локализации FreeBSD на традиционный
		  китайский в кодировке BIG-5
zh-doc      tag=. Перевод документации к FreeBSD на традиционный китайский
		  в кодировке BIG-5
Хуан-Хсинг Шень (Huan-Hsing Shen) <s874070@mail.yzu.edu.tw> создал китайскую коллекцию FreeBSD (CFC) используя zh-L10N-tut. Пакеты и скрипты можно взять на ftp://ftp.csie.ncu.edu.tw/OS/FreeBSD/taiwan/CFC/.

14.5.3 Локализация для немецкого языка (Для всех языков ISO 8859-1)

Славен Резиц (Slaven Rezic) <eserte@cs.tu-berlin.de> написал руководство по обеспечению использования умлаутов под FreeBSD. Данное руководство на немецком доступно на сайте http://www.de.FreeBSD.org/de/umlaute/.

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

Для японского изучите материалы на http://www.jp.FreeBSD.org/, а для корейского - на http://www.kr.FreeBSD.org/.

14.5.5 Документация по FreeBSD на языках, отличном от английского

Некоторые контрибуторы FreeBSD, при наличие переводов, размещают их на основных сайтах или в /usr/share/doc.

перевод: vadim s. sabinich [2:5070/264@fidonet] <mef@ats32.ru> Mon Nov 10 02:42:23 2003

Статья взята с сайта OpenNet.

[ опубликовано 29/12/2003 ]

Перевод Вадим С. Сабинич (mef@ats32.ru) [2:5070/264@fidonet] - Локализация FreeBSD - I18N/L10N Использование и настройка   Версия для печати