#!/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()