diff --git a/babel/messages/extract.py b/babel/messages/extract.py index f0584d460..9fa7029ea 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -86,9 +86,11 @@ def tell(self) -> int: ... 'ungettext': (1, 2), 'dgettext': (2,), 'dngettext': (2, 3), + 'dpgettext': ((2, 'c'), 3), 'N_': None, 'pgettext': ((1, 'c'), 2), 'npgettext': ((1, 'c'), 2, 3), + 'dnpgettext': ((2, 'c'), 3, 4), } DEFAULT_MAPPING: list[tuple[str, str]] = [('**.py', 'python')] diff --git a/tests/messages/test_extract.py b/tests/messages/test_extract.py index 31b21e459..26c56b162 100644 --- a/tests/messages/test_extract.py +++ b/tests/messages/test_extract.py @@ -142,6 +142,27 @@ def test_multiline(self): (3, 'ngettext', ('elvis', 'elvises', None), []), ] + def test_dpgettext(self): + buf = BytesIO(b"""\ +msg1 = dpgettext('dev', 'Strings', + 'pylon') +msg2 = dpgettext('dev', 'Strings', 'elvis') +""") + messages = list(extract.extract_python(buf, ('dpgettext',), [], {})) + assert messages == [ + (1, 'dpgettext', ('dev', 'Strings', 'pylon'), []), + (3, 'dpgettext', ('dev', 'Strings', 'elvis'), []), + ] + buf = BytesIO(b"""\ +msg = dpgettext('dev', 'Strings', 'pylon', # TRANSLATORS: shouldn't be + ) # TRANSLATORS: seeing this +""") + messages = list(extract.extract_python(buf, ('dpgettext',), + ['TRANSLATORS:'], {})) + assert messages == [ + (1, 'dpgettext', ('dev', 'Strings', 'pylon', None), []), + ] + def test_npgettext(self): buf = BytesIO(b"""\ msg1 = npgettext('Strings','pylon', @@ -166,6 +187,30 @@ def test_npgettext(self): (1, 'npgettext', ('Strings', 'pylon', 'pylons', None), []), ] + def test_dnpgettext(self): + buf = BytesIO(b"""\ +msg1 = dnpgettext('dev', 'Strings','pylon', + 'pylons', count) +msg2 = dnpgettext('dev', 'Strings','elvis', + 'elvises', + count) +""") + messages = list(extract.extract_python(buf, ('dnpgettext',), [], {})) + assert messages == [ + (1, 'dnpgettext', ('dev', 'Strings', 'pylon', 'pylons', None), []), + (3, 'dnpgettext', ('dev', 'Strings', 'elvis', 'elvises', None), []), + ] + buf = BytesIO(b"""\ +msg = dnpgettext('dev', 'Strings', 'pylon', # TRANSLATORS: shouldn't be + 'pylons', # TRANSLATORS: seeing this + count) +""") + messages = list(extract.extract_python(buf, ('dnpgettext',), + ['TRANSLATORS:'], {})) + assert messages == [ + (1, 'dnpgettext', ('dev', 'Strings', 'pylon', 'pylons', None), []), + ] + def test_triple_quoted_strings(self): buf = BytesIO(b"""\ msg1 = _('''pylons''') diff --git a/tests/messages/test_frontend.py b/tests/messages/test_frontend.py index 581ad4a8c..c95109db1 100644 --- a/tests/messages/test_frontend.py +++ b/tests/messages/test_frontend.py @@ -1582,6 +1582,7 @@ def test_extract_keyword_args_384(split, arg_name): ) assert isinstance(cmdinst, ExtractMessages) assert set(cmdinst.keywords.keys()) == {'_', 'dgettext', 'dngettext', + 'dnpgettext', 'dpgettext', 'gettext', 'gettext_lazy', 'gettext_noop', 'N_', 'ngettext', 'ngettext_lazy', 'npgettext',