import os import re languages = ['ar_eg', 'ar_jo', 'ar_sy', 'en', 'de', 'el', 'es', 'fa', 'fr', 'hi', 'it', 'ru', 'tr', 'ur', 'zh'] local_dir = "siro_driver/lib/controller/local" def parse_dart_map(filepath): translations = {} if not os.path.exists(filepath): print(f"Error: file {filepath} does not exist!") return None with open(filepath, 'r', encoding='utf-8') as f: content = f.read() # Matches: "key": "value" pattern = re.compile(r'^\s*([\'"])(.*?)\1\s*:\s*([\'"])(.*?)\3\s*,?\s*$', re.MULTILINE) matches = pattern.findall(content) for match in matches: key = match[1] val = match[3] # Store raw keys and values to check escaping translations[key] = val return translations parsed_data = {} all_valid = True for lang in languages: filepath = os.path.join(local_dir, f"{lang}.dart") trans = parse_dart_map(filepath) if trans is None: all_valid = False continue parsed_data[lang] = trans print(f"Verified {lang}.dart: parsed {len(trans)} entries.") if len(trans) != 2660: print(f" ERROR: Expected 2660 entries, got {len(trans)}") all_valid = False if not all_valid: print("Verification FAILED on basic counts.") exit(1) # Check that key sets are identical ref_lang = languages[0] ref_keys = set(parsed_data[ref_lang].keys()) for lang in languages[1:]: keys = set(parsed_data[lang].keys()) if keys != ref_keys: print(f"ERROR: Key sets differ between {ref_lang} and {lang}!") print(f" Keys in {ref_lang} not in {lang}: {len(ref_keys - keys)}") print(f" Keys in {lang} not in {ref_lang}: {len(keys - ref_keys)}") all_valid = False # Check for escaping errors (e.g. unescaped dollar signs in double-quoted strings in the Dart source code) # In the raw file content, any dollar sign must be preceded by a backslash unless it is already escaped. # Let's inspect the files directly for raw '$' characters that are not preceded by '\' dollar_pattern = re.compile(r'(?