Díky za reakci. asi jsem se upsal a měl jsem na mysli ngettext, díky za opravu.
Funkce překladu chápu takto (opravte mne prosím, zda chápu špatně): gettext - nejjednodušší překlad textu 1:1 do jiného jazyka - tedy ze slovníku django.po podle msgid na msgstr - v template volám pěkné {% trans my_msgid %} - staré překlady jednotného čísla mohou zůstat zachovány - překlady množných čísel nutné připsat formou msgid "human2" msgstr "lidé" msgid "human5" msgstr "lidí" - ale v kódu .py a v templates pak musím ručně detekovat podle počtu, který z překladů použít :( ngettext - přeloží text 1:2 do jiného jazyka dle jednotného nebo množného čísla - tedy ze slovníku django.po podle msgid na msgstr[0] (jednotné číslo) nebo msgstr[1] (množné číslo) - v template musím volat přes zdlouhavé {% blocktrans count %} my_msgid {% plural %} my_msgid {% endblocktrans %} - pro ang stačí, problém ale je např. čeština, která má často 3 tvary slova - jednotný "kus", množné pro 2-4 "kusy", množné pro 0 a 5+ "kusů" - ve slovníku django.po je možné v hlavičce nastavit plural form na 3 tvary podle počtu (tedy česká varianta) - lze pak generovat ve slovníku django.po 3 tvary překladu msgstr[0] a msgstr[1] a msgstr[2]. ale vysvětlujte překladatelce co který tvar znamená :/ * - *staré překlady před pluralizací {% trans my_msgid %} se nepřeloží pgettext - přeloží text 1:N do jiného jazyka dle významu - tedy ze slovníku django.po podle msgctxt (význam) a msgid na msgstr - v template volám pěkně {% trans my_msgid context "1" %} - za pomocí významu lze tak dosadit počet, ale nepřijde mi to správné - staré překlady před pluralizací {% trans my_msgid %} se nepřeloží :( každá metoda překladu množného čísla nese své nedostatky nejvýhodnější forma pluralizace pro češtinu mi v tuto chvíli připadá trojí použití gettext nebo pomíjím vhodnější řešení? Dne středa 14. února 2018 11:14:13 UTC+1 MirekZv napsal(a): > > Nevím. Dokonce ani nevím, co je pgettext (během 2 vteřin jsem si přečetl, > že umožňuje různé překlady v různých kontextech). > Jediné, co vím, že my používáme pro pluralizaci .ngettext. > To je ale v jiném projektu, než ve Djangu, takže k Django templatám > neporadím (ale taky mě to zajímá). > Tipnul bych si ale, že přechod na ngettext by to mohl vyřešit (a ponechat > staré .gettext překlady beze změny). > > > > Dne pondělí 5. února 2018 18:27:15 UTC+1 PavelZet napsal(a): >> >> V Djangu používám pro překlady běžně >> django.utils.translation.gettext >> >> generuji slovník pomocí skriptu makemessages a přeložím konstrukci: >> msgid "human" >> msgstr "člověk" >> >> zkompiluji skriptem compilemessages >> >> a v template volám přes >> {% load i18n %} >> {% trans "human" %} >> >> ...dosud je vše pořádku :) >> >> >> Časem se potřebuji toto slovo také skloňovat do množných čísel podle >> počtu do třech tvarů, např. 1 "člověk", 2 "lidé", 5 "lidí" >> Nabízí se mi pluralizace. >> >> Pokud tedy v Djangu nově využiji >> django.utils.translation.pgettext >> >> vygeneruji slovník pomocí skriptu makemessages >> >> tak dostanu k přeložení konstrukci >> msgid "human" >> msgstr[0] "člověk" >> msgstr[1] "lidé" >> msgstr[2] "lidí" >> Tato konstrukce s jedním msgid je generována společně pro všechna volání >> human přes gettext (resp. lang v template) i přes pgettext. >> Na tom nevidím nic špatného a líbí se mi to. >> >> Pokud ale nyní v template použiji jednoduchý překlad z gettext >> {% load i18n %} >> {% trans "human" %} >> >> *Tak překlad neproběhne :(* >> >> Předpokládal bych, že se pro gettext použije tvar msgstr[0], ale >> nepřeloží se nic. >> >> *Otázka: Opravdu musím všechny překlady tohoto slova VŠUDE dohledat a >> přepsat do pluralizované podoby?* tedy z hezkého >> {% trans "human" %} >> Na ukecané >> >> {% blocktrans count %} human {% plural %} human {% endblocktrans %} >> >> Nebo lze řešit jiným vhodnějším způsobem? >> >> V záloze mám překlady typu >> >> msgid "human" >> msgstr "člověk" >> >> msgid "human2" >> msgstr "lidé" >> >> msgid "human5" >> msgstr "lidí" >> >> >> ale moc se mi to nelíbí. Nerad bych překlady v Djangu uchopil špatně. >> >> Díky moc za reakci. >> >> -- -- E-mailová skupina django-cs@googlegroups.com Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/f94ad112-c5c0-4654-8ebd-ccb6ea320302%40googlegroups.com. Další možnosti najdete na adrese https://groups.google.com/d/optout.