""" Fix script 3: Fix self-closing tag consumed '>'. Pattern: {t('key')} Also fix any remaining patterns where '>' was consumed. """ import re import os target_dirs = ['src/pages', 'src/components'] skip_files = [ 'src/components/LanguageSwitcher.tsx', 'src/components/Layout.tsx', 'src/i18n/index.ts', 'src/locales/zh/index.ts', 'src/locales/en/index.ts', ] def get_target_files(): files = [] for target_dir in target_dirs: for root, dirs, filenames in os.walk(target_dir): for fname in filenames: if fname.endswith(('.tsx', '.ts', '.jsx', '.js')): filepath = os.path.join(root, fname).replace('\\', '/') if filepath not in skip_files: files.append(filepath) return files target_files = get_target_files() total_fixed = 0 for filepath in target_files: try: with open(filepath, 'r', encoding='utf-8') as f: content = f.read() except: continue original = content # Fix 1: /{t(' -> />{t(' (self-closing tag consumed >) content = re.sub( r'/\{t\(\'', '/>{t(\'', content ) # Fix 2: Also check for > that was consumed before Chinese text in # other contexts (e.g., >text where > was consumed) # Pattern: (letter or >){t(' -> (letter or >)>{t(' # But we need to be careful not to break valid JSX expressions like: #
{t('key')}
-- this is valid, > is before { # So only fix when there's no > between the preceding char and {t( # Check for patterns like: d{t(' or n{t(' or />{t(' (already fixed) # where a letter is immediately before {t(' without a > in between # This means the > was consumed from: 中文 -> before {t(' when preceded by a letter (tag name char) # and the {t(' is followed by )}< content = re.sub( r'([a-zA-Z])\{t\(\'([^\']+)\'\)\}(<)', lambda m: f"{m.group(1)}>{m.group(2)}{m.group(3)}", content ) # Wait, that removes the t() call structure. Let me fix it: # -> {t('key')} content = re.sub( r'([a-zA-Z])\{t\(\'', r'\1>{t(\'', content ) if content != original: fixes = original.count('/{t(\'') # Count letter before {t( pattern too fixes += len(re.findall(r'[a-zA-Z]\{t\(\'', original)) - original.count('/{t(\'') with open(filepath, 'w', encoding='utf-8') as f: f.write(content) total_fixed += 1 print(f" Fixed: {filepath}") print(f"\nDone! Fixed {total_fixed} files")