// Multi-language (i18n) definitions for GaC-srtool // Covers all 13 official languages supported by Honkai: Star Rail export const SUPPORTED_LANGUAGES = [ { code: 'th', name: 'ภาษาไทย (Thai)', flag: '🇹🇭' }, { code: 'en', name: 'English', flag: '🇺🇸' }, { code: 'zh-CN', name: '简体中文 (Simplified Chinese)', flag: '🇨🇳' }, { code: 'zh-TW', name: '繁體中文 (Traditional Chinese)', flag: '🇹🇼' }, { code: 'ja', name: '日本語 (Japanese)', flag: '🇯🇵' }, { code: 'ko', name: '한국어 (Korean)', flag: '🇰🇷' }, { code: 'vi', name: 'Tiếng Việt (Vietnamese)', flag: '🇻🇳' }, { code: 'id', name: 'Bahasa Indonesia (Indonesian)', flag: '🇮🇩' }, { code: 'es', name: 'Español (Spanish)', flag: '🇪🇸' }, { code: 'fr', name: 'Français (French)', flag: '🇫🇷' }, { code: 'de', name: 'Deutsch (German)', flag: '🇩🇪' }, { code: 'ru', name: 'Русский (Russian)', flag: '🇷🇺' }, { code: 'pt', name: 'Português (Portuguese)', flag: '🇧🇷' } ]; export const TRANSLATIONS = { th: { // Header appName: "GaC-Srtool", appSubtitle: "Star Rail FreeSR & Server Controller", online: "เชื่อมต่อแล้ว (Online)", offline: "ออฟไลน์ (Offline)", checking: "กำลังตรวจสอบ...", refresh: "🔄 รีเฟรช", connectFailed: "เชื่อมต่อไม่สำเร็จ", // Tabs tabDashboard: "📊 แดชบอร์ด (Overview)", tabAvatars: "👥 ตัวละคร (Avatars)", tabExrank: "⚡ Ex-Rank (สกิลพิเศษ)", tabTeleport: "🚀 วาร์ปฉาก (Teleport)", tabJson: "📝 จัดการไฟล์ JSON", tabSettings: "⚙️ ตั้งค่า & คู่มือ Host", // Dashboard statAvatars: "ตัวละครที่ครอบครอง", statLightcones: "กรวยแสง (Lightcones)", statRelics: "รีลิกส์ (Relics)", serverStatusTitle: "📍 สถานะเซิร์ฟเวอร์ & ตำแหน่งปัจจุบัน", quickActionsTitle: "⚡ ดำเนินการด่วน (Quick Actions)", quickActionsSubtitle: "สั่งการส่งไปยัง REST API Gateway ทันที", btnMaxAll: "⭐ ปรับเลเวล 80 & ปลด E6 ตัวละครทั้งหมด", btnWarpExpress: "🚂 วาร์ปกลับรถไฟ Astral Express ทันที", btnSyncPersistent: "💾 ซิงค์ข้อมูล Persistent ล่าสุด", currentLineupTitle: "🎮 ทีมปัจจุบัน (Current Lineup)", slot: "ตำแหน่งที่", slotEmpty: "(ว่าง)", coords: "พิกัดตัวละคร (X, Y, Z)", // Avatars searchPlaceholder: "🔍 ค้นหาชื่อหรือ ID ตัวละคร...", filterAllRarity: "ทุกระดับดาว", filter5Star: "5 ดาว (SSR)", filter4Star: "4 ดาว (SR)", btnReload: "🔄 รีโหลด", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "ยืนยันปรับตัวละครทั้งหมดให้เป็นเลเวล 80 และปลด E6 หรือไม่?", maxAllSuccess: "ปรับ Max ทุกตัวละครสำเร็จแล้ว!", avatarRankSuccess: "ปรับตัวละคร {id} เป็น E{rank} สำเร็จ", // Ex-Rank exrankTitle: "⚡ ระบบปลดล็อค Ex-Rank Skill", exrankSubtitle: "เปิดใช้งานพรสวรรค์และกลไกพิเศษ Ex-Rank สำหรับตัวละครเฉพาะใน FreeSR (เช่น Jing Yuan โดน CC ไม่หยุดชะงัก, Dan Heng IL, Acheron)", btnEnableAll: "เปิด Ex-Rank ทั้งหมด", btnDisableAll: "ปิด Ex-Rank ทั้งหมด", exrankToggleSuccess: "{name}: {status} Ex-Rank สำเร็จ", exrankAllSuccess: "{status} Ex-Rank ทุกตัวละครสำเร็จ", enabled: "เปิดใช้งาน", disabled: "ปิดใช้งาน", // Teleport presetsTitle: "📍 จุดวาร์ปปลอดภัยยอดนิยม (Safe Presets)", presetsSubtitle: "คลิกจุดวาร์ปเพื่อย้ายฉากของผู้เล่นในไฟล์เซฟได้ทันที", customTeleportTitle: "🎯 กำหนดพิกัดวาร์ปเอง (Custom Teleport)", customTeleportSubtitle: "ใส่ PlaneID, FloorID และ EntryID ตามต้องการ", btnExecuteWarp: "🚀 ยืนยันการวาร์ป (Execute Teleport)", warpBtn: "🚀 วาร์ป", warpSuccess: "วาร์ปไปยัง {label} สำเร็จ (บันทึกลง Persistent)", warpFailed: "วาร์ปไม่สำเร็จ: {err}", // JSON btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (Save)", btnBeautify: "✨ จัดรูปแบบ JSON", btnDownload: "📥 ดาวน์โหลด Backup", btnUpload: "📤 อัปโหลดไฟล์", btnSaveServer: "💾 บันทึกไปยังเซิร์ฟเวอร์", jsonTip: "Tip: สามารถแก้ไขค่าดิบแล้วกด 'บันทึกไปยังเซิร์ฟเวอร์' ได้ทันที", jsonStatusReady: "พร้อมใช้งาน", jsonStatusOpening: "กำลังเปิด: {name}", jsonSaveSuccess: "บันทึกไฟล์ {name} เรียบร้อยแล้ว", jsonInvalid: "JSON ไม่ถูกต้อง", // Settings apiSettingsTitle: "⚙️ ตั้งค่าการเชื่อมต่อ API Gateway", apiSettingsSubtitle: "ปรับเปลี่ยนพอร์ตหรือ IP ได้ตามไฟล์ server.json ของคุณ", lblApiGatewayUrl: "REST API Gateway URL", lblPingInterval: "ความถี่ในการตรวจสอบสถานะ (วินาที)", btnSaveSettings: "💾 บันทึกการตั้งค่า", btnResetDefault: "คืนค่าเริ่มต้น", hostGuideTitle: "🌐 วิธีนำขึ้นโฮสต์ GitHub Pages (ฟรี 100%)", hostGuideSubtitle: "สามารถเปิดใช้งานเว็บนี้บนอินเทอร์เน็ตได้โดยไม่ต้องเสียค่าโฮสต์ใดๆ", settingsSaved: "บันทึกการตั้งค่าสำเร็จ!", settingsReset: "คืนค่าเริ่มต้นเรียบร้อย", // Elements & Paths elements: { Physical: "กายภาพ", Fire: "ไฟ", Ice: "น้ำแข็ง", Lightning: "สายฟ้า", Wind: "ลม", Quantum: "ควอนตัม", Imaginary: "จินตภาพ", Unknown: "ไม่ระบุ" }, paths: { Destruction: "ทำลายล้าง", Hunt: "ล่าสังหาร", Erudition: "ปัญญา", Harmony: "ประสาน", Nihility: "ลบล้าง", Preservation: "อนุรักษ์", Abundance: "เฟื่องฟู", Remembrance: "ความทรงจำ", Unknown: "ไม่ระบุ" } }, en: { appName: "GaC-Srtool", appSubtitle: "Star Rail FreeSR & Server Controller", online: "Online", offline: "Offline", checking: "Checking...", refresh: "🔄 Refresh", connectFailed: "Connection Failed", tabDashboard: "📊 Dashboard", tabAvatars: "👥 Avatars", tabExrank: "⚡ Ex-Rank Skills", tabTeleport: "🚀 Teleport", tabJson: "📝 JSON Management", tabSettings: "⚙️ Settings & Guide", statAvatars: "Owned Avatars", statLightcones: "Lightcones", statRelics: "Relics", serverStatusTitle: "📍 Server Status & Current Position", quickActionsTitle: "⚡ Quick Actions", quickActionsSubtitle: "Send command directly to REST API Gateway", btnMaxAll: "⭐ Max All Avatars (Lv. 80 & E6)", btnWarpExpress: "🚂 Warp to Astral Express Parlor Car", btnSyncPersistent: "💾 Sync Persistent Data", currentLineupTitle: "🎮 Current Lineup", slot: "Slot", slotEmpty: "(Empty)", coords: "Coordinates (X, Y, Z)", searchPlaceholder: "🔍 Search name or ID...", filterAllRarity: "All Rarities", filter5Star: "5-Star (SSR)", filter4Star: "4-Star (SR)", btnReload: "🔄 Reload", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "Upgrade all avatars to Level 80 and unlock E6?", maxAllSuccess: "All avatars maximized successfully!", avatarRankSuccess: "Updated avatar {id} to E{rank}", exrankTitle: "⚡ Ex-Rank Skills System", exrankSubtitle: "Toggle special Ex-Rank talents and perks in FreeSR (e.g. Jing Yuan CC immunity, Dan Heng IL, Acheron)", btnEnableAll: "Enable All Ex-Ranks", btnDisableAll: "Disable All Ex-Ranks", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "All avatars Ex-Rank {status}", enabled: "enabled", disabled: "disabled", presetsTitle: "📍 Safe Presets", presetsSubtitle: "Click to warp player scene and entry point instantly", customTeleportTitle: "🎯 Custom Coordinates", customTeleportSubtitle: "Specify PlaneID, FloorID, EntryID and coordinates", btnExecuteWarp: "🚀 Execute Teleport", warpBtn: "🚀 Warp", warpSuccess: "Warped to {label} successfully (saved to Persistent)", warpFailed: "Teleport failed: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (Save)", btnBeautify: "✨ Beautify JSON", btnDownload: "📥 Download Backup", btnUpload: "📤 Upload File", btnSaveServer: "💾 Save to Server", jsonTip: "Tip: Edit raw JSON and click 'Save to Server' to apply instantly", jsonStatusReady: "Ready", jsonStatusOpening: "Opening: {name}", jsonSaveSuccess: "File {name} saved successfully", jsonInvalid: "Invalid JSON format", apiSettingsTitle: "⚙️ API Gateway Connection Settings", apiSettingsSubtitle: "Adjust port or IP according to your server.json", lblApiGatewayUrl: "REST API Gateway URL", lblPingInterval: "Health Check Interval (seconds)", btnSaveSettings: "💾 Save Settings", btnResetDefault: "Reset Defaults", hostGuideTitle: "🌐 How to Host on GitHub Pages (100% Free)", hostGuideSubtitle: "Host and run this dashboard globally on GitHub with zero hosting cost", settingsSaved: "Settings saved successfully!", settingsReset: "Reset to default settings", elements: { Physical: "Physical", Fire: "Fire", Ice: "Ice", Lightning: "Lightning", Wind: "Wind", Quantum: "Quantum", Imaginary: "Imaginary", Unknown: "Unknown" }, paths: { Destruction: "Destruction", Hunt: "Hunt", Erudition: "Erudition", Harmony: "Harmony", Nihility: "Nihility", Preservation: "Preservation", Abundance: "Abundance", Remembrance: "Remembrance", Unknown: "Unknown" } }, "zh-CN": { appName: "GaC-Srtool", appSubtitle: "星穹铁道 FreeSR 伴侣管理后台", online: "在线 (Online)", offline: "离线 (Offline)", checking: "检查中...", refresh: "🔄 刷新", connectFailed: "连接失败", tabDashboard: "📊 仪表盘", tabAvatars: "👥 角色管理", tabExrank: "⚡ 特殊命途 (Ex-Rank)", tabTeleport: "🚀 场景传送", tabJson: "📝 JSON 数据", tabSettings: "⚙️ 设置与指南", statAvatars: "已拥有角色", statLightcones: "光锥数量", statRelics: "遗器数量", serverStatusTitle: "📍 服务器状态与当前位置", quickActionsTitle: "⚡ 快捷操作", quickActionsSubtitle: "即时下发指令至 REST API 网关", btnMaxAll: "⭐ 全角色满级 (Lv.80) & 满命 (E6)", btnWarpExpress: "🚂 立即传送回星穹列车观景车厢", btnSyncPersistent: "💾 同步最新 Persistent 存档", currentLineupTitle: "🎮 当前编队 (Lineup)", slot: "位置", slotEmpty: "(空位)", coords: "角色坐标 (X, Y, Z)", searchPlaceholder: "🔍 搜索角色名称或 ID...", filterAllRarity: "所有星级", filter5Star: "5星 (SSR)", filter4Star: "4星 (SR)", btnReload: "🔄 重新载入", eidolonLabel: "星魂等级 (E):", confirmMaxAll: "确定要将所有角色设为 80 级并解锁 6 命吗?", maxAllSuccess: "全角色强化完成!", avatarRankSuccess: "角色 {id} 已设置为 E{rank}", exrankTitle: "⚡ Ex-Rank 特殊技能机制", exrankSubtitle: "在 FreeSR 中启用专属 Ex-Rank 特权天赋(如景元免受控制打断、丹恒·饮月、黄泉)", btnEnableAll: "全部启用 Ex-Rank", btnDisableAll: "全部关闭 Ex-Rank", exrankToggleSuccess: "{name}: Ex-Rank 已{status}", exrankAllSuccess: "全角色 Ex-Rank 已{status}", enabled: "启用", disabled: "关闭", presetsTitle: "📍 常用安全传送点", presetsSubtitle: "一键传送玩家角色并写入存档", customTeleportTitle: "🎯 自定义坐标传送", customTeleportSubtitle: "自由输入 PlaneID、FloorID、EntryID 及坐标", btnExecuteWarp: "🚀 执行传送", warpBtn: "🚀 传送", warpSuccess: "成功传送至 {label}(已保存至 Persistent)", warpFailed: "传送失败: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (存档)", btnBeautify: "✨ 格式化 JSON", btnDownload: "📥 下载备份", btnUpload: "📤 上传文件", btnSaveServer: "💾 保存至服务器", jsonTip: "提示: 修改原始 JSON 后点击「保存至服务器」即时生效", jsonStatusReady: "就绪", jsonStatusOpening: "正在打开: {name}", jsonSaveSuccess: "文件 {name} 已成功保存", jsonInvalid: "无效的 JSON 格式", apiSettingsTitle: "⚙️ API 网关连接设置", apiSettingsSubtitle: "可根据你的 server.json 自由修改端口或局域网 IP", lblApiGatewayUrl: "REST API 网关 URL", lblPingInterval: "健康检查间隔 (秒)", btnSaveSettings: "💾 保存设置", btnResetDefault: "恢复默认值", hostGuideTitle: "🌐 如何免费部署至 GitHub Pages (100% 免费)", hostGuideSubtitle: "无服务器成本,一键托管至全球 CDN", settingsSaved: "设置保存成功!", settingsReset: "已恢复默认设置", elements: { Physical: "物理", Fire: "火", Ice: "冰", Lightning: "雷", Wind: "风", Quantum: "量子", Imaginary: "虚数", Unknown: "未知" }, paths: { Destruction: "毁灭", Hunt: "巡猎", Erudition: "智识", Harmony: "同谐", Nihility: "虚无", Preservation: "存护", Abundance: "丰饶", Remembrance: "记忆", Unknown: "未知" } }, "zh-TW": { appName: "GaC-Srtool", appSubtitle: "星穹鐵道 FreeSR 伴侶管理後台", online: "線上 (Online)", offline: "離線 (Offline)", checking: "檢查中...", refresh: "🔄 重新整理", connectFailed: "連線失敗", tabDashboard: "📊 儀表板", tabAvatars: "👥 角色管理", tabExrank: "⚡ 特殊命途 (Ex-Rank)", tabTeleport: "🚀 場景傳送", tabJson: "📝 JSON 數據", tabSettings: "⚙️ 設定與指南", statAvatars: "已擁有角色", statLightcones: "光錐數量", statRelics: "遺物數量", serverStatusTitle: "📍 伺服器狀態與當前位置", quickActionsTitle: "⚡ 快捷操作", quickActionsSubtitle: "即時下發指令至 REST API 網關", btnMaxAll: "⭐ 全角色滿級 (Lv.80) & 滿魂 (E6)", btnWarpExpress: "🚂 立即傳送回星穹列車觀景車廂", btnSyncPersistent: "💾 同步最新 Persistent 存檔", currentLineupTitle: "🎮 當前編隊 (Lineup)", slot: "位置", slotEmpty: "(空位)", coords: "角色座標 (X, Y, Z)", searchPlaceholder: "🔍 搜尋角色名稱或 ID...", filterAllRarity: "所有星級", filter5Star: "5星 (SSR)", filter4Star: "4星 (SR)", btnReload: "🔄 重新載入", eidolonLabel: "星魂等級 (E):", confirmMaxAll: "確定要將所有角色設為 80 級並解鎖 6 魂嗎?", maxAllSuccess: "全角色強化完成!", avatarRankSuccess: "角色 {id} 已設置為 E{rank}", exrankTitle: "⚡ Ex-Rank 特殊技能機制", exrankSubtitle: "在 FreeSR 中啟用專屬 Ex-Rank 特權天賦(如景元免受控制中斷、丹恆·飲月、黃泉)", btnEnableAll: "全部啟用 Ex-Rank", btnDisableAll: "全部關閉 Ex-Rank", exrankToggleSuccess: "{name}: Ex-Rank 已{status}", exrankAllSuccess: "全角色 Ex-Rank 已{status}", enabled: "啟用", disabled: "關閉", presetsTitle: "📍 常用安全傳送點", presetsSubtitle: "一鍵傳送玩家角色並寫入存檔", customTeleportTitle: "🎯 自訂座標傳送", customTeleportSubtitle: "自由輸入 PlaneID、FloorID、EntryID 及座標", btnExecuteWarp: "🚀 執行傳送", warpBtn: "🚀 傳送", warpSuccess: "成功傳送至 {label}(已儲存至 Persistent)", warpFailed: "傳送失敗: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (存檔)", btnBeautify: "✨ 格式化 JSON", btnDownload: "📥 下載備份", btnUpload: "📤 上傳檔案", btnSaveServer: "💾 儲存至伺服器", jsonTip: "提示: 修改原始 JSON 後點擊「儲存至伺服器」即時生效", jsonStatusReady: "就緒", jsonStatusOpening: "正在打開: {name}", jsonSaveSuccess: "檔案 {name} 已成功儲存", jsonInvalid: "無效的 JSON 格式", apiSettingsTitle: "⚙️ API 網關連線設定", apiSettingsSubtitle: "可根據你的 server.json 自由修改通訊埠或區域網路 IP", lblApiGatewayUrl: "REST API 網關 URL", lblPingInterval: "健康檢查間隔 (秒)", btnSaveSettings: "💾 儲存設定", btnResetDefault: "恢復預設值", hostGuideTitle: "🌐 如何免費部署至 GitHub Pages (100% 免費)", hostGuideSubtitle: "無伺服器成本,一鍵託管至全球 CDN", settingsSaved: "設定儲存成功!", settingsReset: "已恢復預設設定", elements: { Physical: "物理", Fire: "火", Ice: "冰", Lightning: "雷", Wind: "風", Quantum: "量子", Imaginary: "虛數", Unknown: "未知" }, paths: { Destruction: "毀滅", Hunt: "巡獵", Erudition: "智識", Harmony: "同諧", Nihility: "虛無", Preservation: "存護", Abundance: "豐饒", Remembrance: "記憶", Unknown: "未知" } }, ja: { appName: "GaC-Srtool", appSubtitle: "スターレイル FreeSR サーバーコントローラー", online: "オンライン (Online)", offline: "オフライン (Offline)", checking: "確認中...", refresh: "🔄 更新", connectFailed: "接続に失敗しました", tabDashboard: "📊 ダッシュボード", tabAvatars: "👥 キャラクター", tabExrank: "⚡ Ex-Rank (特殊能力)", tabTeleport: "🚀 ワープ", tabJson: "📝 JSON 管理", tabSettings: "⚙️ 設定とガイド", statAvatars: "所持キャラクター", statLightcones: "光円錐", statRelics: "遺物", serverStatusTitle: "📍 サーバー状態・現在地", quickActionsTitle: "⚡ クイックアクション", quickActionsSubtitle: "REST APIゲートウェイへ直接コマンド送信", btnMaxAll: "⭐ 全キャラLv.80・完凸 (E6)", btnWarpExpress: "🚂 星穹列車・客室へ即時ワープ", btnSyncPersistent: "💾 Persistent データを同期", currentLineupTitle: "🎮 現在の編成", slot: "枠", slotEmpty: "(空き)", coords: "座標 (X, Y, Z)", searchPlaceholder: "🔍 キャラ名またはIDで検索...", filterAllRarity: "全レアリティ", filter5Star: "★5 (SSR)", filter4Star: "★4 (SR)", btnReload: "🔄 再読込", eidolonLabel: "星魂 (凸数):", confirmMaxAll: "全キャラクターをLv.80・完凸にしますか?", maxAllSuccess: "全キャラクターを最大化しました!", avatarRankSuccess: "キャラ {id} を E{rank} に設定しました", exrankTitle: "⚡ Ex-Rank 特殊スキル設定", exrankSubtitle: "FreeSR独自のEx-Rank効果を有効化(景元の行動制限無効、丹恒・飲月、黄泉など)", btnEnableAll: "全Ex-Rank有効", btnDisableAll: "全Ex-Rank無効", exrankToggleSuccess: "{name}: Ex-Rank を{status}にしました", exrankAllSuccess: "全キャラ Ex-Rank を{status}にしました", enabled: "有効", disabled: "無効", presetsTitle: "📍 安全な定番ワープ地点", presetsSubtitle: "クリックでプレイヤーのシーンを即時移動", customTeleportTitle: "🎯 座標指定ワープ", customTeleportSubtitle: "PlaneID、FloorID、EntryIDおよび座標を指定", btnExecuteWarp: "🚀 ワープ実行", warpBtn: "🚀 移動", warpSuccess: "{label} へワープしました", warpFailed: "ワープ失敗: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (セーブ)", btnBeautify: "✨ JSON 整形", btnDownload: "📥 バックアップ保存", btnUpload: "📤 ファイル読込", btnSaveServer: "💾 サーバーへ保存", jsonTip: "ヒント: JSONを編集して「サーバーへ保存」を押すと即時反映されます", jsonStatusReady: "準備完了", jsonStatusOpening: "展開中: {name}", jsonSaveSuccess: "{name} を正常に保存しました", jsonInvalid: "無効なJSONフォーマットです", apiSettingsTitle: "⚙️ API ゲートウェイ接続設定", apiSettingsSubtitle: "server.jsonのポートまたはIPに合わせて変更可能", lblApiGatewayUrl: "REST API ゲートウェイ URL", lblPingInterval: "更新間隔 (秒)", btnSaveSettings: "💾 設定を保存", btnResetDefault: "初期値に戻す", hostGuideTitle: "🌐 GitHub Pages 無料ホスティング手順", hostGuideSubtitle: "サーバー費用ゼロでWeb上に公開可能", settingsSaved: "設定を保存しました!", settingsReset: "デフォルト設定に戻しました", elements: { Physical: "物理", Fire: "炎", Ice: "氷", Lightning: "雷", Wind: "風", Quantum: "量子", Imaginary: "虚数", Unknown: "不明" }, paths: { Destruction: "壊滅", Hunt: "巡狩", Erudition: "知恵", Harmony: "調和", Nihility: "虚無", Preservation: "存護", Abundance: "豊穣", Remembrance: "記憶", Unknown: "不明" } }, ko: { appName: "GaC-Srtool", appSubtitle: "스타레일 FreeSR 서버 컨트롤러", online: "온라인 (Online)", offline: "오프라인 (Offline)", checking: "확인 중...", refresh: "🔄 새로고침", connectFailed: "연결 실패", tabDashboard: "📊 대시보드", tabAvatars: "👥 캐릭터", tabExrank: "⚡ Ex-Rank (특수 스킬)", tabTeleport: "🚀 워프 (이동)", tabJson: "📝 JSON 관리", tabSettings: "⚙️ 설정 및 안내", statAvatars: "보유 캐릭터", statLightcones: "광추", statRelics: "유물", serverStatusTitle: "📍 서버 상태 및 현재 위치", quickActionsTitle: "⚡ 빠른 작업", quickActionsSubtitle: "REST API 게이트웨이로 즉시 명령 전송", btnMaxAll: "⭐ 전체 캐릭터 80레벨 & 6돌 (풀돌)", btnWarpExpress: "🚂 은하열차 객실로 즉시 워프", btnSyncPersistent: "💾 Persistent 세이브 동기화", currentLineupTitle: "🎮 현재 파티", slot: "슬롯", slotEmpty: "(비어있음)", coords: "좌표 (X, Y, Z)", searchPlaceholder: "🔍 캐릭터 이름 또는 ID 검색...", filterAllRarity: "모든 등급", filter5Star: "5성 (SSR)", filter4Star: "4성 (SR)", btnReload: "🔄 다시 로드", eidolonLabel: "성혼 (돌파):", confirmMaxAll: "모든 캐릭터를 80레벨 및 6돌파로 설정하시겠습니까?", maxAllSuccess: "모든 캐릭터 강화 완료!", avatarRankSuccess: "캐릭터 {id} 성혼을 E{rank}로 설정했습니다", exrankTitle: "⚡ Ex-Rank 특수 스킬 시스템", exrankSubtitle: "FreeSR 전용 Ex-Rank 특권 활성화 (경원 제어 무시, 단항·음월, 아케론 등)", btnEnableAll: "모든 Ex-Rank 활성화", btnDisableAll: "모든 Ex-Rank 비활성화", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "모든 캐릭터 Ex-Rank {status}", enabled: "활성화됨", disabled: "비활성화됨", presetsTitle: "📍 안전한 주요 워프 지점", presetsSubtitle: "클릭 시 즉시 플레이어 위치 이동 및 저장", customTeleportTitle: "🎯 커스텀 좌표 워프", customTeleportSubtitle: "PlaneID, FloorID, EntryID 및 좌표 지정", btnExecuteWarp: "🚀 워프 실행", warpBtn: "🚀 이동", warpSuccess: "{label} (으)로 이동 완료", warpFailed: "워프 실패: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent (세이브)", btnBeautify: "✨ JSON 정리", btnDownload: "📥 백업 다운로드", btnUpload: "📤 파일 불러오기", btnSaveServer: "💾 서버에 저장", jsonTip: "팁: JSON 편집 후 '서버에 저장'을 누르면 즉시 적용됩니다", jsonStatusReady: "준비됨", jsonStatusOpening: "열기: {name}", jsonSaveSuccess: "{name} 저장 완료", jsonInvalid: "올바르지 않은 JSON 형식입니다", apiSettingsTitle: "⚙️ API 게이트웨이 연결 설정", apiSettingsSubtitle: "server.json 설정에 맞추어 포트 및 IP 수정 가능", lblApiGatewayUrl: "REST API 게이트웨이 URL", lblPingInterval: "상태 확인 주기 (초)", btnSaveSettings: "💾 설정 저장", btnResetDefault: "기본값 초기화", hostGuideTitle: "🌐 GitHub Pages 무료 배포 안내 (100% 무료)", hostGuideSubtitle: "서버 비용 없이 GitHub에서 글로벌 호스팅 가능", settingsSaved: "설정이 저장되었습니다!", settingsReset: "기본값으로 복원되었습니다", elements: { Physical: "물리", Fire: "화염", Ice: "얼음", Lightning: "번개", Wind: "바람", Quantum: "양자", Imaginary: "허수", Unknown: "알 수 없음" }, paths: { Destruction: "파멸", Hunt: "수렵", Erudition: "지식", Harmony: "화합", Nihility: "공허", Preservation: "보존", Abundance: "풍요", Remembrance: "기억", Unknown: "알 수 없음" } }, vi: { appName: "GaC-Srtool", appSubtitle: "Bảng điều khiển Star Rail FreeSR", online: "Trực tuyến (Online)", offline: "Ngoại tuyến (Offline)", checking: "Đang kiểm tra...", refresh: "🔄 Làm mới", connectFailed: "Kết nối thất bại", tabDashboard: "📊 Tổng quan", tabAvatars: "👥 Nhân vật", tabExrank: "⚡ Kỹ năng Ex-Rank", tabTeleport: "🚀 Dịch chuyển", tabJson: "📝 Quản lý JSON", tabSettings: "⚙️ Cài đặt & Hướng dẫn", statAvatars: "Nhân vật sở hữu", statLightcones: "Nón Ánh Sáng", statRelics: "Di Vật", serverStatusTitle: "📍 Trạng thái máy chủ & Vị trí", quickActionsTitle: "⚡ Thao tác nhanh", quickActionsSubtitle: "Gửi lệnh trực tiếp đến API Gateway", btnMaxAll: "⭐ Tối đa cấp 80 & Tinh Hồn 6 (E6)", btnWarpExpress: "🚂 Về Đội Tàu Astral", btnSyncPersistent: "💾 Đồng bộ dữ liệu lưu trữ", currentLineupTitle: "🎮 Đội hình hiện tại", slot: "Vị trí", slotEmpty: "(Trống)", coords: "Tọa độ (X, Y, Z)", searchPlaceholder: "🔍 Tìm tên hoặc ID nhân vật...", filterAllRarity: "Tất cả độ hiếm", filter5Star: "5 Sao (SSR)", filter4Star: "4 Sao (SR)", btnReload: "🔄 Tải lại", eidolonLabel: "TINH HỒN (E):", confirmMaxAll: "Nâng cấp tất cả nhân vật lên cấp 80 và E6?", maxAllSuccess: "Tối đa hóa tất cả nhân vật thành công!", avatarRankSuccess: "Đã cập nhật nhân vật {id} thành E{rank}", exrankTitle: "⚡ Hệ thống Ex-Rank", exrankSubtitle: "Bật đặc quyền Ex-Rank trong FreeSR (Cảnh Nguyên kháng khống chế, Đan Hằng Ẩm Nguyệt, Acheron)", btnEnableAll: "Bật tất cả Ex-Rank", btnDisableAll: "Tắt tất cả Ex-Rank", exrankToggleSuccess: "{name}: Đã {status} Ex-Rank", exrankAllSuccess: "Tất cả nhân vật đã {status} Ex-Rank", enabled: "bật", disabled: "tắt", presetsTitle: "📍 Điểm dịch chuyển an toàn", presetsSubtitle: "Nhấp để dịch chuyển vị trí người chơi ngay lập tức", customTeleportTitle: "🎯 Tự nhập tọa độ dịch chuyển", customTeleportSubtitle: "Nhập PlaneID, FloorID, EntryID và tọa độ", btnExecuteWarp: "🚀 Bắt đầu dịch chuyển", warpBtn: "🚀 Đi", warpSuccess: "Dịch chuyển đến {label} thành công", warpFailed: "Dịch chuyển thất bại: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Làm đẹp JSON", btnDownload: "📥 Tải bản sao lưu", btnUpload: "📤 Tải lên tệp", btnSaveServer: "💾 Lưu vào máy chủ", jsonTip: "Mẹo: Chỉnh sửa JSON và nhấn 'Lưu vào máy chủ' để áp dụng ngay", jsonStatusReady: "Sẵn sàng", jsonStatusOpening: "Đang mở: {name}", jsonSaveSuccess: "Lưu tệp {name} thành công", jsonInvalid: "Định dạng JSON không hợp lệ", apiSettingsTitle: "⚙️ Cấu hình kết nối API Gateway", apiSettingsSubtitle: "Điều chỉnh cổng hoặc IP theo tệp server.json", lblApiGatewayUrl: "URL REST API Gateway", lblPingInterval: "Tần suất kiểm tra (giây)", btnSaveSettings: "💾 Lưu cài đặt", btnResetDefault: "Khôi phục mặc định", hostGuideTitle: "🌐 Cách lưu trữ trên GitHub Pages (Miễn phí 100%)", hostGuideSubtitle: "Lưu trữ bảng điều khiển miễn phí trọn đời trên GitHub", settingsSaved: "Đã lưu cài đặt!", settingsReset: "Đã khôi phục cài đặt mặc định", elements: { Physical: "Vật Lý", Fire: "Hỏa", Ice: "Băng", Lightning: "Lôi", Wind: "Phong", Quantum: "Lượng Tử", Imaginary: "Số Ảo", Unknown: "Không xác định" }, paths: { Destruction: "Hủy Diệt", Hunt: "Săn Bắn", Erudition: "Tri Thức", Harmony: "Hòa Hợp", Nihility: "Hư Vô", Preservation: "Bảo Hộ", Abundance: "Trù Phú", Remembrance: "Ký Ức", Unknown: "Không xác định" } }, id: { appName: "GaC-Srtool", appSubtitle: "Pengontrol Server Star Rail FreeSR", online: "Online", offline: "Offline", checking: "Memeriksa...", refresh: "🔄 Segarkan", connectFailed: "Koneksi Gagal", tabDashboard: "📊 Dasbor", tabAvatars: "👥 Karakter", tabExrank: "⚡ Ex-Rank Skill", tabTeleport: "🚀 Teleportasi", tabJson: "📝 Alat JSON", tabSettings: "⚙️ Pengaturan & Panduan", statAvatars: "Karakter Dimiliki", statLightcones: "Lightcone", statRelics: "Relik", serverStatusTitle: "📍 Status Server & Posisi Saat Ini", quickActionsTitle: "⚡ Tindakan Cepat", quickActionsSubtitle: "Kirim perintah langsung ke REST API Gateway", btnMaxAll: "⭐ Maksimalkan Semua (Lv. 80 & E6)", btnWarpExpress: "🚂 Teleport ke Astral Express", btnSyncPersistent: "💾 Sinkronkan Data Persistent", currentLineupTitle: "🎮 Tim Saat Ini", slot: "Slot", slotEmpty: "(Kosong)", coords: "Koordinat (X, Y, Z)", searchPlaceholder: "🔍 Cari nama atau ID...", filterAllRarity: "Semua Kelangkaan", filter5Star: "Bintang 5 (SSR)", filter4Star: "Bintang 4 (SR)", btnReload: "🔄 Muat Ulang", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "Tingkatkan semua karakter ke Lv. 80 dan E6?", maxAllSuccess: "Semua karakter berhasil dimaksimalkan!", avatarRankSuccess: "Karakter {id} diperbarui ke E{rank}", exrankTitle: "⚡ Sistem Ex-Rank", exrankSubtitle: "Aktifkan bakat Ex-Rank di FreeSR (Jing Yuan kebal kontrol, Dan Heng IL, Acheron)", btnEnableAll: "Aktifkan Semua Ex-Rank", btnDisableAll: "Nonaktifkan Semua Ex-Rank", exrankToggleSuccess: "{name}: Ex-Rank berhasil di{status}", exrankAllSuccess: "Ex-Rank semua karakter berhasil di{status}", enabled: "aktifkan", disabled: "nonaktifkan", presetsTitle: "📍 Titik Teleportasi Aman", presetsSubtitle: "Klik untuk berpindah tempat secara instan", customTeleportTitle: "🎯 Teleportasi Koordinat Kustom", customTeleportSubtitle: "Tentukan PlaneID, FloorID, EntryID dan koordinat", btnExecuteWarp: "🚀 Jalankan Teleport", warpBtn: "🚀 Teleport", warpSuccess: "Berhasil teleportasi ke {label}", warpFailed: "Teleportasi gagal: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Rapikan JSON", btnDownload: "📥 Unduh Cadangan", btnUpload: "📤 Unggah File", btnSaveServer: "💾 Simpan ke Server", jsonTip: "Tips: Edit JSON dan klik 'Simpan ke Server' untuk menerapkan", jsonStatusReady: "Siap", jsonStatusOpening: "Membuka: {name}", jsonSaveSuccess: "File {name} berhasil disimpan", jsonInvalid: "Format JSON tidak valid", apiSettingsTitle: "⚙️ Pengaturan Koneksi API Gateway", apiSettingsSubtitle: "Sesuaikan port atau IP dengan server.json Anda", lblApiGatewayUrl: "URL REST API Gateway", lblPingInterval: "Interval Ping (detik)", btnSaveSettings: "💾 Simpan Pengaturan", btnResetDefault: "Kembalikan Default", hostGuideTitle: "🌐 Cara Host di GitHub Pages (100% Gratis)", hostGuideSubtitle: "Host web ini secara gratis di GitHub", settingsSaved: "Pengaturan berhasil disimpan!", settingsReset: "Pengaturan telah direset", elements: { Physical: "Fisik", Fire: "Api", Ice: "Es", Lightning: "Petir", Wind: "Angin", Quantum: "Kuantum", Imaginary: "Imajinasi", Unknown: "Tidak Diketahui" }, paths: { Destruction: "Kehancuran", Hunt: "Perburuan", Erudition: "Kebijaksanaan", Harmony: "Harmoni", Nihility: "Ketiadaan", Preservation: "Pelestarian", Abundance: "Kelimpahan", Remembrance: "Ingatan", Unknown: "Tidak Diketahui" } }, es: { appName: "GaC-Srtool", appSubtitle: "Panel de control Star Rail FreeSR", online: "En línea (Online)", offline: "Desconectado (Offline)", checking: "Comprobando...", refresh: "🔄 Actualizar", connectFailed: "Error de conexión", tabDashboard: "📊 Panel", tabAvatars: "👥 Personajes", tabExrank: "⚡ Ex-Rank", tabTeleport: "🚀 Teletransporte", tabJson: "📝 Herramientas JSON", tabSettings: "⚙️ Ajustes y guía", statAvatars: "Personajes obtenidos", statLightcones: "Conos de luz", statRelics: "Reliquias", serverStatusTitle: "📍 Estado del servidor y posición", quickActionsTitle: "⚡ Acciones rápidas", quickActionsSubtitle: "Enviar comandos a la API Gateway", btnMaxAll: "⭐ Maximizar todos (Niv. 80 y E6)", btnWarpExpress: "🚂 Teletransportar al Expreso Astral", btnSyncPersistent: "💾 Sincronizar datos persistentes", currentLineupTitle: "🎮 Equipo actual", slot: "Puesto", slotEmpty: "(Vacío)", coords: "Coordenadas (X, Y, Z)", searchPlaceholder: "🔍 Buscar nombre o ID...", filterAllRarity: "Todas las rarezas", filter5Star: "5 Estrellas (SSR)", filter4Star: "4 Estrellas (SR)", btnReload: "🔄 Recargar", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "¿Subir todos los personajes a nivel 80 y E6?", maxAllSuccess: "¡Todos los personajes maximizados con éxito!", avatarRankSuccess: "Personaje {id} actualizado a E{rank}", exrankTitle: "⚡ Sistema Ex-Rank", exrankSubtitle: "Activar talentos especiales Ex-Rank en FreeSR (inmunidad CC de Jing Yuan, Dan Heng IL, Acheron)", btnEnableAll: "Activar todos los Ex-Rank", btnDisableAll: "Desactivar todos los Ex-Rank", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "Todos los Ex-Rank {status}", enabled: "activado", disabled: "desactivado", presetsTitle: "📍 Puntos seguros predefinidos", presetsSubtitle: "Haga clic para teletransportar al jugador al instante", customTeleportTitle: "🎯 Coordenadas personalizadas", customTeleportSubtitle: "Especifique PlaneID, FloorID, EntryID y coordenadas", btnExecuteWarp: "🚀 Ejecutar teletransporte", warpBtn: "🚀 Ir", warpSuccess: "Teletransportado a {label} con éxito", warpFailed: "Fallo al teletransportar: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Dar formato a JSON", btnDownload: "📥 Descargar copia", btnUpload: "📤 Cargar archivo", btnSaveServer: "💾 Guardar en el servidor", jsonTip: "Consejo: Edite el JSON y haga clic en 'Guardar en el servidor'", jsonStatusReady: "Listo", jsonStatusOpening: "Abriendo: {name}", jsonSaveSuccess: "Archivo {name} guardado con éxito", jsonInvalid: "Formato JSON no válido", apiSettingsTitle: "⚙️ Conexión con la API Gateway", apiSettingsSubtitle: "Ajuste el puerto o la IP según su server.json", lblApiGatewayUrl: "URL de la API Gateway", lblPingInterval: "Intervalo de comprobación (segundos)", btnSaveSettings: "💾 Guardar ajustes", btnResetDefault: "Restaurar por defecto", hostGuideTitle: "🌐 Cómo hospedar en GitHub Pages (100% Gratis)", hostGuideSubtitle: "Hospede este panel de control gratis en GitHub", settingsSaved: "¡Ajustes guardados!", settingsReset: "Ajustes restaurados", elements: { Physical: "Físico", Fire: "Fuego", Ice: "Hielo", Lightning: "Rayo", Wind: "Viento", Quantum: "Cuántico", Imaginary: "Imaginario", Unknown: "Desconocido" }, paths: { Destruction: "Destrucción", Hunt: "Cacería", Erudition: "Erudición", Harmony: "Armonía", Nihility: "Nihilidad", Preservation: "Conservación", Abundance: "Abundancia", Remembrance: "Reminiscencia", Unknown: "Desconocido" } }, fr: { appName: "GaC-Srtool", appSubtitle: "Contrôleur de serveur Star Rail FreeSR", online: "En ligne (Online)", offline: "Hors ligne (Offline)", checking: "Vérification...", refresh: "🔄 Actualiser", connectFailed: "Échec de connexion", tabDashboard: "📊 Tableau de bord", tabAvatars: "👥 Personnages", tabExrank: "⚡ Compétences Ex-Rank", tabTeleport: "🚀 Téléportation", tabJson: "📝 Outils JSON", tabSettings: "⚙️ Paramètres & Guide", statAvatars: "Personnages possédés", statLightcones: "Cônes de lumière", statReliques: "Reliques", serverStatusTitle: "📍 Statut du serveur & Position", quickActionsTitle: "⚡ Actions rapides", quickActionsSubtitle: "Envoyer directement à l'API Gateway", btnMaxAll: "⭐ Maximiser tous (Niv. 80 & E6)", btnWarpExpress: "🚂 Téléporter vers l'Astral Express", btnSyncPersistent: "💾 Synchroniser les données", currentLineupTitle: "🎮 Équipe actuelle", slot: "Emplacement", slotEmpty: "(Vide)", coords: "Coordonnées (X, Y, Z)", searchPlaceholder: "🔍 Rechercher par nom ou ID...", filterAllRarity: "Toutes les raretés", filter5Star: "5 Étoiles (SSR)", filter4Star: "4 Étoiles (SR)", btnReload: "🔄 Recharger", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "Passer tous les personnages au niveau 80 et E6 ?", maxAllSuccess: "Tous les personnages sont maximisés !", avatarRankSuccess: "Personnage {id} mis à jour en E{rank}", exrankTitle: "⚡ Système Ex-Rank", exrankSubtitle: "Activer les atouts Ex-Rank dans FreeSR (immunité CC Jing Yuan, Dan Heng IL, Acheron)", btnEnableAll: "Activer tous les Ex-Ranks", btnDisableAll: "Désactiver tous les Ex-Ranks", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "Tous les Ex-Ranks {status}", enabled: "activé", disabled: "désactivé", presetsTitle: "📍 Points de téléportation sûrs", presetsSubtitle: "Cliquez pour déplacer le joueur instantanément", customTeleportTitle: "🎯 Coordonnées personnalisées", customTeleportSubtitle: "Définissez PlaneID, FloorID, EntryID et coordonnées", btnExecuteWarp: "🚀 Lancer la téléportation", warpBtn: "🚀 Téléporter", warpSuccess: "Téléporté vers {label} avec succès", warpFailed: "Échec de téléportation: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Mettre en forme JSON", btnDownload: "📥 Télécharger sauvegarde", btnUpload: "📤 Charger un fichier", btnSaveServer: "💾 Enregistrer sur le serveur", jsonTip: "Astuce : Modifiez le JSON et cliquez sur 'Enregistrer sur le serveur'", jsonStatusReady: "Prêt", jsonStatusOpening: "Ouverture : {name}", jsonSaveSuccess: "Fichier {name} enregistré", jsonInvalid: "Format JSON non valide", apiSettingsTitle: "⚙️ Paramètres de connexion API Gateway", apiSettingsSubtitle: "Ajustez le port ou l'IP selon votre server.json", lblApiGatewayUrl: "URL de l'API Gateway", lblPingInterval: "Intervalle de test (secondes)", btnSaveSettings: "💾 Enregistrer les paramètres", btnResetDefault: "Réinitialiser", hostGuideTitle: "🌐 Héberger sur GitHub Pages (100% Gratuit)", hostGuideSubtitle: "Hébergez ce panneau gratuitement sur GitHub", settingsSaved: "Paramètres enregistrés !", settingsReset: "Paramètres réinitialisés", elements: { Physical: "Physique", Fire: "Feu", Ice: "Glace", Lightning: "Foudre", Wind: "Vent", Quantum: "Quantique", Imaginary: "Imaginaire", Unknown: "Inconnu" }, paths: { Destruction: "Destruction", Hunt: "Chasse", Erudition: "Érudition", Harmony: "Harmonie", Nihility: "Nihilité", Preservation: "Préservation", Abundance: "Abondance", Remembrance: "Souvenir", Unknown: "Inconnu" } }, de: { appName: "GaC-Srtool", appSubtitle: "Star Rail FreeSR Server Controller", online: "Online", offline: "Offline", checking: "Prüfe...", refresh: "🔄 Aktualisieren", connectFailed: "Verbindung fehlgeschlagen", tabDashboard: "📊 Übersicht", tabAvatars: "👥 Figuren", tabExrank: "⚡ Ex-Rang Talente", tabTeleport: "🚀 Teleportation", tabJson: "📝 JSON-Tools", tabSettings: "⚙️ Einstellungen", statAvatars: "Figuren im Besitz", statLightcones: "Lichtkegel", statRelics: "Relikte", serverStatusTitle: "📍 Serverstatus & Position", quickActionsTitle: "⚡ Schnellaktionen", quickActionsSubtitle: "Befehle direkt an das API-Gateway senden", btnMaxAll: "⭐ Alle Figuren maximieren (Stufe 80 & E6)", btnWarpExpress: "🚂 Zum Astralexpress teleportieren", btnSyncPersistent: "💾 Speicherdaten synchronisieren", currentLineupTitle: "🎮 Aktuelle Aufstellung", slot: "Platz", slotEmpty: "(Leer)", coords: "Koordinaten (X, Y, Z)", searchPlaceholder: "🔍 Nach Name oder ID suchen...", filterAllRarity: "Alle Seltenheiten", filter5Star: "5 Sterne (SSR)", filter4Star: "4 Sterne (SR)", btnReload: "🔄 Neu laden", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "Alle Figuren auf Stufe 80 und E6 aufwerten?", maxAllSuccess: "Alle Figuren wurden maximiert!", avatarRankSuccess: "Figur {id} auf E{rank} gesetzt", exrankTitle: "⚡ Ex-Rang Talentsystem", exrankSubtitle: "Aktivieren Sie Ex-Rang Talente in FreeSR (Jing Yuan CC-Immunität, Dan Heng IL, Acheron)", btnEnableAll: "Alle Ex-Ränge aktivieren", btnDisableAll: "Alle Ex-Ränge deaktivieren", exrankToggleSuccess: "{name}: Ex-Rang {status}", exrankAllSuccess: "Alle Ex-Ränge {status}", enabled: "aktiviert", disabled: "deaktiviert", presetsTitle: "📍 Sichere Teleport-Ziele", presetsSubtitle: "Klicken, um den Spieler sofort zu teleportieren", customTeleportTitle: "🎯 Benutzerdefinierte Koordinaten", customTeleportSubtitle: "Geben Sie PlaneID, FloorID, EntryID und Koordinaten ein", btnExecuteWarp: "🚀 Teleport ausführen", warpBtn: "🚀 Teleport", warpSuccess: "Erfolgreich zu {label} teleportiert", warpFailed: "Teleport fehlgeschlagen: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ JSON formatieren", btnDownload: "📥 Backup herunterladen", btnUpload: "📤 Datei hochladen", btnSaveServer: "💾 Auf Server speichern", jsonTip: "Tipp: JSON bearbeiten und 'Auf Server speichern' klicken", jsonStatusReady: "Bereit", jsonStatusOpening: "Öffne: {name}", jsonSaveSuccess: "Datei {name} erfolgreich gespeichert", jsonInvalid: "Ungültiges JSON-Format", apiSettingsTitle: "⚙️ API-Gateway Verbindungseinstellungen", apiSettingsSubtitle: "Passen Sie Port oder IP gemäß Ihrer server.json an", lblApiGatewayUrl: "REST API Gateway URL", lblPingInterval: "Prüfintervall (Sekunden)", btnSaveSettings: "💾 Einstellungen speichern", btnResetDefault: "Auf Standard zurücksetzen", hostGuideTitle: "🌐 Auf GitHub Pages kostenlos hosten (100% Kostenlos)", hostGuideSubtitle: "Hosten Sie dieses Tool ohne Kosten direkt auf GitHub", settingsSaved: "Einstellungen gespeichert!", settingsReset: "Auf Standardeinstellungen zurückgesetzt", elements: { Physical: "Physisch", Fire: "Feuer", Ice: "Eis", Lightning: "Blitz", Wind: "Wind", Quantum: "Quanten", Imaginary: "Imaginär", Unknown: "Unbekannt" }, paths: { Destruction: "Zerstörung", Hunt: "Jagd", Erudition: "Gelehrsamkeit", Harmony: "Harmonie", Nihility: "Nichtigkeit", Preservation: "Bewahrung", Abundance: "Überfluss", Remembrance: "Erinnerung", Unknown: "Unbekannt" } }, ru: { appName: "GaC-Srtool", appSubtitle: "Панель управления Star Rail FreeSR", online: "В сети (Online)", offline: "Не в сети (Offline)", checking: "Проверка...", refresh: "🔄 Обновить", connectFailed: "Ошибка подключения", tabDashboard: "📊 Панель управления", tabAvatars: "👥 Персонажи", tabExrank: "⚡ Навыки Ex-Rank", tabTeleport: "🚀 Телепортация", tabJson: "📝 Управление JSON", tabSettings: "⚙️ Настройки и гайд", statAvatars: "Персонажи во владении", statLightcones: "Световые конусы", statRelics: "Реликвии", serverStatusTitle: "📍 Статус сервера и координаты", quickActionsTitle: "⚡ Быстрые действия", quickActionsSubtitle: "Отправка команд напрямую в REST API Gateway", btnMaxAll: "⭐ Максимизировать всех (Ур. 80 и E6)", btnWarpExpress: "🚂 Телепорт в Звёздный экспресс", btnSyncPersistent: "💾 Синхронизировать сохранение", currentLineupTitle: "🎮 Текущий отряд", slot: "Слот", slotEmpty: "(Пусто)", coords: "Координаты (X, Y, Z)", searchPlaceholder: "🔍 Поиск по имени или ID...", filterAllRarity: "Все редкости", filter5Star: "5 Звёзд (SSR)", filter4Star: "4 Звезды (SR)", btnReload: "🔄 Перезагрузить", eidolonLabel: "ЭЙДОЛОН (E):", confirmMaxAll: "Повысить всех персонажей до 80 ур. и E6?", maxAllSuccess: "Все персонажи успешно улучшены!", avatarRankSuccess: "Персонаж {id} обновлен до E{rank}", exrankTitle: "⚡ Система навыков Ex-Rank", exrankSubtitle: "Включение уникальных механик Ex-Rank в FreeSR (Цзин Юань без прерывания контроля, Дань Хэн Пожиратель Луны, Ахерон)", btnEnableAll: "Включить все Ex-Rank", btnDisableAll: "Отключить все Ex-Rank", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "Ex-Rank всех персонажей {status}", enabled: "включен", disabled: "отключен", presetsTitle: "📍 Безопасные точки телепортации", presetsSubtitle: "Нажмите для мгновенного перемещения персонажа", customTeleportTitle: "🎯 Пользовательские координаты", customTeleportSubtitle: "Укажите PlaneID, FloorID, EntryID и координаты", btnExecuteWarp: "🚀 Выполнить телепортацию", warpBtn: "🚀 Телепорт", warpSuccess: "Телепортация в {label} успешна", warpFailed: "Ошибка телепортации: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Форматировать JSON", btnDownload: "📥 Скачать бэкап", btnUpload: "📤 Загрузить файл", btnSaveServer: "💾 Сохранить на сервер", jsonTip: "Совет: Отредактируйте JSON и нажмите 'Сохранить на сервер'", jsonStatusReady: "Готово", jsonStatusOpening: "Открытие: {name}", jsonSaveSuccess: "Файл {name} сохранен", jsonInvalid: "Неверный формат JSON", apiSettingsTitle: "⚙️ Настройка подключения API Gateway", apiSettingsSubtitle: "Настройте порт или IP согласно вашему server.json", lblApiGatewayUrl: "URL REST API Gateway", lblPingInterval: "Интервал проверки (сек)", btnSaveSettings: "💾 Сохранить настройки", btnResetDefault: "Сбросить по умолчанию", hostGuideTitle: "🌐 Бесплатный хостинг на GitHub Pages (100% Бесплатно)", hostGuideSubtitle: "Разместите панель бесплатно на GitHub без затрат", settingsSaved: "Настройки сохранены!", settingsReset: "Настройки сброшены", elements: { Physical: "Физический", Fire: "Огненный", Ice: "Ледяной", Lightning: "Электрический", Wind: "Ветряной", Quantum: "Квантовый", Imaginary: "Мнимый", Unknown: "Неизвестно" }, paths: { Destruction: "Разрушение", Hunt: "Охота", Erudition: "Эрудиция", Harmony: "Гармония", Nihility: "Небытие", Preservation: "Сохранение", Abundance: "Изобилие", Remembrance: "Память", Unknown: "Неизвестно" } }, pt: { appName: "GaC-Srtool", appSubtitle: "Controlador de Servidor Star Rail FreeSR", online: "Online", offline: "Offline", checking: "Verificando...", refresh: "🔄 Atualizar", connectFailed: "Falha na conexão", tabDashboard: "📊 Painel", tabAvatars: "👥 Personagens", tabExrank: "⚡ Habilidades Ex-Rank", tabTeleport: "🚀 Teleporte", tabJson: "📝 Ferramentas JSON", tabSettings: "⚙️ Configurações & Guia", statAvatars: "Personagens obtidos", statLightcones: "Cones de Luz", statRelics: "Relíquias", serverStatusTitle: "📍 Status do servidor e posição atual", quickActionsTitle: "⚡ Ações rápidas", quickActionsSubtitle: "Enviar comandos diretamente ao API Gateway", btnMaxAll: "⭐ Maximizar todos (Nív. 80 e E6)", btnWarpExpress: "🚂 Teleportar para o Expresso Astral", btnSyncPersistent: "💾 Sincronizar dados salvos", currentLineupTitle: "🎮 Equipe atual", slot: "Posição", slotEmpty: "(Vazio)", coords: "Coordenadas (X, Y, Z)", searchPlaceholder: "🔍 Buscar nome ou ID...", filterAllRarity: "Todas as raridades", filter5Star: "5 Estrelas (SSR)", filter4Star: "4 Estrelas (SR)", btnReload: "🔄 Recarregar", eidolonLabel: "EIDOLON (E):", confirmMaxAll: "Evoluir todos os personagens para nível 80 e E6?", maxAllSuccess: "Todos os personagens maximizados com sucesso!", avatarRankSuccess: "Personagem {id} atualizado para E{rank}", exrankTitle: "⚡ Sistema de Ex-Rank", exrankSubtitle: "Ativar vantagens exclusivas Ex-Rank no FreeSR (imunidade a CC para Jing Yuan, Dan Heng IL, Acheron)", btnEnableAll: "Ativar todos os Ex-Ranks", btnDisableAll: "Desativar todos os Ex-Ranks", exrankToggleSuccess: "{name}: Ex-Rank {status}", exrankAllSuccess: "Todos os Ex-Ranks {status}", enabled: "ativado", disabled: "desativado", presetsTitle: "📍 Pontos seguros pré-definidos", presetsSubtitle: "Clique para teleportar o personagem instantaneamente", customTeleportTitle: "🎯 Coordenadas personalizadas", customTeleportSubtitle: "Especifique PlaneID, FloorID, EntryID e coordenadas", btnExecuteWarp: "🚀 Executar teleporte", warpBtn: "🚀 Teleportar", warpSuccess: "Teleportado para {label} com sucesso", warpFailed: "Falha no teleporte: {err}", btnFreesr: "📄 freesr-data.json", btnPersistent: "💾 persistent", btnBeautify: "✨ Formatar JSON", btnDownload: "📥 Baixar backup", btnUpload: "📤 Carregar arquivo", btnSaveServer: "💾 Salvar no servidor", jsonTip: "Dica: Edite o JSON e clique em 'Salvar no servidor'", jsonStatusReady: "Pronto", jsonStatusOpening: "Abrindo: {name}", jsonSaveSuccess: "Arquivo {name} salvo com sucesso", jsonInvalid: "Formato JSON inválido", apiSettingsTitle: "⚙️ Configurações de Conexão com API Gateway", apiSettingsSubtitle: "Ajuste a porta ou o IP de acordo com seu server.json", lblApiGatewayUrl: "URL do REST API Gateway", lblPingInterval: "Intervalo de verificação (segundos)", btnSaveSettings: "💾 Salvar configurações", btnResetDefault: "Restaurar padrão", hostGuideTitle: "🌐 Como hospedar no GitHub Pages (100% Grátis)", hostGuideSubtitle: "Hospede esta ferramenta gratuitamente no GitHub", settingsSaved: "Configurações salvas!", settingsReset: "Configurações restauradas", elements: { Physical: "Físico", Fire: "Fogo", Ice: "Gelo", Lightning: "Raio", Wind: "Vento", Quantum: "Quântico", Imaginary: "Imaginário", Unknown: "Desconhecido" }, paths: { Destruction: "Destruição", Hunt: "Caça", Erudition: "Erudição", Harmony: "Harmonia", Nihility: "Inexistência", Preservation: "Preservação", Abundance: "Abundância", Remembrance: "Recordação", Unknown: "Desconhecido" } } }; let currentLang = localStorage.getItem('gac_srtool_lang') || 'th'; export function getCurrentLanguage() { return currentLang; } export function setLanguage(langCode) { if (TRANSLATIONS[langCode]) { currentLang = langCode; localStorage.setItem('gac_srtool_lang', langCode); } } 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} for (const [vKey, vVal] of Object.entries(vars)) { text = text.replace(new RegExp(`\\{${vKey}\\}`, 'g'), vVal); } return text; } export function translateElement(elem) { const dict = TRANSLATIONS[currentLang] || TRANSLATIONS.en; return dict.elements?.[elem] || TRANSLATIONS.en.elements?.[elem] || elem; } export function translatePath(path) { const dict = TRANSLATIONS[currentLang] || TRANSLATIONS.en; return dict.paths?.[path] || TRANSLATIONS.en.paths?.[path] || path; }