Opened 6 years ago
Closed 6 years ago
#29853 closed Bug (needsinfo)
Exported jsi18n ngettext() function doesn't check existence of plural translation before attempting to access it
Reported by: | Mohamed Moustafa | Owned by: | Serhiy Martynenko |
---|---|---|---|
Component: | Internationalization | Version: | 2.1 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
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.
Change History (9)
comment:1 by , 6 years ago
Easy pickings: | set |
---|
comment:2 by , 6 years ago
Description: | modified (diff) |
---|
follow-up: 4 comment:3 by , 6 years ago
comment:4 by , 6 years ago
Replying to 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.
comment:5 by , 6 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:6 by , 6 years ago
Type: | Uncategorized → Bug |
---|
comment:7 by , 6 years ago
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.
comment:8 by , 6 years ago
A question we need to ask the reporter is how a translation literal which is malformed i.e. with quantity of plural forms not obeying the locale's plural forms formula has reached the translation catalog in the first place.
AFAICT the compilemessages/msgfmt stage should have rejected the literal when trying to convert the .po file to .mo.
comment:9 by , 6 years ago
Resolution: | → needsinfo |
---|---|
Status: | assigned → closed |
I'm closing this for now setting the 'We need more information' flag.
Please reopen if you can answer question in comment:8
Do you think it could be related to #29825, https://github.com/django/django/pull/10506