Update: 2026-06-13 00:57:17
This commit is contained in:
60
scratch/extract_legacy_languages.py
Normal file
60
scratch/extract_legacy_languages.py
Normal file
@@ -0,0 +1,60 @@
|
||||
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.")
|
||||
Reference in New Issue
Block a user