#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 , 14 months ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
Triage Stage: | Unreviewed → Accepted |
Type: | Bug → Cleanup/optimization |
comment:2 by , 14 months ago
comment:4 by , 14 months ago
Patch needs improvement: | set |
---|---|
Type: | Cleanup/optimization → Bug |
comment:5 by , 14 months ago
Patch needs improvement: | unset |
---|
comment:6 by , 14 months 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_patterns
in that same section of the code.