#34848 closed Bug (fixed)
Updating translations catalog for javascript files fails with CommandError
| Reported by: | Natalia Bidart | Owned by: | Natalia Bidart |
|---|---|---|---|
| Component: | Internationalization | Version: | 5.0 |
| Severity: | Normal | 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
Running the command to update the translations catalog for the djangojs domain fails with the following error:
xgettext: warning: msgid '' is used without plural and with plural.
./views/templates/i18n_catalog.js:52: Here is the occurrence without plural.
./views/templates/i18n_catalog.js:60: Here is the occurrence with plural.
Workaround: If the msgid is a sentence, change the wording of the sentence; otherwise, use contexts for disambiguation.
CommandError: errors happened while running msguniq
/home/nessita/fellowship/django/django/conf/locale/djangojs.pot:22: context separator <EOT> within string
/home/nessita/fellowship/django/django/conf/locale/djangojs.pot:23: context separator <EOT> within string
msguniq: found 2 fatal errors
As far as I have been able to debug, these errors come from these two lines from the django/views/templates/i18n_catalog.js file:
let value = django.gettext(context + '\x04' + msgid);
and
let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count);
This file django/views/templates/i18n_catalog.js was upgraded to a "full javascript" file in PR #16562: before this change, the javascript for the i18n_catalog was inline in the i18n.py module.
The generated pot for this file looks like this:
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 14:48-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: views/templates/i18n_catalog.js:52 views/templates/i18n_catalog.js:60 msgid "" msgid_plural "" msgstr[0] "" msgstr[1] ""
It seems that we need to have a way to skip fetching translations for the i18n_catalog.js file. An immediate workaround is to use this command:
django-admin makemessages -l en --domain=djangojs -i views/templates/i18n_catalog.js
But I think we may need to provide a more standard/common way to generate this catalogs so future contributors do not need to go thru this debugging. One option would be to provide a toplevel Makefile with a rule to update translations catalogs.
Change History (8)
comment:1 by , 2 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
| Triage Stage: | Unreviewed → Accepted |
| Type: | Bug → Cleanup/optimization |
comment:2 by , 2 years ago
comment:4 by , 2 years ago
| Patch needs improvement: | set |
|---|---|
| Type: | Cleanup/optimization → Bug |
comment:5 by , 2 years ago
| Patch needs improvement: | unset |
|---|
comment:6 by , 2 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
We already have a section in the command where we detect usage for Django itself (setting
invoked_for_django = True), so one solution would be to add that specific path toself.ignore_patternsin that same section of the code.