Русификация - один из самых больных вопросов для тех, кто первый раз
устанавливает Slackware. Эта процедура отличается от таковых в Red Hat
и его клонах. В сети можно найти много способов того, как это сделать и
порой сложно дать ответ на вопрос - какой же из них правильный, какой
лучше. Сейчас мы рассмотрим несколько способов как это сделать. Они
отличаются по степени сложности и следуют от простого к сложному. Все
процедуры по локализации и русификации проводятся в каталогах
/etc/rc.d/ и /etc/profile.d/.
Первое, что я попрошу вас сделать - не полениться и набрать в консоли:
Проделайте
эту операцию, т.к. она необходима для дальнейших действий. Только что
вы сделали невероятное! Теперь, нажав на 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, скопируем и переименуем его.
Далее
открываем наш файл в любимом редакторе. Структура файла довольно
проста. Слева код клавиши - справа действие. Код клавиши можно
дополнять фиксацией спецклавиш Crtl, Alt, Shift. Как я уже писал, altgr
определяет действие в альтернативной раскладке. Нас интересуют коды: 58
CapsLock 42 левый Shift 54 правый Shift 56 левый Alt 100 правый Alt 29 левый Ctrl 97 правый Ctrl
Пробуем свои силы. Например, я хочу, шутки ради, переключаться простым нажатием левого шифта. Для этого я ищу строчку:
keycode 42 = Shift и меняю ее на keycode 42 = AltGr_Lock Сохраняю, выхожу и набираю: loadkeys /tmp/ru5.map
Теперь
проверяем - работает? Если нет, перечитываем с начала, если да, идем
дальше. Надеюсь применить фантазию вы сможете. Не забудем вернуть все
как было и продублируем эту строчку 2 раза, добавив впереди для первой
строчки или alt или control, а для второй еще и altgr чтобы сделать
реверс. Получаем соответственно переключение по Alt+Shift или
Ctrl+Shift. keycode 42 = Shift control keycode 42 = AltGr_Lock altgr control keycode 42 = AltGr_Lock Не забудем вернуть CapsLock на законное место. Ищем строчки: keycode 58 =AltGr_Lock shift keycode 58 = Caps_Lock altgr shift keycode 58 = Caps_Lock Теперь уже не сложно догадаться, что вместо них должна остаться одна строчка: keycode 58 =Caps_Lock
Консольные шрифты. Просто шрифты. Особо тут сказать нечего, кроме разве что одного. Обычно выбирают между следующими шрифтами: 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 #!/bin/sh 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 Если
честно, то я не разбирался с "магической" комбинацией "\033(K", но
очевидно, что это некий переключатель, ибо без него работать ничего не
будет. А цикл нужен для того, чтобы русский ввод был доступен на всех
6-ти (по-умолчанию) консолях.
/etc/rc.d/rc.keymap #!/bin/sh # 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, оставив в них кроме заголовка лишь
строчку: export LANG=ru_RU.KOI8-R и setenv LANG ru_RU.KOI8-R соответственно, хотя второй, по-моему не применяется, т.к. по дефолту sh. Следующая строчка заменяет разделитель дробной части с русской запятой на стандартную точку: export LC_NUMERIC=POSIX Для того, чтобы все сообщения, меню и прочее все же осталось на английском добавьте строчку: export LC_MESSAGES=POSIX Это были самые интересные переменные, а вот остальные. Можно и с ними немного поиграть. LC_IDENTIFICATION LC_CTYPE LC_COLLATE LC_TIME LC_MONETARY LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE После
проделанной работы, можете насладиться русскоязычными меню, HELPом,
MANом и русскими вставками при выводе многих других программ.