Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско




Скачать 298.17 Kb.
НазваниеКириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско
страница1/2
Дата конвертации11.12.2012
Размер298.17 Kb.
ТипДокументы
  1   2
Кириллизация в Linux

Алексей Барабанов

Принято считать, что в Linux уже давно нет проблем с кириллизацией чего-либо. Эта ОС вслед за другими полным ходом движется в юникодный рай, где, как обещают, вавилонский кризис никому не грозит. Но на практике ситуация еще весьма далека от идеальной.

Тема кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейском регионе явно ходим в рекордсменах. И вот теперь, когда, казалось бы, уже нет проблем, чтобы предложить пользователям Linux все разнообразие проверенных наработок и материалов по кириллизации, многие дистрибуторы начинают экономить, можно сказать, на самом святом. Им кажется, что надо уже сейчас заставить всех пользователей работать в универсальной кодировке UTF8 (алгоритм 8го представления символов UNICODE) и в локалях, сделанных на ее основе. Увы, в данном вопросе именно пользователи попадают между молотом и наковальней, между стремлением разработчиков дистрибутивов к псевдопрогрессу и консервативностью рынка прикладного программного обеспечения. Обсудим данный вопрос подробно на примере дистрибутива SuSE Linux 10.0 и в сравнении на примере ряда других ведущих дистрибуций.

Терминология и проблематика

Необходимость адаптации программного обеспечения к требованиям интерфейсного окружения обуславливается тем, что существует изначальная проблема определения кодировки символьных данных. Например, в UNIX-подобных системах файлы представляются последовательностью байт. Таким образом, все входные потоки данных, которые, по сути, есть файлы, тоже являются последовательностью индифферентных байтовых кодов. Как же программа априори «поймет», что за данные ей передаются?

Есть два способа: по содержимому самого потока данных, так называемый «in-band», и на основании внешнего предписания, или «out-band».

Первый способ зависит от формата, второй – диктует формат. Изначально использовался только второй способ. Например, в первых персональных компьютерах исключалось применение символьных данных в кодировках, отличных от кодовой страницы 437 (IBM Codepage 437). Использование данной кодовой таблицы было закреплено аппаратно, то есть внешним путем. С распространением компьютерной технологии в регионах, где приняты иные требования на представление символьных данных, была определена процедура так называемой локализации, или модификации программного обеспечения для использования региональных стандартов. Но данный путь оказался слишком трудозатратным. И тогда было произведено функциональное выделение всех национально-зависимых программных компонентов так, чтобы можно было настраивать требуемую локализацию динамически. Естественно, данная процедура всецело определялась платформой. Так, в частности, на обсуждаемой платформе GNU/Linux локализация управляется единым образом на основе так называемых «локалей» (locale) с помощью системной библиотеки glibc.

Второй способ, «in-band», подразумевает, что, получив некоторые символьные данные, программа самостоятельно сумеет определить их кодировку, пользуясь лишь информацией из входного потока. Например, кодировка может указываться в самом файле или в начале потока данных. Такой способ принят во многих внутренних форматах, поддерживаемых текстовыми редакторами, в формате HTML для этого используются специальные тэги, а в протоколе HTTP специальные опции и так далее. Но, несомненно, самым универсальным является способ использования кодировки такого размера (разрядности), чтобы она смогла содержать в себе все возможные символьные комбинации. Так возникла идея кодировки UNICODE (Unicode standard ISO 10646, или Universal Character Set, или UCS) и её более компактной версии UTF-8 [1]. Казалось бы, проблема решена, да не тут-то было! Универсальная кодировка не отправила использование локалей в прошлое, а лишь добавила проблем, поскольку увеличила их число!

Локали в Linux

Итак, в программном окружении определяется понятие локали как совокупности данных об используемых языковых и национальных особенностях среды исполнения. Именно пользуясь параметрами локали, программа «понимает» правильным образом символьные входные данные и выводит свои отчеты в правильных кодировках. Здесь, в самом определении, заложена некая условность, приводящая к неверному пониманию сущности происходящего. Бытует мнение, что из привязки локали к процессу следует легкость манипулирования её настройкой. Мол, если локаль передается процессу из окружения, то ничего нет проще, как установить любую локаль прямо перед запуском. Например, в Linux используются для этого переменные окружения LC_* и LANG. Эти переменные формируются в процессе отработки профиля пользователя и далее передаются всем порожденным процессам. Вот как все просто! Если в системе в базе локализации присутствует нужная локаль, то, указав ее в окружении, мы можем заставить работать с нею любой процесс. Увы, нет! Это со всех сторон наивный взгляд. Чтобы понять свойства локали, давайте взглянем на процесс ее образования (см. врезку «Локали и их образование»).

Кодировка, включенная в локаль, является тем самым ключевым параметром, позволяющим методом «outband» указать на способ расшифровки символов. То есть программа еще и различает все входные данные с использованием кодировки локали и, кроме того, в той же кодировке выводит все сообщения. Ну, положим, если для вывода используются объекты среды, которые наследуют локаль программы, то еще можно надеяться, что при некоторых условиях они будут адекватно воспринимать и отображать кодировку данной локали. Но в отношении входных данных это не всегда верно. Точнее, в отношении входных данных не работает обратная логика. Если локаль процесса, использующего входные данные, не совпадает с локалью процесса, их породившего, то, скорее всего, ничего хорошего не выйдет.

Самый простой пример такой ситуации, когда программа использует ранее накопленные данные, где тип используемой кодировки определяет информацию – это имена файлов, индексы в структурах БД, базы служебных сообщений, сохраненные из Интернета документы. Вы наблюдали на экранах компьютеров «кракозябры» в сообщениях программ, которые в 90% случаев работали вполне адекватно? Вам приходилось вместо имен файлов видеть всякую «бнопню»? Это именно те случаи, когда программа воспользовалась строковой константой, подготовленной в другой локали, или пыталась прочесть символьные данные, созданные с использованием иной локали. Даже точно «угадав» локаль исходных данных, то есть, казалось бы, сводя проблему к тривиальной перекодировке, не всегда удается достичь успеха. Пример тому – данные, упорядоченные или проиндексированные, в соответствии с алфавитным порядком для некоторой локали. Здесь перекодировка не даст успеха, а сортировка будет уже не только трудоемкой, но и даже невозможной, если используются разделяемые данные, что характерно для совместной сетевой работы.

Ну хорошо, локаль – это типичное указание «out-band» кодировки. Примение UTF-8 должно, по идее, избавить от дополнительного указания на локаль, так как эта кодировка допускает определение локализации на основании самих данных. Но, увы, лишь в теории. Локаль, безусловно, указывает на единственную используемую в ней кодировку, а вот кодировка может использоваться в разных локалях. И чем универсальнее эта кодировка, тем больше выбор возможных локалей. То есть в случае абсолютного универсального идеала кодирования информации UTF-8 мы вообще лишились возможности по характеру данных сделать заключение о том, в какой локали эта информация представлена!

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

Вот о сопутствующих данных далее и поговорим, но сначала проверим, какие локали нам предлагаются в SuSE Linux.

Локали в SuSE Linux 10.0

Выполним установку системы по умолчанию, лишь указав, что принимается русский язык, и в результате получим следующую настройку локализации:

> locale

LANG=ru_RU.UTF-8

LC_CTYPE="ru_RU.UTF-8"

LC_NUMERIC="ru_RU.UTF-8"

LC_TIME="ru_RU.UTF-8"

LC_COLLATE="ru_RU.UTF-8"

LC_MONETARY="ru_RU.UTF-8"

LC_MESSAGES="ru_RU.UTF-8"

LC_PAPER="ru_RU.UTF-8"

LC_NAME="ru_RU.UTF-8"

LC_ADDRESS="ru_RU.UTF-8"

LC_TELEPHONE="ru_RU.UTF-8"

LC_MEASUREMENT="ru_RU.UTF-8"

LC_IDENTIFICATION="ru_RU.UTF-8"

LC_ALL=

Как можно убедиться, предлагается работать в локали ru_RU в многобайтной кодировке UTF-8. При этом в системе определены следующие варианты настройки:

> locale

ru_RU

ru_RU.koi8r

ru_RU.utf8

Здесь уже должно быть понятно, что представления об используемых в нашей стране локалях у разработчиков SuSE Linux далеки от реальности. В качестве эталонного примем мнение авторов документа [2], прошедшего проверку опытом. Кстати, из указанного источника можно почерпнуть дополнительный комментарий, который по причине форматных ограничений не вошел в настоящий текст.

Поправим в немецком дистрибутиве SuSE Linux состав локалей, которые необходимы для работы российского пользователя, следующим скриптом, запускаемым от root:

#!/bin/sh

 

LOCALE=/usr/lib/locale

LP=ru_RU

LD=$(which localedef)

 

[ "1$LD" == "1" ] && { echo localedef not found ; exit -1 ; }

 

LD="$LD -c -i $LP"

 

[ "1$(locale -a | grep ^$LP | grep utf8)" == "1" ] && $LD -f UTF-8 $LP.UTF-8

[ "1$(locale -a | grep ^$LP | grep UTF-8)" == "1" ] && ln -sf $LOCALE/$LP.utf8 $LOCALE/$LP.UTF-8

 

[ "1$(locale -a | grep ^$LP | grep koi8r)" == "1" ] && $LD -f KOI8-R $LP.KOI8-R

[ "1$(locale -a | grep ^$LP | grep KOI8-R)" == "1" ] && ln -sf $LOCALE/$LP.koi8r $LOCALE/$LP.KOI8-R

 

[ "1$(locale -a | grep ^$LP | grep cp1251)" == "1" ] && $LD -f CP1251 $LP.CP1251

[ "1$(locale -a | grep ^$LP | grep CP1251)" == "1" ] && ln -sf $LOCALE/$LP.cp1251 $LOCALE/$LP.CP1251

 

[ "1$(locale -a | grep ^$LP | grep iso88595)" == "1" ] && $LD -f ISO-8859-5 $LP.ISO-8859-5

[ "1$(locale -a | grep ^$LP | grep ISO-8859-5)" == "1" ] && ln -sf $LOCALE/$LP.iso88595 $LOCALE/$LP.ISO-8859-5

 

[ "1$(locale -a | grep ^$LP | grep cp866)" == "1" ] && $LD -f IBM866 $LP.CP866

[ "1$(locale -a | grep ^$LP | grep CP866)" == "1" ] && ln -sf $LOCALE/$LP.cp866 $LOCALE/$LP.CP866

 

[ "1$(locale -a | grep ^$LP | grep maccyrillic)" == "1" ] && $LD -f MAC-CYRILLIC $LP.MAC-CYRILLIC

[ "1$(locale -a | grep ^$LP | grep MAC-CYRILLIC)" == "1" ] && ln -sf $LOCALE/$LP.maccyrillic $LOCALE/$LP.MAC-CYRILLIC

И тут же проверим результат:

> locale -a | grep ^ru_RU

ru_RU

ru_RU.cp1251

ru_RU.CP1251

ru_RU.cp866

ru_RU.CP866

ru_RU.iso88595

ru_RU.ISO-8859-5

ru_RU.koi8r

ru_RU.KOI8-R

ru_RU.maccyrillic

ru_RU.MAC-CYRILLIC

ru_RU.utf8

ru_RU.UTF-8

Полученные локали позволят работать с кириллицей в соответствии с национальным стандартом ru_RU, используя кодировки UTF-8, KOI8-R, CP1251, ISO-8859-5, CP866 и MAC-CYRILLIC.

Некоторого пояснения требует сосуществование полного и сокращенного (в оригинале mangled – «порубленного») наименования локали, например, ru_RU.KOI8-R и ru_RU.koi8r. В принципе достаточно лишь сокращенного. Полное имя локали, указанное в переменных окружения, будет преобразовано к сокращенному в процессе работы. Но, учитывая мнение [1] и тот факт, что в отечественных дистрибутивах, например в ALT Linux (до версии 3.0), принято использование полного наименования локали даже в директории размещения (/usr/lib/locale), вероятно в расчете на независимость и оригинальность российских программистов, создадим символьные ссылки с полными именами на директории с базами локалей, которые были построены localedef.

Как видите, в недрах SuSE Linux заложен большой потенциал – расширение базы локализаций произошло без загрузки каких-либо дополнительных файлов кроме дистрибутивных.

В работающей системе SuSE Linux локаль устанавливается единым образом на основании переменной RC_LANG, размещенной в файле /etc/sysconfig/language. Ранее, сразу после присвоения данной переменной нужного значения, например того же ru_RU.UTF-8, следовало выполнить:

# SuSEconfig -module profiles»

для модификации служебных файлов профилей, формирующих окружение командной оболочки. Но теперь в этом нет необходимости, так как профили формируются универсальными скриптами /etc/profile.d/*.sh, среди которых lang.sh непосредственно читает /etc/sysconfig/language и все настраивает интерактивно, то есть в процессе запуска командной оболочки, и потом передается всем порожденным процессам. Таким образом, после модификации переменной RC_LANG достаточно перегрузить пользовательскую сессию или запустить дополнительную через «su -», чтобы начать работу в новой локали.

В других дистрибутивах возможен иной подход к формированию значений переменных окружения, указывающих на используемую локаль. Для того чтобы определить последовательность настройки, можно произвести контекстный поиск строки LANG в скриптах и конфигурационных файлах, расположенных в /etc.

Различные подходы к кириллизации

Вернемся к той мысли, что кроме нужной локали процесса надо обеспечить соответствующее преобразование входных и выходных данных. То есть правильную кодировку, как это упрощенно воспринимается. И здесь нам придется проанализировать, какие методы кириллизации, то есть адаптации интерфейсов для использования кириллицы, существуют.

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

В современных дистрибутивах Linux присутствуют два пакета интернационализации, с помощью которых настраивается кириллическая консоль. Хронологически первым является пакет kbd [3], и более поздним, порожденным как ветвь от kdb, – console-tools [4]. Долгое время ожидалось, что console-tools, содержащий множество утилит для манипуляции шрифтами и кодировками, вытеснит «простенький» kbd. Это мнение, подогреваемое русскоязычными соразработчитками console-tools (см. страницу credits на [4]) и отечественными дистрибуторами, в частности ALT Linux, «просочилось» в многочисленные руководства и учебники, например [5]. Поторопились...

По данным поисковой системы [6], пакет console-tools используется в дистрибутивах: Mandrake, Mandriva, Conectiva, ALT Linux, RedHat 6 и 7, Turbolinux, Trustix, Engarde. С первыми четырьмя все ясно, так как они явно исторически тяготеют друг к другу. А вот RedHat из перечисленных версий отметим особо!

По сведениям с того же сайта, пакет kbd применяется в дистрибутивах SuSE, Fedora, RedHat 5 и 8, WhiteBox, CentOS, ASP Linux, PLD, Aurox, StartCom, Arklinux, Openwall и все таже Conectiva. Со второго по пятый в списке представлены явные «редхатоиды» и их клоны. Очень интересно обсудить «пируэт», который совершили разработчики RedHat, перейдя на console-tools в релизах 6 и 7 и вернувшись потом снова к kbd в релизе 8. Нет, они не перегрелись в солярии. Можно предположить, что в связи с ожидаемым и скорым, как думают латентные эсперантисты, переходом в универсальную кодировку unicode (а как известно, в 8 версии RedHat Linux произошел переход на utf 8) преимущества пакета console-tools, ориентированного в основном на изощренные манипуляции с кодировками, теряют актуальность, а вот средства управления виртуальными консолями в kbd, напротив, становятся незаменимыми. Что и послужило основанием возврата к использованию kbd.

Принимая все перечисленное во внимание и учитывая, что в SuSE Linux всегда применялся и применяется сейчас пакет kbd, далее будем обсуждать именно его.

Ввод символов с консоли Linux

Консольный (иногда его называют «терминальным») драйвер состоит из двух частей. Первая отвечает за ввод с клавиатуры, а вторая за вывод на экран. То есть делится на части в соответствии с функциональным разделением самой консоли на клавиатуру и экран. Клавиатура может быть как физическим, локальным устройством, так и удаленным виртуальным. То же самое верно и в отношении экрана. Если он локальный, то соответствует экрану консоли, подключенной к компьютеру, а если виртуальный, то в последовательности преобразования может участвовать и консольный драйвер удаленной системы. Поэтому для ясности будем учитывать только локальные устройства.

Сначала разберемся, как происходит преобразование вводимых данных. Воспользуемся схемой, представленной на рис. 1.

  1   2

Похожие:

Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconУ нас пока нет краткого и содержательного изложения истории нашей школы. Поэтому в данном разделе мы решили поместить исследовательскую работу бывшей ученицы
Чеботарёв А. В и хотя с момента написания работы уже прошло несколько лет, мы думаем, что она будет интересна и актуальна всем интересующимся...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconПрофилактическая работа школы по наркомании
«Дети – наше будущее» эта прописная истина уже давно стала в нашей стране благим пожеланием, надеждой, что положением с детьми вот-вот...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconИскусство рукопашного боя
России единственный раз — в 1930 г., после чего сразу же попала в разряд «секретных». Автор разработал одну из первых в нашей стране...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconКомпьютерно – игровой комплекс (кик) как условие развития познавательного интереса
Ях, ориентирующих его в окружающей действительности, что крайне важно для социализации ребенка в обществе. Под влиянием познавательного...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconАктуальность психологического консультирования для системы дошкольного образования
Тановления. Это требует от педагога-психолога, с одной стороны расширения его методического арсенала и соответствующего круга психологических...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconРуководство пользователя Linux
Тот ли вы, кто должен прочесть на эту книгу. Попробуйте ответить на несколько вопросов: Вы уже взяли где-то Linux, поставили его,...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconВ первые я познакомилась с историей девочки, попавшей во сне в удивительный, причудливый мир, когда мне было 8-9 лет. С тех пор прошло уже немало времени, но я
С тех пор прошло уже немало времени, но я с удовольствием перечитываю любимые цитаты и афоризмы из «Алисы», пересматриваю мультипликационный...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconПрочитайте тексты и ответьте на вопросы к ним
Высший нравственный идеал требует, чтобы мы любили всех людей, как самих себя, но так как люди не существуют вне народностей (как...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconЧто делать, если Вы установили gnu/Linux?
Например, многие уверены, что они не смогут делать такие простые вещи как общаться в чате, потому что в Линуксе нет клиентов типа...
Кириллизации или «русификации», как иногда выражаются, с некоторых пор исчезла с первых позиций рейтингов интереса со стороны неофитов Linux. В нашей стране уже давно не внедряются новые кодировки. И хотя по их числу мы не превосходим народности с иероглифическими методами написания, но в европейско iconСценарий школьного праздника, посвященного 8 марту
В нашей стране этот день давно уже превратился в веселый, шуточный праздник. Все с нетерпением ждут 8 Марта, но не потому, что мечтают...
Разместите кнопку на своём сайте:
kak.znate.ru


База данных защищена авторским правом ©kak.znate.ru 2012
обратиться к администрации
KakZnate
Главная страница