""" 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)