fix(branding,i18n): rename GaC to GaCy and add data-i18n to untranslated html elements

This commit is contained in:
CAtlas0784 committed 2026-11-01 19:30:42 +07:00
1 parent c755373b0f
commit f0b14c8d6f
4 files changed
+147 -140

No files matched your search

+63 -63
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GaCy-Srtool</title> <title>GaCy-Srtool</title>
<link rel="stylesheet" href="css/styles.css?v=2.21"> <link rel="stylesheet" href="css/styles.css?v=2.22">
<link rel="stylesheet" href="css/item-catalog.css?v=2"> <link rel="stylesheet" href="css/item-catalog.css?v=2">
<link rel="icon" type="image/png" href="assets/logo.png"> <link rel="icon" type="image/png" href="assets/logo.png">
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
@@ -42,7 +42,7 @@
<!-- Connection Pill --> <!-- Connection Pill -->
<div class="connection-pill" id="btn-open-settings" title="คลิกเพื่อตั้งค่าการเชื่อมต่อ API" data-i18n-title="apiSettingsTooltip"> <div class="connection-pill" id="btn-open-settings" title="คลิกเพื่อตั้งค่าการเชื่อมต่อ API" data-i18n-title="apiSettingsTooltip">
<span class="status-dot" id="status-dot"></span> <span class="status-dot" id="status-dot"></span>
<span id="connection-status-text">กำลังตรวจสอบ...</span> <span id="connection-status-text" data-i18n="checking">กำลังตรวจสอบ...</span>
</div> </div>
<button class="btn btn-secondary btn-sm" id="btn-quick-ping" title="รีเฟรชการเชื่อมต่อ" data-i18n="refresh" data-i18n-title="refresh"> <button class="btn btn-secondary btn-sm" id="btn-quick-ping" title="รีเฟรชการเชื่อมต่อ" data-i18n="refresh" data-i18n-title="refresh">
@@ -125,7 +125,7 @@
<div style="display: flex; flex-direction: column; gap: 0.75rem;"> <div style="display: flex; flex-direction: column; gap: 0.75rem;">
<div> <div>
<span class="form-label" data-i18n="lblServerModeActive">โหมดเซิร์ฟเวอร์ที่ใช้งาน</span> <span class="form-label" data-i18n="lblServerModeActive">โหมดเซิร์ฟเวอร์ที่ใช้งาน</span>
<strong id="lbl-active-mode" style="color: var(--accent-cyan);">GaC-hkrpg-go</strong> <strong id="lbl-active-mode" style="color: var(--accent-cyan);">GaCy GO</strong>
</div> </div>
<div> <div>
<span class="form-label" data-i18n="lblApiEndpoint">API Gateway Endpoint</span> <span class="form-label" data-i18n="lblApiEndpoint">API Gateway Endpoint</span>
@@ -159,7 +159,7 @@
<span class="badge-super-tag" id="badge-mini-battle-status" data-i18n="miniNoBattleTitle" style="background: rgba(156, 163, 175, 0.12); color: var(--text-muted); font-weight: 800; border: 1px solid rgba(156, 163, 175, 0.25);"> <span class="badge-super-tag" id="badge-mini-battle-status" data-i18n="miniNoBattleTitle" style="background: rgba(156, 163, 175, 0.12); color: var(--text-muted); font-weight: 800; border: 1px solid rgba(156, 163, 175, 0.25);">
ยังไม่มีข้อมูลการต่อสู้ ยังไม่มีข้อมูลการต่อสู้
</span> </span>
<button type="button" class="btn btn-sm btn-secondary" id="btn-mini-view-full-analyst" style="font-size: 0.725rem; padding: 0.2rem 0.55rem; color: var(--accent-cyan); border-color: rgba(56, 189, 248, 0.35); font-weight: 700;" title="เปิดหน้า Damage Analyst ตัวเต็ม" data-i18n="miniViewFullAnalyst"> <button type="button" class="btn btn-sm btn-secondary" id="btn-mini-view-full-analyst" style="font-size: 0.725rem; padding: 0.2rem 0.55rem; color: var(--accent-cyan); border-color: rgba(56, 189, 248, 0.35); font-weight: 700;" title="เปิดหน้า Damage Analyst ตัวเต็ม" data-i18n-title="miniViewFullAnalystTooltip" data-i18n="miniViewFullAnalyst">
Damage Analyst → Damage Analyst →
</button> </button>
</div> </div>
@@ -304,25 +304,25 @@
</select> </select>
<select id="avatar-filter-element" class="form-select" style="max-width: 130px;"> <select id="avatar-filter-element" class="form-select" style="max-width: 130px;">
<option value="all" data-i18n="filterAllElements">ทุกธาตุ</option> <option value="all" data-i18n="filterAllElements">ทุกธาตุ</option>
<option value="Fire">ไฟ</option> <option value="Fire" data-i18n="Fire">ไฟ</option>
<option value="Ice">น้ำแข็ง</option> <option value="Ice" data-i18n="Ice">น้ำแข็ง</option>
<option value="Lightning">สายฟ้า</option> <option value="Lightning" data-i18n="Lightning">สายฟ้า</option>
<option value="Wind">ลม</option> <option value="Wind" data-i18n="Wind">ลม</option>
<option value="Physical">กายภาพ</option> <option value="Physical" data-i18n="Physical">กายภาพ</option>
<option value="Quantum">ควอนตัม</option> <option value="Quantum" data-i18n="Quantum">ควอนตัม</option>
<option value="Imaginary">จินตภาพ</option> <option value="Imaginary" data-i18n="Imaginary">จินตภาพ</option>
</select> </select>
<select id="avatar-filter-path" class="form-select" style="max-width: 130px;"> <select id="avatar-filter-path" class="form-select" style="max-width: 130px;">
<option value="all" data-i18n="filterAllPaths">ทุกประเภท</option> <option value="all" data-i18n="filterAllPaths">ทุกประเภท</option>
<option value="Destruction">ทำลายล้าง</option> <option value="Destruction" data-i18n="Destruction">ทำลายล้าง</option>
<option value="Hunt">ล่าสังหาร</option> <option value="Hunt" data-i18n="Hunt">ล่าสังหาร</option>
<option value="Erudition">ปัญญา</option> <option value="Erudition" data-i18n="Erudition">ปัญญา</option>
<option value="Harmony">ประสาน</option> <option value="Harmony" data-i18n="Harmony">ประสาน</option>
<option value="Nihility">ลบล้าง</option> <option value="Nihility" data-i18n="Nihility">ลบล้าง</option>
<option value="Preservation">อนุรักษ์</option> <option value="Preservation" data-i18n="Preservation">อนุรักษ์</option>
<option value="Abundance">เฟื่องฟู</option> <option value="Abundance" data-i18n="Abundance">เฟื่องฟู</option>
<option value="Remembrance">ความทรงจำ</option> <option value="Remembrance" data-i18n="Remembrance">ความทรงจำ</option>
<option value="Elation">ปีติ</option> <option value="Elation" data-i18n="Elation">ปีติ</option>
</select> </select>
</div> </div>
<div style="display: flex; gap: 0.5rem; flex-wrap: wrap;"> <div style="display: flex; gap: 0.5rem; flex-wrap: wrap;">
@@ -422,7 +422,7 @@
<input type="search" id="item-catalog-search" class="form-input" data-i18n-placeholder="itemCatalogSearchPlaceholder" placeholder="ค้นหาชื่อหรือ Item ID..."> <input type="search" id="item-catalog-search" class="form-input" data-i18n-placeholder="itemCatalogSearchPlaceholder" placeholder="ค้นหาชื่อหรือ Item ID...">
<select id="item-catalog-filter" class="form-select" aria-label="Filter item catalog"> <select id="item-catalog-filter" class="form-select" aria-label="Filter item catalog">
<option value="all" data-i18n="itemCatalogFilterAll">ทั้งหมด</option> <option value="all" data-i18n="itemCatalogFilterAll">ทั้งหมด</option>
<option value="supported" data-i18n="itemCatalogFilterSupported">GaC รองรับ</option> <option value="supported" data-i18n="itemCatalogFilterSupported">GaCy รองรับ</option>
<option value="item" data-i18n="itemCatalogFilterItems">ไอเทม</option> <option value="item" data-i18n="itemCatalogFilterItems">ไอเทม</option>
<option value="lightcone" data-i18n="itemCatalogFilterLightCones">กรวยแสง</option> <option value="lightcone" data-i18n="itemCatalogFilterLightCones">กรวยแสง</option>
<option value="relic" data-i18n="itemCatalogFilterRelics">รีลิกส์</option> <option value="relic" data-i18n="itemCatalogFilterRelics">รีลิกส์</option>
@@ -541,7 +541,7 @@
<div> <div>
<div class="card-title" style="margin-bottom: 0.25rem;"> <div class="card-title" style="margin-bottom: 0.25rem;">
<span data-i18n="analystTitle">💥 วิเคราะห์ความเสียหายจากการต่อสู้ (Damage Analyst)</span> <span data-i18n="analystTitle">💥 วิเคราะห์ความเสียหายจากการต่อสู้ (Damage Analyst)</span>
<span class="badge-super-tag" id="badge-analyst-status" style="background: rgba(34, 197, 94, 0.15); color: #4ade80;">พร้อมรับข้อมูลจากเกม</span> <span class="badge-super-tag" id="badge-analyst-status" data-i18n="analystStatusReady" style="background: rgba(34, 197, 94, 0.15); color: #4ade80;">พร้อมรับข้อมูลจากเกม</span>
</div> </div>
<p class="card-subtitle" style="margin-bottom: 0;" data-i18n="analystSubtitle"> <p class="card-subtitle" style="margin-bottom: 0;" data-i18n="analystSubtitle">
ดักจับและวิเคราะห์ดาเมจจากการต่อสู้จริงในเกม Star Rail (ระบบเดียวกับ FireflyGO / Veritas) ดักจับและวิเคราะห์ดาเมจจากการต่อสู้จริงในเกม Star Rail (ระบบเดียวกับ FireflyGO / Veritas)
@@ -574,19 +574,19 @@
<div class="card" style="padding: 1.2rem; border-left: 4px solid #ef4444; background: linear-gradient(135deg, rgba(239,68,68,0.06) 0%, rgba(20,20,28,0.7) 100%);"> <div class="card" style="padding: 1.2rem; border-left: 4px solid #ef4444; background: linear-gradient(135deg, rgba(239,68,68,0.06) 0%, rgba(20,20,28,0.7) 100%);">
<div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystTotalDamage">ดาเมจรวมทั้งทีม</div> <div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystTotalDamage">ดาเมจรวมทั้งทีม</div>
<div style="font-size: 1.85rem; font-weight: 900; color: #f87171; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-team-damage">0</div> <div style="font-size: 1.85rem; font-weight: 900; color: #f87171; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-team-damage">0</div>
<div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-damage-av">เฉลี่ยต่อรอบ: -</div> <div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-damage-av" data-i18n="analystDamageAvPlaceholder">เฉลี่ยต่อรอบ: -</div>
</div> </div>
<div class="card" style="padding: 1.2rem; border-left: 4px solid #f59e0b; background: linear-gradient(135deg, rgba(245,158,11,0.06) 0%, rgba(20,20,28,0.7) 100%);"> <div class="card" style="padding: 1.2rem; border-left: 4px solid #f59e0b; background: linear-gradient(135deg, rgba(245,158,11,0.06) 0%, rgba(20,20,28,0.7) 100%);">
<div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystCycles">จำนวนรอบ (Cycles)</div> <div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystCycles">จำนวนรอบ (Cycles)</div>
<div style="font-size: 1.85rem; font-weight: 900; color: #fbbf24; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-cycles">0 รอบ</div> <div style="font-size: 1.85rem; font-weight: 900; color: #fbbf24; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-cycles" data-i18n="analystCyclesPlaceholder">0 รอบ</div>
<div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-cycles-note" data-i18n="analystCyclesNote">MoC / PF / AS Standard</div> <div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-cycles-note" data-i18n="analystCyclesNote">MoC / PF / AS Standard</div>
</div> </div>
<div class="card" style="padding: 1.2rem; border-left: 4px solid #38bdf8; background: linear-gradient(135deg, rgba(56,189,248,0.06) 0%, rgba(20,20,28,0.7) 100%);"> <div class="card" style="padding: 1.2rem; border-left: 4px solid #38bdf8; background: linear-gradient(135deg, rgba(56,189,248,0.06) 0%, rgba(20,20,28,0.7) 100%);">
<div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystTurns">เทิร์นทั้งหมด</div> <div style="font-size: 0.775rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase;" data-i18n="analystTurns">เทิร์นทั้งหมด</div>
<div style="font-size: 1.85rem; font-weight: 900; color: #38bdf8; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-total-turns">0 เทิร์น</div> <div style="font-size: 1.85rem; font-weight: 900; color: #38bdf8; letter-spacing: -0.5px; margin: 0.25rem 0;" id="analyst-total-turns" data-i18n="analystTurnsPlaceholder">0 เทิร์น</div>
<div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-auto-turns">เทิร์นอัตโนมัติ: 0</div> <div style="font-size: 0.75rem; color: var(--text-muted);" id="analyst-auto-turns" data-i18n="analystAutoTurnsPlaceholder">เทิร์นอัตโนมัติ: 0</div>
</div> </div>
<div class="card" style="padding: 1.2rem; border-left: 4px solid #34d399; background: linear-gradient(135deg, rgba(52,211,153,0.06) 0%, rgba(20,20,28,0.7) 100%);"> <div class="card" style="padding: 1.2rem; border-left: 4px solid #34d399; background: linear-gradient(135deg, rgba(52,211,153,0.06) 0%, rgba(20,20,28,0.7) 100%);">
@@ -600,7 +600,7 @@
<div class="card" style="margin-bottom: 1.25rem;"> <div class="card" style="margin-bottom: 1.25rem;">
<div class="card-title" style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.75rem;"> <div class="card-title" style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.75rem;">
<span data-i18n="analystDpsShare">สัดส่วนดาเมจของทีม (Team DPS Share)</span> <span data-i18n="analystDpsShare">สัดส่วนดาเมจของทีม (Team DPS Share)</span>
<span style="font-size: 0.8rem; color: var(--text-muted);" id="analyst-total-share-label">รวม 100%</span> <span style="font-size: 0.8rem; color: var(--text-muted);" id="analyst-total-share-label" data-i18n="analystShareTotal">รวม 100%</span>
</div> </div>
<!-- Progress Bar Container --> <!-- Progress Bar Container -->
<div id="analyst-share-bar-container" style="height: 18px; width: 100%; border-radius: 9px; background: rgba(255,255,255,0.05); overflow: hidden; display: flex; margin-bottom: 0.85rem; border: 1px solid rgba(255,255,255,0.1);"> <div id="analyst-share-bar-container" style="height: 18px; width: 100%; border-radius: 9px; background: rgba(255,255,255,0.05); overflow: hidden; display: flex; margin-bottom: 0.85rem; border: 1px solid rgba(255,255,255,0.1);">
@@ -628,15 +628,15 @@
</div> </div>
</section> </section>
<!-- 4. Persistent Save Settings (Exclusive to GaC-hkrpg-go) --> <!-- 4. Persistent Save Settings (Exclusive to GaCy GO) -->
<section id="tab-persistent" class="tab-content"> <section id="tab-persistent" class="tab-content">
<div class="card" style="margin-bottom: 1.5rem;"> <div class="card" style="margin-bottom: 1.5rem;">
<div class="card-title"> <div class="card-title">
<span data-i18n="persistentTitle">💾 จัดการไฟล์เซฟ GaC</span> <span data-i18n="persistentTitle">💾 จัดการไฟล์เซฟ GaCy</span>
<span class="btn-sm btn-success" data-i18n="persistentBadge">เซิร์ฟเวอร์ของเราเอง</span> <span class="btn-sm btn-success" data-i18n="persistentBadge">เซิร์ฟเวอร์ของเราเอง</span>
</div> </div>
<p class="card-subtitle" data-i18n="persistentSubtitle"> <p class="card-subtitle" data-i18n="persistentSubtitle">
ไฟล์ persistent เก็บการตั้งค่าสถานะผู้เล่นเฉพาะของเซิร์ฟเวอร์ GaC เช่น เพศ/ธาตุตัวเอก, สเตตัส March 7th, สวิตช์ฟังก์ชัน Global ต่างๆ ไฟล์ persistent เก็บการตั้งค่าสถานะผู้เล่นเฉพาะของเซิร์ฟเวอร์ GaCy GO เช่น เพศ/ธาตุตัวเอก, สเตตัส March 7th, สวิตช์ฟังก์ชัน Global ต่างๆ
</p> </p>
</div> </div>
@@ -648,22 +648,22 @@
<div class="form-group"> <div class="form-group">
<label class="form-label" data-i18n="lblTbGenderElement">เพศ & ธาตุของตัวเอก</label> <label class="form-label" data-i18n="lblTbGenderElement">เพศ & ธาตุของตัวเอก</label>
<select id="persistent-mc-select" class="form-select"> <select id="persistent-mc-select" class="form-select">
<option value="MalePhysical">ผู้บุกเบิกชาย - กายภาพ</option> <option value="MalePhysical" data-i18n="tbOptions.MalePhysical">ผู้บุกเบิกชาย - กายภาพ</option>
<option value="FemalePhysical">ผู้บุกเบิกหญิง - กายภาพ</option> <option value="FemalePhysical" data-i18n="tbOptions.FemalePhysical">ผู้บุกเบิกหญิง - กายภาพ</option>
<option value="MalePreservation">ผู้บุกเบิกชาย - ไฟ</option> <option value="MalePreservation" data-i18n="tbOptions.MalePreservation">ผู้บุกเบิกชาย - ไฟ</option>
<option value="FemalePreservation">ผู้บุกเบิกหญิง - ไฟ</option> <option value="FemalePreservation" data-i18n="tbOptions.FemalePreservation">ผู้บุกเบิกหญิง - ไฟ</option>
<option value="MaleHarmony">ผู้บุกเบิกชาย - ประสาน</option> <option value="MaleHarmony" data-i18n="tbOptions.MaleHarmony">ผู้บุกเบิกชาย - ประสาน</option>
<option value="FemaleHarmony">ผู้บุกเบิกหญิง - ประสาน</option> <option value="FemaleHarmony" data-i18n="tbOptions.FemaleHarmony">ผู้บุกเบิกหญิง - ประสาน</option>
<option value="MaleRemembrance">ผู้บุกเบิกชาย - ความทรงจำ</option> <option value="MaleRemembrance" data-i18n="tbOptions.MaleRemembrance">ผู้บุกเบิกชาย - ความทรงจำ</option>
<option value="FemaleRemembrance">ผู้บุกเบิกหญิง - ความทรงจำ</option> <option value="FemaleRemembrance" data-i18n="tbOptions.FemaleRemembrance">ผู้บุกเบิกหญิง - ความทรงจำ</option>
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="form-label" data-i18n="lblM7Path">สายของ March 7th</label> <label class="form-label" data-i18n="lblM7Path">สายของ March 7th</label>
<select id="persistent-march-select" class="form-select"> <select id="persistent-march-select" class="form-select">
<option value="MarchHunt">March 7th - ล่าสังหาร</option> <option value="MarchHunt" data-i18n="marchOptions.MarchHunt">March 7th - ล่าสังหาร</option>
<option value="MarchPreservation">March 7th - อนุรักษ์</option> <option value="MarchPreservation" data-i18n="marchOptions.MarchPreservation">March 7th - อนุรักษ์</option>
</select> </select>
</div> </div>
@@ -829,10 +829,10 @@
<div style="background: rgba(15, 23, 42, 0.45); border: 1px solid var(--border-color); border-radius: var(--radius-sm); padding: 0.85rem 1rem;"> <div style="background: rgba(15, 23, 42, 0.45); border: 1px solid var(--border-color); border-radius: var(--radius-sm); padding: 0.85rem 1rem;">
<div style="display: flex; justify-content: space-between; align-items: center;"> <div style="display: flex; justify-content: space-between; align-items: center;">
<span style="font-weight: 700; font-size: 0.875rem;" data-i18n="lblPersistenceInfo">ระบบบันทึกทีมและข้อมูล (Lineup Storage)</span> <span style="font-weight: 700; font-size: 0.875rem;" data-i18n="lblPersistenceInfo">ระบบบันทึกทีมและข้อมูล (Lineup Storage)</span>
<span id="badge-persistence-mode" class="badge-super-tag" style="padding: 0.15rem 0.55rem; font-size: 0.75rem;">Persistent API (GaC)</span> <span id="badge-persistence-mode" class="badge-super-tag" style="padding: 0.15rem 0.55rem; font-size: 0.75rem;" data-i18n="badgePersistenceGaC">GaCy: persistent.json (/api/persistent)</span>
</div> </div>
<div style="font-size: 0.75rem; color: var(--text-muted); margin-top: 0.35rem;" id="desc-persistence-mode" data-i18n="persistentDescription"> <div style="font-size: 0.75rem; color: var(--text-muted); margin-top: 0.35rem;" id="desc-persistence-mode" data-i18n="persistentDescription">
GaC Server เก็บทีมใน persistent.json (รองรับโหมดสร้างสรรค์) • สำหรับ FireflyGo เก็บใน freesr-data.json GaCy Server เก็บทีมใน persistent.json (รองรับโหมดสร้างสรรค์) • สำหรับ FireflyGo เก็บใน freesr-data.json
</div> </div>
</div> </div>
@@ -1506,16 +1506,16 @@
<div style="display: flex; gap: 0.5rem; margin-bottom: 0.6rem; flex-wrap: wrap;"> <div style="display: flex; gap: 0.5rem; margin-bottom: 0.6rem; flex-wrap: wrap;">
<input type="text" id="add-lc-search" class="form-input" data-i18n-placeholder="lightConeSearchPlaceholder" placeholder="🔍 ค้นหากรวยแสง (ชื่อหรือ ID)..." style="flex: 1; min-width: 160px;"> <input type="text" id="add-lc-search" class="form-input" data-i18n-placeholder="lightConeSearchPlaceholder" placeholder="🔍 ค้นหากรวยแสง (ชื่อหรือ ID)..." style="flex: 1; min-width: 160px;">
<select id="add-lc-filter-path" class="form-select" style="max-width: 140px;"> <select id="add-lc-filter-path" class="form-select" style="max-width: 140px;">
<option value="all">ทุกสาย (All)</option> <option value="all" data-i18n="filterAllPaths">ทุกสาย (All)</option>
<option value="Destruction">ทำลายล้าง</option> <option value="Destruction" data-i18n="Destruction">ทำลายล้าง</option>
<option value="Hunt">ล่าสังหาร</option> <option value="Hunt" data-i18n="Hunt">ล่าสังหาร</option>
<option value="Erudition">ปัญญา</option> <option value="Erudition" data-i18n="Erudition">ปัญญา</option>
<option value="Harmony">ประสาน</option> <option value="Harmony" data-i18n="Harmony">ประสาน</option>
<option value="Nihility">ลบล้าง</option> <option value="Nihility" data-i18n="Nihility">ลบล้าง</option>
<option value="Preservation">อนุรักษ์</option> <option value="Preservation" data-i18n="Preservation">อนุรักษ์</option>
<option value="Abundance">เฟื่องฟู</option> <option value="Abundance" data-i18n="Abundance">เฟื่องฟู</option>
<option value="Remembrance">ความทรงจำ</option> <option value="Remembrance" data-i18n="Remembrance">ความทรงจำ</option>
<option value="Elation">ปีติ</option> <option value="Elation" data-i18n="Elation">ปีติ</option>
</select> </select>
<select id="add-lc-filter-rarity" class="form-select" style="max-width: 110px;"> <select id="add-lc-filter-rarity" class="form-select" style="max-width: 110px;">
<option value="all" data-i18n="filterAllRarity">ทุกระดับดาว</option> <option value="all" data-i18n="filterAllRarity">ทุกระดับดาว</option>
@@ -1735,17 +1735,17 @@
<div style="display: flex; gap: 0.5rem; margin-bottom: 0.75rem; flex-wrap: wrap;"> <div style="display: flex; gap: 0.5rem; margin-bottom: 0.75rem; flex-wrap: wrap;">
<input type="text" id="lc-picker-search" class="form-input" data-i18n-placeholder="lightConeSearchPlaceholder" placeholder="🔍 ค้นหาชื่อหรือ ID กรวยแสง..." style="flex: 1; min-width: 160px;"> <input type="text" id="lc-picker-search" class="form-input" data-i18n-placeholder="lightConeSearchPlaceholder" placeholder="🔍 ค้นหาชื่อหรือ ID กรวยแสง..." style="flex: 1; min-width: 160px;">
<select id="lc-picker-filter-path" class="form-select" style="max-width: 140px;"> <select id="lc-picker-filter-path" class="form-select" style="max-width: 140px;">
<option value="all">ทุกสาย</option> <option value="all" data-i18n="filterAllPaths">ทุกสาย</option>
<option value="same" selected>ตรงสายตัวละคร</option> <option value="same" selected data-i18n="filterSamePath">ตรงสายตัวละคร</option>
<option value="Destruction">ทำลายล้าง</option> <option value="Destruction" data-i18n="Destruction">ทำลายล้าง</option>
<option value="Hunt">ล่าสังหาร</option> <option value="Hunt" data-i18n="Hunt">ล่าสังหาร</option>
<option value="Erudition">ปัญญา</option> <option value="Erudition" data-i18n="Erudition">ปัญญา</option>
<option value="Harmony">ประสาน</option> <option value="Harmony" data-i18n="Harmony">ประสาน</option>
<option value="Nihility">ลบล้าง</option> <option value="Nihility" data-i18n="Nihility">ลบล้าง</option>
<option value="Preservation">อนุรักษ์</option> <option value="Preservation" data-i18n="Preservation">อนุรักษ์</option>
<option value="Abundance">เฟื่องฟู</option> <option value="Abundance" data-i18n="Abundance">เฟื่องฟู</option>
<option value="Remembrance">ความทรงจำ</option> <option value="Remembrance" data-i18n="Remembrance">ความทรงจำ</option>
<option value="Elation">ปีติ</option> <option value="Elation" data-i18n="Elation">ปีติ</option>
</select> </select>
<select id="lc-picker-rank" class="form-select" style="max-width: 110px;" data-i18n-title="superimpositionSelectTitle" title="ระดับการขัดเกลาเมื่อสวมใส่"> <select id="lc-picker-rank" class="form-select" style="max-width: 110px;" data-i18n-title="superimpositionSelectTitle" title="ระดับการขัดเกลาเมื่อสวมใส่">
<option value="5" selected data-superimposition-rank>ขัดเกลา S5</option> <option value="5" selected data-superimposition-rank>ขัดเกลา S5</option>
+1 -1
View File
@@ -583,7 +583,7 @@ function updateEquipmentFilterExtraOptions() {
return `<option value="${id}">${id} - ${t(key)}</option>`; return `<option value="${id}">${id} - ${t(key)}</option>`;
}).join('')}`; }).join('')}`;
} else { } else {
const paths = ['Destruction', 'Hunt', 'Erudition', 'Harmony', 'Nihility', 'Preservation', 'Abundance', 'Remembrance']; const paths = ['Destruction', 'Hunt', 'Erudition', 'Harmony', 'Nihility', 'Preservation', 'Abundance', 'Remembrance', 'Elation'];
el.eqFilterExtra.innerHTML = `<option value="all">${t('filterAllTypes')}</option>${paths.map(path => `<option value="${path}">${translatePath(path)}</option>`).join('')}`; el.eqFilterExtra.innerHTML = `<option value="all">${t('filterAllTypes')}</option>${paths.map(path => `<option value="${path}">${translatePath(path)}</option>`).join('')}`;
} }
if (Array.from(el.eqFilterExtra.options).some(option => option.value === selected)) { if (Array.from(el.eqFilterExtra.options).some(option => option.value === selected)) {
+82 -75
View File
@@ -1,4 +1,4 @@
// Multi-language (i18n) definitions for GaC-srtool // Multi-language (i18n) definitions for GaCy-srtool
// Covers all 13 official languages supported by Honkai: Star Rail // Covers all 13 official languages supported by Honkai: Star Rail
export const SUPPORTED_LANGUAGES = [ export const SUPPORTED_LANGUAGES = [
@@ -222,7 +222,7 @@ export const TRANSLATIONS = {
"equippedBy": "สวมใส่โดย", "equippedBy": "สวมใส่โดย",
"noLcData": "ยังไม่มีข้อมูลกรวยแสง", "noLcData": "ยังไม่มีข้อมูลกรวยแสง",
"noRelicData": "ยังไม่มีข้อมูลรีลิกส์", "noRelicData": "ยังไม่มีข้อมูลรีลิกส์",
"persistentTitle": "💾 จัดการไฟล์เซฟ GaC", "persistentTitle": "💾 จัดการไฟล์เซฟ GaCy",
"persistentBadge": "เซิร์ฟเวอร์ของเราเอง", "persistentBadge": "เซิร์ฟเวอร์ของเราเอง",
"persistentSubtitle": "ไฟล์ persistent เก็บการตั้งค่าสถานะผู้เล่นเฉพาะของเซิร์ฟเวอร์ GaCy GO เช่น เพศ/ธาตุตัวเอก, สเตตัส March 7th, สวิตช์ฟังก์ชัน Global ต่างๆ", "persistentSubtitle": "ไฟล์ persistent เก็บการตั้งค่าสถานะผู้เล่นเฉพาะของเซิร์ฟเวอร์ GaCy GO เช่น เพศ/ธาตุตัวเอก, สเตตัส March 7th, สวิตช์ฟังก์ชัน Global ต่างๆ",
"persistentTbM7Title": "👤 ผู้บุกเบิก & March 7th", "persistentTbM7Title": "👤 ผู้บุกเบิก & March 7th",
@@ -2482,7 +2482,7 @@ export const TRANSLATIONS = {
"lblTbGenderElement": "Giới tính & Thuộc tính nhân vật chính", "lblTbGenderElement": "Giới tính & Thuộc tính nhân vật chính",
"lblM7Path": "Dạng Vận Mệnh của March 7th", "lblM7Path": "Dạng Vận Mệnh của March 7th",
"btnSaveCharSettings": "💾 Lưu cài đặt nhân vật", "btnSaveCharSettings": "💾 Lưu cài đặt nhân vật",
"persistentGlobalTitle": "⚙️ Công tắc tính năng đặc biệt GaC", "persistentGlobalTitle": "⚙️ Công tắc tính năng đặc biệt GaCy",
"swGlobalDesc": "Bật cơ chế Silver Wolf toàn máy chủ", "swGlobalDesc": "Bật cơ chế Silver Wolf toàn máy chủ",
"castoriceGlobalDesc": "Bật cơ chế Castorice toàn máy chủ", "castoriceGlobalDesc": "Bật cơ chế Castorice toàn máy chủ",
"btnSaveGlobalSwitch": "💾 Lưu công tắc toàn cục", "btnSaveGlobalSwitch": "💾 Lưu công tắc toàn cục",
@@ -2832,7 +2832,7 @@ export const TRANSLATIONS = {
"lblTbGenderElement": "Gender & Elemen Trailblazer", "lblTbGenderElement": "Gender & Elemen Trailblazer",
"lblM7Path": "Path March 7th", "lblM7Path": "Path March 7th",
"btnSaveCharSettings": "💾 Simpan Pengaturan Karakter", "btnSaveCharSettings": "💾 Simpan Pengaturan Karakter",
"persistentGlobalTitle": "⚙️ Saklar Fitur Khusus GaC", "persistentGlobalTitle": "⚙️ Saklar Fitur Khusus GaCy",
"swGlobalDesc": "Aktifkan fungsi khusus Silver Wolf di seluruh server", "swGlobalDesc": "Aktifkan fungsi khusus Silver Wolf di seluruh server",
"castoriceGlobalDesc": "Aktifkan fungsi khusus Castorice di seluruh server", "castoriceGlobalDesc": "Aktifkan fungsi khusus Castorice di seluruh server",
"btnSaveGlobalSwitch": "💾 Simpan Saklar Global", "btnSaveGlobalSwitch": "💾 Simpan Saklar Global",
@@ -3182,7 +3182,7 @@ export const TRANSLATIONS = {
"lblTbGenderElement": "Género y elemento del Trazacaminos", "lblTbGenderElement": "Género y elemento del Trazacaminos",
"lblM7Path": "Vía de Siete de Marzo", "lblM7Path": "Vía de Siete de Marzo",
"btnSaveCharSettings": "💾 Guardar ajustes de personaje", "btnSaveCharSettings": "💾 Guardar ajustes de personaje",
"persistentGlobalTitle": "⚙️ Funciones especiales de GaC", "persistentGlobalTitle": "⚙️ Funciones especiales de GaCy",
"swGlobalDesc": "Activar función global de Silver Wolf en todo el servidor", "swGlobalDesc": "Activar función global de Silver Wolf en todo el servidor",
"castoriceGlobalDesc": "Activar función global de Castorice en todo el servidor", "castoriceGlobalDesc": "Activar función global de Castorice en todo el servidor",
"btnSaveGlobalSwitch": "💾 Guardar interruptores globales", "btnSaveGlobalSwitch": "💾 Guardar interruptores globales",
@@ -3527,12 +3527,12 @@ export const TRANSLATIONS = {
"noRelicData": "Aucune donnée de relique", "noRelicData": "Aucune donnée de relique",
"persistentTitle": "💾 Gestionnaire de sauvegarde GaCy", "persistentTitle": "💾 Gestionnaire de sauvegarde GaCy",
"persistentBadge": "Serveur personnalisé", "persistentBadge": "Serveur personnalisé",
"persistentSubtitle": "Le fichier persistent stocke les paramètres GaC spécifiques comme le sexe/élément du Pionnier, la voie de March 7th et les options globales", "persistentSubtitle": "Le fichier persistent stocke les paramètres GaCy spécifiques comme le sexe/élément du Pionnier, la voie de March 7th et les options globales",
"persistentTbM7Title": "👤 Pionnier et March 7th", "persistentTbM7Title": "👤 Pionnier et March 7th",
"lblTbGenderElement": "Sexe et élément du Pionnier", "lblTbGenderElement": "Sexe et élément du Pionnier",
"lblM7Path": "Voie de March 7th", "lblM7Path": "Voie de March 7th",
"btnSaveCharSettings": "💾 Enregistrer les réglages du personnage", "btnSaveCharSettings": "💾 Enregistrer les réglages du personnage",
"persistentGlobalTitle": "⚙️ Fonctions spéciales GaC", "persistentGlobalTitle": "⚙️ Fonctions spéciales GaCy",
"swGlobalDesc": "Activer la fonction globale de Silver Wolf sur tout le serveur", "swGlobalDesc": "Activer la fonction globale de Silver Wolf sur tout le serveur",
"castoriceGlobalDesc": "Activer la fonction globale de Castorice sur tout le serveur", "castoriceGlobalDesc": "Activer la fonction globale de Castorice sur tout le serveur",
"btnSaveGlobalSwitch": "💾 Enregistrer les options globales", "btnSaveGlobalSwitch": "💾 Enregistrer les options globales",
@@ -3882,7 +3882,7 @@ export const TRANSLATIONS = {
"lblTbGenderElement": "Geschlecht & Element des Trailblazers", "lblTbGenderElement": "Geschlecht & Element des Trailblazers",
"lblM7Path": "Pfad von 7. März", "lblM7Path": "Pfad von 7. März",
"btnSaveCharSettings": "💾 Charaktereinstellungen speichern", "btnSaveCharSettings": "💾 Charaktereinstellungen speichern",
"persistentGlobalTitle": "⚙️ GaC-Sonderfunktionsschalter", "persistentGlobalTitle": "⚙️ GaCy-Sonderfunktionsschalter",
"swGlobalDesc": "Serverweite Silver Wolf-Spezialmechanik aktivieren", "swGlobalDesc": "Serverweite Silver Wolf-Spezialmechanik aktivieren",
"castoriceGlobalDesc": "Serverweite Castorice-Spezialmechanik aktivieren", "castoriceGlobalDesc": "Serverweite Castorice-Spezialmechanik aktivieren",
"btnSaveGlobalSwitch": "💾 Globale Schalter speichern", "btnSaveGlobalSwitch": "💾 Globale Schalter speichern",
@@ -4117,7 +4117,7 @@ export const TRANSLATIONS = {
"consoleLogCopyFailed": "❌ Fehler beim Kopieren der Protokolle", "consoleLogCopyFailed": "❌ Fehler beim Kopieren der Protokolle",
"consoleLogCleared": "Terminalprotokoll gelöscht", "consoleLogCleared": "Terminalprotokoll gelöscht",
"btnGachabaseSync": "🌐 Gachabase synchronisieren", "btnGachabaseSync": "🌐 Gachabase synchronisieren",
"tabPersistentGaC": "💾 GaC-Speicherverwaltung", "tabPersistentGaC": "💾 GaCy-Speicherverwaltung",
"tabPersistentFirefly": "👤 Trailblazer & March 7th", "tabPersistentFirefly": "👤 Trailblazer & March 7th",
"badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)", "badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)",
"badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json",
@@ -4179,7 +4179,7 @@ export const TRANSLATIONS = {
"tabDashboard": "📊 Панель и отряд", "tabDashboard": "📊 Панель и отряд",
"tabAvatars": "👥 Персонажи", "tabAvatars": "👥 Персонажи",
"tabEquipment": "🗡️ Световые конусы и реликвии", "tabEquipment": "🗡️ Световые конусы и реликвии",
"tabPersistent": "💾 Управление сохранениями GaC", "tabPersistent": "💾 Управление сохранениями GaCy",
"tabExrank": "⚡ Особые навыки Ex-Rank", "tabExrank": "⚡ Особые навыки Ex-Rank",
"tabJson": "📝 Управление JSON", "tabJson": "📝 Управление JSON",
"tabSettings": "⚙️ Настройки", "tabSettings": "⚙️ Настройки",
@@ -4225,14 +4225,14 @@ export const TRANSLATIONS = {
"equippedBy": "Экипировано на", "equippedBy": "Экипировано на",
"noLcData": "Нет данных о конусах", "noLcData": "Нет данных о конусах",
"noRelicData": "Нет данных о реликвиях", "noRelicData": "Нет данных о реликвиях",
"persistentTitle": "💾 Управление сохранениями GaC", "persistentTitle": "💾 Управление сохранениями GaCy",
"persistentBadge": "Наш собственный сервер", "persistentBadge": "Наш собственный сервер",
"persistentSubtitle": "Файл persistent хранит уникальные настройки GaC: пол/путь Первопроходца, путь Март 7 и глобальные переключатели", "persistentSubtitle": "Файл persistent хранит уникальные настройки GaCy: пол/путь Первопроходца, путь Март 7 и глобальные переключатели",
"persistentTbM7Title": "👤 Первопроходец и Март 7", "persistentTbM7Title": "👤 Первопроходец и Март 7",
"lblTbGenderElement": "Пол и путь Первопроходца", "lblTbGenderElement": "Пол и путь Первопроходца",
"lblM7Path": "Путь Март 7", "lblM7Path": "Путь Март 7",
"btnSaveCharSettings": "💾 Сохранить настройки персонажей", "btnSaveCharSettings": "💾 Сохранить настройки персонажей",
"persistentGlobalTitle": "⚙️ Особые функции GaC", "persistentGlobalTitle": "⚙️ Особые функции GaCy",
"swGlobalDesc": "Включить особую механику Серебряного Волка на всем сервере", "swGlobalDesc": "Включить особую механику Серебряного Волка на всем сервере",
"castoriceGlobalDesc": "Включить особую механику Castorice на всем сервере", "castoriceGlobalDesc": "Включить особую механику Castorice на всем сервере",
"btnSaveGlobalSwitch": "💾 Сохранить глобальные переключатели", "btnSaveGlobalSwitch": "💾 Сохранить глобальные переключатели",
@@ -4467,7 +4467,7 @@ export const TRANSLATIONS = {
"consoleLogCopyFailed": "❌ Не удалось скопировать логи", "consoleLogCopyFailed": "❌ Не удалось скопировать логи",
"consoleLogCleared": "Журнал терминала очищен", "consoleLogCleared": "Журнал терминала очищен",
"btnGachabaseSync": "🌐 Синхронизация Gachabase", "btnGachabaseSync": "🌐 Синхронизация Gachabase",
"tabPersistentGaC": "💾 Управление сохранениями GaC", "tabPersistentGaC": "💾 Управление сохранениями GaCy",
"tabPersistentFirefly": "👤 Первопроходец и Март 7", "tabPersistentFirefly": "👤 Первопроходец и Март 7",
"badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)", "badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)",
"badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json",
@@ -4529,7 +4529,7 @@ export const TRANSLATIONS = {
"tabDashboard": "📊 Painel e Equipe", "tabDashboard": "📊 Painel e Equipe",
"tabAvatars": "👥 Personagens", "tabAvatars": "👥 Personagens",
"tabEquipment": "🗡️ Cones de Luz e Relíquias", "tabEquipment": "🗡️ Cones de Luz e Relíquias",
"tabPersistent": "💾 Gerenciador de Salvamento GaC", "tabPersistent": "💾 Gerenciador de Salvamento GaCy",
"tabExrank": "⚡ Habilidades Ex-Rank", "tabExrank": "⚡ Habilidades Ex-Rank",
"tabJson": "📝 Gerenciamento de JSON", "tabJson": "📝 Gerenciamento de JSON",
"tabSettings": "⚙️ Configurações", "tabSettings": "⚙️ Configurações",
@@ -4575,14 +4575,14 @@ export const TRANSLATIONS = {
"equippedBy": "Equipado por", "equippedBy": "Equipado por",
"noLcData": "Nenhum dado de cone de luz disponível", "noLcData": "Nenhum dado de cone de luz disponível",
"noRelicData": "Nenhum dado de relíquia disponível", "noRelicData": "Nenhum dado de relíquia disponível",
"persistentTitle": "💾 Gerenciador de Salvamento GaC", "persistentTitle": "💾 Gerenciador de Salvamento GaCy",
"persistentBadge": "Nosso Servidor Personalizado", "persistentBadge": "Nosso Servidor Personalizado",
"persistentSubtitle": "O arquivo persistent armazena configurações específicas do GaCy, como gênero/elemento do Desbravador, caminho de 7 de Março e opções globais", "persistentSubtitle": "O arquivo persistent armazena configurações específicas do GaCy, como gênero/elemento do Desbravador, caminho de 7 de Março e opções globais",
"persistentTbM7Title": "👤 Desbravador e 7 de Março", "persistentTbM7Title": "👤 Desbravador e 7 de Março",
"lblTbGenderElement": "Gênero e Elemento do Desbravador", "lblTbGenderElement": "Gênero e Elemento do Desbravador",
"lblM7Path": "Caminho de 7 de Março", "lblM7Path": "Caminho de 7 de Março",
"btnSaveCharSettings": "💾 Salvar Configurações de Personagem", "btnSaveCharSettings": "💾 Salvar Configurações de Personagem",
"persistentGlobalTitle": "⚙️ Recursos Especiais do GaC", "persistentGlobalTitle": "⚙️ Recursos Especiais do GaCy",
"swGlobalDesc": "Ativar recurso global da Silver Wolf em todo o servidor", "swGlobalDesc": "Ativar recurso global da Silver Wolf em todo o servidor",
"castoriceGlobalDesc": "Ativar recurso global da Castorice em todo o servidor", "castoriceGlobalDesc": "Ativar recurso global da Castorice em todo o servidor",
"btnSaveGlobalSwitch": "💾 Salvar Interruptores Globais", "btnSaveGlobalSwitch": "💾 Salvar Interruptores Globais",
@@ -4817,7 +4817,7 @@ export const TRANSLATIONS = {
"consoleLogCopyFailed": "❌ Falha ao copiar logs", "consoleLogCopyFailed": "❌ Falha ao copiar logs",
"consoleLogCleared": "Log do terminal limpo", "consoleLogCleared": "Log do terminal limpo",
"btnGachabaseSync": "🌐 Sincronizar Gachabase", "btnGachabaseSync": "🌐 Sincronizar Gachabase",
"tabPersistentGaC": "💾 Gerenciador de Saves GaC", "tabPersistentGaC": "💾 Gerenciador de Saves GaCy",
"tabPersistentFirefly": "👤 Desbravador e March 7th", "tabPersistentFirefly": "👤 Desbravador e March 7th",
"badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)", "badgePersistenceGaC": "GaCy: persistent.json (/api/persistent)",
"badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json", "badgePersistenceFirefly": "FireflyGo: data-in-game.json & freesr-data.json",
@@ -4958,7 +4958,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 星穹列车", "quickCmdExpress": "🚂 星穹列车",
"quickCmdClearLineup": "🧹 清空队伍", "quickCmdClearLineup": "🧹 清空队伍",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "GaC 服务器控制台已就绪(输入 /help 查看命令)", "consoleReady": "GaCy 服务器控制台已就绪(输入 /help 查看命令)",
"filterSamePath": "相同命途" "filterSamePath": "相同命途"
}, },
"zh-TW": { "zh-TW": {
@@ -5070,7 +5070,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 星穹列車", "quickCmdExpress": "🚂 星穹列車",
"quickCmdClearLineup": "🧹 清空隊伍", "quickCmdClearLineup": "🧹 清空隊伍",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "GaC 伺服器主控台已就緒(輸入 /help 查看指令)", "consoleReady": "GaCy 伺服器主控台已就緒(輸入 /help 查看指令)",
"filterSamePath": "相同命途" "filterSamePath": "相同命途"
}, },
"ja": { "ja": {
@@ -5182,7 +5182,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 星穹列車", "quickCmdExpress": "🚂 星穹列車",
"quickCmdClearLineup": "🧹 編成をクリア", "quickCmdClearLineup": "🧹 編成をクリア",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "GaC サーバーコンソールの準備ができました(コマンド一覧は /help)", "consoleReady": "GaCy サーバーコンソールの準備ができました(コマンド一覧は /help)",
"filterSamePath": "同じ運命" "filterSamePath": "同じ運命"
}, },
"ko": { "ko": {
@@ -5294,7 +5294,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 아스트랄 익스프레스", "quickCmdExpress": "🚂 아스트랄 익스프레스",
"quickCmdClearLineup": "🧹 파티 비우기", "quickCmdClearLineup": "🧹 파티 비우기",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "GaC 서버 콘솔을 사용할 수 있습니다 (/help 입력 시 명령어 표시)", "consoleReady": "GaCy 서버 콘솔을 사용할 수 있습니다 (/help 입력 시 명령어 표시)",
"filterSamePath": "같은 운명의 길" "filterSamePath": "같은 운명의 길"
}, },
"vi": { "vi": {
@@ -5406,7 +5406,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Astral Express", "quickCmdExpress": "🚂 Astral Express",
"quickCmdClearLineup": "🧹 Xóa đội hình", "quickCmdClearLineup": "🧹 Xóa đội hình",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "Bảng điều khiển máy chủ GaC đã sẵn sàng (nhập /help để xem lệnh)", "consoleReady": "Bảng điều khiển máy chủ GaCy đã sẵn sàng (nhập /help để xem lệnh)",
"filterSamePath": "Cùng Vận Mệnh" "filterSamePath": "Cùng Vận Mệnh"
}, },
"id": { "id": {
@@ -5518,7 +5518,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Astral Express", "quickCmdExpress": "🚂 Astral Express",
"quickCmdClearLineup": "🧹 Kosongkan Tim", "quickCmdClearLineup": "🧹 Kosongkan Tim",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "Konsol server GaC siap digunakan (ketik /help untuk melihat perintah)", "consoleReady": "Konsol server GaCy siap digunakan (ketik /help untuk melihat perintah)",
"filterSamePath": "Path yang sama" "filterSamePath": "Path yang sama"
}, },
"es": { "es": {
@@ -5630,7 +5630,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Expreso Astral", "quickCmdExpress": "🚂 Expreso Astral",
"quickCmdClearLineup": "🧹 Vaciar equipo", "quickCmdClearLineup": "🧹 Vaciar equipo",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "La consola del servidor GaC está lista (escribe /help para ver los comandos)", "consoleReady": "La consola del servidor GaCy está lista (escribe /help para ver los comandos)",
"filterSamePath": "Vía igual" "filterSamePath": "Vía igual"
}, },
"fr": { "fr": {
@@ -5742,7 +5742,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Express astral", "quickCmdExpress": "🚂 Express astral",
"quickCmdClearLineup": "🧹 Vider l’équipe", "quickCmdClearLineup": "🧹 Vider l’équipe",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "La console du serveur GaC est prête (saisissez /help pour afficher les commandes)", "consoleReady": "La console du serveur GaCy est prête (saisissez /help pour afficher les commandes)",
"filterSamePath": "Même Voie" "filterSamePath": "Même Voie"
}, },
"de": { "de": {
@@ -5854,7 +5854,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Astralexpress", "quickCmdExpress": "🚂 Astralexpress",
"quickCmdClearLineup": "🧹 Team leeren", "quickCmdClearLineup": "🧹 Team leeren",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "Die GaC-Serverkonsole ist bereit (mit /help werden Befehle angezeigt)", "consoleReady": "Die GaCy-Serverkonsole ist bereit (mit /help werden Befehle angezeigt)",
"filterSamePath": "Gleicher Pfad" "filterSamePath": "Gleicher Pfad"
}, },
"ru": { "ru": {
@@ -5966,7 +5966,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Звёздный экспресс", "quickCmdExpress": "🚂 Звёздный экспресс",
"quickCmdClearLineup": "🧹 Очистить отряд", "quickCmdClearLineup": "🧹 Очистить отряд",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "Консоль сервера GaC готова (введите /help, чтобы увидеть команды)", "consoleReady": "Консоль сервера GaCy готова (введите /help, чтобы увидеть команды)",
"filterSamePath": "Тот же Путь" "filterSamePath": "Тот же Путь"
}, },
"pt": { "pt": {
@@ -6078,7 +6078,7 @@ const ADDITIONAL_TRANSLATIONS = {
"quickCmdExpress": "🚂 Expresso Astral", "quickCmdExpress": "🚂 Expresso Astral",
"quickCmdClearLineup": "🧹 Limpar equipe", "quickCmdClearLineup": "🧹 Limpar equipe",
"quickCmdHelp": "❓ /help", "quickCmdHelp": "❓ /help",
"consoleReady": "O console do servidor GaC está pronto (digite /help para ver os comandos)", "consoleReady": "O console do servidor GaCy está pronto (digite /help para ver os comandos)",
"filterSamePath": "Mesmo Caminho" "filterSamePath": "Mesmo Caminho"
} }
}; };
@@ -6096,7 +6096,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "มาตรฐาน MoC / PF / AS", "analystCyclesNote": "มาตรฐาน MoC / PF / AS",
"analystExportEmpty": "ไม่มีรายงานการต่อสู้ให้ส่งออก", "analystExportEmpty": "ไม่มีรายงานการต่อสู้ให้ส่งออก",
"analystExportSuccess": "ส่งออก {file} เรียบร้อยแล้ว", "analystExportSuccess": "ส่งออก {file} เรียบร้อยแล้ว",
"analystImportInvalid": "ไฟล์ JSON ไม่ใช่รายงาน GaC Battle Report หรือ Firefly-Sranalysis", "analystImportInvalid": "ไฟล์ JSON ไม่ใช่รายงาน GaCy Battle Report หรือ Firefly-Sranalysis",
"analystImportFailed": "ไฟล์ JSON ผิดพลาด: {message}", "analystImportFailed": "ไฟล์ JSON ผิดพลาด: {message}",
"analystDpsShareLabel": "สัดส่วนดาเมจ", "analystDpsShareLabel": "สัดส่วนดาเมจ",
"analystMonsterName": "มอนสเตอร์ #{id}", "analystMonsterName": "มอนสเตอร์ #{id}",
@@ -6115,7 +6115,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS standard", "analystCyclesNote": "MoC / PF / AS standard",
"analystExportEmpty": "There is no battle report to export", "analystExportEmpty": "There is no battle report to export",
"analystExportSuccess": "Exported {file} successfully", "analystExportSuccess": "Exported {file} successfully",
"analystImportInvalid": "JSON must be a GaC Battle Report or Firefly-Sranalysis report", "analystImportInvalid": "JSON must be a GaCy Battle Report or Firefly-Sranalysis report",
"analystImportFailed": "Invalid JSON file: {message}", "analystImportFailed": "Invalid JSON file: {message}",
"analystDpsShareLabel": "DAMAGE SHARE", "analystDpsShareLabel": "DAMAGE SHARE",
"analystMonsterName": "Monster #{id}", "analystMonsterName": "Monster #{id}",
@@ -6134,7 +6134,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS 标准", "analystCyclesNote": "MoC / PF / AS 标准",
"analystExportEmpty": "没有可导出的战斗报告", "analystExportEmpty": "没有可导出的战斗报告",
"analystExportSuccess": "已成功导出 {file}", "analystExportSuccess": "已成功导出 {file}",
"analystImportInvalid": "JSON 必须是 GaC Battle Report 或 Firefly-Sranalysis 报告", "analystImportInvalid": "JSON 必须是 GaCy Battle Report 或 Firefly-Sranalysis 报告",
"analystImportFailed": "JSON 文件无效:{message}", "analystImportFailed": "JSON 文件无效:{message}",
"analystDpsShareLabel": "伤害占比", "analystDpsShareLabel": "伤害占比",
"analystMonsterName": "怪物 #{id}", "analystMonsterName": "怪物 #{id}",
@@ -6153,7 +6153,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS 標準", "analystCyclesNote": "MoC / PF / AS 標準",
"analystExportEmpty": "沒有可匯出的戰鬥報告", "analystExportEmpty": "沒有可匯出的戰鬥報告",
"analystExportSuccess": "已成功匯出 {file}", "analystExportSuccess": "已成功匯出 {file}",
"analystImportInvalid": "JSON 必須是 GaC Battle Report 或 Firefly-Sranalysis 報告", "analystImportInvalid": "JSON 必須是 GaCy Battle Report 或 Firefly-Sranalysis 報告",
"analystImportFailed": "JSON 檔案無效:{message}", "analystImportFailed": "JSON 檔案無效:{message}",
"analystDpsShareLabel": "傷害佔比", "analystDpsShareLabel": "傷害佔比",
"analystMonsterName": "怪物 #{id}", "analystMonsterName": "怪物 #{id}",
@@ -6172,7 +6172,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS 標準", "analystCyclesNote": "MoC / PF / AS 標準",
"analystExportEmpty": "エクスポートする戦闘レポートがありません", "analystExportEmpty": "エクスポートする戦闘レポートがありません",
"analystExportSuccess": "{file} をエクスポートしました", "analystExportSuccess": "{file} をエクスポートしました",
"analystImportInvalid": "JSON は GaC Battle Report または Firefly-Sranalysis のレポートである必要があります", "analystImportInvalid": "JSON は GaCy Battle Report または Firefly-Sranalysis のレポートである必要があります",
"analystImportFailed": "JSON ファイルが無効です:{message}", "analystImportFailed": "JSON ファイルが無効です:{message}",
"analystDpsShareLabel": "ダメージ割合", "analystDpsShareLabel": "ダメージ割合",
"analystMonsterName": "モンスター #{id}", "analystMonsterName": "モンスター #{id}",
@@ -6191,7 +6191,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS 표준", "analystCyclesNote": "MoC / PF / AS 표준",
"analystExportEmpty": "내보낼 전투 보고서가 없습니다", "analystExportEmpty": "내보낼 전투 보고서가 없습니다",
"analystExportSuccess": "{file} 내보내기 완료", "analystExportSuccess": "{file} 내보내기 완료",
"analystImportInvalid": "JSON은 GaC Battle Report 또는 Firefly-Sranalysis 보고서여야 합니다", "analystImportInvalid": "JSON은 GaCy Battle Report 또는 Firefly-Sranalysis 보고서여야 합니다",
"analystImportFailed": "JSON 파일이 올바르지 않습니다: {message}", "analystImportFailed": "JSON 파일이 올바르지 않습니다: {message}",
"analystDpsShareLabel": "피해 비중", "analystDpsShareLabel": "피해 비중",
"analystMonsterName": "몬스터 #{id}", "analystMonsterName": "몬스터 #{id}",
@@ -6210,7 +6210,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Tiêu chuẩn MoC / PF / AS", "analystCyclesNote": "Tiêu chuẩn MoC / PF / AS",
"analystExportEmpty": "Không có báo cáo chiến đấu để xuất", "analystExportEmpty": "Không có báo cáo chiến đấu để xuất",
"analystExportSuccess": "Đã xuất {file}", "analystExportSuccess": "Đã xuất {file}",
"analystImportInvalid": "JSON phải là báo cáo GaC Battle Report hoặc Firefly-Sranalysis", "analystImportInvalid": "JSON phải là báo cáo GaCy Battle Report hoặc Firefly-Sranalysis",
"analystImportFailed": "Tệp JSON không hợp lệ: {message}", "analystImportFailed": "Tệp JSON không hợp lệ: {message}",
"analystDpsShareLabel": "Tỷ lệ sát thương", "analystDpsShareLabel": "Tỷ lệ sát thương",
"analystMonsterName": "Quái #{id}", "analystMonsterName": "Quái #{id}",
@@ -6229,7 +6229,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Standar MoC / PF / AS", "analystCyclesNote": "Standar MoC / PF / AS",
"analystExportEmpty": "Tidak ada laporan pertarungan untuk diekspor", "analystExportEmpty": "Tidak ada laporan pertarungan untuk diekspor",
"analystExportSuccess": "Berhasil mengekspor {file}", "analystExportSuccess": "Berhasil mengekspor {file}",
"analystImportInvalid": "JSON harus berupa laporan GaC Battle Report atau Firefly-Sranalysis", "analystImportInvalid": "JSON harus berupa laporan GaCy Battle Report atau Firefly-Sranalysis",
"analystImportFailed": "File JSON tidak valid: {message}", "analystImportFailed": "File JSON tidak valid: {message}",
"analystDpsShareLabel": "Porsi Damage", "analystDpsShareLabel": "Porsi Damage",
"analystMonsterName": "Monster #{id}", "analystMonsterName": "Monster #{id}",
@@ -6248,7 +6248,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Estándar de MoC / PF / AS", "analystCyclesNote": "Estándar de MoC / PF / AS",
"analystExportEmpty": "No hay ningún informe de combate para exportar", "analystExportEmpty": "No hay ningún informe de combate para exportar",
"analystExportSuccess": "Se exportó {file}", "analystExportSuccess": "Se exportó {file}",
"analystImportInvalid": "El JSON debe ser un informe de GaC Battle Report o Firefly-Sranalysis", "analystImportInvalid": "El JSON debe ser un informe de GaCy Battle Report o Firefly-Sranalysis",
"analystImportFailed": "El archivo JSON no es válido: {message}", "analystImportFailed": "El archivo JSON no es válido: {message}",
"analystDpsShareLabel": "Porcentaje de daño", "analystDpsShareLabel": "Porcentaje de daño",
"analystMonsterName": "Monstruo n.º {id}", "analystMonsterName": "Monstruo n.º {id}",
@@ -6267,7 +6267,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Standard MoC / PF / AS", "analystCyclesNote": "Standard MoC / PF / AS",
"analystExportEmpty": "Aucun rapport de combat à exporter", "analystExportEmpty": "Aucun rapport de combat à exporter",
"analystExportSuccess": "{file} exporté", "analystExportSuccess": "{file} exporté",
"analystImportInvalid": "Le JSON doit être un rapport GaC Battle Report ou Firefly-Sranalysis", "analystImportInvalid": "Le JSON doit être un rapport GaCy Battle Report ou Firefly-Sranalysis",
"analystImportFailed": "Fichier JSON invalide : {message}", "analystImportFailed": "Fichier JSON invalide : {message}",
"analystDpsShareLabel": "Part des dégâts", "analystDpsShareLabel": "Part des dégâts",
"analystMonsterName": "Monstre nº {id}", "analystMonsterName": "Monstre nº {id}",
@@ -6286,7 +6286,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "MoC / PF / AS Standard", "analystCyclesNote": "MoC / PF / AS Standard",
"analystExportEmpty": "Kein Kampfbericht zum Exportieren vorhanden", "analystExportEmpty": "Kein Kampfbericht zum Exportieren vorhanden",
"analystExportSuccess": "{file} erfolgreich exportiert", "analystExportSuccess": "{file} erfolgreich exportiert",
"analystImportInvalid": "JSON muss ein GaC Battle Report oder ein Firefly-Sranalysis-Bericht sein", "analystImportInvalid": "JSON muss ein GaCy Battle Report oder ein Firefly-Sranalysis-Bericht sein",
"analystImportFailed": "Ungültige JSON-Datei: {message}", "analystImportFailed": "Ungültige JSON-Datei: {message}",
"analystDpsShareLabel": "Schadensanteil", "analystDpsShareLabel": "Schadensanteil",
"analystMonsterName": "Monster Nr. {id}", "analystMonsterName": "Monster Nr. {id}",
@@ -6305,7 +6305,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Стандарт MoC / PF / AS", "analystCyclesNote": "Стандарт MoC / PF / AS",
"analystExportEmpty": "Нет отчёта о бое для экспорта", "analystExportEmpty": "Нет отчёта о бое для экспорта",
"analystExportSuccess": "Отчёт {file} успешно экспортирован", "analystExportSuccess": "Отчёт {file} успешно экспортирован",
"analystImportInvalid": "JSON должен быть отчётом GaC Battle Report или Firefly-Sranalysis", "analystImportInvalid": "JSON должен быть отчётом GaCy Battle Report или Firefly-Sranalysis",
"analystImportFailed": "Некорректный JSON-файл: {message}", "analystImportFailed": "Некорректный JSON-файл: {message}",
"analystDpsShareLabel": "Доля урона", "analystDpsShareLabel": "Доля урона",
"analystMonsterName": "Монстр №{id}", "analystMonsterName": "Монстр №{id}",
@@ -6324,7 +6324,7 @@ const DAMAGE_ANALYST_TRANSLATIONS = {
"analystCyclesNote": "Padrão MoC / PF / AS", "analystCyclesNote": "Padrão MoC / PF / AS",
"analystExportEmpty": "Não há relatório de combate para exportar", "analystExportEmpty": "Não há relatório de combate para exportar",
"analystExportSuccess": "{file} exportado com sucesso", "analystExportSuccess": "{file} exportado com sucesso",
"analystImportInvalid": "O JSON precisa ser um relatório GaC Battle Report ou Firefly-Sranalysis", "analystImportInvalid": "O JSON precisa ser um relatório GaCy Battle Report ou Firefly-Sranalysis",
"analystImportFailed": "Arquivo JSON inválido: {message}", "analystImportFailed": "Arquivo JSON inválido: {message}",
"analystDpsShareLabel": "Participação no dano", "analystDpsShareLabel": "Participação no dano",
"analystMonsterName": "Monstro nº {id}", "analystMonsterName": "Monstro nº {id}",
@@ -6439,19 +6439,19 @@ const GLOBAL_UI_LABEL_TRANSLATIONS = {
}, },
en: { en: {
apiSettingsTooltip: 'Click to configure the API connection', languageSelectorTitle: 'Choose language', branchTooltip: 'Active Git branch', apiLive: 'API Live', apiSettingsTooltip: 'Click to configure the API connection', languageSelectorTitle: 'Choose language', branchTooltip: 'Active Git branch', apiLive: 'API Live',
persistentDescription: 'GaC stores the lineup in persistent.json (including Creative Mode) • FireflyGo stores it in freesr-data.json', languageChanged: 'Language changed to {language}' persistentDescription: 'GaCy stores the lineup in persistent.json (including Creative Mode) • FireflyGo stores it in freesr-data.json', languageChanged: 'Language changed to {language}'
}, },
'zh-CN': { 'zh-CN': {
apiSettingsTooltip: '点击设置 API 连接', languageSelectorTitle: '选择语言', branchTooltip: '当前 Git 分支', apiLive: 'API 运行中', apiSettingsTooltip: '点击设置 API 连接', languageSelectorTitle: '选择语言', branchTooltip: '当前 Git 分支', apiLive: 'API 运行中',
persistentDescription: 'GaC 将队伍保存在 persistent.json(支持创意模式)• FireflyGo 将数据保存在 freesr-data.json', languageChanged: '语言已切换为{language}' persistentDescription: 'GaCy 将队伍保存在 persistent.json(支持创意模式)• FireflyGo 将数据保存在 freesr-data.json', languageChanged: '语言已切换为{language}'
}, },
'zh-TW': { 'zh-TW': {
apiSettingsTooltip: '點擊設定 API 連線', languageSelectorTitle: '選擇語言', branchTooltip: '目前 Git 分支', apiLive: 'API 運作中', apiSettingsTooltip: '點擊設定 API 連線', languageSelectorTitle: '選擇語言', branchTooltip: '目前 Git 分支', apiLive: 'API 運作中',
persistentDescription: 'GaC 將隊伍儲存在 persistent.json(支援創意模式)• FireflyGo 將資料儲存在 freesr-data.json', languageChanged: '語言已切換為{language}' persistentDescription: 'GaCy 將隊伍儲存在 persistent.json(支援創意模式)• FireflyGo 將資料儲存在 freesr-data.json', languageChanged: '語言已切換為{language}'
}, },
ja: { ja: {
apiSettingsTooltip: 'クリックして API 接続を設定', languageSelectorTitle: '言語を選択', branchTooltip: '現在の Git ブランチ', apiLive: 'API 稼働中', apiSettingsTooltip: 'クリックして API 接続を設定', languageSelectorTitle: '言語を選択', branchTooltip: '現在の Git ブランチ', apiLive: 'API 稼働中',
persistentDescription: 'GaC はチームを persistent.json に保存します(クリエイティブモード対応)• FireflyGo は freesr-data.json に保存します', languageChanged: '言語を{language}に変更しました' persistentDescription: 'GaCy はチームを persistent.json に保存します(クリエイティブモード対応)• FireflyGo は freesr-data.json に保存します', languageChanged: '言語を{language}に変更しました'
}, },
ko: { ko: {
apiSettingsTooltip: '클릭하여 API 연결 설정', languageSelectorTitle: '언어 선택', branchTooltip: '현재 Git 브랜치', apiLive: 'API 실행 중', apiSettingsTooltip: '클릭하여 API 연결 설정', languageSelectorTitle: '언어 선택', branchTooltip: '현재 Git 브랜치', apiLive: 'API 실행 중',
@@ -6459,31 +6459,31 @@ const GLOBAL_UI_LABEL_TRANSLATIONS = {
}, },
vi: { vi: {
apiSettingsTooltip: 'Nhấn để cấu hình kết nối API', languageSelectorTitle: 'Chọn ngôn ngữ', branchTooltip: 'Nhánh Git hiện tại', apiLive: 'API đang hoạt động', apiSettingsTooltip: 'Nhấn để cấu hình kết nối API', languageSelectorTitle: 'Chọn ngôn ngữ', branchTooltip: 'Nhánh Git hiện tại', apiLive: 'API đang hoạt động',
persistentDescription: 'GaC lưu đội hình trong persistent.json (hỗ trợ Chế độ Sáng tạo) • FireflyGo lưu dữ liệu trong freesr-data.json', languageChanged: 'Đã chuyển ngôn ngữ sang {language}' persistentDescription: 'GaCy lưu đội hình trong persistent.json (hỗ trợ Chế độ Sáng tạo) • FireflyGo lưu dữ liệu trong freesr-data.json', languageChanged: 'Đã chuyển ngôn ngữ sang {language}'
}, },
id: { id: {
apiSettingsTooltip: 'Klik untuk mengatur koneksi API', languageSelectorTitle: 'Pilih bahasa', branchTooltip: 'Branch Git aktif', apiLive: 'API aktif', apiSettingsTooltip: 'Klik untuk mengatur koneksi API', languageSelectorTitle: 'Pilih bahasa', branchTooltip: 'Branch Git aktif', apiLive: 'API aktif',
persistentDescription: 'GaC menyimpan susunan tim di persistent.json (mendukung Mode Kreatif) • FireflyGo menyimpan data di freesr-data.json', languageChanged: 'Bahasa diubah ke {language}' persistentDescription: 'GaCy menyimpan susunan tim di persistent.json (mendukung Mode Kreatif) • FireflyGo menyimpan data di freesr-data.json', languageChanged: 'Bahasa diubah ke {language}'
}, },
es: { es: {
apiSettingsTooltip: 'Haz clic para configurar la conexión API', languageSelectorTitle: 'Elegir idioma', branchTooltip: 'Rama Git activa', apiLive: 'API activa', apiSettingsTooltip: 'Haz clic para configurar la conexión API', languageSelectorTitle: 'Elegir idioma', branchTooltip: 'Rama Git activa', apiLive: 'API activa',
persistentDescription: 'GaC guarda el equipo en persistent.json (incluido el modo creativo) • FireflyGo guarda los datos en freesr-data.json', languageChanged: 'Idioma cambiado a {language}' persistentDescription: 'GaCy guarda el equipo en persistent.json (incluido el modo creativo) • FireflyGo guarda los datos en freesr-data.json', languageChanged: 'Idioma cambiado a {language}'
}, },
fr: { fr: {
apiSettingsTooltip: 'Cliquez pour configurer la connexion API', languageSelectorTitle: 'Choisir la langue', branchTooltip: 'Branche Git active', apiLive: 'API active', apiSettingsTooltip: 'Cliquez pour configurer la connexion API', languageSelectorTitle: 'Choisir la langue', branchTooltip: 'Branche Git active', apiLive: 'API active',
persistentDescription: 'GaC enregistre l’équipe dans persistent.json (mode créatif inclus) • FireflyGo enregistre les données dans freesr-data.json', languageChanged: 'Langue changée : {language}' persistentDescription: 'GaCy enregistre l’équipe dans persistent.json (mode créatif inclus) • FireflyGo enregistre les données dans freesr-data.json', languageChanged: 'Langue changée : {language}'
}, },
de: { de: {
apiSettingsTooltip: 'Klicken, um die API-Verbindung einzurichten', languageSelectorTitle: 'Sprache auswählen', branchTooltip: 'Aktiver Git-Branch', apiLive: 'API aktiv', apiSettingsTooltip: 'Klicken, um die API-Verbindung einzurichten', languageSelectorTitle: 'Sprache auswählen', branchTooltip: 'Aktiver Git-Branch', apiLive: 'API aktiv',
persistentDescription: 'GaC speichert das Team in persistent.json (mit Kreativmodus) • FireflyGo speichert die Daten in freesr-data.json', languageChanged: 'Sprache auf {language} umgestellt' persistentDescription: 'GaCy speichert das Team in persistent.json (mit Kreativmodus) • FireflyGo speichert die Daten in freesr-data.json', languageChanged: 'Sprache auf {language} umgestellt'
}, },
ru: { ru: {
apiSettingsTooltip: 'Нажмите, чтобы настроить подключение к API', languageSelectorTitle: 'Выбрать язык', branchTooltip: 'Текущая ветка Git', apiLive: 'API работает', apiSettingsTooltip: 'Нажмите, чтобы настроить подключение к API', languageSelectorTitle: 'Выбрать язык', branchTooltip: 'Текущая ветка Git', apiLive: 'API работает',
persistentDescription: 'GaC сохраняет отряд в persistent.json (включая творческий режим) • FireflyGo сохраняет данные в freesr-data.json', languageChanged: 'Язык изменён: {language}' persistentDescription: 'GaCy сохраняет отряд в persistent.json (включая творческий режим) • FireflyGo сохраняет данные в freesr-data.json', languageChanged: 'Язык изменён: {language}'
}, },
pt: { pt: {
apiSettingsTooltip: 'Clique para configurar a conexão com a API', languageSelectorTitle: 'Escolher idioma', branchTooltip: 'Branch Git ativa', apiLive: 'API ativa', apiSettingsTooltip: 'Clique para configurar a conexão com a API', languageSelectorTitle: 'Escolher idioma', branchTooltip: 'Branch Git ativa', apiLive: 'API ativa',
persistentDescription: 'GaC salva a equipe em persistent.json (incluindo o Modo Criativo) • FireflyGo salva os dados em freesr-data.json', languageChanged: 'Idioma alterado para {language}' persistentDescription: 'GaCy salva a equipe em persistent.json (incluindo o Modo Criativo) • FireflyGo salva os dados em freesr-data.json', languageChanged: 'Idioma alterado para {language}'
} }
}; };
@@ -6828,17 +6828,17 @@ for (const [language, label] of Object.entries(MONSTER_PICKER_TRANSLATIONS)) {
const SERVER_MODE_AVAILABILITY_TRANSLATIONS = { const SERVER_MODE_AVAILABILITY_TRANSLATIONS = {
th: { serverModeFireflyPaused: 'FireflyGo — กำลังพัฒนา', serverModeRobinPaused: 'RobinSR — กำลังพัฒนา', serverModesPausedNotice: 'FireflyGo และ RobinSR ปิดใช้งานชั่วคราวระหว่างพัฒนา จึงกลับไปใช้ GaC' }, th: { serverModeFireflyPaused: 'FireflyGo — กำลังพัฒนา', serverModeRobinPaused: 'RobinSR — กำลังพัฒนา', serverModesPausedNotice: 'FireflyGo และ RobinSR ปิดใช้งานชั่วคราวระหว่างพัฒนา จึงกลับไปใช้ GaC' },
en: { serverModeFireflyPaused: 'FireflyGo — Under development', serverModeRobinPaused: 'RobinSR — Under development', serverModesPausedNotice: 'FireflyGo and RobinSR are temporarily disabled during development. Switched back to GaC.' }, en: { serverModeFireflyPaused: 'FireflyGo — Under development', serverModeRobinPaused: 'RobinSR — Under development', serverModesPausedNotice: 'FireflyGo and RobinSR are temporarily disabled during development. Switched back to GaC.' },
'zh-CN': { serverModeFireflyPaused: 'FireflyGo — 开发中', serverModeRobinPaused: 'RobinSR — 开发中', serverModesPausedNotice: 'FireflyGo 和 RobinSR 正在开发中,暂时停用。已切回 GaC。' }, 'zh-CN': { serverModeFireflyPaused: 'FireflyGo — 开发中', serverModeRobinPaused: 'RobinSR — 开发中', serverModesPausedNotice: 'FireflyGo 和 RobinSR 正在开发中,暂时停用。已切回 GaCy。' },
'zh-TW': { serverModeFireflyPaused: 'FireflyGo — 開發中', serverModeRobinPaused: 'RobinSR — 開發中', serverModesPausedNotice: 'FireflyGo 和 RobinSR 正在開發中,暫時停用。已切回 GaC。' }, 'zh-TW': { serverModeFireflyPaused: 'FireflyGo — 開發中', serverModeRobinPaused: 'RobinSR — 開發中', serverModesPausedNotice: 'FireflyGo 和 RobinSR 正在開發中,暫時停用。已切回 GaCy。' },
ja: { serverModeFireflyPaused: 'FireflyGo — 開発中', serverModeRobinPaused: 'RobinSR — 開発中', serverModesPausedNotice: 'FireflyGo と RobinSR は開発中のため一時停止しています。GaC に切り替えました。' }, ja: { serverModeFireflyPaused: 'FireflyGo — 開発中', serverModeRobinPaused: 'RobinSR — 開発中', serverModesPausedNotice: 'FireflyGo と RobinSR は開発中のため一時停止しています。GaCy に切り替えました。' },
ko: { serverModeFireflyPaused: 'FireflyGo — 개발 중', serverModeRobinPaused: 'RobinSR — 개발 중', serverModesPausedNotice: 'FireflyGo와 RobinSR은 개발 중이라 일시적으로 비활성화되었습니다. GaC로 전환했습니다.' }, ko: { serverModeFireflyPaused: 'FireflyGo — 개발 중', serverModeRobinPaused: 'RobinSR — 개발 중', serverModesPausedNotice: 'FireflyGo와 RobinSR은 개발 중이라 일시적으로 비활성화되었습니다. GaCy로 전환했습니다.' },
vi: { serverModeFireflyPaused: 'FireflyGo — Đang phát triển', serverModeRobinPaused: 'RobinSR — Đang phát triển', serverModesPausedNotice: 'FireflyGo và RobinSR đang được phát triển nên tạm thời bị tắt. Đã chuyển về GaC.' }, vi: { serverModeFireflyPaused: 'FireflyGo — Đang phát triển', serverModeRobinPaused: 'RobinSR — Đang phát triển', serverModesPausedNotice: 'FireflyGo và RobinSR đang được phát triển nên tạm thời bị tắt. Đã chuyển về GaCy.' },
id: { serverModeFireflyPaused: 'FireflyGo — Sedang dikembangkan', serverModeRobinPaused: 'RobinSR — Sedang dikembangkan', serverModesPausedNotice: 'FireflyGo dan RobinSR dinonaktifkan sementara selama pengembangan. Kembali ke GaC.' }, id: { serverModeFireflyPaused: 'FireflyGo — Sedang dikembangkan', serverModeRobinPaused: 'RobinSR — Sedang dikembangkan', serverModesPausedNotice: 'FireflyGo dan RobinSR dinonaktifkan sementara selama pengembangan. Kembali ke GaCy.' },
es: { serverModeFireflyPaused: 'FireflyGo — En desarrollo', serverModeRobinPaused: 'RobinSR — En desarrollo', serverModesPausedNotice: 'FireflyGo y RobinSR están desactivados temporalmente durante su desarrollo. Se cambió a GaC.' }, es: { serverModeFireflyPaused: 'FireflyGo — En desarrollo', serverModeRobinPaused: 'RobinSR — En desarrollo', serverModesPausedNotice: 'FireflyGo y RobinSR están desactivados temporalmente durante su desarrollo. Se cambió a GaCy.' },
fr: { serverModeFireflyPaused: 'FireflyGo — En développement', serverModeRobinPaused: 'RobinSR — En développement', serverModesPausedNotice: 'FireflyGo et RobinSR sont temporairement désactivés pendant leur développement. Retour à GaC.' }, fr: { serverModeFireflyPaused: 'FireflyGo — En développement', serverModeRobinPaused: 'RobinSR — En développement', serverModesPausedNotice: 'FireflyGo et RobinSR sont temporairement désactivés pendant leur développement. Retour à GaCy.' },
de: { serverModeFireflyPaused: 'FireflyGo — In Entwicklung', serverModeRobinPaused: 'RobinSR — In Entwicklung', serverModesPausedNotice: 'FireflyGo und RobinSR sind während der Entwicklung vorübergehend deaktiviert. Zu GaC gewechselt.' }, de: { serverModeFireflyPaused: 'FireflyGo — In Entwicklung', serverModeRobinPaused: 'RobinSR — In Entwicklung', serverModesPausedNotice: 'FireflyGo und RobinSR sind während der Entwicklung vorübergehend deaktiviert. Zu GaCy gewechselt.' },
ru: { serverModeFireflyPaused: 'FireflyGo — В разработке', serverModeRobinPaused: 'RobinSR — В разработке', serverModesPausedNotice: 'FireflyGo и RobinSR временно отключены на время разработки. Выполнен переход на GaC.' }, ru: { serverModeFireflyPaused: 'FireflyGo — В разработке', serverModeRobinPaused: 'RobinSR — В разработке', serverModesPausedNotice: 'FireflyGo и RobinSR временно отключены на время разработки. Выполнен переход на GaCy.' },
pt: { serverModeFireflyPaused: 'FireflyGo — Em desenvolvimento', serverModeRobinPaused: 'RobinSR — Em desenvolvimento', serverModesPausedNotice: 'FireflyGo e RobinSR estão temporariamente desativados durante o desenvolvimento. Voltou para GaC.' } pt: { serverModeFireflyPaused: 'FireflyGo — Em desenvolvimento', serverModeRobinPaused: 'RobinSR — Em desenvolvimento', serverModesPausedNotice: 'FireflyGo e RobinSR estão temporariamente desativados durante o desenvolvimento. Voltou para GaCy.' }
}; };
for (const [language, additions] of Object.entries(ADDITIONAL_TRANSLATIONS)) { for (const [language, additions] of Object.entries(ADDITIONAL_TRANSLATIONS)) {
@@ -6943,7 +6943,7 @@ const ITEM_CATALOG_TRANSLATIONS = {
}, },
id: { id: {
tabItemCatalog: '📚 Buku Item', itemCatalogTitle: '📚 Katalog Item', tabItemCatalog: '📚 Buku Item', itemCatalogTitle: '📚 Katalog Item',
itemCatalogDescription: 'Cari nama atau ID dari tabel game dan lihat ikonnya. Item berlabel didukung GaC dapat dikelola melalui alat inventaris; item lainnya hanya untuk dilihat.', itemCatalogDescription: 'Cari nama atau ID dari tabel game dan lihat ikonnya. Item berlabel didukung GaCy dapat dikelola melalui alat inventaris; item lainnya hanya untuk dilihat.',
itemCatalogSearchPlaceholder: 'Cari nama atau ID item...', itemCatalogFilterLabel: 'Filter katalog item', itemCatalogFilterAll: 'Semua item', itemCatalogSearchPlaceholder: 'Cari nama atau ID item...', itemCatalogFilterLabel: 'Filter katalog item', itemCatalogFilterAll: 'Semua item',
itemCatalogFilterSupported: 'Didukung GaCy', itemCatalogFilterItems: 'Item', itemCatalogFilterSupported: 'Didukung GaCy', itemCatalogFilterItems: 'Item',
itemCatalogFilterLightCones: 'Light Cone', itemCatalogFilterRelics: 'Relik', itemCatalogFilterLightCones: 'Light Cone', itemCatalogFilterRelics: 'Relik',
@@ -6953,7 +6953,7 @@ const ITEM_CATALOG_TRANSLATIONS = {
}, },
es: { es: {
tabItemCatalog: '📚 Catálogo', itemCatalogTitle: '📚 Catálogo de objetos', tabItemCatalog: '📚 Catálogo', itemCatalogTitle: '📚 Catálogo de objetos',
itemCatalogDescription: 'Busca nombres o ID de las tablas del juego y consulta sus iconos. Los elementos compatibles con GaC se pueden gestionar en el inventario; los demás solo se pueden consultar.', itemCatalogDescription: 'Busca nombres o ID de las tablas del juego y consulta sus iconos. Los elementos compatibles con GaCy se pueden gestionar en el inventario; los demás solo se pueden consultar.',
itemCatalogSearchPlaceholder: 'Buscar por nombre o ID...', itemCatalogFilterLabel: 'Filtrar catálogo de objetos', itemCatalogFilterAll: 'Todos', itemCatalogSearchPlaceholder: 'Buscar por nombre o ID...', itemCatalogFilterLabel: 'Filtrar catálogo de objetos', itemCatalogFilterAll: 'Todos',
itemCatalogFilterSupported: 'Compatible con GaCy', itemCatalogFilterItems: 'Objetos', itemCatalogFilterSupported: 'Compatible con GaCy', itemCatalogFilterItems: 'Objetos',
itemCatalogFilterLightCones: 'Conos de luz', itemCatalogFilterRelics: 'Reliquias', itemCatalogFilterLightCones: 'Conos de luz', itemCatalogFilterRelics: 'Reliquias',
@@ -6993,7 +6993,7 @@ const ITEM_CATALOG_TRANSLATIONS = {
}, },
pt: { pt: {
tabItemCatalog: '📚 Catálogo de itens', itemCatalogTitle: '📚 Catálogo de itens', tabItemCatalog: '📚 Catálogo de itens', itemCatalogTitle: '📚 Catálogo de itens',
itemCatalogDescription: 'Pesquise nomes ou IDs das tabelas do jogo e veja os ícones. Itens marcados como compatíveis com GaC podem ser gerenciados no inventário; os demais são apenas para consulta.', itemCatalogDescription: 'Pesquise nomes ou IDs das tabelas do jogo e veja os ícones. Itens marcados como compatíveis com GaCy podem ser gerenciados no inventário; os demais são apenas para consulta.',
itemCatalogSearchPlaceholder: 'Pesquisar por nome ou ID...', itemCatalogFilterLabel: 'Filtrar catálogo de itens', itemCatalogFilterAll: 'Todos os itens', itemCatalogSearchPlaceholder: 'Pesquisar por nome ou ID...', itemCatalogFilterLabel: 'Filtrar catálogo de itens', itemCatalogFilterAll: 'Todos os itens',
itemCatalogFilterSupported: 'Compatível com GaCy', itemCatalogFilterItems: 'Itens', itemCatalogFilterSupported: 'Compatível com GaCy', itemCatalogFilterItems: 'Itens',
itemCatalogFilterLightCones: 'Cones de Luz', itemCatalogFilterRelics: 'Relíquias', itemCatalogFilterLightCones: 'Cones de Luz', itemCatalogFilterRelics: 'Relíquias',
@@ -7033,12 +7033,12 @@ const ITEM_CATALOG_INTERACTION_DESCRIPTIONS = {
ja: '名前または ID で検索し、画像をクリックすると詳細を確認して数量を選べます。この画面で数量を選んでもアイテムは追加されません。GaCy 対応アイテムは所持品タブで管理でき、その他は閲覧のみです。', ja: '名前または ID で検索し、画像をクリックすると詳細を確認して数量を選べます。この画面で数量を選んでもアイテムは追加されません。GaCy 対応アイテムは所持品タブで管理でき、その他は閲覧のみです。',
ko: '이름 또는 ID를 검색한 뒤 이미지를 클릭하면 상세 정보를 확인하고 수량을 선택할 수 있습니다. 여기서 수량을 선택해도 아이템은 추가되지 않습니다. GaCy 지원 항목은 인벤토리 탭에서 관리할 수 있고 나머지는 조회 전용입니다.', ko: '이름 또는 ID를 검색한 뒤 이미지를 클릭하면 상세 정보를 확인하고 수량을 선택할 수 있습니다. 여기서 수량을 선택해도 아이템은 추가되지 않습니다. GaCy 지원 항목은 인벤토리 탭에서 관리할 수 있고 나머지는 조회 전용입니다.',
vi: 'Tìm theo tên hoặc ID rồi nhấn vào hình để xem chi tiết và chọn số lượng. Việc chọn số lượng ở đây không thêm vật phẩm. Vật phẩm được GaCy hỗ trợ có thể quản lý trong tab túi đồ; các mục khác chỉ để tra cứu.', vi: 'Tìm theo tên hoặc ID rồi nhấn vào hình để xem chi tiết và chọn số lượng. Việc chọn số lượng ở đây không thêm vật phẩm. Vật phẩm được GaCy hỗ trợ có thể quản lý trong tab túi đồ; các mục khác chỉ để tra cứu.',
id: 'Cari berdasarkan nama atau ID, lalu klik gambar untuk melihat detail dan memilih jumlah. Memilih jumlah di sini tidak menambahkan item. Item yang didukung GaC dapat dikelola di tab inventaris; item lainnya hanya untuk dilihat.', id: 'Cari berdasarkan nama atau ID, lalu klik gambar untuk melihat detail dan memilih jumlah. Memilih jumlah di sini tidak menambahkan item. Item yang didukung GaCy dapat dikelola di tab inventaris; item lainnya hanya untuk dilihat.',
es: 'Busca por nombre o ID y haz clic en una imagen para consultar los detalles y elegir una cantidad. Elegir una cantidad aquí no añade el objeto. Los elementos compatibles con GaC se gestionan en la pestaña de inventario; los demás son solo de consulta.', es: 'Busca por nombre o ID y haz clic en una imagen para consultar los detalles y elegir una cantidad. Elegir una cantidad aquí no añade el objeto. Los elementos compatibles con GaCy se gestionan en la pestaña de inventario; los demás son solo de consulta.',
fr: 'Recherchez un nom ou un ID, puis cliquez sur une image pour consulter les détails et choisir une quantité. Ce choix n’ajoute pas l’objet. Les éléments compatibles avec GaC se gèrent dans l’inventaire ; les autres sont consultables uniquement.', fr: 'Recherchez un nom ou un ID, puis cliquez sur une image pour consulter les détails et choisir une quantité. Ce choix n’ajoute pas l’objet. Les éléments compatibles avec GaC se gèrent dans l’inventaire ; les autres sont consultables uniquement.',
de: 'Suche nach Name oder ID und klicke auf ein Bild, um Details anzuzeigen und eine Menge auszuwählen. Dadurch wird der Gegenstand nicht hinzugefügt. GaCy-unterstützte Einträge lassen sich im Inventar verwalten; die übrigen dienen nur zum Nachschlagen.', de: 'Suche nach Name oder ID und klicke auf ein Bild, um Details anzuzeigen und eine Menge auszuwählen. Dadurch wird der Gegenstand nicht hinzugefügt. GaCy-unterstützte Einträge lassen sich im Inventar verwalten; die übrigen dienen nur zum Nachschlagen.',
ru: 'Найдите предмет по названию или ID, затем нажмите на изображение, чтобы посмотреть сведения и выбрать количество. Выбор количества здесь не добавляет предмет. Предметы с поддержкой GaC можно менять во вкладке инвентаря; остальные доступны только для просмотра.', ru: 'Найдите предмет по названию или ID, затем нажмите на изображение, чтобы посмотреть сведения и выбрать количество. Выбор количества здесь не добавляет предмет. Предметы с поддержкой GaCy можно менять во вкладке инвентаря; остальные доступны только для просмотра.',
pt: 'Pesquise por nome ou ID e clique na imagem para ver os detalhes e escolher uma quantidade. Escolher a quantidade aqui não adiciona o item. Itens compatíveis com GaC podem ser gerenciados na aba de inventário; os demais servem apenas para consulta.' pt: 'Pesquise por nome ou ID e clique na imagem para ver os detalhes e escolher uma quantidade. Escolher a quantidade aqui não adiciona o item. Itens compatíveis com GaCy podem ser gerenciados na aba de inventário; os demais servem apenas para consulta.'
}; };
for (const [language, description] of Object.entries(ITEM_CATALOG_INTERACTION_DESCRIPTIONS)) { for (const [language, description] of Object.entries(ITEM_CATALOG_INTERACTION_DESCRIPTIONS)) {
TRANSLATIONS[language].itemCatalogDescription = description; TRANSLATIONS[language].itemCatalogDescription = description;
@@ -7145,7 +7145,7 @@ const MODAL_AND_TOOL_TRANSLATIONS = {
copyCardLevel: 'เลเวล', copyCardLevel: 'เลเวล',
copyCardEidolon: 'Eidolon', copyCardEidolon: 'Eidolon',
copyCardLightCone: 'กรวยแสง', copyCardLightCone: 'กรวยแสง',
copyCardGenerated: 'สร้างโดย GaC-Srtool' analystDamageAvPlaceholder: "เฉลี่ยต่อรอบ: -", analystCyclesPlaceholder: "0 รอบ", analystTurnsPlaceholder: "0 เทิร์น", analystAutoTurnsPlaceholder: "เทิร์นอัตโนมัติ: 0", analystDamageAvPlaceholder: "Avg per cycle: -", analystCyclesPlaceholder: "0 Cycles", analystTurnsPlaceholder: "0 Turns", analystAutoTurnsPlaceholder: "Auto Turns: 0", analystDamageAvPlaceholder: "ラウンド平均: -", analystCyclesPlaceholder: "0 ラウンド", analystTurnsPlaceholder: "0 ターン", analystAutoTurnsPlaceholder: "オートターン: 0", analystDamageAvPlaceholder: "라운드당 평균: -", analystCyclesPlaceholder: "0 라운드", analystTurnsPlaceholder: "0 턴", analystAutoTurnsPlaceholder: "자동 턴: 0", analystDamageAvPlaceholder: "Trung bình mỗi vòng: -", analystCyclesPlaceholder: "0 vòng", analystTurnsPlaceholder: "0 lượt", analystAutoTurnsPlaceholder: "Lượt tự động: 0", analystDamageAvPlaceholder: "Rata-rata per siklus: -", analystCyclesPlaceholder: "0 Siklus", analystTurnsPlaceholder: "0 Giliran", analystAutoTurnsPlaceholder: "Giliran otomatis: 0", analystDamageAvPlaceholder: "Promedio por ciclo: -", analystCyclesPlaceholder: "0 ciclos", analystTurnsPlaceholder: "0 turnos", analystAutoTurnsPlaceholder: "Turnos automáticos: 0", analystDamageAvPlaceholder: "Moyenne par cycle : -", analystCyclesPlaceholder: "0 cycle", analystTurnsPlaceholder: "0 tour", analystAutoTurnsPlaceholder: "Tours auto : 0", analystDamageAvPlaceholder: "Durchschnitt pro Zyklus: -", analystCyclesPlaceholder: "0 Zyklen", analystTurnsPlaceholder: "0 Züge", analystAutoTurnsPlaceholder: "Auto-Züge: 0", analystDamageAvPlaceholder: "В среднем за цикл: -", analystCyclesPlaceholder: "0 циклов", analystTurnsPlaceholder: "0 ходов", analystAutoTurnsPlaceholder: "Авто-ходы: 0", analystDamageAvPlaceholder: "Média por ciclo: -", analystCyclesPlaceholder: "0 ciclos", analystTurnsPlaceholder: "0 turnos", analystAutoTurnsPlaceholder: "Turnos automáticos: 0", miniViewFullAnalystTooltip: "เปิดหน้า Damage Analyst ตัวเต็ม", miniViewFullAnalystTooltip: "Open full Damage Analyst", miniViewFullAnalystTooltip: "完全なダメージ分析を開く", miniViewFullAnalystTooltip: "전체 데미지 분석 열기", miniViewFullAnalystTooltip: "Mở Trình phân tích sát thương đầy đủ", miniViewFullAnalystTooltip: "Buka Analis Kerusakan Lengkap", miniViewFullAnalystTooltip: "Abrir analizador de daño completo", miniViewFullAnalystTooltip: "Ouvrir l'analyseur de dégâts complet", miniViewFullAnalystTooltip: "Vollständigen Schadensanalysten öffnen", miniViewFullAnalystTooltip: "Открыть полный анализ урона", miniViewFullAnalystTooltip: "Abrir analisador de dano completo", copyCardGenerated: 'สร้างโดย GaCy-Srtool'
}, },
en: { en: {
relicSlotNotEquipped: 'Not equipped', relicSlotNotEquipped: 'Not equipped',
@@ -7244,7 +7244,7 @@ const MODAL_AND_TOOL_TRANSLATIONS = {
copyCardLevel: 'Level', copyCardLevel: 'Level',
copyCardEidolon: 'Eidolon', copyCardEidolon: 'Eidolon',
copyCardLightCone: 'Light Cone', copyCardLightCone: 'Light Cone',
copyCardGenerated: 'Generated via GaC-Srtool' copyCardGenerated: 'Generated via GaCy-Srtool'
} }
}; };
for (const [language, additions] of Object.entries(MODAL_AND_TOOL_TRANSLATIONS)) { for (const [language, additions] of Object.entries(MODAL_AND_TOOL_TRANSLATIONS)) {
@@ -7277,11 +7277,18 @@ export function setLanguage(langCode) {
export function t(key, vars = {}) { export function t(key, vars = {}) {
const dict = TRANSLATIONS[currentLang] || TRANSLATIONS.en || TRANSLATIONS.th; const dict = TRANSLATIONS[currentLang] || TRANSLATIONS.en || TRANSLATIONS.th;
let text = dict[key] || TRANSLATIONS.en[key] || TRANSLATIONS.th[key] || key; let text = dict[key] || TRANSLATIONS.en[key] || TRANSLATIONS.th[key];
if (!text && key && key.includes(".")) {
const parts = key.split(".");
text = parts.reduce((o, i) => o?.[i], dict) ||
parts.reduce((o, i) => o?.[i], TRANSLATIONS.en) ||
parts.reduce((o, i) => o?.[i], TRANSLATIONS.th);
}
if (!text) text = key;
// Substitute variables e.g. {id}, {rank}, {name}, {slot}, {mode}, {n}, {count}, {ms} // Substitute variables e.g. {id}, {rank}, {name}, {slot}, {mode}, {n}, {count}, {ms}
for (const [vKey, vVal] of Object.entries(vars)) { for (const [vKey, vVal] of Object.entries(vars)) {
text = text.replace(new RegExp(`\\{${vKey}\\}`, 'g'), vVal); text = text.replace(new RegExp(`\\{${vKey}\\}`, "g"), vVal);
} }
return text; return text;
} }
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"branch": "test-gay", "branch": "test-gay",
"version": "1.0.0", "version": "1.0.0",
"updatedAt": "2026-10-31T17:15:16.482Z" "updatedAt": "2026-11-01T12:30:21.299Z"
} }