Jak zrobić ustawienia lokalne w Linux-ie. (Locales) Peeter Joot, peeter_joot@vnet.ibm.com v1.5, 21 Lipca 1997. Wersja polska: Bartosz Maruszewski B.Maruszewski@zsmeie.torun.pl v1.4, 4 Listopada 1997 Dokument ten opisuje jak skonfigurować twojego Linux-a, aby móc używać pakietu "Locales", czyli ustawień narodowych. Dokument ten jest napisany w standardzie ISO-8859-2. Wersja oryginalna znajduje się pod adresem ftp.icm.edu.pl <ftp://ftp.icm.edu.pl/pub/Linux/sun site/docs/HOWTO/>. Nowsza wersja zawiera uaktualnione wskazania na katalog zawieraj±cy j±dra na ftp.icm.edu.pl ______________________________________________________________________ Spis tre¶ci 1. Wprowadzenie. 2. Co to w ogóle jest pakiet "Locales"? 3. Uwagi. 4. Czego potrzebujesz. 5. Instalacja wszystkiego. 6. I co teraz? 7. Naprawa błędu "catopen". 8. Pytania i odpowiedzi. 8.1 msgcat 9. Zakończenie. 9.1 Od tłumacza. ______________________________________________________________________ 1. Wprowadzenie. To jest naprawdę opis tego co musiałem zrobić, żeby działał u mnie pakiet "Locales". Zrobiłem to tylko dla zabawy, i pomy¶lałem, że może niektórzy chc± sami spróbować. Jak już raz wszystko poustawiasz, powiniene¶ móc używać aplikacji korzystaj±cych z NLS, wraz z twoimi lokalnymi ustawieniami. Już niedługo pakiet "Locales" powinien być czę¶ci± standardowych dystrybucji i większo¶ć z tego co tu napisałem będzie niepotrzebne. 2. Co to w ogóle jest pakiet "Locales"? Jest to pakiet, który zawiera ustawienia specyficzne dla twojego kraju. (zapis daty, czasu, specjalne litery itp.) Ustawień tych nie powinene¶ zapisywać na stałe w swoich programach. Je¶li masz na swoim komputerze zainstalowane ustawienia lokalne dla różnych krajów/języków, to poprzez następuj±ce zmienne możesz kontrolować zachowanie programów korzystaj±cych z nich. Ustawieniem domy¶lnym jest ustawienie wg. standardu C lub POSIX zapisane na stałe w "libc". LANG -- ustawia jakiego języka używamy; może być zmienione przez zmienn± LC_xxxx, LC_COLLATE -- ustawia porz±dek sortowania, LC_CTYPE -- definicje znaków, duże i małe litery... używane jest to przez takie funkcje jak: toupper, tolower, islower, isdigit itp. LC_MONETARY -- definicja formatu liczb zwi±zanych z pieniędzmi. S± tu definicje separatora tysięcy, separatora ułamkowego, symbolu pieni±dza (zł) i miejsce, gdzie należy go umie¶cić, LC_NUMERIC -- separatory tysięcy i ułamkowe oraz grupowanie numeryczne, LC_TIME -- definicja formatu czasowego i datowego. S± tu zdefiniowane np. dni tygodnia, miesi±ce, LC_MESSAGES -- wyrażenia Nie i Tak, LC_ALL -- ustawia jakiego języka używamy i zmienia wszystkie inne zmienne LC_xxxx. Oto niektóre ustawienia, a jest ich znacznie więcej: en_CA -- kanadyjski angielski, en_US -- amerykański angielski, de_DE -- niemiecki niemiecki, fr_FR -- francuski francuski. Je¶li piszesz program i chcesz, aby można go było używać na całym ¶wiecie respektuj ustawienia lokalne. Najważniejszym powodem jest to, że nie każdy będzie używał tego samego zestawu znaków czy strony kodowej co ty. Upewnij się, że nie robisz czego¶ takiego w swoich programach: /* sprawdĽ czy to litera */ if ( (( c >= 'a') && ( c <= 'z' )) || (( c >= 'A') && ( c <= 'Z' )) ) { ... } Je¶li napiszesz co¶ takiego, to zakładasz, że użytkownik będzie używał tylko podstawowych znaków z kodu ASCII i nie bierzesz pod uwagę, iż może używać strony kodowej specyficznej dla swojego kraju. Pomija to takie znaki jak np. a-umlaut, które zostałoby użyte w ¶rodowisku niemieckim. Zamiast tego powiniene¶ raczej używać funkcji, które respektuj± lokalne ustawienia, jak np. isalpha(). Je¶li twój program wyraĽnie wymaga tylko podstawowych znaków ASCII (US-ASCII), dalej używasz funkcji isalpha(), ale musisz także ustawić zmienn± LANG albo LC_CTYPE albo LC_ALL na "C" lub użyć funkcji setlocale(LC_CTYPE, "C"). Ustawienia lokalne pozwalaj± na duż± elastyczno¶ć i robi± pewne założenia, o których programista mógł zapomnieć. Na przykład nie możesz z góry założyć pozycji danego znaku na stronie kodowej. Nic nie stoi na przeszkodzie, żeby¶ np. stworzył sobie stronę kodow±, na której "A" byłoby na pozycji 99 a nie 65. Podstawow± ide± jest to, że różni ludzie mówi± różnymi językami, przetsrzegaj± różnych reguł sortowania, używaj± różnych stron kodowych i mieszkaj± w różnych krajach. Ustawienia lokalne i funkcje, które ich przstrzegaj± daj± ¶rodki na respektowanie takich rzeczy i odpowiedniego ich traktowanie. Nie wymaga to dużego nakładu pracy, tylko trochę innego sposobu my¶lenia podczas pisania takich programów. 3. Uwagi. · Aby ustawienia lokalne na moim komputerze działały musiałem odnowić kilka rzeczy. No i tak: ftp.torun.pdi.net w katalogu /pub/nls/locale. znajduj± się wszystkie potrzebne programy. Nie wiedziałem, że jest osobny pakiet "Locales" i jako¶ się domy¶liłem, że trzeba mieć zainstalowane odpowiednie biblioteki libc i lib.so. Z tego powodu to HOWTO jest w większo¶ci zapisem tego co ja musiałem zrobić, żeby odnowić biblioteki. Je¶li zrobisz to w taki sposób jak ja, będziesz musiał mieć system ELF, albo zmienić swój na taki, jak już ustawisz swoje lokalne definicje. · Wszystko co robiłem, aby odnowić swój system, to to samo, co jest potrzebne, aby przej¶ć z a.out na ELF. Je¶li tego nie zrobiłe¶, albo je¶li zrobiłe¶ to poprzez reinstalację Linux-a, powiniene¶ zdobyć ostatni± wersję ELF-HOWTO. Jest to wspaniały podręcznik, w którym znajdziesz dodatkowe wskazówki dotycz±ce instalacji bibliotek libc, ld.so i innych odnowień do ELF-a. · Przed instalacj± czegokolwiek, przeczytaj odpowiednie pliki dostarczone wraz z wersj± instalacyjn± (README itp.). Je¶li popsujesz sobie co¶, bo Ľle zinterpretowałe¶ co¶, co ja tutaj napisałem, albo przez (oby nie) zrobienie czego¶ co ja zrobiłem, nie wiń mnie proszę. · Je¶li zapomnisz zainstalować now± bibliotekę libc albo ld.so, to możesz doprowadzić nawet do tego, że nie będziesz mógł wystartować systemu. Także lepiej mieć pod ręk± dyskietkę startow±, i upewnij się, że wszelkie krytyczne albo niezamienialne dane s± zarchiwizowane. 4. Czego potrzebujesz. Kilka rzeczy musisz sobie ¶ciagn±ć. Wszystko czego potrzebujesz znajdziesz na ftp.icm.edu.pl Kiedy ja instalowałem u siebie ustawienia lokalne używałem libc-5.2.18, która jest teraz troche przestarzała. Jak na razie powiedziano mi, że bież±c± wersj± jest 5.4.17 i tak± też umieszczam w opisie. Przypuszczalnie libc-5.4.17 będzie przestarzała zanim zd±żysz mrugn±ć więc po prostu użyj najnowszej dostępnej wersji. Rozważ użycie glibc (gnu libc) zamiast Linux libc 5 w pracach unaradawiaj±cych (internalizacyjnych). Glibc jest w pełni unarodowiona i ma pełne wsparcie dla programowania narodowego tak samo jak jest w pełni przenaszalna FIXME i ma wbudowan± obsługę w±tków. Prawie cała internalizacja zrobiona w libc 5 wzięta został± z glibc. Lokalizacje i mapy klawiszy dla glibc s± powi±zane z dodatkami o lokalizacjami glibc. Je¶li jeste¶ za używaniem glibc, to możesz pomin±ć to mini-howto. Doł±czanie dodatków lokalizacyjnych do kompilacji i instalacji glibc jest trywialne i opisane jest w dokumentacji do instalacji glibc. ednak ostrzegam, że pełna aktualizacja nie jest trywialnym zadaniem! Mam nadzieję, że RedHat (którego używam) wypu¶ci niedługo dystrybucję opart± na glibc, bo jako¶ nie u¶miecha mi się rekompilacja całego mojego systemu. Wszystkie poniższe pakiety możesz znaleĽć pod adresem ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/GCC oprócz "make" - /pub/Linux/sunsite/devel/make oraz j±dra - /pub/Linux/kernel/ · ustawienia lokalne i Ľródła zestawów znaków -- to jest to, co kompilujesz, używaj±c localedef, · libc-5.4.x.bin.tar.gz -- biblioteki dzielone w wersji ELF dla bibliotek C i MATH. Zauważ, że prekompilowany dla biblioteki libc-5.4.17 program "localedef" ma przypuszczalnie w sobie bł±d i tworzy LC_CTYPE ze zł± liczb± magiczn±. Oznacza to przypuszczalnie, że jaka¶ stara wersja "localedef" dostała się do dystrybucji. · libc-5.4.x.tar.gz -- Ľródła bibliotek dzielonych w wersji ELF - będziesz tego potrzebował, aby skompilować localedef, · make-3.74.tar.gz -- może będziesz musiał skompilować "make", tak aby zawierał łatę na tzw. dirent bug, · release.libc-5.4.x -- ta wersja zawiera łatę, która pozwala skompilować "make", minęło już sporo czasu odk±d powstał bł±d w libc i przypuszczalnie nie musisz się już tym przejmować. · ld.so-1.8.x -- biblioteka do ł±czenia dynamicznego w wersji ELF, · gcc-2.7.2+ -- kompilator C w wersji ELF, · j±dro 2.0.x -- j±dro w wersji ELF, · binutils 2.7.0.x -- różne narzędzia do binariów potrzebne do kompilacji. 5. Instalacja wszystkiego. Oto co zrobiłem, aby wszystko zainstalować. Miałem już system ELF (kompilator, j±dro ...). 1. Najpierw zainstalowałem pakiet binutils: tar xzf binutils-2.6.0.2.bin.tar.gz -C / 2. Potem zainstalowałem bibliotekę do ł±czenia: tar zxf ld.so-1.7.12.tar.gz -C /usr/src cd /usr/src/ld.so-1.7.12 sh instldso.sh 3. Potem binaria do libc. Przeczytaj odpowiednie pliki dotycz±ce instalacji w release.libc-5.4.17. rm -f /usr/lib/libc.so /usr/lib/libm.so rm -f /usr/include/iolibio.h /usr/...
Porozmawiajmy.TV