Portál AbcLinuxu, 16. července 2025 20:48
#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");).
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
#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.