﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34848	Updating translations catalog for javascript files fails with CommandError	Natalia Bidart	Natalia Bidart	"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 [https://github.com/ngnpope/django/blob/main/django/views/templates/i18n_catalog.js django/views/templates/i18n_catalog.js] was upgraded to a ""full javascript"" file in [https://github.com/django/django/pull/16562/files#diff-1b9c97f5db01b8f98f017fc8727caa7c7328f1c9147a906b652127148a698ba8 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."	Bug	closed	Internationalization	5.0	Normal	fixed			Ready for checkin	1	0	0	0	0	0
