Opened 6 years ago

Last modified 6 years ago

#29853 closed Bug

Exported jsi18n ngettext() function doesn't check existence of plural translation before attempting to access it — at Initial Version

Reported by: Mohamed Moustafa Owned by: nobody
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

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 (0)

Note: See TracTickets for help on using tickets.
Back to Top