Clone in a terminal:
complete_translations.py
#!/usr/bin/python3
"""
Copyright (C) 2015 Johan Mattsson
License: LGPL
"""

import glob
from optparse import OptionParser

try:
    from scripts.run import run
except ImportError:
    from run import run
    
def completeness (pofile):
    """ Returns the completeness of the translation in percent """
    with open (pofile, 'r', encoding='utf-8') as f:
        content = f.readlines ()

    translated = 0.0
    untranslated = 0.0
    msg = ""
    original = ""
    for line in content:
        if line.startswith ("#"):
            continue
        if line.strip () == "":
            continue
        if line.startswith ("msgid"):
            if not original == "msgstr \"\"":
                if msg.strip () == "" and not original.strip () == "":
                    untranslated = untranslated + 1
                else:
                    translated = translated + 1
            original = line
            msg = ""
        if line.startswith ("msgstr") or line.startswith ("\""):
            msg += line.replace ("msgstr", "").replace ("\"", "")
        
    if msg == "" and not original == "":
        untranslated = untranslated + 1
    else:
        translated = translated + 1
        
    total = translated + untranslated
    
    if total == 0:
        return 0
    
    return (translated / total) * 100;
   
   
parser = OptionParser()
parser.add_option("-t", "--threshold", dest="threshold", help="completeness threshold in percens", metavar="THRESHOLD")
parser.add_option("-i", "--incomplete", dest="incomplete", action="store_true", default=False, help="move incomplete translations to the folder for incomplete translations", metavar="MOVE_INCOMPLETE")
parser.add_option("-r", "--remove-compiled", dest="compiled", action="store_true", default=False, help="remove compiled incomplete translations", metavar="MOVE_COMPILED_INCOMPLETE")
(options, args) = parser.parse_args()

if not options.threshold:
    for pofile in glob.glob('po/*.po'):
        completed = completeness (pofile)
        print (pofile + " " + str (completed) + "%")
elif options.compiled:
    for pofile in glob.glob('po/*.po'):
        completed = completeness (pofile)
        podir = pofile.replace ("po/", "")
        podir = podir.replace (".po", "")
        podir = podir.replace ("\\", "/")
        if completed >= float (options.threshold):
            print ("Releasing " + podir)
        else:
            print ("Removing incomplete translation " + podir)
            run ("mkdir -p build/incomplete")
            run ("rm -r build/locale/" + podir) 
elif options.incomplete:
    for pofile in glob.glob('po/*.po'):
        completed = completeness (pofile)
        if completed >= float (options.threshold):
            print ("Releasing " + pofile)
        else:
            print ("Moving incomplete translation " + pofile + " to po/incomplete/")
            run ("mkdir -p po/incomplete")
            run ("mv " + pofile + " po/incomplete/") 
else:
    for pofile in glob.glob('po/*.po'):
        completed = completeness (pofile)
        if completed >= float (options.threshold):
            print (pofile)

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112