Fixed #6106 -- Prevented makemessages from changing .po files when up to date.

Co-authored-by: Daniyal Abbasi <abbasi.daniyal98@gmail.com>
This commit is contained in:
Ad Timmering 2021-11-09 21:32:58 +09:00 committed by Mariusz Felisiak
parent 0b95a96ee1
commit 4bfe8c0eec
5 changed files with 71 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import re
import sys
from functools import total_ordering
from itertools import dropwhile
from pathlib import Path
import django
from django.conf import settings
@ -208,7 +209,7 @@ class Command(BaseCommand):
requires_system_checks = []
msgmerge_options = ['-q', '--previous']
msgmerge_options = ['-q', '--backup=none', '--previous', '--update']
msguniq_options = ['--to-code=utf-8']
msgattrib_options = ['--no-obsolete']
xgettext_options = ['--from-code=UTF-8', '--add-comments=Translators']
@ -615,13 +616,14 @@ class Command(BaseCommand):
if os.path.exists(pofile):
args = ['msgmerge'] + self.msgmerge_options + [pofile, potfile]
msgs, errors, status = popen_wrapper(args)
_, errors, status = popen_wrapper(args)
if errors:
if status != STATUS_OK:
raise CommandError(
"errors happened while running msgmerge\n%s" % errors)
elif self.verbosity > 0:
self.stdout.write(errors)
msgs = Path(pofile).read_text(encoding='utf-8')
else:
with open(potfile, encoding='utf-8') as fp:
msgs = fp.read()

View File

@ -804,3 +804,37 @@ class NoSettingsExtractionTests(AdminScriptTestCase):
out, err = self.run_django_admin(['makemessages', '-l', 'en', '-v', '0'])
self.assertNoOutput(err)
self.assertNoOutput(out)
class UnchangedPoExtractionTests(ExtractorTests):
work_subdir = 'unchanged'
def setUp(self):
super().setUp()
po_file = Path(self.PO_FILE)
po_file_tmp = Path(self.PO_FILE + '.tmp')
if os.name == 'nt':
# msgmerge outputs Windows style paths on Windows.
po_contents = po_file_tmp.read_text().replace(
'#: __init__.py',
'#: .\\__init__.py',
)
po_file.write_text(po_contents)
else:
po_file_tmp.rename(po_file)
self.original_po_contents = po_file.read_text()
def test_po_remains_unchanged(self):
"""PO files are unchanged unless there are new changes."""
_, po_contents = self._run_makemessages()
self.assertEqual(po_contents, self.original_po_contents)
def test_po_changed_with_new_strings(self):
"""PO files are updated when new changes are detected."""
Path('models.py.tmp').rename('models.py')
_, po_contents = self._run_makemessages()
self.assertNotEqual(po_contents, self.original_po_contents)
self.assertMsgId(
'This is a hitherto undiscovered translatable string.',
po_contents,
)

View File

@ -0,0 +1,4 @@
from django.utils.translation import gettext as _
string1 = _('This is a translatable string.')
string2 = _('This is another translatable string.')

View File

@ -0,0 +1,26 @@
# 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: 2014-04-25 15:39-0500\n"
"PO-Revision-Date: 2014-05-25 15:39-0500\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"
#: __init__.py:3
msgid "This is a translatable string."
msgstr "And this has been translated."
#: __init__.py:4
msgid "This is another translatable string."
msgstr "And this also has been translated."

View File

@ -0,0 +1,3 @@
from django.utils.translation import gettext as _
string3 = _('This is a hitherto undiscovered translatable string.')