import re from pathlib import Path import polib placeholder_regexp = re.compile(r'\{[^\}]*?\}') for path in Path(__file__).parent.resolve().parent.rglob('LC_MESSAGES/*.po'): po = polib.pofile(path) for entry in po: if not entry.msgstr: continue # ignore untranslated strings expected_placeholders = set(placeholder_regexp.findall(entry.msgid)) actual_placeholders = set(placeholder_regexp.findall(entry.msgstr)) if expected_placeholders != actual_placeholders: print("Invalid string at %s line %d:" % (path, entry.linenum)) print("\toriginal string %r has placeholders: %r" % (entry.msgid, expected_placeholders)) print("\ttranslated string %r has placeholders: %r" % (entry.msgstr, actual_placeholders)) print()