]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Allow parsing .po files that have an extant but empty Language header (#1101)
authorAarni Koskela <akx@iki.fi>
Tue, 23 Jul 2024 16:28:59 +0000 (19:28 +0300)
committerGitHub <noreply@github.com>
Tue, 23 Jul 2024 16:28:59 +0000 (19:28 +0300)
Fixes #1087

babel/messages/catalog.py
tests/messages/test_pofile.py

index 9f215cf186261df02b552c19f3ac5c1543425d6e..ecf6f91d4d7f08d0f29e8dd4f89cd19b62ad89fa 100644 (file)
@@ -479,7 +479,11 @@ class Catalog:
                 self.last_translator = value
             elif name == 'language':
                 value = value.replace('-', '_')
-                self._set_locale(value)
+                # The `or None` makes sure that the locale is set to None
+                # if the header's value is an empty string, which is what
+                # some tools generate (instead of eliding the empty Language
+                # header altogether).
+                self._set_locale(value or None)
             elif name == 'language-team':
                 self.language_team = value
             elif name == 'content-type':
index 99958b7b77b7924aed71200b8639eacfa823bbf8..d1a3e2d119b70be07d984f391be533bf1d582bc6 100644 (file)
@@ -893,3 +893,12 @@ def test_iterable_of_strings():
     catalog = pofile.read_po(['msgid "foo"', b'msgstr "Voh"'], locale="en_US")
     assert catalog.locale == Locale("en", "US")
     assert catalog.get("foo").string == "Voh"
+
+
+def test_issue_1087():
+    buf = StringIO(r'''
+msgid ""
+msgstr ""
+"Language: \n"
+''')
+    assert pofile.read_po(buf).locale is None