Permalink
Browse files

Fixed #29452 -- Fixed makemessages setting charset of .pot files.

  • Loading branch information...
bartoszgrabski authored and timgraham committed May 27, 2018
1 parent bc14355 commit 2bc014750adb093131f77e4c20bc17ba64b75cac
Showing with 26 additions and 3 deletions.
  1. +1 −0 AUTHORS
  2. +3 −2 django/core/management/commands/makemessages.py
  3. +22 −1 tests/i18n/test_extraction.py
View
@@ -97,6 +97,7 @@ answer newbie questions, and generally made Django that much better:
Baptiste Mispelon <bmispelon@gmail.com>
Barry Pederson <bp@barryp.org>
Bartolome Sanchez Salado <i42sasab@uco.es>
+ Bartosz Grabski <bartosz.grabski@gmail.com>
Bashar Al-Abdulhadi
Bastian Kleineidam <calvin@debian.org>
Batiste Bieler <batiste.bieler@gmail.com>
@@ -182,8 +182,9 @@ def write_pot_file(potfile, msgs):
found, header_read = False, False
for line in pot_lines:
if not found and not header_read:
- found = True
- line = line.replace('charset=CHARSET', 'charset=UTF-8')
+ if 'charset=CHARSET' in line:
+ found = True
+ line = line.replace('charset=CHARSET', 'charset=UTF-8')
if not line and not found:
header_read = True
lines.append(line)
@@ -1,6 +1,7 @@
import os
import re
import shutil
+import tempfile
import time
import warnings
from io import StringIO
@@ -12,7 +13,7 @@
from django.core.management import execute_from_command_line
from django.core.management.base import CommandError
from django.core.management.commands.makemessages import (
- Command as MakeMessagesCommand,
+ Command as MakeMessagesCommand, write_pot_file,
)
from django.core.management.utils import find_command
from django.test import SimpleTestCase, override_settings
@@ -394,6 +395,26 @@ def test_po_file_encoding_when_updating(self):
po_contents = fp.read()
self.assertMsgStr("Größe", po_contents)
+ def test_pot_charset_header_is_utf8(self):
+ """Content-Type: ... charset=CHARSET is replaced with charset=UTF-8"""
+ msgs = (
+ '# SOME DESCRIPTIVE TITLE.\n'
+ '# (some lines truncated as they are not relevant)\n'
+ '"Content-Type: text/plain; charset=CHARSET\\n"\n'
+ '"Content-Transfer-Encoding: 8bit\\n"\n'
+ '\n'
+ '#: somefile.py:8\n'
+ 'msgid "mañana; charset=CHARSET"\n'
+ 'msgstr ""\n'
+ )
+ with tempfile.NamedTemporaryFile() as pot_file:
+ pot_filename = pot_file.name
+ write_pot_file(pot_filename, msgs)
+ with open(pot_filename, 'r', encoding='utf-8') as fp:
+ pot_contents = fp.read()
+ self.assertIn('Content-Type: text/plain; charset=UTF-8', pot_contents)
+ self.assertIn('mañana; charset=CHARSET', pot_contents)
+
class JavascriptExtractorTests(ExtractorTests):

0 comments on commit 2bc0147

Please sign in to comment.