Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.sai.msu.su/~er/locale.html
Дата изменения: Unknown Дата индексирования: Mon Oct 1 21:07:14 2012 Кодировка: koi8-r |
Программы, работаюцие с locale нормальным образом, через вызовы glibc, требуют скомпиленных файлов locale. При этом должны выполняться три требования: 1. Файлы locale должны компилиться командой localedef, которая идет вместе с glibc-2.2.x. Я не проверял детально, с какой версии проходит грань совместимости, но, во всяком случае, сильно старые скомпиленные locale с новыми glibc не работают. 2. Скомпиленные файлы locale должны располагаться в директории /usr/lib/locale/normalized_locale_name/ 3. Имя директории normalized_locale_name должно быть образовано по следующим правилам: - начало имени должно быть в форме ru_RU. - имя суффикса (после точки) опускается в нижний регистр и из него выкидываются все тире. Таким образом, для стандартного имени ru_RU.KOI8-R формируется директория ru_RU.koi8r, в которую glibc будет смотреть при попытках установить ЛЮБУЮ locale, которая сводится к такой форме. Т.е., например, установки locale в ru_RU.KOI8-R, ru_RU.koi8-r, ru_RU.koi8r, ru_RU.kOi-8-R реально будут приводить к работе с одной и той же ru_RU.koi8r. Важным практическим следствием такого поведения является то, что glibc НЕ БУДЕТ смотреть в директорию ru_RU.KOI8-R при попытке установить такую locale. Т.е., если рядом с директорией ru_RU.koi8r положить другую директорию ru_RU.KOI8-R (с другой locale), то это не произведет никакого эффекта - к этой директории через glibc просто не будет обращений. Возможно, однако, что некоторые старые программы используют locale явно, или явно слинкованы со старой libc. Такие программы могут искать locale ru_RU.KOI8-R в директории /usr/share/locale/ru_RU.KOI8-R (именно так, по точному имени, без новых правил приведения имени). В связи с этим наиболее надежным способом установки locale сейчас является такой: 1. Основной реальной директорией, в которой живет locale, является /usr/lib/locale. /usr/share/locale должна быть симлинком на /usr/lib/locale (хотя и неважно, кто является реальной директорией, а кто симлинком. Но лучше придерживаться именно данного правила - это экономит одно обращение к диску на каждую установку locale, т.к. не надо считывать симлинк). 2. Сама locale изготовляется командой localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R При этом будут использованы исходники /usr/share/i18n/locales/ru_RU и /usr/share/i18n/charmaps/KOI8-R. В директории /usr/lib/locale образуется директория ru_RU.koi8r. 3. Сделать ln -s ru_RU.koi8r ru_RU.KOI8-R для заведомо корректной работы старых программ.