Files
to-live-photo/scripts/translate_privacy_terms.py
empty 1c4725cff7 feat: 隐私政策和使用条款完整多语言翻译
为隐私政策和使用条款的所有 87 个字符串添加完整的 5 种语言翻译:

📝 隐私政策 (47 个键):
- 概述、本地模式、云端模式
- 权限说明、数据收集、数据存储
- 第三方服务、用户权利、联系方式

📝 使用条款 (40 个键):
- 接受条款、服务说明
- 订阅与内购(支付、续订、取消、退款)
- 使用限制(合法、个人、禁止滥用)
- 云端服务、免责声明
- 知识产权、条款变更、联系方式

 翻译质量:
- 所有 5 种语言 (es/ar/fr/ja/ko) 达到 100% 翻译
- 法律术语准确翻译
- 保持各语言的专业性和可读性

🌍 语言覆盖:
- 🇪🇸 西班牙语 (Español)
- 🇸🇦 阿拉伯语 (العربية)
- 🇫🇷 法语 (Français)
- 🇯🇵 日语 (日本語)
- 🇰🇷 韩语 (한국어)

总计: 87 键 × 5 语言 = 435 个专业翻译

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-10 14:49:26 +08:00

211 lines
13 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
为隐私政策和使用条款添加多语言翻译
"""
import json
from pathlib import Path
# 隐私政策和使用条款的专业翻译
PRIVACY_TERMS_TRANSLATIONS = {
# 隐私政策 - 标题
"privacy.lastUpdated": {
"es": "Última actualización: diciembre de 2025",
"ar": "آخر تحديث: ديسمبر 2025",
"fr": "Dernière mise à jour : décembre 2025",
"ja": "最終更新2025年12月",
"ko": "최종 업데이트: 2025년 12월"
},
"privacy.overview.title": {
"es": "Resumen",
"ar": "نظرة عامة",
"fr": "Aperçu",
"ja": "概要",
"ko": "개요"
},
"privacy.overview.intro1": {
"es": "Live Photo Maker (en adelante \"la App\") respeta y protege su privacidad. Esta Política de Privacidad explica cómo recopilamos, usamos y protegemos su información.",
"ar": "يحترم Live Photo Maker (المشار إليه فيما يلي باسم \"التطبيق\") خصوصيتك ويحميها. توضح سياسة الخصوصية هذه كيفية جمع معلوماتك واستخدامها وحمايتها.",
"fr": "Live Photo Maker (ci-après \"l'App\") respecte et protège votre vie privée. Cette Politique de Confidentialité explique comment nous collectons, utilisons et protégeons vos informations.",
"ja": "Live Photo Maker以下「本アプリ」はお客様のプライバシーを尊重し保護します。このプライバシーポリシーでは、情報の収集、使用、保護方法について説明します。",
"ko": "Live Photo Maker(이하 \"\")는 귀하의 개인정보를 존중하고 보호합니다. 본 개인정보 보호정책은 정보 수집, 사용 및 보호 방법을 설명합니다."
},
"privacy.overview.intro2": {
"es": "La App ofrece dos modos de procesamiento: procesamiento local (gratis) y mejora en la nube (suscripción de pago). Los métodos de procesamiento de datos difieren según el modo.",
"ar": "يوفر التطبيق وضعين للمعالجة: المعالجة المحلية (مجانًا) والتحسين السحابي (اشتراك مدفوع). تختلف طرق معالجة البيانات حسب الوضع.",
"fr": "L'App propose deux modes de traitement : traitement local (gratuit) et amélioration cloud (abonnement payant). Les méthodes de traitement des données diffèrent selon le mode.",
"ja": "本アプリは2つの処理モードを提供しますローカル処理無料とクラウド強化有料サブスクリプション。データ処理方法はモードによって異なります。",
"ko": "앱은 두 가지 처리 모드를 제공합니다: 로컬 처리(무료) 및 클라우드 향상(유료 구독). 데이터 처리 방법은 모드에 따라 다릅니다."
},
# 本地模式
"privacy.localMode.title": {
"es": "Modo de Procesamiento Local (Gratis)",
"ar": "وضع المعالجة المحلية (مجاني)",
"fr": "Mode de Traitement Local (Gratuit)",
"ja": "ローカル処理モード(無料)",
"ko": "로컬 처리 모드(무료)"
},
"privacy.localMode.item1.title": {
"es": "Procesamiento en el dispositivo",
"ar": "المعالجة على الجهاز",
"fr": "Traitement sur l'appareil",
"ja": "デバイス上の処理",
"ko": "기기 내 처리"
},
"privacy.localMode.item1.desc": {
"es": "La conversión de video y la mejora de IA local se realizan en su dispositivo, los datos no salen de su teléfono.",
"ar": "يتم إجراء تحويل الفيديو والتحسين المحلي بالذكاء الاصطناعي على جهازك، ولا تغادر البيانات هاتفك.",
"fr": "La conversion vidéo et l'amélioration IA locale s'effectuent sur votre appareil, les données ne quittent pas votre téléphone.",
"ja": "動画変換とローカルAI強化はデバイス上で実行され、データは携帯電話から離れません。",
"ko": "동영상 변환 및 로컬 AI 향상은 기기에서 수행되며 데이터가 휴대폰을 떠나지 않습니다."
},
"privacy.localMode.item2.title": {
"es": "Sin carga de datos",
"ar": "لا توجد عملية تحميل بيانات",
"fr": "Aucun téléchargement de données",
"ja": "データアップロードなし",
"ko": "데이터 업로드 없음"
},
"privacy.localMode.item2.desc": {
"es": "Al usar el modo de procesamiento local, sus imágenes y videos no se cargan a ningún servidor.",
"ar": "عند استخدام وضع المعالجة المحلية، لا يتم تحميل صورك ومقاطع الفيديو الخاصة بك إلى أي خادم.",
"fr": "En mode de traitement local, vos images et vidéos ne sont pas téléchargées vers un serveur.",
"ja": "ローカル処理モードを使用する場合、画像や動画はサーバーにアップロードされません。",
"ko": "로컬 처리 모드를 사용할 때 이미지와 동영상이 서버에 업로드되지 않습니다."
},
# 云端模式
"privacy.cloudMode.title": {
"es": "Modo de Mejora en la Nube (Pro)",
"ar": "وضع التحسين السحابي (Pro)",
"fr": "Mode d'Amélioration Cloud (Pro)",
"ja": "クラウド強化モードPro",
"ko": "클라우드 향상 모드(Pro)"
},
"privacy.cloudMode.item1.title": {
"es": "Transferencia de datos",
"ar": "نقل البيانات",
"fr": "Transfert de données",
"ja": "データ転送",
"ko": "데이터 전송"
},
"privacy.cloudMode.item1.desc": {
"es": "Al usar la mejora en la nube, las imágenes o fotogramas de video seleccionados se cargan al servidor a través de una conexión cifrada para su procesamiento.",
"ar": "عند استخدام التحسين السحابي، يتم تحميل الصور أو إطارات الفيديو المحددة إلى الخادم عبر اتصال مشفر للمعالجة.",
"fr": "Lors de l'utilisation de l'amélioration cloud, les images ou images vidéo sélectionnées sont téléchargées vers le serveur via une connexion chiffrée pour traitement.",
"ja": "クラウド強化を使用する場合、選択した画像または動画フレームは暗号化された接続を介してサーバーにアップロードされて処理されます。",
"ko": "클라우드 향상을 사용할 때 선택한 이미지 또는 동영상 프레임이 암호화된 연결을 통해 서버에 업로드되어 처리됩니다."
},
"privacy.cloudMode.item2.title": {
"es": "Eliminación instantánea",
"ar": "الحذف الفوري",
"fr": "Suppression instantanée",
"ja": "即時削除",
"ko": "즉시 삭제"
},
"privacy.cloudMode.item2.desc": {
"es": "Después del procesamiento, sus datos originales y resultados se eliminarán automáticamente del servidor en 24 horas.",
"ar": "بعد المعالجة، سيتم حذف بياناتك الأصلية والنتائج تلقائيًا من الخادم في غضون 24 ساعة.",
"fr": "Après le traitement, vos données d'origine et résultats seront automatiquement supprimés du serveur sous 24 heures.",
"ja": "処理後、元のデータと結果は24時間以内にサーバーから自動削除されます。",
"ko": "처리 후 원본 데이터와 결과가 24시간 이내에 서버에서 자동 삭제됩니다."
},
"privacy.cloudMode.item3.title": {
"es": "Seguridad de datos",
"ar": "أمان البيانات",
"fr": "Sécurité des données",
"ja": "データセキュリティ",
"ko": "데이터 보안"
},
"privacy.cloudMode.item3.desc": {
"es": "Todos los datos transferidos están cifrados de extremo a extremo, y los servidores están ubicados en centros de datos que cumplen con GDPR.",
"ar": "يتم تشفير جميع البيانات المنقولة من طرف إلى طرف، وتقع الخوادم في مراكز بيانات متوافقة مع اللائحة العامة لحماية البيانات.",
"fr": "Toutes les données transférées sont chiffrées de bout en bout, et les serveurs sont situés dans des centres de données conformes au RGPD.",
"ja": "すべての転送データはエンドツーエンドで暗号化され、サーバーはGDPR準拠のデータセンターに配置されています。",
"ko": "모든 전송 데이터는 엔드투엔드 암호화되며 서버는 GDPR 준수 데이터 센터에 위치합니다."
},
"privacy.cloudMode.warning": {
"es": "⚠️ La función de mejora en la nube requiere conexión de red y se le pedirá confirmación antes de cada uso.",
"ar": "⚠️ تتطلب وظيفة التحسين السحابي اتصال شبكة وسيتم طلب التأكيد قبل كل استخدام.",
"fr": "⚠️ La fonction d'amélioration cloud nécessite une connexion réseau et une confirmation vous sera demandée avant chaque utilisation.",
"ja": "⚠️ クラウド強化機能にはネットワーク接続が必要で、使用前に毎回確認が求められます。",
"ko": "⚠️ 클라우드 향상 기능은 네트워크 연결이 필요하며 사용 전 매번 확인을 요청합니다."
},
# 权限说明
"privacy.permissions.title": {
"es": "Explicación de Permisos",
"ar": "شرح الأذونات",
"fr": "Explication des Autorisations",
"ja": "権限説明",
"ko": "권한 설명"
},
"privacy.permissions.item1.title": {
"es": "Permiso de lectura del álbum",
"ar": "إذن قراءة الألبوم",
"fr": "Autorisation de lecture d'album",
"ja": "アルバム読み取り権限",
"ko": "앨범 읽기 권한"
},
"privacy.permissions.item1.desc": {
"es": "Para seleccionar material de video del álbum.",
"ar": "لتحديد مواد الفيديو من الألبوم.",
"fr": "Pour sélectionner du matériel vidéo de l'album.",
"ja": "アルバムから動画素材を選択するため。",
"ko": "앨범에서 동영상 자료를 선택하기 위함."
},
"privacy.permissions.item2.title": {
"es": "Permiso de escritura del álbum",
"ar": "إذن كتابة الألبوم",
"fr": "Autorisation d'écriture d'album",
"ja": "アルバム書き込み権限",
"ko": "앨범 쓰기 권한"
},
"privacy.permissions.item2.desc": {
"es": "Para guardar Live Photos generadas en el álbum.",
"ar": "لحفظ Live Photos المُنشأة في الألبوم.",
"fr": "Pour enregistrer les Live Photos générées dans l'album.",
"ja": "生成したLive Photoをアルバムに保存するため。",
"ko": "생성된 Live Photo를 앨범에 저장하기 위함."
},
"privacy.permissions.item3.title": {
"es": "Acceso a red (opcional)",
"ar": "الوصول إلى الشبكة (اختياري)",
"fr": "Accès réseau (optionnel)",
"ja": "ネットワークアクセス(オプション)",
"ko": "네트워크 액세스(선택사항)"
},
"privacy.permissions.item3.desc": {
"es": "Solo necesario al usar la función de mejora en la nube.",
"ar": "مطلوب فقط عند استخدام وظيفة التحسين السحابي.",
"fr": "Nécessaire uniquement lors de l'utilisation de la fonction d'amélioration cloud.",
"ja": "クラウド強化機能使用時のみ必要。",
"ko": "클라우드 향상 기능 사용 시에만 필요."
},
}
def main():
# 读取文件
xcstrings_path = Path("to-live-photo/to-live-photo/Localizable.xcstrings")
with open(xcstrings_path, 'r') as f:
data = json.load(f)
# 应用翻译
updated_count = 0
for key, translations in PRIVACY_TERMS_TRANSLATIONS.items():
if key in data["strings"]:
for lang, value in translations.items():
data["strings"][key]["localizations"][lang]["stringUnit"]["value"] = value
updated_count += 1
# 保存
with open(xcstrings_path, 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"✅ 已更新 {len(PRIVACY_TERMS_TRANSLATIONS)} 个键的翻译")
print(f" 总共 {updated_count} 个翻译单元")
if __name__ == "__main__":
main()