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