Opened 9 months ago
Last modified 6 months ago
#35278 assigned Bug
`ngettext` result can be possibly undefined. — at Initial Version
Reported by: | Piotr Kawula | Owned by: | Piotr Kawula |
---|---|---|---|
Component: | Internationalization | Version: | 5.0 |
Severity: | Normal | Keywords: | ngettext, catalog, i18n, internationalization, |
Cc: | Piotr Kawula, Claude Paroz | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
When the translation engine provide an invalid plural rule the pluralidx
function can return invalid index which will cause the ngettext
to return value that does not exist - undefined
.
Same result can occur when the newcatalog
contains invalid values, for example:
const newcatalog = { '%s something': [], ... }
And in ngettext
we have:
django.ngettext = function(singular, plural, count) { const value = django.catalog[singular]; if (typeof value === 'undefined') { return (count == 1) ? singular : plural; } else { return value.constructor === Array ? value[django.pluralidx(count)] : value; } };
Which in case of empty array go for value[django.pluralidx(count)]
which is undefined.
I think we want the ngettext
function to return string always, if it does not find proper value in catalog, should default to the provided values.