diff options
| author | Raghuram Subramani <raghus2247@gmail.com> | 2022-06-19 19:47:51 +0530 |
|---|---|---|
| committer | Raghuram Subramani <raghus2247@gmail.com> | 2022-06-19 19:47:51 +0530 |
| commit | 4fd287655a72b9aea14cdac715ad5b90ed082ed2 (patch) | |
| tree | 65d393bc0e699dd12d05b29ba568e04cea666207 /circuitpython/tools/fixup_translations.py | |
| parent | 0150f70ce9c39e9e6dd878766c0620c85e47bed0 (diff) | |
add circuitpython code
Diffstat (limited to 'circuitpython/tools/fixup_translations.py')
| -rw-r--r-- | circuitpython/tools/fixup_translations.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/circuitpython/tools/fixup_translations.py b/circuitpython/tools/fixup_translations.py new file mode 100644 index 0000000..4c6f89b --- /dev/null +++ b/circuitpython/tools/fixup_translations.py @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + +# Validate that all entries in the .pot are in every .po. Only the .pot is updated so we can detect +# if a translation was added to the source but isn't in a .po. This ensures translators can grab +# complete files to work on. + +import git +import sys +import polib + +po_filenames = sys.argv[1:] +repo = git.Repo() + +NO_TRANSLATION_WHITELIST = ["ffi_prep_closure_loc"] + +bad_commits = {} +for po_filename in po_filenames: + print("Checking", po_filename) + + commits = repo.iter_commits(paths=po_filename, reverse=True, topo_order=True) + first_translations = None + fixed_ids = set() + for commit in commits: + try: + blob = commit.tree / po_filename + except KeyError: + continue + try: + current_file = polib.pofile(blob.data_stream.read().decode("utf-8")) + except OSError: + print("skipping invalid po in", commit) + continue + if not first_translations: + first_translations = current_file + continue + print(commit.authored_date, commit) + first_translations.metadata = current_file.metadata + first_translations.header = current_file.header + for entry in first_translations: + newer_entry = current_file.find(entry.msgid) + + if newer_entry and entry.msgid == "": + entry.merge(newer_entry) + print(entry) + elif newer_entry and entry.msgstr != newer_entry.msgstr: + if newer_entry.msgstr != "" and ( + newer_entry.msgstr != entry.msgid or entry.msgid in NO_TRANSLATION_WHITELIST + ): + entry.merge(newer_entry) + entry.msgstr = newer_entry.msgstr + if "fuzzy" not in newer_entry.flags and "fuzzy" in entry.flags: + entry.flags.remove("fuzzy") + elif entry.msgid not in fixed_ids: + if commit not in bad_commits: + bad_commits[commit] = set() + bad_commits[commit].add(po_filename) + fixed_ids.add(entry.msgid) + # print(entry.msgid, "\"" + entry.msgstr + "\"", "\"" + newer_entry.msgstr + "\"",) + elif newer_entry and newer_entry.flags != entry.flags: + entry.flags = newer_entry.flags + elif newer_entry and newer_entry.obsolete != entry.obsolete: + entry.obsolete = newer_entry.obsolete + elif not newer_entry: + entry.obsolete = True + + # Add new entries to the modified pofile. + for entry in current_file: + old_entry = first_translations.find(entry.msgid, include_obsolete_entries=True) + if old_entry: + continue + first_translations.append(entry) + + # Remove obsolete translations. We can always use this script to revive them from the git history. + to_remove = [] + for entry in first_translations: + if entry.obsolete: + to_remove.append(entry) + + for remove in to_remove: + first_translations.remove(remove) + + first_translations.save(po_filename) + +print() +for commit in bad_commits: + files = bad_commits[commit] + print(commit) + for file in files: + print("\t", file) |
