[ Pobierz całość w formacie PDF ]
.Zgodnie z ustaleniami Free Software Foundation oznacza to, że każdy program skonsolidowany zlibintl musi być rozpowszechniany zgodnie z zasadami licencji GPL.Sposób użyciacatgets(3) jest bardzo podobny do użycia gettext(3), z wyjątkiem tego, że API jest mniejklarowny.Jest to dobrze udokumentowane na stronach podręcznika systemowego GNU libc.W skład podsystemu iconv(3) wchodzą funkcje używane przy konwersji kodów w ramach tegosamego zestawu znaków.Jest to nowocześnie zaprojektowany moduł wykorzystujący powtórnewejścia i z dobrą obsługą wyjątków.Oznacza to, że zestawy znaków zgodne ze sobą nawet wniewielkim stopniu (np.ASCII i EBCDIC) mogą być przekształcane na siebie nawzajem.Podsystem iconv(3) ułatwia także tworzenie aplikacji, w których wymagana jest np.transliteracja (np.liter cyrylicy na kombinacje liter łacińskich).Funkcje tego podsystemuzapewniają możliwość efektywnej konwersji zarówno na zestaw Unicode, jak i z tego zestawu nainny (a więc np.między Unicode i UTF-8).Są one stosowane głównie w celu zapewnieniazgodności z archiwalnymi plikami i przekształcania danych wprowadzanych przez użytkowników.Obecnie zaleca się, aby pliki danych i dane tworzone przez użytkownika były przechowywane wkodowaniu Unicode lub UTF-8 (jeśli rozmiary plików są istotne, to można sprawdzić, że plikzawierający dane w formacie Unicode i skompresowany za pomocą ogólnie znanego algorytmu,np.gzip, będzie miał taki sam rozmiar, jak ten sam plik w formacie ASCII skompresowany zapomocą takiego samego programu).Moduł iconv ułatwia wykorzystanie Unicode lub UTF-8 dozewnętrznej reprezentacji tekstu, niezależnie do umiejscowienia.Rozszerzenia GNU lib dla modeli POSIX i X/OpenBiblioteka GNU libc w wersji 2.i nowszych w pełni korzysta z modeli POSIX i X/Open.Wwersji 2.1 tej biblioteki były wprawdzie jakieś problemy z funkcjami obsługującymi znaki okodach z ustaloną długością w językach azjatyckich, ale powinno to być poprawione już w wersji2.2.Najważniejszą dodatkową właściwością tej biblioteki jest dostarczenie API dla katalogówkomunikatów.Interfejs ten ma nazwę GNU gettext i został utworzony przez Ulricha Dreppera.Problem w zastosowaniu interfejsu catget(3) polega na tym, że wymaga on utrzymywaniauporządkowanego odwzorowania wszystkich komunikatów łącznie z numerem indeksu.Funkcjacatget(3) korzysta z tego indeksu w celu uzyskania dostępu do katalogu.Bardzo utrudnia tozarządzanie katalogiem, ponieważ jeśli nowy komunikat ma być umieszczony międzykomunikatami o numerach 1 i 2, to trzeba byłoby nadać mu numer 3.Dlatego właśnie programistajest zmuszony do utrzymywania rejestru numerów komunikatów, co prowadzi do wielukonfliktów, szczególnie w rozproszonych środowiskach programowania, takich jak np.CVS.Dwajprogramiści przeglądający ten sam katalog powinni widzieć taki sam następny indeks, a więcpotrzebny jest jakiś mechanizm przydzielania indeksów.Oprócz tego, jeśli jakiś katalog dladanego umiejscowienia nie zostanie zaktualizowany lub nie istnieje, to należy użyć w programiezakodowanego na stałe napisu awaryjnego, który wcale nie musi być taki sam, jak napis wodpowiednim katalogu obsługującym rodzimy język programu (zazwyczaj angielski).Moduł gettext w wersji GNU (wywodzący się z prac grupy Uniforum kierowanych przez SunMicrosystems) grupuje awaryjne napisy i numery indeksów do postaci pojedynczych obiektów.Zastosowano tu prostą metodę polegającą na użyciu tabeli asocjacyjnej indeksowanej przez napisyawaryjne.Zoptymalizowano tu także spotykany powszechnie w aplikacjach przypadek stosowaniaoddzielnego katalogu komunikatów dla każdego języka, zezwalając na globalne użycie katalogu.Oznacza to, że wywołanie catgets(3) wymaga podania czterech argumentów (katalog, numerzestawu w katalogu, numer komunikatu i komunikat domyślny), zaś gettext(3) wymagazwykle podania tylko jednego argumentu komunikatu domyślnego.Poważną zaletą modułu gettext jest to, że przeróbka programu polegająca na przystosowaniu godo korzystania z tego modułu jest stosunkowo łatwa.Można do tego użyć skryptu programused(1) wyszukującego napisy w cudzysłowach i pakującego je w wywołania funkcjigettext(3).Oprócz tego, powszechnie jest używana definicja makropolecenia przyjmującegojeden argument o nazwie _ (po prostu zwykłe podkreślenie).Wówczas napis, do którego sięodwołujemy, np
[ Pobierz całość w formacie PDF ]