273 lines
9.0 KiB
HTML
273 lines
9.0 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
|
|
<TITLE>Slovenian HOWTO: Slovenski locale</TITLE>
|
|
<LINK HREF="Slovenian-HOWTO-6.html" REL=next>
|
|
<LINK HREF="Slovenian-HOWTO-4.html" REL=previous>
|
|
<LINK HREF="Slovenian-HOWTO.html#toc5" REL=contents>
|
|
</HEAD>
|
|
<BODY>
|
|
<A HREF="Slovenian-HOWTO-6.html">Next</A>
|
|
<A HREF="Slovenian-HOWTO-4.html">Previous</A>
|
|
<A HREF="Slovenian-HOWTO.html#toc5">Contents</A>
|
|
<HR>
|
|
<H2><A NAME="locale"></A> <A NAME="s5">5. Slovenski locale</A></H2>
|
|
|
|
<P>Z izrazom <EM>locale</EM> 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.
|
|
<P>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:
|
|
<UL>
|
|
<LI><CODE>LC_CTYPE</CODE> (znaki, ki predstavljajo abecedo)</LI>
|
|
<LI><CODE>LC_COLLATE</CODE> (vrstni red znakov v abecedi)</LI>
|
|
<LI><CODE>LC_TIME</CODE> (izpis datuma in ure)</LI>
|
|
<LI><CODE>LC_NUMERIC</CODE> (izpis stevilcnih vrednosti)</LI>
|
|
<LI><CODE>LC_MONETARY</CODE> (izpis valute)</LI>
|
|
<LI><CODE>LC_MESSAGES</CODE> (komunikacije z uporabnikom)</LI>
|
|
</UL>
|
|
<P><CODE>LC_ALL</CODE> 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 <CODE>gettext</CODE>. Prevedeni katalogi sporocil, ki jih
|
|
uporablja mehanizem <CODE>gettext</CODE> se navadno nahajajo v podimenikih
|
|
imenika /usr/share/locale/.
|
|
<P>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 <CODE>textutils</CODE>,
|
|
<CODE>fileutils</CODE> ipd.
|
|
<P>Z nastavitvijo spremenljivke <CODE>LANG</CODE> na slovenski locale se
|
|
spremenijo vsi prilastki:
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
~> date
|
|
Sat Oct 19 22:32:04 METDST 1996
|
|
~> LANG=sl_SI.iso88592 date
|
|
Sob, 19 okt 1996 22:32:04
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
<P>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
|
|
<CODE>LC_COLLATE</CODE>:
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
~> sort abc.tex
|
|
abc
|
|
abca
|
|
abd
|
|
abc
|
|
~> LANG=C LC_COLLATE=sl_SI.iso88592 sort abc.tex
|
|
abc
|
|
abca
|
|
abc
|
|
abd
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
Seveda <CODE>LC_COLLATE</CODE> 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...
|
|
<P>Spremenljivka <CODE>LANG</CODE> ima v splosnem obliko:
|
|
<BLOCKQUOTE>
|
|
<CODE>LANG=<EM>jezik</EM>[_<EM>drzava</EM>[.<EM>nabor</EM>]]</CODE>
|
|
</BLOCKQUOTE>
|
|
|
|
Pri tem je <EM>jezik</EM> dvocrkovna koda jezika, kot jo doloca
|
|
standard
|
|
<A HREF="http://sizif.mf.uni-lj.si/linux/cee/std/ISO_639.html">ISO 639</A>, <EM>drzava</EM> pa dvocrkovna koda drzave,
|
|
dolocena s standardom
|
|
<A HREF="http://sizif.mf.uni-lj.si/linux/cee/std/ISO_3166.html">ISO 3166</A>.
|
|
Zgled za slovenscino, kot se govori v Sloveniji in pise s kodnim
|
|
naborom ISO 8859-2, je torej
|
|
<BLOCKQUOTE><CODE>
|
|
LANG=sl_SI.iso88592
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
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
|
|
<BLOCKQUOTE><CODE>
|
|
LANG=sl
|
|
</CODE></BLOCKQUOTE>
|
|
<P>
|
|
<H2><A NAME="prog-intl"></A> <A NAME="ss5.1">5.1 Programiranje z GNU gettext</A>
|
|
</H2>
|
|
|
|
<P>Paket GNU <CODE>gettext</CODE> ponuja nekaj orodij za lokalizacijo:
|
|
<UL>
|
|
<LI><CODE>xgettext</CODE>, ki iz izvorne kode izlusci sporocila</LI>
|
|
<LI><CODE>msgcmp</CODE>, ki primerja dva kataloga sporocil</LI>
|
|
<LI><CODE>msgmerge</CODE>, zdruzi star preveden katalog sporocil z
|
|
novim, neprevedenim</LI>
|
|
<LI><CODE>msgfmt</CODE>, ki prenosen katalog sporocil prevede v binarno
|
|
obliko</LI>
|
|
<LI><CODE>msgunfmt</CODE>, obratno od <CODE>msgfmt</CODE></LI>
|
|
</UL>
|
|
<P>S kratkim zgledom ilustrirajmo, kako poteka pisanje lokaliziranega
|
|
programa s paketom GNU <CODE>gettext</CODE>.
|
|
<P>
|
|
<OL>
|
|
<LI>Najprej napisemo program zgled.c. Pri pisanju
|
|
programa ze vkljucimo mehanizme internacionalizacije:
|
|
<HR>
|
|
<PRE>
|
|
#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);
|
|
}
|
|
</PRE>
|
|
<HR>
|
|
|
|
</LI>
|
|
<LI>Z ukazom <CODE>xgettext</CODE> iz izvorne kode izluscimo izpise na
|
|
zaslon:
|
|
<BLOCKQUOTE><CODE>
|
|
xgettext zgled.c
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
S tem smo ustvarili datoteko messages.po. To je obicajna
|
|
besedilna datoteka, ki vsebuje skelet prevodov sporocil.
|
|
</LI>
|
|
<LI>Datoteko messages.po z urejevalnikom dopolnimo s
|
|
prevodi, recimo takole:
|
|
<HR>
|
|
<PRE>
|
|
# 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"
|
|
</PRE>
|
|
<HR>
|
|
|
|
</LI>
|
|
<LI>Popravljeno prenosljivo datoteko s sporocili (angl. portable
|
|
message file) messages.po prevedemo v binarno obliko:
|
|
<BLOCKQUOTE><CODE>
|
|
msgfmt -v -o zgled.mo messages.po
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
</LI>
|
|
<LI>Binarno datoteko prestavimo v imenik, kjer jo bo
|
|
<CODE>gettext</CODE> nasel:
|
|
<BLOCKQUOTE><CODE>
|
|
mv zgled.mo /usr/local/share/locale/sl/LC_MESSAGES
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
</LI>
|
|
<LI>Program prevedemo in povezemo s knjiznico libintl.a:
|
|
<BLOCKQUOTE><CODE>
|
|
gcc -o zgled zgled.c -lintl
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
</LI>
|
|
<LI>Pa poskusimo, kaksna je razlika!
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
LANG=C ./zgled
|
|
LANG=sl ./zgled
|
|
LC_ALL=sl ./zgled
|
|
LC_MESSAGES=sl ./zgled
|
|
LC_CTYPE=sl ./zgled
|
|
LC_ALL=sl_SI.iso88592 ./zgled
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
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 <CODE>LC_CTYPE</CODE> namesto uporabljene
|
|
<CODE>LC_MESSAGES</CODE>.
|
|
</LI>
|
|
</OL>
|
|
<P>Se dve opombi: imenik, kamor prestavimo katalog sporocil, se mora
|
|
ujemati z imenikom <CODE>LOCALEDIR</CODE>, navedenim v izvorni
|
|
kodi. Tezavo, da GNU <CODE>gettext</CODE> razume ``sl'' in
|
|
``sl_SI.iso88592'' kot razlicna locala, je pisec teh vrstic resil z
|
|
simbolno povezavo v imeniku /usr/local/share/locale:
|
|
<BLOCKQUOTE><CODE>
|
|
ln -s sl sl_SI.iso88592
|
|
</CODE></BLOCKQUOTE>
|
|
<P>
|
|
<H2><A NAME="gnu-intl"></A> <A NAME="ss5.2">5.2 Poslovenjenje katalogov sporocil</A>
|
|
</H2>
|
|
|
|
<P>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:
|
|
<CODE>enscript</CODE>, <CODE>fileutils</CODE>, <CODE>gettext</CODE>,
|
|
<CODE>grep</CODE>, <CODE>hello</CODE>, <CODE>recode</CODE> in <CODE>tar</CODE>.
|
|
Z nastavitvijo spremenljivke okolja
|
|
<BLOCKQUOTE><CODE>
|
|
LANG=sl
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
bodo programi iz teh paketov izpisovali slovenska sporocila
|
|
namesto angleskih.
|
|
<P>Razprava o poslovenjenju projekta GNU poteka med prejemniki
|
|
elektronskega spiska <CODE><sl@li.org></CODE>, nanj se lahko
|
|
narocite tako, da na naslov
|
|
<A HREF="mailto:sl-request@li.org">sl-request@li.org</A> posljete vrstico
|
|
<BLOCKQUOTE><CODE>
|
|
subscribe
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
v telesu sporocila.
|
|
<P>Pomoc prostovoljcev, ki bi prevedli preostale pakete, ali pa se
|
|
samo zavezali za vzdrzevanje ze prevedenih, je nadvse zazelena.
|
|
Vabljeni!
|
|
<P>
|
|
<HR>
|
|
<A HREF="Slovenian-HOWTO-6.html">Next</A>
|
|
<A HREF="Slovenian-HOWTO-4.html">Previous</A>
|
|
<A HREF="Slovenian-HOWTO.html#toc5">Contents</A>
|
|
</BODY>
|
|
</HTML>
|