|
Bog BOS: Internationalization (i18n) вообще и русификация в частности
|
Последнее изменение текста: 20001202
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Internationalization (i18n) вообще и русификация в частности
Интернационализация - процесс создания продукта, независимого от языка,
культуры и таблиц кодировки. Локализация - процесс настройки интернационализированного
продукта под конкретный язык, культуру и кодовую таблицу.
Locale POSIX
Ссылки
Стандарты
-
POSIX.1 ( ISO/IEC 9945-1:1992, он же IEEE Std. 1003.1-1992) - Интерфейс
-
POSIX.2 ( ISO/IES 9945-2:1992, он же IEEE Std. 1003.2-1992) - Команды и
утилиты
-
более старый вариант POSIX от 1988 года
-
вариант POSIX 1994
-
вариант POSIX 1996 с дополнениями POSIX.2a, POSIX.2b
-
XPG2 : X/Open Portability Guide, Volume 2, January 1987, XVS System Calls
and Libraries (ISBN: 0-444-70175-3).
-
XPG3 : X/Open Specification, February 1992, System Interfaces and Headers,
Issue 3 (ISBN: 1-872630-37-5, C212); this specification was formerly X/Open
Portability Guide, Issue 3, Volume 2, January 1989, XSI System Interface
and Headers (ISBN: 0-13-685843-0, XO/XPG/89/003).
-
XPG4 : X/Open CAE Specification, July 1992, System Interfaces and Headers,
Issue 4 (ISBN: 1-872630-47-2, C202).
Все это существует одновременно, слегка отличается и неплохо бы иметь средства
узнавать какой вариант поддерживает данная версия данной ОС. RedHat 6.0
включает в себя glibc 2.1.1 - GNU libc 2 - libc6(POSIX 1996). Для совместимости
также представлена libc5 - linux libc 5.3.12 (несовместима со скомпилированными
объектами из /usr/share/locale,
интересно, как будут
вести себя старые программы, если LANG не C?). Исходники localedata
для localedef (апрель 1998) можно взять отдельно на
gnu.org
(скорее всего там занято, так что лучше поискать вокруг). Использую ldd
можно узнать libc5 или libc6 использует данная программа (статически собраная
программа просто вызывает подозрение).
locale API (libc)
переменные окружения
утилита извлечения информации locale
исходные тексты описания locale
ru_RU
(под KOI8-R)
компиляция объектов локализации
наборы данных locale
POSIX NLS (Native Language Support)
POSIX wide char, multibyte char
locale X Windows
Кодировки символов
Ссылки:
Стандарт ISO/IEC 10646-1:2000 ($500) определяет Universal Multiple-Octet
Coded Character Set (UCS): таблица символов для всех языков мира и исскуственных
символьных систем (математические, научные, типографские символы, символы
MS-DOS, Videotext и т.п.). Ширина символа - 31 бит. Подмножество Basic
Multilingual Plane (BMP) - первые 65534 позиции (0x0000 - 0xFFFD) - составляет
UCS-2 (ширина символа - 2 байта). Стандарт определяет только название и
код символа, но не определяет его изображение. Символы с 0x0000 по 0x007f
совпадают с ASCII. Символы с 0x0000 по 0x00ff совпадают с Latin-1 (ISO
8859-1). Русские буквы идут подряд с 0x0410 по 0x44f (как всегда, кроме
ё). Интервал 0xE000 - 0xF8FF предназначен для частного использования. Символы
делятся на базовые (обычные) и составные. Составной символ накладывается
на предыдущий символ, не занимая знакоместа. Синхронизован со стандартом
консорциума
Unicode (27 октября
2000 - версия 3.0.1, $50) - содержит дополнительную информацию о направлении
письма, сортировке (ISO 14651), тип символа (цифра, прописная или строчная
буква) и т.д. Представления: UCS-4/UTF-32, UCS-2/UTF-16 (2 байта на символ;
bigendian/littleendian; wide character - wchar_t, wchar.h, wctype.h), UTF-8
(переменное число байт на символ - от 1 до 3 для BMP или до 6 для полного
множества, RFC 2279,ISO 10646-1 Annex R, multibyte character). UTF-16 невозможно
использовать в "старых" программах, т.к. он использует 2-байтные строки,
содержащие байт со значением 0 (воспринимается програмами на C как конец
строки). UTF-8: символы ASCII кодируются как обычно; символы большие 0x007f
кодируются как несколько байт со взведенным битом (т.е. символ ASCII не
м.б. частью другого символа; первый байт многобайтного символа в интервале
от 0xC0 до 0xFD и определяет число байт в последовательности; остальные
байты от 0x80 до 0xBF (так что можно найти начало символа); порядок сортировки
совпадает с UCS-4 (bigendian); 0xFE и 0xFF не используются; 0x00 всегда
соответствует ASCII 0x00, т.е. его можно использовать как конец строки;
русские буквы - двухбайтные.
Уровни реализации UCS:
- не поддерживаются составные символы и Hangul Jamo
- не поддерживаются Hangul Jamo и более 2 составных символов
- поддерживаются все символы UCS
Где взять шрифты:
-
-misc-fixed-*-ISO10646-1
всех стандартных размеров (классические терминальные шрифты) - включают
iso-8859-5, KOI8-R, cp1251. Инструкция в README (только перезапустить xfs
после установки). Где бы только прикладных программ найти (в дополнение
к xfd ;)
gnome-terminal (и другие xterm?): Переход в UTF-8: ESC %G (шрифт д.б. ...-10646-1)
mc: LC_CTYPE=en_US.UTF-8 LANG=C mc
less: LESSCHARSET=utf-8 less имя-файла
vim: 'fileencoding' option
Программная поддержка Unicode
ICU
(или в OSS)
- International Components for Unicode от IBM. Бесплатно. С исходными текстами.
Представляет собой библиотеки C и C++ для поддержки Unicode и 150 locale
(включая ru и ru_RU): таблицы кодировок (в т.ч. utf-8, utf-16bigendian,
utf16-littleendian, ascii, iso-8859-1=latin1, iso-8859-5, cp1251, cp866,
KOI8-R, maccy), форматы чисел, средства для хранения текстов сообщений
на различных языках, время и дата, сравнение строк, нахождение границ символов,
слов и предложений. Обеспечивает локализацию (включая добавление новых
locale) без изменения кода и компиляции.
Установка ICU 1.6 на RedHat 6.2:
- cd source
- chmod u+x configure install.sh config.*
- ./configure
- make (127 MB!)
- установить ICU_DATA на директорию data
- make check
- make install
- /usr/local/include/unicode
- /usr/local/lib
- libicu-uc.so
- libicu-i18n.so
- libustdio.so
- libicu-toolutil.so
- /usr/local/sbin
- makeconv
- genrb
- genccode
- genprops
- gennames
- gencmn
- gencnval
- gentz
- gentest
- pkgdata
- /usr/local/share/icu/1.6/libicudata.so (8 MB!)
- /usr/local/share/icu/Makefile.inc (для вставки в Makefile проектов, использующих ICU)
-
полезная программа - преобразователь кодироки в xml-файлах: samples/XMLConverter/XMLConverter.
Правим, чтобы позволяла выводить на stdout и устанавливаем в /usr/local/bin
(вызов: XMLConverter -e cp1251 вх-файл -).
Преобразование кодировок
iconv -f исходная-кодировка -t требуемая-кодировка
|
Bog BOS: Internationalization (i18n) вообще и русификация в частности
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru