Шрифт:
Интервал:
Закладка:
Сам экранный драйвер может работать в одном из двух режимов: режиме UTF или байтовом режиме. Выбор режима определяется приложением, которое обращается к этому драйверу для вывода символов на экран.
В режиме UTF последовательности байтов, получаемые от приложения для отображения на экране консоли, преобразуются по алгоритму UTF в коды UNICODE. После такого преобразования драйвер экрана обращается к загруженной в память таблице экранного шрифта (SFM) за соответствующим данному коду изображением символа.
В байтовом режиме драйвер экрана использует дополнительную таблицу - таблицу перекодировки символов (Application Charset Map или кратко ACM) для преобразования получаемых от приложения последовательностей байтов в коды UNICODE. Эта таблица зависит от кодировки символов, применяемой приложением. В дальнейшем драйвер экрана, как и в режиме UTF, обращается к таблице экранного шрифта (SFM) для того, чтобы извлечь из нее изображение нужного символа.
Примечание:
Для того, чтобы определить, работает ли виртуальная консоль в режиме UTF или в байтовом режиме, можно воспользоваться скриптом vt-is-UTF8, а для переключения режимов работы виртуальной консоли служат два скрипта: unicode_start и unicode_stop.
В ядре Linux отведено место для хранения четырех таблиц перекодировки ACM. Первые три таблицы определяют 437 кодовую страницу IBM (cp437), таблицу для набора символов терминала DEC VT100 (vt100) и таблицу для набора символов ISO latin1 (iso01). Эти три таблицы встроены в ядро и никогда не меняются. В качестве четвертой таблицы перекодировки в ядре может быть записана таблица перекодировки, выбранная пользователем.
Консольный драйвер Linux позволяет для каждой виртуальной консоли определить (с помощью команды charset) две ссылки (в документации их называют "сокетами") на таблицы перекодировки ACM. Эти две ссылки обозначаются как G0 и G1, причем для каждого виртуального терминала значения, присвоенные этим ссылкам, выбираются независимо. Однако, хотя ссылки G0 и G1 задаются независимо для каждого виртуального терминала, выбор таблицы перекодировки, определяемой каждой ссылкой, можно производить только из четырех таблиц, записанных в ядре. Поэтому реально все терминалы используют одну и ту же пользовательскую таблицу ACM. То есть, вы можете задать для tty1 использование G0=cp437 и G1=vt10 0, а для tty2 использование G0=iso01 и G1=user1 (определяемая пользователем кодировка), но не можете сделать так, что в одно и то же время tty1 использует таблицу user1, а tty2 использует таблицу user2.
Команда consolechars используется для изменения ACM, так же как и для задания шрифта и ассоциированной с ним таблицы SFM. С помощью команды consolechars можно считать консольный шрифт (таблицу экранного шрифта SFM) 8xH из файла и загрузить его в память, а также сохранить в файле шрифт, загруженный в память. Эта же команда служит для загрузки в ядро таблицы перекодировки, а также позволяет переопределить ссылки G0 и G1.
В качестве одной из опций команды consolechars при загрузке экранного шрифта из файла может быть задан размер шрифта по вертикали H. Значение H должно считываться из файла шрифта. Однако файлы некоторых форматов (в частности, файлы, содержащие только битовые образы символов) не содержат прямого указания на этот размер. В таком случае значение опции -H вычисляется исходя из размера файла (обычно -H 8, -H 14 или -H 16). Поскольку в настоящее время Linux не позволяет программно переключать режим работы дисплея, то выбор подходящего значения H в зависимости от установленного разрешения экрана полностью возлагается на пользователя.
В заключение отметим еще, что файлы с экранными шрифтами по умолчанию располагаются в каталоге /usr/lib/kbd/consolefonts/, а каталог /usr/lib/kbd/consoletrans/ используется для хранения как таблиц ACM, так и SFM.
Графический режимВ графическом режиме нет разбиения экрана на знакоместа, изображение любого символа можно вывести практически в любую позицию экрана. Изображения символов для конкретного набора символов составляют шрифт. Шрифты хранятся в файлах, которые принято называть файлами шрифтов. Вывод символов того или иного шрифта на экран организуется с помощью специального сервера шрифтов. Поэтому проблема русификации графического режима сводится к выбору русифицированного шрифта. Вопрос о том, что такое шрифты и как работает сервер шрифтов, подробно рассмотрен ниже в разд. 11.4.
11.1.2. Локализация
Только организовать ввод и вывод символов национального языка еще недостаточно для того, чтобы можно было считать решенным проблему применения компьютеров в той или иной стране. В разных странах в силу сложившихся традиций имеются различия не только в используемом алфавите, но и в способах представления некоторых конкретных данных. Это касается, например, символов, используемых для обозначения валюты, форматов представления даты и времени, обычаев записи (чтения) текстов слева направо или справа налево и т.д. При создании ПО, рассчитанного на применение в разных странах, приходится учитывать такие местные особенности. Кроме того, большие трудности вызывают такие вопросы как проверка орфографии на конкретном языке, автоматическая расстановка переносов при вводе текста или перевод на данный язык всех меню и служебных сообщений в программном обеспечении.
Способ проектирования ПО (включая ОС), при котором возможность многоязыковой поддержки закладывается с самого начала, принято называть интернационализацией (кстати, загадочное i18n - это просто сокращение для слова internationalization: i - потом еще 18 букв - n, аналогично, l10n = localization). При интернационализации программного обеспечения КОД не зависит от национальных особенностей. Все языково-зависимые данные сосредотачиваются в особых "объектах локализации", которые разбиты на функциональные группы: категории локализации. При таком подходе локализация - это процесс настройки программной системы на особенности конкретной страны.
В стандарте POSIX (Portable Operating System) были определены средства локализации, которые состоят из следующих компонент:
• набор библиотечных (libc) вызовов (locale API): setlocale(), isalpha(), toupper(), и т.д;
• исходные тексты описания средств локализации, в том числе файл(ы) описания кодировки (Character Set Definition File);
• наборы данных для локализации, которые в Linux размещаются в каталогах /usr/share/i18n/* и /usr/share/locale/*;
• утилита для получения информации о средствах локализации: locale;
• утилита для изготовления (компиляции) объектов локализации: localedef;
• переменные окружения, для управления средствами локализации: LANG, LC_ALL, LC_CTYPE, LC_TIME, LC_COLLATE, LC_NUMERIC и LC_MONETARY (они соответствуют категориям локализации).
В табл.11.1 кратко перечислено, на что именно влияет та или иная из этих переменных (или категорий локализации).
Таблица 11.1. Категории локализации.
Категория Описание LC_CTYPE Определяет правила классификации и преобразования одиночных символов. Позволяет правильно определять вид символа: цифра, буква, значок, заглавная буква или прописная и т.д. Другими словами, включает правильную работу системных вызовов isalnum(), isalpha(), iscntrl(), isdigit(),… и т.п. для местного алфавита. Вдобавок, включает правильный перевод строчных - прописных букв: toupper() и tolower() LC_COLLATE Определяет правила сравнения и преобразования строк. Позволяет определять лексикографический порядок символов (порядок сортировки) в местном алфавите. Включает правильную работу strcoll() и strxfrm(). Оказывает непосредственное влияние на работу утилит типа sort и т.д. LC_TIME Определяет правила национального представления времени и даты. Задает именование дней недели, месяцев и т.п. а также задает способ написания даты и времени (12/24). Hепосредственно влияет на strftime(), а через нее на утилиты date и т.д. LC_NUMERIC Определяет правила национального представления чисел с плавающей точкой. Влияет на strtod() и форматы %f и %g printf(), scanf() LC_MONETARY Определяет правила национального представления денежных величинОсобая переменная LC_ALL служит для обращения одновременно ко всем категориям.
Заметим, что включение средств локализации изменяет также некоторые пути поиска, в частности, пути поиска к файлам помощи (man-страницам), так что вначале команда man ищет переведенные man-страницы и только при их отсутствии выдает информацию на английском.
Подводя краткий итог всему вышеизложенному, можно сказать, что процедура русификации системы состоит из следующих этапов:
- Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003 - Наик Дайлип - Программное обеспечение
- Призрак в Сети. Мемуары величайшего хакера - Уильям Саймон - Программное обеспечение
- Photoshop CS2 и цифровая фотография (Самоучитель). Главы 10-14 - Солоницын Юрий - Программное обеспечение