В этом разделе описывается кириллизация программ. К сожалению пока не все программы соответствуют стандарту локализации и интернационализации.
Для того, чтобы заставить 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).
Поместите в .cshrc
следующее:
setenv LC_CTYPE iso_8859_5 stty pass8
Если у вас нет POSIX-совместимого stty (только не в Linux), замените последнюю строчку следующей:
stty -istrip cs8
Сделайте то же самое, что делается для csh
(
csh). Файл инициализации в этом случае -- .zshrc
или
/etc/zshrc
.
Что касается public domain реализации ksh
-- pdksh
версии 5.1.3 и
выше, то вы можете разрешить 8-ми разрядный ввод только для vi
в режиме
ввода. Для этого используйте:
set -o vi
Для того чтобы можно было выполнять регекспы на кириллических символах с ключом "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-скрипте)
Ниже идут примеры
sub wintokoi { my $pvdcoderwin=shift; $pvdcoderwin=~ tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2 \xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5 \xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8 \xF9\xFA\xFB\xFC\xFD\xFE\xFF/\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC \xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1 \xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5 \xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1/; return $pvdcoderwin; }
sub dostoiso { my $pvdcoderwin=shift; $pvdcoderwin=~ tr/\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D \x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0 \xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4 \xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7 \xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB \xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/; return $pvdcoderwin; }
Остальное получается по аналогии.
Примером, перекодировщика на perl с автоматическим определением исходной кодировки может служить программка 2k.
В 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
Если локаль (см. раздел
Настройка локали) не
настроена (а она обязана быть настроенной), то вывод кириллицы через 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
для русских букв.
Чтобы увидеть кириллицу из mc, выберите опцию full 8 bits
в
Options/Display
меню.
Если и в этом случае при просмотре файла из mc вы не увидите кириллических символов, то загляните в раздел nroff.
В случае возникновения проблем при просмотре man
статей -- сверьтесь с
разделом
man.
Если у вас проблемы в виде уродливых оконных рамок, то проконсультируйтесь в разделе консоль Linux.
off-topic: если вы захотите, чтобы mc
в окне Xterm
был
цветным, а не черно-белым, то установите переменную COLORTERM
:
COLORTERM= ; export COLORTERM
Сейчас довольно бурно развивается деятельность по переводу всего и вся на русский язык (ну, не так чтобы уж очень, но кое-кто кое-что делает). Все больше и больше появляется статей man, переведённых на русский язык, но вот отобразить их не всегда удаётся.
Если у меня есть файл с русскими буквами, то вызов, скажем man ar
приводит к ерунде на экране.
Для исправления этого безобразия следует поправить соответствующие строки в
/usr/lib/man.config
, если это файл есть, или правильно настроить
less (см. раздел
less).
Если локаль установлена неправильно (см. раздел
Настройка локали), то ls
не будет печатать кириллические символы.
В этом случае, возможно, поможет одна из следующих команд: ls -N
, dir
-N
или ls --show-control-chars
.
Удостоверьтесь, что shell на месте адресата установлена правильно. Если ваш
rlogin
не работает как надо по умолчанию, то используйте 'rlogin -8
'.
Пропишите в стартовом скрипте (если вы используете bash
, то это
.bashrc
)
alias rlogin='rlogin -8'
Если возникают проблемы с вводом русских символов, надо создать файл
~/.telnetrc
со следующей строкой:
DEFAULT set outbinary
Вы можете встретить проблемы при работе в кодировке cp1251
-- не
передаётся маленькая русская буква "я" 0xff
. У протокола
TELNET
0xff
-- это первый символ управляющей последовательности. Дабы
передать собственно "я", нужно его удваивать: 0xff, 0xff
. При
использовании KOI8-R
такая проблема отсутствует.
off-topic: вместо telnet лучше использовать ssh (Secure Shell) -- максимальная безопасность при минимуме затрат.
Добавить в файл конфигурации ~/.ircrc
следующие строчки:
/set translation russian /set eight_bit_characters on
Возможно наиболее правильный способ кириллизации подписей в рисунках, является использование пакета 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 существует несколько "гнусных хаков" которые позволяют его кириллизовать, их, в принципе, можно найти. Hаиболее простой способ кириллизации подписей в рисунках xfig, является использование пакета psfrag.