Naprej Nazaj Kazalo

3. Nastavitev locale

3.1 Datoteke in jedro

V imenih datotek je že mogoče uporabljati znake iz Unicode brez sprememb v jedru ali orodjih za delo z datotekami. Vzrok temu je dejstvo, da jedro za ime datoteke sprejme vse z izjemo zloga "null" in '/', ki je določen za ločevanje podimenikov. Pri kodiranju z UTF-8, se ne-ASCII znaki nikoli ne bodo pretvorili v zlog "null" ali poševnico. Zgodi se le, da ime datoteke ali imenika porabi več zlogov, kot ima znakov v imenu. Na primer ime iz petih grških znakov se bo v jedru pojavilo kot ime iz 10 zlogov. Jedro ne "ve" (in mu tega tudi ni potrebno "vedeti"), da se ti zlogi prikažejo po grško.

To je splošna teorija, dokler z datotekami upravlja samo Linux. V datotečnih sistemih, ki jih uporabljajo tudi drugi operacijski sistemi, morate poskrbeti za pretvorbo imen iz/v UTF-8.

Ostali datotečni sistemi (nfs, smbfs, ncpfs, hpfs itd.) ne pretvarjajo imen, zato podpirajo Unicode imena datotek v UTF-8 samo, če jih podpira tudi operacijski sistem na drugi strani. Da se bodo datotečni sistemi vpeli s pravilno možnostjo tudi ob ponovnih vpetjih, dodajte te možnosti v četrti stolpec ustreznih vrstic v datoteki /etc/fstab.

3.2 TTY in jedro

TTY je neke vrste dvosmerna cev med dvema programoma, ki omogoča zanimive lastnosti, npr. "odmev" pritisnjenih tipk ali urejanje v ukazni vrstici. V xtermu lahko poženete "cat" brez argumentov, vnesete in urejate lahko poljubno število vrstic, ki se "odbijejo" nazaj vrstica za vrstico. Pri jedru postopki urejanja niso pravilni, še posebej odziv na tipki Backspace in Tab ni pravilen. To odpravite na naslednji način:

3.3 Splošna pretvorba podatkov

Potrebovali boste program za pretvorbo vaših lokalno (najverjetneje po ISO-8859-1 ali 2) kodiranih dokumentov v UTF-8 (druga možnost bi bila, da še naprej uporabljate različno kodirane dokumente na istem računalniku, kar pa dolgoročno ni preveč zabavno). Eden takšnih programov je `iconv', ki se ga dobi poleg glibc-2.1. Enostavno vtipkajte

$ iconv --from-code=ISO-8859-2 --to-code=UTF-8 < stara_datoteka > nova_datoteka

Tukaj sta še priročna lupinska skripta "i2u" i2u.sh (za pretvorbo iz ISO v UTF) in "u2i" u2i.sh (za pretvorbo iz UTF v ISO). Prilagodite si ju v skladu z vašim trenutnim 8 bitnim naborom znakov.

Če nimate nameščenega glibc-2.1 in iconv, lahko namesto tega uporabite GNU recode 3.5. "i2u" i2u_recode.sh je "recode ISO-8859-1..UTF-8", in "u2i" u2i_recode.sh je "recode UTF-8..ISO-8859-1". Recode dobite na ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz ali ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz. Opombe: potrebujete GNU recode 3.5 ali novejši. Da ga prevedete na sistemih brez glibc2 (to so skoraj vsi sistemi Linux razen najnovejših), ga morate nastaviti z možnostjo "--disable-nls", sicer se ne bo povezal. Novejše različice s podporo za CJK se nahajajo na naslovu http://www.iro.umontreal.ca/contrib/recode/.

Namesto tega lahko uporabite tudi CLISP. Na voljo sta tudi "i2u" i2u.lisp in "u2i" u2i.lisp v lispu. Potrebna je različica z julija 1999 ali novejša. CLISP dobite na naslovu: ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz.

Ostali programi za pretvorbo podatkov, manj zmogljivi od GNU recode, so `trans' ( ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113.tar.gz), `tcs' od operacijskega sistema Plan9 ( ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.gz) in `utrans' / `uhtrans' / `hutrans' ( ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz) avtorja G. Adama Stanislava ( adam@whizkidtech.net).

Za ponavljajočo pretvorbo datotek v UTF-8 iz različnih naborov znakov lahko uporabite polavtomatsko orodje: to-utf8 prikaže ne-ASCII dele datoteke uporabniku, da vnese originalni nabor znakov, potem to pretvori v UTF-8.

3.4 Spremenljivke okoja za locale

Verjetno imate nastavljene naslednje spremenljivke okolja, ki se nanašajo na locale:

LANGUAGE

nadomešča LC_MESSAGES, uporablja jo samo GNU gettext

LC_ALL

nadomešča vse ostale spremenljivke LC_*

LC_CTYPE, LC_MESSAGES, LC_COLLATE, LC_NUMERIC, LC_MONETARY, LC_TIME

posamezne spremenljivke za: tip znakov in kodiranje, sporočila v naravnem jeziku, pravila za urejanje, obliko številk, obliko denarnih zneskov, prikaz datuma in časa

LANG

privzeta vrednost za vse spremenljivke LC_*

(Oglejte si `man 7 locale' za podrobnejši opis.)

Vsaka od spremenljivk LC_* in LANG lahko vsebuje ime locale naslednje oblike.

jezik[_območje[.nabor_znakov][@modifikator]

kjer jezik pomeni kodo jezika po ISO 639 (z malimi črkami), območje pomeni kodo države po ISO 3166 (z velikimi črkami), nabor_znakov je samoumeven, modifikator pa označuje posebne značilnosti (npr. posebno narečje, nestandardno črkovanje).

Spremenljivka LANGUAGE lahko vsebuje več imen localov ločenih s podpičji.

Da sistemu in vsem programom poveste, da uporabljate UTF-8, morate vsem imenom locale dodati končnico UTF-8. Če ste npr. uporabljali

LC_CTYPE=sl_SI
ga boste spremenili v
LC_CTYPE=sl_SI.UTF-8

Spremenljivke okolja LANGUAGE vam ni potrebno spreminjati. GNU gettext ima možnost pretvoriti prevode v pravo kodiranje. Dokler ne izide glibc-2.2, je vse, kar morate storiti to, da nastavite spremenljivko okolja OUTPUT_CHARSET.

$ export OUTPUT_CHARSET=UTF-8
glibc-2.2 ne bo potreboval te spremenljivke, saj jo bo znal sam izpeljati iz spremenljivke LC_CTYPE.

3.5 Izdelava podpornih datotek za locale

Če imate nameščen glibc-2.1, glibc-2.1.1 ali glibc-2.1.2, najprej z uporabo "localdef --help" preverite, ali je sistemski imenik za razporeditev znakov enak /usr/share/i18n/charmaps. Nato popravite datoteko /usr/share/i18n/charmaps/UTF8 z ustreznim popravkom glibc21.diff, glibc211.diff ali glibc212.diff. Zatem naredite podporno datoteko za vsak UTF-8 locale, ki ga nameravate uporabljati, npr.:

$ localedef -v -c -i sl_SI -f UTF8 /usr/share/locale/sl_SI.UTF-8
Tukaj morate podati absolutno pot, sicer bo localedef naredil locale v imeniku "sl_SI.utf8", kar ne bo delovalo z XFree86-4.0.1.

Največkrat vam ni potrebno narediti localov "de", "fr" ali "sl" brez končnice za državo, ker te locale največkrat uporabljaja samo spremenljivka LANGUAGE, ne pa spremenljivke LC_*, LANGUAGE pa samo nadomešča LC_MESSAGES.

3.6 Dodajanje podpore v knjižnico C

Glibc-2.2 bo podpiral večzložne locale, še posebej locale UTF-8, ki smo jih naredili malo prej. Glibc-2.1.x pa tega v resnici ne podpira. Zato bo edini učinek prej omenjene izdelave datotek /usr/share/locale/sl_SI.UTF-8/* ta, da bo `setlocale(LC_ALL,"")' vrnil "sl_SI.UTF-8" v skladu z vašimi spremenljivkami okolja, namesto da bi odrezal končnico ".UTF-8".

Da dodate podporo za locale UTF-8, boste morali prevesti in namestiti naslednje tri knjižnice:

Potem lahko spremenljivko okolja LD_PRELOAD nastavite, da kaže na nameščene knjižnice:
$ export LD_PRELOAD=/usr/local/lib/libutf8_plug.so:/usr/local/lib/libiconv_plug.so:/usr/local/lib/libintl_plug.so
Potem bodo v vsakem programu, ki uporablja te spremenljivke okolja, funkcije v libutf8_plug.so, libiconv_plug.so in libintl_plug.so nadomestile prvotne v /lib/libc.so.6. Za več informacij o LD_PRELOAD si oglejte "man 8 ld.so".

Vsega tega ne bo več treba počenjati, ko izide glibc2-2.


Naprej Nazaj Kazalo