We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 4aa5151 commit 2dcab79Copy full SHA for 2dcab79
2 files changed
Lib/test/test_tools/test_i18n.py
@@ -528,15 +528,22 @@ def test_process_keywords(self):
528
(['foo', 'foo:1,2'], True),
529
(['foo'], False),
530
(['_:1,2', '_:1c,2,3', 'pgettext'], False),
531
+ # Duplicate entries
532
+ (['foo', 'foo'], True),
533
+ (['_'], False)
534
)
535
expected = (
536
{'foo': [{'msgid': 0}]},
537
{'_': [{'msgid': 0, 'msgid_plural': 1}]},
538
{'foo': [{'msgid': 0}, {'msgid': 0, 'msgid_plural': 1}]},
539
default_keywords | {'foo': [{'msgid': 0}]},
540
default_keywords | {'_': [{'msgid': 0, 'msgid_plural': 1},
- {'msgctxt': 0, 'msgid': 1, 'msgid_plural': 2}],
- 'pgettext': [{'msgid': 0}]},
541
+ {'msgctxt': 0, 'msgid': 1, 'msgid_plural': 2},
542
+ {'msgid': 0}],
543
+ 'pgettext': [{'msgid': 0},
544
+ {'msgctxt': 0, 'msgid': 1}]},
545
+ {'foo': [{'msgid': 0}]},
546
+ default_keywords,
547
548
for (keywords, no_default_keywords), expected in zip(inputs, expected):
549
with self.subTest(keywords=keywords,
Tools/i18n/pygettext.py
@@ -391,7 +391,8 @@ def unparse_spec(name, spec):
391
392
393
def process_keywords(keywords, *, no_default_keywords):
394
- custom_keywords_list = [parse_spec(spec) for spec in keywords]
+ custom_keywords_list = [parse_spec(spec) for
395
+ spec in dict.fromkeys(keywords)]
396
custom_keywords = {}
397
for name, spec in custom_keywords_list:
398
if name not in custom_keywords:
@@ -401,9 +402,13 @@ def process_keywords(keywords, *, no_default_keywords):
401
402
if no_default_keywords:
403
return custom_keywords
404
- default_keywords = {name: [spec] for name, spec in DEFAULTKEYWORDS.items()}
405
# custom keywords override default keywords
406
- return default_keywords | custom_keywords
+ for name, spec in DEFAULTKEYWORDS.items():
407
+ if name not in custom_keywords:
408
+ custom_keywords[name] = []
409
+ if spec not in custom_keywords[name]:
410
+ custom_keywords[name].append(spec)
411
+ return custom_keywords
412
413
414
@dataclass(frozen=True)
0 commit comments