Add script to calculate translation stats

This commit is contained in:
Oliver Walters 2021-01-18 19:13:52 +11:00
parent c517801c5f
commit c392bba196
2 changed files with 72 additions and 0 deletions

View File

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

View File

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