Portál AbcLinuxu, 7. listopadu 2025 05:10
#include <stdio.>
#include <libintl.h>
int main() {
setlocale("","");
bindtextdomain("xxx","/home/phero/dev/sandbox/c");
textdomain("xxx");
printf(gettext("fuck\n"));
}
na to pustim
xgettext xxx.c msginit -l cs_CZ.utf8 --input=messages.po msgfmt cs.pomsgfmt cs.po vytvory messages.mo a ten prejmenuju na xxx.mo a kopnu do /home/phero/dev/sandbox/c/cs/LC_MESSAGES locale -a vypise mimo jine cs_CZ.utf8
LC_MESSAGES=cs_CZ.utf8 ./xxx # nezobrazi prekladjak podrobneji funguje setlocale(LC_ALL,"")? (jelikoz se nepouziva autotools tak neni kde vzit LC_ALL) co delam spatne? jak to debuggovat? diky A nejde mi o to naucit se jak se to pouziva, a nikdy by me ani nenapadlo podobnym zpusobem sesmoleny kod distribuovat spis se chci kouknout jak to gettext pak davat dohromady.
#include <locale.h>(a potom by malo fungovať aj setlocale(LC_MESSAGES, "cs_CZ.utf8");).
.
ale je ted mony pouzit setlocale(LC_ALL,""); podle gettext manualu. stejne tak jsem zkousel na tvrdo do zdrojaku dat setlocale(LC_MESSAGES,"cs_CZ.UTF-8"), no priklad se furt ignore
phero@radegast ~/dev/sandbox/c $ LANG=cs_CZ.UTF-8 LC_ALL=cs_CZ.UTF-8 locale LANG=cs_CZ.UTF-8 LC_CTYPE="cs_CZ.UTF-8" LC_NUMERIC="cs_CZ.UTF-8" LC_TIME="cs_CZ.UTF-8" LC_COLLATE="cs_CZ.UTF-8" LC_MONETARY="cs_CZ.UTF-8" LC_MESSAGES="cs_CZ.UTF-8" LC_PAPER="cs_CZ.UTF-8" LC_NAME="cs_CZ.UTF-8" LC_ADDRESS="cs_CZ.UTF-8" LC_TELEPHONE="cs_CZ.UTF-8" LC_MEASUREMENT="cs_CZ.UTF-8" LC_IDENTIFICATION="cs_CZ.UTF-8" LC_ALL=cs_CZ.UTF-8 phero@radegast ~/dev/sandbox/c $ LANG=cs_CZ.UTF-8 LC_ALL=cs_CZ.UTF-8 ./xxx fuck
Bylo to tim
#include <locale.h>ktere nadefinovalo LC_ALL, takze slo pak do kodu pridat
setlocale(LC_ALL,"");a gettext se pak (podle strace) zacal divat po lokalizacnich souborech diky a respect
kopnu do /home/phero/dev/sandbox/c/cs/LC_MESSAGES
Já jsem ho musel pojmenovat cs_CZ, aby mi to fungovalo (ale nemám tušení proč) - třeba je to i tento případ.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.