#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import re import glob def extract_keys_from_file(file_path): """从本地化文件中提取所有key""" keys = set() with open(file_path, 'r', encoding='utf-8') as f: for line in f: match = re.match(r'^"([^"]+)"\s*=', line.strip()) if match: keys.add(match.group(1)) return keys def get_all_keys(): """获取所有文件中出现的key""" all_keys = set() lproj_files = glob.glob('MyQrCode/*.lproj/Localizable.strings') for file_path in lproj_files: keys = extract_keys_from_file(file_path) all_keys.update(keys) return all_keys def get_translations_from_file(file_path): """从文件中获取所有翻译""" translations = {} with open(file_path, 'r', encoding='utf-8') as f: for line in f: match = re.match(r'^"([^"]+)"\s*=\s*"([^"]*)"\s*;', line.strip()) if match: key, value = match.group(1), match.group(2) translations[key] = value return translations def sync_file(file_path, all_keys, reference_translations): """同步单个文件,确保包含所有key""" print(f"Syncing {file_path}...") # 读取现有内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 获取现有翻译 existing_translations = get_translations_from_file(file_path) # 找出缺失的key missing_keys = all_keys - set(existing_translations.keys()) if not missing_keys: print(f" No missing keys for {file_path}") return print(f" Adding {len(missing_keys)} missing keys...") # 在文件末尾添加缺失的key additions = [] for key in sorted(missing_keys): if key in reference_translations: # 使用参考翻译作为默认值 additions.append(f'"{key}" = "{reference_translations[key]}";') else: # 如果没有参考翻译,使用key本身 additions.append(f'"{key}" = "{key}";') if additions: # 确保文件以换行符结尾 if not content.endswith('\n'): content += '\n' # 添加缺失的条目 content += '\n// Missing keys (using reference as fallback)\n' content += '\n'.join(additions) + '\n' # 写回文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(content) print(f" Added {len(additions)} keys to {file_path}") def main(): """主函数""" print("Synchronizing all localization files...") # 获取所有key all_keys = get_all_keys() print(f"Found {len(all_keys)} unique keys across all files") # 使用英语文件作为参考 en_translations = get_translations_from_file('MyQrCode/en.lproj/Localizable.strings') print(f"Using English file as reference with {len(en_translations)} translations") # 同步所有文件 lproj_files = glob.glob('MyQrCode/*.lproj/Localizable.strings') for file_path in lproj_files: sync_file(file_path, all_keys, en_translations) print("Done!") if __name__ == "__main__": main()