Editor Ted
Petr Kolar
Petr.Kolar na vslib.cz
Úterý Březen 7 13:19:29 CET 2000
Dan Ohnesorg <dan na feld.cvut.cz> wrote:
> On Tue, 7 Mar 2000, Pavel Lisy wrote:
>
> > > Podle Czech-HOWTO to ma byt LANG=cs, ale na vsech
> > > mych systemech mam LANG=en_US. A Mark to dela
> > > jako LANG=cs_CZ.
> > >
> > > Takze, jak si to objedname, tak to bude. Ale musime se shodnout
> > > jeste dneska.
> > Toto nevím.
>
> Ja bych se primlouval za to objednat LANG=czech a LC_ALL=cs_CZ, ale neni
> to nijak kriticke, protoze se to stejne preklada pres aliasy, takze czech
> i cs_CZ nakonec vede ke stejnemu definicnimu souboru. Mam pocit, ze ty
> rozdily jsou spise esteticke.
ALE NE!!! V TOMTO OHLEDU NENI CO OBJEDNAVAT. Takhle ma vypadat program
s hlasenimi lokalizovanymi pomoci GNU gettext:
/* Localized program "Hello world" */
/* - an example how to use gettext's message catalogues */
/* */
/* To extract catalogue of messages from the source files use */
/* */
/* xgettext -o hello.pot *.c */
/* */
/* If a version of hello.pot with messages translated into Czech */
/* language is named hello.cs.po then it would be installed using */
/* */
/* msgfmt -o /usr/share/locale/cs/LC_MESSAGES/hello.mo hello.cs.po */
/* */
/* To see localized messages of the program a user must set either */
/* LC_ALL=cs_CZ or LC_ALL=czech (if she wants to have everything */
/* localized) -- or -- LC_MESSAGES=cs_CZ or LC_MESSAGES=czech (if she */
/* wants only messages to be localized) */
/* */
/* Glibc internal mechanism does translation czech -> cs_CZ.ISO-8859-2 */
/* according to /usr/share/locale/locale.alias, while translation */
/* cs_CZ.ISO-8859-2 -> cs_CZ -> cs is done automatically. */
/* */
/* So Czech catalogues SHOULD BE in /usr/share/locale/cs/LC_MESSAGES */
/* but the environment variables MUST NOT be set to cs !!! */
/* In RH we use LANG=cs because of buggy man program; in correct */
/* programs it will be overriden by LC_ALL or other LC_* anyway. */
#include <stdio.h>
#include <locale.h>
#include <libintl.h>
/* You may want to move following two #define lines to e.g. config.h
/* and use #include "config.h" */
#define CATALOGUE "hello"
#define LOCALEDIR "/usr/share/locale"
int
main (int argc, char **argv)
{
/* Initialize locale and select the message catalogue */
setlocale (LC_ALL, "");
/* In some OSes (not in Linux) printf will print numbers in localized */
/* form, which is wrong when the output is to be read by another */
/* program or e.g. in the PostScript commands. In this case it is */
/* necassary to call also setlocale (LC_NUMERIC, "C"); */
bindtextdomain (CATALOGUE, LOCALEDIR);
textdomain (CATALOGUE);
printf(gettext("Hello, world!\n"));
exit (0);
}
Tak to chceme v Tedu a vsude jinde!!!
Cili v programu se explicitne s promennymi prostredi vubec nic nedela;
vse zaridi vyvolani setlocale(LC_ALL, "");. Katalogy s ceskymi texty
maji byt v /usr/share/locale/cs/LC_MESSAGES. Proc?:
Pokud by se v textech nejakeho programu vyskytovaly treba ceske koruny
nebo povidani o vlajce s modrym klinem a a delala by se verze pro
cechoamericany, tak pak by se musela udelat dalsi verze prekladu
s povidanim o americkych dolarech a vlajce s hvezdami a pruhy,
prelozeny katalog by se dal do /usr/share/locale/cs_US/LC_MESSAGES,
a byl by videt pri nastaveni LC_ALL=cs_US. Cely bordel okolo cs_CZ
a cs je kvuli tomu, aby cechoamericanum i pri tomto nastaveni
zobrazovaly katalogy, ktere zadna statni s~pecifika' neobsahuji
a ktere jsou tutiz v /usr/share/locale/cs/LC_MESSAGES - samozrejme
to u cestiny neni tak aktualni jako u de_DE, de_AT, de_CH, fr_CH, fr_FR,
fr_BE, fr_CA, en_CA, en_UK, en_US a dalsich jazyku, kterymi se mluvi
ve vice zemich.
Pokud NEmate nainstalovane take ceske locale ve Windows-1250 nebo v ASCII
(nebo nejste cechoamericani) je uplne jedno jestli nastavite cs_CZ nebo
czech. Pokud ale nastavite LC_ALL nebo LC_CTYPE, LC_COLLATE (pripadne
pouze LANG a nic jineho) na cs, nebudou nalezeny locale v cs_CZ
(klasifikace znaku, trideni, format datumu apod.).
Nastavovani LANG=cs se v RH-cz dela kvuli chybnemu programu man, a
nastavovani LC_CTYPE=cs_CZ (kdyz uz je nastaveno LC_ALL=cs_CZ), kvuli
chybnemu tcsh.
Problemy s tiskem PostScriptu - desetinne carky misto tecek (moc by me
zajimalo, jak k nim na Linuxu muze dojit), lze v programu odstanit
zavolanim setlocale(LC_NUMERIC, "C") po setlocale(LC_ALL, "").
S pozdravem
--
*** Petr Kolar ***
Department of Information Technologies, Technical University of Liberec
Voronezska 1329, 461 17 Liberec, Czech Republic
Phone: +420-48-535-2371 Fax: +420-48-535-2229
E-mail: Petr.Kolar na vslib.cz http://asterix.vslib.cz/staff/kolar.html
Další informace o konferenci Redhat-cz