Opened 17 years ago
Closed 17 years ago
#6864 closed (fixed)
JavaScript i18n support can fail for languages with two plural forms
Reported by: | Ramiro Morales | Owned by: | nobody |
---|---|---|---|
Component: | Internationalization | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
If, as exemplified in the official GNU gettext documentation, the plural form specification headers
"Plural-Forms: nplurals=2; plural=n != 1;\n"
or
"Plural-Forms: nplurals=2; plural=n>1;\n"
are used instead of
"Plural-Forms: nplurals=2; plural=n != 1 ? 1 : 0;\n"
or
"Plural-Forms: nplurals=2; plural=n>1 ? 1 : 0;\n"
respectively in a (Django or application) djangojs.po
catalog, the ngettext()
function fails because the first ones, being C language expressions, rely on the C feature that boolean expressions have to value zero or one. In JavaScript, a boolean in the context of an array index doesn't evaluate to zero or one.
See http://groups.google.com/group/django-users/browse_frm/thread/12f39fe090d39e78?hl=en for the original report by Julien.
This could affect JS i18n for languages that use two-forms pluralization rules, i.e.: Danish, Dutch, English, Faroese, German, Norwegian, Swedish, Estonian, Finnish, Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto, French, Brazilian Portuguese (see the GNU gettext documentation linked above.)
The attached patch modifies the pluralidx()
function to work on both scenarios.
Attachments (1)
Change History (4)
by , 17 years ago
Attachment: | js-i18n-pluralf.diff added |
---|
comment:1 by , 17 years ago
Component: | Uncategorized → Internationalization |
---|
comment:2 by , 17 years ago
Triage Stage: | Unreviewed → Ready for checkin |
---|
comment:3 by , 17 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Thanks, Ramiro. Saved me from having to write this. I agree we need to handle both forms, because the boolean form will be copied from other, similar files.