В понятие локализации входит обеспечение вывода и ввода символов национальных языков (в случае использования набора UTF-8символов, отличных от чистого латинского) и определение переменных окружения, зависящих от страны, языка и набора символов (то есть собственно установка 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, призванной унифицировать подход к интернационализации, будет говориться в следующих версиях этого документа, когда использование её станет общепринятым.
Итак, базовая локализация консоли включает обеспечение вывода национальных символов на экран и ввода их с клавиатуры. Однако в случае кириллической локализации вследствие особенностей наборов символов и аппаратных особенностей PC для ввода и для вывода используются, как правило, разные кодировки. И это требует еще двух дополнительных шагов - установки карты соответствия между наборами символов ввода и вывода, и активизация её на каждой из виртуальных консолей.
Экранный шрифт, загружаемый по умолчанию при старте системы, определяется в файле /etc/rc.conf строкой
CONSOLEFONT="default8x16"
Для вывода русских букв "умолчальное" значение следует заменить на имя какого-либо файла шрифта с поддержкой кириллицы, например, cp866-8x16 для представления кодировки DOS или koi8r-8x16 - для кодировки KOI8-R. Например, для кодировки cp866
CONSOLEFONT="cp866-8x16"
Или для кодировки KOI8-R
CONSOLEFONT="koi8r-8x16"
Примечание: Файлы шрифтов (и не только кириллических) находятся в каталоге /usr/share/consolefonts/ и имеют вид *.gz, *.psf.gz или *.psfu.gz. При стандартном их размещении и форме ни полного пути, ни "расширения" имени указывать не обязательно.
Важно: В кириллическом Linux'е для экранного вывода, как правило, используется кодировка cp866 (вне зависимости от того, какой набор символов принят для клавиатурного ввода). О причинах этого говорить можно было бы долго - достаточно указать, что в любом ином случае программы, использующие псевдографику (например, Midnight Commander) приобретут весьма уродливый вид.
Экранные кириллические шрифты, поставляемые с Gentoo Linux, далеки от эстетического совершенства (справедливости ради заметим, что это относится почти ко всем Unix-клонам). И потому в качестве источника дополнительных шрифтов можно рекомендовать пакет console-tools-cyrillic Виктора Вагнера. В результате приведенная выше в качестве примера строка может принять вид вроде
KEYMAP="us"
По аналогии с предыдущим случаем легко догадаться, что значение us следует заменить на имя файла какой-либо кириллической (на этот раз уже в кодировке KOI8-R) раскладки. Место этих файлов (имеющих вид *.map.gz) - в каталоге /usr/share/keymaps/i386/qwerty, где для русской кодировки KOI8-R имеется несколько раскладок, например, ru1-ru4. Различия между ними - в соответствии различной маркировке клавиш (DOS или Windows - не путать с одноименными кодировками) и положении переключателя латиница/кириллица. Рискну взять на себя смелость рекомендовать раскладку ru4 - для Windows-маркированных клавиатур, в которой переключателем служит CapsLock (при этом фиксация верхнего регистра обеспечивается одновременным нажатием клавиш Shift+CapsLock). То есть строка примет вид:
KEYMAP="ru4"
Примечание: Как и в случае с экранными шрифтами, при стандартном расположении файлов раскладок указывать полный путь к ним и "расширение" имени нет необходимости.
Внимание: При желании вы можете выбрать и раскладку клавиатуры для кодировки cp1251 (например, ru_win). Однако в этом случае придётся отыскать или самостоятельно изготовить таблицу перекодировки (mapscreen) cp1251->cp866.
Примечание: Нет ничего более уродливого, чем программы, использующие псевдографику, при экранном представлении в кодировке cp1251.
Теперь остаётся только обеспечить соответствие между кодировками ввода (KOI8-R) и вывода (cp866), то есть загрузить соответствующую таблицу перекодировки (mapscreen). Для этого снова обращаемся к файлу /etc/rc.conf. Строка в нём, отвечающая за эту операцию, имеет по умолчанию такой вид:
#CONSOLETRANSLATION="cp437_to_iso01"
Необходимо, сняв с неё символ комментария (#), заменить "умолчальное" значение на необходимое нам, и подсмотреть его можно в каталоге /usr/share/consoletrans - это koi2alt. Установка таблицы соответствия cp866->KOI8-R
CONSOLETRANSLATION="koi2alt"
Внимание: Пожалуйста, не забудьте снять символ комментария со строки CONSOLETRANSLATION - кто только на моей памяти не наступал на эти грабли :-)
Примечание: Если вы по каким-либо причинам остановились на представлении экранных шрифтов в кодировке KOI8-R, загрузка и активизация карты соответствия, разумеется, не нужна.
Результатом выполненной операции будет то, что после перезагрузки машины мы получили бы нормальный вывод кириллического текста (записанного в кодировке KOI8-R), но только - на первой (т.н. системной) консоли. Чтобы иметь то же самое на остальных виртуальных консолях (а в Gentoo Linux их по умолчанию еще 5), та же карта соответствия должна быть активизирована на каждой из них с помощью направления Escape-последовательности \033(K (символ \ в данном случае показывает, что следующие за ним символы рассматриваются как специальные). Достигнуть этого можно разными способами. Например, создать в каталоге /etc/init.d/ файл consoletrans и в любом текстовом редакторе внести в него следующие строки:
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):
# rc-update add consoletrans default
Примечание: Механизм автоматического обновления стартовых скриптов подробно описан в соответствующем разделе документации (доступен и русский перевод).
Вот теперь после перезагрузки машины мы получим полноценно локализованную консоль.
Примечание: Все действия, описанные в данной главе, могут быть выполнены как на заключительных шагах (final steps) установки Gentoo Linux, так и в произвольный момент времени в дальнейшем.
Установить локально-зависимые переменные можно различными способами, в том числе и просто в профильных файлах отдельных пользователей. Однако в Gentoo Linux предусмотрен автоматический механизм установки любых переменных окружения в качестве общесистемных - env-update, подробно описанный в соответствующих разделах документации, в том числе и русском переводе её.
Для использования этого механизма следует в файл /etc/env.d/00basic добавить строку
LANG="ru_RU.KOI8-R"
которая определяет не только язык locale, но и все остальные локально-зависимые переменные. Далее выполняем команду env-update, дополняющую глобальный профильный файл /etc/profile, после чего остаётся только перечитать последний командой source /etc/profile. Теперь в ответ на команду locale последует вывод
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/00basic, после определения LANG, добавить строку вида:
LC_NUMERIC="POSIX"
Аналогичным образом могут поступить пользователи, испытывающие стойкую неприязнь к русскоязычным меню и сообщениям программ:
LC_MESSAGES="POSIX"
Если системные часы машины в BIOS Setup установлены на время по Гринвичу (UTC), для настройки часового пояса достаточно создать символическую ссылку /etc/localtime на файл, описывающий данный часовой пояс. Например, для установки московского времени это будет выглядеть так:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Примечание: Точное обозначение часовых поясов для России можно посмотреть в каталогах /usr/share/zoneinfo/Europe (имеет силу также для Украины и Белоруссии) и /usr/share/zoneinfo/Asia (для азиатской части России). Например, пользователям из Петропавловска-Камчатского указанная команда потребуется в следующем виде:
ln -sf /usr/share/zoneinfo/Asia/Kamchatka /etc/localtime
Если системные часы данной машины установлены по местному времени, кроме создания указанной ссылки потребуется внести еще и изменения в файл /etc/rc.conf, а именно: строку CLOCK="UTC" заменить на CLOCK="local".
Локализация оконной системы X (конкретно - её свободной реализации XFree86) может быть выполнена двумя путями: с помощью специальных утилит конфигурирования (обычно - xf86config, используемой для настройки графического режима вообще) или прямым редактированием конфигурационного файла /etc/X11/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 по умолчанию такового не имеет вообще).
В результате следующим шагом будет предложение выбрать клавишу или клавишную комбинацию для такого переключателя. Возможные варианты включают:
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 необходимо отключить режим переноса строк в используемом редакторе.
Пути к файлам шрифтов описываются следующим образом:
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/. И потому первая строка указанной секции должна принять вид
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/"
Важно: Строка с кириллическими шрифтами должна быть первой в списке путей, дабы именно они обнаруживались бы любыми программами в первую очередь при совпадении их имен или псевдонимов с таковыми шрифтов, не имеющих символов кириллицы.
Примечание: Шрифты производства Cronyx содержат ограниченное число гарнитур. Кроме того, они являются растровыми и вообще далеки от эстетического совершенства. Поэтому их по возможности лучше дополнить (или заменить) шрифтами от независимых производителей. В качестве таковых можно рекомендовать коллекцию масштабируемых (TTF и ATM) лицензионно чистых шрифтов Валентина Филиппова, входящих в российскую сборку OpenOffice и в последние версии дистрибутивов Altlinux.
К кириллизации XFree86 посредством программы xf86config целесообразно прибегать только при начальной настройке этой системы. Если же в ходе использования Gentoo Linux возникнет необходимость дополнительного конфигурирования (например, изменения положения переключателя раскладок), проще обратиться к прямому редактированию файла /etc/X11/XF86Config.
За настройку клавиатуры в нём отвечает Section "InputDevice". В ней, после указания идентификатора клавиатуры (а оконная система X в состоянии поддерживать, даже на локальной машине, более одной физической клавиатуры) и её драйвера, следует описание т.н. правил (rules), определяющих раскладку клавиатуры. Оно имеет вид вроде следующего:
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.
Комментарии
Java GUI + KOI8-R
Если после всех вышеописанных теледвижений у вас в Java приложениях вместо кириллических символов лезет арабская вязь, создайте пустой файл /usr/X11R6/lib/X11/locale/koi8-r/Compose
У меня так работает:
_________________
Blame!
#кодировка
При установки Gentoo 2005.0 из ebuild'ов ставится xorg-6.8.2, который
русифицируется стандартным набором в файле
/etc/X11/xorg.confOption "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "ru" Option "XkbVariant" "winkeys" Option "XkbOptions" "grp:caps_toggle,grp_led:caps"Однако в моем случае этого оказалось недостаточно. Пришлось внести некоторые дополнения, а именно, в файле
/usr/X11R6/lib/X11/xkb/rules/xorgраскоментировать строчку, начинающуюся с
или у меня Лиса глючит... или над статьей жестоко прикололись...
Аналогично.... под лисой, оперой и эксплохером.
А у меня вроде все нормально, как именно прикололись?
Сейчас все нормально, а до этого тэги были прямо в тексте
Внести изменения
После выполнения emerge system при компиляции gentoo после всех вышеперечисленных манипуляций в файл /etc/make.conf добавить строчку:
LINGUAS=ru
После этого все устанавливаемые пакеты будут по возможности ставить русский интерфейс
к примеру
kde-i18n
k3b
xmms
и т.д.
сам енто случайно обнаружил, когда пытался поставить kde-i18n
без дополнительного флага он ни в какую не хотел ставиться через портежи.
console-tools-cyrillic Виктора Вагнера
/etc/init.d/consolefont restart&&/etc/init.d/keymaps restart
CapsLock
Есть такая проблемка: при установке ru4 для русской раскладки не работает CapsLock, т.е. Shift-CapsLock. Вернее, лампочка загорается, но буквы всё равно маленькие. Подскажите, плз, ктон-ть, как от этого избавиться?