На главную | Поиск
Вы находитесь в Хранилище файлов Белорусской цифровой библиотеки

Как вылечить локализацию в Linux

From: Ales Popov NM) libc-5.2.18, ld.so-1.7.14... Вот в этой библиотеке дело ^^^^^^^^^^ ! Можно просто взять ее с CD Linux.Yes или пересобрать эту библиотеку. Только надо в сырцах исправить, - это вот с того сидюка: === Begin 11.r === Eugene Shakhtarin Локализация koi8-r для версии libc 5.2.18 (ELF). Сделано в Linux kernel 1.3.57, gcc 2.7.2. 1) Описание механизма генерации locale находится здесь: #es-sun2.fernuni-hagen.de/public/mirrors/GCC-experimental/Intro 2) Стандарты charmap и locale находятся здесь: #www.dkuug.dk/JTC1/SC22/WG15/ 3) В дистрибутиве libc 5.2.18 функция libc/locale/ctype.c неисправна, а именно, в операторе (is_upper ? toupper_done : tolower_done) |= BIT (token); выражение BIT (token) равно 0 вместо необходимой 1 и tolower_done получает значение 0, даже когда tolower таблица сформирована. ctype.c далее принимает решение заменить tolower на умолчание. Для починки требуется замена в libc/locale/ctype.c: /* static unsigned short toupper_done = 0; static unsigned short tolower_done = 0; */ static unsigned toupper_done = 0; static unsigned tolower_done = 0; Вот соответствующий патч: *** ctype.c.orig Tue Jan 16 19:02:43 1996 --- ctype.c Tue Jan 16 19:03:23 1996 *************** *** 54,59 **** --- 54,63 ---- /* Remember which class or conversion is already done. */ static unsigned short class_done = 0; + /* static unsigned short toupper_done = 0; static unsigned short tolower_done = 0; + */ + static unsigned toupper_done = 0; + static unsigned tolower_done = 0; #define SYNTAX_ERROR \ Здесь находятся #eugene.mplik.ru/pub/Linux/utils/nls/locale/libc-5.2.18.fix/ ctype.c -- 6534 исправленный вариант ctype.c localedef.gz -- 53833 программа, оттранслированная для отладчика с ключем -g 4) Трансляция localedef.c (и locale.c): make SHARED= programs 5) В libc 5.2.18 поддержка LC_COLLATE не реализована вообще. 6) Для генерации базы данных locale для koi8-r в депозитарии нет готовых исходных данных. #www.dkuug.dk/JTC1/SC22/WG15/ Исходные данные для генерации koi8-r находятся здесь: #eugene.mplik.ru/pub/Linux/utils/nls/locale/share/nls/charmap/KOI8-R #eugene.mplik.ru/pub/Linux/utils/nls/locale/share/nls/locale/ru_RU Эти данные подготовлены на основе стандартов ISO 10646 (Unicode), RFC-1489 и депозитария #www.dkuug.dk/JTC1/SC22/WG15/ Файлы KOI8-R и ru_RU не являются официальными документами и не обладают никаким формальным статусом. Они сделаны для личного употребления, не имеют ограничений на тиражирование, и гарантия их пригодности для каких-либо определенных целей абсолютно отсутствует. 7) Генерация базы данных locale для koi8-r. 7.1) Создать каталоги mkdirhier /usr/share/nls/charmap mkdir /usr/share/nls/locale mkdir /usr/share/locale 7.1) Разместить описания KOI8-R и ru_RU в каталогах /usr/share/nls/charmap/KOI8-R /usr/share/nls/locale/ru_RU 7.2) Построить описание категорий koi8-r в каталоге /usr/share/locale/koi8-r/ localedef -c -i /usr/share/nls/locale/ru_RU -f KOI8-R koi8-r Уже готовый набор описаний категорий koi8-r, полученный описанным методом, находится в #eugene.mplik.ru/pub/Linux/utils/nls/locale/share/locale/koi8-r/ 8) Использование построенной локализации koi8-r. 8.1) Определить переменную командной среды export LANG=koi8-r После этого программы, созданные на базе libc 5.2.18 с учетом locale, будут локализованы соответствующим образом. 8.2) Для интернационализации создаваемой программы необходимо применить функцию setlocale (см. man setlocale), например: #include #include main() { int c, C; setlocale(LC_ALL, ""); c='й'; C=toupper(c); printf("%c\n", C); C='Й'; c=tolower(C); printf("%c\n", c); }

Last-modified: Sun, 18 Aug 1996 16:43:32 GMT
World LibraryРеклама в библиотекеБиблиотека не предназначена для детей! Проект Либмонстра, партнеры БЦБ - Украинская цифровая библиотека и Либмонстр Россия https://database.library.by