@ Карта сайта News Автора!

Bog BOS: Internationalization (i18n) вообще и русификация в частности

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)

Последнее изменение текста: 20001202
Скопировано с www.bog.pp.ru: 2024.04.19

Bog BOS: Internationalization (i18n) вообще и русификация в частности

Интернационализация - процесс создания продукта, независимого от языка, культуры и таблиц кодировки. Локализация - процесс настройки интернационализированного продукта под конкретный язык, культуру и кодовую таблицу.


Locale POSIX

Ссылки Стандарты Все это существует одновременно, слегка отличается и неплохо бы иметь средства узнавать какой вариант поддерживает данная версия данной ОС. 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


Кодировки символов

UNICODE/UCS

Ссылки:


Стандарт 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:

  1. не поддерживаются составные символы и Hangul Jamo
  2. не поддерживаются Hangul Jamo и более 2 составных символов
  3. поддерживаются все символы UCS

Где взять шрифты:

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:

  1. cd source
  2. chmod u+x configure install.sh config.*
  3. ./configure
  4. make (127 MB!)
  5. установить ICU_DATA на директорию data
  6. make check
  7. make install
    1. /usr/local/include/unicode
    2. /usr/local/lib
      1. libicu-uc.so
      2. libicu-i18n.so
      3. libustdio.so
      4. libicu-toolutil.so
    3. /usr/local/sbin
      1. makeconv
      2. genrb
      3. genccode
      4. genprops
      5. gennames
      6. gencmn
      7. gencnval
      8. gentz
      9. gentest
      10. pkgdata
    4. /usr/local/share/icu/1.6/libicudata.so (8 MB!)
    5. /usr/local/share/icu/Makefile.inc (для вставки в Makefile проектов, использующих ICU)
  8. полезная программа - преобразователь кодироки в xml-файлах: samples/XMLConverter/XMLConverter. Правим, чтобы позволяла выводить на stdout и устанавливаем в /usr/local/bin (вызов: XMLConverter -e cp1251 вх-файл -).

Преобразование кодировок

iconv -f исходная-кодировка -t требуемая-кодировка
 

Ссылки

@ Карта сайта News Автора!

Bog BOS: Internationalization (i18n) вообще и русификация в частности

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru