Next Previous Contents

5. Slovenski locale

Z izrazom locale oznacujemo skupek lastnosti programskega okolja, odvisnih od jezikovnega in kulturnega okolja uporabnika. Mednje sodi informacija o tem, kateri znaki so crke in kaksen je njihov vrstni red, nacin izpisa datuma in ure, izbiro locila v zapisu decimalnih stevil (vejica oz. pika), zapis valute in sporocila programov uporabniku.

Programski vmesnik za internacionalizacijo in lokalizacijo na sistemih, zdruzljivih s standardi POSIX, je definiran v standardu ISO/IEC 9899 (Programski jezik ISO C) ter IEEE 1003.2 (POSIX.2). Informacije, pomembne za lokalizacijo, razvrsca v sest kategorij:

LC_ALL zajema vseh nastetih sest kategorij. Medtem ko projekt GNU pri izvedbi prvih petih kategorijah zvesto sledi standardu, se je v sesti odlocil za njegovo razsiritev. Standardizacijski komite se namrec ni mogel zediniti okrog izvedbe ravnanja s prevodi sporocil, zato je standard v tej tocki prakticno neuporaben: doloca le prevode za ``da'' in ``ne''. Projekt GNU je zato razvil svojo metodo, to je paket GNU gettext. Prevedeni katalogi sporocil, ki jih uporablja mehanizem gettext se navadno nahajajo v podimenikih imenika /usr/share/locale/.

Sledi nekaj primerov odziva poslovenjenega sistema. Primeri so pobrani s HP-UX, ker je lokalizacija Linuxa zaenkrat se v teku -- knjiznica GNU libc 2.0 in kasnejse izpeljanke sicer ze ponujajo okvir za lokalizacijo, izvedba pa zaenkrat se zaostaja, zato koncepta zaenkrat se ne moremo ilustrirati s programi iz paketov textutils, fileutils ipd.

Z nastavitvijo spremenljivke LANG na slovenski locale se spremenijo vsi prilastki:

~> date
Sat Oct 19 22:32:04 METDST 1996
~> LANG=sl_SI.iso88592 date
Sob, 19 okt 1996 22:32:04

Lahko pa jih spreminjamo tudi vsakega posebej. Ce zelimo obdrzati angleske izpise, obliko datuma, decimalno piko ipd., zeleli pa bi, da gre urejanje crk po slovenski abecedi, spremenimo samo LC_COLLATE:

~> sort abc.tex 
abc
abca
abd
abc
~> LANG=C LC_COLLATE=sl_SI.iso88592 sort abc.tex
abc
abca
abc
abd
Seveda LC_COLLATE ne resi vseh problemov v zvezi z urejanjem. Pri razvrscanju kastiljskih kraljev bi, recimo, zeleli, da pride Alfonz IX. za Alfonzem VIII. in pred Alfonzem X. Kar pa je verjetno ze problem za umetno inteligenco...

Spremenljivka LANG ima v splosnem obliko:

LANG=jezik[_drzava[.nabor]]
Pri tem je jezik dvocrkovna koda jezika, kot jo doloca standard ISO 639, drzava pa dvocrkovna koda drzave, dolocena s standardom ISO 3166. Zgled za slovenscino, kot se govori v Sloveniji in pise s kodnim naborom ISO 8859-2, je torej
LANG=sl_SI.iso88592
Dolocitev drzave in nabora znakov je neobvezna (pomembna je seveda pri jezikih, ki se govorijo v vec drzavah; kaksen locale uporabljajo Slovenci v zamejstvu, je piscu teh vrstic neznano), tako lahko pisemo na kratko
LANG=sl

5.1 Programiranje z GNU gettext

Paket GNU gettext ponuja nekaj orodij za lokalizacijo:

S kratkim zgledom ilustrirajmo, kako poteka pisanje lokaliziranega programa s paketom GNU gettext.

  1. Najprej napisemo program zgled.c. Pri pisanju programa ze vkljucimo mehanizme internacionalizacije:
    #include <locale.h>
    #include <stdio.h>
    #include <libintl.h>
    
    #define PACKAGE   "zgled"
    #define LOCALEDIR "/usr/local/share/locale"
    
    char main() {
        setlocale (LC_MESSAGES, "");
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
    
        printf("%s\n", gettext("This is a short example."));
        printf("%s\n", gettext("Author: Primoz Peterlin"));
        return(0);
    }
    

  2. Z ukazom xgettext iz izvorne kode izluscimo izpise na zaslon:
    xgettext zgled.c
    S tem smo ustvarili datoteko messages.po. To je obicajna besedilna datoteka, ki vsebuje skelet prevodov sporocil.
  3. Datoteko messages.po z urejevalnikom dopolnimo s prevodi, recimo takole:
    # Slovenski prevod zgleda
    # Primoz Peterlin, <primoz.peterlin@biofiz.mf.uni-lj.si>
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: zgled 1.0\n"
    "POT-Creation-Date: 1998-12-06 14:05:53+0100\n"
    "PO-Revision-Date: 1998-12-06 15:00:00+0100\n"
    "Last-Translator: Primoz Peterlin <peterlin@biofiz.mf.uni-lj.si>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=ISO-8859-2\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Xgettext-Options: \n"
    "Files: zgled.c\n"
    
    #: zgled.c:13
    msgid "This is a short example."
    msgstr "To je kratek zgled."
    
    #: zgled.c:14
    msgid "Author: Primoz Peterlin"
    msgstr "Avtor: Primoz Peterlin"
    

  4. Popravljeno prenosljivo datoteko s sporocili (angl. portable message file) messages.po prevedemo v binarno obliko:
    msgfmt -v -o zgled.mo messages.po
  5. Binarno datoteko prestavimo v imenik, kjer jo bo gettext nasel:
    mv zgled.mo /usr/local/share/locale/sl/LC_MESSAGES
  6. Program prevedemo in povezemo s knjiznico libintl.a:
    gcc -o zgled zgled.c -lintl
  7. Pa poskusimo, kaksna je razlika!
    LANG=C ./zgled
    LANG=sl ./zgled
    LC_ALL=sl ./zgled
    LC_MESSAGES=sl ./zgled
    LC_CTYPE=sl ./zgled
    LC_ALL=sl_SI.iso88592 ./zgled
    
    V prvem in zadnjem primeru je izpisano sporocilo anglesko, v predzadnjem pa verjetno tudi. V prvem zato, ker smo eksplicitno zahtevali locale ``C'', v zadnjem pa zato, ker smo zahtevali locale ``sl_SI.iso88592'', v katerem ni prevoda sporocil -- to namrec obstaja za locale ``sl''. V predzadnjem zgledu smo uporabili pravi locale, a irelevantno kategorijo LC_CTYPE namesto uporabljene LC_MESSAGES.

Se dve opombi: imenik, kamor prestavimo katalog sporocil, se mora ujemati z imenikom LOCALEDIR, navedenim v izvorni kodi. Tezavo, da GNU gettext razume ``sl'' in ``sl_SI.iso88592'' kot razlicna locala, je pisec teh vrstic resil z simbolno povezavo v imeniku /usr/local/share/locale:

ln -s sl sl_SI.iso88592

5.2 Poslovenjenje katalogov sporocil

V teku je internacionalizacija projekta GNU (programi iz projekta GNU predstavljajo znaten del celotnega sistema Linux in vecino tistega, s cimer se sooca koncni uporabnik). Trenutno so v slovenscino ze prevedena sporocila za naslednje pakete GNU: enscript, fileutils, gettext, grep, hello, recode in tar. Z nastavitvijo spremenljivke okolja

LANG=sl
bodo programi iz teh paketov izpisovali slovenska sporocila namesto angleskih.

Razprava o poslovenjenju projekta GNU poteka med prejemniki elektronskega spiska <sl@li.org>, nanj se lahko narocite tako, da na naslov sl-request@li.org posljete vrstico

subscribe
v telesu sporocila.

Pomoc prostovoljcev, ki bi prevedli preostale pakete, ali pa se samo zavezali za vzdrzevanje ze prevedenih, je nadvse zazelena. Vabljeni!


Next Previous Contents

mirror server hosted at Truenetwork, Russian Federation.