summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Schwarz <felix.schwarz@oss.schwarz.eu>2012-08-04 23:10:41 +0000
committerFelix Schwarz <felix.schwarz@oss.schwarz.eu>2012-08-04 23:10:41 +0000
commit1252964d3ab44b58f153021733c9cfcc16c45885 (patch)
treea55add007d0ae22813bc148c35a0d56507042013
parent2610e85f428d4061dc603c547e3f1372cf51c573 (diff)
downloadbabel-1252964d3ab44b58f153021733c9cfcc16c45885.tar.gz
handle irregular multi-line msgstr (no "" as first line) gracefully (#171)
-rw-r--r--ChangeLog3
-rw-r--r--babel/messages/pofile.py13
-rw-r--r--babel/messages/tests/pofile.py10
3 files changed, 19 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index fdbaed2..d9bf07a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -43,7 +43,8 @@ http://svn.edgewall.org/repos/babel/tags/1.0.0/
with more than 7 significant digits (#183)
* fix format_date() with datetime parameter (#282, patch from Xavier Morel)
* fix format_decimal() with small Decimal values (#214, patch from George Lund)
- * fix handling of messages containing '\\n' (#171)
+ * fix handling of messages containing '\\n' (#198)
+ * handle irregular multi-line msgstr (no "" as first line) gracefully (#171)
Version 0.9.6
diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py
index a44a691..5c21bec 100644
--- a/babel/messages/pofile.py
+++ b/babel/messages/pofile.py
@@ -75,10 +75,11 @@ def denormalize(string):
:return: the denormalized string
:rtype: `unicode` or `str`
"""
- if string.startswith('""'):
- lines = []
- for line in string.splitlines()[1:]:
- lines.append(unescape(line))
+ if '\n' in string:
+ escaped_lines = string.splitlines()
+ if string.startswith('""'):
+ escaped_lines = escaped_lines[1:]
+ lines = map(unescape, escaped_lines)
return ''.join(lines)
else:
return unescape(string)
@@ -110,10 +111,10 @@ def read_po(fileobj, locale=None, domain=None, ignore_obsolete=False):
... print (message.id, message.string)
... print ' ', (message.locations, message.flags)
... print ' ', (message.user_comments, message.auto_comments)
- (u'foo %(name)s', '')
+ (u'foo %(name)s', u'')
([(u'main.py', 1)], set([u'fuzzy', u'python-format']))
([], [])
- ((u'bar', u'baz'), ('', ''))
+ ((u'bar', u'baz'), (u'', u''))
([(u'main.py', 3)], set([]))
([u'A user comment'], [u'An auto comment'])
diff --git a/babel/messages/tests/pofile.py b/babel/messages/tests/pofile.py
index 64d9274..bb3f548 100644
--- a/babel/messages/tests/pofile.py
+++ b/babel/messages/tests/pofile.py
@@ -539,6 +539,16 @@ class PofileFunctionsTestCase(unittest.TestCase):
# regression test for #198
self.assertEqual(r'\n', pofile.unescape(r'"\\n"'))
+ def test_denormalize_on_msgstr_without_empty_first_line(self):
+ # handle irregular multi-line msgstr (no "" as first line)
+ # gracefully (#171)
+ msgstr = '"multi-line\\n"\n" translation"'
+ expected_denormalized = u'multi-line\n translation'
+
+ self.assertEqual(expected_denormalized, pofile.denormalize(msgstr))
+ self.assertEqual(expected_denormalized,
+ pofile.denormalize('""\n' + msgstr))
+
def suite():
suite = unittest.TestSuite()