- If user provides no translations at all for singular or plural strings
it will return formatted un-translated string (Works as expected)
- If user provides translations for singular and plural strings it will
return formatted translated string (Works as expected)
- If user provides singular translation BUT no plural translation it will
return undefined (Unexpected and extremely difficult to debug)
This function should rather fallback to singular translation OR use un-
translated plural string in cases where a singular translation is provided
but no plural translation is provided.
--
Ticket URL: <https://code.djangoproject.com/ticket/29853>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* easy: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:1>
Old description:
> In https://docs.djangoproject.com/en/2.0/_modules/django/views/i18n/ the
> following exported javascript function
> {{{
> django.ngettext = function(singular, plural, count) {
> var value = django.catalog[singular];
> if (typeof(value) == 'undefined') {
> return (count == 1) ? singular : plural;
> } else {
> return value[django.pluralidx(count)];
> }
> };
> }}}
> doesn't check the existence of {{{value[1]}}} or {{{value[2]}}} before
> attempting to access them if {{{value}}} itself is defined. Therefore
> will return undefined if user attempts to access plural translation, when
> none is defined.
>
> - If user provides no translations at all for singular or plural strings
> it will return formatted un-translated string (Works as expected)
> - If user provides translations for singular and plural strings it will
> return formatted translated string (Works as expected)
> - If user provides singular translation BUT no plural translation it will
> return undefined (Unexpected and extremely difficult to debug)
>
> This function should rather fallback to singular translation OR use un-
> translated plural string in cases where a singular translation is
> provided but no plural translation is provided.
New description:
In https://docs.djangoproject.com/en/2.0/_modules/django/views/i18n/ the
following exported javascript function
{{{
django.ngettext = function(singular, plural, count) {
var value = django.catalog[singular];
if (typeof(value) == 'undefined') {
return (count == 1) ? singular : plural;
} else {
return value[django.pluralidx(count)];
}
};
}}}
doesn't check the existence of {{{value[1]}}} or {{{value[2]}}} before
attempting to access them if {{{value}}} itself is defined. Therefore will
return undefined if user attempts to access plural translation, when none
is defined.
- If user provides no translations at all for singular or plural strings
it will return formatted **un-translated** string (Works as expected)
- If user provides translations for singular and plural strings it will
return formatted **translated** string (Works as expected)
- If user provides singular translation BUT no plural translation it will
return **undefined** (Unexpected and extremely difficult to debug)
This function should rather fallback to singular translation OR use un-
translated plural string in cases where a singular translation is provided
but no plural translation is provided.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:2>
Comment (by Simon Charette):
Do you think it could be related to #29825,
https://github.com/django/django/pull/10506
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:3>
Comment (by itsmemohamed):
Replying to [comment:3 Simon Charette]:
> Do you think it could be related to #29825,
https://github.com/django/django/pull/10506
Yeah, they both concern the same function but that's a different failure
mode.
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:4>
* owner: nobody => Serhiy Martynenko
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:5>
* type: Uncategorized => Bug
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:6>
Comment (by Serhiy Martynenko):
Do you have example of part of translation file? I tried to reproduce bug
and it looks like JS array with translations as plural has empty string
instead of undefined.
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:7>
Comment (by Ramiro Morales):
A question we need to ask the reported is how a translation literal which
is malformed i.e. with quantity of plural forms not obeying what the
locale's plural forms formula has reached the translation catalog in the
first place.
AFAIC the compilemessages/msgfmt stage should have rejected the literal
when trying to convert the .po file to .mo.
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:8>
* status: assigned => closed
* resolution: => needsinfo
Comment:
I'm closing this for now setting the 'We need more information' flag.
Please reopen if you can answer question in comment:8
--
Ticket URL: <https://code.djangoproject.com/ticket/29853#comment:9>