const fs = require('fs'); const path = 'src/composables/useI18n.js'; let content = fs.readFileSync(path, 'utf8'); const keys = { 'custom.showMap': { es: 'Mostrar mapa de dificultad', fr: 'Afficher la carte de difficulté', de: 'Schwierigkeitskarte anzeigen', it: 'Mostra mappa difficoltà', pt: 'Mostrar mapa de dificuldade', 'pt-br': 'Mostrar mapa de dificuldade', ru: 'Показать карту сложности', zh: '显示难度地图', ja: '難易度マップを表示', ko: '난이도 맵 표시', tr: 'Zorluk haritasını göster', uk: 'Показати карту складності', cs: 'Zobrazit mapu obtížnosti', sk: 'Zobraziť mapu náročnosti', hu: 'Nehézségi térkép megjelenítése', ro: 'Arată harta dificultății', bg: 'Покажи картата на трудността', el: 'Εμφάνιση χάρτη δυσκολίας', sr: 'Прикажи карту тежине', hr: 'Prikaži kartu težine', sl: 'Prikaži zemljevid težavnosti', lt: 'Rodyti sudėtingumo žemėlapį', lv: 'Rādīt grūtības karti', et: 'Näita raskusaste kaarti', nl: 'Moeilijkheidskaart weergeven', sv: 'Visa svårighetskarta', da: 'Vis sværhedsgradskort', fi: 'Näytä vaikeuskartta', no: 'Vis vanskelighetskart', ar: 'إظهار خريطة الصعوبة', hi: 'कठिनाई मानचित्र दिखाएँ', bn: 'কঠিনতার মানচিত্র দেখান' }, 'custom.hideMap': { es: 'Ocultar mapa de dificultad', fr: 'Masquer la carte de difficulté', de: 'Schwierigkeitskarte ausblenden', it: 'Nascondi mappa difficoltà', pt: 'Ocultar mapa de dificuldade', 'pt-br': 'Ocultar mapa de dificuldade', ru: 'Скрыть карту сложности', zh: '隐藏难度地图', ja: '難易度マップを非表示', ko: '난이도 맵 숨기기', tr: 'Zorluk haritasını gizle', uk: 'Приховати карту складності', cs: 'Skrýt mapu obtížnosti', sk: 'Skryť mapu náročnosti', hu: 'Nehézségi térkép elrejtése', ro: 'Ascunde harta dificultății', bg: 'Скрий картата на трудността', el: 'Απόκρυψη χάρτη δυσκολίας', sr: 'Сакриј карту тежине', hr: 'Sakrij kartu težine', sl: 'Skrij zemljevid težavnosti', lt: 'Slėpti sudėtingumo žemėlapį', lv: 'Paslēpt grūtības karti', et: 'Peida raskusaste kaart', nl: 'Moeilijkheidskaart verbergen', sv: 'Dölj svårighetskarta', da: 'Skjul sværhedsgradskort', fi: 'Piilota vaikeuskartta', no: 'Skjul vanskelighetskart', ar: 'إخفاء خريطة الصعوبة', hi: 'कठिनाई मानचित्र छुपाएँ', bn: 'কঠিনতার মানচিত্র লুকান' }, 'simulation.title': { es: 'Simulación de Dificultad', fr: 'Simulation de difficulté', de: 'Schwierigkeitssimulation', it: 'Simulazione della difficoltà', pt: 'Simulação de Dificuldade', 'pt-br': 'Simulação de Dificuldade', ru: 'Симуляция сложности', zh: '难度模拟', ja: '難易度シミュレーション', ko: '난이도 시뮬레이션', tr: 'Zorluk simülasyonu', uk: 'Симуляція складності', cs: 'Simulace obtížnosti', sk: 'Simulácia náročnosti', hu: 'Nehézség szimuláció', ro: 'Simulare de dificultate', bg: 'Симулиране на трудност', el: 'Προσομοίωση δυσκολίας', sr: 'Симулација тежине', hr: 'Simulacija težine', sl: 'Simulacija težavnosti', lt: 'Sudėtingumo simuliacija', lv: 'Grūtības simulācija', et: 'Raskusastme simulatsioon', nl: 'Moeilijkheidssimulatie', sv: 'Svårighetssimulering', da: 'Sværhedsgradssimulering', fi: 'Vaikeussimulointi', no: 'Vanskelighetssimulering', ar: 'محاكاة الصعوبة', hi: 'कठिनाई सिमुलेशन', bn: 'কঠিনতা সিমুলেশন' }, 'simulation.status.ready': { es: 'Listo', fr: 'Prêt', de: 'Bereit', it: 'Pronto', pt: 'Pronto', 'pt-br': 'Pronto', ru: 'Готово', zh: '就绪', ja: '準備完了', ko: '준비됨', tr: 'Hazır', uk: 'Готово', cs: 'Připraveno', sk: 'Pripravené', hu: 'Kész', ro: 'Gata', bg: 'Готово', el: 'Έτοιμο', sr: 'Спремно', hr: 'Spremno', sl: 'Pripravljeno', lt: 'Paruošta', lv: 'Gatavs', et: 'Valmis', nl: 'Gereed', sv: 'Klar', da: 'Klar', fi: 'Valmis', no: 'Klar', ar: 'جاهز', hi: 'तैयार', bn: 'প্রস্তুত' }, 'simulation.status.stopped': { es: 'Detenido', fr: 'Arrêté', de: 'Gestoppt', it: 'Arrestato', pt: 'Parado', 'pt-br': 'Parado', ru: 'Остановлено', zh: '已停止', ja: '停止', ko: '중지됨', tr: 'Durduruldu', uk: 'Зупинено', cs: 'Zastaveno', sk: 'Zastavené', hu: 'Leállítva', ro: 'Oprit', bg: 'Спряно', el: 'Διακοπή', sr: 'Заустављено', hr: 'Zaustavljeno', sl: 'Ustavljeno', lt: 'Sustabdyta', lv: 'Apturēts', et: 'Peatatud', nl: 'Gestopt', sv: 'Stoppad', da: 'Stoppet', fi: 'Pysäytetty', no: 'Stoppet', ar: 'متوقف', hi: 'रोका गया', bn: 'বন্ধ' }, 'simulation.status.completed': { es: 'Completado', fr: 'Terminé', de: 'Abgeschlossen', it: 'Completato', pt: 'Concluído', 'pt-br': 'Concluído', ru: 'Завершено', zh: '已完成', ja: '完了', ko: '완료됨', tr: 'Tamamlandı', uk: 'Завершено', cs: 'Dokončeno', sk: 'Dokončené', hu: 'Befejezve', ro: 'Finalizat', bg: 'Завършено', el: 'Ολοκληρώθηκε', sr: 'Завршено', hr: 'Dovršeno', sl: 'Dokončano', lt: 'Baigta', lv: 'Pabeigts', et: 'Lõpetatud', nl: 'Voltooid', sv: 'Slutförd', da: 'Fuldført', fi: 'Valmis', no: 'Fullført', ar: 'مكتمل', hi: 'पूर्ण', bn: 'সম্পন্ন' }, 'simulation.status.simulating': { es: 'Simulando {size}x{size} @ {density}%', fr: 'Simulation de {size}x{size} à {density}%', de: 'Simuliere {size}x{size} @ {density}%', it: 'Simulazione {size}x{size} @ {density}%', pt: 'Simulando {size}x{size} @ {density}%', 'pt-br': 'Simulando {size}x{size} @ {density}%', ru: 'Симуляция {size}x{size} @ {density}%', zh: '正在模拟 {size}x{size} @ {density}%', ja: '{size}x{size} @ {density}% をシミュレーション中', ko: '{size}x{size} @ {density}% 시뮬레이션 중', tr: '{size}x{size} @ {density}% simüle ediliyor', uk: 'Симулювання {size}x{size} @ {density}%', cs: 'Simulace {size}x{size} @ {density}%', sk: 'Simulácia {size}x{size} @ {density}%', hu: 'Szimulálás {size}x{size} @ {density}%', ro: 'Simulare {size}x{size} @ {density}%', bg: 'Симулиране {size}x{size} @ {density}%', el: 'Προσομοίωση {size}x{size} @ {density}%', sr: 'Симулирање {size}x{size} @ {density}%', hr: 'Simulacija {size}x{size} @ {density}%', sl: 'Simulacija {size}x{size} @ {density}%', lt: 'Simuliuojama {size}x{size} @ {density}%', lv: 'Simulācija {size}x{size} @ {density}%', et: 'Simuleerimine {size}x{size} @ {density}%', nl: 'Simuleren {size}x{size} @ {density}%', sv: 'Simulerar {size}x{size} @ {density}%', da: 'Simulerer {size}x{size} @ {density}%', fi: 'Simulointi {size}x{size} @ {density}%', no: 'Simulerer {size}x{size} @ {density}%', ar: 'محاكاة {size}x{size} @ {density}%', hi: '{size}x{size} @ {density}% का सिमुलेशन', bn: '{size}x{size} @ {density}% সিমুলেট করা হচ্ছে' }, 'simulation.start': { es: 'Iniciar simulación', fr: 'Démarrer la simulation', de: 'Simulation starten', it: 'Avvia simulazione', pt: 'Iniciar simulação', 'pt-br': 'Iniciar simulação', ru: 'Начать симуляцию', zh: '开始模拟', ja: 'シミュレーション開始', ko: '시뮬레이션 시작', tr: 'Simülasyonu başlat', uk: 'Почати симуляцію', cs: 'Spustit simulaci', sk: 'Spustiť simuláciu', hu: 'Szimuláció indítása', ro: 'Pornește simularea', bg: 'Стартирай симулация', el: 'Έναρξη προσομοίωσης', sr: 'Покрени симулацију', hr: 'Pokreni simulaciju', sl: 'Zaženi simulacijo', lt: 'Pradėti simuliaciją', lv: 'Sākt simulāciju', et: 'Alusta simulatsiooni', nl: 'Simulatie starten', sv: 'Starta simulering', da: 'Start simulering', fi: 'Aloita simulointi', no: 'Start simulering', ar: 'بدء المحاكاة', hi: 'सिमुलेशन शुरू करें', bn: 'সিমুলেশন শুরু' }, 'simulation.stop': { es: 'Detener', fr: 'Arrêter', de: 'Stoppen', it: 'Stop', pt: 'Parar', 'pt-br': 'Parar', ru: 'Стоп', zh: '停止', ja: '停止', ko: '중지', tr: 'Durdur', uk: 'Зупинити', cs: 'Zastavit', sk: 'Zastaviť', hu: 'Leállítás', ro: 'Oprește', bg: 'Спри', el: 'Διακοπή', sr: 'Заустави', hr: 'Zaustavi', sl: 'Ustavi', lt: 'Stabdyti', lv: 'Apturēt', et: 'Peata', nl: 'Stoppen', sv: 'Stoppa', da: 'Stop', fi: 'Pysäytä', no: 'Stopp', ar: 'إيقاف', hi: 'रोकें', bn: 'বন্ধ করুন' }, 'simulation.table.size': { es: 'Tamaño', fr: 'Taille', de: 'Größe', it: 'Dimensione', pt: 'Tamanho', 'pt-br': 'Tamanho', ru: 'Размер', zh: '大小', ja: 'サイズ', ko: '크기', tr: 'Boyut', uk: 'Розмір', cs: 'Velikost', sk: 'Veľkosť', hu: 'Méret', ro: 'Dimensiune', bg: 'Размер', el: 'Μέγεθος', sr: 'Величина', hr: 'Veličina', sl: 'Velikost', lt: 'Dydis', lv: 'Izmērs', et: 'Suurus', nl: 'Grootte', sv: 'Storlek', da: 'Størrelse', fi: 'Koko', no: 'Størrelse', ar: 'الحجم', hi: 'आकार', bn: 'আকার' }, 'simulation.table.density': { es: 'Densidad', fr: 'Densité', de: 'Dichte', it: 'Densità', pt: 'Densidade', 'pt-br': 'Densidade', ru: 'Плотность', zh: '密度', ja: '密度', ko: '밀도', tr: 'Yoğunluk', uk: 'Щільність', cs: 'Hustota', sk: 'Hustota', hu: 'Sűrűség', ro: 'Densitate', bg: 'Плътност', el: 'Πυκνότητα', sr: 'Густина', hr: 'Gustoća', sl: 'Gostota', lt: 'Tankis', lv: 'Blīvums', et: 'Tihedus', nl: 'Dichtheid', sv: 'Densitet', da: 'Densitet', fi: 'Tiheys', no: 'Tetthet', ar: 'الكثافة', hi: 'घनत्व', bn: 'ঘনত্ব' }, 'simulation.table.solved': { es: 'Resuelto (Lógica)', fr: 'Résolu (Logique)', de: 'Gelöst (Logik)', it: 'Risolto (Logica)', pt: 'Resolvido (Lógica)', 'pt-br': 'Resolvido (Lógica)', ru: 'Решено (Логика)', zh: '已解(逻辑)', ja: '解決(ロジック)', ko: '해결됨(논리)', tr: 'Çözüldü (Mantık)', uk: 'Розв’язано (Логіка)', cs: 'Vyřešeno (Logika)', sk: 'Vyriešené (Logika)', hu: 'Megoldva (Logika)', ro: 'Rezolvat (Logică)', bg: 'Решено (Логика)', el: 'Επιλύθηκε (Λογική)', sr: 'Решено (Логика)', hr: 'Riješeno (Logika)', sl: 'Rešeno (Logika)', lt: 'Išspręsta (Logika)', lv: 'Atrisināts (Loģika)', et: 'Lahendatud (Loogika)', nl: 'Opgelost (Logica)', sv: 'Löst (Logik)', da: 'Løst (Logik)', fi: 'Ratkaistu (Logiikka)', no: 'Løst (Logikk)', ar: 'تم الحل (منطق)', hi: 'हल (तर्क)', bn: 'সমাধান (লজিক)' }, 'simulation.empty': { es: 'Pulsa Iniciar para ejecutar la simulación Monte Carlo', fr: 'Appuyez sur Démarrer pour lancer la simulation Monte Carlo', de: 'Drücke Start, um die Monte-Carlo-Simulation zu starten', it: 'Premi Avvia per eseguire la simulazione Monte Carlo', pt: 'Pressione Iniciar para executar a simulação de Monte Carlo', 'pt-br': 'Pressione Iniciar para executar a simulação de Monte Carlo', ru: 'Нажмите «Старт», чтобы запустить моделирование Монте‑Карло', zh: '点击开始运行蒙特卡罗模拟', ja: 'Monte Carlo シミュレーションを実行するには開始を押してください', ko: 'Monte Carlo 시뮬레이션을 실행하려면 시작을 누르세요', tr: 'Monte Carlo simülasyonunu çalıştırmak için Başlat’a basın', uk: 'Натисніть «Почати», щоб запустити симуляцію Монте‑Карло', cs: 'Stiskněte Start pro spuštění simulace Monte Carlo', sk: 'Stlačte Štart pre spustenie simulácie Monte Carlo', hu: 'Nyomd meg a Startot a Monte Carlo szimulációhoz', ro: 'Apasă Start pentru a rula simularea Monte Carlo', bg: 'Натисни Старт, за да стартираш симулация Монте Карло', el: 'Πατήστε Έναρξη για να τρέξετε προσομοίωση Monte Carlo', sr: 'Притисни Старт да покренеш Монте Карло симулацију', hr: 'Pritisni Start za pokretanje Monte Carlo simulacije', sl: 'Pritisnite Start za zagon simulacije Monte Carlo', lt: 'Paspauskite Start, kad paleistumėte Monte Karlo simuliaciją', lv: 'Nospiediet Start, lai palaistu Monte Carlo simulāciju', et: 'Vajuta Start, et käivitada Monte Carlo simulatsioon', nl: 'Druk op Start om de Monte Carlo-simulatie te starten', sv: 'Tryck Start för att köra Monte Carlo-simuleringen', da: 'Tryk Start for at køre Monte Carlo-simuleringen', fi: 'Paina Käynnistä aloittaaksesi Monte Carlo -simulaation', no: 'Trykk Start for å kjøre Monte Carlo-simuleringen', ar: 'اضغط ابدأ لتشغيل محاكاة مونتِ كارلو', hi: 'मोंटे कार्लो सिमुलेशन चलाने के लिए स्टार्ट दबाएँ', bn: 'মোন্টে কার্লো সিমুলেশন চালাতে স্টার্ট চাপুন' }, 'custom.simulationHelp': { es: '¿Cómo se calcula?', fr: 'Comment est-ce calculé ?', de: 'Wie wird das berechnet?', it: 'Come viene calcolato?', pt: 'Como isso é calculado?', 'pt-br': 'Como isso é calculado?', ru: 'Как это рассчитывается?', zh: '这是如何计算的?', ja: 'これはどのように計算されますか?', ko: '이것은 어떻게 계산됩니까?', tr: 'Bu nasıl hesaplanıyor?', uk: 'Як це обчислюється?', cs: 'Jak se to počítá?', sk: 'Ako sa to počíta?', hu: 'Hogyan számoljuk?', ro: 'Cum este calculat?', bg: 'Как се изчислява?', el: 'Πώς υπολογίζεται;', sr: 'Како се израчунава?', hr: 'Kako se izračunava?', sl: 'Kako je izračunano?', lt: 'Kaip tai apskaičiuojama?', lv: 'Kā tas tiek aprēķināts?', et: 'Kuidas see arvutatakse?', nl: 'Hoe wordt dit berekend?', sv: 'Hur beräknas detta?', da: 'Hvordan beregnes dette?', fi: 'Miten tämä lasketaan?', no: 'Hvordan beregnes dette?', ar: 'كيف يتم احتساب ذلك؟', hi: 'यह कैसे गणना किया जाता है?', bn: 'এটি কীভাবে গণনা করা হয়?' } }; function replaceInLanguage(lang, key, value) { const langStart = new RegExp(`\\s{2}['\"]?${lang}['\"]?\\s*:\\s*\\{`); const index = content.search(langStart); if (index === -1) return; const start = content.indexOf('{', index); let depth = 1; let i = start + 1; while (i < content.length && depth > 0) { if (content[i] === '{') depth++; else if (content[i] === '}') depth--; i++; } const block = content.slice(start + 1, i - 1); let newBlock; const keyRegex = new RegExp(`(['\"])${key}\\1\\s*:\\s*(['\"]).*?\\2`); if (keyRegex.test(block)) { newBlock = block.replace(keyRegex, `'${key}': '${value}'`); } else { newBlock = block.trim().endsWith(',') ? block + `\n '${key}': '${value}'` : block + `,\n '${key}': '${value}'`; } content = content.slice(0, start + 1) + newBlock + content.slice(i - 1); } Object.entries(keys).forEach(([key, translations]) => { Object.entries(translations).forEach(([lang, value]) => { replaceInLanguage(lang, key, value); }); }); fs.writeFileSync(path, content); console.log('Translations updated.');