Русификация - один из самых больных вопросов для тех, кто первый раз устанавливает Slackware. Эта процедура отличается от таковых в Red Hat и его клонах. В сети можно найти много способов того, как это сделать и порой сложно дать ответ на вопрос - какой же из них правильный, какой лучше. Сейчас мы рассмотрим несколько способов как это сделать. Они отличаются по степени сложности и следуют от простого к сложному. Все процедуры по локализации и русификации проводятся в каталогах /etc/rc.d/ и /etc/profile.d/. Также нужно сразу оговориться, что должен быть установлен пакет из раздела "l" glibc-i18n-2.3.2-noarch-6.tgz
Первый способ.
Этот способ подойдет тем, кто не хочет что-либо менять в конфигах или опасается что-либо испортить.
Итак, смысл состоит в том, что вы скидываете вот этот скрипт russian.sh в каталог /etc/profile.d/ и он при каждой загрузке автоматом выставит шрифт Cyr_a8x16 раскладку клавиатуры ru4 с переключением по Caps Lock и карту соответствия koi2alt. Также изменятся переменные, отвечающие за локализацию. Вот листинг:
#!/bin/sh
if [ notset.$DISPLAY != notset. ]; then
echo "Welcome to xterm"
else
if [ $TERM = xterm ]; then
echo "Welcome to xterm"
else
loadkeys /usr/share/kbd/keymaps/i386/qwerty/ru4.map.gz
setfont /usr/share/kbd/consolefonts/Cyr_a8x16.psfu.gz
mapscrn /usr/share/kbd/consoletrans/koi2alt
echo -ne "\033(K"
echo "Use the CapsLock key to swith ..."
fi
fi
export LANG=ru_RU.KOI8-R
export LC_ALL=ru_RU.KOI8-R
export NLSPATH=/usr/share/locale/ru_RU
export LESSCHARSET=koi8-r
export LC_CTYPE=ru_RU.KOI8-R
export LC_NUMERIC=POSIX
export COLORTERM=
export TERTMINFO=/usr/lib/terminfo
# For Russian GostScript
export GS_OPTIONS=-dNOPLATFONTS
export GS_PATH=/usr/share/gostscript/fonts
В результате получаем русский ввод и русскоязычное меню и даже русский help и man в некоторых программах. О том как расширить этот список в следующий раз. Как добавить проверку орфографии уже написал.
Второй способ.
Для профи, а также для тех, кто хочет понять как это происходит и кто не любит использовать скрипты, написанные незнамо кем, незнамо как, левой ногой на коленке, стоя на четвереньках в 8:30 в вагоне метро, направляющегося в сторону центра :).
Первое, что я попрошу вас сделать - не полениться и набрать в консоли (не в Иксах!)
$ setfont /usr/share/kbd/consolefonts/Cyr_a8x16.psfu.gz
$ mapscrn /usr/share/kbd/consoletrans/koi2alt
$ echo -ne "\033(K"
Проделайте эту операцию, т.к. она необходима для дальнейших действий. Только что вы сделали невероятное! Теперь, нажав на CapsLock, можно набирать русский текст!
Теперь можно приступать к изучению:
Локаль лежит в директории | /usr/share/i18n/locales/ |
Таблицы символов рядышком | /usr/share/i18n/charmap/ |
Раскладки клавиатуры | /usr/share/kbd/keymaps/i386/qwerty/ |
Консольные шрифты | /usr/share/kbd/consolefonts/ |
Таблицы перекодировки | /usr/share/kbd/consoletrans/ |
Для начала хватит. Попробуем разобраться что это и где применяется.
Прогулявшись по этим каталогам, мы видим кучу разных файлов, большинство из которых нам никогда не понадобится. Предлагаю удалить все лишнее, т.к. всегда есть возможность заново установить пакет. Делать это нужно осознанно и осторожно. Если вы точно не знаете что делаете, лучше не трогать.
Локаль. В МС открываем любой файл в директории локалей, например, ru_RU и видим, что локаль - это ничто иное как описание форматов даты, времени, дней недели, денежных единиц, адресов, телефонов и проч. Все это записано в двухбайтовом формате unicode, на что указывает бука U перед шестнадцатиричными кодами.
Таблицы символов. Опять берем и смотрим любимый файл KOI8-R.gz. Что видим? Правильно - соответствие символа в формате unicode и кода нажатия клавиши. Из курса информатики все должны тут же вспомнить, что коду 13 (0Dh) соответствует нажатие Enter.
Раскладки клавиатуры. Вот и добрались до интересного. Вы уже наверное догадались, что мы сейчас сделаем. Точно, посмотрим что внутри файлов ru*.map.gz. Для этого в МС нажимаем F3 (шутка). Надеюсь теперь никто не будет задавать вопросов типа "А какая раскладка соответствует переключению Alt+Shift?". Поясню только, что altgr означает альтернативную группу, в нашем случае русскую. Внимательно изучив файл ru4.map.gz, я обнаружил недокументированную, но очень полезную фичу. Если нажать и удерживать правый Alt, то можно писать в альтернативной раскладке не фиксируя ее, что очень удобно при наборе смешанного текста.
Давайте попробуем сделать свою комбинацию переключения между раскладками. Думаю не каждому по душе доступные. Для начала выберем пациента из имеющихся раскладок. Пусть это будет многострадальный ru4.map.gz, скопируем и переименуем его.
$ cp /usr/share/kbd/keymaps/i386/qwerty/ru4.map.gz /tmp/ $ gzip -d ru4.map.gz $ cp ru4.map ru5.mapДалее открываем наш файл в любимом редакторе. Структура файла довольно проста. Слева код клавиши - справа действие. Код клавиши можно дополнять фиксацией спецклавиш Crtl, Alt, Shift. Как я уже писал, altgr определяет действие в альтернативной раскладке. Нас интересуют коды:
58 | CapsLock |
42 | левый Shift |
54 | правый Shift |
56 | левый Alt |
100 | правый Alt |
29 | левый Ctrl |
97 | правый Ctrl |
control keycode 42 = AltGr_Lock
altgr control keycode 42 = AltGr_Lock
shift keycode 58 = Caps_Lock
altgr shift keycode 58 = Caps_Lock
Все, заметаем следы и кладем на место.
$ gzip ru5.map $ su Password: # mv ru5.map.gz /usr/share/kbd/keymaps/i386/qwerty/ # exit exit $ rm ru4.mapВот что у меня получилось ru5.map. Попробуйте и вы.
Консольные шрифты. Просто шрифты. Особо тут сказать нечего, кроме разве что одного. Обычно выбирают между следующими шрифтами:
koi8r-8x16.gz
koi8u-8x16.gz
Cyr_a8x16.psfu.gz
Я расположил их в порядке от худшего к лучшему. Как ни странно, но применение первого шрифта - худший выбор. Такие ходовые программы как MC выглядят с ним ужасно, а начертание резко контрастирует с привычными латинскими буквами. Второй уже не имеет таких проблем и даже умеет отображать многострадальную русскую "ё". Оба этих шрифта не требуют загрузки таблицы перекодировки, т.е. команду mapscrn можно не выполнять. И третий, по-моему лучший шрифт. Буква "а" в названии шрифта не случайна. Она обозначает, что шрифт имеет альтернативную группу и что для его использования необходима таблица перекодировки. Т.е. шрифт содержит в себе как бы 2 шрифта на каждую таблицу - латинских и русских символов. Если вы не загрузите таблицу перекодировки, то вместо русского получите псевдографику. Этот шрифт позволяет добиться неискаженного вида всех консольных программ, т.к. содержит в себе стандартную псевдографику. Единственный недостаток - отсутствие буквы "ё".
Таблица перекодировки. Довольно интересная и непонятная штука. Смысл ее станет понятным, если вы откроете любой файлик и посмотрите что внутри. Эта таблица показывает, например, в koi2alt, какому коду символа кодировки cp866 соответствует код этого же символа в кодировке koi8-r. На основе таких вот таблиц работают все программы перекодировщики как под винь, так и под линь. На многих форумах я вижу дебаты по поводу локализации с использованием unicode. Предлагаю всем внимательно взглянуть на файлы этого каталога, авось кому-то и поможет. Мне кажется, что пока рвать когти и переходить на UTF-8 немного рановато, еще не все программы готовы к такому переходу. Однако, сподвижки в эту сторону уже очевидны.
Пожалуй, мы подробно рассмотрели что где лежит, и что из себя представляет. Владея этой информацией вы сможете теперь локализовать любой дистрибутив, главное найти где это все в нем лежит и прописать найденные пути вместо этих. А мы вернемся к нашим баранам.
Русификация.
Базовыми скриптами для этих целей считаются:
/etc/rc.d/rc.font
/etc/rc.d/rc.keymap
Теперь у вас достаточный багаж знаний, чтобы самим подправить эти скрипты (не забудьте про mapscrn). Приведу вам пример своих.
/etc/rc.d/rc.font
setfont -v Cyr_a8x16.psfu.gz
mapscrn /usr/share/kbd/consoletrans/koi2alt
for i in 1 2 3 4 5 6; do
echo -ne "\033(K" >/dev/tty$i
done
/etc/rc.d/rc.keymap
# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
if [ -x /usr/bin/loadkeys ]; then
/usr/bin/loadkeys ru4.map
fi
Локализация.
Общая процедура довольно проста. Необходимо подправить файлы /etc/profile.d/lang.sh и lang.csh, оставив в них кроме заголовка лишь строчку:
Следующая строчка заменяет разделитель дробной части с русской запятой на стандартную точку:
LC_CTYPE
LC_COLLATE
LC_TIME
LC_MONETARY
LC_PAPER
LC_NAME
LC_ADDRESS
LC_TELEPHONE
Вообще все "компьютерщики" довольно веселый народ. А уж работая в свободных системах иногда можно от смеха живот надорвать. Мне доводилось находить очень ржачные вещи не только на русском, но и на английском языке. Убедиться в этом можно заглянув в файл /usr/share/locale/ru/man. Обычно самые смешные корки прячут куда-нибудь подальше, например, в бинарный файл.
Хотел еще что-то написать, но забыл что, если у кого будут идеи на счет того, чего тут не хватает, любые дополнения или может замечания - черкните в форум. А вообще, надо признать, статья получилась довольно объемной. Не за горами ее продолжение, но уже для Иксов.