Portál AbcLinuxu, 13. května 2025 22:50

Dotaz: Gettext a duplicita

20.2.2009 17:46 Vláďa
Gettext a duplicita
Přečteno: 302×
Odpovědět | Admin

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

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.2.2009 18:08 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Gettext a duplicita
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ktoré riešenie z toho manuálu je nepoužiteľné? Kontext mi pripadá ako dobré riešenie takého problému.
21.2.2009 14:16 JeCh
Rozbalit Rozbalit vše Re: Gettext a duplicita

Díky, to jsem přehlédl. To vypadá jako rozumné řešení.

21.2.2009 00:37 l4m4
Rozbalit Rozbalit vše Re: Gettext a duplicita
Odpovědět | | Sbalit | Link | Blokovat | Admin
Věty poskládáné z kousků jsou tak jako tak nepřeložitelné, protože řada jazyků má úplně jinou větnou strukturu. Tudíž je zbytečná námaha zkoušet to nějak řešit. Gettext podporuje překlady kompletních zpráv s printf()-like formáty, kde pak lze v překladu přehazovat pořadí proměnných ve formátovacím řetězci. Viz Preparing Translatable Strings v manuálu gettextu.

Skloňování programově gettext přeložit neumí, musel by znát gramatiku příslušných jazyků. Odpověď je stejná: překládat kompletní řetězce.

Zůstanou-li i pak nejednoznačnosti, použij prefixy, tj. pgettext() a jeho varianty.
21.2.2009 14:23 JeCh
Rozbalit Rozbalit vše Re: Gettext a duplicita

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.

21.2.2009 16:52 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Gettext a duplicita
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);
I am always ready to learn although I do not always like to be taught. (W. Churchill)
22.2.2009 12:22 l4m4
Rozbalit Rozbalit vše Re: Gettext a duplicita
V pythonu existuje formátovací operátor %, takže lze postupovat stejně.
20.11.2009 09:09 JeChW
Rozbalit Rozbalit vše Re: Gettext a duplicita
Ahoj, omlouvám se, že ještě otevírám toto staré téma. Mám problém s použitím operátoru %s v Pythonu. Pokud ho použiju dvakrát v jednom řetězci a poté načítám zdrojové kódy v Poedit, tak mi hlásí chybu. Ale v programu to funguje.
20.11.2009 11:13 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Gettext a duplicita
Poedit hlásí jakou chybu?
20.11.2009 13:20 JeChW
Rozbalit Rozbalit vše Re: Gettext a duplicita
Hlásí toto:

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.
20.11.2009 14:10 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Gettext a duplicita
Môžeš použiť niečo ako:
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ť)
21.11.2009 16:59 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Gettext a duplicita
To je nějaký specialitka Pythonu? Gettext tohle nezajímá, protože ten překládá celé řetězce a žádné formátování nedělá. Mimochodem v C se místo pojmenovaných argumentů používají řadové (printf(_("%2$s %1$s"), retezec1, retezec2);).
21.11.2009 17:32 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Gettext a duplicita
Áno, je to spôsob, akým sa dajú vypisovať formátované reťazce v Python (String Formatting Operations)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.