[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Как полностью pусифициpовать иксы чеpез xkb!



Добрый день!

From: Alexander L. Belikoff <abel@bfr.co.il>
Newsgroups: fido7.ru.linux

>> Cущественую часть Cyrillic-HOWTO поpа пеpеписывать, пpичем по-pусски.
>
>Cyrillic-HOWTO - скоро будет. Трудно переписывать HOWTO в условиях
>изменения ситуации с каждым новым релизом glibc &/| XFree...


 О! Давай. Если хочешь (если считаешь нужным) -- пришли HOWTO
почитать перед релизом. Или кинь в locale@sensi.org на обсуждение.

>> Hу иксы-то одни у всех. kbd тоже навеpное. А glibc - тем более. Так что
же
>> отличается ?
>
>В XFree поддержка xkb, в последнее время, меняется с каждым релизом.


 Про это тоже IMHO надо написать. Где, что и каким образом глючит. :-)
Или хотя бы описывать конкретную версию (релиз дистрибутива).

>В glibc Дреппер упрямо суёт ru_SU и не хочет поддерживать поле
>[.CHARSET] локали. Не всё так просто...


 Ну, он не то чтобы не поддерживает. :-) Просто он борется за идею.

 А идея состоит в следующем. В настоящее время *не*существует*
строгого стандарта на ИМЯ charset. Возможны варианты :
ISO8851-1
ISO-8859-1
ISO_8859-1
 и т.д.

 На IANA лежит документ :
http://www.isi.edu/in-notes/iana/assignments/character-sets
где явно описаны названия charset-ов и их Alias: (!)

 Однако Дреппер не поддерживает эти Alias-es нифига, а
делает так называемый name mangling. То есть переводит
все в lowercase и удаляет символы "-", "-", "."  e.t.c.
Например ISO_8859-1 становится iso88591. А KOI8-R --> koi8r.

 А ситуация осложняется тем, что когда-то давно IBM и Microsoft
ввели понятие Codepage, которое теперь фактически имеет значение
Charset. А с названиями этих самых Codepages стоит полная
путанница :
CP866
CP-866
IBM866
e.t.c.
 Или даже как в случае CP1251, когда в MS IE или IIS она объявлена
как "Windows-1251". Дак вот схема name mangling по Дрепперу еще
как-то работает для ISOxxxx, но совершенно не работает для имен
Codepages CPxxx/IBMxxx. Нужно поддерживать Alias-es по IANA.

 Надо иметь в виду, что названия Country и Territory для имени locale
стандартизованы в ISO (ISO 639 и ISO 3166), а данный документ
IANA стандартом *не является*, а так, подборка рекомендаций.

 Более того, в "чистом" POSIX вообще *невозможно* узнать имя
charset после setlocale(). Необходимо пользоваться не-POSIX
функцией XPG (SVID, Unix98) : nl_langinfo(CODESET). Надо ли
говорить, что некоторые UNIX (например FreeBSD) не имеют этих
XPG-extensions и функции nl_langinfo() вообще. Что очень
странно,  поскольку в том же POSIX определена утилита locale
c keyword-ом codeset которая "как-то" это имя определяет...

 Вобщем, засада с этим charset-ом полная.

 Ситуация даже еще хуже, поскольку для полной поддержки
charset-ов необходио держать несколько копий man-ов, info
и message catlog-ов в разных кодировках.


P.S. Решением проблемы был бы UNICODE как "самый универсальный
charset". Тогда любой другой можно получить из UNICODE как
"логическое сечение". Кстати в последних Solaris-ах есть такая
возможность и можно определять en_US.UNICODE,
en_GB.UNICODE, ru_RU.UNICODE e.t.c. Подробнее не разбирался,
может Борис Тоботрас наc просветит ? :-)

P.P.S. К сожалению, X-ы "внутри" не UNICODE-овые и не имеют такого
понятия как UNICODE font (в отличие от тех же Windows'95). А как
было бы все тогда просто.

--
-=AV=-