changeset 428:6a62763f2fc4

Fix for msgctxt parsing in PO files. Thanks to Asheesh Laroia for the patch. Closes #159.
author cmlenz
date Tue, 17 Mar 2009 22:26:03 +0000
parents 912e21ea527d
children 622c4ecce7f7
files babel/messages/pofile.py babel/messages/tests/pofile.py
diffstat 2 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/babel/messages/pofile.py
+++ b/babel/messages/pofile.py
@@ -192,6 +192,8 @@
             else:
                 translations.append([0, msg])
         elif line.startswith('msgctxt'):
+            if messages:
+                _add_message()
             in_msgid[0] = in_msgstr[0] = False
             context.append(line[7:].lstrip())
         elif line.startswith('"'):
--- a/babel/messages/tests/pofile.py
+++ b/babel/messages/tests/pofile.py
@@ -169,6 +169,27 @@
         assert out_buf.getvalue().strip() == buf.getvalue().strip(), \
                                                             out_buf.getvalue()
 
+    def test_with_context_two(self):
+        buf = StringIO(r'''msgctxt "Menu"
+msgid "foo"
+msgstr "Voh"
+
+msgctxt "Mannu"
+msgid "bar"
+msgstr "Bahr"
+''')
+        catalog = pofile.read_po(buf, ignore_obsolete=True)
+        self.assertEqual(2, len(catalog))
+        message = catalog.get('foo', context='Menu')
+        self.assertEqual('Menu', message.context)
+        message = catalog.get('bar', context='Mannu')
+        self.assertEqual('Mannu', message.context)
+        
+        # And verify it pass through write_po
+        out_buf = StringIO()
+        pofile.write_po(out_buf, catalog, omit_header=True)
+        assert out_buf.getvalue().strip() == buf.getvalue().strip(), out_buf.getvalue()
+
     def test_singlular_plural_form(self):
         buf = StringIO(r'''msgid "foo"
 msgid_plural "foo"
Copyright (C) 2012-2017 Edgewall Software