Skip to content

Commit 2b93a4a

Browse files
authored
Check all plurals in python format checker (#1188)
1 parent d9a257e commit 2b93a4a

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

babel/messages/checkers.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,12 @@ def python_format(catalog: Catalog | None, message: Message) -> None:
5454
if not isinstance(msgstrs, (list, tuple)):
5555
msgstrs = (msgstrs,)
5656

57-
for msgid, msgstr in zip(msgids, msgstrs):
58-
if msgstr:
59-
_validate_format(msgid, msgstr)
57+
if msgstrs[0]:
58+
_validate_format(msgids[0], msgstrs[0])
59+
if message.pluralizable:
60+
for msgstr in msgstrs[1:]:
61+
if msgstr:
62+
_validate_format(msgids[1], msgstr)
6063

6164

6265
def _validate_format(format: str, alternative: str) -> None:

tests/messages/test_checkers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ class TestPythonFormat:
337337
(('foo %s', 'bar'), ('foo', 'bar')),
338338
(('foo', 'bar %s'), ('foo', 'bar')),
339339
(('foo %s', 'bar'), ('foo')),
340+
(('foo %s', 'bar %d'), ('foo %s', 'bar %d', 'baz')),
341+
(('foo %s', 'bar %d'), ('foo %s', 'bar %d', 'baz %d', 'qux')),
340342
])
341343
def test_python_format_invalid(self, msgid, msgstr):
342344
msg = Message(msgid, msgstr)
@@ -346,9 +348,13 @@ def test_python_format_invalid(self, msgid, msgstr):
346348
@pytest.mark.parametrize(('msgid', 'msgstr'), [
347349
('foo', 'foo'),
348350
('foo', 'foo %s'),
351+
('foo %s', ''),
349352
(('foo %s', 'bar %d'), ('foo %s', 'bar %d')),
350-
(('foo %s', 'bar %d'), ('foo %s', 'bar %d', 'baz')),
353+
(('foo %s', 'bar %d'), ('foo %s', 'bar %d', 'baz %d')),
351354
(('foo', 'bar %s'), ('foo')),
355+
(('foo', 'bar %s'), ('', '')),
356+
(('foo', 'bar %s'), ('foo', '')),
357+
(('foo %s', 'bar %d'), ('foo %s', '')),
352358
])
353359
def test_python_format_valid(self, msgid, msgstr):
354360
msg = Message(msgid, msgstr)

0 commit comments

Comments
 (0)