import re import json def extract_language_maps(filepath): with open(filepath, 'r', encoding='utf-8') as f: content = f.read() # Let's find language blocks like: "en": { ... }, "fr": { ... } # To parse these blocks, we find the starting position of each language identifier # and scan until the matching closing brace. languages = ['tr', 'fr', 'de', 'es', 'fa', 'el', 'ur', 'hi', 'ru', 'it', 'zh'] extracted = {} for lang in languages: # Regex to find: "lang": { or 'lang': { pattern = re.compile(r'[\'"]' + lang + r'[\'"]\s*:\s*\{') match = pattern.search(content) if not match: print(f"Language {lang} map start not found!") continue start_idx = match.end() # Find matching closing brace brace_count = 1 current_idx = start_idx while brace_count > 0 and current_idx < len(content): char = content[current_idx] if char == '{': brace_count += 1 elif char == '}': brace_count -= 1 current_idx += 1 block = content[start_idx:current_idx-1] # Now parse the key-value pairs inside the block # Example: "key": "value", or 'key': 'value', # Handle escaped quotes. # Pattern: (['"])(.*?)\1\s*:\s*(['"])(.*?)\3\s*(?:,|$) kv_pattern = re.compile(r'^\s*([\'"])(.*?)\1\s*:\s*([\'"])(.*?)\3\s*,?\s*$', re.MULTILINE) kv_matches = kv_pattern.findall(block) lang_map = {} for kv in kv_matches: key = kv[1] val = kv[3] # Unescape quotes key = key.replace('\\"', '"').replace("\\'", "'") val = val.replace('\\"', '"').replace("\\'", "'") lang_map[key] = val extracted[lang] = lang_map print(f"Extracted {lang}: {len(lang_map)} keys") return extracted extracted = extract_language_maps("scratch/legacy_translations.dart") with open("scratch/legacy_extracted_languages.json", "w", encoding="utf-8") as f: json.dump(extracted, f, ensure_ascii=False, indent=2) print("Saved legacy extracted languages to JSON.")