#!/usr/bin/env python3 """为WallpaperGuideView添加国际化字符串""" import json # WallpaperGuideView需要添加的本地化字符串 STRINGS_TO_ADD = { "wallpaper.title": { "zh-Hans": "设置动态壁纸", "zh-Hant": "設定動態桌布", "en": "Set Live Wallpaper", "es": "Configurar Fondo de Pantalla Dinámico", "ar": "تعيين خلفية حية", "fr": "Définir le Fond d'Écran Animé", "ja": "ライブ壁紙を設定", "ko": "라이브 배경화면 설정" }, "wallpaper.ios17Required": { "zh-Hans": "iOS 17+ 才支持锁屏动态效果", "zh-Hant": "iOS 17+ 才支援鎖定畫面動態效果", "en": "iOS 17+ required for lock screen animations", "es": "iOS 17+ requerido para animaciones de pantalla de bloqueo", "ar": "iOS 17+ مطلوب لتحريك شاشة القفل", "fr": "iOS 17+ requis pour les animations d'écran de verrouillage", "ja": "ロック画面のアニメーションにはiOS 17+が必要", "ko": "잠금 화면 애니메이션에는 iOS 17+ 필요" }, "wallpaper.openPhotosApp": { "zh-Hans": "打开照片 App", "zh-Hant": "開啟照片 App", "en": "Open Photos App", "es": "Abrir la App de Fotos", "ar": "فتح تطبيق الصور", "fr": "Ouvrir l'App Photos", "ja": "写真Appを開く", "ko": "사진 앱 열기" }, "wallpaper.findSavedPhoto": { "zh-Hans": "找到刚保存的 Live Photo", "zh-Hant": "找到剛儲存的 Live Photo", "en": "Find the saved Live Photo", "es": "Encuentra la Live Photo guardada", "ar": "ابحث عن Live Photo المحفوظة", "fr": "Trouver la Live Photo enregistrée", "ja": "保存したLive Photoを見つける", "ko": "저장된 Live Photo 찾기" }, "wallpaper.steps": { "zh-Hans": "设置壁纸步骤", "zh-Hant": "設定桌布步驟", "en": "Wallpaper Setup Steps", "es": "Pasos para Configurar el Fondo", "ar": "خطوات إعداد الخلفية", "fr": "Étapes de Configuration du Fond d'Écran", "ja": "壁紙設定の手順", "ko": "배경화면 설정 단계" }, "wallpaper.step1.title": { "zh-Hans": "在照片中找到 Live Photo", "zh-Hant": "在照片中找到 Live Photo", "en": "Find Live Photo in Photos", "es": "Encuentra Live Photo en Fotos", "ar": "ابحث عن Live Photo في الصور", "fr": "Trouver Live Photo dans Photos", "ja": "写真内でLive Photoを見つける", "ko": "사진에서 Live Photo 찾기" }, "wallpaper.step1.description": { "zh-Hans": "照片左上角会显示【LIVE】标识,长按可预览动画效果", "zh-Hant": "照片左上角會顯示【LIVE】標識,長按可預覽動畫效果", "en": "Look for [LIVE] badge at top-left, long press to preview animation", "es": "Busca la insignia [LIVE] arriba a la izquierda, mantén presionado para previsualizar", "ar": "ابحث عن شارة [LIVE] في الأعلى يسارًا، اضغط مطولاً لمعاينة الحركة", "fr": "Cherchez le badge [LIVE] en haut à gauche, appuyez longuement pour prévisualiser", "ja": "左上の【LIVE】バッジを探し、長押しでアニメーションをプレビュー", "ko": "왼쪽 상단의 [LIVE] 배지를 찾고 길게 눌러 미리보기" }, "wallpaper.step2.title": { "zh-Hans": "点击分享按钮", "zh-Hant": "點擊分享按鈕", "en": "Tap Share Button", "es": "Toca el Botón Compartir", "ar": "اضغط على زر المشاركة", "fr": "Appuyez sur Partager", "ja": "共有ボタンをタップ", "ko": "공유 버튼 탭" }, "wallpaper.step2.description": { "zh-Hans": "位于屏幕左下角,然后选择【用作壁纸】选项", "zh-Hant": "位於畫面左下角,然後選擇【用作桌布】選項", "en": "Located at bottom-left, then select [Use as Wallpaper]", "es": "Ubicado abajo a la izquierda, luego selecciona [Usar como Fondo]", "ar": "موجود أسفل اليسار، ثم اختر [استخدام كخلفية]", "fr": "En bas à gauche, puis sélectionnez [Utiliser comme Fond d'Écran]", "ja": "左下にあり、【壁紙として使用】を選択", "ko": "왼쪽 하단에 위치, 그런 다음 [배경화면으로 사용] 선택" }, "wallpaper.step3.title": { "zh-Hans": "调整照片位置", "zh-Hant": "調整照片位置", "en": "Adjust Photo Position", "es": "Ajustar Posición de la Foto", "ar": "ضبط موضع الصورة", "fr": "Ajuster la Position de la Photo", "ja": "写真の位置を調整", "ko": "사진 위치 조정" }, "wallpaper.step3.description": { "zh-Hans": "双指缩放和拖动来调整照片在壁纸中的位置", "zh-Hant": "雙指縮放和拖動來調整照片在桌布中的位置", "en": "Pinch to zoom and drag to adjust photo position", "es": "Pellizca para ampliar y arrastra para ajustar la posición", "ar": "استخدم إصبعين للتكبير والسحب لضبط الموضع", "fr": "Pincez pour zoomer et glissez pour ajuster la position", "ja": "ピンチでズーム、ドラッグで位置を調整", "ko": "두 손가락으로 확대/축소 및 드래그하여 위치 조정" }, "wallpaper.step4.title": { "zh-Hans": "确认动态效果已开启", "zh-Hant": "確認動態效果已開啟", "en": "Confirm Animation is Enabled", "es": "Confirmar que la Animación está Activada", "ar": "تأكد من تفعيل الحركة", "fr": "Confirmer l'Activation de l'Animation", "ja": "アニメーションが有効であることを確認", "ko": "애니메이션이 활성화되었는지 확인" }, "wallpaper.step4.description": { "zh-Hans": "点击左下角的 Live Photo 图标,图标高亮表示动态效果已开启", "zh-Hant": "點擊左下角的 Live Photo 圖示,圖示高亮表示動態效果已開啟", "en": "Tap Live Photo icon at bottom-left, highlighted icon means animation is on", "es": "Toca el ícono de Live Photo abajo a la izquierda, resaltado significa que está activado", "ar": "اضغط على أيقونة Live Photo أسفل اليسار، التمييز يعني تشغيل الحركة", "fr": "Appuyez sur l'icône Live Photo en bas à gauche, surbrillance = animation activée", "ja": "左下のLive Photoアイコンをタップ、ハイライトは有効を意味する", "ko": "왼쪽 하단의 Live Photo 아이콘 탭, 강조 표시는 활성화를 의미" }, "wallpaper.step4iOS16.title": { "zh-Hans": "了解系统限制", "zh-Hant": "了解系統限制", "en": "Understand System Limitations", "es": "Comprender las Limitaciones del Sistema", "ar": "فهم قيود النظام", "fr": "Comprendre les Limitations du Système", "ja": "システムの制限を理解", "ko": "시스템 제한사항 이해" }, "wallpaper.step4iOS16.description": { "zh-Hans": "iOS 16 锁屏不支持动态效果,仅主屏幕长按可播放", "zh-Hant": "iOS 16 鎖定畫面不支援動態效果,僅主畫面長按可播放", "en": "iOS 16 lock screen doesn't support animations, only home screen long press works", "es": "La pantalla de bloqueo de iOS 16 no admite animaciones, solo funciona mantener presionada la pantalla de inicio", "ar": "شاشة قفل iOS 16 لا تدعم الحركة، فقط الضغط الطويل على الشاشة الرئيسية يعمل", "fr": "L'écran de verrouillage iOS 16 ne supporte pas les animations, seul l'appui long sur l'écran d'accueil fonctionne", "ja": "iOS 16ロック画面はアニメーション非対応、ホーム画面の長押しのみ動作", "ko": "iOS 16 잠금 화면은 애니메이션 미지원, 홈 화면 길게 누르기만 작동" }, "wallpaper.step5.title": { "zh-Hans": "完成设置", "zh-Hant": "完成設定", "en": "Complete Setup", "es": "Completar Configuración", "ar": "إكمال الإعداد", "fr": "Terminer la Configuration", "ja": "設定を完了", "ko": "설정 완료" }, "wallpaper.step5.description": { "zh-Hans": "点击右上角【完成】,选择【设定锁定屏幕】或【同时设定】", "zh-Hant": "點擊右上角【完成】,選擇【設定鎖定畫面】或【同時設定】", "en": "Tap [Done] at top-right, choose [Set Lock Screen] or [Set Both]", "es": "Toca [Hecho] arriba a la derecha, elige [Definir Pantalla de Bloqueo] o [Definir Ambas]", "ar": "اضغط على [تم] في الأعلى يمينًا، اختر [تعيين شاشة القفل] أو [تعيين كليهما]", "fr": "Appuyez sur [Terminé] en haut à droite, choisissez [Définir Écran de Verrouillage] ou [Définir les Deux]", "ja": "右上の【完了】をタップ、【ロック画面に設定】または【両方に設定】を選択", "ko": "오른쪽 상단의 [완료] 탭, [잠금 화면 설정] 또는 [둘 다 설정] 선택" }, "wallpaper.faq": { "zh-Hans": "常见问题", "zh-Hant": "常見問題", "en": "Frequently Asked Questions", "es": "Preguntas Frecuentes", "ar": "الأسئلة الشائعة", "fr": "Questions Fréquentes", "ja": "よくある質問", "ko": "자주 묻는 질문" }, "wallpaper.faq1.question": { "zh-Hans": "找不到刚保存的 Live Photo?", "zh-Hant": "找不到剛儲存的 Live Photo?", "en": "Can't find the saved Live Photo?", "es": "¿No encuentras la Live Photo guardada?", "ar": "لا يمكن العثور على Live Photo المحفوظة؟", "fr": "Impossible de trouver la Live Photo enregistrée?", "ja": "保存したLive Photoが見つからない?", "ko": "저장된 Live Photo를 찾을 수 없나요?" }, "wallpaper.faq1.answer": { "zh-Hans": "打开照片 App → 相簿 → 媒体类型 → 实况照片,或直接搜索【实况】", "zh-Hant": "開啟照片 App → 相簿 → 媒體類型 → 原況照片,或直接搜尋【原況】", "en": "Open Photos → Albums → Media Types → Live Photos, or search [Live]", "es": "Abre Fotos → Álbumes → Tipos de Medios → Live Photos, o busca [Live]", "ar": "افتح الصور ← الألبومات ← أنواع الوسائط ← Live Photos، أو ابحث عن [Live]", "fr": "Ouvrez Photos → Albums → Types de Médias → Live Photos, ou recherchez [Live]", "ja": "写真 → アルバム → メディアタイプ → Live Photos を開く、または【Live】を検索", "ko": "사진 열기 → 앨범 → 미디어 유형 → Live Photos, 또는 [Live] 검색" }, "wallpaper.faq2.question": { "zh-Hans": "设置后壁纸不会动?", "zh-Hant": "設定後桌布不會動?", "en": "Wallpaper doesn't animate after setting?", "es": "¿El fondo no se anima después de configurarlo?", "ar": "الخلفية لا تتحرك بعد التعيين؟", "fr": "Le fond d'écran ne s'anime pas après configuration?", "ja": "設定後に壁紙がアニメーションしない?", "ko": "설정 후 배경화면이 움직이지 않나요?" }, "wallpaper.faq2.answer": { "zh-Hans": "锁屏状态下长按屏幕 1-2 秒可触发动画播放(需 iOS 17+)", "zh-Hant": "鎖定畫面狀態下長按畫面 1-2 秒可觸發動畫播放(需 iOS 17+)", "en": "Long press the lock screen for 1-2 seconds to trigger animation (requires iOS 17+)", "es": "Mantén presionada la pantalla de bloqueo durante 1-2 segundos para activar la animación (requiere iOS 17+)", "ar": "اضغط مطولاً على شاشة القفل لمدة 1-2 ثانية لتشغيل الحركة (يتطلب iOS 17+)", "fr": "Appuyez longuement sur l'écran de verrouillage pendant 1-2 secondes pour déclencher l'animation (nécessite iOS 17+)", "ja": "ロック画面を1〜2秒長押しでアニメーションを再生(iOS 17+必要)", "ko": "잠금 화면을 1-2초간 길게 눌러 애니메이션 재생 (iOS 17+ 필요)" }, "wallpaper.faq3.question": { "zh-Hans": "动画效果突然失效?", "zh-Hant": "動畫效果突然失效?", "en": "Animation suddenly stopped working?", "es": "¿La animación dejó de funcionar repentinamente?", "ar": "توقفت الحركة عن العمل فجأة؟", "fr": "L'animation a soudainement cessé de fonctionner?", "ja": "アニメーションが突然動作しなくなった?", "ko": "애니메이션이 갑자기 작동하지 않나요?" }, "wallpaper.faq3.answer": { "zh-Hans": "检查是否开启了【低电量模式】,该模式下系统会自动禁用动态效果以省电", "zh-Hant": "檢查是否開啟了【低耗電模式】,該模式下系統會自動停用動態效果以省電", "en": "Check if [Low Power Mode] is enabled, it automatically disables animations to save battery", "es": "Verifica si el [Modo de Bajo Consumo] está activado, desactiva automáticamente las animaciones para ahorrar batería", "ar": "تحقق من تفعيل [وضع الطاقة المنخفضة]، فهو يعطل الحركة تلقائيًا لتوفير البطارية", "fr": "Vérifiez si le [Mode Économie d'Énergie] est activé, il désactive automatiquement les animations pour économiser la batterie", "ja": "【低電力モード】が有効か確認、このモードでは省電力のためアニメーションが自動的に無効になります", "ko": "[저전력 모드]가 활성화되어 있는지 확인, 배터리 절약을 위해 애니메이션이 자동으로 비활성화됩니다" }, "wallpaper.faq4.question": { "zh-Hans": "Live Photo 图标是灰色/划线?", "zh-Hant": "Live Photo 圖示是灰色/劃線?", "en": "Live Photo icon is gray/crossed out?", "es": "¿El ícono de Live Photo está en gris/tachado?", "ar": "أيقونة Live Photo رمادية/مشطوبة؟", "fr": "L'icône Live Photo est grise/barrée?", "ja": "Live Photoアイコンがグレー/取り消し線?", "ko": "Live Photo 아이콘이 회색/취소선이 있나요?" }, "wallpaper.faq4.answer": { "zh-Hans": "iOS 对壁纸有额外限制,部分 Live Photo 可能不支持作为动态壁纸。建议使用 2-3 秒时长、竖屏比例的视频重新生成", "zh-Hant": "iOS 對桌布有額外限制,部分 Live Photo 可能不支援作為動態桌布。建議使用 2-3 秒時長、直向比例的影片重新產生", "en": "iOS has extra wallpaper restrictions, some Live Photos may not work. Try regenerating with a 2-3 second portrait video", "es": "iOS tiene restricciones adicionales, algunos Live Photos pueden no funcionar. Intenta regenerar con un video vertical de 2-3 segundos", "ar": "iOS لديه قيود إضافية، بعض Live Photos قد لا تعمل. حاول إعادة الإنشاء باستخدام فيديو عمودي بطول 2-3 ثانية", "fr": "iOS a des restrictions supplémentaires, certaines Live Photos peuvent ne pas fonctionner. Essayez de régénérer avec une vidéo portrait de 2-3 secondes", "ja": "iOSには追加の壁紙制限があり、一部のLive Photoが機能しない場合があります。2〜3秒の縦向き動画で再生成してみてください", "ko": "iOS에는 추가 배경화면 제한이 있어 일부 Live Photo가 작동하지 않을 수 있습니다. 2-3초 길이의 세로 비디오로 다시 생성해 보세요" }, "wallpaper.faq5.question": { "zh-Hans": "为什么我的锁屏没有动画?", "zh-Hant": "為什麼我的鎖定畫面沒有動畫?", "en": "Why doesn't my lock screen have animation?", "es": "¿Por qué mi pantalla de bloqueo no tiene animación?", "ar": "لماذا لا تحتوي شاشة القفل على حركة؟", "fr": "Pourquoi mon écran de verrouillage n'a-t-il pas d'animation?", "ja": "なぜロック画面にアニメーションがないのですか?", "ko": "왜 내 잠금 화면에 애니메이션이 없나요?" }, "wallpaper.faq5.answer": { "zh-Hans": "iOS 16 系统限制:锁屏壁纸不支持 Live Photo 动画,建议升级到 iOS 17+", "zh-Hant": "iOS 16 系統限制:鎖定畫面桌布不支援 Live Photo 動畫,建議升級到 iOS 17+", "en": "iOS 16 limitation: lock screen wallpapers don't support Live Photo animations, upgrade to iOS 17+", "es": "Limitación de iOS 16: los fondos de pantalla de bloqueo no admiten animaciones de Live Photo, actualiza a iOS 17+", "ar": "قيد iOS 16: خلفيات شاشة القفل لا تدعم حركة Live Photo، قم بالترقية إلى iOS 17+", "fr": "Limitation iOS 16 : les fonds d'écran de verrouillage ne supportent pas les animations Live Photo, passez à iOS 17+", "ja": "iOS 16の制限:ロック画面壁紙はLive Photoアニメーション非対応、iOS 17+へのアップグレードを推奨", "ko": "iOS 16 제한: 잠금 화면 배경화면은 Live Photo 애니메이션 미지원, iOS 17+로 업그레이드하세요" } } def main(): xcstrings_path = "/Users/yuanjiantsui/projects/to-live-photo/to-live-photo/to-live-photo/Localizable.xcstrings" # 读取现有文件 with open(xcstrings_path, 'r', encoding='utf-8') as f: data = json.load(f) # 添加新的字符串 added_count = 0 for key, translations in STRINGS_TO_ADD.items(): if key in data["strings"]: print(f"⚠️ Key '{key}' already exists, skipping...") continue data["strings"][key] = { "extractionState": "manual", "localizations": {} } for lang, value in translations.items(): data["strings"][key]["localizations"][lang] = { "stringUnit": { "state": "translated", "value": value } } added_count += 1 print(f"✅ Added: {key}") # 写回文件(保持格式化) with open(xcstrings_path, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) print(f"\n🎉 Successfully added {added_count} new keys!") print(f"📁 Updated: {xcstrings_path}") if __name__ == "__main__": main()