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. Temu je vzrok dejstvo, da jedro za ime datoteke sprejme vse, razen 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 prikazalo kot ime iz 10 zlogov. Jedro ne "ve" (in mu tega tudi ni treba "vedeti"), da se ti zlogi prikažejo po grško.

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

Drugi datotečni sistemi (nfs, smbfs, ncpfs, hpfs itd.) ne pretvarjajo imen, zato podpirajo imena datotek Unicode 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 vnovičnih 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. To odpravite takole:

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 v istem računalniku, a to dolgoročno ni preveč zabavno). Eden takih 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

Tu 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šega. Da bi ga prevedli v sistemih brez glibc2 (to so skoraj vsi sistemi Linux razen najnovejših), ga morate nastaviti z možnostjo "--disable-nls", drugače se ne bo povezal. Novejše različice s podporo CJK so 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 iz julija 1999 ali novejša. CLISP dobite na naslovu: ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz.

Drugi 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 se 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 izvirni nabor znakov, potem to pretvori v UTF-8.

3.4 Spremenljivke okolja 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 druge spremenljivke LC_*

LC_CTYPE, LC_MESSAGES, LC_COLLATE, LC_NUMERIC, LC_MONETARY, LC_TIME

posamezne spremenljivke za: vrsto 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', če vas zanima podrobnejši opis.)

Vsaka od spremenljivk LC_* in LANG lahko obsega 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 obsega več imen localov, ločenih s podpičji.

Če želite sistemu in vsem programom povedati, 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 treba spreminjati. GNU gettext omogoča pretvorbo prevodov v pravo kodiranje. Dokler ne izide glibc-2.2, morate le nastaviti 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 Izdelovanje 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
. Tu 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 treba narediti localov "de", "fr" ali "sl" brez končnice za državo, ker te locale največkrat uporabljajo 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".

Če želite dodati podporo 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. Če vas zanimajo podrobnosti o LD_PRELOAD si oglejte "man 8 ld.so".

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


Naprej Nazaj Kazalo