From 7ca0dc28b0a5f2944bd72b29967e27a7b5a7b059 Mon Sep 17 00:00:00 2001 From: prisonerMO Date: Sun, 6 Jul 2025 20:27:31 +0300 Subject: [PATCH 1/2] Update stringtablediag.py --- extras/tools/stringtablediag.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/extras/tools/stringtablediag.py b/extras/tools/stringtablediag.py index 1e4ab4c..a45eb66 100644 --- a/extras/tools/stringtablediag.py +++ b/extras/tools/stringtablediag.py @@ -54,9 +54,12 @@ def check_module(projectpath, module, languages): def main(): scriptpath = os.path.realpath(__file__) - projectpath = os.path.dirname(os.path.dirname(scriptpath)) - projectpath = os.path.join(projectpath, "addons") + projectpath = os.path.abspath(os.path.join(os.path.dirname(scriptpath), "..", "..", "addons")) + if not os.path.isdir(projectpath): + print(f"ERROR: Directory not found: {projectpath}") + sys.exit(1) + if "--markdown" not in sys.argv: print("#########################") print("# Stringtable Diag Tool #") @@ -120,4 +123,4 @@ def main(): round(100 * localizedsum[i] / keysum))) if __name__ == "__main__": - main() \ No newline at end of file + main() From 89c66c3e01032b79b7faec112b1b0db55d4591a3 Mon Sep 17 00:00:00 2001 From: prisonerMO Date: Sun, 6 Jul 2025 20:30:05 +0300 Subject: [PATCH 2/2] Update stringtablediag.py stringtable-test --- extras/tools/stringtablediag.py | 73 ++++++++++++--------------------- 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/extras/tools/stringtablediag.py b/extras/tools/stringtablediag.py index a45eb66..1f25ae5 100644 --- a/extras/tools/stringtablediag.py +++ b/extras/tools/stringtablediag.py @@ -2,125 +2,106 @@ 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] == ".": + if module.startswith("."): continue - stringtablepath = os.path.join(projectpath, module, "stringtable.xml") try: xmldoc = minidom.parse(stringtablepath) - except: + except Exception: continue - keys = xmldoc.getElementsByTagName("Key") for key in keys: for child in key.childNodes: try: - if not child.tagName in languages: + if child.tagName not in languages: languages.append(child.tagName) - except: + except Exception: 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: + except Exception: 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__) + # Set path to repo root/addons relative to this script projectpath = os.path.abspath(os.path.join(os.path.dirname(scriptpath), "..", "..", "addons")) - if not os.path.isdir(projectpath): - print(f"ERROR: Directory not found: {projectpath}") - sys.exit(1) - - if "--markdown" not in sys.argv: + print(f"ERROR: Directory not found: {projectpath}") + sys.exit(1) + + # Command line option + markdown = "--markdown" in sys.argv + + if not markdown: print("#########################") print("# Stringtable Diag Tool #") print("#########################") languages = get_all_languages(projectpath) - - if "--markdown" not in sys.argv: + if not markdown: print("\nLanguages present in the repo:") print(", ".join(languages)) keysum = 0 - localizedsum = list(map(lambda x: 0, languages)) - missing = list(map(lambda x: [], languages)) + localizedsum = [0 for _ in languages] + missing = [[] for _ in languages] for module in os.listdir(projectpath): keynumber, localized = check_module(projectpath, module, languages) - if keynumber == 0: continue - - if "--markdown" not in sys.argv: + if not markdown: print("\n# " + module) - keysum += keynumber for i in range(len(localized)): - if "--markdown" not in sys.argv: + if not markdown: 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) - if "--markdown" not in sys.argv: + if not markdown: print("\n###########") print("# RESULTS #") print("###########") - print("\nTotal number of keys: %i\n" % (keysum)) - + 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 ###\n") - print("Total number of keys: %i\n" % (keysum)) - + print("Total number of keys: %i\n" % keysum) print("| Language | Missing Entries | Relevant Modules | % done |") print("|----------|----------------:|------------------|--------|") - for i, language in enumerate(languages): + if keysum == 0: + percent = 100 + else: + percent = round(100 * localizedsum[i] / keysum) if localizedsum[i] == keysum: - print("| {} | 0 | - | 100% |".format(language)) + print(f"| {language} | 0 | - | 100% |") else: - print("| {} | {} | {} | {}% |".format( - language, - keysum - localizedsum[i], - ", ".join(missing[i]), - round(100 * localizedsum[i] / keysum))) + print(f"| {language} | {keysum - localizedsum[i]} | {', '.join(missing[i])} | {percent}% |") if __name__ == "__main__": main()