Dal�� P�edchoz� Obsah

5. Locales aneb lokalizace knihovny libc

Vladim�r Michl [email protected], Petr Kol�� [email protected]: 5. 1. 1999

Term�nem "locale" nebo "locales" se rozum� lokalizace funkc� poskytovan�ch knihovnou libc nebo glibc. Vzhledem k tomu, �e slu�by t�to knihovny pou��v� v�t�ina program�, ovlivn� se t�m chov�n� t�m�� cel�ho syst�mu.

5.1 ��el locales a jejich kategorie

Locales umo��uj�, aby se jednotliv� programy chovaly podle n�rodn�ch zvyklost�: aby spr�vn� fungovalo rozli�ov�n� znak� na p�smena, ��slice a ostatn� znaky, p�smen na velk� a mal�, p�evody mezi mal�mi a velk�mi p�smeny (to jsou sp��e z�le�itosti znakov� sady ne� n�rodn�ch zvyklost�, ale i to je zahrnuto v locales), �azen� (t��d�n�) znak� a �et�zc�, aby programy pou��valy v dan� zemi a jazyce obvykl� zp�sob z�pisu pen�n�ch �daj�, v�pis� ��sel, data a �asu, n�zv� m�s�c� a dn� v t�dnu. Locales �zce souvis� s katalogy zpr�v, kter� umo��uj�, aby programy vypisovaly sv� hl�en� ve zvolen�m jazyce. V�e je p�itom mo�n� m�nit, ani� by bylo nutn� programy rekompilovat!

Lokalizaci libc je mo�n� nastavit bu� kompletn�, nebo pouze pro vybran� kategorie. Kategorie locales jsou uvedeny v tabulce.


Kategorie
V�znam
LC_COLLATE Popisuje v�echny znaky abecedy a ur�uje jejich po�ad� p�i lexikografick�m t��d�n�.
LC_CTYPE Pou��v�na pro d�len� znak� do t��d jako: mal�, velk� p�smena, odd�lova�e, apod..
LC_MESSAGES Pou��v�na pro zpr�vy zobrazovan� programy, tzv. katalogy zpr�v.
LC_MONETARY Definuje form�tov�n� v�pis� pen�n�ch informac�.
LC_NUMERIC Definuje form�tov�n� v�pis� ��sel.
LC_TIME Form�t v�pisu �asu a data, n�zvy a zkratky m�s�c� a dn� v t�dnu.
Kategorie locales.

Kategorie LC_COLLATE ovliv�uje chov�n� funkc� strcoll() a strxfrm() pro porovn�v�n� �et�zc�.

Kategorie LC_CTYPE ovliv�uje chov�n� funkc� deklarovan�ch v souboru ctype.h jako jsou isupper(), toupper(), ... a funkc� pro pr�ci s v�cebajtov�mi znaky jako jsou mblen(), wctomb().

Kategorie LC_MONETARY a LC_NUMERIC ovliv�uj� chov�n� funkce localeconv(), na n�kter�ch syst�mech bohu�el i funkce ze skupiny printf().

Kategorie LC_TIME ovliv�uje chov�n� funkce strftime().

5.2 Zp�sob nastavov�n� locales

P�ev�n� v�t�ina program� vol� funkci setlocale(LC_ALL, ""), kter� inicializuje locales podle hodnot prom�nn�ch prost�ed�, jejich� n�zvy jsou stejn� jako kategorie locales, a podle prom�nn�ch LC_ALL a LANG.

V knihovn� libc/glibc je vestav�n mechanismus, d�ky kter�mu se vyhodnocov�n�, jak� lokalizace se m� pou��t pro ur�itou kategorii, prov�d� n�sledovn�: Je-li nastavena prom�nn� LC_ALL, pou�ije se jej� hodnota. Pokud nastavena nen�, pak se zkoum� nastaven� prom�nn�ch LC_kategorie. Pokud nen� nastavena ani prom�nn� pro p��slu�nou kategorii, rozhoduje nastaven� prom�nn� LANG. Nen�-li nastavena ani prom�nn� LANG, pou�ije se implicitn� hodnota "C". N�kter� programy (nap��klad man 1.x) nastaven� prom�nn�ch LC_* ignoruj� a ��d� se pouze podle prom�nn� LANG.

Zm�n�n� prom�nn� se nastavuj� na hodnoty tvaru:

jazyk[_ZEM�[.k�dov�n�]]

nebo l�pe na n�kterou z p�ezd�vek definovan�ch v souboru locale.alias --- to je czech pro �e�tinu, slovak pro sloven�tinu. D�ky p�ezd�vce se hodnota p�evede na cs_CZ.ISO-8859-2 nebo sk_SK.ISO-8859-2, co� ud�v� jak k�dov�n�, tak jazyk a zemi. Locale soubory se d�ky mechanismu zabudovan�mu do knihovny libc hledaj� postupn� v adres���ch cs_CZ.ISO-8859-2, cs_CZ.iso88592, cs_CZ, cs.ISO-8859-2, cs.iso88592 a nakonec v cs.

Zkratky jazyk� stanovuje norma ISO 639, zkratky zem� norma ISO 3166 (viz kapitola p��loha). K�d �e�tiny je cs, sloven�tiny sk, k�d �esk� republiky CZ, Slovenska SK. Zem� se uv�d� z toho d�vodu, �e n�kter�mi jazyky se mluv� ve v�ce zem�ch, ve kter�ch se nap��klad pou��v� jin� m�na.

Pon�kud matouc� je fakt, �e k�d �e�tiny se li�� od k�du �esk� republiky. Ale i mezi jazyky, kter� se pou��vaj� v jedin� zemi to nen� ojedin�l� p��pad: podobn� je to u da_DK (d�n�tina, D�nsko), ja_JP (japon�tina, Japonsko). V p��pad� cs_CZ je v�ak o d�vod ke zmaten� v�ce, proto�e k�d �e�tiny je shodn� s ISO k�dem b�val�ho �eskoslovenska.

P��pona .k�dov�n� by m�la slou�it k v�b�ru spr�vn�ch locale informac� na po��ta��ch, kter� pro ur�it� jazyk podporuj� n�kolik k�dov�n� (v Evropsk�ch podm�nk�ch asi pouze ISO-8858-x a Unicode), nebo naopak ur�it� k�dov�n� nepodporuj� (nap��klad ISO-8859-2). Bohu�el v r�zn�ch syst�mech se pro k�dov�n� pou��vaj� r�zn� �et�zce, tak�e je mo�n� se setkat se z�pisy ISO-8859-2, ISO_8859-2, ISO8859-2, iso88592, za kter�mi je�t� n�kdy b�v� dvojte�ka a rok p�ijet� standardu k�dov�n� ISO-8859-2. Pokud nemus�te, je lep�� p��ponu .k�dov�n� v�bec nepou��vat.

5.3 Kter� kategorie locales pou��vat

P�esto�e v mnoha n�vodech je lakonick� sd�len� "nastavte prom�nnou LANG na cs_CZ" (nebo cs, n�kde dokonce je�t� chybn� cz), je u�ite�n� se zamyslet, jestli skute�n� chcete nastavovat v�echny kategorie. Nemus� se v�m nap��klad l�bit lokalizovan� v�pis p��kazu ls -l, v n�m� mohou b�t rozhozeny sloupce kv�li r�zn� d�lce zkratek n�zv� m�s�c�, n�kter� programy nebo skripty mohou dokonce p�i nastaven� LC_ALL nebo LANG �patn� fungovat (zejm�na kdy� na n�kter�ch syst�mech nastaven� locales ovliv�uje i takov� funkce jako je printf()).

Nav�c auto�i program� ne v�dy dob�e rozli�uj� (pokud u� v�bec pou��vaj� locales), kdy program produkuje v�pisy pro u�ivatele a kdy v�pisy pro dal�� zpracov�n� n�jak�m programem (nap��klad z�pis do konfigura�n�ho souboru). Ve druh�m p��pad� by se lokalizovan� funkce nem�ly pou��vat. Bohu�el u mnoha program� to lze t�ko odli�it (typick�m p��kladem jsou ��dkov� p��kazy jako p��kaz ls -l, kter� m��e b�t jak vyvol�n u�ivatelem, tak pou�it v jin�m programu nebo skriptu).

P�i psan� skript� by m�lo b�t v�dy zaji�t�no, �e skripty budou fungovat i p�i rozli�n� nastaven� lokalizaci. Pokud se ve skriptech o�ek�v�, �e v�stupy program� budou v nelokalizovan� form�, mus� b�t na za��tku skriptu uvedeny p��kazy


LC_ALL=C; export LC_ALL
LANG=C; export LANG

Nastaven� prom�nn� LC_ALL by m�lo b�t posta�uj�c�; prom�nn� LANG se nastavuje, aby spr�vn� fungovaly i programy, kter� nespr�vn� pou��vaj� pouze tuto prom�nnou.

Pro pr�ci se znakovou sadou ISO-8859-2 je velice vhodn� m�t nastaven� p�inejmen��m LC_CTYPE. Bez n�j nebudou fungovat n�kter� kl�vesnice v X, v textov�ch editorech nebudou spr�vn� rozezn�v�ny hranice slov (tak�e nap��klad slovo u�ovka nep�jde v editoru vi smazat p��kazem dw, ale bude nutn� pou��t 3dw, jako by se jednalo o t�i slova).

5.4 Softwarov� po�adavky

Knihovna glibc (alias libc6 nebo libc2) funguje s locales vcelku bez probl�m� (od verze 2.0.7 obsahuje i �esk� locales). To se v�ak ned� ��ci o knihovn� libc5. Ve v Linuxu pom�rn� roz���en� verzi libc-5.3.12 jsou pr�v� v oblasti locales chyby, kter� p�i nevhodn�ch hodnot�ch v sekci LC_TIME zp�sob� p�d programu localedef. Obvykle se doporu�uje libc verze alespo� 5.4.17.

Na syst�mech, kter� maj� libc i glibc je nutn� u ji� p�elo�en�ch program� zjistit, s jakou variantou knihovny libc pracuj�. Bohu�el nap��klad v syst�mu Red Hat 5.x p��kaz ldd `which program` zcela bezosty�n� l�e.

D�le je t�eba m�t odpov�daj�c� utility `localedef' a `locale', a pokud chcete p�ekl�dat katalogy zpr�v, tak tak� utility `gencat' a `msgfmt'.

5.5 Instalace

Nejd��ve zjist�te v jak�m stavu m� v� syst�m locales: P��kazem


localedef --help

zjist�te (podle ��dku s textem System's directory for character maps:), v jak�m adres��i jsou o�ek�v�ny mapy znak�. U syst�m� s libc5 to b�v� /usr/share/nls/charmap, u syst�m� s glibc /usr/share/i18n/charmaps. Dal�� popis je ps�n pro syst�my s libc5, proto�e u�ivatel� glibc syst�m� pravd�podobn� u� budou m�t locales nainstalovan�. Pokud ne, mus� si v n�sleduj�c�m popisu upravit cesty v p��kazech podle vlastn�ho syst�mu. Pozor na 's', kter� ve jm�nech adres��� locale(s) a charmap(s) n�kde je a n�kde nen�!

Pokud v tomto adres��i chyb� soubor s popisem znakov� sady ISO-8859-2 (zkuste �ol�kov� z�pis ISO*8859-2*), budete si muset st�hnout soubor http://www.inf.upol.cz/~michlv/ftp/WG15-collection.tar.gz rozbalit jej do libovoln�ho adres��e a z rozbalen�ho adres��e WG15-collection zkop�rovat adres��e charmaps a locales v�etn� obsahu do adres��e, ve kter�m se o�ek�v� adres�� s mapami znak�:


cp -r WG15-collection/charmaps /usr/share/nls/charmap
cp -r WG15-collection/locales /usr/share/nls/locale

Pokud u� na va�em syst�mu zm�n�n� soubory jsou, bude sta�it nainstalovat pouze �esk� nebo slovensk� locales. Alespo� �esk� by u� m�ly b�t v glibc 2.0.7; a pokud jste instalovali �eskou kl�vesnici do X11 z bal�ku XKB-czsk-forcedIM*, m�te �esk� a slovensk� locales u� tak� nainstalovan�. O tom je mo�n� se p�esv�d�it p��kazem


locale -a | grep ^cs

V�dy je v�ak vhodn� st�hnout zdrojov� soubor s �esk�mi locales ftp://ftp.fi.muni.cz/pub/localization/locale/cs_CZ a um�stit jej do adres��e /usr/share/nls/locale. V mnoha bal�c�ch je toti� star� verze tohoto souboru, ve kter� mimo jin� nemus� fungovat spr�vn� t��d�n�.

Zdrojov� soubor s �esk�mi locales je nutn� p�elo�it do bin�rn� podoby pro libc p��kazy


cd /usr/share/locale
mkdir -p cs_CZ/LC_MESSAGES
localedef -c -i /usr/share/nls/locale/cs_CZ \
  -f /usr/share/nls/charmap/ISO*8859-2* ./cs_CZ

pro glibc p��kazy


mkdir -p /usr/share/locale/cs_CZ/LC_MESSAGES
localedef -c -i /usr/share/i18n/locales/cs_CZ \
  -f /usr/share/i18n/charmaps/ISO-8859-2 /usr/share/locale/cs_CZ

V�sledkem bude adres�� /usr/share/locale/cs_CZ obsahuj�c� sadu soubor� se jm�ny LC_* a adres�� LC_MESSAGES.

V��e uveden� p��kazy m��ete tak� pou��t, pokud se v�m nel�b�, �e v dod�van�ch �esk�ch locales jsou na m�st� zkratek jmen m�s�c� pou�ity pln� n�zvy, co� zp�sobuje rozh�zen� v�pisu produkovan�ho p��kazem ls -l. Sta�� opravit n�zvy uveden� v sekci abmon ve zdrojov�m souboru /usr/share/i18n/locales/cs_CZ a locales znovu p�elo�it.

Pak u� m��ete nastavovat prom�nn� LC_CTYPE, LC_COLLATE nebo LC_ALL a LANG a kochat se, jak to funguje.

Nap��klad aby spr�vn� fungovala klasifikace znak�, je t�eba nastavit prom�nnou prost�ed� LC_CTYPE. V shellech bash a ksh se to provede p��kazem


export LC_CTYPE=cs_CZ

v csh a tcsh p��kazem


setenv LC_CTYPE cs_CZ

a ve star��ch shellech vych�zej�c�ch z Bourne shellu, sh, a jsh p��kazem


LC_CTYPE=cs_CZ
export LC_CTYPE

Pro nastaven� v�ech kategori� locales je t�eba nastavit prom�nnou prost�ed� LANG nebo LC_ALL.

Pokud chcete, aby �esky byly pouze zpr�vy vypisovan� programy, nastavte prom�nnou LC_MESSAGES:


export LC_MESSAGES=cs_CZ

5.6 Jak to funguje

P�i nastaven� n�kter� z prom�nn�ch prost�ed� ovl�daj�c�ch locales se najde v souboru /usr/share/locale/locale.alias odpov�daj�c� hodnota, podle kter� se vybere adres�� z /usr/share/locale (nebo se tento adres�� vybere p��mo). V adres��i odpov�daj�c�m vybran�mu jazyku jsou bin�rn� soubory vygenerovan� p��kazem localedef z textov�ch locales. Jm�na soubor� jsou n�sleduj�c�:

LC_COLLATE, LC_MESSAGES, LC_NUMERIC, LC_CTYPE, LC_MONETARY, LC_TIME.

Pokud n�kter� soubor sma�ete a vytvo��te m�sto n�j adres�� se stejn�m jm�nem, pak se po nov�m vygenerov�n� soubor� utilitou `localedef' soubor um�st� do tohoto adres��e se jm�nem za��naj�c�m p�edponou SYS_.

Tohoto se nej�ast�ji vyu��v� u LC_MESSAGES, kdy jsou do tohoto adres��e um�s�ov�ny katalogy zpr�v pro r�zn� programy. Katalog zpr�v je soubor, v n�m� jsou um�st�ny v�echny zpr�vy vypisovan� programem nebo skupinou program� a jeho� z�m�nou lze doc�lit zm�ny jazyka, kter�m program komunikuje.

V p��pad� katalog� zpr�v lze p�edepsat, kde se tyto katalogy maj� hledat, pomoc� prom�nn� prost�ed� NLSPATH.

Nap�:
        export NLSPATH=/usr/share/locale/%L/LC_MESSAGES/%N.cat

kde %N znamen� jm�no katalogu.
    %L znamen� jm�no lokalizace (kategorie LC_MESSAGES).

Za oba tyto atributy si program dosad� spr�vn� hodnoty, kdy� pot�ebuje informace o zvyklostech zem�.

Pokud je t�eba v NLSPATH zadat v�ce adres���, odd�luj� se dvojte�kou.

5.7 Katalogy zpr�v aneb programy komunikuj�c� �esky

Jedn�m z c�l� lokalizace je umo�nit, aby si u�ivatel mohl vybrat, v jak�m jazyce budou jednotliv� programy vypisovat sv� hl�en�, menu, apod., a to bez rekompilace program�. Aby to bylo mo�n�, mus� b�t texty v�ech zpr�v, kter� program produkuje, z n�j vyta�eny a um�st�ny v n�jak�m extern�m souboru (katalogu zpr�v). Jeho z�m�nou za jin� se dos�hne zm�ny v�ech zpr�v. V sou�asn� dob� se pou��vaj� dva zp�soby jak to prov�st:

ad a) Star�� a tak� p�i programov�n� pracn�j�� �e�en�. Paraleln� s programem je t�eba vytv��et textov� katalog zpr�v, ze kter�ho se nakonec pomoc� `gencat' vytvo�� katalog v bin�rn�m tvary (kter� m�v� p��ponu .cat). Pro p��stup do katalogu se v programu pou��vaj� funkce catopen, catclose, catgets (popis viz man).

ad b) Nov�j�� �e�en�, jednodu��� pro tvorbu a �dr�bu program�. Pro jeho pou�it� je nutn� bal�k gettext. V programu se pak ka�d� zpr�va, kterou vypisuje, nap��e jako argument funkce gettext. Po zm�n� programu pak sta�� vygenerovat seznam v�ech zpr�v, kter� jsou v programu, a tyto zpr�vy p�elo�it. Nov� katalog lze tak� spojit se star�m, ji� p�elo�en�m. Zdrojov� tvar katalogu se pro pou�it� programem p�ev�d� do bin�rn�ho tvaru tzv. objektu zpr�v (soubor m�v� p��ponu .mo nebo .gmo) utilitou `msgfmt'.

P�i obou postupech se v�sledn� katalog zpr�v um�st� do adres��e /usr/share/locale/cs_CZ.*/LC_MESSAGES.

Po�e��ov�n�

Nejprve je t�eba zjistit, zda je aplikace napsan� internacion�ln�. To lze n�kolika zp�soby:

Pokud aplikace internacion�ln� napsan� nen�, pak m�me sm�lu, nebo ji m��eme upravit.

Je-li internacion�ln� napsan�, je t�eba zjistit, kter� ze dvou v��e popsan�ch, pak m��e pou��vat jeden ze dvou mn� zn�m�ch zp�sob� a to:

  1. funkce knihovny libc (catopen, catclose, catgets)
  2. GNU gettext (integrov�n do GNU libc 2.xx (libc-6))

Funkce knihovny libc

Tento zp�sob je star�� a pravd�podobn� p�enositeln�j�� na jin� opera�n� syst�my. V�echny zpr�vy z programu jsou vyta�eny do katalogu (m�v� p��ponu .msg, .m), kter� m��e b�t rozd�len na n�kolik ��st�. Katalog vypad� n�sledovn�:

$set cislo #Nazev
$ #Jmeno_zpravy1 d�le pozn�mky, t�eba origin�ln� zpr�va
# Vlastn� zpr�va 1
$ #Jmeno_zpravy2 d�le pozn�mky, t�eba origin�ln� zpr�va
# Vlastn� zpr�va 2
...

��dky kter� za��naj� znakem '$', nejsou um�st�ny do v�sledn�ho katalogu. '$set cislo #Nazev' je p��kaz, kter� ud�v� ��slo mno�iny a jej� symbolick� n�zev. T�mto mus� za��nat ka�d� katalog. D�le pokra�ujeme v�dy po dvou ��dc�ch, p�itom prvn� ��dek je nepovinn�, pouze definuje symbolick� jm�no zpr�vy.

$ #Jmeno_zpravy1 d�le pozn�mky, t�eba origin�ln� zpr�va # Vlastn� zpr�va 1

Tak�e pokud m�me naps�n katalog, m��eme jej zkompilovat p��kazem gencat, jeho� syntaxe je:

gencat [-new] [-or] [-lang C|C++|ANSIC] catfile msgfile [-h <header-file>]...
        -new generuje nov� katalog
        -lang pro jak� jazyk m� b�t vytvo�en hlavi�kov� soubor
        catfile jak se m� jmenovat katalog
        msgfile soubor zpr�v
        -h hlavi�kov�_soubor generovat hlavi�kov� soubor tohoto jm�na

Po kompilaci ji� m�me v�sledn� katalog, kter� pak sta�� um�stit do adres��e s ostatn�mi katalogy.

!!!POZOR!!! Pokud p�ekl�d�me katalog z jin�ho jazyka, je t�eba zachovat po�ad� i po�et zpr�v.

P��klad:

Ud�l�me mal� p��klad pou�it� tohoto zp�sobu:

  1. Nap��eme program test.c
    #include <locale.h>
    #include <stdio.h>
    #include <features.h>
    #include <nl_types.h>
    
    #include "test-cat.h"
    
    char main() {
            nl_catd cfd;
    
            setlocale(LC_MESSAGES, "");
            cfd = catopen("test", MCLoadBySet);
    
            printf("%s\n", catgets(cfd, TestlistSet, TestlistWelcome, "Welcome in test program"));
    /* "Welcome in test program" se vyp��e v~p��pad�, �e zpr�va nen� v~katalogu nalezena,
       nebo katalog nebyl nalezen */
            printf("%s\n", catgets(cfd, TestlistSet, TestlistAuthor, "Author: Vladimir Michl"));
            catclose(cfd);
            return 0;
    }
    
  2. Nap��eme soubor zpr�v test.m:
    $set 10 #Testlist
    $ #Welcome
    # V�tejte v testovac�m programu
    $ #Autor
    # Autor: Vladimir Michl
    
  3. Zkompilujeme soubor zpr�v do katalogu:
    gencat -new -lang C test.cat test.m -h test-cat.h
    
  4. Program p�elo��me:
    gcc -o test test.c
    
  5. Um�st�me katalog do adres��e s �esk�mi katalogy a nastav�me prom�nnou NLSPATH do tohoto adres��e
    mv test.cat /usr/share/locale/cs_CZ.iso88592/LC_MESSAGES
    export NLSPATH=/usr/share/locale/%L/LC_MESSAGES/%N.cat
    
  6. Nastav�me prom�nnou LC_ALL a spust�me test
    LC_ALL=C test
    LC_ALL=cs_CZ.ISO-8859-2 test
    

GNU gettext

K tomuto zp�sobu je t�eba si st�hnout GNU gettext z n�jak�ho FTP. J� osobn� pova�uji tento zp�sob za daleko lep�� ne� prvn�.

Katalogy zpr�v b�vaj� ve dvou tvarech a to s p��ponou .pot a .po. S p��ponou .pot jsou to pouze zpr�vy vyta�en� ze zdroj�k�, kde�to soubory s p��ponou .po jsou soubory, kter� ji� maj� alespo� n�kter� zpr�vy p�elo�en�. .po soubor m� n�sleduj�c� strukturu:

V�jimku tvo�� prvn� dvojice msgid a msgstr, kde se uv�d� informace o konkr�tn�m katalogu.

P��klad .po souboru:

# Czech translations for the GNU gettext messages
# Copyright (C) 1996 Free Software Foundation, Inc.
# Vladimir Michl <[email protected]>, 1997.
# Version: 1.1
#
msgid ""
msgstr ""
"Project-Id-Version: fileutils 3.15a\n"
"POT-Creation-Date: 1997-01-26 00:26-0600\n"
"PO-Revision-Date: 1997-04-23 20:21+0200\n"
"Last-Translator: Vladimir Michl <[email protected]>\n"
"Language-Team: Czech <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8-bit\n"

#: src/chgrp.c:144
msgid "group number"
msgstr "��slo skupiny"

#: src/chgrp.c:290 src/chmod.c:234 src/chown.c:254 src/cp-aux.c:86
#: src/dd.c:1121 src/df.c:576 src/dircolors.c:121 src/du.c:238
#: src/install.c:625 src/ln.c:347 src/ls.c:2805 src/mkdir.c:70 src/mkfifo.c:68
#: src/mknod.c:79 src/mv.c:407 src/rm.c:543 src/rmdir.c:94 src/sync.c:46
#: src/touch.c:262
msgid ""
"\n"
"Report bugs to [email protected]"
msgstr ""
"\n"
"Popis chyb zas�lejte na adresu [email protected] (pouze "
"anglicky),\n"
"popis chyb v~p�ekladu zas�lejte na adresu [email protected]"

Pokud se t�sn� p�ed msgid vyskytne ��dek #, fuzzy, pak je tento �et�zec pova�ov�n za ne�pln� p�elo�en�. Nap�:

#, fuzzy
msgid "OK"
msgstr "xxx"

Pro pr�ci s katalogem existuje n�kolik utilit:

Zkompilovan� katalogy mus� m�t p��ponu .mo.

P��klad pou�it�:

  1. Nap��eme program test.c
    #include <locale.h>
    #include <stdio.h>
    #include <libintl.h>
    
    #define PACKAGE "test"
    #define LOCALEDIR "/usr/share/locale"
    
    char main() {
            setlocale(LC_MESSAGES, "");
            bindtextdomain (PACKAGE, LOCALEDIR);
            textdomain (PACKAGE);
    
            printf("%s\n", gettext("Welcome in test program"));
            printf("%s\n", gettext("Author: Vladimir Michl"));
            return 0;
    }
    
  2. Vytvo��me katalog zpr�v pou�it�m p��kazu xgettext
    xgettext test.c
    
  3. P�elo��me zpr�vy a vypln�me hlavi�ku v souboru messages.po. V�sledek bude vypadat takto:
    # Czech translation of test.
    # Vladimir Michl <[email protected]>, 1997.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: test 1.0\n"
    "POT-Creation-Date: 1997-05-02 16:28+0000\n"
    "PO-Revision-Date: 1997-05-02 18:00+0200\n"
    "Last-Translator: Vladimir Michl <[email protected]>\n"
    "Language-Team: Czech <[email protected]>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=ISO-8859-2\n"
    "Content-Transfer-Encoding: 8bit\n"
    
    #: test.c:13
    msgid "Welcome in test program"
    msgstr "V�tejte v~testovac�m programu"
    
    #: test.c:14
    msgid "Author: Vladimir Michl"
    msgstr "Autor: Vladim�r Michl"
    
  4. Katalog p�elo��me
    msgfmt -v -o test.mo messages.po
    
  5. P�elo��me zdroj�k
    gcc -o test test.c -lintl
    
  6. P�elo�en� katalog um�st�me do adres��e s katalogy a spust�me program
    mv test.mo /usr/share/locale/cs_CZ.iso88592/LC_MESSAGES
    LC_ALL=C test
    LC_ALL=cs_CZ.ISO-8859-2 test
    

Zdroje informac�

Manu�lov� str�nky: catopen(3), catclose(3), catgets(3), locale(7), setlocale(3) Info str�nky: gettext

Dostupn� katalogy

P�ehled programov�ch bal�k�, kter� jsou lokalizov�ny i kter� na lokalizaci teprve �ekaj� naleznete na http://www.inf.upol.cz/~michlv/gnu-loc.shtml.

Katalogy je mo�n� z�skat na http://www.inf.upol.cz/~michlv/ftp/catalogs/ nebo ftp://ftp.fi.muni.cz/pub/localization/locale/catalogs/. Katalogy pro LyX jsou na ftp://merkur.econ.muni.cz/pub/lyx.cz/. Pro KDE jsou �esk� a slovensk� katalogy k dispozici v podadres���ch po/cs/ a po/sk/ jednotliv�ch adres��� na ftp://ftp.ujep.cz/pub/OS/Linux/terezka.ujep.cz/kde/src/.

P��lohy

N�kter� k�dy jazyk� podle normy ISO 639:

arab�tina `ar', ��n�tina `zh', �e�tina `cs', d�n�tina `da', holand�tina `nl', angli�tina `en', Esperanto `eo', fin�tina `fi', francouz�tina `fr', hebrej�tina `he', n�m�ina `de', �e�tina `el', ma�ar�tina `hu', ir�tina `ga', ital�tina `it', indon�tina `id', japon�tina `ja', korej�tina `ko', latina `la', nor�tina `no', per�tina `fa', pol�tina `pl', portugal�tina `pt', ru�tina `ru', sloven�tina `sk', slovin�tina `sl', �pan�l�tina `es', �v�d�tina `sv', ture�tina `tr', ukrajin�tina `uk'.

N�kter� k�dy zem� podle normy ISO 3166:

�esk� republika `CZ', Slovensko `SK', N�mecko `DE', Francie `FR', Polsko `PL', Rakousko `AT', Spojen� st�ty `US'.


Dal�� P�edchoz� Obsah