import re import os import json # Open the json file and load its contents into a dictionary with open('i18n/en.json', 'r', encoding='utf-8') as f: en = json.load(f) # Create a copy of the en dictionary's keys and convert it to a set for better performance unused_keys = set(en.keys()) error = False missing_keys = {} rootdir = '.' # TODO: Crawl only content/* for folder, dirs, files in os.walk(rootdir): for file in files: if file.endswith('.html'): fullpath = os.path.join(folder, file) with open(fullpath, 'r', encoding='utf-8') as f: for line in f: m = re.findall('{{\s+?i18n\s+?(?:"|`)(.*?)(?:"|`)\s+?}}', line, re.DOTALL) if m: for string in m: if string not in en: error = True print(f'TRANSLATION ERROR: {string}') missing_keys[string] = '' print(f"Adding '{string}'") en[string] = string # Add the missing key to the dictionary elif string in unused_keys: unused_keys.remove(string) # If there are missing keys, dump the updated dictionary back into the json file if error or unused_keys: # Remove unused keys if unused_keys: for key in unused_keys: print(f"Removing '{key}'") del en[key] else: print("No unused keys found.") with open('i18n/en.json', 'w', encoding='utf-8') as f: json.dump(en, f, indent=3, ensure_ascii=False)