#!/usr/bin/env python3 """ DeepL Translation Script Translates Slovenian game text to 4 languages """ import json import os from pathlib import Path try: import deepl DEEPL_AVAILABLE = True except ImportError: DEEPL_AVAILABLE = False print("⚠️ DeepL not installed. Install with: pip3 install deepl") print("Using fallback translations (manual review needed!)") # Paths LOCALIZATION_DIR = Path("assets/localization") LOCALIZATION_DIR.mkdir(parents=True, exist_ok=True) # Language mappings LANGUAGES = { 'EN-US': 'en-US.json', 'DE': 'de-DE.json', 'IT': 'it-IT.json', 'ZH': 'zh-CN.json' } def translate_dict(data, translator, target_lang): """Recursively translate all strings in dictionary""" if isinstance(data, dict): return {k: translate_dict(v, translator, target_lang) for k, v in data.items()} elif isinstance(data, list): return [translate_dict(item, translator, target_lang) for item in data] elif isinstance(data, str): if DEEPL_AVAILABLE and translator: try: result = translator.translate_text(data, target_lang=target_lang) return result.text except Exception as e: print(f" ⚠️ Translation error: {e}") return data else: return data # Fallback: return original else: return data def create_slovenian_json(): """Extract Slovenian text from PrologueScene""" slovenian_data = { "ui": { "skip": "Pritisni ESC za preskok", "autoAdvance": "Pritisni PRESLEDNICA za samodejno nadaljevanje" }, "prologue": { "01": { "speaker": "NARRATOR", "text": "Leto 2084. Zombi virus je uničil svet." }, "02": { "speaker": "KAI", "text": "Moje ime je Kai Marković. Star sem štirinajst let." }, "03": { "speaker": "KAI", "text": "Moja dvojčica Ana in jaz, sva zelo povezana. Nezlomljiv vez." }, "04": { "speaker": "KAI", "text": "Naša starša sta bila znanstvenika. Raziskovala sta virusne mutacije." }, "05": { "speaker": "NARRATOR", "text": "Tretji dan izbruha. Horda zombijev napada družinsko hišo." }, "06": { "speaker": "NARRATOR", "text": "Starša se žrtvujeta, da rešita dvojčka. Zadnji besede: 'Beži, Kai! Zaščiti Ano!'" }, "07": { "speaker": "NARRATOR", "text": "Iz senc se pojavi Orjaški Troll Kralj. Poslal ga je zlobni doktor Krnić." }, "08": { "speaker": "ANA", "text": "KAI! REŠI ME! KAIII!" }, "09": { "speaker": "KAI", "text": "ANA! NE! VRNITE MI JO!" }, "10": { "speaker": "NARRATOR", "text": "Kai se spremeni v Alfa Hibrida. Vijolične oči. Moč nadzora nad zombiji." }, "11": { "speaker": "NARRATOR", "text": "Šest mesecev kasneje. Kai se zbudi na majhni kmetiji. Ana je izginila." }, "12": { "speaker": "KAI", "text": "Moram jo najti. Ne glede na to, kaj bo potrebno. Ana, prihajam!" } } } output_file = LOCALIZATION_DIR / "sl-SI.json" with open(output_file, 'w', encoding='utf-8') as f: json.dump(slovenian_data, f, indent=2, ensure_ascii=False) print(f"✅ Created {output_file}") return slovenian_data def main(): print("🌍 TRANSLATION SYSTEM") print("=" * 50) # Step 1: Create Slovenian JSON print("\n📝 Step 1: Creating Slovenian source...") sl_data = create_slovenian_json() # Step 2: Initialize DeepL translator = None if DEEPL_AVAILABLE: api_key = os.environ.get('DEEPL_API_KEY') if api_key: try: translator = deepl.Translator(api_key) print(f"✅ DeepL initialized") except Exception as e: print(f"⚠️ DeepL error: {e}") else: print("⚠️ DEEPL_API_KEY not set in environment") # Step 3: Translate to each language print("\n🔄 Step 2: Translating to 4 languages...\n") for lang_code, filename in LANGUAGES.items(): print(f" Translating to {filename}...") if translator: translated_data = translate_dict(sl_data, translator, lang_code) else: # Fallback: Use Slovenian text (manual review needed) print(f" ⚠️ Using fallback (Slovenian text)") translated_data = sl_data.copy() output_file = LOCALIZATION_DIR / filename with open(output_file, 'w', encoding='utf-8') as f: json.dump(translated_data, f, indent=2, ensure_ascii=False) print(f" ✅ Created {filename}") print("\n🎉 Translation complete!") print(f"\n📁 Files created in {LOCALIZATION_DIR}:") for file in LOCALIZATION_DIR.glob("*.json"): size = file.stat().st_size print(f" - {file.name} ({size:,} bytes)") if not translator: print("\n⚠️ NOTE: Files created with Slovenian text (DeepL unavailable)") print("Manual translation or DeepL API key required for production!") if __name__ == "__main__": main()