Руководство по русской локализации Gentoo Linux
1.
Введение
Что такое русская локализация
В понятие локализации входит обеспечение вывода и ввода символов национальных
языков (в случае использования набора символов, отличных от чистого латинского)
и определение переменных окружения, зависящих от страны, языка и набора
символов (то есть собственно установка locale). В число таких переменных, кроме
страны, языка и набора символов, входят также представление даты и времени,
разделителей десятичных дробей, денежных единиц и так далее.
Вследствие различия подходов в этом документе будут отдельно рассмотрены
локализация текстового (то есть Linux-консоли) и графического (оконной системы
X) режимов.
О кириллических кодировках
В условиях России и некоторых других стран бывшего СССР локализация осложняется
множественностью наборов символов (charsets), используемых для представления
алфавитов, основанных на кириллице. Причём для Unix-систем получили
распространение минимум три таких набора, в просторечии именуемых кодировками:
традиционная для свободных Unix-клонов (в том числе и Linux) кодировка KOI8-R,
кодировка ISO-8859-5 (именуемая кодировкой ГОСТ), используемая в проприетарных
Unix-системах, и кодировка CP1251 (или кодировка Windows). Кроме того, для
обеспечения экранного вывода используется кодировка CP866 (или кодировка DOS).
Наконец, в последнее время всё большую популярность получает кодировка UTF-8.
В Gentoo Linux штатно (как говорится, из коробки) поддерживается кодировка
KOI8-R, и всё сказанное ниже относится именно к ней. Локализацию для кодировок
ISO-8859-5 или CP1251 пользователь может выполнить самостоятельно, получив из
независимых источников некоторые дополнительные компоненты. О локализации для
кодировки UTF-8, призванной унифицировать подход к интернационализации, будет
говориться в следующих версиях этого документа, когда использование её станет
общепринятым.
2.
Базовая кириллизация консоли
Введение
Итак, базовая локализация консоли включает обеспечение вывода национальных
символов на экран и ввода их с клавиатуры. Однако в случае кириллической
локализации вследствие особенностей наборов символов и аппаратных особенностей
PC для ввода и для вывода используются, как правило, разные кодировки. И это
требует еще двух дополнительных шагов — установки карты соответствия между
наборами символов ввода и вывода, и активизация её на каждой из виртуальных
консолей.
Установка экранного шрифта
Экранный шрифт, загружаемый по умолчанию при старте системы, определяется в
файле /etc/rc.conf строкой
Листинг 2.1: Строка, определяющая экранный шрифт |
CONSOLEFONT="default8x16"
|
Для вывода русских букв "умолчальное" значение следует заменить на имя
какого-либо файла шрифта с поддержкой кириллицы, например, cp866-8x16
для представления кодировки DOS или koi8r-8x16 — для кодировки KOI8-R.
Например,
Листинг 2.2: Определение экранного шрифта для кодировки cp866 |
CONSOLEFONT="cp866-8x16"
|
Или —
Листинг 2.3: Определение экранного шрифта для кодировки KOI8-R |
CONSOLEFONT="koi8r-8x16"
|
Примечание:
Файлы шрифтов (и не только кириллических) находятся в каталоге
/usr/share/consolefonts/ и имеют вид *.gz, *.psf.gz
или *.psfu.gz. При стандартном их размещении и форме ни полного пути, ни
"расширения" имени указывать не обязательно.
|
Важно:
В кириллическом Linux'е для экранного вывода, как правило, используется
кодировка cp866 (вне зависимости от того, какой набор символов принят для
клавиатурного ввода). О причинах этого говорить можно было бы долго —
достаточно указать, что в любом ином случае программы, использующие
псевдографику (например, Midnight Commander) приобретут весьма уродливый вид.
|
Экранные кириллические шрифты, поставляемые с Gentoo Linux, далеки от
эстетического совершенства (справедливости ради заметим, что это относится
почти ко всем Unix-клонам). И потому в качестве источника дополнительных
шрифтов можно рекомендовать пакет console-tools-cyrillic
Виктора Вагнера. В результате приведенная выше в качестве примера строка может
принять вид вроде
Листинг 2.4: Один из лучших кириллических шрифтов для консоли |
CONSOLEFONT="UniCyr-sans"
|
Установка раскладки клавиатуры
Загружаемая по умолчанию раскладка клавиатуры также определяется в файле
/etc/rc.conf строкой
Листинг 2.5: Строка, определяющая раскладку клавиатуры |
KEYMAP="us"
|
По аналогии с предыдущим случаем легко догадаться, что значение us
следует заменить на имя файла какой-либо кириллической (на этот раз уже в
кодировке KOI8-R) раскладки. Место этих файлов (имеющих вид *.map.gz) — в
каталоге /usr/share/keymaps/i386/qwerty, где для русской кодировки
KOI8-R имеется несколько раскладок, например, ru1-ru4. Различия между ними
— в соответствии различной маркировке клавиш (DOS или Windows —
не путать с одноименными кодировками) и положении переключателя
латиница/кириллица. Рискну взять на себя смелость рекомендовать раскладку ru4
— для Windows-маркированных клавиатур, в которой переключателем служит
CapsLock (при этом фиксация верхнего регистра обеспечивается одновременным
нажатием клавиш Shift+CapsLock). То есть строка примет вид:
Листинг 2.6: Один из примеров определения кириллической раскладки |
KEYMAP="ru4"
|
Примечание:
Как и в случае с экранными шрифтами, при стандартном расположении файлов
раскладок указывать полный путь к ним и "расширение" имени нет необходимости.
|
Предупреждение:
При желании вы можете выбрать и раскладку клавиатуры для кодировки cp1251
(например, ru_win). Однако в этом случае придётся отыскать или самостоятельно
изготовить таблицу перекодировки (mapscreen) cp1251->cp866.
|
Примечание:
Нет ничего более уродливого, чем программы, использующие псевдографику, при
экранном представлении в кодировке cp1251.
|
Установка карты соответствия (mapscreen)
Теперь остаётся только обеспечить соответствие между кодировками ввода (KOI8-R)
и вывода (cp866), то есть загрузить соответствующую таблицу перекодировки
(mapscreen). Для этого снова обращаемся к файлу /etc/rc.conf.
Строка в нём, отвечающая за эту операцию, имеет по умолчанию такой вид:
Листинг 2.7: Строка, определяющая раскладку клавиатуры |
#CONSOLETRANSLATION="cp437_to_iso01"
|
Необходимо, сняв с неё символ комментария (#), заменить "умолчальное" значение
на необходимое нам, и подсмотреть его можно в каталоге
/usr/share/consoletrans — это koi2alt:
Листинг 2.8: Установка таблицы соответствия cp866->KOI8-R |
CONSOLETRANSLATION="koi2alt"
|
Предупреждение:
Пожалуйста, не забудьте снять символ комментария со строки
CONSOLETRANSLATION — кто только на моей памяти не наступал на эти
грабли :-)
|
Примечание:
Если вы по каким-либо причинам остановились на представлении экранных шрифтов в
кодировке KOI8-R, загрузка и активизация карты соответствия, разумеется, не
нужна.
|
Активизация карты соответствия
Результатом выполненной операции будет то, что после перезагрузки машины мы
получили бы нормальный вывод кириллического текста (записанного в кодировке
KOI8-R), но только — на первой (т.н. системной) консоли. Чтобы иметь то
же самое на остальных виртуальных консолях (а в Gentoo Linux их по умолчанию
еще 5), та же карта соответствия должна быть активизирована на каждой из них с
помощью направления Escape-последовательности \033(K (символ \ в данном случае
показывает, что следующие за ним символы рассматриваются как специальные).
Достигнуть этого можно разными способами. Например, создать в каталоге
/etc/init.d/ файл consoletrans и в любом текстовом
редакторе внести в него следующие строки:
Листинг 2.9: Сценарий активизации mapscreen |
for i in 1 2 3 4 5 6; do
echo -ne '\033(K' > /dev/vc/$i
done
|
Примечание:
Это — для случая 6-ти консолей по умолчанию. Если количество их
изменялось пользователем, значения in, очевидно, должны быть приведены в
соответствие с реальностью.
|
Примечание:
Следует отметить, что начиная с baselayout-1.8.x необходимость в этом отпала,
поскольку этот код был встроен в /etc/init.d/consolefont.
|
Теперь командой chmod a+x /etc/init.d/consoletrans созданному скрипту
следует присвоить бит исполнения, после чего он добавляется к уровню исполнения
по умолчанию (default runlevel):
Листинг 2.10: Сценарий активизации mapscreen |
# rc-update add consoletrans default
|
Примечание:
Механизм автоматического обновления стартовых скриптов подробно описан в соответствующем разделе документации.
|
Вот теперь после перезагрузки машины мы получим полноценно локализованную
консоль.
Примечание:
Все действия, описанные в данной главе, могут быть выполнены как на
заключительных шагах (final steps) установки Gentoo Linux, так и в произвольный
момент времени в дальнейшем.
|
3.
Установка русской locale
Установка locale ru_RU.KOI8-R
Установить локально-зависимые переменные можно различными способами, в том
числе и просто в профильных файлах отдельных пользователей. Однако в Gentoo
Linux предусмотрен автоматический механизм установки любых переменных окружения
в качестве общесистемных — env-update, подробно описанный в соответствующих разделах документации.
Для использования этого механизма следует в файл
/etc/env.d/02locale добавить строку
Листинг 3.1: Установка переменной LANG |
LANG="ru_RU.KOI8-R"
|
которая определяет не только язык locale, но и все остальные
локально-зависимые переменные. Далее выполняем команду env-update,
дополняющую глобальный профильный файл /etc/profile, после чего
остаётся только перечитать последний командой source /etc/profile.
Теперь в ответ на команду locale последует вывод
Листинг 3.2: Вывод команды locale после установки переменной LANG |
LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=
|
свидетельствующий, что все локально зависимые переменные приняли значения для
страны России (ru), русского языка (_RU) и набора символов KOI8-R. Те же
значения этих переменных будут устанавливаться и в сеансах всех пользователей,
вошедших в систему после выполнения команды env-update.
Предупреждение:
Механизм env-update однозначно работает в том случае, если
пользовательской оболочкой (login shell) является /bin/bash. При использовании
иных командных оболочек могут потребоваться некоторые дополнительные действия.
Например, если в качестве login shell выступает оболочка zsh, следует
отказаться от создания файла ~/.zshenv в домашнем каталоге пользователя.
|
Важно:
Переменная LANG=ru_RU.KOI8-R должна быть установлена в любом случае, даже если
вы не любите сообщений на русском языке: в противном случае во многих
программах (в том числе для XFree86) окажется просто невозможным, например,
ввод символов кириллицы.
|
Как уже сказано, установка переменной LANG автоматически определяет и все
прочие локально-зависимые переменные. Что в ряде случаев может быть
нежелательным. Например, некоторые программы расчетного характера требуют,
чтобы в качестве десятичного разделителя использовался символ точки, как в
locale POSIX, а не запятой, как это принято в locale ru_*. Чтобы добиться
этого, достаточно в конец файла /etc/env.d/02locale, после
определения LANG, добавить строку вида:
Листинг 3.3: Установка переменной LC_NUMERIC |
LC_NUMERIC="POSIX"
|
Аналогичным образом могут поступить пользователи, испытывающие стойкую
неприязнь к русскоязычным меню и сообщениям программ:
Листинг 3.4: Установка переменной LC_NUMERIC |
LC_MESSAGES="POSIX"
|
4.
Установка часового пояса
Системные часы по Гринвичу
Если системные часы машины в BIOS Setup установлены на время по Гринвичу (UTC),
для настройки часового пояса достаточно создать символическую ссылку
/etc/localtime на файл, описывающий данный часовой пояс. Например,
для установки московского времени это будет выглядеть так:
Листинг 4.1: Установка московского времени |
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
|
Примечание:
Точное обозначение часовых поясов для России можно посмотреть в каталогах
/usr/share/zoneinfo/Europe (имеет силу также для Украины и
Белоруссии) и /usr/share/zoneinfo/Asia (для азиатской части
России). Например, пользователям из Петропавловска-Камчатского указанная
команда потребуется в следующем виде:
|
Листинг 4.2: Установка времени для Петропавловска-Камчатского |
ln -sf /usr/share/zoneinfo/Asia/Kamchatka /etc/localtime
|
Системные часы по местному времени
Если системные часы данной машины установлены по местному времени, кроме
создания указанной ссылки потребуется внести еще и изменения в файл
/etc/rc.conf, а именно: строку CLOCK="UTC" заменить на
CLOCK="local".
5.
Локализация оконной системы X
Введение
Локализация оконной системы X (конкретно — её свободной реализации
XFree86) может быть выполнена двумя путями: с помощью специальных утилит
конфигурирования (обычно — xf86config, используемой для настройки
графического режима вообще) или прямым редактированием конфигурационного файла
/etc/X11/XF86Config.
Локализация с использованием утилиты xf86config
Утилита xf86config в большинстве случаев позволяет корректно выполнить
кириллизацию системы XFree86 уже на стадии начальной её настройки. Для этого
необходимо дать (в консольном режиме) одноименную команду и правильно ответить
на вопросы, относящиеся к определению языково-зависимых параметров, и следующие
после указания выбора типа клавиатуры.
Первый из таких вопросов — выбор страны (Enter a number to choose the
country), ответ на который, на самом деле, определяет базовую раскладку
клавиатуры. Очевидными ответами являются 8 Belarusian для Белоруссии и
70 Ukrainian для Украины, тогда как для России предлагается два
варианта: 53 Russian и 54 Russian (cyrillic phonetic). Первый
— это традиционная раскладка qwerty, второй же —
фонетическая раскладка ywerti, в которой символы кириллицы расположены
на месте созвучных латинских. Она использовалась на старых терминалах и ныне
практически не встречается. Так что на самом деле и тут выбор 53 Russian
практически однозначен.
Далее следует предложение указать вариант русской раскладки (Please enter a
variant name for 'ru' layout). Если, просто нажав Enter, отказаться
от этого, будет установлен так называемый DOS-вариант раскладки (вернее,
маркировки клавиш); маркированные таким образом клавиатуры практически вышли из
употребления, поэтому следует, введя winkeys, выбрать Windows-вариант
(не следует путать его с Windows-кодировкой, иначе говоря — cp1251).
Затем, введя y, следует положительно ответить на вопрос об указании
дополнительных опций расширения XKB (Do you want to select additional
XKB options (group switcher, group indicator, etc.)?): это позволит
определить переключатель латиница/кириллица (в силу исторических причин русская
раскладка клавиатуры в XFree86 по умолчанию такового не имеет вообще).
В результате следующим шагом будет предложение выбрать клавишу или клавишную
комбинацию для такого переключателя. Возможные варианты включают:
Листинг 5.1: Варианты выбора переключателя латиница/кириллица |
1 R-Alt switches group while pressed
2 Left Win-key switches group while pressed
3 Right Win-key switches group while pressed
4 Both Win-keys switch group while pressed
5 Right Alt key changes group
6 Caps Lock key changes group
7 Menu key changes group
8 Left Win-key changes group
9 Right Win-key changes group
10 Both Shift keys together change group
11 Control+Shift changes group
12 Alt+Control changes group
13 Alt+Shift changes group
|
Из них следует выбирать, руководствуясь своими предпочтениями. Однако по вполне
понятным причинам можно рекомендовать, чтобы переключатель раскладок был
идентичен для текстового (консольного) и графического режимов. ИМХО, лучше
всего на эту роль подходит клавиша CapsLock (для этого в консоли должна
быть установлена раскладка ru4). При этом первичная функция этой клавиши
(фиксация верхнего регистра), как и в консоли, будет выполняться одновременным
нажатием Shift+CapsLock
Примечание:
Не менее удобным представляется и использование в качестве переключателя
какой-либо из т.н. Windows-клавиш, имеющихся на всех современных клавиатурах.
Однако при этом для достижения идентичности переключения в консоли и в XFree86
потребуются расширенные раскладки клавиатуры из упомянутого выше пакета
console-tools-cyrillic.
|
Следующие несколько вопросов позволяют указать переключатель для третьей
клавиатурной раскладки, дополнительные позиции управляющей клавиши
Control, индикацию текущей раскладки (например, индикаторами CapsLock
или ScrollLock) и ещё некоторые опции. Если в них нет необходимости —
ответы на эти вопросы можно просто пропустить, нажимая клавишу Enter.
Покончив с настройкой клавиатуры, следует завершить конфигурирование XFree86
(включая настройку видеорежимов) и выйти из программы xf86config с
сохранением результатов в файле /etc/X11/XF86Config.
Установка кириллических шрифтов
Программа xf86config обеспечивает настройку клавиатурного ввода, но не
подключает по умолчанию шрифтов с символами кириллицы — это достигается
редактированием файла /etc/X11/XF86Config. Его следует открыть в
любом текстовом редакторе и отыскать в Section "Files" описание путей к
шрифтовым файлам.
Предупреждение:
При вызове файла /etc/X11/XF86Config необходимо отключить режим
переноса строк в используемом редакторе.
|
Пути к файлам шрифтов описываются следующим образом:
Листинг 5.2: Описание путей к файлам шрифтов |
FontPath "/usr/X11R6/lib/X11/fonts/local/"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
|
В этот список следует внести путь к файлам шрифтов с поддержкой кириллицы. По
умолчанию в любой современной версии XFree86 имеется один набор кириллических
шрифтов — Cronyx, расположенный в каталоге
/usr/X11R6/lib/X11/fonts/cyrillic/. И потому первая строка
указанной секции должна принять вид
Листинг 5.3: Описание пути к файлам кириллических шрифтов |
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/"
|
Важно:
Строка с кириллическими шрифтами должна быть первой в списке путей, дабы именно
они обнаруживались бы любыми программами в первую очередь при совпадении их
имен или псевдонимов с таковыми шрифтов, не имеющих символов кириллицы.
|
Примечание:
Шрифты производства Cronyx содержат ограниченное число гарнитур. Кроме того,
они являются растровыми и вообще далеки от эстетического совершенства. Поэтому
их по возможности лучше дополнить (или заменить) шрифтами от независимых
производителей. В качестве таковых можно рекомендовать коллекцию масштабируемых
(TTF и ATM) лицензионно чистых шрифтов Валентина Филиппова, входящих в
российскую сборку OpenOffice и в последние версии дистрибутивов Altlinux.
|
Ручная настройка клавиатуры для ввода кириллицы
К кириллизации XFree86 посредством программы xf86config целесообразно
прибегать только при начальной настройке этой системы. Если же в ходе
использования Gentoo Linux возникнет необходимость дополнительного
конфигурирования (например, изменения положения переключателя раскладок), проще
обратиться к прямому редактированию файла /etc/X11/XF86Config.
За настройку клавиатуры в нём отвечает Section "InputDevice". В ней,
после указания идентификатора клавиатуры (а оконная система X в состоянии
поддерживать, даже на локальной машине, более одной физической клавиатуры) и её
драйвера, следует описание т.н. правил (rules), определяющих
раскладку клавиатуры. Оно имеет вид вроде следующего:
Листинг 5.4: Описание раскладки клавиатуры |
Option "XkbRules" "xfree86"
Option "XkbModel" "pc105"
Option "XkbLayout" "ru"
Option "XkbVariant" "winkeys"
Option "XkbOptions" "grp:caps_toggle,grp_led:caps"
|
Здесь, разумеется, можно изменить всё, что угодно. Однако практически имеет
смысл рассмотреть только возможные варианты значений для строки Option
"XkbOptions". Значение, приведенное в примере, соответствует переключателю
раскладок CapsLock (grp:caps_toggle) и индикатору Capslock как показателю
включения русской раскладки (grp_led:caps). И то, и другое можно изменить, если
не устраивает. Доступные значения содержатся (вместе с их краткими описаниями)
в секции ! option файла
/usr/X11R6/lib/X11/xkb/rules/xfree86.lst.
Примечание:
Описание раскладок клавиатуры через набор правил — лишь одно из
возможных. О других способах сделать это можно прочитать на
http://www.tsu.ru/~pascal/other/xkb.
|
|