# HG changeset patch # User cmlenz # Date 1237328763 0 # Node ID 6a62763f2fc470eac938736f14684a299fb17689 # Parent 912e21ea527d446d497f586486937949c35992db 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"