Emacs для начинающих



         

Как работает locale ? (пример Linux) - часть 2


будет пытаться открыть файл "/usr/share/locale/ru_SU.KOI8-R/LC_XXXXX"

и считать его внутрь структуры в run-time части libc. Это все происходит совершенно прозрачно для пользователя.

    Имя файла для считывания конструируется динамически :

/usr/share/locale/ru_RU.KOI8-R/LC_XXXXX

/usr/share/locale/ это константа, определяющая каталог в котором хранится база локализации. Различно для различных операционных систем. Для Linux

смотри LFSSND (/usr/share/locale/). Для Intractive UNIX: /lib/locale/.   Вообще-то IMHO должно использоваться _PATH_LOCALE из <paths.h>

ru_RU.KOI8-R/ подкаталог в базе докализации, где "ru_RU.KOI8-R" - значение локализации.
LC_XXXXX файл данных для загрузки в run-time libc для категории локализации LC_XXXXX. Этот файл называется "объект локализации".

    Если задана категория локализации LC_ALL, считываются все файлы из /usr/share/locale/ru_RU.KOI8-R/*

и если там найдутся файлы, имена которых совпадают с именами (LC_ - locale categories) категорий локализации (LC_CTYPE, LC_COLLATE, e.t.c.) -- то они загружаются. Для остальных категорий остается значение по умолчанию : "C".

    Таким образом, при правильной установке локализации, должны существовать следующие каталоги: (пример)

$ ls /usr/share/locale/*

C

POSIX

ru_RU.KOI8-R

en_DK.ISO-8859-1

...

* ПРИМЕЧАHИЕ: В полном POSIX.2 точно тот же результат даст утилита:

$ locale -a

C

POSIX

ru_RU.KOI8-R

en_DK.ISO-8859-1

...

    Также должны существовать файлы ("объекты локализации") : (пример)

$ ls /usr/share/locale/ru_RU.KOI8-R/*

LC_CTYPE

LC_COLLATE

LC_MONETARY

LC_NUMERIC

LC_TIME

    Теперь вопрос, откуда взять данные файлы ? ;-) См. или или .

    В упомянутой выше версии Linux libc

5.0.9 подсистема locale работала именно так, однако не было утилит для создания загружаемых "объектов локализации". Те утилиты, которые входили в ее состав, генерировали объекты только для 4.4 BSD lite libc (почему ?).




Содержание  Назад  Вперед