diff --git a/index.html b/index.html index b413906..12c98ed 100644 --- a/index.html +++ b/index.html @@ -45,7 +45,7 @@ 🔄 รีเฟรช - @@ -144,15 +144,15 @@
⚔️ - วิเคราะห์ Synergy ทีม & จุดอ่อน + วิเคราะห์ Synergy ทีม & จุดอ่อน ครอบคลุม 0/7 ธาตุ
-

วิเคราะห์การครอบคลุม Weakness Break, ความสมดุลของบทบาท และความพร้อมของทีม

+

วิเคราะห์การครอบคลุม Weakness Break, ความสมดุลของบทบาท และความพร้อมของทีม

-
+
🎯 การทำลายจุดอ่อน (Weakness Break Coverage)
@@ -162,7 +162,7 @@
-
+
🛡️ การกระจายบทบาทในทีม (Team Composition & Roles)
@@ -175,25 +175,25 @@
-
+
📊 ความพร้อมของอุปกรณ์และเลเวลเฉลี่ย
-
-
เลเวลเฉลี่ย
+
เลเวลเฉลี่ย
-
-
Eidolon เฉลี่ย
+
Eidolon เฉลี่ย
-
-
สวมกรวยแสง
+
สวมกรวยแสง
-
-
รีลิกส์ครบชุด
+
รีลิกส์ครบชุด
@@ -205,22 +205,22 @@
💻 - คอนโซลคำสั่ง GM & Log สด + คอนโซลคำสั่ง GM & Log สด
- -
-

ส่งคำสั่ง GM / Server commands แบบเรียลไทม์ พร้อมติดตามสถานะและ Packet Log

+

ส่งคำสั่ง GM / Server commands แบบเรียลไทม์ พร้อมติดตามสถานะและ Packet Log

-
+
⚡ คำสั่งด่วนที่ใช้บ่อย (Quick Commands)
@@ -251,14 +251,14 @@
> - +
-
- 💡 รองรับกด ↑ ↓ เพื่อเลือกประวัติคำสั่งก่อนหน้า + 💡 รองรับกด ↑ ↓ เพื่อเลือกประวัติคำสั่งก่อนหน้า ● เซิร์ฟเวอร์ออนไลน์
@@ -1410,7 +1410,7 @@ diff --git a/js/app.js b/js/app.js index 2c1ee64..3fc01b5 100644 --- a/js/app.js +++ b/js/app.js @@ -398,7 +398,7 @@ function setConnectionStatus(connected, extraText = '') { el.connectionStatusText.textContent = extraText || t('online'); el.connectionStatusText.style.color = 'var(--accent-green)'; if (el.lblConsoleConnStatus) { - el.lblConsoleConnStatus.textContent = '● เซิร์ฟเวอร์ออนไลน์'; + el.lblConsoleConnStatus.textContent = t('consoleOnline'); el.lblConsoleConnStatus.style.color = 'var(--accent-green)'; } } else { @@ -406,7 +406,7 @@ function setConnectionStatus(connected, extraText = '') { el.connectionStatusText.textContent = extraText || t('offline'); el.connectionStatusText.style.color = 'var(--accent-red)'; if (el.lblConsoleConnStatus) { - el.lblConsoleConnStatus.textContent = '○ ออฟไลน์ (คำสั่งทำงานผ่านแคชภายใน)'; + el.lblConsoleConnStatus.textContent = t('consoleOffline'); el.lblConsoleConnStatus.style.color = 'var(--text-muted)'; } } @@ -827,6 +827,12 @@ function applyTranslations() { // Update connection status text with new language setConnectionStatus(state.isConnected); + // Update server mode badges & labels for current language + setupServerModes(); + + // Re-render team synergy in new language + renderTeamSynergy(state.statusData?.lineups); + renderLineup(state.statusData?.lineups); if (state.statusData?.ex_ranks) { renderExRanks(state.statusData.ex_ranks); @@ -870,7 +876,7 @@ function setupServerModes() { if (el.lblActiveMode) el.lblActiveMode.textContent = 'GaC-hkrpg-go'; if (el.tabBtnPersistent) { el.tabBtnPersistent.style.display = ''; - el.tabBtnPersistent.textContent = '💾 จัดการเซฟ GaC'; + el.tabBtnPersistent.textContent = t('tabPersistentGaC'); } if (el.cardPersistentChars) el.cardPersistentChars.style.display = ''; if (el.cardPersistentGlobal) el.cardPersistentGlobal.style.display = ''; @@ -878,12 +884,12 @@ function setupServerModes() { if (el.btnQuickSyncPersistent) el.btnQuickSyncPersistent.style.display = ''; if (el.btnSelectPersistent) el.btnSelectPersistent.style.display = ''; if (el.btnSelectDatagame) el.btnSelectDatagame.style.display = 'none'; - if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = 'GaC: persistent.json (/api/persistent)'; + if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = t('badgePersistenceGaC'); } else if (mode === 'firefly') { if (el.lblActiveMode) el.lblActiveMode.textContent = 'FireflyGo'; if (el.tabBtnPersistent) { el.tabBtnPersistent.style.display = ''; - el.tabBtnPersistent.textContent = '👤 ผู้บุกเบิก & March 7th'; + el.tabBtnPersistent.textContent = t('tabPersistentFirefly'); } if (el.cardPersistentChars) el.cardPersistentChars.style.display = ''; if (el.cardPersistentGlobal) el.cardPersistentGlobal.style.display = 'none'; // Hide unsupported GaC switches @@ -891,7 +897,7 @@ function setupServerModes() { if (el.btnQuickSyncPersistent) el.btnQuickSyncPersistent.style.display = 'none'; if (el.btnSelectPersistent) el.btnSelectPersistent.style.display = 'none'; if (el.btnSelectDatagame) el.btnSelectDatagame.style.display = ''; // Show data-in-game for Firefly - if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = 'FireflyGo: data-in-game.json & freesr-data.json'; + if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = t('badgePersistenceFirefly'); if (state.activeTab === 'tab-exrank') { const dashboardBtn = document.querySelector('.tab-btn[data-tab="tab-dashboard"]'); @@ -909,7 +915,7 @@ function setupServerModes() { if (el.btnQuickSyncPersistent) el.btnQuickSyncPersistent.style.display = 'none'; if (el.btnSelectPersistent) el.btnSelectPersistent.style.display = 'none'; if (el.btnSelectDatagame) el.btnSelectDatagame.style.display = 'none'; - if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = 'RobinSR: freesr-data.json (/api/freesr)'; + if (el.badgePersistenceMode) el.badgePersistenceMode.textContent = t('badgePersistenceRobin'); if (state.activeTab === 'tab-persistent' || state.activeTab === 'tab-exrank') { const dashboardBtn = document.querySelector('.tab-btn[data-tab="tab-dashboard"]'); @@ -1303,18 +1309,18 @@ function renderTeamSynergy(lineups) { // Render Element Chips const coveredCount = Object.keys(coveredElements).length; if (el.badgeSynergyCoverage) { - el.badgeSynergyCoverage.textContent = `ครอบคลุม ${coveredCount}/7 ธาตุ`; + el.badgeSynergyCoverage.textContent = t('synergyCoverageBadge', { count: coveredCount }); el.badgeSynergyCoverage.style.color = coveredCount >= 4 ? 'var(--accent-green)' : (coveredCount >= 2 ? 'var(--accent-cyan)' : 'var(--accent-gold)'); } el.synergyElementsContainer.innerHTML = HSR_ELEMENTS.map(elem => { const isCovered = !!coveredElements[elem.key]; const providers = coveredElements[elem.key] || []; - const providerText = isCovered ? providers.join(', ') : 'ไม่มีในทีม'; + const providerText = isCovered ? providers.join(', ') : t('synergyNoInTeam'); return `
${getElementIconHtml(elem.key, 22)} - ${elem.nameTh} + ${translateElement(elem.key)} ${providerText}
`; @@ -1324,17 +1330,17 @@ function renderTeamSynergy(lineups) { if (el.synergyRolesContainer) { el.synergyRolesContainer.innerHTML = `
- 🗡️ DPS (${roles.dps.length}): ${roles.dps.join(', ') || '-'} + ${t('roleDps')} (${roles.dps.length}): ${roles.dps.join(', ') || '-'}
- ⚡ ซัพพอร์ต/ดีบัฟ (${roles.support.length}): ${roles.support.join(', ') || '-'} + ${t('roleSupport')} (${roles.support.length}): ${roles.support.join(', ') || '-'}
- 🛡️ Sustain ฮีล/ชิลด์ (${roles.sustain.length}): ${roles.sustain.join(', ') || '-'} + ${t('roleSustain')} (${roles.sustain.length}): ${roles.sustain.join(', ') || '-'}
${roles.specialist.length ? `
- 🔮 พิเศษ/FUA (${roles.specialist.length}): ${roles.specialist.join(', ')} + ${t('roleSpecialist')} (${roles.specialist.length}): ${roles.specialist.join(', ')}
` : ''} `; @@ -1343,18 +1349,19 @@ function renderTeamSynergy(lineups) { // Dynamic Advice Text if (el.synergyAdviceBox) { if (activeIds.length === 0) { - el.synergyAdviceBox.innerHTML = `ยังไม่มีตัวละครในทีม กรุณาเลือกตัวละครในทีมด้านบน`; + el.synergyAdviceBox.innerHTML = `${t('adviceEmpty')}`; + el.synergyAdviceBox.style.borderColor = 'rgba(255,255,255,0.08)'; } else if (roles.sustain.length === 0) { - el.synergyAdviceBox.innerHTML = `⚠️ ข้อแนะนำ: ทีมยังขาดตัวละครสายป้องกันหรือรักษา (Preservation / Abundance) แนะนำใส่ 1 ตำแหน่งเพื่อความปลอดภัยในการเล่น`; + el.synergyAdviceBox.innerHTML = `${t('adviceNoSustain')}`; el.synergyAdviceBox.style.borderColor = 'rgba(245, 158, 11, 0.4)'; } else if (roles.dps.length === 0) { - el.synergyAdviceBox.innerHTML = `💡 ข้อแนะนำ: ทีมมีแต่ตัวซัพพอร์ต ยังไม่มีตัวทำดาเมจหลัก (Destruction / Hunt / Erudition)`; + el.synergyAdviceBox.innerHTML = `${t('adviceNoDps')}`; el.synergyAdviceBox.style.borderColor = 'rgba(56, 189, 248, 0.4)'; } else if (roles.support.length === 0) { - el.synergyAdviceBox.innerHTML = `💡 ข้อแนะนำ: ทีมมีตัวดาเมจแต่ยังไม่มีตัวบัฟหรือดีบัฟ (Harmony / Nihility) เสริมตัวซัพพอร์ตจะช่วยเร่งดาเมจได้มหาศาล`; + el.synergyAdviceBox.innerHTML = `${t('adviceNoSupport')}`; el.synergyAdviceBox.style.borderColor = 'rgba(245, 158, 11, 0.4)'; } else { - el.synergyAdviceBox.innerHTML = `✅ สมดุลยอดเยี่ยม: ทีมมีโครงสร้างครบเครื่อง ทั้งตัวทำดาเมจ ซัพพอร์ตบัฟ/ดีบัฟ และตัวฮีลเลอร์/ชิลเดอร์ พร้อมลุยทุกคอนเทนต์!`; + el.synergyAdviceBox.innerHTML = `${t('adviceBalanced')}`; el.synergyAdviceBox.style.borderColor = 'rgba(52, 211, 153, 0.4)'; } } @@ -1602,9 +1609,9 @@ function setupGMConsoleEvents() { if (!el.consoleTerminalLog) return; const text = el.consoleTerminalLog.innerText || el.consoleTerminalLog.textContent; navigator.clipboard?.writeText(text).then(() => { - showToast('คัดลอก Log ทั้งหมดลงในคลิปบอร์ดแล้ว', 'success'); + showToast(t('consoleLogCopied'), 'success'); }).catch(() => { - showToast('ไม่สามารถคัดลอก Log ได้', 'error'); + showToast(t('consoleLogCopyFailed'), 'error'); }); }); } @@ -1614,7 +1621,7 @@ function setupGMConsoleEvents() { el.btnConsoleClearLog.addEventListener('click', () => { if (el.consoleTerminalLog) { el.consoleTerminalLog.innerHTML = ''; - logToConsole('ล้างหน้าจอ Terminal เรียบร้อย', 'SYS'); + logToConsole(t('consoleLogCleared'), 'SYS'); } }); } diff --git a/js/i18n.js b/js/i18n.js index 59f4eaf..86fcf55 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -2,19 +2,71 @@ // Covers all 13 official languages supported by Honkai: Star Rail export const SUPPORTED_LANGUAGES = [ - { code: 'th', name: 'ภาษาไทย', flag: '🇹🇭' }, - { code: 'en', name: 'English', flag: '🇺🇸' }, - { code: 'zh-CN', name: '简体中文', flag: '🇨🇳' }, - { code: 'zh-TW', name: '繁體中文', flag: '🇹🇼' }, - { code: 'ja', name: '日本語', flag: '🇯🇵' }, - { code: 'ko', name: '한국어', flag: '🇰🇷' }, - { code: 'vi', name: 'Tiếng Việt', flag: '🇻🇳' }, - { code: 'id', name: 'Bahasa Indonesia', flag: '🇮🇩' }, - { code: 'es', name: 'Español', flag: '🇪🇸' }, - { code: 'fr', name: 'Français', flag: '🇫🇷' }, - { code: 'de', name: 'Deutsch', flag: '🇩🇪' }, - { code: 'ru', name: 'Русский', flag: '🇷🇺' }, - { code: 'pt', name: 'Português', flag: '🇧🇷' } + { + "code": "th", + "name": "ภาษาไทย", + "flag": "🇹🇭" + }, + { + "code": "en", + "name": "English", + "flag": "🇺🇸" + }, + { + "code": "zh-CN", + "name": "简体中文", + "flag": "🇨🇳" + }, + { + "code": "zh-TW", + "name": "繁體中文", + "flag": "🇹🇼" + }, + { + "code": "ja", + "name": "日本語", + "flag": "🇯🇵" + }, + { + "code": "ko", + "name": "한국어", + "flag": "🇰🇷" + }, + { + "code": "vi", + "name": "Tiếng Việt", + "flag": "🇻🇳" + }, + { + "code": "id", + "name": "Bahasa Indonesia", + "flag": "🇮🇩" + }, + { + "code": "es", + "name": "Español", + "flag": "🇪🇸" + }, + { + "code": "fr", + "name": "Français", + "flag": "🇫🇷" + }, + { + "code": "de", + "name": "Deutsch", + "flag": "🇩🇪" + }, + { + "code": "ru", + "name": "Русский", + "flag": "🇷🇺" + }, + { + "code": "pt", + "name": "Português", + "flag": "🇧🇷" + } ]; export const TRANSLATIONS = { @@ -71,7 +123,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "เพิ่มรีลิกส์ลงใน FreeSR สำเร็จแล้ว", "deleteItem": "ลบ", "toastItemDeleted": "ลบไอเทมสำเร็จแล้ว", - "appName": "GaC-Srtool", "appSubtitle": "Star Rail FreeSR & Server Controller", "online": "เชื่อมต่อแล้ว", @@ -295,7 +346,52 @@ export const TRANSLATIONS = { "selectFromInventory": "เลือกจากคลังเก็บของ (ตรงช่อง)", "btnAllE0S1": "⚡ ปรับ E0S1 ทุกตัว", "qaGachabaseTitle": "ดึงข้อมูล Gachabase", - "qaGachabaseDesc": "นำเข้าตัวละคร/กรวยแสง เบต้าหรือใหม่ล่าสุด" + "qaGachabaseDesc": "นำเข้าตัวละคร/กรวยแสง เบต้าหรือใหม่ล่าสุด", + "synergyTitle": "วิเคราะห์ Synergy ทีม & จุดอ่อน", + "synergySubtitle": "วิเคราะห์การครอบคลุม Weakness Break, ความสมดุลของบทบาท และความพร้อมของทีม", + "synergyBreakCoverage": "🎯 การทำลายจุดอ่อน (Weakness Break Coverage)", + "synergyRoleBalance": "🛡️ การกระจายบทบาทในทีม (Team Composition & Roles)", + "synergyEquipmentTitle": "📊 ความพร้อมของอุปกรณ์และเลเวลเฉลี่ย", + "synergyAvgLevel": "เลเวลเฉลี่ย", + "synergyAvgEidolon": "Eidolon เฉลี่ย", + "synergyLcEquipped": "สวมกรวยแสง", + "synergyRelicFull": "รีลิกส์ครบชุด", + "synergyCoverageBadge": "ครอบคลุม {count}/7 ธาตุ", + "synergyNoInTeam": "ไม่มีในทีม", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ ซัพพอร์ต/ดีบัฟ", + "roleSustain": "🛡️ Sustain ฮีล/ชิลด์", + "roleSpecialist": "🔮 พิเศษ/FUA", + "adviceEmpty": "ยังไม่มีตัวละครในทีม กรุณาเลือกตัวละครในทีมด้านบน", + "adviceNoSustain": "⚠️ ข้อแนะนำ: ทีมยังขาดตัวละครสายป้องกันหรือรักษา (Preservation / Abundance) แนะนำใส่ 1 ตำแหน่งเพื่อความปลอดภัยในการเล่น", + "adviceNoDps": "💡 ข้อแนะนำ: ทีมมีแต่ตัวซัพพอร์ต ยังไม่มีตัวทำดาเมจหลัก (Destruction / Hunt / Erudition)", + "adviceNoSupport": "💡 ข้อแนะนำ: ทีมมีตัวดาเมจแต่ยังไม่มีตัวบัฟหรือดีบัฟ (Harmony / Nihility) เสริมตัวซัพพอร์ตจะช่วยเร่งดาเมจได้มหาศาล", + "adviceBalanced": "✅ สมดุลยอดเยี่ยม: ทีมมีโครงสร้างครบเครื่อง ทั้งตัวทำดาเมจ ซัพพอร์ตบัฟ/ดีบัฟ และตัวฮีลเลอร์/ชิลเดอร์ พร้อมลุยทุกคอนเทนต์!", + "consoleTitle": "คอนโซลคำสั่ง GM & Log สด", + "consoleSubtitle": "ส่งคำสั่ง GM / Server commands แบบเรียลไทม์ พร้อมติดตามสถานะและ Packet Log", + "consoleCopyLog": "📋 คัดลอก", + "consoleClearLog": "🗑️ ล้าง Log", + "consoleQuickTitle": "⚡ คำสั่งด่วนที่ใช้บ่อย (Quick Commands)", + "consolePlaceholder": "พิมพ์คำสั่ง GM เช่น /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "ส่งคำสั่ง", + "consoleHistoryHint": "💡 รองรับกด ↑ ↓ เพื่อเลือกประวัติคำสั่งก่อนหน้า", + "consoleOnline": "● เซิร์ฟเวอร์ออนไลน์", + "consoleOffline": "○ ออฟไลน์ (คำสั่งทำงานผ่านแคชภายใน)", + "consoleLogCopied": "📋 คัดลอก Log ทั้งหมดลงในคลิปบอร์ดแล้ว", + "consoleLogCopyFailed": "❌ ไม่สามารถคัดลอก Log ได้", + "consoleLogCleared": "ล้างหน้าจอ Terminal เรียบร้อย", + "btnGachabaseSync": "🌐 ซิงค์ Gachabase", + "tabPersistentGaC": "💾 จัดการเซฟ GaC", + "tabPersistentFirefly": "👤 ผู้บุกเบิก & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Superimpose (ขัดเกลา)", + "lcPickerTitle": "🗡️ เลือกสวมใส่กรวยแสง (Light Cone)", + "lcPickerSigTitle": "⭐ กรวยแสงประจำตัวแนะนำ (Signature)", + "lcPickerEquipSig": "⚡ สวมใส่ชิ้นนี้", + "lcPickerUnequip": "✕ ถอดกรวยแสงออก", + "lblPingInterval": "ความถี่ในการตรวจสอบเซิร์ฟเวอร์ (Ping Interval)" }, "en": { "ahaGlobalDesc": "Enable server-wide Aeon ★ Aha special trait", @@ -352,7 +448,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Relic added to FreeSR", "deleteItem": "Delete", "toastItemDeleted": "Item deleted successfully", - "appName": "GaC-Srtool", "appSubtitle": "Star Rail FreeSR & Server Controller", "online": "Connected", @@ -574,7 +669,52 @@ export const TRANSLATIONS = { "quickGenRecDesc": "Generate 5★ +15 with best set & main stat", "btnGenAndEquip": "Generate & Equip", "selectFromInventory": "Select from Inventory", - "btnAllE0S1": "⚡ All E0S1" + "btnAllE0S1": "⚡ All E0S1", + "synergyTitle": "Team Synergy & Weakness Analysis", + "synergySubtitle": "Analyze Weakness Break coverage, role balance, and equipment readiness", + "synergyBreakCoverage": "🎯 Weakness Break Coverage", + "synergyRoleBalance": "🛡️ Team Composition & Role Distribution", + "synergyEquipmentTitle": "📊 Equipment Readiness & Average Level", + "synergyAvgLevel": "Avg Level", + "synergyAvgEidolon": "Avg Eidolon", + "synergyLcEquipped": "Lightcones Equipped", + "synergyRelicFull": "Full Relic Sets", + "synergyCoverageBadge": "Covers {count}/7 Elements", + "synergyNoInTeam": "None in team", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Support / Debuff", + "roleSustain": "🛡️ Sustain (Healer/Shielder)", + "roleSpecialist": "🔮 Specialist / FUA", + "adviceEmpty": "No characters in lineup. Please select teammates above.", + "adviceNoSustain": "⚠️ Tip: The team lacks a defensive or healer unit (Preservation / Abundance). Adding one is strongly recommended for survival.", + "adviceNoDps": "💡 Tip: The team consists only of supports without a primary damage dealer (Destruction / Hunt / Erudition).", + "adviceNoSupport": "💡 Tip: The team has damage dealers but lacks buffers or debuffers (Harmony / Nihility). Adding supports will greatly amplify your damage.", + "adviceBalanced": "✅ Excellent Balance: The lineup has full coverage with DPS, buffer/debuffer, and sustain units. Ready for any challenge!", + "consoleTitle": "GM Command Console & Live Log", + "consoleSubtitle": "Dispatch GM / Server commands in real-time with status and packet logs", + "consoleCopyLog": "📋 Copy Log", + "consoleClearLog": "🗑️ Clear Log", + "consoleQuickTitle": "⚡ Quick Commands", + "consolePlaceholder": "Type GM command e.g. /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Dispatch", + "consoleHistoryHint": "💡 Press ↑ / ↓ to navigate command history", + "consoleOnline": "● Server Online", + "consoleOffline": "○ Offline (Local execution fallback)", + "consoleLogCopied": "📋 All logs copied to clipboard!", + "consoleLogCopyFailed": "❌ Failed to copy logs", + "consoleLogCleared": "Terminal log cleared", + "btnGachabaseSync": "🌐 Sync Gachabase", + "tabPersistentGaC": "💾 GaC Save Manager", + "tabPersistentFirefly": "👤 Trailblazer & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Superimpose Rank", + "lcPickerTitle": "🗡️ Select Light Cone to Equip", + "lcPickerSigTitle": "⭐ Signature Light Cone", + "lcPickerEquipSig": "⚡ Equip This", + "lcPickerUnequip": "✕ Unequip Light Cone", + "lblPingInterval": "Server Status Check Interval" }, "zh-CN": { "ahaGlobalDesc": "全服启用星神·阿哈特殊被动", @@ -617,7 +757,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "已成功添加遗器至 FreeSR", "deleteItem": "删除", "toastItemDeleted": "道具已成功删除", - "appName": "GaC-Srtool", "appSubtitle": "星穹铁道 FreeSR 与服务器控制器", "online": "已连接", @@ -791,7 +930,114 @@ export const TRANSLATIONS = { "Elation": "欢愉" }, "settingsSaved": "设置已成功保存!", - "settingsReset": "已恢复默认设置" + "settingsReset": "已恢复默认设置", + "btnE6S5": "⭐ 满命满精 (E6S5)", + "btnE0S1": "⚡ 零命专武 (E0S1)", + "modalTabShowcase": "🖼️ 展示卡片", + "showcaseAutoRelics": "⚡ 一键装备推荐遗器", + "showcaseCopy": "📋 复制文本", + "showcaseExport": "🖼️ 导出图片", + "btnChangeLc": "更换光锥", + "lcPassiveTitle": "光锥技能效果", + "toastE6S5Applied": "⭐ 角色已调整为满配 E6S5(80级、技能满级、叠影5)!", + "toastE0S1Applied": "⚡ 角色已调整为平民毕业 E0S1(80级、技能满级、叠影1)!", + "toastShowcaseCopied": "📋 角色配装信息已复制到剪贴板!", + "toastRelicsEquipped": "⚡ 已为 {name} 装备推荐的 +15 遗器全套!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ API Gateway 连接设置", + "settingsConnSubtitle": "配置服务器运行模式与 REST 接口端点", + "btnTestPing": "⚡ 测试连接", + "settingsBattleTitle": "🎮 战斗与 FreeSR 默认配置", + "settingsBattleSubtitle": "自定义游戏内默认战斗与队伍初始化行为", + "lblDefaultEnergy": "战斗开局能量值 (Battle Starting Energy)", + "lblAutoSync": "自动同步至服务器 (Auto-Sync)", + "descAutoSync": "修改角色或装备时立即将变更发送至服务端", + "lblDefaultCreative": "默认开启创造模式 (Creative Mode)", + "descDefaultCreative": "允许队伍配置重复角色及突破4人限制", + "settingsShowcaseTitle": "🖼️ 角色展示卡片设置", + "settingsShowcaseSubtitle": "自定义配装展示卡的美观度与展示细节", + "lblShowRolls": "显示遗器副词条强化次数 (Roll Counts)", + "descShowRolls": "在副词条旁显示强化命中的次数标签", + "lblElementAura": "属性光效光晕 (Element Aura Glow)", + "descElementAura": "卡片背景与氛围光环随角色属性动态变换", + "settingsCacheTitle": "🧹 缓存管理与系统重置", + "settingsCacheSubtitle": "清理浏览器临时缓存或将工具恢复出厂设置", + "lblCacheSize": "LocalStorage 存储占用:", + "btnClearCache": "🧹 清除浏览器缓存", + "btnFactoryReset": "🔄 恢复出厂设置", + "toastPingSuccess": "⚡ 连接成功!延迟: {ms} ms", + "toastPingFailed": "❌ 无法连接到 Gateway,请检查服务端状态", + "toastCacheCleared": "🧹 浏览器缓存已清空", + "qaLineupE0S1Title": "全队一键 E0S1", + "qaLineupE0S1Desc": "将当前编队角色设为 0命+1叠专武", + "qaLineupRelicsTitle": "一键全队神装", + "qaLineupRelicsDesc": "为编队4人一键穿戴 +15 毕业遗器", + "lblPersistenceInfo": "服务端存档与数据管理", + "modalTabOverview": "角色总览", + "modalTabRelics": "遗器与配装", + "overviewStatsTitle": "⚔️ 战斗面板 (Combat Stats)", + "overviewStatsNote": "已计入光锥与遗器属性加成", + "overviewEquippedLc": "🗡️ 当前装备光锥", + "overviewEquippedRelics": "🛡️ 遗器套装效果", + "modalRelicsTitle": "🛡️ 遗器配装 (6 部位)", + "modalRelicsSubtitle": "点击单个部位更换,或一键穿戴推荐套装", + "btnAutoEquipRelics": "⚡ 一键穿戴推荐套装", + "btnClearAllRelics": "🧹 一键卸下全部", + "activeSetEffects": "✨ 当前生效的套装效果", + "modalColLevel": "等级", + "lblPromotion": "突破阶段", + "slotPickerTitle": "🛡️ 选择要装备的遗器", + "quickGenRecTitle": "⚡ 为该部位生成推荐遗器", + "quickGenRecDesc": "自动生成适配的 5★ +15 最优套装与主词条", + "btnGenAndEquip": "生成并穿戴", + "selectFromInventory": "从库存中选择对应部位", + "btnAllE0S1": "⚡ 全员 E0S1", + "qaGachabaseTitle": "从 Gachabase 获取数据", + "qaGachabaseDesc": "导入最新的测试服/解密角色与光锥数据", + "synergyTitle": "队伍协同与弱点破盾分析", + "synergySubtitle": "分析弱点属性覆盖度、队伍角色定位均衡性与练度准备状态", + "synergyBreakCoverage": "🎯 弱点破盾属性覆盖", + "synergyRoleBalance": "🛡️ 队伍构成与角色分工", + "synergyEquipmentTitle": "📊 装备准备度与平均等级", + "synergyAvgLevel": "平均等级", + "synergyAvgEidolon": "平均星魂", + "synergyLcEquipped": "光锥装配", + "synergyRelicFull": "遗器满配", + "synergyCoverageBadge": "覆盖 {count}/7 属性", + "synergyNoInTeam": "未在队伍中", + "roleDps": "🗡️ 输出 (DPS)", + "roleSupport": "⚡ 辅助/减益", + "roleSustain": "🛡️ 生存 (治疗/护盾)", + "roleSpecialist": "🔮 特殊/追击", + "adviceEmpty": "当前队伍尚无角色,请在上方选择角色加入队伍。", + "adviceNoSustain": "⚠️ 建议:队伍缺乏防护或治疗角色(存护/丰饶),建议加入1名以保障战斗生存能力。", + "adviceNoDps": "💡 建议:队伍全为辅助角色,缺少主力输出担当(毁灭/巡猎/智识)。", + "adviceNoSupport": "💡 建议:队伍有输出但缺乏增益或减益辅佐(同谐/虚无),加入辅助可显著提高队伍总伤害。", + "adviceBalanced": "✅ 阵容均衡:队伍构架完备,兼备输出、增益减益辅助与治疗护盾生存,随时准备出征!", + "consoleTitle": "GM 命令行控制台与实时日志", + "consoleSubtitle": "实时向服务器发送 GM 指令并跟踪数据包日志与执行状态", + "consoleCopyLog": "📋 复制日志", + "consoleClearLog": "🗑️ 清空日志", + "consoleQuickTitle": "⚡ 常用快捷命令", + "consolePlaceholder": "输入 GM 命令,如 /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "发送指令", + "consoleHistoryHint": "💡 支持按 ↑ ↓ 键快速选择历史命令", + "consoleOnline": "● 服务器在线", + "consoleOffline": "○ 离线模式(本地缓存执行)", + "consoleLogCopied": "📋 全部日志已复制到剪贴板!", + "consoleLogCopyFailed": "❌ 无法复制日志", + "consoleLogCleared": "终端日志已清空", + "btnGachabaseSync": "🌐 同步 Gachabase", + "tabPersistentGaC": "💾 GaC 存档管理", + "tabPersistentFirefly": "👤 开拓者与三月七", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "叠影等阶", + "lcPickerTitle": "🗡️ 选择要装备的光锥", + "lcPickerSigTitle": "⭐ 推荐专属光锥 (Signature)", + "lcPickerEquipSig": "⚡ 立即装备", + "lcPickerUnequip": "✕ 卸下光锥" }, "zh-TW": { "ahaGlobalDesc": "全服啟用星神·阿哈特殊被動", @@ -834,7 +1080,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "已成功新增遺器至 FreeSR", "deleteItem": "刪除", "toastItemDeleted": "道具已成功刪除", - "appName": "GaC-Srtool", "appSubtitle": "星穹鐵道 FreeSR 與伺服器控制器", "online": "已連線", @@ -1008,7 +1253,114 @@ export const TRANSLATIONS = { "Elation": "歡愉" }, "settingsSaved": "設定已成功儲存!", - "settingsReset": "已恢復預設設定" + "settingsReset": "已恢復預設設定", + "btnE6S5": "⭐ 滿命滿精 (E6S5)", + "btnE0S1": "⚡ 零命專武 (E0S1)", + "modalTabShowcase": "🖼️ 展示卡片", + "showcaseAutoRelics": "⚡ 一鍵裝備推薦遺器", + "showcaseCopy": "📋 複製文字", + "showcaseExport": "🖼️ 匯出圖片", + "btnChangeLc": "更換光錐", + "lcPassiveTitle": "光錐技能效果", + "toastE6S5Applied": "⭐ 角色已調整為滿配 E6S5(80級、技能滿級、疊影5)!", + "toastE0S1Applied": "⚡ 角色已調整為平民畢業 E0S1(80級、技能滿級、疊影1)!", + "toastShowcaseCopied": "📋 角色配裝資訊已複製到剪貼簿!", + "toastRelicsEquipped": "⚡ 已為 {name} 裝備推薦的 +15 遺器全套!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ API Gateway 連線設定", + "settingsConnSubtitle": "配置伺服器運行模式與 REST 介面端點", + "btnTestPing": "⚡ 測試連線", + "settingsBattleTitle": "🎮 戰鬥與 FreeSR 預設配置", + "settingsBattleSubtitle": "自訂遊戲內預設戰鬥與隊伍初始化行為", + "lblDefaultEnergy": "戰鬥開局能量值 (Battle Starting Energy)", + "lblAutoSync": "自動同步至伺服器 (Auto-Sync)", + "descAutoSync": "修改角色或裝備時立即將變更發送至伺服端", + "lblDefaultCreative": "預設開啟創造模式 (Creative Mode)", + "descDefaultCreative": "允許隊伍配置重複角色及突破4人限制", + "settingsShowcaseTitle": "🖼️ 角色展示卡片設定", + "settingsShowcaseSubtitle": "自訂配裝展示卡的美觀度與展示細節", + "lblShowRolls": "顯示遺器副詞條強化次數 (Roll Counts)", + "descShowRolls": "在副詞條旁顯示強化命中的次數標籤", + "lblElementAura": "屬性光效光暈 (Element Aura Glow)", + "descElementAura": "卡片背景與氛圍光環隨角色屬性動態變換", + "settingsCacheTitle": "🧹 快取管理與系統重設", + "settingsCacheSubtitle": "清理瀏覽器暫存快取或將工具恢復出廠設定", + "lblCacheSize": "LocalStorage 儲存佔用:", + "btnClearCache": "🧹 清除瀏覽器快取", + "btnFactoryReset": "🔄 恢復出廠設定", + "toastPingSuccess": "⚡ 連線成功!延遲: {ms} ms", + "toastPingFailed": "❌ 無法連線到 Gateway,請檢查伺服端狀態", + "toastCacheCleared": "🧹 瀏覽器快取已清空", + "qaLineupE0S1Title": "全隊一鍵 E0S1", + "qaLineupE0S1Desc": "將當前編隊角色設為 0命+1疊專武", + "qaLineupRelicsTitle": "一鍵全隊神裝", + "qaLineupRelicsDesc": "為編隊4人一鍵穿戴 +15 畢業遺器", + "lblPersistenceInfo": "伺服端存檔與資料管理", + "modalTabOverview": "角色總覽", + "modalTabRelics": "遺器與配裝", + "overviewStatsTitle": "⚔️ 戰鬥面板 (Combat Stats)", + "overviewStatsNote": "已計入光錐與遺器屬性加成", + "overviewEquippedLc": "🗡️ 當前裝備光錐", + "overviewEquippedRelics": "🛡️ 遺器套裝效果", + "modalRelicsTitle": "🛡️ 遺器配裝 (6 部位)", + "modalRelicsSubtitle": "點擊單一部位更換,或一鍵穿戴推薦套裝", + "btnAutoEquipRelics": "⚡ 一鍵穿戴推薦套裝", + "btnClearAllRelics": "🧹 一鍵卸下全部", + "activeSetEffects": "✨ 當前生效的套裝效果", + "modalColLevel": "等級", + "lblPromotion": "突破階段", + "slotPickerTitle": "🛡️ 選擇要裝備的遺器", + "quickGenRecTitle": "⚡ 為該部位生成推薦遺器", + "quickGenRecDesc": "自動生成適配的 5★ +15 最優套裝與主詞條", + "btnGenAndEquip": "生成並穿戴", + "selectFromInventory": "從庫存中選擇對應部位", + "btnAllE0S1": "⚡ 全員 E0S1", + "qaGachabaseTitle": "從 Gachabase 獲取資料", + "qaGachabaseDesc": "匯入最新的測試服/解密角色與光錐資料", + "synergyTitle": "隊伍協同與弱點破盾分析", + "synergySubtitle": "分析弱點屬性覆蓋度、隊伍角色定位均衡性與練度準備狀態", + "synergyBreakCoverage": "🎯 弱點破盾屬性覆蓋", + "synergyRoleBalance": "🛡️ 隊伍構成與角色分工", + "synergyEquipmentTitle": "📊 裝備準備度與平均等級", + "synergyAvgLevel": "平均等級", + "synergyAvgEidolon": "平均星魂", + "synergyLcEquipped": "光錐裝配", + "synergyRelicFull": "遺器滿配", + "synergyCoverageBadge": "覆蓋 {count}/7 屬性", + "synergyNoInTeam": "未在隊伍中", + "roleDps": "🗡️ 輸出 (DPS)", + "roleSupport": "⚡ 輔助/減益", + "roleSustain": "🛡️ 生存 (治療/護盾)", + "roleSpecialist": "🔮 特殊/追擊", + "adviceEmpty": "目前隊伍尚無角色,請在上方選擇角色加入隊伍。", + "adviceNoSustain": "⚠️ 建議:隊伍缺乏防護或治療角色(存護/豐饒),建議加入1名以保障戰鬥生存能力。", + "adviceNoDps": "💡 建議:隊伍全為輔助角色,缺少主力輸出擔當(毀滅/巡獵/智識)。", + "adviceNoSupport": "💡 建議:隊伍有輸出但缺乏增益或減益輔佐(同諧/虛無),加入輔助可顯著提高隊伍總傷害。", + "adviceBalanced": "✅ 陣容均衡:隊伍架構完備,兼備輸出、增益減益輔助與治療護盾生存,隨時準備出征!", + "consoleTitle": "GM 命令列主控台與即時記錄", + "consoleSubtitle": "即時向伺服器發送 GM 指令並追蹤封包日誌與執行狀態", + "consoleCopyLog": "📋 複製記錄", + "consoleClearLog": "🗑️ 清空記錄", + "consoleQuickTitle": "⚡ 常用捷徑命令", + "consolePlaceholder": "輸入 GM 命令,例如 /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "發送指令", + "consoleHistoryHint": "💡 支援按 ↑ ↓ 鍵快速選擇歷史命令", + "consoleOnline": "● 伺服器在線", + "consoleOffline": "○ 離線模式(本機快取執行)", + "consoleLogCopied": "📋 全部日誌已複製到剪貼簿!", + "consoleLogCopyFailed": "❌ 無法複製日誌", + "consoleLogCleared": "終端日誌已清空", + "btnGachabaseSync": "🌐 同步 Gachabase", + "tabPersistentGaC": "💾 GaC 存檔管理", + "tabPersistentFirefly": "👤 開拓者與三月七", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "疊影等階", + "lcPickerTitle": "🗡️ 選擇要裝備的光錐", + "lcPickerSigTitle": "⭐ 推薦專屬光錐 (Signature)", + "lcPickerEquipSig": "⚡ 立即裝備", + "lcPickerUnequip": "✕ 卸下光錐" }, "ja": { "ahaGlobalDesc": "全サーバーで星神・アッハの特殊パッシブを有効化", @@ -1051,7 +1403,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "FreeSRに遺物を追加しました", "deleteItem": "削除", "toastItemDeleted": "アイテムを削除しました", - "appName": "GaC-Srtool", "appSubtitle": "スターレイル FreeSR & サーバーコントローラー", "online": "接続完了", @@ -1225,7 +1576,114 @@ export const TRANSLATIONS = { "Elation": "愉悦" }, "settingsSaved": "設定を保存しました!", - "settingsReset": "デフォルト設定に戻しました" + "settingsReset": "デフォルト設定に戻しました", + "btnE6S5": "⭐ 完凸完重 (E6S5)", + "btnE0S1": "⚡ 無凸モチーフ (E0S1)", + "modalTabShowcase": "🖼️ ショーケースカード", + "showcaseAutoRelics": "⚡ 推奨遺物を自動装備", + "showcaseCopy": "📋 テキストをコピー", + "showcaseExport": "🖼️ 画像として保存", + "btnChangeLc": "光円錐を変更", + "lcPassiveTitle": "光円錐スキル効果", + "toastE6S5Applied": "⭐ キャラクターを完全育成 E6S5(Lv.80、スキル最大、重畳5)に設定しました!", + "toastE0S1Applied": "⚡ キャラクターを E0S1(Lv.80、スキル最大、重畳1)に設定しました!", + "toastShowcaseCopied": "📋 ビルド情報をクリップボードにコピーしました!", + "toastRelicsEquipped": "⚡ {name} に推奨 +15 遺物フルセットを装備しました!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ API Gateway 接続設定", + "settingsConnSubtitle": "サーバーモードと REST エンドポイントの設定", + "btnTestPing": "⚡ 接続テスト", + "settingsBattleTitle": "🎮 戦闘&FreeSR デフォルト設定", + "settingsBattleSubtitle": "戦闘開始時の挙動やチーム編成のデフォルト動作を調整", + "lblDefaultEnergy": "戦闘開始時のチームEP (Starting Energy)", + "lblAutoSync": "サーバーへの自動同期 (Auto-Sync)", + "descAutoSync": "キャラクターや装備を変更した際、即座にサーバーへ反映します", + "lblDefaultCreative": "クリエイティブモードをデフォルトで有効化", + "descDefaultCreative": "同キャラ重複編成や4枠以上のチーム編成を常時許可します", + "settingsShowcaseTitle": "🖼️ ショーケースカード表示設定", + "settingsShowcaseSubtitle": "ビルド表示カードのデザインと詳細項目をカスタマイズ", + "lblShowRolls": "遺物サブステータスの強化回数を表示", + "descShowRolls": "サブステータスの強化ヒット回数タグを表示します", + "lblElementAura": "属性オーラ発光エフェクト", + "descElementAura": "キャラクターの属性に合わせてカード背景と光彩を変化させます", + "settingsCacheTitle": "🧹 キャッシュ管理&システムリセット", + "settingsCacheSubtitle": "ブラウザの一時データを消去するか、ツールを初期状態に戻します", + "lblCacheSize": "LocalStorage メモリ使用量:", + "btnClearCache": "🧹 ブラウザキャッシュを消去", + "btnFactoryReset": "🔄 初期設定に戻す", + "toastPingSuccess": "⚡ 接続成功! レイテンシ: {ms} ms", + "toastPingFailed": "❌ Gateway への接続に失敗しました。サーバーを確認してください", + "toastCacheCleared": "🧹 ブラウザキャッシュをクリアしました", + "qaLineupE0S1Title": "チーム全員を E0S1 に設定", + "qaLineupE0S1Desc": "編成キャラを無凸+モチーフ光円錐重畳1に設定", + "qaLineupRelicsTitle": "チーム全員にフル装備", + "qaLineupRelicsDesc": "編成中の4人に推奨 +15 遺物を自動装備", + "lblPersistenceInfo": "サーバーセーブデータ&ファイル管理", + "modalTabOverview": "キャラクター概要", + "modalTabRelics": "遺物&装備", + "overviewStatsTitle": "⚔️ 戦闘ステータス (Combat Stats)", + "overviewStatsNote": "光円錐および遺物のボーナスを含みます", + "overviewEquippedLc": "🗡️ 装備中の光円錐", + "overviewEquippedRelics": "🛡️ 遺物&セット効果", + "modalRelicsTitle": "🛡️ 遺物装備 (全6スロット)", + "modalRelicsSubtitle": "各スロットをクリックして変更、または推奨セットを一括装備", + "btnAutoEquipRelics": "⚡ 推奨セットを一括装備", + "btnClearAllRelics": "🧹 すべて外す", + "activeSetEffects": "✨ 発動中のセット効果", + "modalColLevel": "レベル", + "lblPromotion": "昇格段階", + "slotPickerTitle": "🛡️ 装備する遺物を選択", + "quickGenRecTitle": "⚡ この部位の推奨遺物を生成", + "quickGenRecDesc": "最適なセットとメインステータスの 5★ +15 遺物を生成", + "btnGenAndEquip": "生成して装備", + "selectFromInventory": "インベントリから選択", + "btnAllE0S1": "⚡ 全員 E0S1", + "qaGachabaseTitle": "Gachabase から最新データを取得", + "qaGachabaseDesc": "最新のベータ版・データマイニングキャラや光円錐をインポート", + "synergyTitle": "チームシナジー&弱点撃破分析", + "synergySubtitle": "弱点撃破の属性網羅度、役割バランス、装備育成状況を分析", + "synergyBreakCoverage": "🎯 弱点撃破属性カバー", + "synergyRoleBalance": "🛡️ チーム編成と役割分担", + "synergyEquipmentTitle": "📊 装備の準備状況と平均レベル", + "synergyAvgLevel": "平均レベル", + "synergyAvgEidolon": "平均星魂", + "synergyLcEquipped": "光円錐装備", + "synergyRelicFull": "遺物フル装備", + "synergyCoverageBadge": "{count}/7 属性カバー", + "synergyNoInTeam": "未編成", + "roleDps": "🗡️ アタッカー (DPS)", + "roleSupport": "⚡ サポート/デバフ", + "roleSustain": "🛡️ 耐久 (回復/シールド)", + "roleSpecialist": "🔮 特殊/追加攻撃", + "adviceEmpty": "チームにキャラクターが編成されていません。上部でキャラクターを選択してください。", + "adviceNoSustain": "⚠️ アドバイス:耐久枠(存護/豊饒)がいません。生存率を高めるため1枠編成することをおすすめします。", + "adviceNoDps": "💡 アドバイス:サポート主体でメインアタッカー(壊滅/巡狩/知恵)が不足しています。", + "adviceNoSupport": "💡 アドバイス:アタッカーはいますがバフ/デバフ役(調和/虚無)がいません。サポートを加えることで火力が大幅に向上します。", + "adviceBalanced": "✅ バランス抜群:アタッカー、バフ/デバフ役、回復/シールド役が完璧に揃った理想の編成です!", + "consoleTitle": "GMコマンドコンソール&リアルタイムログ", + "consoleSubtitle": "リアルタイムでGMコマンドを送信し、パケットログと実行状況を追跡", + "consoleCopyLog": "📋 ログをコピー", + "consoleClearLog": "🗑️ ログ消去", + "consoleQuickTitle": "⚡ よく使うクイックコマンド", + "consolePlaceholder": "GMコマンドを入力 (例: /heal, /max, /teleport 20411, /give 102 1000...)", + "consoleSend": "送信", + "consoleHistoryHint": "💡 ↑ ↓ キーで直近のコマンド履歴を呼び出せます", + "consoleOnline": "● サーバーオンライン", + "consoleOffline": "○ オフライン(ローカル実行モード)", + "consoleLogCopied": "📋 すべてのログをクリップボードにコピーしました!", + "consoleLogCopyFailed": "❌ ログのコピーに失敗しました", + "consoleLogCleared": "ターミナルログを消去しました", + "btnGachabaseSync": "🌐 Gachabase同期", + "tabPersistentGaC": "💾 GaCセーブデータ管理", + "tabPersistentFirefly": "👤 開拓者&三月なのか", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "重畳ランク", + "lcPickerTitle": "🗡️ 装備する光円錐を選択", + "lcPickerSigTitle": "⭐ 推奨モチーフ光円錐 (Signature)", + "lcPickerEquipSig": "⚡ これを装備", + "lcPickerUnequip": "✕ 光円錐を外す" }, "ko": { "ahaGlobalDesc": "서버 전체 에이언즈★아하 특수 패시브 활성화", @@ -1268,7 +1726,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "FreeSR에 유물이 추가되었습니다", "deleteItem": "삭제", "toastItemDeleted": "아이템이 삭제되었습니다", - "appName": "GaC-Srtool", "appSubtitle": "스타레일 FreeSR & 서버 컨트롤러", "online": "연결됨", @@ -1442,7 +1899,114 @@ export const TRANSLATIONS = { "Elation": "환락" }, "settingsSaved": "설정이 저장되었습니다!", - "settingsReset": "기본 설정으로 복원되었습니다" + "settingsReset": "기본 설정으로 복원되었습니다", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ 쇼케이스 카드", + "showcaseAutoRelics": "⚡ 추천 유물 자동 장착", + "showcaseCopy": "📋 텍스트 복사", + "showcaseExport": "🖼️ 이미지 내보내기", + "btnChangeLc": "광추 변경", + "lcPassiveTitle": "광추 스킬 효과", + "toastE6S5Applied": "⭐ 캐릭터를 E6S5(80레벨, 풀스킬, 중첩5)로 설정했습니다!", + "toastE0S1Applied": "⚡ 캐릭터를 E0S1(80레벨, 풀스킬, 중첩1)로 설정했습니다!", + "toastShowcaseCopied": "📋 세팅 정보가 클립보드에 복사되었습니다!", + "toastRelicsEquipped": "⚡ {name}에게 최적 +15 유물 풀세트를 장착했습니다!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ API Gateway 연결 설정", + "settingsConnSubtitle": "서버 모드 및 REST 엔드포인트 설정", + "btnTestPing": "⚡ 연결 테스트", + "settingsBattleTitle": "🎮 전투 및 FreeSR 기본 설정", + "settingsBattleSubtitle": "게임 내 기본 전투 동작 및 파티 편성 설정", + "lblDefaultEnergy": "전투 시작 시 파티 에너지 (Starting Energy)", + "lblAutoSync": "서버 자동 동기화 (Auto-Sync)", + "descAutoSync": "캐릭터나 장비를 변경할 때 즉시 서버로 전송합니다", + "lblDefaultCreative": "기본으로 크리에이티브 모드 활성화", + "descDefaultCreative": "중복 캐릭터 편성 및 4인 초과 파티 편성을 항시 허용합니다", + "settingsShowcaseTitle": "🖼️ 쇼케이스 카드 표시 설정", + "settingsShowcaseSubtitle": "세팅 카드 디자인 및 세부 표시 항목 커스터마이징", + "lblShowRolls": "유물 보조 속성 강화 횟수 표시", + "descShowRolls": "보조 속성 강화 횟수 태그를 표시합니다", + "lblElementAura": "속성 아우라 발광 효과", + "descElementAura": "캐릭터 속성에 맞추어 카드 배경 및 조명이 동적으로 변화합니다", + "settingsCacheTitle": "🧹 캐시 관리 및 시스템 초기화", + "settingsCacheSubtitle": "브라우저 임시 데이터를 삭제하거나 공장 초기화합니다", + "lblCacheSize": "LocalStorage 메모리 사용량:", + "btnClearCache": "🧹 브라우저 캐시 삭제", + "btnFactoryReset": "🔄 공장 초기화", + "toastPingSuccess": "⚡ 연결 성공! 지연 시간: {ms} ms", + "toastPingFailed": "❌ Gateway 연결 실패. 서버 상태를 확인하세요", + "toastCacheCleared": "🧹 브라우저 캐시가 삭제되었습니다", + "qaLineupE0S1Title": "파티 전원 E0S1 설정", + "qaLineupE0S1Desc": "편성 캐릭터를 명함 전광 1중첩으로 세팅", + "qaLineupRelicsTitle": "파티 전원 풀세팅", + "qaLineupRelicsDesc": "편성 중인 4명에게 +15 추천 유물 세트 장착", + "lblPersistenceInfo": "서버 세이브 파일 및 데이터 관리", + "modalTabOverview": "캐릭터 개요", + "modalTabRelics": "유물 및 장비", + "overviewStatsTitle": "⚔️ 전투 스탯 (Combat Stats)", + "overviewStatsNote": "광추 및 유물 보너스 포함", + "overviewEquippedLc": "🗡️ 장착 중인 광추", + "overviewEquippedRelics": "🛡️ 유물 및 세트 효과", + "modalRelicsTitle": "🛡️ 유물 장착 (6개 부위)", + "modalRelicsSubtitle": "각 부위를 클릭하여 변경하거나 추천 세트를 일괄 장착", + "btnAutoEquipRelics": "⚡ 추천 세트 일괄 장착", + "btnClearAllRelics": "🧹 모두 해제", + "activeSetEffects": "✨ 활성화된 세트 효과", + "modalColLevel": "레벨", + "lblPromotion": "승급 단계", + "slotPickerTitle": "🛡️ 장착할 유물 선택", + "quickGenRecTitle": "⚡ 이 부위 추천 유물 생성", + "quickGenRecDesc": "최적 세트와 주옵션의 5★ +15 유물 자동 생성", + "btnGenAndEquip": "생성 및 장착", + "selectFromInventory": "인벤토리에서 선택", + "btnAllE0S1": "⚡ 전원 E0S1", + "qaGachabaseTitle": "Gachabase에서 최신 데이터 가져오기", + "qaGachabaseDesc": "최신 베타 및 데이터마이닝 캐릭터/광추 가져오기", + "synergyTitle": "파티 시너지 및 약점 격파 분석", + "synergySubtitle": "약점 격파 속성 커버리지, 역할군 밸런스 및 장비 세팅 완성도 분석", + "synergyBreakCoverage": "🎯 약점 격파 속성 커버리지", + "synergyRoleBalance": "🛡️ 파티 구성 및 역할군 분포", + "synergyEquipmentTitle": "📊 장비 세팅 준비도 및 평균 레벨", + "synergyAvgLevel": "평균 레벨", + "synergyAvgEidolon": "평균 성혼", + "synergyLcEquipped": "광추 장착", + "synergyRelicFull": "유물 풀세트", + "synergyCoverageBadge": "{count}/7개 속성 커버", + "synergyNoInTeam": "파티에 없음", + "roleDps": "🗡️ 딜러 (DPS)", + "roleSupport": "⚡ 서포터/디버퍼", + "roleSustain": "🛡️ 생존 (힐러/실더)", + "roleSpecialist": "🔮 특수/추가공격", + "adviceEmpty": "파티에 편성된 캐릭터가 없습니다. 위에서 캐릭터를 선택해 주세요.", + "adviceNoSustain": "⚠️ 조언: 파티에 방어 또는 회복 캐릭터(보존/풍요)가 없습니다. 안정적인 클리어를 위해 1명을 편성하는 것을 권장합니다.", + "adviceNoDps": "💡 조언: 파티가 서포터로만 구성되어 있어 메인 딜러(파멸/수렵/지식)가 부족합니다.", + "adviceNoSupport": "💡 조언: 딜러는 있지만 버프/디버프 서포터(화합/공허)가 없습니다. 서포터를 추가하면 총 대미지가 크게 상승합니다.", + "adviceBalanced": "✅ 완벽한 밸런스: 딜러, 버프/디버프 서포터, 힐러/실더 생존 요원이 모두 갖춰진 이상적인 파티입니다!", + "consoleTitle": "GM 명령어 콘솔 및 실시간 로그", + "consoleSubtitle": "실시간으로 GM 명령어를 서버에 전송하고 패킷 로그와 상태를 모니터링", + "consoleCopyLog": "📋 로그 복사", + "consoleClearLog": "🗑️ 로그 지우기", + "consoleQuickTitle": "⚡ 자주 쓰는 빠른 명령어", + "consolePlaceholder": "GM 명령어 입력 (예: /heal, /max, /teleport 20411, /give 102 1000...)", + "consoleSend": "명령 전송", + "consoleHistoryHint": "💡 ↑ ↓ 키를 눌러 이전 명령어 기록을 탐색할 수 있습니다", + "consoleOnline": "● 서버 온라인", + "consoleOffline": "○ 오프라인 (로컬 실행 모드)", + "consoleLogCopied": "📋 모든 로그가 클립보드에 복사되었습니다!", + "consoleLogCopyFailed": "❌ 로그 복사 실패", + "consoleLogCleared": "터미널 로그가 지워졌습니다", + "btnGachabaseSync": "🌐 Gachabase 동기화", + "tabPersistentGaC": "💾 GaC 세이브 관리", + "tabPersistentFirefly": "👤 개척자 & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "중첩 등급", + "lcPickerTitle": "🗡️ 장착할 광추 선택", + "lcPickerSigTitle": "⭐ 추천 전용 광추 (Signature)", + "lcPickerEquipSig": "⚡ 바로 장착", + "lcPickerUnequip": "✕ 광추 해제" }, "vi": { "ahaGlobalDesc": "Bật cơ chế đặc biệt Aeon ★ Aha toàn máy chủ", @@ -1485,7 +2049,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Đã thêm Di Vật vào FreeSR", "deleteItem": "Xóa", "toastItemDeleted": "Đã xóa vật phẩm thành công", - "appName": "GaC-Srtool", "appSubtitle": "Bộ điều khiển máy chủ & FreeSR Star Rail", "online": "Đã kết nối", @@ -1659,7 +2222,114 @@ export const TRANSLATIONS = { "Elation": "Vui Vẻ" }, "settingsSaved": "Đã lưu cài đặt thành công!", - "settingsReset": "Đã khôi phục cài đặt mặc định" + "settingsReset": "Đã khôi phục cài đặt mặc định", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Thẻ trưng bày", + "showcaseAutoRelics": "⚡ Tự động trang bị Di Vật", + "showcaseCopy": "📋 Sao chép văn bản", + "showcaseExport": "🖼️ Xuất hình ảnh", + "btnChangeLc": "Đổi Nón Ánh Sáng", + "lcPassiveTitle": "Hiệu ứng Nón Ánh Sáng", + "toastE6S5Applied": "⭐ Đã nâng nhân vật lên tối đa E6S5 (Lv.80, Kỹ năng tối đa, S5)!", + "toastE0S1Applied": "⚡ Đã đặt nhân vật thành E0S1 (Lv.80, Kỹ năng tối đa, S1)!", + "toastShowcaseCopied": "📋 Đã sao chép thông tin trang bị vào khay nhớ tạm!", + "toastRelicsEquipped": "⚡ Đã trang bị bộ Di Vật +15 đề xuất cho {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Cài đặt kết nối API Gateway", + "settingsConnSubtitle": "Cấu hình chế độ máy chủ và địa chỉ REST", + "btnTestPing": "⚡ Kiểm tra kết nối", + "settingsBattleTitle": "🎮 Mặc định chiến đấu & FreeSR", + "settingsBattleSubtitle": "Tùy chỉnh hành vi trận đấu và thiết lập đội hình mặc định", + "lblDefaultEnergy": "Năng lượng ban đầu khi vào trận", + "lblAutoSync": "Tự động đồng bộ lên máy chủ (Auto-Sync)", + "descAutoSync": "Gửi thay đổi nhân vật hoặc trang bị lên máy chủ ngay lập tức", + "lblDefaultCreative": "Bật Chế độ Sáng tạo theo mặc định", + "descDefaultCreative": "Cho phép trùng nhân vật và nhiều hơn 4 ô trong đội hình", + "settingsShowcaseTitle": "🖼️ Hiển thị Thẻ Trưng Bày", + "settingsShowcaseSubtitle": "Tùy chỉnh giao diện thẻ trưng bày chỉ số nhân vật", + "lblShowRolls": "Hiển thị số lần nâng dòng phụ", + "descShowRolls": "Hiển thị nhãn số lần rơi vào thuộc tính phụ của Di Vật", + "lblElementAura": "Hiệu ứng hào quang nguyên tố", + "descElementAura": "Đổi màu nền và ánh sáng phát ra theo thuộc tính nhân vật", + "settingsCacheTitle": "🧹 Quản lý bộ nhớ đệm & Đặt lại", + "settingsCacheSubtitle": "Xóa dữ liệu tạm thời của trình duyệt hoặc khôi phục cài đặt gốc", + "lblCacheSize": "Dung lượng LocalStorage:", + "btnClearCache": "🧹 Xóa bộ nhớ đệm", + "btnFactoryReset": "🔄 Khôi phục cài đặt gốc", + "toastPingSuccess": "⚡ Kết nối thành công! Độ trễ: {ms} ms", + "toastPingFailed": "❌ Không thể kết nối với Gateway. Vui lòng kiểm tra máy chủ", + "toastCacheCleared": "🧹 Đã xóa bộ nhớ đệm trình duyệt", + "qaLineupE0S1Title": "Cả đội lên E0S1", + "qaLineupE0S1Desc": "Đưa nhân vật trong đội về E0 với Nón S1", + "qaLineupRelicsTitle": "Tự trang bị cho cả đội", + "qaLineupRelicsDesc": "Trang bị Di Vật +15 cho cả 4 thành viên", + "lblPersistenceInfo": "Quản lý tệp lưu và dữ liệu máy chủ", + "modalTabOverview": "Tổng quan", + "modalTabRelics": "Di Vật & Trang bị", + "overviewStatsTitle": "⚔️ Chỉ số chiến đấu (Combat Stats)", + "overviewStatsNote": "Bao gồm chỉ số từ Nón Ánh Sáng và Di Vật", + "overviewEquippedLc": "🗡️ Nón Ánh Sáng đang trang bị", + "overviewEquippedRelics": "🛡️ Hiệu ứng bộ Di Vật", + "modalRelicsTitle": "🛡️ Trang bị Di Vật (6 vị trí)", + "modalRelicsSubtitle": "Nhấn vào từng ô để thay đổi hoặc trang bị bộ đề xuất", + "btnAutoEquipRelics": "⚡ Trang bị bộ đề xuất", + "btnClearAllRelics": "🧹 Tháo toàn bộ", + "activeSetEffects": "✨ Hiệu ứng bộ đang kích hoạt", + "modalColLevel": "Cấp độ", + "lblPromotion": "Cấp đột phá", + "slotPickerTitle": "🛡️ Chọn Di Vật để trang bị", + "quickGenRecTitle": "⚡ Tạo Di Vật đề xuất cho ô này", + "quickGenRecDesc": "Tạo Di Vật 5★ +15 chuẩn bộ và dòng chính tốt nhất", + "btnGenAndEquip": "Tạo & Trang bị", + "selectFromInventory": "Chọn từ túi đồ", + "btnAllE0S1": "⚡ Tất cả E0S1", + "qaGachabaseTitle": "Lấy dữ liệu từ Gachabase", + "qaGachabaseDesc": "Nhập nhân vật và Nón Ánh Sáng mới nhất từ beta", + "synergyTitle": "Phân tích phối hợp đội hình & Phá vỡ điểm yếu", + "synergySubtitle": "Phân tích độ bao phủ điểm yếu, cân bằng vai trò và độ sẵn sàng trang bị", + "synergyBreakCoverage": "🎯 Độ bao phủ phá vỡ điểm yếu", + "synergyRoleBalance": "🛡️ Cấu trúc đội hình & Phân chia vai trò", + "synergyEquipmentTitle": "📊 Độ sẵn sàng trang bị & Cấp trung bình", + "synergyAvgLevel": "Cấp trung bình", + "synergyAvgEidolon": "Tinh Hồn TB", + "synergyLcEquipped": "Nón Ánh Sáng", + "synergyRelicFull": "Đủ bộ Di Vật", + "synergyCoverageBadge": "Bao phủ {count}/7 Thuộc tính", + "synergyNoInTeam": "Không có trong đội", + "roleDps": "🗡️ DPS Chủ lực", + "roleSupport": "⚡ Hỗ trợ/Giảm ích", + "roleSustain": "🛡️ Sinh tồn (Hồi máu/Khiên)", + "roleSpecialist": "🔮 Đặc biệt/Đòn đánh theo sau", + "adviceEmpty": "Chưa có nhân vật trong đội. Vui lòng chọn nhân vật ở trên.", + "adviceNoSustain": "⚠️ Gợi ý: Đội hình đang thiếu nhân vật phòng thủ hoặc trị liệu (Bảo Hộ / Trù Phú). Khuyên dùng 1 vị trí để bảo đảm an toàn.", + "adviceNoDps": "💡 Gợi ý: Đội hình toàn hỗ trợ, chưa có sát thương chủ lực (Hủy Diệt / Săn Bắn / Tri Thức).", + "adviceNoSupport": "💡 Gợi ý: Đội có sát thương nhưng thiếu nhân vật tăng ích/giảm ích (Hòa Hợp / Hư Vô). Thêm hỗ trợ sẽ giúp tăng vọt sát thương.", + "adviceBalanced": "✅ Cân bằng hoàn hảo: Đội hình đầy đủ sát thương, hỗ trợ tăng/giảm ích và hồi phục/khiên. Sẵn sàng cho mọi thử thách!", + "consoleTitle": "Bảng điều khiển lệnh GM & Nhật ký trực tiếp", + "consoleSubtitle": "Gửi lệnh GM/Máy chủ theo thời gian thực và theo dõi nhật ký gói tin", + "consoleCopyLog": "📋 Sao chép", + "consoleClearLog": "🗑️ Xóa nhật ký", + "consoleQuickTitle": "⚡ Lệnh nhanh thường dùng", + "consolePlaceholder": "Nhập lệnh GM, vd: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Gửi lệnh", + "consoleHistoryHint": "💡 Nhấn ↑ ↓ để chọn lịch sử lệnh trước đó", + "consoleOnline": "● Máy chủ trực tuyến", + "consoleOffline": "○ Ngoại tuyến (Chế độ cục bộ)", + "consoleLogCopied": "📋 Đã sao chép tất cả nhật ký vào khay nhớ tạm!", + "consoleLogCopyFailed": "❌ Không thể sao chép nhật ký", + "consoleLogCleared": "Đã xóa màn hình nhật ký", + "btnGachabaseSync": "🌐 Đồng bộ Gachabase", + "tabPersistentGaC": "💾 Quản lý lưu GaC", + "tabPersistentFirefly": "👤 Nhà Khai Phá & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Bậc Tích Lũy", + "lcPickerTitle": "🗡️ Chọn Nón Ánh Sáng để trang bị", + "lcPickerSigTitle": "⭐ Nón Ánh Sáng Trấn đề xuất", + "lcPickerEquipSig": "⚡ Trang bị món này", + "lcPickerUnequip": "✕ Tháo Nón Ánh Sáng" }, "id": { "ahaGlobalDesc": "Aktifkan kemampuan khusus Aeon ★ Aha di seluruh server", @@ -1702,7 +2372,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Relic berhasil ditambahkan ke FreeSR", "deleteItem": "Hapus", "toastItemDeleted": "Item berhasil dihapus", - "appName": "GaC-Srtool", "appSubtitle": "Pengontrol Server & FreeSR Star Rail", "online": "Terhubung", @@ -1876,7 +2545,114 @@ export const TRANSLATIONS = { "Elation": "Elation" }, "settingsSaved": "Pengaturan berhasil disimpan!", - "settingsReset": "Pengaturan dikembalikan ke default" + "settingsReset": "Pengaturan dikembalikan ke default", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Kartu Showcase", + "showcaseAutoRelics": "⚡ Pasang Relic Rekomendasi", + "showcaseCopy": "📋 Salin Teks", + "showcaseExport": "🖼️ Ekspor Gambar", + "btnChangeLc": "Ganti Light Cone", + "lcPassiveTitle": "Efek Kemampuan Light Cone", + "toastE6S5Applied": "⭐ Karakter dimaksimalkan ke E6S5 (Lv.80, Skill Penuh, S5)!", + "toastE0S1Applied": "⚡ Karakter disetel ke E0S1 (Lv.80, Skill Penuh, S1)!", + "toastShowcaseCopied": "📋 Informasi build disalin ke papan klip!", + "toastRelicsEquipped": "⚡ Set relic +15 terbaik dipasang untuk {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Pengaturan Koneksi API Gateway", + "settingsConnSubtitle": "Atur mode server dan endpoint REST", + "btnTestPing": "⚡ Tes Koneksi", + "settingsBattleTitle": "🎮 Pengaturan Tempur & FreeSR", + "settingsBattleSubtitle": "Sesuaikan perilaku pertempuran dan tim bawaan", + "lblDefaultEnergy": "Energi Awal Pertempuran (Starting Energy)", + "lblAutoSync": "Sinkronisasi Otomatis ke Server (Auto-Sync)", + "descAutoSync": "Kirim pembaruan karakter dan perlengkapan langsung ke server", + "lblDefaultCreative": "Mode Kreatif Secara Default", + "descDefaultCreative": "Izinkan karakter duplikat dan lebih dari 4 slot tim", + "settingsShowcaseTitle": "🖼️ Tampilan Kartu Showcase", + "settingsShowcaseSubtitle": "Kustomisasi gaya dan detail kartu showcase", + "lblShowRolls": "Tampilkan Jumlah Roll Sub-stat", + "descShowRolls": "Tampilkan label jumlah roll pada sub-stat relic", + "lblElementAura": "Efek Cahaya Aura Elemen", + "descElementAura": "Latar belakang kartu dan pendaran dinamis sesuai elemen karakter", + "settingsCacheTitle": "🧹 Manajemen Cache & Reset", + "settingsCacheSubtitle": "Hapus data sementara browser atau pulihkan pengaturan awal", + "lblCacheSize": "Penggunaan Memori LocalStorage:", + "btnClearCache": "🧹 Hapus Cache Browser", + "btnFactoryReset": "🔄 Reset Pabrik", + "toastPingSuccess": "⚡ Terhubung berhasil! Latensi: {ms} ms", + "toastPingFailed": "❌ Gagal terhubung ke Gateway. Periksa status server", + "toastCacheCleared": "🧹 Cache browser berhasil dibersihkan", + "qaLineupE0S1Title": "Atur Tim ke E0S1", + "qaLineupE0S1Desc": "Karakter tim menjadi E0 dengan LC S1", + "qaLineupRelicsTitle": "Pasang Relic Tim Otomatis", + "qaLineupRelicsDesc": "Pasang relic +15 untuk 4 anggota tim", + "lblPersistenceInfo": "Manajemen file simpan dan data server", + "modalTabOverview": "Ringkasan", + "modalTabRelics": "Relic & Perlengkapan", + "overviewStatsTitle": "⚔️ Statistik Tempur (Combat Stats)", + "overviewStatsNote": "Termasuk bonus Light Cone & Relic", + "overviewEquippedLc": "🗡️ Light Cone Terpasang", + "overviewEquippedRelics": "🛡️ Bonus Set Relic", + "modalRelicsTitle": "🛡️ Pasang Relic (6 Slot)", + "modalRelicsSubtitle": "Klik setiap slot untuk mengganti atau pasang set rekomendasi", + "btnAutoEquipRelics": "⚡ Pasang Set Rekomendasi", + "btnClearAllRelics": "🧹 Lepas Semua", + "activeSetEffects": "✨ Efek Set yang Aktif", + "modalColLevel": "Level", + "lblPromotion": "Peringkat Ascension", + "slotPickerTitle": "🛡️ Pilih Relic untuk Dipasang", + "quickGenRecTitle": "⚡ Buat Bagian Rekomendasi Slot Ini", + "quickGenRecDesc": "Buat relic 5★ +15 dengan set & stat utama terbaik", + "btnGenAndEquip": "Buat & Pasang", + "selectFromInventory": "Pilih dari Penyimpanan", + "btnAllE0S1": "⚡ Semua E0S1", + "qaGachabaseTitle": "Ambil Data dari Gachabase", + "qaGachabaseDesc": "Impor karakter dan LC beta/datamine terbaru", + "synergyTitle": "Analisis Sinergi Tim & Kelemahan Break", + "synergySubtitle": "Analisis cakupan Weakness Break, keseimbangan peran, dan kesiapan perlengkapan", + "synergyBreakCoverage": "🎯 Cakupan Weakness Break", + "synergyRoleBalance": "🛡️ Komposisi Tim & Distribusi Peran", + "synergyEquipmentTitle": "📊 Kesiapan Perlengkapan & Level Rata-rata", + "synergyAvgLevel": "Level Rata-rata", + "synergyAvgEidolon": "Eidolon Rata-rata", + "synergyLcEquipped": "Light Cone Terpasang", + "synergyRelicFull": "Relic Lengkap", + "synergyCoverageBadge": "Mencakup {count}/7 Elemen", + "synergyNoInTeam": "Tidak ada di tim", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Support / Debuff", + "roleSustain": "🛡️ Sustain (Penyembuh/Perisai)", + "roleSpecialist": "🔮 Spesialis / Serangan Lanjutan", + "adviceEmpty": "Belum ada karakter di tim. Silakan pilih anggota tim di atas.", + "adviceNoSustain": "⚠️ Saran: Tim kekurangan karakter pelindung atau penyembuh (Preservation / Abundance). Disarankan membawa 1 untuk bertahan hidup.", + "adviceNoDps": "💡 Saran: Tim hanya terdiri dari support tanpa DPS utama (Destruction / Hunt / Erudition).", + "adviceNoSupport": "💡 Saran: Tim memiliki DPS tetapi kurang buffer/debuffer (Harmony / Nihility). Menambahkan support akan meningkatkan damage secara signifikan.", + "adviceBalanced": "✅ Keseimbangan Luar Biasa: Susunan tim lengkap dengan DPS, buffer/debuffer, dan sustain. Siap menghadapi semua tantangan!", + "consoleTitle": "Konsol Perintah GM & Log Langsung", + "consoleSubtitle": "Kirim perintah GM / Server secara langsung dengan log paket dan status", + "consoleCopyLog": "📋 Salin Log", + "consoleClearLog": "🗑️ Bersihkan", + "consoleQuickTitle": "⚡ Perintah Cepat", + "consolePlaceholder": "Ketik perintah GM, cth: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Kirim", + "consoleHistoryHint": "💡 Tekan ↑ ↓ untuk memilih riwayat perintah sebelumnya", + "consoleOnline": "● Server Online", + "consoleOffline": "○ Offline (Eksekusi lokal)", + "consoleLogCopied": "📋 Semua log disalin ke papan klip!", + "consoleLogCopyFailed": "❌ Gagal menyalin log", + "consoleLogCleared": "Log terminal dibersihkan", + "btnGachabaseSync": "🌐 Sinkron Gachabase", + "tabPersistentGaC": "💾 Pengelola Simpan GaC", + "tabPersistentFirefly": "👤 Trailblazer & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Tingkat Superimpose", + "lcPickerTitle": "🗡️ Pilih Light Cone untuk Dipasang", + "lcPickerSigTitle": "⭐ Light Cone Signature Rekomendasi", + "lcPickerEquipSig": "⚡ Pasang Ini", + "lcPickerUnequip": "✕ Lepas Light Cone" }, "es": { "ahaGlobalDesc": "Activar rasgo especial de Eón ★ Aha en todo el servidor", @@ -1919,7 +2695,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Reliquia añadida a FreeSR", "deleteItem": "Eliminar", "toastItemDeleted": "Objeto eliminado correctamente", - "appName": "GaC-Srtool", "appSubtitle": "Controlador de servidor y FreeSR de Star Rail", "online": "Conectado", @@ -2093,7 +2868,114 @@ export const TRANSLATIONS = { "Elation": "Exultación" }, "settingsSaved": "¡Ajustes guardados con éxito!", - "settingsReset": "Ajustes restablecidos por defecto" + "settingsReset": "Ajustes restablecidos por defecto", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Tarjeta de exhibición", + "showcaseAutoRelics": "⚡ Autoequipar artefactos", + "showcaseCopy": "📋 Copiar texto", + "showcaseExport": "🖼️ Exportar imagen", + "btnChangeLc": "Cambiar Cono de Luz", + "lcPassiveTitle": "Habilidad del Cono de Luz", + "toastE6S5Applied": "⭐ ¡Personaje maximizado a E6S5 (Nv.80, Habilidades al máximo, S5)!", + "toastE0S1Applied": "⚡ ¡Personaje ajustado a E0S1 (Nv.80, Habilidades al máximo, S1)!", + "toastShowcaseCopied": "📋 ¡Información de la build copiada al portapapeles!", + "toastRelicsEquipped": "⚡ ¡Set de artefactos +15 óptimo equipado para {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Conexión API Gateway", + "settingsConnSubtitle": "Configura el modo del servidor y el endpoint REST", + "btnTestPing": "⚡ Probar conexión", + "settingsBattleTitle": "🎮 Valores de batalla y FreeSR", + "settingsBattleSubtitle": "Personaliza el comportamiento de batalla y equipo por defecto", + "lblDefaultEnergy": "Energía inicial de batalla", + "lblAutoSync": "Sincronización automática con el servidor", + "descAutoSync": "Envía cambios de personajes y equipo al servidor inmediatamente", + "lblDefaultCreative": "Modo Creativo por defecto", + "descDefaultCreative": "Permite personajes duplicados y más de 4 ranuras de equipo", + "settingsShowcaseTitle": "🖼️ Visualización de tarjeta de exhibición", + "settingsShowcaseSubtitle": "Personaliza el estilo y detalles de la tarjeta de build", + "lblShowRolls": "Mostrar tiradas de substats", + "descShowRolls": "Muestra etiquetas de número de mejoras en substats de artefactos", + "lblElementAura": "Efecto de brillo de aura elemental", + "descElementAura": "Fondo de tarjeta y brillo ambiental según el elemento del personaje", + "settingsCacheTitle": "🧹 Gestión de caché y reinicio", + "settingsCacheSubtitle": "Borra datos temporales del navegador o restaura ajustes de fábrica", + "lblCacheSize": "Uso de memoria LocalStorage:", + "btnClearCache": "🧹 Limpiar caché del navegador", + "btnFactoryReset": "🔄 Restablecimiento de fábrica", + "toastPingSuccess": "⚡ ¡Conexión exitosa! Latencia: {ms} ms", + "toastPingFailed": "❌ Error al conectar con Gateway. Comprueba el estado del servidor", + "toastCacheCleared": "🧹 Caché del navegador borrada con éxito", + "qaLineupE0S1Title": "Equipo en E0S1", + "qaLineupE0S1Desc": "Personajes del equipo en E0 con Cono S1", + "qaLineupRelicsTitle": "Autoequipar artefactos de equipo", + "qaLineupRelicsDesc": "Equipar artefactos +15 a los 4 compañeros", + "lblPersistenceInfo": "Gestión de datos y archivos de guardado", + "modalTabOverview": "Resumen", + "modalTabRelics": "Artefactos y equipo", + "overviewStatsTitle": "⚔️ Estadísticas de combate", + "overviewStatsNote": "Incluye bonificaciones de Cono y Artefactos", + "overviewEquippedLc": "🗡️ Cono de Luz equipado", + "overviewEquippedRelics": "🛡️ Artefactos y efectos de set", + "modalRelicsTitle": "🛡️ Equipar artefactos (6 ranuras)", + "modalRelicsSubtitle": "Haz clic en cada ranura para cambiar o equipar sets recomendados", + "btnAutoEquipRelics": "⚡ Equipar sets recomendados", + "btnClearAllRelics": "🧹 Desequipar todo", + "activeSetEffects": "✨ Efectos de set activos", + "modalColLevel": "Nivel", + "lblPromotion": "Rango de ascensión", + "slotPickerTitle": "🛡️ Seleccionar artefacto para equipar", + "quickGenRecTitle": "⚡ Generar pieza recomendada", + "quickGenRecDesc": "Genera 5★ +15 con el mejor set y stat principal", + "btnGenAndEquip": "Generar y equipar", + "selectFromInventory": "Seleccionar del inventario", + "btnAllE0S1": "⚡ Todos E0S1", + "qaGachabaseTitle": "Obtener de Gachabase", + "qaGachabaseDesc": "Importar últimos personajes y conos de la beta/datamine", + "synergyTitle": "Análisis de sinergia de equipo y ruptura de debilidad", + "synergySubtitle": "Analiza la cobertura de debilidades, equilibrio de roles y preparación de equipo", + "synergyBreakCoverage": "🎯 Cobertura de ruptura de debilidad", + "synergyRoleBalance": "🛡️ Composición del equipo y distribución de roles", + "synergyEquipmentTitle": "📊 Preparación de equipo y nivel medio", + "synergyAvgLevel": "Nivel promedio", + "synergyAvgEidolon": "Eidolon promedio", + "synergyLcEquipped": "Conos equipados", + "synergyRelicFull": "Artefactos completos", + "synergyCoverageBadge": "Cubre {count}/7 Elementos", + "synergyNoInTeam": "Ninguno en el equipo", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Apoyo / Debuff", + "roleSustain": "🛡️ Supervivencia (Sanador/Escudo)", + "roleSpecialist": "🔮 Especialista / Adicional", + "adviceEmpty": "No hay personajes en el equipo. Por favor selecciona integrantes arriba.", + "adviceNoSustain": "⚠️ Consejo: El equipo carece de un defensor o sanador (Conservación / Abundancia). Se recomienda añadir uno para mayor supervivencia.", + "adviceNoDps": "💡 Consejo: El equipo solo tiene apoyos sin un causante de daño principal (Destrucción / Cacería / Erudición).", + "adviceNoSupport": "💡 Consejo: El equipo tiene DPS pero carece de potenciadores/debilitadores (Armonía / Nihilidad). Añadir soporte aumentará enormemente el daño.", + "adviceBalanced": "✅ Equilibrio excelente: El equipo cuenta con DPS, apoyos de beneficio/perjuicio y supervivencia. ¡Listo para cualquier desafío!", + "consoleTitle": "Consola de comandos GM y registros en vivo", + "consoleSubtitle": "Envía comandos GM / Servidor en tiempo real con registros de paquetes y estado", + "consoleCopyLog": "📋 Copiar", + "consoleClearLog": "🗑️ Limpiar", + "consoleQuickTitle": "⚡ Comandos rápidos comunes", + "consolePlaceholder": "Escribe comando GM, ej: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Enviar", + "consoleHistoryHint": "💡 Pulsa ↑ ↓ para navegar por el historial de comandos", + "consoleOnline": "● Servidor en línea", + "consoleOffline": "○ Desconectado (Modo local)", + "consoleLogCopied": "📋 ¡Todos los registros se han copiado al portapapeles!", + "consoleLogCopyFailed": "❌ Error al copiar registros", + "consoleLogCleared": "Registro de la terminal borrado", + "btnGachabaseSync": "🌐 Sincronizar Gachabase", + "tabPersistentGaC": "💾 Gestor de guardado GaC", + "tabPersistentFirefly": "👤 Trazacaminos y Siete de Marzo", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Rango de superposición", + "lcPickerTitle": "🗡️ Seleccionar Cono de Luz para equipar", + "lcPickerSigTitle": "⭐ Cono de Luz insignia recomendado", + "lcPickerEquipSig": "⚡ Equipar este", + "lcPickerUnequip": "✕ Desequipar Cono de Luz" }, "fr": { "ahaGlobalDesc": "Activer le trait spécial d'Éon ★ Aha sur tout le serveur", @@ -2136,7 +3018,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Relique ajoutée à FreeSR", "deleteItem": "Supprimer", "toastItemDeleted": "Objet supprimé avec succès", - "appName": "GaC-Srtool", "appSubtitle": "Contrôleur de serveur et FreeSR Star Rail", "online": "Connecté", @@ -2310,7 +3191,114 @@ export const TRANSLATIONS = { "Elation": "L'Allégresse" }, "settingsSaved": "Paramètres enregistrés avec succès !", - "settingsReset": "Paramètres réinitialisés par défaut" + "settingsReset": "Paramètres réinitialisés par défaut", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Carte de présentation", + "showcaseAutoRelics": "⚡ Équiper reliques auto", + "showcaseCopy": "📋 Copier texte", + "showcaseExport": "🖼️ Exporter image", + "btnChangeLc": "Changer de Cône de Lumière", + "lcPassiveTitle": "Capacité du Cône de Lumière", + "toastE6S5Applied": "⭐ Personnage maximisé à E6S5 (Nv.80, Aptitudes max, S5)!", + "toastE0S1Applied": "⚡ Personnage ajusté à E0S1 (Nv.80, Aptitudes max, S1)!", + "toastShowcaseCopied": "📋 Informations de build copiées dans le presse-papiers!", + "toastRelicsEquipped": "⚡ Ensemble optimal de reliques +15 équipé pour {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Connexion API Gateway", + "settingsConnSubtitle": "Configurer le mode serveur et le point de terminaison REST", + "btnTestPing": "⚡ Tester la connexion", + "settingsBattleTitle": "🎮 Valeurs par défaut de combat & FreeSR", + "settingsBattleSubtitle": "Personnaliser le comportement de combat et d'équipe", + "lblDefaultEnergy": "Énergie initiale de combat", + "lblAutoSync": "Synchronisation automatique vers le serveur", + "descAutoSync": "Envoyer instantanément les modifications au serveur", + "lblDefaultCreative": "Mode Créatif par défaut", + "descDefaultCreative": "Autoriser les doublons et plus de 4 emplacements d'équipe", + "settingsShowcaseTitle": "🖼️ Affichage de la carte de présentation", + "settingsShowcaseSubtitle": "Personnaliser le style et les détails de la carte", + "lblShowRolls": "Afficher le nombre d'améliorations des sous-stats", + "descShowRolls": "Afficher le nombre de jets pour les sous-attributs", + "lblElementAura": "Effet d'aura lumineuse élémentaire", + "descElementAura": "Arrière-plan dynamique selon l'élément du personnage", + "settingsCacheTitle": "🧹 Gestion du cache & Réinitialisation", + "settingsCacheSubtitle": "Effacer les données temporaires ou réinitialiser le système", + "lblCacheSize": "Mémoire LocalStorage utilisée:", + "btnClearCache": "🧹 Vider le cache du navigateur", + "btnFactoryReset": "🔄 Réinitialisation d'usine", + "toastPingSuccess": "⚡ Connexion réussie! Latence: {ms} ms", + "toastPingFailed": "❌ Échec de connexion au Gateway. Vérifiez le serveur", + "toastCacheCleared": "🧹 Cache du navigateur vidé avec succès", + "qaLineupE0S1Title": "Équipe en E0S1", + "qaLineupE0S1Desc": "Personnages de l'équipe à E0 avec Cône S1", + "qaLineupRelicsTitle": "Équiper reliques d'équipe auto", + "qaLineupRelicsDesc": "Équiper reliques +15 aux 4 coéquipiers", + "lblPersistenceInfo": "Gestion des sauvegardes et données serveur", + "modalTabOverview": "Aperçu", + "modalTabRelics": "Reliques & Équipement", + "overviewStatsTitle": "⚔️ Statistiques de combat", + "overviewStatsNote": "Inclut les bonus de Cône et de Reliques", + "overviewEquippedLc": "🗡️ Cône de Lumière équipé", + "overviewEquippedRelics": "🛡️ Reliques et bonus de set", + "modalRelicsTitle": "🛡️ Équiper reliques (6 emplacements)", + "modalRelicsSubtitle": "Cliquez sur chaque emplacement pour modifier ou équiper les sets recommandés", + "btnAutoEquipRelics": "⚡ Équiper sets recommandés", + "btnClearAllRelics": "🧹 Tout déséquiper", + "activeSetEffects": "✨ Bonus de set actifs", + "modalColLevel": "Niveau", + "lblPromotion": "Rang d'élévation", + "slotPickerTitle": "🛡️ Sélectionner une relique à équiper", + "quickGenRecTitle": "⚡ Générer la pièce recommandée", + "quickGenRecDesc": "Générer 5★ +15 avec le meilleur set et la stat principale", + "btnGenAndEquip": "Générer & Équiper", + "selectFromInventory": "Sélectionner dans l'inventaire", + "btnAllE0S1": "⚡ Tous E0S1", + "qaGachabaseTitle": "Récupérer depuis Gachabase", + "qaGachabaseDesc": "Importer les derniers personnages et cônes de la bêta", + "synergyTitle": "Analyse de synergie d'équipe et rupture de faiblesse", + "synergySubtitle": "Analysez la couverture de faiblesse, l'équilibre des rôles et la préparation des équipements", + "synergyBreakCoverage": "🎯 Couverture de rupture de faiblesse", + "synergyRoleBalance": "🛡️ Composition d'équipe et distribution des rôles", + "synergyEquipmentTitle": "📊 Préparation des équipements et niveau moyen", + "synergyAvgLevel": "Niveau moyen", + "synergyAvgEidolon": "Eidolon moyen", + "synergyLcEquipped": "Cônes équipés", + "synergyRelicFull": "Reliques complètes", + "synergyCoverageBadge": "Couvre {count}/7 Éléments", + "synergyNoInTeam": "Aucun dans l'équipe", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Soutien / Affaiblissement", + "roleSustain": "🛡️ Survie (Soigneur/Bouclier)", + "roleSpecialist": "🔮 Spécialiste / Attaque de suivi", + "adviceEmpty": "Aucun personnage dans l'équipe. Veuillez sélectionner des coéquipiers ci-dessus.", + "adviceNoSustain": "⚠️ Conseil: L'équipe manque d'une unité de défense ou de soin (Préservation / Abondance). En ajouter une est fortement recommandé.", + "adviceNoDps": "💡 Conseil: L'équipe ne contient que des soutiens sans attaquant principal (Destruction / Chasse / Érudition).", + "adviceNoSupport": "💡 Conseil: L'équipe a des attaquants mais manque de buffs/débuffs (Harmonie / Nihilité). Ajouter du soutien augmentera grandement vos dégâts.", + "adviceBalanced": "✅ Équilibre excellent: L'équipe est complète avec DPS, soutiens et survie. Prête pour tous les défis!", + "consoleTitle": "Console de commandes GM et journaux en direct", + "consoleSubtitle": "Envoyez des commandes GM / Serveur en temps réel avec journaux de paquets", + "consoleCopyLog": "📋 Copier", + "consoleClearLog": "🗑️ Effacer", + "consoleQuickTitle": "⚡ Commandes rapides", + "consolePlaceholder": "Entrez commande GM, ex: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Envoyer", + "consoleHistoryHint": "💡 Appuyez sur ↑ ↓ pour naviguer dans l'historique des commandes", + "consoleOnline": "● Serveur en ligne", + "consoleOffline": "○ Hors ligne (Exécution locale)", + "consoleLogCopied": "📋 Tous les journaux ont été copiés dans le presse-papiers!", + "consoleLogCopyFailed": "❌ Impossible de copier les journaux", + "consoleLogCleared": "Journaux du terminal effacés", + "btnGachabaseSync": "🌐 Synchroniser Gachabase", + "tabPersistentGaC": "💾 Gestionnaire de sauvegarde GaC", + "tabPersistentFirefly": "👤 Pionnier & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Rang de superposition", + "lcPickerTitle": "🗡️ Sélectionner un Cône de Lumière à équiper", + "lcPickerSigTitle": "⭐ Cône de Lumière signature recommandé", + "lcPickerEquipSig": "⚡ Équiper ceci", + "lcPickerUnequip": "✕ Déséquiper le Cône" }, "de": { "ahaGlobalDesc": "Serverweite Äon ★ Aha-Spezialmechanik aktivieren", @@ -2353,7 +3341,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Relikt zu FreeSR hinzugefügt", "deleteItem": "Löschen", "toastItemDeleted": "Gegenstand erfolgreich gelöscht", - "appName": "GaC-Srtool", "appSubtitle": "Star Rail FreeSR- & Server-Controller", "online": "Verbunden", @@ -2527,7 +3514,114 @@ export const TRANSLATIONS = { "Elation": "Der Frohsinn" }, "settingsSaved": "Einstellungen erfolgreich gespeichert!", - "settingsReset": "Auf Standardeinstellungen zurückgesetzt" + "settingsReset": "Auf Standardeinstellungen zurückgesetzt", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Showcase-Karte", + "showcaseAutoRelics": "⚡ Relikte autom. anlegen", + "showcaseCopy": "📋 Text kopieren", + "showcaseExport": "🖼️ Bild exportieren", + "btnChangeLc": "Lichtkegel wechseln", + "lcPassiveTitle": "Lichtkegel-Fähigkeit", + "toastE6S5Applied": "⭐ Charakter auf E6S5 maximiert (Stufe 80, Max Fertigkeiten, S5)!", + "toastE0S1Applied": "⚡ Charakter auf E0S1 gesetzt (Stufe 80, Max Fertigkeiten, S1)!", + "toastShowcaseCopied": "📋 Build-Informationen in die Zwischenablage kopiert!", + "toastRelicsEquipped": "⚡ Optimales +15 Reliktset für {name} ausgerüstet!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ API-Gateway-Verbindung", + "settingsConnSubtitle": "Servermodus und REST-Endpunkt konfigurieren", + "btnTestPing": "⚡ Verbindung testen", + "settingsBattleTitle": "🎮 Kampf- & FreeSR-Standardwerte", + "settingsBattleSubtitle": "Standardverhalten im Kampf und bei Aufstellungen anpassen", + "lblDefaultEnergy": "Startenergie im Kampf", + "lblAutoSync": "Automatisch mit Server synchronisieren", + "descAutoSync": "Änderungen an Charakteren und Ausrüstung sofort senden", + "lblDefaultCreative": "Kreativmodus standardmäßig aktivieren", + "descDefaultCreative": "Doppelte Charaktere und mehr als 4 Aufstellungsplätze erlauben", + "settingsShowcaseTitle": "🖼️ Showcase-Kartenanzeige", + "settingsShowcaseSubtitle": "Design und Details der Build-Karte anpassen", + "lblShowRolls": "Anzahl der Substat-Verbesserungen anzeigen", + "descShowRolls": "Roll-Zähler für Relikt-Nebenwerte anzeigen", + "lblElementAura": "Elementarer Aura-Leuchteffekt", + "descElementAura": "Dynamischer Kartenhintergrund passend zum Charakter-Element", + "settingsCacheTitle": "🧹 Cache-Verwaltung & Zurücksetzen", + "settingsCacheSubtitle": "Temporäre Browserdaten löschen oder Werkseinstellungen wiederherstellen", + "lblCacheSize": "LocalStorage-Speichernutzung:", + "btnClearCache": "🧹 Browser-Cache leeren", + "btnFactoryReset": "🔄 Werkseinstellungen wiederherstellen", + "toastPingSuccess": "⚡ Erfolgreich verbunden! Latenz: {ms} ms", + "toastPingFailed": "❌ Verbindung zum Gateway fehlgeschlagen. Bitte Server prüfen", + "toastCacheCleared": "🧹 Browser-Cache erfolgreich geleert", + "qaLineupE0S1Title": "Team auf E0S1 setzen", + "qaLineupE0S1Desc": "Teamcharaktere auf E0 mit S1 Lichtkegel", + "qaLineupRelicsTitle": "Team-Relikte autom. ausrüsten", + "qaLineupRelicsDesc": "+15 Relikte für 4 Teammitglieder anlegen", + "lblPersistenceInfo": "Server-Speicherdatei & Datenverwaltung", + "modalTabOverview": "Übersicht", + "modalTabRelics": "Relikte & Ausrüstung", + "overviewStatsTitle": "⚔️ Kampfwerte (Combat Stats)", + "overviewStatsNote": "Enthält Boni von Lichtkegel und Relikten", + "overviewEquippedLc": "🗡️ Ausgerüsteter Lichtkegel", + "overviewEquippedRelics": "🛡️ Relikte & Set-Boni", + "modalRelicsTitle": "🛡️ Relikte ausrüsten (6 Plätze)", + "modalRelicsSubtitle": "Klicken Sie auf einen Platz zum Wechseln oder empfohlene Sets ausrüsten", + "btnAutoEquipRelics": "⚡ Empfohlene Sets anlegen", + "btnClearAllRelics": "🧹 Alles ablegen", + "activeSetEffects": "✨ Aktive Set-Boni", + "modalColLevel": "Stufe", + "lblPromotion": "Aufstiegsrang", + "slotPickerTitle": "🛡️ Relikt zum Ausrüsten wählen", + "quickGenRecTitle": "⚡ Empfohlenes Teil generieren", + "quickGenRecDesc": "5★ +15 mit bestem Set und Hauptwert erstellen", + "btnGenAndEquip": "Erstellen & Ausrüsten", + "selectFromInventory": "Aus dem Inventar auswählen", + "btnAllE0S1": "⚡ Alle E0S1", + "qaGachabaseTitle": "Von Gachabase abrufen", + "qaGachabaseDesc": "Neueste Beta-/Datamined-Charaktere und Lichtkegel importieren", + "synergyTitle": "Team-Synergie & Schwächenbruch-Analyse", + "synergySubtitle": "Analysieren Sie Schwächenabdeckung, Rollenbalance und Ausrüstungsbereitschaft", + "synergyBreakCoverage": "🎯 Schwächenbruch-Abdeckung", + "synergyRoleBalance": "🛡️ Teamzusammensetzung & Rollenverteilung", + "synergyEquipmentTitle": "📊 Ausrüstungsbereitschaft & Durchschnittsstufe", + "synergyAvgLevel": "Durchschnittsstufe", + "synergyAvgEidolon": "Durchschn. Eidolon", + "synergyLcEquipped": "Lichtkegel ausgerüstet", + "synergyRelicFull": "Vollständige Relikte", + "synergyCoverageBadge": "Deckt {count}/7 Elemente ab", + "synergyNoInTeam": "Nicht im Team", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Unterstützung / Debuff", + "roleSustain": "🛡️ Überleben (Heiler/Schild)", + "roleSpecialist": "🔮 Spezialist / Folgeangriff", + "adviceEmpty": "Keine Charaktere im Team. Bitte wählen Sie oben Teammitglieder aus.", + "adviceNoSustain": "⚠️ Tipp: Dem Team fehlt ein Verteidiger oder Heiler (Bewahrung / Überfluss). Es wird dringend empfohlen, einen hinzuzufügen.", + "adviceNoDps": "💡 Tipp: Das Team besteht nur aus Unterstützern ohne primären Schadensausteiler (Zerstörung / Jagd / Gelehrsamkeit).", + "adviceNoSupport": "💡 Tipp: Das Team hat DPS, aber keine Puffer/Debuffer (Harmonie / Nichtigkeit). Unterstützung erhöht den Gesamtschaden massiv.", + "adviceBalanced": "✅ Ausgezeichnete Balance: Vollständige Aufstellung mit DPS, Puffer/Debuffer und Überleben. Bereit für jede Herausforderung!", + "consoleTitle": "GM-Befehlskonsole & Live-Protokolle", + "consoleSubtitle": "GM-/Serverbefehle in Echtzeit mit Paketprotokollen und Status senden", + "consoleCopyLog": "📋 Kopieren", + "consoleClearLog": "🗑️ Löschen", + "consoleQuickTitle": "⚡ Schnelle Befehle", + "consolePlaceholder": "GM-Befehl eingeben, z.B. /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Senden", + "consoleHistoryHint": "💡 Drücken Sie ↑ ↓, um den Befehlsverlauf aufzurufen", + "consoleOnline": "● Server online", + "consoleOffline": "○ Offline (Lokale Ausführung)", + "consoleLogCopied": "📋 Alle Protokolle in die Zwischenablage kopiert!", + "consoleLogCopyFailed": "❌ Fehler beim Kopieren der Protokolle", + "consoleLogCleared": "Terminalprotokoll gelöscht", + "btnGachabaseSync": "🌐 Gachabase synchronisieren", + "tabPersistentGaC": "💾 GaC-Speicherverwaltung", + "tabPersistentFirefly": "👤 Trailblazer & March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Überlagerungsrang", + "lcPickerTitle": "🗡️ Lichtkegel zum Ausrüsten wählen", + "lcPickerSigTitle": "⭐ Empfohlener Signatur-Lichtkegel", + "lcPickerEquipSig": "⚡ Diesen anlegen", + "lcPickerUnequip": "✕ Lichtkegel ablegen" }, "ru": { "ahaGlobalDesc": "Включить особый пассивный навык Эона ★ Аха по всему серверу", @@ -2570,7 +3664,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Реликвия добавлена в FreeSR", "deleteItem": "Удалить", "toastItemDeleted": "Предмет успешно удален", - "appName": "GaC-Srtool", "appSubtitle": "Контроллер сервера и FreeSR Star Rail", "online": "Подключено", @@ -2744,7 +3837,114 @@ export const TRANSLATIONS = { "Elation": "Радость" }, "settingsSaved": "Настройки успешно сохранены!", - "settingsReset": "Настройки сброшены по умолчанию" + "settingsReset": "Настройки сброшены по умолчанию", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Карточка персонажа", + "showcaseAutoRelics": "⚡ Надеть реликвии авто", + "showcaseCopy": "📋 Скопировать текст", + "showcaseExport": "🖼️ Сохранить изображение", + "btnChangeLc": "Сменить Световой конус", + "lcPassiveTitle": "Навык Светового конуса", + "toastE6S5Applied": "⭐ Персонаж прокачан на максимум: E6S5 (80 ур., макс. следы, Наложение 5)!", + "toastE0S1Applied": "⚡ Персонаж настроен на E0S1 (80 ур., макс. следы, Наложение 1)!", + "toastShowcaseCopied": "📋 Информация о билде скопирована в буфер обмена!", + "toastRelicsEquipped": "⚡ Оптимальный набор реликвий +15 надет на {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Подключение к API Gateway", + "settingsConnSubtitle": "Настройка режима сервера и адреса REST эндпоинта", + "btnTestPing": "⚡ Проверить соединение", + "settingsBattleTitle": "🎮 Настройки боя и FreeSR по умолчанию", + "settingsBattleSubtitle": "Поведение в бою и параметры формирования отряда", + "lblDefaultEnergy": "Начальная энергия в бою (Starting Energy)", + "lblAutoSync": "Автосинхронизация с сервером (Auto-Sync)", + "descAutoSync": "Мгновенно отправлять изменения персонажей и экипировки на сервер", + "lblDefaultCreative": "Творческий режим по умолчанию", + "descDefaultCreative": "Разрешить дубликаты персонажей и более 4 слотов в отряде", + "settingsShowcaseTitle": "🖼️ Отображение карточки персонажа", + "settingsShowcaseSubtitle": "Настройка стиля и деталей карточки сборки", + "lblShowRolls": "Показывать число роллов сабстатов", + "descShowRolls": "Отображать метки числа улучшений дополнительных характеристик", + "lblElementAura": "Свечение ауры элемента", + "descElementAura": "Динамический фон и свечение карточки под цвет стихии персонажа", + "settingsCacheTitle": "🧹 Управление кэшем и сброс", + "settingsCacheSubtitle": "Очистка временных данных браузера или полный сброс к заводским", + "lblCacheSize": "Использование памяти LocalStorage:", + "btnClearCache": "🧹 Очистить кэш браузера", + "btnFactoryReset": "🔄 Заводской сброс", + "toastPingSuccess": "⚡ Успешное подключение! Задержка: {ms} мс", + "toastPingFailed": "❌ Ошибка подключения к Gateway. Проверьте сервер", + "toastCacheCleared": "🧹 Кэш браузера успешно очищен", + "qaLineupE0S1Title": "Отряд на E0S1", + "qaLineupE0S1Desc": "Герои отряда на E0 с конусом S1", + "qaLineupRelicsTitle": "Авто-экипировка отряда", + "qaLineupRelicsDesc": "Надеть реликвии +15 всем 4 бойцам отряда", + "lblPersistenceInfo": "Управление сохранениями и данными сервера", + "modalTabOverview": "Обзор", + "modalTabRelics": "Реликвии и снаряжение", + "overviewStatsTitle": "⚔️ Боевые характеристики", + "overviewStatsNote": "Включает бонусы конуса и реликвий", + "overviewEquippedLc": "🗡️ Надетый Световой конус", + "overviewEquippedRelics": "🛡️ Реликвии и бонусы комплектов", + "modalRelicsTitle": "🛡️ Экипировка реликвий (6 слотов)", + "modalRelicsSubtitle": "Нажмите на слот для смены или наденьте рекомендованные комплекты", + "btnAutoEquipRelics": "⚡ Надеть рекомендованные сеты", + "btnClearAllRelics": "🧹 Снять всё", + "activeSetEffects": "✨ Активные эффекты комплектов", + "modalColLevel": "Уровень", + "lblPromotion": "Ранг возвышения", + "slotPickerTitle": "🛡️ Выбор реликвии для экипировки", + "quickGenRecTitle": "⚡ Создать рекомендованную деталь", + "quickGenRecDesc": "Создать 5★ +15 с лучшим сетом и главным статом", + "btnGenAndEquip": "Создать и надеть", + "selectFromInventory": "Выбрать из инвентаря", + "btnAllE0S1": "⚡ Все на E0S1", + "qaGachabaseTitle": "Получить данные из Gachabase", + "qaGachabaseDesc": "Импорт новых героев и конусов из беты/датамайна", + "synergyTitle": "Анализ синергии отряда и пробития уязвимостей", + "synergySubtitle": "Анализ покрытия уязвимостей, баланса ролей и готовности экипировки", + "synergyBreakCoverage": "🎯 Покрытие пробития уязвимостей", + "synergyRoleBalance": "🛡️ Состав отряда и распределение ролей", + "synergyEquipmentTitle": "📊 Готовность экипировки и средний уровень", + "synergyAvgLevel": "Средний уровень", + "synergyAvgEidolon": "Средний Эйдолон", + "synergyLcEquipped": "Конусов надето", + "synergyRelicFull": "Полный сет реликвий", + "synergyCoverageBadge": "Покрыто {count}/7 стихий", + "synergyNoInTeam": "Нет в отряде", + "roleDps": "🗡️ ДД (DPS)", + "roleSupport": "⚡ Саппорт / Дебаффер", + "roleSustain": "🛡️ Выживание (Хил/Щит)", + "roleSpecialist": "🔮 Специалист / Бонус-атака", + "adviceEmpty": "В отряде нет персонажей. Пожалуйста, выберите героев выше.", + "adviceNoSustain": "⚠️ Совет: В отряде нет персонажа защиты или лечения (Сохранение / Изобилие). Рекомендуется добавить одного для выживаемости.", + "adviceNoDps": "💡 Совет: В отряде только саппорты, нет основного бойца нанесения урона (Разрушение / Охота / Эрудиция).", + "adviceNoSupport": "💡 Совет: В отряде есть ДД, но не хватает бафферов или дебафферов (Гармония / Небытие). Поддержка сильно увеличит общий урон.", + "adviceBalanced": "✅ Отличный баланс: В отряде есть всё — ДД, баффер/дебаффер и персонаж выживания. Готов к любым испытаниям!", + "consoleTitle": "GM-консоль команд и живой журнал", + "consoleSubtitle": "Отправка команд GM / сервера в реальном времени с логированием пакетов", + "consoleCopyLog": "📋 Копировать", + "consoleClearLog": "🗑️ Очистить", + "consoleQuickTitle": "⚡ Быстрые команды", + "consolePlaceholder": "Введите GM-команду, напр.: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Отправить", + "consoleHistoryHint": "💡 Нажимайте ↑ ↓ для переключения истории команд", + "consoleOnline": "● Сервер онлайн", + "consoleOffline": "○ Офлайн (Локальное выполнение)", + "consoleLogCopied": "📋 Все логи скопированы в буфер обмена!", + "consoleLogCopyFailed": "❌ Не удалось скопировать логи", + "consoleLogCleared": "Журнал терминала очищен", + "btnGachabaseSync": "🌐 Синхронизация Gachabase", + "tabPersistentGaC": "💾 Управление сохранениями GaC", + "tabPersistentFirefly": "👤 Первопроходец и Март 7", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Ранг наложения", + "lcPickerTitle": "🗡️ Выберите Световой конус для экипировки", + "lcPickerSigTitle": "⭐ Рекомендованный сигнатурный конус", + "lcPickerEquipSig": "⚡ Надеть этот", + "lcPickerUnequip": "✕ Снять Световой конус" }, "pt": { "ahaGlobalDesc": "Ativar habilidade passiva especial de Aeon ★ Aha em todo o servidor", @@ -2787,7 +3987,6 @@ export const TRANSLATIONS = { "toastRelicAdded": "Relíquia adicionada ao FreeSR", "deleteItem": "Excluir", "toastItemDeleted": "Item excluído com sucesso", - "appName": "GaC-Srtool", "appSubtitle": "Controlador de Servidor e FreeSR de Star Rail", "online": "Conectado", @@ -2961,11 +4160,121 @@ export const TRANSLATIONS = { "Elation": "A Alegria" }, "settingsSaved": "Configurações salvas com sucesso!", - "settingsReset": "Configurações restauradas para o padrão" + "settingsReset": "Configurações restauradas para o padrão", + "btnE6S5": "⭐ E6S5", + "btnE0S1": "⚡ E0S1", + "modalTabShowcase": "🖼️ Cartão de Exibição", + "showcaseAutoRelics": "⚡ Autoequipar Relíquias", + "showcaseCopy": "📋 Copiar Texto", + "showcaseExport": "🖼️ Exportar Imagem", + "btnChangeLc": "Mudar Cone de Luz", + "lcPassiveTitle": "Habilidade do Cone de Luz", + "toastE6S5Applied": "⭐ Personagem maximizado para E6S5 (Nv.80, Habilidades no máx, S5)!", + "toastE0S1Applied": "⚡ Personagem ajustado para E0S1 (Nv.80, Habilidades no máx, S1)!", + "toastShowcaseCopied": "📋 Informações da build copiadas para a área de transferência!", + "toastRelicsEquipped": "⚡ Conjunto ótimo de relíquias +15 equipado para {name}!", + "btnDataGame": "🎮 data-in-game.json", + "settingsConnTitle": "⚙️ Conexão com API Gateway", + "settingsConnSubtitle": "Configurar modo do servidor e endpoint REST", + "btnTestPing": "⚡ Testar Conexão", + "settingsBattleTitle": "🎮 Padrões de Batalha & FreeSR", + "settingsBattleSubtitle": "Personalizar comportamento de combate e padrões de equipe", + "lblDefaultEnergy": "Energia Inicial de Batalha", + "lblAutoSync": "Sincronização Automática com o Servidor", + "descAutoSync": "Enviar alterações de personagens e equipamentos imediatamente", + "lblDefaultCreative": "Modo Criativo por Padrão", + "descDefaultCreative": "Permitir personagens duplicados e mais de 4 espaços na equipe", + "settingsShowcaseTitle": "🖼️ Exibição do Cartão de Showcase", + "settingsShowcaseSubtitle": "Personalizar design e detalhes do cartão de build", + "lblShowRolls": "Exibir Contagem de Rolagens de Sub-atributos", + "descShowRolls": "Mostrar marcadores de rolagens para sub-atributos de relíquias", + "lblElementAura": "Efeito de Brilho de Aura Elemental", + "descElementAura": "Fundo dinâmico e brilho ambiente correspondente ao elemento", + "settingsCacheTitle": "🧹 Gerenciamento de Cache & Redefinição", + "settingsCacheSubtitle": "Limpar dados temporários do navegador ou restaurar configurações de fábrica", + "lblCacheSize": "Uso de Memória LocalStorage:", + "btnClearCache": "🧹 Limpar Cache do Navegador", + "btnFactoryReset": "🔄 Redefinição de Fábrica", + "toastPingSuccess": "⚡ Conectado com sucesso! Latência: {ms} ms", + "toastPingFailed": "❌ Falha ao conectar ao Gateway. Verifique o servidor", + "toastCacheCleared": "🧹 Cache do navegador limpo com sucesso", + "qaLineupE0S1Title": "Equipe em E0S1", + "qaLineupE0S1Desc": "Personagens da equipe em E0 com Cone S1", + "qaLineupRelicsTitle": "Autoequipar Relíquias da Equipe", + "qaLineupRelicsDesc": "Equipar relíquias +15 para os 4 integrantes", + "lblPersistenceInfo": "Gerenciamento de saves e dados do servidor", + "modalTabOverview": "Visão Geral", + "modalTabRelics": "Relíquias & Equipamentos", + "overviewStatsTitle": "⚔️ Atributos de Combate", + "overviewStatsNote": "Inclui bônus de Cone de Luz e Relíquias", + "overviewEquippedLc": "🗡️ Cone de Luz Equipado", + "overviewEquippedRelics": "🛡️ Relíquias e Efeitos de Conjunto", + "modalRelicsTitle": "🛡️ Equipar Relíquias (6 Espaços)", + "modalRelicsSubtitle": "Clique em cada espaço para alterar ou equipar conjuntos recomendados", + "btnAutoEquipRelics": "⚡ Equipar Conjuntos Recomendados", + "btnClearAllRelics": "🧹 Desequipar Tudo", + "activeSetEffects": "✨ Efeitos de Conjunto Ativos", + "modalColLevel": "Nível", + "lblPromotion": "Classificação de Ascensão", + "slotPickerTitle": "🛡️ Selecionar Relíquia para Equipar", + "quickGenRecTitle": "⚡ Gerar Peça Recomendada", + "quickGenRecDesc": "Gerar 5★ +15 com o melhor conjunto e atributo principal", + "btnGenAndEquip": "Gerar & Equipar", + "selectFromInventory": "Selecionar do Inventário", + "btnAllE0S1": "⚡ Todos E0S1", + "qaGachabaseTitle": "Buscar do Gachabase", + "qaGachabaseDesc": "Importar personagens e cones mais recentes da beta", + "synergyTitle": "Análise de Sinergia de Equipe e Quebra de Fraqueza", + "synergySubtitle": "Analise a cobertura de fraquezas, equilíbrio de funções e prontidão de equipamentos", + "synergyBreakCoverage": "🎯 Cobertura de Quebra de Fraqueza", + "synergyRoleBalance": "🛡️ Composição da Equipe e Distribuição de Funções", + "synergyEquipmentTitle": "📊 Prontidão de Equipamentos e Nível Médio", + "synergyAvgLevel": "Nível Médio", + "synergyAvgEidolon": "Eidolon Médio", + "synergyLcEquipped": "Cones Equipados", + "synergyRelicFull": "Relíquias Completas", + "synergyCoverageBadge": "Cobre {count}/7 Elementos", + "synergyNoInTeam": "Nenhum na equipe", + "roleDps": "🗡️ DPS", + "roleSupport": "⚡ Suporte / Debuff", + "roleSustain": "🛡️ Sobrevivência (Cura/Escudo)", + "roleSpecialist": "🔮 Especialista / Ataque Extra", + "adviceEmpty": "Nenhum personagem na equipe. Selecione integrantes acima.", + "adviceNoSustain": "⚠️ Dica: A equipe não tem um defensor ou curador (Preservação / Abundância). Recomenda-se adicionar um para sobrevivência.", + "adviceNoDps": "💡 Dica: A equipe é composta apenas por suportes sem um causador de dano principal (Destruição / Caça / Erudição).", + "adviceNoSupport": "💡 Dica: A equipe tem DPS, mas carece de buffers/debuffers (Harmonia / Inexistência). Adicionar suporte aumentará bastante o dano.", + "adviceBalanced": "✅ Equilíbrio Excelente: A formação conta com DPS, suporte de buffer/debuffer e sobrevivência. Pronta para qualquer desafio!", + "consoleTitle": "Console de Comandos GM e Log em Tempo Real", + "consoleSubtitle": "Envie comandos GM / Servidor em tempo real com logs de pacotes e status", + "consoleCopyLog": "📋 Copiar", + "consoleClearLog": "🗑️ Limpar", + "consoleQuickTitle": "⚡ Comandos Rápidos", + "consolePlaceholder": "Digite comando GM, ex: /heal, /max, /teleport 20411, /give 102 1000...", + "consoleSend": "Enviar", + "consoleHistoryHint": "💡 Pressione ↑ ↓ para navegar no histórico de comandos", + "consoleOnline": "● Servidor Online", + "consoleOffline": "○ Offline (Execução local)", + "consoleLogCopied": "📋 Todos os logs copiados para a área de transferência!", + "consoleLogCopyFailed": "❌ Falha ao copiar logs", + "consoleLogCleared": "Log do terminal limpo", + "btnGachabaseSync": "🌐 Sincronizar Gachabase", + "tabPersistentGaC": "💾 Gerenciador de Saves GaC", + "tabPersistentFirefly": "👤 Desbravador e March 7th", + "badgePersistenceGaC": "GaC: persistent.json (/api/persistent)", + "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", + "badgePersistenceRobin": "RobinSR: freesr-data.json (/api/freesr)", + "lblLcSuperimpose": "Classificação de Sobreposição", + "lcPickerTitle": "🗡️ Selecionar Cone de Luz para Equipar", + "lcPickerSigTitle": "⭐ Cone de Luz de Assinatura Recomendado", + "lcPickerEquipSig": "⚡ Equipar Este", + "lcPickerUnequip": "✕ Desequipar Cone de Luz" } }; -let currentLang = typeof localStorage !== 'undefined' ? (localStorage.getItem('gac_srtool_lang') || 'th') : 'th'; +let currentLang = 'th'; +if (typeof localStorage !== 'undefined') { + currentLang = localStorage.getItem('gac_srtool_lang') || 'th'; +} export function getCurrentLanguage() { return currentLang; @@ -2984,7 +4293,7 @@ export function t(key, vars = {}) { const dict = TRANSLATIONS[currentLang] || TRANSLATIONS.en || TRANSLATIONS.th; let text = dict[key] || TRANSLATIONS.en[key] || TRANSLATIONS.th[key] || key; - // Substitute variables e.g. {id}, {rank}, {name}, {slot}, {mode}, {n} + // Substitute variables e.g. {id}, {rank}, {name}, {slot}, {mode}, {n}, {count}, {ms} for (const [vKey, vVal] of Object.entries(vars)) { text = text.replace(new RegExp(`\\{${vKey}\\}`, 'g'), vVal); }