České tvary plurálu

33 views
Skip to first unread message

Vladimír Macek

unread,
Mar 18, 2021, 2:23:15 PM3/18/21
to djan...@googlegroups.com
Zdar,

léta žiju v domění, že čeština má tři tvary plurálu:

(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;

tedy
    1 den
    2,3,4 dny
    0,5+ dní

teď jdu na Transifex, abych u příležitosti vydání Django RC doladil
překlady a narazím na čtyři taby pro tvary!

(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1
!= 0 ) ? 2 : 3;

Říkám si, možná jsem náznaky nového řádu světa úspěšně ignoroval.... :-P

Už jsem začál psát bug report. Ale nedalo mi to... a vysvětlení jsem našel:

https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_plural_rules.html

Bolelo to chvíli, ale pochopil jsem, že n%1 testuje celé číslo. :-)

0,5 dne....  pecka :-)

Nevím, kdo a jak to na Transifexu změnil. Spousta zdrojů na Netu pořád pro
češtinu uvádí tři tvary...

Člověk se i na stará kolena učí. :-D Jestli někdo z vás ví nějaké
pozadí/historii, třeba kdy došlo ke kodifikaci v Unicodu, rád se dozvím.

--

Děkuji. S pozdravem
Vladimír Macek | +420 608 978 164

Vítek Pliska

unread,
Mar 18, 2021, 3:13:59 PM3/18/21
to djan...@googlegroups.com
Narazil jsem na to už před delší dobou když to změnili v djangu a mě začaly blbnout po soubory. Ale moc jsem nebadal. Tedy jestli to správně chápu tak žen čtvrtý tvar vlastně není plurál ale genitiv? (Neboli původník ci přisvojník, jeee)

Vítek 

čt 18. 3. 2021 v 19:23 odesílatel Vladimír Macek <ma...@sandbox.cz> napsal:
--
--
E-mailová skupina djan...@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+...@googlegroups.com.
Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/6235e4f6-3726-c9ec-ba72-d76fba127b22%40sandbox.cz.

Vladimír Macek

unread,
Mar 18, 2021, 7:44:35 PM3/18/21
to djan...@googlegroups.com

Vítku, fakt díky! :-O Ani jsem tedy nemusel vědět, že v češtině se genitiv ještě dělí na posesivní a partitivní... uáááááá.


Anyway... udělal jsem na Transifexu testovací překlad, abych věděl, jak přiřazuje následující taby ve svém UI tvarům českého plurálu:

Výsledek je toto:

    msgid "Please submit at least %d form."
    msgid_plural "Please submit at least %d forms."
# pro n=1:
    msgstr[0] "Odešlete nejméně %d formulář.  (p=0, '1')"
# pro n=2|3|4
    msgstr[1] "Odešlete nejméně %d formuláře. (p=1, 'pár')"
# pro n necelé, řekněme si třeba "půl"
    msgstr[2] "Odešlete nejméně %d formuláře. (p=2, 'mnoho')"
# pro n=0|5|6|...
    msgstr[3] "Odešlete nejméně %d formulářů. (p=3, 'ostatní')"

Přidělení těch labelů v UI je tedy ne moc intuitivní, za mě bych poslední dva dal "půl" a "mnoho", ale co už. (Požádal jsem o překladatelství samotného Transifexu, tak uvidíme, jestli se mi podaří to upravit.)

Při pohledu do PO souboru zřejmě došlo k automatizovanému "rozduplikování" dříve posledního tvaru plurálu (p=2) do nového p=3. Což není v češtině obecně správné, jak je vidět i v tomto případě. Nevím, ze kterého tvaru se mělo nejlépe kopírovat...

Michal Čihař na konci diskuse https://code.djangoproject.com/ticket/30439 uvádí, že gettext má "n" vždy integer. Pokud to tak je, situace p=2 nikdy nenastane a tudíž v Djangu nikdy neuvidíme chybné:

"0,5 let"

protože v PO pro django-core bylo nyní po tom (zřejmě automatizovaném a nekonzultovaném) zásahu chybně definováno:

msgstr[2] "%d let"

Ach jo. Až se typové schopnosti gettextu rozšíří, nějaký nešťastník bude muset všechny plurálové překlady projít. Některé jsem teď fixnul v rámci revize Issues na Transifexu.

A cs Django je připraveno na release, bylo to naštěstí jen pár nových stringů na překlad.

Mějte se!

V.

Reply all
Reply to author
Forward
0 new messages