# HG changeset patch # User cmlenz # Date 1237328763 0 # Node ID 70f72bc70a93b656213bb030048b353371a8df6a # Parent 08e2d18163d9c301b6c2420554c832c7b5505c33 Fix for msgctxt parsing in PO files. Thanks to Asheesh Laroia for the patch. Closes #159. diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py --- 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('"'): diff --git a/babel/messages/tests/pofile.py b/babel/messages/tests/pofile.py --- 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"