From: Tomas R. Date: Sun, 20 Oct 2024 06:54:27 +0000 (+0200) Subject: Fix the way obsolete messages are stored (#1132) X-Git-Tag: v2.17.0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=313277af993cebfbae49d385327fc7f45e32f737;p=thirdparty%2Fbabel.git Fix the way obsolete messages are stored (#1132) --- diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index b7a52405..ec2d57f7 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -239,7 +239,7 @@ class PoFileParser: context=msgctxt) if self.obsolete: if not self.ignore_obsolete: - self.catalog.obsolete[msgid] = message + self.catalog.obsolete[self.catalog._key_for(msgid, msgctxt)] = message else: self.catalog[msgid] = message self.counter += 1 diff --git a/tests/messages/test_pofile.py b/tests/messages/test_pofile.py index 3609b5c2..f4360ecf 100644 --- a/tests/messages/test_pofile.py +++ b/tests/messages/test_pofile.py @@ -299,10 +299,62 @@ msgstr "Bahr" catalog = pofile.read_po(buf) assert len(catalog) == 2 assert len(catalog.obsolete) == 1 - message = catalog.obsolete["foo"] + message = catalog.obsolete[("foo", "other")] assert message.context == 'other' assert message.string == 'Voh' + def test_obsolete_messages_with_context(self): + buf = StringIO(''' +# This is an obsolete message +#~ msgctxt "apple" +#~ msgid "foo" +#~ msgstr "Foo" + +# This is an obsolete message with the same id but different context +#~ msgctxt "orange" +#~ msgid "foo" +#~ msgstr "Bar" +''') + catalog = pofile.read_po(buf) + assert len(catalog) == 0 + assert len(catalog.obsolete) == 2 + assert 'foo' not in catalog.obsolete + + apple_msg = catalog.obsolete[('foo', 'apple')] + assert apple_msg.id == 'foo' + assert apple_msg.string == 'Foo' + assert apple_msg.user_comments == ['This is an obsolete message'] + + orange_msg = catalog.obsolete[('foo', 'orange')] + assert orange_msg.id == 'foo' + assert orange_msg.string == 'Bar' + assert orange_msg.user_comments == ['This is an obsolete message with the same id but different context'] + + def test_obsolete_messages_roundtrip(self): + buf = StringIO('''\ +# This message is not obsolete +#: main.py:1 +msgid "bar" +msgstr "Bahr" + +# This is an obsolete message +#~ msgid "foo" +#~ msgstr "Voh" + +# This is an obsolete message +#~ msgctxt "apple" +#~ msgid "foo" +#~ msgstr "Foo" + +# This is an obsolete message with the same id but different context +#~ msgctxt "orange" +#~ msgid "foo" +#~ msgstr "Bar" + +''') + generated_po_file = ''.join(pofile.generate_po(pofile.read_po(buf), omit_header=True)) + assert buf.getvalue() == generated_po_file + def test_multiline_context(self): buf = StringIO(''' msgctxt "a really long " @@ -394,7 +446,7 @@ msgstr[1] "Vohs [text]"''') assert len(catalog) == 0 assert len(catalog.obsolete) == 1 assert catalog.num_plurals == 2 - message = catalog.obsolete[('foo', 'foos')] + message = catalog.obsolete['foo'] assert len(message.string) == 2 assert message.string[0] == 'Voh [text]' assert message.string[1] == 'Vohs [text]'