Files
to-live-photo/scripts/auto_translate.py
empty 33fbc5f4b2 docs: 添加国际化实施总结和工具脚本
包含:
- 国际化实施总结文档
- 翻译工具脚本 (quick_i18n.py)
- 手动翻译库 (manual_translations.json)
- 测试指南和后续优化建议
2026-01-10 14:30:09 +08:00

101 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""
使用 Google Translate 为 Localizable.xcstrings 添加多语言翻译
"""
import json
import time
from pathlib import Path
from deep_translator import GoogleTranslator
# 语言映射
LANGUAGES = {
"es": "spanish",
"ar": "arabic",
"fr": "french",
"ja": "japanese",
"ko": "korean"
}
def translate_text(text, target_lang, source_lang="en"):
"""翻译文本"""
try:
translator = GoogleTranslator(source=source_lang, target=target_lang)
translated = translator.translate(text)
return translated
except Exception as e:
print(f" 翻译失败: {e}")
return f"[{target_lang.upper()}] {text}"
def main():
# 文件路径
xcstrings_path = Path("/Users/yuanjiantsui/projects/to-live-photo/to-live-photo/to-live-photo/Localizable.xcstrings")
print("🔄 加载 Localizable.xcstrings...")
with open(xcstrings_path, 'r', encoding='utf-8') as f:
data = json.load(f)
print(f"📊 找到 {len(data['strings'])} 个字符串\n")
# 统计
total_translations = 0
skipped = 0
# 为每个字符串添加翻译
for key_idx, (key, string_data) in enumerate(data["strings"].items(), 1):
if "localizations" not in string_data:
continue
locs = string_data["localizations"]
# 获取英文源文本
if "en" not in locs:
continue
source_text = locs["en"]["stringUnit"]["value"]
# 跳过占位符和特殊字符串
if not source_text or source_text.startswith("%") or source_text == "":
skipped += 1
continue
print(f"[{key_idx}/{len(data['strings'])}] {key}")
print(f" EN: {source_text}")
# 翻译到每种语言
for lang_code, lang_name in LANGUAGES.items():
# 跳过已有翻译
if lang_code in locs:
print(f" {lang_code.upper()}: ✓ (已存在)")
continue
# 翻译
print(f" {lang_code.upper()}: ", end="", flush=True)
translated_text = translate_text(source_text, lang_name, "auto")
print(translated_text)
# 添加翻译
locs[lang_code] = {
"stringUnit": {
"state": "translated",
"value": translated_text
}
}
total_translations += 1
time.sleep(0.5) # 避免请求过快
print() # 空行分隔
# 保存
print(f"\n💾 保存 Localizable.xcstrings...")
with open(xcstrings_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"\n✅ 完成!")
print(f" 翻译: {total_translations}")
print(f" 跳过: {skipped}")
if __name__ == "__main__":
main()