Portál AbcLinuxu, 13. května 2025 22:50
Zdravím,
potřeboval bych poradit s gettextem. V anglickém zdrojáku se mi například vyskytuje slovo "to" to ale můžu přeložit do češtiny jako "do" nebo "k". Další podobné problémy nastávají se skloňováním. Jak se dá tohle vyřešit?
Problém je, že v textu jsou proměnné, takže se vše rozpadá opravdu jenom na jedno nebo dvouslovné kousky vět, které se pokaždé musí přeložit trochu jinak. Takže řešení, které nabízí manuál gettextu je pro mě nepoužitelné.
Díky,
Vláďa
Máš pravdu, asi jsem si to chtěl až příliš zjednodušit, ale ono je to složitější. Asi by to opravdu chtělo mít vždy celé věty. Ale jak na to?
Dejme tomu, že mám proměnnou "filename" a můj aktuální string v programu je _("File")+" "+filename+" "+_("was not found.")
Překlad druhé části je "nebyl nalezen". Ale v jiném místě programu bude stejný anglický řetězec, ale překlad by měl být "nebyla nalezena". Takto jsem to myslel s tím skloňováním. No každopádně bych nějak potřeboval dostat celou větu do jednoho řetězce pro gettext. Jak na to? Používám Python.
Asi by to opravdu chtělo mít vždy celé věty. Ale jak na to?Jak bylo řečeno výše - použít nějakou
sprintf
funkce. Nevím, jak je to v Pythonu, ale např. v PHP bych to napsal takhle:
$msg = sprintf(_("File %s was not found"), $filename);
17:41:47: s:\programy\portable_pygtk\_filmsynth/open_media.py:360: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
17:41:47: The translator cannot reorder the arguments.
17:41:47: Please consider using a format string with named arguments,
17:41:47: and a mapping instead of a tuple for the arguments.
text = _('%(retazec)s : %(dalsiRetazec)s [%(cislo)i]\n') % {'retazec': 'XXX', 'dalsiRetazec': 'YYY', 'cislo': 125}(a prekladatelia potom, v prípade potreby, môžu tie parametre presúvať)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.