Loading django/core/management/commands/makemessages.py +11 −6 Original line number Diff line number Diff line Loading @@ -128,13 +128,18 @@ class BuildFile(object): # Remove '.py' suffix if os.name == 'nt': # Preserve '.\' prefix on Windows to respect gettext behavior old = '#: ' + self.work_path new = '#: ' + self.path old_path = self.work_path new_path = self.path else: old = '#: ' + self.work_path[2:] new = '#: ' + self.path[2:] return msgs.replace(old, new) old_path = self.work_path[2:] new_path = self.path[2:] return re.sub( r'^(#: .*)(' + re.escape(old_path) + r')', r'\1' + new_path, msgs, flags=re.MULTILINE ) def cleanup(self): """ Loading docs/releases/1.9.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -27,3 +27,6 @@ Bugfixes * Restored conversion of an empty string to null when saving values of ``GenericIPAddressField`` on SQLite and MySQL (:ticket:`26557`). * Fixed a ``makemessages`` regression where temporary ``.py`` extensions were leaked in source file paths (:ticket:`26341`). tests/i18n/commands/__init__.py +3 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,6 @@ number = 3 dummy3 = ungettext("%(number)s Foo", "%(number)s Foos", number) % {'number': number} dummy4 = _('Size') # This string is intentionally duplicated in test.html dummy5 = _('This literal should be included.') tests/i18n/commands/templates/test.html +3 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ continued here.{% endcomment %} {% trans "Translatable literal #7.1g"|add:2 context "context #7.1g" as var %} {% trans "Translatable literal #7.1h" | add:"foo" | add:2 context "context #7.1h" as var %} <!-- Source file inside a msgid, should be left as-is. --> {% trans "#: templates/test.html.py" %} {% blocktrans context "Special blocktrans context #1" %}Translatable literal #8a{% endblocktrans %} {% blocktrans count 2 context "Special blocktrans context #2" %}Translatable literal #8b-singular{% plural %}Translatable literal #8b-plural{% endblocktrans %} {% blocktrans context "Special blocktrans context #3" count 2 %}Translatable literal #8c-singular{% plural %}Translatable literal #8c-plural{% endblocktrans %} Loading tests/i18n/test_extraction.py +13 −2 Original line number Diff line number Diff line Loading @@ -649,8 +649,19 @@ class LocationCommentsTests(ExtractorTests): # #16903 -- Standard comment with source file relative path should be present self.assertLocationCommentPresent(self.PO_FILE, 'Translatable literal #6b', 'templates', 'test.html') # #21209 -- Leaky paths in comments on Windows e.g. #: path\to\file.html.py:123 self.assertLocationCommentNotPresent(self.PO_FILE, None, 'templates', 'test.html.py') def test_location_comments_for_templatized_files(self): """ Ensure no leaky paths in comments, e.g. #: path\to\file.html.py:123 Refs #21209/#26341. """ os.chdir(self.test_dir) management.call_command('makemessages', locale=[LOCALE], verbosity=0) self.assertTrue(os.path.exists(self.PO_FILE)) with open(self.PO_FILE, 'r') as fp: po_contents = force_text(fp.read()) self.assertMsgId('#: templates/test.html.py', po_contents) self.assertLocationCommentNotPresent(self.PO_FILE, None, '.html.py') self.assertLocationCommentPresent(self.PO_FILE, 5, 'templates', 'test.html') class KeepPotFileExtractorTests(ExtractorTests): Loading Loading
django/core/management/commands/makemessages.py +11 −6 Original line number Diff line number Diff line Loading @@ -128,13 +128,18 @@ class BuildFile(object): # Remove '.py' suffix if os.name == 'nt': # Preserve '.\' prefix on Windows to respect gettext behavior old = '#: ' + self.work_path new = '#: ' + self.path old_path = self.work_path new_path = self.path else: old = '#: ' + self.work_path[2:] new = '#: ' + self.path[2:] return msgs.replace(old, new) old_path = self.work_path[2:] new_path = self.path[2:] return re.sub( r'^(#: .*)(' + re.escape(old_path) + r')', r'\1' + new_path, msgs, flags=re.MULTILINE ) def cleanup(self): """ Loading
docs/releases/1.9.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -27,3 +27,6 @@ Bugfixes * Restored conversion of an empty string to null when saving values of ``GenericIPAddressField`` on SQLite and MySQL (:ticket:`26557`). * Fixed a ``makemessages`` regression where temporary ``.py`` extensions were leaked in source file paths (:ticket:`26341`).
tests/i18n/commands/__init__.py +3 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,6 @@ number = 3 dummy3 = ungettext("%(number)s Foo", "%(number)s Foos", number) % {'number': number} dummy4 = _('Size') # This string is intentionally duplicated in test.html dummy5 = _('This literal should be included.')
tests/i18n/commands/templates/test.html +3 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ continued here.{% endcomment %} {% trans "Translatable literal #7.1g"|add:2 context "context #7.1g" as var %} {% trans "Translatable literal #7.1h" | add:"foo" | add:2 context "context #7.1h" as var %} <!-- Source file inside a msgid, should be left as-is. --> {% trans "#: templates/test.html.py" %} {% blocktrans context "Special blocktrans context #1" %}Translatable literal #8a{% endblocktrans %} {% blocktrans count 2 context "Special blocktrans context #2" %}Translatable literal #8b-singular{% plural %}Translatable literal #8b-plural{% endblocktrans %} {% blocktrans context "Special blocktrans context #3" count 2 %}Translatable literal #8c-singular{% plural %}Translatable literal #8c-plural{% endblocktrans %} Loading
tests/i18n/test_extraction.py +13 −2 Original line number Diff line number Diff line Loading @@ -649,8 +649,19 @@ class LocationCommentsTests(ExtractorTests): # #16903 -- Standard comment with source file relative path should be present self.assertLocationCommentPresent(self.PO_FILE, 'Translatable literal #6b', 'templates', 'test.html') # #21209 -- Leaky paths in comments on Windows e.g. #: path\to\file.html.py:123 self.assertLocationCommentNotPresent(self.PO_FILE, None, 'templates', 'test.html.py') def test_location_comments_for_templatized_files(self): """ Ensure no leaky paths in comments, e.g. #: path\to\file.html.py:123 Refs #21209/#26341. """ os.chdir(self.test_dir) management.call_command('makemessages', locale=[LOCALE], verbosity=0) self.assertTrue(os.path.exists(self.PO_FILE)) with open(self.PO_FILE, 'r') as fp: po_contents = force_text(fp.read()) self.assertMsgId('#: templates/test.html.py', po_contents) self.assertLocationCommentNotPresent(self.PO_FILE, None, '.html.py') self.assertLocationCommentPresent(self.PO_FILE, 5, 'templates', 'test.html') class KeepPotFileExtractorTests(ExtractorTests): Loading