From 1cebbc95f3ac82f7d5169bca73a9db8a5516ced3 Mon Sep 17 00:00:00 2001 From: Wofsauge Date: Sun, 1 Dec 2024 23:06:36 +0100 Subject: [PATCH] Improved Translation Checker CI to display missing entries for each dlc file --- .github/scripts/localizationChecker.py | 104 +++++++++++++++++-------- 1 file changed, 72 insertions(+), 32 deletions(-) diff --git a/.github/scripts/localizationChecker.py b/.github/scripts/localizationChecker.py index c2d6d7c3..5951a8cb 100644 --- a/.github/scripts/localizationChecker.py +++ b/.github/scripts/localizationChecker.py @@ -50,6 +50,24 @@ def getMaxCheckLimit(parentName): return maxChecklimit[entry] return float('inf') +def addUpdatedTables(languageCode, dlc): + if dlc != "ab+": + # Add language table + lua.execute('EID.descriptions["'+languageCode+'"] = {}') + # Add all tables that are assumed to exist already in ab+ + updatedTables = ["collectibles", "trinkets"] + if dlc == "rep": + updatedTables += ["cards", "pills", "carBattery", "BFFSSynergies", "CharacterInfo", "ConditionalDescs", "VoidNames", "custom"] + + # korean uses some additional addititve tables + if languageCode == "ko_kr": + if dlc == "rep": + updatedTables += ["dice", "MCM"] + else: + updatedTables += ["bookOfVirtuesWisps"] + for table in updatedTables: + lua.execute('EID.descriptions["'+languageCode+'"].'+table+' = {}') + # find entries in table2 that are missing or different than in table 1 def compare_tables(table1, table2, prev_key): errorCount = 0 @@ -88,55 +106,77 @@ def compare_tables(table1, table2, prev_key): return errorCount -lua.execute('REPENTOGON = true; EID = {}; EID.descriptions = {}; function EID:updateDescriptionsViaTable(changeTable, tableToUpdate) for k,v in pairs(changeTable) do if v == "" then tableToUpdate[k] = nil else tableToUpdate[k] = v end end end') -g = lua.globals() - -# Read English language files first -englishFiles = [] +languageProgress = {} +en_us_entries = {} for dlc in dlcs: - englishFiles += glob.glob(SOURCE_MOD_DIRECTORY+"/**/"+dlc+"/en_us.lua", recursive=True) + lua.execute('REPENTOGON = true; EID = {}; EID.descriptions = {}; function EID:updateDescriptionsViaTable(changeTable, tableToUpdate) for k,v in pairs(changeTable) do if v == "" then tableToUpdate[k] = nil else tableToUpdate[k] = v end end end') + g = lua.globals() + addUpdatedTables("en_us", dlc) -for englishFile in englishFiles: + # Read English language files first + englishFile = glob.glob(SOURCE_MOD_DIRECTORY+"/**/"+dlc+"/en_us.lua", recursive=True)[0] print("reading:", englishFile) lua.execute(open(englishFile, "r", encoding="UTF-8").read()) -en_us_entries = count_entries(g.EID['descriptions']['en_us']) -print("en_us entries:", en_us_entries) + en_us_entries[dlc] = count_entries(g.EID['descriptions']['en_us']) + print("en_us "+dlc+" entries:", en_us_entries[dlc]) -languages = {} -langFiles = [] -for dlc in dlcs: + langFiles = [] if ONLY_DO_LANGUAGE != "": langFiles += glob.glob(SOURCE_MOD_DIRECTORY+"/**/"+dlc+"/"+ONLY_DO_LANGUAGE+".lua", recursive=True) else: langFiles += glob.glob(SOURCE_MOD_DIRECTORY+"/**/"+dlc+"/*.lua", recursive=True) -# Read other language files -for file in langFiles: - if "en_us" not in file and "transformations" not in file: - print("reading:",file) - lua.execute(open(file, "r", encoding="UTF-8").read()) - languages[os.path.basename(file).replace(".lua","")] = 0 + # Read other language files + for file in langFiles: + if "en_us" not in file and "transformations" not in file: + languageCode = os.path.basename(file).replace(".lua","") + print("reading:",file) + addUpdatedTables(languageCode, dlc) + lua.execute(open(file, "r", encoding="UTF-8").read()) + if languageCode not in languageProgress: + languageProgress[languageCode] = {} -# Evaluate all languages -for lang in languages: - print(f"Evaluating language '{lang}'..") - errorCount = compare_tables(g.EID['descriptions']['en_us'], g.EID['descriptions'][lang], lang) - percentage = (en_us_entries - errorCount) / en_us_entries*100 - languages[lang] = [percentage, errorCount] - print(f"{Red}Errors found: {errorCount} / {en_us_entries}{Color_Off}\n\n") + # Evaluate language for completeness + print(f"Evaluating language '{languageCode}'..") + errorCount = compare_tables(g.EID['descriptions']['en_us'], g.EID['descriptions'][languageCode], languageCode+"("+dlc+")") + percentage = (en_us_entries[dlc] - errorCount) / en_us_entries[dlc] * 100 + languageProgress[languageCode][dlc] = [percentage, errorCount] + print(f"{Red}Errors found: {errorCount} / {en_us_entries[dlc]}{Color_Off}\n\n") +# Calculate total english entries +total_en_us_entries = 0 +for entries in en_us_entries.values(): + total_en_us_entries += entries + # Write git Workflow summary -gitWorkflowSummary = "### Translation progress\n| Language | Completion | Missing entries |\n|---|---|---|\n" +gitWorkflowSummary = "### Translation progress\n| Language | Completion (AB+) |Completion (REP) |Completion (REP+) |Completion (Total) |\n|---|---|---|---|---|\n" print(f"{Blue}Translation progress:{Color_Off}") -for lang in languages: - print( - f"\t{BWhite}{lang}{Color_Off}\t{Blue}{round(languages[lang][0],2)}%{Color_Off}\t{Red}{languages[lang][1]} missing{Color_Off}" - ) - errorMessage = languages[lang][1] if languages[lang][1] >3 else "🎉" - gitWorkflowSummary += f"| {lang} | {round(languages[lang][0],2)}% | {errorMessage} |\n" +for lang in languageProgress.keys(): + gitWorkflowSummary += f"| {lang} " + totalMissing = 0 + for dlc in dlcs: + gitCompletionMessage = "" + if dlc in languageProgress[lang]: + percent = round(languageProgress[lang][dlc][0], 2) + missingEntries = languageProgress[lang][dlc][1] + totalMissing += missingEntries + print(f"\t{BWhite}{lang}({dlc}){Color_Off}\t{Blue}{percent}%{Color_Off}\t{Red}{missingEntries} missing{Color_Off}") + gitCompletionMessage = f"{percent}% ({missingEntries} left)" if missingEntries >3 else "100% 🎉" + else: + print( + f"\t{BWhite}{lang}({dlc}){Color_Off}\t\t{Red}DLC translation missing!{Color_Off}") + gitCompletionMessage = f"0% ({en_us_entries[dlc]} left)" + totalMissing += en_us_entries[dlc] + + gitWorkflowSummary += f"| {gitCompletionMessage} " + + totalPercent = round((total_en_us_entries - totalMissing) / total_en_us_entries * 100, 2) + gitWorkflowSummary += f"|{totalPercent}% ({totalMissing}) " + gitWorkflowSummary += "|\n" +print(gitWorkflowSummary) if "GITHUB_STEP_SUMMARY" in os.environ: print("\n\nwrite workflow summary to: ", os.environ["GITHUB_STEP_SUMMARY"])