The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Локализация Linux (UTF-8 и KOI8-R) (linux rus koi8r unicode locale)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: linux, rus, koi8r, unicode, locale,  (найти похожие документы)
From: Артемий Евгеньевич Капитула <dalth@surw.ru> Date: Mon, 27 Mar 2004 14:31:37 +0000 (UTC) Subject: Локализация Linux (UTF-8 и KOI8-R) Оригинал: http://www.surw.ru/~dalth/russian.html Локализация Linux Большинство дистрибутивов Linux делаются не в России, и, хотя существенных проблем с локализацией Linux сейчас уже нет, тем не менее в новых дистрибутивах у новых пользователей часто возникают проблемы с Unicode. В принципе, существует две методики "русификации" Linux: идеологически правильное (и почти работающее) использование UTF-8, и проверенное временем использование однобайтовых кодировок - например, KOI8-R (или CP1251). Необходимые действия будут приводиться для дистрибутивов RedHat Linux 8/9 и Fedora Core 1. * Установка шрифтов * Поддержка ввода кириллицы в X11 * Русификация консоли, выбор локали * Локаль UTF-8 + RedHat Linux 9, локаль UTF-8 + Fedora Core 1, локаль UTF-8 * Локаль KOI8-R + RedHat Linux 8/9, локаль KOI8-R + Fedora Core 1, локаль KOI8-R + Микро-патч для справочного руководства * "Русские" имена файлов * Известные баги * Заключение Установка шрифтов Прежде всего, надо установить шрифты TrueType, входящие в поставку Windows. Проще всего сделать это один раз для всех пользователей системы. Для этого достаточно сделать следующие шаги: 1. Создать каталог /usr/X11R6/lib/X11/fonts/winttf 2. Скопировать в него все файлы с расширение TTF из каталога Fonts в системном каталоге Windows 3. Войти в созданый каталог и запустить ttmkfdir 4. Исправить файл /etc/X11/fs/config, добавив в него в секцию catalogue созданый каталог (для того, чтобы эти шрифты стали доступны тем приложениям, которые не используют XFT) 5. Исправить файл /etc/fonts/fonts.conf, также добавив туда ссылку на каталог с TTF-шрифтами 6. Перезапустить сервер шрифтов: /etc/init.d/xfs restart Следующим шагом необходимо убедить приложения, написанные на GTK-1 использовать наши шрифты, для чего нужно исправить файл /etc/gtk/gtkrc.ru (необходимо делать с правами пользователя root), и придать ему примерно следующий вид: style "gtk-default-ru" { fontset = "-microsoft-verdana-medium-r-normal--11-110-75-75-p-0-koi8-r" } class "GtkWidget" style "gtk-default-ru" Аналогично исправляем /etc/gtk/gtkrc.utf8, только вместо koi8-r в конце строки с именем шрифта запишем iso10646-1. iso10646-1 и koi8-r - это наименования кодовых страниц шрифтов, используемых приложениями GTK при запуске с соответствующим образом настроенной локалью: style "gtk-default-ru" { fontset = "-microsoft-verdana-medium-r-normal--11-110-75-75-p-0-iso10646-1" } class "GtkWidget" style "gtk-default-ru" Все, с установкой и активизацией шрифтов вроде бы в первом приближении закончено. Конечно, нет предела совершенству - но мы же стараемся добиться не совершенства, а просто корректной работы при минимальных затратах?! На всякий случай, для верности порекомендую сходить FTP-сервер компании AltLinux и скачать с их download-сайта ftp://ftp.altlinux.ru файлы 75 и 100-dpi шрифтов из репозитория Sysiphus. Эти файлы содержат исправленные шрифты для XFree86 с нормальными кириллическими глифами в UNICODE-позициях. Поддержка ввода кириллицы в X11 Ну, это легко и просто - благо используемый в Linux чаще всего X-сервер XFree86 написан достаточно гибко. Единственное, что нам будет нужно - слегка поправить некоторые параметры. Вооружаемся редактором текста и исправляем /etc/X11/XF86Config. Находим секцию, отвечающую за клавиатуру, и исправляем ее примерно следующим образом, курсивом выделены те фрагменты, которые наиболее важны: Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll" EndSection Все, с X11, GTK и прочим разобрались, теперь дело за малым - выберите наиболее подходящие для вас шрифты в панели управления используемой вами графической среды (или исправьте конфигурационный файл вашего Window Manager'а). Русификация консоли, выбор локали Прежде чем написать эту часть заметки, я долго терзался выбором: в какой же кодировке предпочтительней всего было бы работать, в KOI8-R или UTF-8. Предварительные выводы из этих размышлений примерно такие: если вы собираетесь использовать Midnight Commander, выбирайте KOI8-R, если нет - то можете выбрать как KOI8-R, так и UTF-8. Для RedHat Linux 8 однозначно рекомендую выбрать KOI8-R. Локаль UTF-8 UTF-8 является многобайтовой кодировкой с переменной длиной символа - например, символы латиницы кодируются одним байтом, символы кириллицы - уже двумя. Хотя у UTF-8 есть тот огромный плюс, что она может поддерживать все языки мира скопом, неотлаженность этого решения приводит ко множеству "глюков". RedHat Linux 9, кодировка UTF-8 Скачайте файл ru-utf.map.gz (взять сей файл можно по этой ссылке http://www.surw.ru/~dalth/themes/ru-utf.map.gz) и скопируйте его в каталог /lib/kbd/keymaps/i386/qwerty, и после этого начинаем настраивать конфигурацию (правим файлы настроек): Файл /etc/sysconfig/i18n LANG="ru_RU.UTF-8" SUPPORTED="en_US:en:ru_RU:ru:ru_RU.UTF-8" SYSFONT="latacyrheb-sun16" Файл /etc/sysconfig/keyboard KEYBAORDTYPE="pc" KEYTABLE="ru-utf" Все, теперь перезагружаемся - кириллические глифы будут вводиться, шрифт тоже будет русским. Минусы - медленно работают команды grep, awk, sed и некоторые другие, в Midnight Commander русский не вводится, просмотреть и отредактировать файл с русскими буквами не получится. Переключение в консоли на русские буквы по нажатию правого Control'а, в X11 - как написали в /etc/X11/XF86Config Fedora Core 1, кодировка UTF-8 Ничего не трогаем, все и так работает, только переключение русский-английский производится нажатием правых Ctrl+Shift. Если хочется использовать правый Control - правим /etc/sysconfig/keyboard как в предыдущем примере. Кодировка KOI8-R, все дистрибутивы Некоторые штатные (входящие в дистрибутив) пакеты разработчики дистрибутива слегка "подправили" для совместимости с UTF-8, поломав при этом все остальные кодировки, поэтому скачиваем пакеты less-358-24.i386.rpm, groff-1.17.2-12.i386.rpm, man-1.5j-6.i386.rpm, libstdc++-2.96-110.i386.rpm из поставки RedHat Linux 7.3 и устанавливаем их: # rpm -i --force libstdc++-2.96-110.i386.rpm # rpm -U --oldpackage less-358-24.i386.rpm # rpm -U --oldpackage groff-1.17.2-12.i386.rpm # rpm -U --oldpackage man-1.5j-6.i386.rpm Для RedHat Linux 8 необходимо также скачать пакет consoletools из состава RedHat Linux 7.3 и установить его, предварительно удалив пакеты kbd и kbdconfig, связано это с несколькими ошибками в скриптах инициализации: # rpm -e kbd kbdconfig # rpm -i consoletools* Затем во всех трех дистрибутивах правим файл /etc/sysconfig/i18n LANG="ru_RU.KOI8-R" SUPPORTED="en_US:en:ru_RU:ru:ru_RU.KOI8-R" SYSFONT="cyr-sun16" SYSFONTACM="koi8-u" Все, подготовка закончена, можно начинать редактирование файлов конфигурации (действия различаются в зависсимости от дистрибутива). RedHat Linux 8/9, кодировка KOI8-R Файл /etc/sysconfig/keyboard KEYBAORDTYPE="pc" KEYTABLE="ru" Fedora Core 1, кодировка KOI8-R Файл /etc/sysconfig/keyboard KEYBAORDTYPE="pc" KEYMAP="ru.map.utf8ru" Перезагружаемся - кириллические глифы будут вводиться, шрифт тоже будет русским. Плюсы - нормально работают команды grep, в Midnight Commander русский вводится, смотрятся и редактируются файлы с русскими буквами корректно. Переключение в консоли на русские буквы по нажатию правого Control'а, в X11 - как написали в /etc/X11/XF86Config Микро-патч для справочного руководства (только для локали KOI8-R) Прежде, чем приступать к этим действиям, добейтесь работоспособности русского языка в системе - иначе вы не сможете проверить правильность своих действий. В состав любого дистрибутива Linux входят так называемые "маны" (от английского man, manual). В большинстве своем эти руквовдства англоязычные, и чтобы облегчить работу не-англоязычным российским пользователям, добровольцы постепенно производят перевод руководств на русский язык (за что им огромное спасибо!). Проблема заключается в том, что в RedHat и Fedora переведенные руководства лежат в кодировке UTF-8 - а ведь мы "подтачиваем" наши системы в KOI8-R, верно? Значит, нам нужно перекодировать страницы руководства, и сделаем мы это так: 1. Еще раз бэкап :-) # cd /usr/share/man/ru # tar -cvf backup.tar * 2. Создаем скрипт перекодировки # echo '#!/bin/sh' >rcode # echo 'zcat "$1" | iconv -f utf8 -t koi8-r | gzip -c >"$1.new" ' >>rcode # echo 'mv "$1.new" "$1" ' >>rcode 3. Перекодируем # chmod ugo+rx rcode # find . | grep gz | gawk '{system("./rcode "$1);}' # rm -f rcode Проверяем результат командой man rpm - если вы не увидели ни русского, ни английского текста, а только кракозяблики - у вас проблемы. Восстановите предыдущие версии файлов командой tar -xvf backup.tar и тщательно прверьте, где вы ошиблись. "Русские" имена файлов Для начала немного теории: как мы уже знаем, все файловые системы перед началом их использования должны быть смонтированы. Следовательно нам необходимо задать опции монтирования файловой системы, "русские" имена файлов и каталогов на которой мы хотим видеть в приемлемой форме. Эти опции задаются в файле /etc/fstab и необходимы для файловых систем FAT (во всех разновидностях) и NTFS. В файловых системах семейства FAT имена фалов хранятся в однобайтовых кодировках, причем если на эта файловая система является порождением локализованной на русский язык версии Windows, то можно смело утверждать, что русские имена файлов хранятся в кодировке CP866 (кириллица MS-DOS). Соответственно, для записи о монтировании файловых систем FAT-семейства в файле /etc/fstab должны выглядеть примерно так: /dev/hda1 /mnt/dos_c vfat defaults,codepage=866,iocharset=koi8-r 0 0 /dev/hda5 /mnt/dos_d vfat defaults,codepage=866,iocharset=koi8-r 0 0 Опция codepage указывает ядру в какой кодировке хранятся имена файлов на диске, а опция iocharset говорит о том, в какой кодировке эти имена становятся видны пользовательским программам. В рассмотреный пример предназначен для локализации системы в KOI8-R. В случае работы с файловой системой NTFS, имена файлов на диске всегда хранятся в Unicode, и как следствие, нам становится не нужен параметр codepage: /dev/hda7 /mnt/dos_e ntfs defaults,iocharset=koi8-r 0 0 См. также справку: man fstab, man mount Известные баги 1. Для установленной локали KOI8-R в дситрибутиве Fedora Core 1 не работает установка картинок на бэкграунд в среде GNOME, если картинка называется русским именем или лежит в каталоге с русским именем. Заключение Ну вот вроде бы и все по этой теме... Конечно, можно было бы и продолжить, но этой информации должно быть достаточно для приведения локализации системы в более-менее работоспособное состояние, поскольку все остальные проблемы обычно вызываются некорректными настройками конкретных приложений. Полезные ссылки * http://mcmcc.bat.ru/ - сайт McMCC, который также дает рекомендации по адаптации сравнительно новых дистрибутивов RedHat к "реальной жизни в русских селеньях" (для RedHat Linux 8/9, Fedora Core 1)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, thomas_anderson (?), 06:08, 19/08/2004 [ответить]  
  • +/
    Неплохая статйека. На злобу, так сказать.
    Спасибо автору.
     
  • 1.2, Rostislav (??), 11:53, 23/09/2004 [ответить]  
  • +/
    Почему-то все предлагают локализовывать систему. В результате, когода системе совсем плохо, она выдаёт диагностику по русски на терминал без русских букв. И ещё куча приколов с этим.

    А ежели на компе три человека, на разных языках говорящих работают?

    Имхо, грамотный путь -- локализовывать окружение пользователя. После некоторого секса я это у себя сделал. Теперь у меня машинка с немцем -- по немецки, со мной -- по русски, а все сислоги на английском и в ASCII. Одной доки толковой по этому делу нет :((, пришлось по кусочам инфу выскребать.

    Как-нибудь написать, что-ли?..

     
     
  • 2.3, DS (??), 11:39, 25/10/2004 [^] [^^] [^^^] [ответить]  
  • +/
    Я 2 дня подряд читаю маны, так как толковых статей на эту тему не нашёл. Всё вроде того, что нужно тут написать то, там - то. А как оно работает? Что делать, если вдруг сломается? Хочется настроить по своему, а хрен, столько доков перелопачивать приходится.
     
  • 2.6, deenik27 (?), 11:22, 07/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    А кы организовал решение данной проблемы?
    Если не трудно опиши настрйки или на мыло кинь.
     

  • 1.4, arruah (??), 08:10, 27/10/2004 [ответить]  
  • +/
    кто подскажет как корректно slackware 10 на utf8 превести ?
     
  • 1.5, arruah (??), 13:49, 21/01/2005 [ответить]  
  • +/
    сам себе отвечаю ;)
    http://dims.karelia.ru/~rvprihod/utf-8_in_slackware.php
     
  • 1.7, mk2002 (?), 19:52, 09/01/2006 [ответить]  
  • +/
    Вот еще статья о переводе слаки на utf8

    http://www.rpunet.ru/mopslinux/forum/viewtopic.php?t=54

     
  • 1.8, Иван (??), 18:45, 24/03/2006 [ответить]  
  • +/
    Здравствуйте. Хотел Вас поблагодарить за классную подборку информации. Получил большое удовольствие от прочтения
     
  • 1.9, Константин (??), 00:11, 02/04/2009 [ответить]  
  • +/
    А кто нибудь подскажет как заставвить linux дружить с WEB  сервером  (сайтом) требующим передавть ему русскоязычные сообщения в кодировке  cp1251? Таковым является например ssp.rmh.ru
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру