mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
120 lines
3.2 KiB
Python
120 lines
3.2 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
from xml.dom import minidom
|
||
|
|
||
|
# STRINGTABLE DIAG TOOL
|
||
|
# Author: KoffeinFlummi
|
||
|
# ---------------------
|
||
|
# Checks for missing translations and all that jazz.
|
||
|
|
||
|
def get_all_languages(projectpath):
|
||
|
""" Checks what languages exist in the repo. """
|
||
|
languages = []
|
||
|
|
||
|
for module in os.listdir(projectpath):
|
||
|
if module[0] == ".":
|
||
|
continue
|
||
|
|
||
|
stringtablepath = os.path.join(projectpath, module, "stringtable.xml")
|
||
|
try:
|
||
|
xmldoc = minidom.parse(stringtablepath)
|
||
|
except:
|
||
|
continue
|
||
|
|
||
|
keys = xmldoc.getElementsByTagName("Key")
|
||
|
for key in keys:
|
||
|
for child in key.childNodes:
|
||
|
try:
|
||
|
if not child.tagName in languages:
|
||
|
languages.append(child.tagName)
|
||
|
except:
|
||
|
continue
|
||
|
|
||
|
return languages
|
||
|
|
||
|
def check_module(projectpath, module, languages):
|
||
|
""" Checks the given module for all the different languages. """
|
||
|
localized = []
|
||
|
|
||
|
stringtablepath = os.path.join(projectpath, module, "stringtable.xml")
|
||
|
try:
|
||
|
xmldoc = minidom.parse(stringtablepath)
|
||
|
except:
|
||
|
return 0, localized
|
||
|
|
||
|
keynumber = len(xmldoc.getElementsByTagName("Key"))
|
||
|
|
||
|
for language in languages:
|
||
|
localized.append(len(xmldoc.getElementsByTagName(language)))
|
||
|
|
||
|
return keynumber, localized
|
||
|
|
||
|
def main():
|
||
|
scriptpath = os.path.realpath(__file__)
|
||
|
projectpath = os.path.dirname(os.path.dirname(scriptpath))
|
||
|
projectpath = os.path.join(projectpath, "addons")
|
||
|
|
||
|
print("#########################")
|
||
|
print("# Stringtable Diag Tool #")
|
||
|
print("#########################")
|
||
|
|
||
|
languages = get_all_languages(projectpath)
|
||
|
|
||
|
print("\nLanguages present in the repo:")
|
||
|
print(", ".join(languages))
|
||
|
|
||
|
keysum = 0
|
||
|
localizedsum = list(map(lambda x: 0, languages))
|
||
|
missing = list(map(lambda x: [], languages))
|
||
|
|
||
|
for module in os.listdir(projectpath):
|
||
|
keynumber, localized = check_module(projectpath, module, languages)
|
||
|
|
||
|
if keynumber == 0:
|
||
|
continue
|
||
|
|
||
|
print("\n# " + module)
|
||
|
|
||
|
keysum += keynumber
|
||
|
for i in range(len(localized)):
|
||
|
print(" %s %s / %i" % ((languages[i]+":").ljust(10), str(localized[i]).ljust(3), keynumber))
|
||
|
localizedsum[i] += localized[i]
|
||
|
if localized[i] < keynumber:
|
||
|
missing[i].append(module)
|
||
|
|
||
|
print("\n###########")
|
||
|
print("# RESULTS #")
|
||
|
print("###########")
|
||
|
|
||
|
print("\nTotal number of keys: %i\n" % (keysum))
|
||
|
|
||
|
for i in range(len(languages)):
|
||
|
if localizedsum[i] == keysum:
|
||
|
print("%s No missing stringtable entries." % ((languages[i] + ":").ljust(12)))
|
||
|
else:
|
||
|
print("%s %s missing stringtable entry/entries." % ((languages[i] + ":").ljust(12), str(keysum - localizedsum[i]).rjust(4)), end="")
|
||
|
print(" ("+", ".join(missing[i])+")")
|
||
|
|
||
|
print("\n\n### MARKDOWN ###")
|
||
|
|
||
|
print("\nTotal number of keys: %i\n" % (keysum))
|
||
|
|
||
|
print("| Language | Missing Entries | Relevant Modules | % done |")
|
||
|
print("|----------|----------------:|------------------|--------|")
|
||
|
|
||
|
for i, language in enumerate(languages):
|
||
|
if localizedsum[i] == keysum:
|
||
|
print("| {} | 0 | - | 100% |".format(language))
|
||
|
else:
|
||
|
print("| {} | {} | {} | {}% |".format(
|
||
|
language,
|
||
|
keysum - localizedsum[i],
|
||
|
", ".join(missing[i]),
|
||
|
round(100 * localizedsum[i] / keysum)))
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|