Вперед Назад Содержание

9. Кириллизация программ

В этом разделе описывается кириллизация программ. К сожалению пока не все программы соответствуют стандарту локализации и интернационализации.

9.1 Кириллизация shell

bash

Для того, чтобы заставить bash понять 8-ми битные символы, необходимо установить три переменные. Лучше всего это сделать из файла ~/.inputrc.

Должны быть сделаны следующие установки:

set meta-flag on
set convert-meta off
set output-meta on

Следует отметить, что файл ~/.inputrc не имеет отношения непосредственно к bash -- это конфигурационный файл библиотеки GNU readline (раздел GNU readline), используемой bash-ем. Поэтому совет о .inputrc кириллизирует не только bash, но и многие другие программы (все, использующие GNU readline).

csh/tcsh

Поместите в .cshrc следующее:

setenv LC_CTYPE iso_8859_5
stty pass8

Если у вас нет POSIX-совместимого stty (только не в Linux), замените последнюю строчку следующей:

stty -istrip cs8

zsh

Сделайте то же самое, что делается для csh ( csh). Файл инициализации в этом случае -- .zshrc или /etc/zshrc.

ksh

Что касается public domain реализации ksh -- pdksh версии 5.1.3 и выше, то вы можете разрешить 8-ми разрядный ввод только для vi в режиме ввода. Для этого используйте:

set -o vi

9.2 Поддержка кириллицы в perl

Поддержка locale в perl

Для того чтобы можно было выполнять регекспы на кириллических символах с ключом "i" (а так же использовать стандартные функции преобразование текста -- такие как uc, lc, sort и т.д.) в системах с корректной локализацией (FreeBSD, Linux на glibc 2.1) это делается так:

    use locale;
    use POSIX qw (locale_h);
    setlocale(LC_CTYPE, 'ru_RU.KOI8-R');

(можно ещё выставить переменную окружения export LANG=ru_RU.KOI8-R тогда будет достаточно вызова use locale; в Perl-скрипте)

Символьная перекодировка средствами perl

Ниже идут примеры

Остальное получается по аналогии.

Примером, перекодировщика на perl с автоматическим определением исходной кодировки может служить программка 2k.

9.3 Символьная перекодировка

В Internet можно найти множество программ, перекодирующих кириллические тексты. Каждая из них имеет свою изюминку и отличается степенью поддержки кириллицы.

Утилиты перекодировки должны быть стандартными. В нашем, частном, случае такой "стандартной"  утилитой является iconv (входит в поставку glibc) или GNU recode.

Например, чтобы перекодировать из cp1251 в koi8-r, следует сказать:

$ iconv -fCP1251 -tKOI8-R -o<outfile> infile

или

$ recode CP1251..KOI8-R  winfile.txt

Внимание!: Для перекодировки в/из KOI8-U в GNU recode надо использовать koi8-ru, под koi8-u программа понимает что-то другое.

Если же, кроме, собственно, перекодировки требуется автоматически определить исходную кодовую страницу, то можно воспользоваться утилитой 2k.

В конце концов сгодится обычный lynx (links) (cp1251 в koi8-r):

$ lynx -assume_local_charset cp1251  file.txt

9.4 less

Если локаль (см. раздел Настройка локали) не настроена (а она обязана быть настроенной), то вывод кириллицы через less можно получить, установив переменную окружения LESSCHARSET:

export LESSCHARSET=koi8-r

Это решение годится для всех 8-битовых кириллических кодировок.

Старые версии less не поддерживали эту установку, поэтому вместо koi8-r в этом случае следует подставить latin1. При этом однако становятся недоступными символы, чьи коды находятся в диапазоне 128-159. К счастью, коды букв обычно вне этого диапазона.

При настроенной локали (см. раздел Настройка локали) указывать LESSCHARSET НЕ НАДО. Более того, в ~/.lesskey надо добавить

#env
LESSCHARSET=

чтобы программа игнорировала установку LESSCHARSET= другими "глупыми"  программами (к примеру, man). После этого надо запустить lesskey для получения бинарного файла ~/.less. В противном случае он не будет вызывать setlocale(LC_CTYPE,"") и, как следствие, не будет icase search для русских букв.

9.5 mc (The Midnight Commander)

Чтобы увидеть кириллицу из mc, выберите опцию full 8 bits в Options/Display меню.

Если и в этом случае при просмотре файла из mc вы не увидите кириллических символов, то загляните в раздел nroff.

В случае возникновения проблем при просмотре man статей -- сверьтесь с разделом man.

Если у вас проблемы в виде уродливых оконных рамок, то проконсультируйтесь в разделе консоль Linux.

off-topic: если вы захотите, чтобы mc в окне Xterm был цветным, а не черно-белым, то установите переменную COLORTERM:

COLORTERM= ; export COLORTERM

9.6 man

Сейчас довольно бурно развивается деятельность по переводу всего и вся на русский язык (ну, не так чтобы уж очень, но кое-кто кое-что делает). Все больше и больше появляется статей man, переведённых на русский язык, но вот отобразить их не всегда удаётся.

Если у меня есть файл с русскими буквами, то вызов, скажем man ar приводит к ерунде на экране.

Для исправления этого безобразия следует поправить соответствующие строки в /usr/lib/man.config, если это файл есть, или правильно настроить less (см. раздел less).

9.7 ls

Если локаль установлена неправильно (см. раздел Настройка локали), то ls не будет печатать кириллические символы. В этом случае, возможно, поможет одна из следующих команд: ls -N, dir -N или ls --show-control-chars.

9.8 rlogin

Удостоверьтесь, что shell на месте адресата установлена правильно. Если ваш rlogin не работает как надо по умолчанию, то используйте 'rlogin -8'.

Пропишите в стартовом скрипте (если вы используете bash, то это .bashrc)

  alias rlogin='rlogin -8'

9.9 telnet

Если возникают проблемы с вводом русских символов, надо создать файл ~/.telnetrc со следующей строкой:

DEFAULT set outbinary

Вы можете встретить проблемы при работе в кодировке cp1251 -- не передаётся маленькая русская буква "я"  0xff. У протокола TELNET 0xff -- это первый символ управляющей последовательности. Дабы передать собственно "я", нужно его удваивать: 0xff, 0xff. При использовании KOI8-R такая проблема отсутствует.

off-topic: вместо telnet лучше использовать ssh (Secure Shell) -- максимальная безопасность при минимуме затрат.

9.10 IrcII

Добавить в файл конфигурации ~/.ircrc следующие строчки:

/set translation russian
/set eight_bit_characters on

tgif

Возможно наиболее правильный способ кириллизации подписей в рисунках, является использование пакета psfrag. Если вы по какой-то причине не используете этот пакет, то можно воспользоваться описанным ниже рецептом.

В ~/.Xdefaults прописываются следующие строчки:


   Tgif.AdditionalFonts: \n\
   Times koi8-medium-r-normal \n\
   koi8-r \n\
   TimesKOI8 \n\
   \n\
   Times koi8-bold-r-normal \n\
   koi8-r \n\
   TimesKOI8-Bold \n\
   \n\
   Times koi8-medium-i-normal \n\
   koi8-r \n\
   TimesKOI8-Italic \n\
   \n\
   Times koi8-bold-i-normal \n\
   koi8-r \n\
   TimesKOI8-BoldItalic \n\
   \n\
   аналогично-для-Arial \n\
   аналогично-для-Courier

У меня и там, и там используются одни и те же ps-фонты, что обеспечивает полный визивиг.

P.S. tgif 4.1.22 -- Почему-то понимание русского появляется не после -D_LOCALE_SUPPORT, а после -D_ENABLE_NLS, который, по идее, включает использование локализованных .po файлов. Ну да ладно -- главное что работает.

xfig

Для xfig существует несколько "гнусных хаков"  которые позволяют его кириллизовать, их, в принципе, можно найти. Hаиболее простой способ кириллизации подписей в рисунках xfig, является использование пакета psfrag.


Вперед Назад Содержание