# ๐ŸŒ MULTI-LANGUAGE LOCALIZATION PLAN **Game:** Mrtva Dolina / Death Valley **Date:** January 4, 2026 **Status:** Planning Phase --- ## ๐Ÿ“‹ CORE LANGUAGES ### **Primary (DONE):** โœ… 1. **Slovenian (sl-SI)** - Native language, COMPLETE - โœ… All dialogue translated - โœ… UI translated - โœ… 12 prologue voiceovers (Rok + Petra) - โœ… Real character portraits ### **Target Languages (TODO):** 2. **English (en-US)** ๐Ÿ‡บ๐Ÿ‡ธ 3. **German (de-DE)** ๐Ÿ‡ฉ๐Ÿ‡ช 4. **Italian (it-IT)** ๐Ÿ‡ฎ๐Ÿ‡น 5. **Croatian (hr-HR)** ๐Ÿ‡ญ๐Ÿ‡ท 6. **Serbian (sr-RS)** ๐Ÿ‡ท๐Ÿ‡ธ --- ## ๐ŸŽฏ IMPLEMENTATION STRATEGY ### **Phase 1: Localization System** (Week 1) **Goal:** Create dynamic language switching system **Tasks:** 1. โœ… Create `LocalizationSystem.js` (already exists!) 2. Create language JSON files: - `assets/localization/en-US.json` - `assets/localization/de-DE.json` - `assets/localization/it-IT.json` - `assets/localization/hr-HR.json` - `assets/localization/sr-RS.json` - `assets/localization/sl-SI.json` (extract current) 3. Update `PrologueScene.js` to use LocalizationSystem 4. Create language selector UI (main menu) **Structure:** ```json { "ui": { "skip": "Press ESC to skip", "autoAdvance": "Press SPACE to toggle auto-advance" }, "prologue": { "scene_01": { "speaker": "NARRATOR", "text": "Year 2084. The zombie virus destroyed the world." }, ... } } ``` --- ### **Phase 2: Translation** (Week 2-3) **Goal:** Translate all game text to 5 languages **Content to Translate:** **1. Prologue (12 scenes):** - Scene descriptions - Character dialogue - Narrator text **2. UI Elements:** - Menu items - Button labels - Tutorial text - Item descriptions - Quest text **3. NPC Dialogue:** - Gronk conversations - Town NPCs - Quest givers **Translation Methods:** **Option A: Professional Translation** (BEST) - Hire freelance translators (Fiverr, Upwork) - ~$50-100 per language for game text - Native speakers ensure quality **Option B: AI Translation** (FAST) - Use DeepL API (better than Google) - Manual review by native speaker - Free tier: 500,000 characters/month **Option C: Community Translation** (FREE) - Open GitHub for community contributions - Steam forum volunteers - Quality varies **Recommendation:** Start with **DeepL + Manual Review** --- ### **Phase 3: Voiceover Generation** (Week 4-5) **Goal:** Generate voiceovers for all 5 languages **Available Voices (Microsoft Edge TTS):** **English (en-US):** - Male: `en-US-GuyNeural` (Kai) - Female: `en-US-JennyNeural` (Ana) - Narrator: `en-US-ChristopherNeural` **German (de-DE):** - Male: `de-DE-ConradNeural` (Kai) - Female: `de-DE-KatjaNeural` (Ana) - Narrator: `de-DE-KillianNeural` **Italian (it-IT):** - Male: `it-IT-DiegoNeural` (Kai) - Female: `it-IT-ElsaNeural` (Ana) - Narrator: `it-IT-GiuseppeNeural` **Croatian (hr-HR):** - Male: `hr-HR-SreckoNeural` (Kai) - Female: `hr-HR-GabrijelaNeural` (Ana) **Serbian (sr-RS):** - Male: `sr-RS-NicholasNeural` (Kai) - Female: `sr-RS-SophieNeural` (Ana) **Generation Scripts:** Create automated scripts for each language: ```bash # ai_voice_gen/generate_prologue_english.sh # ai_voice_gen/generate_prologue_german.sh # ai_voice_gen/generate_prologue_italian.sh # ai_voice_gen/generate_prologue_croatian.sh # ai_voice_gen/generate_prologue_serbian.sh ``` **Folder Structure:** ``` assets/audio ๐Ÿ”ด/voiceover/ โ”œโ”€โ”€ prologue_sl/ (Slovenian - DONE) โ”œโ”€โ”€ prologue_en/ (English) โ”œโ”€โ”€ prologue_de/ (German) โ”œโ”€โ”€ prologue_it/ (Italian) โ”œโ”€โ”€ prologue_hr/ (Croatian) โ””โ”€โ”€ prologue_sr/ (Serbian) ``` --- ### **Phase 4: Integration** (Week 6) **Goal:** Wire everything together **Tasks:** 1. **Update PreloadScene:** - Load language files - Detect user's OS language (default) - Load appropriate voiceover folder 2. **Language Selector UI:** ``` [MAIN MENU] โ”œโ”€โ”€ New Game โ”œโ”€โ”€ Continue โ”œโ”€โ”€ Options โ”‚ โ””โ”€โ”€ Language โ—„ NEW! โ”‚ โ”œโ”€โ”€ ๐Ÿ‡ธ๐Ÿ‡ฎ Slovenลกฤina โ”‚ โ”œโ”€โ”€ ๐Ÿ‡ฌ๐Ÿ‡ง English โ”‚ โ”œโ”€โ”€ ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch โ”‚ โ”œโ”€โ”€ ๐Ÿ‡ฎ๐Ÿ‡น Italiano โ”‚ โ”œโ”€โ”€ ๐Ÿ‡ญ๐Ÿ‡ท Hrvatski โ”‚ โ””โ”€โ”€ ๐Ÿ‡ท๐Ÿ‡ธ Srpski โ””โ”€โ”€ Quit ``` 3. **Dynamic Loading:** ```javascript // PrologueScene.preload() const lang = this.game.settings.language || 'sl-SI'; // Load appropriate audio for (let i = 1; i <= 12; i++) { const num = i.toString().padStart(2, '0'); this.load.audio( `prologue_${num}`, `assets/audio ๐Ÿ”ด/voiceover/prologue_${lang.split('-')[0]}/prologue_${num}.wav` ); } // Load localization this.load.json('localization', `assets/localization/${lang}.json`); ``` 4. **Runtime Switching:** - Save language preference to localStorage - Reload scene when language changes - Keep game state --- ## ๐Ÿ“Š PRODUCTION TIMELINE | Week | Task | Deliverable | |------|------|-------------| | **1** | Localization System | Language JSON structure | | **2** | English Translation | en-US.json + voiceovers | | **3** | German + Italian | de-DE.json, it-IT.json + voice | | **4** | Croatian + Serbian | hr-HR.json, sr-RS.json + voice | | **5** | Integration | Language selector UI | | **6** | Testing | All languages verified | **Total Time:** ~6 weeks (1.5 months) --- ## ๐Ÿ’ฐ COST ESTIMATE ### **Option 1: Professional Translation** - 5 languages ร— $75/language = **$375** - Voiceovers: FREE (Edge TTS) - **Total: $375** ### **Option 2: AI + Review** - DeepL API: FREE (under limit) - Native speaker review: $25/language ร— 5 = **$125** - Voiceovers: FREE (Edge TTS) - **Total: $125** ### **Option 3: DIY** - Your time: ~40 hours - Voiceovers: FREE (Edge TTS) - **Total: $0** (time only) **Recommendation:** **Option 2** (AI + Review) - Best balance of quality/cost/speed --- ## ๐Ÿ› ๏ธ TECHNICAL IMPLEMENTATION ### **1. Create Localization Manager** ```javascript // src/systems/LocalizationManager.js class LocalizationManager { constructor(game) { this.game = game; this.currentLanguage = 'sl-SI'; this.translations = {}; this.availableLanguages = [ { code: 'sl-SI', name: 'Slovenลกฤina', flag: '๐Ÿ‡ธ๐Ÿ‡ฎ' }, { code: 'en-US', name: 'English', flag: '๐Ÿ‡ฌ๐Ÿ‡ง' }, { code: 'de-DE', name: 'Deutsch', flag: '๐Ÿ‡ฉ๐Ÿ‡ช' }, { code: 'it-IT', name: 'Italiano', flag: '๐Ÿ‡ฎ๐Ÿ‡น' }, { code: 'hr-HR', name: 'Hrvatski', flag: '๐Ÿ‡ญ๐Ÿ‡ท' }, { code: 'sr-RS', name: 'Srpski', flag: '๐Ÿ‡ท๐Ÿ‡ธ' } ]; } loadLanguage(langCode) { // Load JSON file this.translations = this.game.cache.json.get(`lang_${langCode}`); this.currentLanguage = langCode; localStorage.setItem('game_language', langCode); } getText(key) { const keys = key.split('.'); let value = this.translations; for (const k of keys) { value = value[k]; if (!value) return key; // Fallback } return value; } getVoiceFolder() { const langShort = this.currentLanguage.split('-')[0]; return `prologue_${langShort}`; } } ``` ### **2. Update PrologueScene** ```javascript preload() { // Detect language const savedLang = localStorage.getItem('game_language') || 'sl-SI'; const langShort = savedLang.split('-')[0]; // Load localization this.load.json(`lang_${savedLang}`, `assets/localization/${savedLang}.json`); // Load character portraits this.load.image('kai_portrait', 'reference_images/kai_master_style33.png'); this.load.image('ana_portrait', 'reference_images/ana_master_style33.png'); // Load voiceovers for current language for (let i = 1; i <= 12; i++) { const num = i.toString().padStart(2, '0'); this.load.audio( `prologue_${num}`, `assets/audio ๐Ÿ”ด/voiceover/prologue_${langShort}/prologue_${num}.wav` ); } } create() { // Initialize localization this.lang = new LocalizationManager(this.game); this.lang.loadLanguage(savedLang); // Use translations const skipText = this.add.text( width - 20, 20, this.lang.getText('ui.skip'), { fontSize: '16px', color: '#888888' } ); } ``` --- ## ๐ŸŽฌ AUTOMATED GENERATION WORKFLOW ### **Master Script:** ```bash #!/bin/bash # generate_all_languages.sh echo "๐ŸŒ Generating voiceovers for all 6 languages..." # Slovenian (DONE) echo "โœ… Slovenian - already complete" # English ./ai_voice_gen/generate_prologue_english.sh # German ./ai_voice_gen/generate_prologue_german.sh # Italian ./ai_voice_gen/generate_prologue_italian.sh # Croatian ./ai_voice_gen/generate_prologue_croatian.sh # Serbian ./ai_voice_gen/generate_prologue_serbian.sh echo "๐ŸŽ‰ All languages generated!" echo "๐Ÿ“Š Total files: 72 (12 per language ร— 6 languages)" ``` **Estimated Time:** ~20 minutes for all languages --- ## ๐Ÿ“ˆ PRIORITY ORDER ### **Immediate (This Month):** 1. โœ… Slovenian (COMPLETE) 2. **English** (biggest market) ### **High Priority (Next Month):** 3. **German** (Steam top 3 market) 4. **Italian** (neighboring country, big gaming market) ### **Medium Priority (Q1 2026):** 5. **Croatian** (region similarity) 6. **Serbian** (region similarity) --- ## ๐ŸŽฏ NEXT STEPS ### **TODAY:** 1. Create `LocalizationManager.js` 2. Extract Slovenian text to `sl-SI.json` 3. Create `en-US.json` (English translation) ### **THIS WEEK:** 4. Generate English voiceovers (12 files) 5. Test language switching 6. Create language selector UI ### **NEXT WEEK:** 7. German + Italian translations 8. Generate voiceovers 9. Full integration test --- ## ๐Ÿ“ NOTES **Why These 5 Languages?** 1. **English** - Global standard, Steam #1 2. **German** - Steam #2 market, high-quality gaming culture 3. **Italian** - Close to Slovenia, big indie game market 4. **Croatian** - Regional, similar culture, easy translation 5. **Serbian** - Regional, similar culture, Cyrillic option **Alternative Languages to Consider:** - **Russian** (huge market, but Cyrillic) - **Spanish** (global, but less indie focus) - **French** (big market, strict translation requirements) - **Polish** (huge gaming market, Slavic language) --- ## โœ… SUCCESS CRITERIA - [ ] All 6 languages fully translated - [ ] 72 voiceover files generated (12 ร— 6) - [ ] Language selector UI functional - [ ] Runtime switching works seamlessly - [ ] No performance impact - [ ] Saved preferences persist - [ ] All text uses localization system **Target Launch:** All 6 languages available at **Early Access launch** --- **Last Updated:** January 4, 2026 **Status:** Planning โ†’ Implementation Phase Starting