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.

Reply via email to