import json import os import re def get_keys(data, prefix=""): keys = [] if isinstance(data, dict): for k, v in data.items(): new_key = f"{prefix}.{k}" if prefix else k # Skip language objects (they have "en", "ru", etc) if isinstance(v, dict) and any(lang in v for lang in ["en", "ru", "me", "ua"]): keys.append(new_key) else: keys.extend(get_keys(v, new_key)) return keys def check_unused(): locales_dir = "src/locales" src_dir = "src" trans_files = [f for f in os.listdir(locales_dir) if f.startswith("translations") and f.endswith(".json")] # Collect all source code content src_content = "" for root, dirs, files in os.walk(src_dir): for file in files: if file.endswith((".vue", ".ts", ".js")): with open(os.path.join(root, file), "r", encoding="utf-8") as f: src_content += f.read() + "\n" report = {} for trans_file in trans_files: path = os.path.join(locales_dir, trans_file) with open(path, "r", encoding="utf-8") as f: data = json.load(f) all_keys = get_keys(data) unused = [] for key in all_keys: # Check for exact string match in code # We look for "key", 'key', or `key` pattern = re.compile(f"['\"`]{re.escape(key)}['\"`]") if not pattern.search(src_content): unused.append(key) report[trans_file] = unused return report if __name__ == "__main__": report = check_unused() print(json.dumps(report, indent=2, ensure_ascii=False))