Локализацията такава, каквато е - Как работи локализацията (пример за Linux)

/* Леко остаряла информация към 17 декември 1997 г. */

Точният начин, по който локалът е имплементиран, може да варира значително между операционните системи, особено за POSIX реализации преди 1996 г. и преходни.

Стандартът POSIX 1996 е направен по-преносим и независим от изпълнението, като стандартът POSIX.2 означава: - получаване на списък с възможни стойности на локал ('locale -a'). Всички извлечени стойности са известни на системата и могат да бъдат присвоени на променливата на средата LANG=. - дефинирайте нова стойност за локализация. инсталирайте го в системата (localedef). След това става известен на системата и видим чрез `locale -a`.

$ localedef -c -i locales/ru_RU -f ISO_8859-5:1988 ru_RU

Освен това всички тези действия не се различават от система до система (POSIX.2) и тяхното вътрешно изпълнение е скрито от потребителя.

Ако стойността за локализация, от която се нуждаем, не е предварително инсталирана в системата, тя може да бъде добавена към системата с помощта на localedef чрез компилиране на специални (текстови) файлове, описващи параметри за локализация и charmap. /* в пълен POSIX.2; повече подробности в следващата версия на документа*/

За операционната система Linux, много версии на Linux libc са в обращение по едно и също време, с различна степен на локална поддръжка. По-долу е даден кратък преглед на Linux libc версиите.

Исторически погледнато, Linux libc води началото си от безплатната библиотека GNU libc, която в последната си стабилна версия (GNU libc 1.0.9) нямаше поддръжка за локали, различни от "C" и следователно нямаше начин да ги промените. Тази библиотека, след като предостави Linux клона libc 4.x.x и 5.x.x, беше постоянно пренаписвана и в допълнение към други полезни функции, постепенно придоби инструменти за локализиране.

В старата, най-новата библиотека a.out (не-ELF),Linux libc 4.7.5 имаше способността да превключва към други стойности на локал, но само към библиотеки, посочени по време на компилация. За автоматично генериране на *.c файлове с описания на параметрите за локализация бяха използвани специални помощни програми (имплементация от Николай Саух)

В ELF версията на Linux libc 5.0.9 (която стана доста широко разпространена в дистрибуциите на Slackware 2.x, RedHat и Caldera 1.x с ядрото на Linux 1.2.13-ELF), стана възможно да се задават всякакви стойности за локализация.

Но първо, трябва да се обърнем малко към внедряването на локал в Linux libc библиотеката.

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

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

/usr/share/locale/това е константа, която дефинира директорията, в която се съхранява базата за локализация. Различни за различните операционни системи. За Linux вижте LFSSND. Всъщност IMHO _PATH_LOCALE трябва да се използва от

По този начин, ако локализацията е зададена правилно, трябва да съществуват следните директории: (пример)$ ls /usr/share/locale/* C POSIX ru_SU.KOI8-R en_DK.ISO8859-1

* ЗАБЕЛЕЖКА: В пълния POSIX.2 точно същият резултат би бил:$ локал -a C POSIX en_SU.KOI8-R en_DK.ISO8859-1

Файловете ("обекти за локализация") също трябва да съществуват: (пример)$ ls /usr/share/locale/en_SU.KOI8-R/* LC_CTYPE LC_COLLATE LC_MONETARY LC_NUMERIC LC_TIME

Сега въпросът е как да направя тези файлове? ;-) Най-простото нещо е да ги получите в комплекта за разпространение, на ftp-сайтове или от приятели. Можете да ги направите с localedef. Трябва да поставите тези файлове (обекти за локализация) на правилното място и да добавите редове (например към/etc/profile ):LANG=; експортиране на LANG.

В споменатата версия на Linux libc 5.0.9, локалната подсистема работеше точно по този начин, но нямаше помощни програми за създаване на зареждаеми „обекти за локализация“. Тези помощни програми, които бяха част от него, генерираха обекти само за 4.4 BSD lite libc (защо?).

Работните помощни програми localedef и locale се появиха след Linux libc 5.1.x. И тъй като 5.2.1x - Linux libc вече има всичко необходимо за работа с локал в съответствие с POSIX.2.

Широко използваните дистрибуции на RedHat Linux 4.1 и 4.2 използват библиотеката Linux libc 5.3.12, която съдържа напълно функционална локална система. Въпреки това, за съжаление, дистрибуцията на RedHat не включва файлове с "обекти за локализация" за ru_RU.KOI8-R.

GNU Libc обаче също се разви и има версия на GNU Libc 2.0, която поддържа локал на POSIX 1996. Тя е пренесена към Linux и вероятно скоро ще има дистрибуции, използващи GNU Libc 2.0.x вместо Linux libc.

В библиотеката Linux libc 5.4.x, която взе много от GNU Libc 2.0.x, е внедрена следващата версия на кода, локал 2, и обектите за локализация (файлове) от Linux libc версии 5.0.x - 5.3.x) вече не са подходящи. Въпреки това, поради обединяването на POSIX 1996, тези файлове могат лесно да бъдат получени от текстово описание на локализация и файл с описание на набор от символи (charmap).