#!/usr/bin/env python3 """ 为 Localizable.xcstrings 添加多语言翻译 使用 AI 翻译服务批量翻译所有字符串 """ import json import sys from pathlib import Path # 语言配置 (按优先级排序) LANGUAGES = [ ("es", "Spanish"), # 西班牙语 - 高优先级 ("ar", "Arabic"), # 阿拉伯语 - 高优先级 ("fr", "French"), # 法语 - 中优先级 ("ja", "Japanese"), # 日语 - 中优先级 ("ko", "Korean"), # 韩语 - 中优先级 ] def load_xcstrings(file_path): """加载 xcstrings 文件""" with open(file_path, 'r', encoding='utf-8') as f: return json.load(f) def save_xcstrings(file_path, data): """保存 xcstrings 文件""" with open(file_path, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) def translate_text(text, target_lang, source_lang="en"): """ 翻译文本 (占位符函数,需要集成真实翻译 API) 这里暂时返回格式化的提示信息 """ return f"[{target_lang.upper()}] {text}" def add_language_to_string(string_data, lang_code, lang_name): """为单个字符串添加指定语言的翻译""" if "localizations" not in string_data: string_data["localizations"] = {} # 如果已经有该语言的翻译,跳过 if lang_code in string_data["localizations"]: return False # 获取英文或中文作为源文本 source_text = None source_lang = None if "en" in string_data["localizations"]: source_text = string_data["localizations"]["en"]["stringUnit"]["value"] source_lang = "en" elif "zh-Hans" in string_data["localizations"]: source_text = string_data["localizations"]["zh-Hans"]["stringUnit"]["value"] source_lang = "zh-Hans" if not source_text: return False # 翻译文本 translated_text = translate_text(source_text, lang_code, source_lang) # 添加翻译 string_data["localizations"][lang_code] = { "stringUnit": { "state": "translated", "value": translated_text } } return True def main(): # 文件路径 xcstrings_path = Path("/Users/yuanjiantsui/projects/to-live-photo/to-live-photo/to-live-photo/Localizable.xcstrings") if not xcstrings_path.exists(): print(f"错误: 找不到文件 {xcstrings_path}") sys.exit(1) print(f"加载文件: {xcstrings_path}") data = load_xcstrings(xcstrings_path) # 统计信息 total_strings = len(data.get("strings", {})) print(f"找到 {total_strings} 个字符串") # 为每种语言添加翻译 for lang_code, lang_name in LANGUAGES: print(f"\n处理 {lang_name} ({lang_code})...") added_count = 0 for key, string_data in data["strings"].items(): if add_language_to_string(string_data, lang_code, lang_name): added_count += 1 print(f" ✓ 为 {added_count} 个字符串添加了 {lang_name} 翻译") # 保存文件 print(f"\n保存文件...") save_xcstrings(xcstrings_path, data) print("✓ 完成!") # 生成需要翻译的字符串列表 print("\n生成翻译清单...") output_path = xcstrings_path.parent / "translation_list.json" translation_list = {} for key, string_data in data["strings"].items(): localizations = string_data.get("localizations", {}) if "en" in localizations: translation_list[key] = { "en": localizations["en"]["stringUnit"]["value"], "zh-Hans": localizations.get("zh-Hans", {}).get("stringUnit", {}).get("value", "") } with open(output_path, 'w', encoding='utf-8') as f: json.dump(translation_list, f, ensure_ascii=False, indent=2) print(f"✓ 翻译清单已保存到: {output_path}") print(f" 包含 {len(translation_list)} 个需要翻译的字符串") if __name__ == "__main__": main()