export const supportedLanguages = ["ko", "en"]; export const translations = { ko: { "brand.kicker": "콘솔 서버", "nav.title": "제어 메뉴", "nav.overview.title": "개요", "nav.overview.desc": "랙 요약 및 상태", "nav.ports.title": "포트", "nav.ports.desc": "48개 시리얼 채널", "nav.terminal.title": "터미널", "nav.terminal.desc": "대화형 셸", "nav.sessions.title": "세션", "nav.sessions.desc": "사용자 및 장비 연결", "nav.system.title": "시스템", "nav.system.desc": "네트워크 및 보안", "flyout.overview.dashboard": "개요 대시보드", "flyout.example": "예시 페이지", "flyout.ports.matrix": "포트 매트릭스", "flyout.ports.cabling": "케이블 맵", "flyout.sessions.active": "활성 세션", "flyout.system.settings": "시스템 설정", "pill.live": "실시간", "pill.safe": "보안", "topbar.eyebrow": "통합 콘솔 서버", "chip.ports": "48 시리얼 포트", "chip.dualLan": "듀얼 LAN", "chip.remoteAccess": "원격 접속", "terminal.title": "브라우저 터미널", "terminal.body1": "진단, 포트 점검, 로컬 관리자 작업을 위해 소켓 세션을 사용합니다. 화면을 초기화하려면", "terminal.body2": "또는", "terminal.body3": "를 입력하세요.", "terminal.consoleTitle": "유지보수 콘솔", "terminal.consoleNote": "Windows PowerShell 세션", "terminal.footer": "로컬 셸 스트림", "cabling.title": "연결 케이블 목록", "cabling.standard": "콘솔 규격", "cabling.types": "케이블 종류", "cabling.typesValue": "스트레이트 / 크로스오버", "cabling.labeling": "라벨링", "cabling.labelingValue": "랙 + 포트 ID", "cabling.patchRule": "패치 규칙", "cabling.patchRuleValue": "그룹별 색상 구분", "cabling.notesTitle": "포트 배선 노트", "cabling.blueTitle": "파란 번들", "cabling.blueBody": "관리자 PC에서 이더넷 스위치 업링크로 연결", "cabling.orangeTitle": "주황 번들", "cabling.orangeBody": "CS-48에서 현장 장비와 랙 자산으로 연결", "cabling.grayTitle": "회색 번들", "cabling.grayBody": "시스로그 및 유지보수 백업 경로", "events.title": "최근 이벤트", "events.time": "시간", "events.source": "소스", "events.event": "이벤트", "events.state": "상태", "events.row1": "운영자에 의해 세션이 열림", "events.row2": "독점 잠금이 활성화됨", "events.row3": "시스로그 전달 정상", "events.row4": "설정 스냅샷 저장 완료", "events.info": "정보", "events.warn": "경고", "events.ok": "정상", "example.title": "예시 페이지", "example.body": "이 서브메뉴는 앞으로 들어올 화면 자리입니다. 실제 기능 흐름이 정해지면 이 예시 페이지를 교체하면 됩니다.", "socket.connecting": "연결 중...", "socket.connected": "소켓 연결됨", "socket.disconnected": "소켓 연결 끊김", "socket.error": "소켓 오류", "socket.waiting": "소켓 대기 중...", "socket.closed": "연결이 종료되었습니다", "socket.errorPrefix": "오류", "page.overview": "개요", "page.ports": "포트", "page.terminal": "터미널", "page.sessions": "세션", "page.cabling": "배선", "page.events": "이벤트", "page.system": "시스템", "page.example": "예시 페이지", }, en: { "brand.kicker": "Console Server", "nav.title": "Control", "nav.overview.title": "Overview", "nav.overview.desc": "Rack summary and health", "nav.ports.title": "Ports", "nav.ports.desc": "48 serial channels", "nav.terminal.title": "Terminal", "nav.terminal.desc": "Interactive shell", "nav.sessions.title": "Sessions", "nav.sessions.desc": "User and device links", "nav.system.title": "System", "nav.system.desc": "Network and security", "flyout.overview.dashboard": "Overview Dashboard", "flyout.example": "Example Page", "flyout.ports.matrix": "Port Matrix", "flyout.ports.cabling": "Cable Map", "flyout.sessions.active": "Active Sessions", "flyout.system.settings": "System Settings", "pill.live": "Live", "pill.safe": "Safe", "topbar.eyebrow": "Integrated Console Server", "chip.ports": "48 Serial Ports", "chip.dualLan": "Dual LAN", "chip.remoteAccess": "Remote Access", "terminal.title": "Browser Terminal", "terminal.body1": "Use the socket session for diagnostics, port inspection, and local admin tasks. Type", "terminal.body2": "or", "terminal.body3": "to reset the view.", "terminal.consoleTitle": "Maintenance Console", "terminal.consoleNote": "Windows PowerShell Session", "terminal.footer": "Local shell stream", "cabling.title": "Connection Cable List", "cabling.standard": "Console standard", "cabling.types": "Cable types", "cabling.typesValue": "Straight / Cross-over", "cabling.labeling": "Labeling", "cabling.labelingValue": "Rack + Port ID", "cabling.patchRule": "Patch rule", "cabling.patchRuleValue": "Color by group", "cabling.notesTitle": "Port Wiring Notes", "cabling.blueTitle": "Blue bundle", "cabling.blueBody": "Manager PC to Ethernet switch uplink", "cabling.orangeTitle": "Orange bundle", "cabling.orangeBody": "CS-48 to field devices and rack assets", "cabling.grayTitle": "Gray bundle", "cabling.grayBody": "Syslog and maintenance backup path", "events.title": "Recent Events", "events.time": "Time", "events.source": "Source", "events.event": "Event", "events.state": "State", "events.row1": "Session opened by operator", "events.row2": "Exclusive lock enabled", "events.row3": "Syslog forwarding healthy", "events.row4": "Config snapshot saved", "events.info": "Info", "events.warn": "Warn", "events.ok": "OK", "example.title": "Example Page", "example.body": "This submenu is reserved for a future screen. Replace this placeholder with the real feature page when the flow is defined.", "socket.connecting": "Connecting...", "socket.connected": "Socket connected", "socket.disconnected": "Socket disconnected", "socket.error": "Socket error", "socket.waiting": "Waiting for socket...", "socket.closed": "connection closed", "socket.errorPrefix": "error", "page.overview": "Overview", "page.ports": "Ports", "page.terminal": "Terminal", "page.sessions": "Sessions", "page.cabling": "Cabling", "page.events": "Events", "page.system": "System", "page.example": "Example Page", }, }; export function detectLanguage() { const stored = localStorage.getItem("teraclone-language"); if (supportedLanguages.includes(stored)) { return stored; } return navigator.language?.toLowerCase().startsWith("ko") ? "ko" : "en"; }