From c392bba1960c38b5054989a07af2b31d659666a5 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 18 Jan 2021 19:13:52 +1100 Subject: [PATCH] Add script to calculate translation stats --- InvenTree/script/translation_stats.py | 68 +++++++++++++++++++++++++++ tasks.py | 4 ++ 2 files changed, 72 insertions(+) create mode 100644 InvenTree/script/translation_stats.py diff --git a/InvenTree/script/translation_stats.py b/InvenTree/script/translation_stats.py new file mode 100644 index 0000000000..0ba969479b --- /dev/null +++ b/InvenTree/script/translation_stats.py @@ -0,0 +1,68 @@ +""" +This script calculates translation coverage for various languages +""" + +import os + + +def calculate_coverage(filename): + """ + Calculate translation coverage for a .po file + """ + + with open(filename, 'r') as f: + lines = f.readlines() + + lines_count = 0 + lines_covered = 0 + lines_uncovered = 0 + + for line in lines: + + if line.startswith("msgid "): + lines_count += 1 + + elif line.startswith("msgstr"): + if line.startswith('msgstr ""') or line.startswith("msgstr ''"): + lines_uncovered += 1 + else: + lines_covered += 1 + + # Return stats for the file + return (lines_count, lines_covered, lines_uncovered) + + +if __name__ == '__main__': + + MY_DIR = os.path.dirname(os.path.realpath(__file__)) + LC_DIR = os.path.abspath(os.path.join(MY_DIR, '..', 'locale')) + + locales = {} + + print("InvenTree translation coverage:") + + for locale in os.listdir(LC_DIR): + path = os.path.join(LC_DIR, locale) + if os.path.exists(path) and os.path.isdir(path): + + locale_file = os.path.join(path, 'LC_MESSAGES', 'django.po') + + if os.path.exists(locale_file) and os.path.isfile(locale_file): + locales[locale] = locale_file + + print("-" * 16) + + for locale in locales.keys(): + locale_file = locales[locale] + stats = calculate_coverage(locale_file) + + (total, covered, uncovered) = stats + + if total > 0: + percentage = int(covered / total * 100) + else: + percentage = 0 + + print(f"| {locale.ljust(4, ' ')} : {str(percentage).rjust(4, ' ')}% |") + + print("-" * 16) diff --git a/tasks.py b/tasks.py index 69c53b83d4..77604eaf3a 100644 --- a/tasks.py +++ b/tasks.py @@ -186,6 +186,10 @@ def translate(c): manage(c, "makemessages -e py -e html -e js") manage(c, "compilemessages") + path = os.path.join('InvenTree', 'script', 'translation_stats.py') + + c.run(f'python {path}') + @task def style(c): """