type Lang = 'ko' | 'en'

const translations: Record<string, Record<Lang, string>> = {
  'nav.dashboard': { ko: '대시보드', en: 'Dashboard' },
  'nav.skills': { ko: '스킬', en: 'Skills' },
  'nav.plugins': { ko: '플러그인', en: 'Plugins' },
  'nav.agents': { ko: '에이전트', en: 'Agents' },
  'nav.commands': { ko: '커맨드', en: 'Commands' },
  'nav.settings': { ko: '설정', en: 'Settings' },
  'nav.hooks': { ko: '훅', en: 'Hooks' },
  'nav.mcp': { ko: 'MCP 서버', en: 'MCP Servers' },
  'nav.keybindings': { ko: '키바인딩', en: 'Keybindings' },
  'nav.claudemd': { ko: 'CLAUDE.md', en: 'CLAUDE.md' },
  'nav.memory': { ko: '메모리', en: 'Memory' },
  'nav.teams': { ko: '팀', en: 'Teams' },
  'nav.marketplace': { ko: '마켓플레이스', en: 'Marketplace' },
  'nav.overview': { ko: '개요', en: 'Overview' },
  'nav.extensions': { ko: '확장', en: 'Extensions' },
  'nav.extensionsPage': { ko: '확장 기능', en: 'Extensions' },
  'nav.configuration': { ko: '구성', en: 'Configuration' },
  'nav.content': { ko: '콘텐츠', en: 'Content' },
  'nav.contextManagement': { ko: 'Context', en: 'Context' },
  'nav.contextMgmt': { ko: 'Context Management', en: 'Context Management' },
  'nav.contextCompare': { ko: 'Context Compare', en: 'Context Compare' },
  'nav.store': { ko: '스토어', en: 'Store' },
  'dashboard.title': { ko: '대시보드', en: 'Dashboard' },
  'dashboard.subtitle': { ko: 'Claude Code 환경 전체 현황', en: 'Overview of your Claude Code configuration' },
  'dashboard.skills': { ko: '스킬', en: 'Skills' },
  'dashboard.plugins': { ko: '플러그인', en: 'Plugins' },
  'dashboard.agents': { ko: '에이전트', en: 'Agents' },
  'dashboard.hooks': { ko: '훅', en: 'Hooks' },
  'dashboard.mcp': { ko: 'MCP 서버', en: 'MCP Servers' },
  'dashboard.projects': { ko: '프로젝트', en: 'Projects' },
  'dashboard.validation': { ko: '유효성 검증', en: 'Validation Status' },
  'dashboard.backupHistory': { ko: '백업 이력', en: 'Backup History' },
  'dashboard.harnessStatus': { ko: '프로젝트별 하네스 구성 현황', en: 'Project Harness Configuration Status' },
  'dashboard.allValid': { ko: '모두 정상', en: 'all valid' },
  'dashboard.loading': { ko: '로딩 중...', en: 'loading...' },
  'skills.title': { ko: '스킬 관리', en: 'Skills' },
  'skills.subtitle': { ko: '커스텀 및 설치된 스킬 관리', en: 'Manage custom and installed skills' },
  'skills.all': { ko: '전체', en: 'All' },
  'skills.custom': { ko: '커스텀', en: 'Custom' },
  'skills.installed': { ko: '설치됨', en: 'Installed' },
  'skills.search': { ko: '스킬 검색...', en: 'Search skills...' },
  'skills.newSkill': { ko: '새 스킬', en: 'New Skill' },
  'common.save': { ko: '저장', en: 'Save' },
  'common.cancel': { ko: '취소', en: 'Cancel' },
  'common.delete': { ko: '삭제', en: 'Delete' },
  'common.edit': { ko: '편집', en: 'Edit' },
  'common.create': { ko: '생성', en: 'Create' },
  'common.name': { ko: '이름', en: 'Name' },
  'common.description': { ko: '설명', en: 'Description' },
  'common.actions': { ko: '작업', en: 'Actions' },
  'common.source': { ko: '출처', en: 'Source' },
  'common.command': { ko: '명령', en: 'Command' },
  'common.enabled': { ko: '활성', en: 'Enabled' },
  'common.connected': { ko: '연결됨', en: 'Connected' },
  'marketplace.title': { ko: '마켓플레이스', en: 'Marketplace' },
  'marketplace.subtitle': { ko: '플러그인 및 스킬 탐색', en: 'Browse plugins and skills' },
  'marketplace.all': { ko: '전체', en: 'All' },
  'marketplace.search': { ko: '플러그인 검색...', en: 'Search plugins...' },
  'marketplace.install': { ko: '설치', en: 'Install' },
  'marketplace.installed': { ko: '설치됨', en: 'Installed' },
  'marketplace.noResults': { ko: '검색 결과가 없습니다', en: 'No results found' },
  'stats.topSkills': { ko: '많이 쓴 스킬', en: 'Top Used Skills' },
  'stats.topPlugins': { ko: '많이 쓴 플러그인', en: 'Top Used Plugins' },
  'stats.timeline': { ko: '사용 타임라인', en: 'Usage Timeline' },
  'stats.unused': { ko: '미사용 항목 경고', en: 'Unused Items' },
  'stats.noData': { ko: '사용 데이터 없음. Sync를 실행하세요.', en: 'No usage data yet. Run sync to import history.' },
  'stats.syncHistory': { ko: 'Sync 이력', en: 'Sync History' },
  'stats.syncResult': { ko: '파일 파싱 완료', en: 'files parsed' },
  'stats.unusedDays': { ko: '일간 미사용', en: 'days unused' },
  'stats.remove': { ko: '제거', en: 'Remove' },
  'stats.sync': { ko: 'Sync', en: 'Sync' },
  'analysis.title': { ko: '사용패턴 분석', en: 'Usage Analysis' },
  'analysis.start': { ko: '분석 시작', en: 'Start Analysis' },
  'analysis.tokenWarning': { ko: '현재 사용 중인 Claude 플랜 범위 내에서 토큰이 소비됩니다.', en: 'Tokens will be consumed within your current Claude plan.' },
  'analysis.ranking': { ko: '유용성 랭킹', en: 'Usefulness Ranking' },
  'analysis.reference': { ko: '평가 기준', en: 'Evaluation Criteria' },
  'analysis.disconnected': { ko: 'Claude 미연결 — AI 분석 불가', en: 'Claude disconnected — AI analysis unavailable' },
  'nav.tools': { ko: '도구', en: 'Tools' },
  'nav.labs': { ko: 'Labs', en: 'Labs' },
  'nav.wizard': { ko: 'Wizard', en: 'Wizard' },
  'nav.harnessWizard': { ko: 'Harness Wizard', en: 'Harness Wizard' },
  'nav.monitor': { ko: '모니터', en: 'Monitor' },
  'nav.liveMonitor': { ko: '세션 모니터', en: 'Session Monitor' },
  'nav.cost': { ko: '비용', en: 'Cost' },
  'monitor.title': { ko: '세션 모니터', en: 'Session Monitor' },
  'monitor.subtitle': { ko: '최근 도구 호출 이벤트', en: 'Recent tool call events' },
  'monitor.noEvents': { ko: '이벤트 없음', en: 'No events' },
  'cost.title': { ko: '비용 추적', en: 'Cost Tracking' },
  'cost.subtitle': { ko: '토큰 사용량 및 예상 비용', en: 'Token usage and estimated cost' },
  'cost.disclaimer': { ko: '비용은 세션 로그 기반 추정치이며, 실제 청구 금액과 다를 수 있습니다.', en: 'Costs are estimates based on session logs and may differ from actual billing.' },
  'cost.totalTokens': { ko: '총 토큰', en: 'Total Tokens' },
  'cost.estCost': { ko: '예상 비용', en: 'Est. Cost' },
  'cost.sessions': { ko: '세션', en: 'Sessions' },
  'cost.toolCalls': { ko: '도구 호출', en: 'Tool Calls' },
  'cost.byProject': { ko: '프로젝트별 비용', en: 'Cost by Project' },
  'nav.sync': { ko: '동기화', en: 'Sync' },
  'nav.templates': { ko: '템플릿', en: 'Templates' },
  'nav.configDiff': { ko: '설정 비교', en: 'Config Diff' },
  'templates.title': { ko: '환경 템플릿', en: 'Environment Templates' },
  'templates.subtitle': { ko: '원클릭 harness 세팅', en: 'One-click harness setup' },
  'templates.community': { ko: '커뮤니티 템플릿', en: 'Community' },
  'templates.my': { ko: '내 템플릿', en: 'My Templates' },
  'templates.export': { ko: '내보내기', en: 'Export' },
  'templates.apply': { ko: '적용', en: 'Apply' },
  'templates.save': { ko: '템플릿 저장', en: 'Save Template' },
  'templates.noCustom': { ko: '저장된 템플릿이 없습니다', en: 'No saved templates' },
  'templates.exportPreview': { ko: '내보내기 미리보기', en: 'Export Preview' },
  'templates.selectProject': { ko: '프로젝트 선택', en: 'Select Project' },
  'configDiff.title': { ko: '설정 비교', en: 'Config Diff' },
  'configDiff.subtitle': { ko: '프로젝트 간 설정 비교 및 동기화', en: 'Compare and sync project configs' },
  'configDiff.compare': { ko: '비교', en: 'Compare' },
  'configDiff.identical': { ko: '동일', en: 'Identical' },
  'configDiff.different': { ko: '다름', en: 'Different' },
  'configDiff.missing': { ko: '누락', en: 'Missing' },
  'configDiff.bothMissing': { ko: '양쪽 없음', en: 'Both Missing' },
  'configDiff.viewDiff': { ko: 'diff 보기', en: 'View Diff' },
  'configDiff.copyAtoB': { ko: 'A→B 복사', en: 'Copy A→B' },
  'configDiff.projectA': { ko: '프로젝트 A', en: 'Project A' },
  'configDiff.projectB': { ko: '프로젝트 B', en: 'Project B' },
  'nav.projects': { ko: '프로젝트 현황', en: 'Project Status' },
  'projects.title': { ko: '프로젝트 현황', en: 'Project Status' },
  'projects.subtitle': { ko: '프로젝트별 harness 셋팅 현황', en: 'Per-project harness configuration status' },
  'projects.compact': { ko: 'Compact', en: 'Compact' },
  'projects.compactWarning': { ko: '이 파일이 너무 깁니다. Compact하여 요약할 수 있습니다.', en: 'This file is too long. You can compact it.' },
  'projects.compacting': { ko: '요약 중...', en: 'Compacting...' },
  'projects.files': { ko: '파일', en: 'files' },
  'projects.needCompact': { ko: 'compact 필요', en: 'need compact' },
  'wizard.title': { ko: 'Harness Wizard', en: 'Harness Wizard' },
  'wizard.subtitle': { ko: '프로젝트 맞춤 환경 자동 구성', en: 'Auto-configure project environment' },
  'wizard.quickDesc': { ko: '선택한 프로젝트에 AI를 활용하여 최적의 Claude 설정을 구성합니다.', en: 'Uses AI to configure optimal Claude settings for the selected project.' },
  'wizard.refFiles': { ko: '참고할 파일 및 설정', en: 'Reference Files & Settings' },
  'wizard.refFilesDesc': { ko: 'AI가 아래 파일과 설정을 분석하여 최적의 Claude 하네스를 생성합니다.', en: 'AI will analyze the following files and settings to generate optimal Claude harness.' },
  'wizard.refProjects': { ko: '참조 프로젝트 추가', en: 'Add Reference Projects' },
  'wizard.refProjectsDesc': { ko: '참고할만한 다른 프로젝트를 선택하세요.', en: 'Select other projects you\'d like to reference.' },
  'wizard.refProjectsDetail': { ko: '참고 프로젝트의 Claude 설정(CLAUDE.md, Memory, Hooks 설정 등)을 활용하여 사용자에 적합한 설정을 생성합니다.', en: 'Uses the reference project\'s Claude settings (CLAUDE.md, Memory, Hooks, etc.) to generate a configuration tailored to your needs.' },
  'wizard.refCount': { ko: '개 프로젝트의 Claude 설정을 참고합니다', en: 'project(s) Claude settings will be referenced' },
  'wizard.confirmMsg': { ko: '위 데이터를 기반으로 프로젝트에 최적화된 Claude 설정 파일을 AI가 생성합니다. 진행하시겠습니까?', en: 'AI will generate Claude configuration files optimized for your project based on the data above. Proceed?' },
  'wizard.confirmProceed': { ko: '진행하기', en: 'Proceed' },
  'wizard.refFilesCount': { ko: '개', en: '' },
  'wizard.genSubMsg': { ko: 'AI가 프로젝트에 최적화된 설정을 생성하고 있습니다', en: 'AI is generating optimized settings for your project' },
  'wizard.cancel': { ko: '취소', en: 'Cancel' },
  'wizard.proceed': { ko: '진행', en: 'Proceed' },
  'wizard.generating': { ko: 'AI가 프로젝트에 최적화된 설정을 생성하고 있습니다', en: 'AI is generating optimized settings for your project' },
  'wizard.genDone': { ko: '생성 완료', en: 'Generation Complete' },
  'wizard.filesToCreate': { ko: '생성될 파일', en: 'Files to Create' },
  'wizard.confirmApply': { ko: '위 파일을 프로젝트에 반영하시겠습니까?', en: 'Apply these files to the project?' },
  'wizard.reanalyze': { ko: '다시 분석', en: 'Re-analyze' },
  'wizard.applyNow': { ko: '반영하기', en: 'Apply' },
  'wizard.done': { ko: '반영 완료', en: 'Applied Successfully' },
  'wizard.doneMsg': { ko: '프로젝트에 harness 설정이 적용되었습니다.', en: 'Harness settings have been applied to the project.' },
  'wizard.close': { ko: '닫기', en: 'Close' },
  'wizard.analyzeFailed': { ko: '분석에 실패했습니다. Claude CLI 연결 상태를 확인해주세요.', en: 'Analysis failed. Please check Claude CLI connection.' },
  'wizard.applyFailed': { ko: '적용에 실패했습니다.', en: 'Failed to apply settings.' },
  'wizard.analyze': { ko: '분석 시작', en: 'Start Analysis' },
  'wizard.apply': { ko: '선택 항목 적용', en: 'Apply Selected' },
  'wizard.selectProject': { ko: '프로젝트를 선택하세요', en: 'Select a project' },
  'wizard.selectProjectTitle': { ko: 'Analyze할 프로젝트를 선택하세요', en: 'Select a project to analyze' },
  'wizard.selectProjectDesc': { ko: 'Claude Code 세션이 있는 프로젝트 또는 새 경로를 입력하세요', en: 'Choose a project with Claude Code sessions or enter a new path' },
  'wizard.existingProjects': { ko: '기존 프로젝트', en: 'Existing Projects' },
  'wizard.manualInput': { ko: '직접 입력', en: 'Manual Input' },
  'wizard.next': { ko: '다음', en: 'Next' },
  'wizard.confirmTitle': { ko: '참조 파일 및 생성 경로 확인', en: 'Review Reference Files & Output Path' },
  'wizard.confirmDesc': { ko: '아래 파일들을 Analyze하여 설정을 생성합니다', en: 'The following files will be analyzed to generate settings' },
  'wizard.targetProject': { ko: '대상 프로젝트', en: 'Target Project' },
  'wizard.filesToGenerate': { ko: '생성될 파일', en: 'Files to Generate' },
  'wizard.projectClaudeMd': { ko: '프로젝트 CLAUDE.md', en: 'Project CLAUDE.md' },
  'wizard.hooksOptional': { ko: 'Hooks 추가, 선택 시', en: 'Hooks addition, if selected' },
  'wizard.startAnalyze': { ko: 'AI Analyze 및 설정 생성', en: 'AI Analyze & Generate Settings' },
  'wizard.analyzing': { ko: 'Analyze 중', en: 'Analyzing' },
  'wizard.analyzeComplete': { ko: 'Analyze 완료', en: 'Analysis Complete' },
  'wizard.newPath': { ko: '새 경로 입력', en: 'Enter new path' },
  'wizard.aiGenerate': { ko: 'AI 생성', en: 'AI Generate' },
  'wizard.manualWrite': { ko: '직접 작성', en: 'Write Manually' },
  'wizard.techStack': { ko: '감지된 기술 스택', en: 'Detected Tech Stack' },
  'wizard.editInMonaco': { ko: 'Monaco에서 편집', en: 'Edit in Monaco' },
  'wizard.saveSkill': { ko: '스킬 저장', en: 'Save Skill' },
  'wizard.chatPlaceholder': { ko: '메시지를 입력하세요...', en: 'Type a message...' },
  // Wizard intro
  'wizard.introTitle': { ko: 'AI 기반 풀 하네스 자동 구성', en: 'AI-Powered Full Harness Setup' },
  'wizard.introDesc': { ko: '프로젝트 구조와 기존 설정을 분석하여, Claude Code에 최적화된 전체 설정을 AI가 자동으로 생성합니다.', en: 'Analyzes your project structure and existing settings, then automatically generates a complete Claude Code configuration using AI.' },
  'wizard.introOfficialTitle': { ko: 'Anthropic 공식 Best Practices 기반', en: 'Based on Anthropic\'s Official Best Practices' },
  'wizard.introOfficialDesc': { ko: 'Claude Code 공식 가이드라인에 따라 CLAUDE.md 구조, Hook 패턴, 권한 설정 등을 생성합니다.', en: 'Generates CLAUDE.md structure, Hook patterns, permission settings, and more following the official Claude Code guidelines.' },
  'wizard.introGenItems': { ko: '생성되는 항목', en: 'What will be generated' },
  'wizard.introItemClaudeMd': { ko: '프로젝트 맞춤 지침서', en: 'Project-specific instructions' },
  'wizard.introItemHooks': { ko: '자동화 이벤트 훅', en: 'Automation event hooks' },
  'wizard.introItemPermissions': { ko: '도구 실행 권한', en: 'Tool execution permissions' },
  'wizard.introItemMemory': { ko: '프로젝트 컨텍스트', en: 'Project context files' },
  'wizard.introItemSkills': { ko: '커스텀 스킬', en: 'Custom skills' },
  'wizard.introItemAgents': { ko: '전문 에이전트', en: 'Specialized agents' },
  'wizard.introItemCommands': { ko: '슬래시 커맨드', en: 'Slash commands' },
  'wizard.introItemMcp': { ko: '외부 서비스 연동', en: 'External service integration' },
  'wizard.introFlowAnalyze': { ko: '분석', en: 'Analyze' },
  'wizard.introFlowGenerate': { ko: 'AI 생성', en: 'AI Generate' },
  'wizard.introFlowPreview': { ko: '미리보기', en: 'Preview' },
  'wizard.introFlowApply': { ko: '적용', en: 'Apply' },
  'wizard.introStart': { ko: '시작하기', en: 'Get Started' },
  // Wizard page (standalone) — step indicator + intro + confirm + analyzing
  'wizard.stepIntro': { ko: 'Intro', en: 'Intro' },
  'wizard.stepSelect': { ko: '프로젝트 선택', en: 'Select Project' },
  'wizard.stepReference': { ko: '참조', en: 'Reference' },
  'wizard.stepAnalyze': { ko: '분석', en: 'Analyze' },
  'wizard.stepResult': { ko: '결과', en: 'Result' },
  'wizard.introHeading': { ko: '프로젝트 맞춤 환경을 자동으로 구성합니다', en: 'Auto-configure project-specific environment' },
  'wizard.introBestPractice': { ko: '이 위자드는 Anthropic 공식 Claude Code Best Practices를 기반으로 풀 하네스(CLAUDE.md, Hooks, Permissions, Skills, Agents, Memory, Commands, MCP)를 생성합니다.', en: 'This wizard generates a full harness based on Anthropic\'s official Claude Code Best Practices — CLAUDE.md, Hooks, Permissions, Skills, Agents, Memory, Commands, and MCP.' },
  'wizard.introDetail': { ko: '프로젝트의 코드, README, 기술 스택을 분석하고 기존 패턴(전역 CLAUDE.md, Memory)을 참조하여 AI가 최적의 프로젝트 설정을 자동 생성합니다.', en: 'The wizard analyzes your project\'s code, README, and tech stack, references existing patterns (global CLAUDE.md, Memory), and AI auto-generates optimal project settings.' },
  'wizard.introCard1': { ko: 'CLAUDE.md 생성', en: 'CLAUDE.md Generation' },
  'wizard.introCard2': { ko: 'Hooks/MCP 제안', en: 'Hooks/MCP Suggestions' },
  'wizard.introCard3': { ko: 'AI 기반 분석', en: 'AI-Powered Analysis' },
  'wizard.getStarted': { ko: '시작하기', en: 'Get Started' },
  'wizard.refCategory1': { ko: 'Project Files', en: 'Project Files' },
  'wizard.refCategory2': { ko: '전역 Claude 설정', en: 'Global Claude Settings' },
  'wizard.refCategory3': { ko: '기존 프로젝트 설정 (있는 경우)', en: 'Existing Project Settings (if any)' },
  'wizard.refItem1Desc': { ko: '프로젝트 설명, 실행 방법, 기술 스택', en: 'Project description, run instructions, tech stack' },
  'wizard.refItem2Desc': { ko: '의존성, 빌드 설정, 스크립트', en: 'Dependencies, build config, scripts' },
  'wizard.refItem3Desc': { ko: '디렉토리 구조 분석', en: 'Directory structure analysis' },
  'wizard.refItem4Desc': { ko: '전역 개발 지침, 코딩 스타일', en: 'Global dev instructions, coding style' },
  'wizard.refItem5Desc': { ko: '프로젝트별 메모리, 학습된 패턴', en: 'Per-project memory, learned patterns' },
  'wizard.refItem6Desc': { ko: '기존 프로젝트 CLAUDE.md (병합 참조용)', en: 'Existing project CLAUDE.md (for merge reference)' },
  'wizard.analysisStep1': { ko: '프로젝트 구조 스캔', en: 'Project Structure Scan' },
  'wizard.analysisStep1Detail': { ko: 'src/, tests/, docs/ 스캔', en: 'Scan src/, tests/, docs/' },
  'wizard.analysisStep2': { ko: 'README.md 분석', en: 'README.md Analysis' },
  'wizard.analysisStep2Detail': { ko: '프로젝트 설명 및 목적 파악', en: 'Understand project description and purpose' },
  'wizard.analysisStep3': { ko: '전역 CLAUDE.md 참조', en: 'Global CLAUDE.md Reference' },
  'wizard.analysisStep3Detail': { ko: '기존 개발 패턴 및 지침 확인', en: 'Review existing dev patterns and instructions' },
  'wizard.analysisStep4': { ko: 'MEMORY.md 패턴 분석', en: 'MEMORY.md Pattern Analysis' },
  'wizard.analysisStep4Detail': { ko: '프로젝트 메모리 및 습관 분석', en: 'Analyze project memory and habits' },
  'wizard.analysisStep5': { ko: '기술 스택 감지', en: 'Tech Stack Detection' },
  'wizard.analysisStep5Detail': { ko: 'package.json / pyproject.toml 분석', en: 'Analyze package.json / pyproject.toml' },
  'wizard.analysisStep6': { ko: 'AI 최적 설정 생성', en: 'AI Generating Optimal Settings' },
  'wizard.analysisStep6Detail': { ko: 'Claude가 맞춤 CLAUDE.md를 작성 중', en: 'Claude is writing a tailored CLAUDE.md' },
  'wizard.gen1': { ko: '프로젝트 구조를 분석하고 있습니다...', en: 'Analyzing project structure...' },
  'wizard.gen2': { ko: 'README.md와 문서를 읽고 있습니다...', en: 'Reading README.md and documentation...' },
  'wizard.gen3': { ko: '기술 스택을 감지하고 있습니다...', en: 'Detecting tech stack...' },
  'wizard.gen4': { ko: 'Reference Projects의 설정을 분석하고 있습니다...', en: 'Analyzing reference project settings...' },
  'wizard.gen5': { ko: '최적의 CLAUDE.md를 작성하고 있습니다...', en: 'Writing optimal CLAUDE.md...' },
  'wizard.gen6': { ko: 'Hook 설정을 구성하고 있습니다...', en: 'Configuring hook settings...' },
  'wizard.gen7': { ko: '거의 완료되었습니다. 잠시만 기다려주세요...', en: 'Almost done. Please wait...' },
  'nav.sessions': { ko: '세션 관리', en: 'Session History' },
  'sessions.title': { ko: '세션 관리', en: 'Session History' },
  'sessions.subtitle': { ko: '프로젝트별 Claude Code 대화 기록 조회', en: 'Browse Claude Code conversation history by project' },
  'sessions.allProjects': { ko: '전체 프로젝트', en: 'All Projects' },
  'sessions.noSessions': { ko: '세션 기록이 없습니다', en: 'No sessions found' },
  'sessions.selectSession': { ko: '세션을 선택하세요', en: 'Select a session' },
  'sessions.messages': { ko: '메시지', en: 'messages' },
  'sessions.deleteConfirm': { ko: '이 세션을 삭제하시겠습니까?', en: 'Delete this session?' },
  'nav.claudeSettings': { ko: 'Claude 설정', en: 'Claude Settings' },
  'nav.hubSettings': { ko: 'Hub 설정', en: 'Hub Settings' },
  'claudeSettings.title': { ko: 'Claude 설정', en: 'Claude Settings' },
  'claudeSettings.subtitle': { ko: '모델 및 연결 설정', en: 'Model and connection settings' },
  'claudeSettings.model': { ko: '모델', en: 'Model' },
  'claudeSettings.modelHint': { ko: '여기서 설정한 모델이 프로젝트 전역에 적용됩니다.', en: 'This model applies globally to all projects.' },
  'claudeSettings.cliVersion': { ko: 'Claude CLI 버전', en: 'Claude CLI Version' },
  'dashboard.usage': { ko: 'Claude 사용량', en: 'Claude Usage' },
  'dashboard.weekly': { ko: '주간 (7일)', en: 'Weekly (7d)' },
  'dashboard.monthly': { ko: '월간 (30일)', en: 'Monthly (30d)' },
  'dashboard.today': { ko: '오늘', en: 'Today' },
  'dashboard.dailyAvg': { ko: '일평균', en: 'Daily Avg' },
  'claudeSettings.auth': { ko: '인증 관리', en: 'Auth Management' },
  'claudeSettings.authenticated': { ko: '인증됨', en: 'Authenticated' },
  'claudeSettings.notAuthenticated': { ko: '미인증', en: 'Not Authenticated' },
  'claudeSettings.login': { ko: '로그인', en: 'Login' },
  'claudeSettings.logout': { ko: '로그아웃', en: 'Logout' },
  'claudeSettings.remote': { ko: '원격 제어', en: 'Remote Control' },
  'claudeSettings.remoteStart': { ko: '클라우드에서 작업 실행', en: 'Run Task Remotely' },
  'claudeSettings.teleport': { ko: '웹 세션 로컬로 가져오기', en: 'Teleport Session' },
  'claudeSettings.taskPlaceholder': { ko: '실행할 작업을 입력하세요...', en: 'Enter task to run...' },
  'marketplace.mcp': { ko: 'MCP 서버', en: 'MCP Servers' },
  'marketplace.mcpSubtitle': { ko: '공식 MCP 서버 탐색 및 설치', en: 'Browse and install MCP servers' },
  'marketplace.plugins': { ko: '플러그인', en: 'Plugins' },
  'projects.worktree': { ko: '워크트리', en: 'Worktree' },
  'projects.allPermissions': { ko: '전체 권한', en: 'All Permissions' },
  // Criteria descriptions
  'criteria.sessions': { ko: '세션(JSONL)이 있는 프로젝트를 표시합니다.', en: 'Shows projects that have session records (JSONL files).' },
  'criteria.context': { ko: 'Memory 또는 CLAUDE.md가 있는 프로젝트를 표시합니다.', en: 'Shows projects with Memory or CLAUDE.md files.' },
  'criteria.projectStatus': { ko: '세션 또는 Memory가 있는 모든 프로젝트를 표시합니다.', en: 'Shows all projects with sessions or Memory files.' },
  // Hub Settings
  'hub.title': { ko: 'Hub 설정', en: 'Hub Settings' },
  'hub.subtitle': { ko: 'ClaudeHub 앱 자체의 설정을 관리합니다.', en: 'Manage ClaudeHub app settings.' },
  'hub.startup': { ko: '시작 프로그램', en: 'Startup' },
  'hub.autostart': { ko: '로그인 시 자동 실행', en: 'Launch at login' },
  'hub.autostartDesc': { ko: 'macOS 시작 시 ClaudeHub를 자동으로 실행합니다.', en: 'Automatically launch ClaudeHub when macOS starts.' },
  'hub.tracker': { ko: '사용량 추적', en: 'Usage Tracking' },
  'hub.trackerRegistered': { ko: '등록됨', en: 'Registered' },
  'hub.trackerInstall': { ko: 'Hook 등록', en: 'Install Hook' },
  'hub.trackerInstalling': { ko: '설치 중...', en: 'Installing...' },
  'hub.trackerNotInstalled': { ko: 'Tracker Hook이 등록되지 않았습니다. 등록하면 Claude Code에서 스킬/플러그인 사용 시 자동으로 통계가 기록됩니다.', en: 'Tracker Hook is not registered. Once installed, skill/plugin usage will be automatically recorded.' },
  'hub.trackerInfo1': { ko: 'ClaudeHub 서버가 꺼져 있어도 Hook이 등록되어 있으면 자동 기록됩니다.', en: 'Usage is recorded automatically even when ClaudeHub server is off, as long as the Hook is registered.' },
  'hub.trackerInfo2': { ko: '서버는 대시보드에서 통계를 조회할 때만 필요합니다.', en: 'The server is only needed when viewing statistics on the dashboard.' },
  'hub.trackerInfo3': { ko: '과거 데이터는 대시보드의 "Sync 이력" 버튼으로 소급 적재합니다.', en: 'Historical data can be imported via the "Sync History" button on the dashboard.' },
  'hub.appInfo': { ko: '앱 정보', en: 'App Info' },
  'hub.version': { ko: '버전', en: 'Version' },
  'hub.dataPath': { ko: '데이터 경로', en: 'Data Path' },
  'hub.settingsPath': { ko: '설정 경로', en: 'Settings Path' },
  // InfoTooltip category descriptions
  'info.skills.title': { ko: 'Skills이란?', en: 'What are Skills?' },
  'info.skills.desc': { ko: '특정 작업을 수행하도록 지시하는 마크다운 파일. /스킬명으로 호출합니다.', en: 'Markdown files that instruct Claude to perform specific tasks. Invoked with /skill-name.' },
  'info.plugins.title': { ko: 'Plugins이란?', en: 'What are Plugins?' },
  'info.plugins.desc': { ko: '스킬, 커맨드, 에이전트를 묶은 확장 패키지. 마켓플레이스에서 설치할 수 있습니다.', en: 'Extension packages bundling skills, commands, and agents. Installable from the marketplace.' },
  'info.agents.title': { ko: 'Agents란?', en: 'What are Agents?' },
  'info.agents.desc': { ko: '독립적으로 작업을 수행하는 서브에이전트를 정의합니다.', en: 'Define sub-agents that perform tasks independently.' },
  'info.commands.title': { ko: 'Commands란?', en: 'What are Commands?' },
  'info.commands.desc': { ko: '커스텀 CLI 명령어를 정의합니다.', en: 'Define custom CLI commands.' },
  'info.settings.title': { ko: 'Settings란?', en: 'What are Settings?' },
  'info.settings.desc': { ko: 'Claude Code 전역/로컬 설정 파일입니다. 모델, 권한, 플러그인 활성화 등을 관리합니다.', en: 'Global/local settings file for Claude Code. Manages model, permissions, plugin activation, etc.' },
  'info.hooks.title': { ko: 'Hooks란?', en: 'What are Hooks?' },
  'info.hooks.desc': { ko: 'Claude Code의 이벤트(세션 시작, 도구 사용 등) 발생 시 자동 실행되는 셸 명령입니다.', en: 'Shell commands that auto-execute on Claude Code events (session start, tool use, etc.).' },
  'info.hooks.detail': { ko: 'settings.json → hooks (11종 이벤트)', en: 'settings.json → hooks (11 event types)' },
  'info.mcp.title': { ko: 'MCP Servers란?', en: 'What are MCP Servers?' },
  'info.mcp.desc': { ko: '외부 서비스(GitHub, DB 등)와 연결하는 Model Context Protocol 서버입니다.', en: 'Model Context Protocol servers connecting to external services (GitHub, DB, etc.).' },
  'info.keybindings.title': { ko: 'Keybindings란?', en: 'What are Keybindings?' },
  'info.keybindings.desc': { ko: 'Claude Code의 키보드 단축키를 커스터마이징합니다.', en: 'Customize keyboard shortcuts for Claude Code CLI.' },
  'info.claudeMd.title': { ko: 'CLAUDE.md란?', en: 'What is CLAUDE.md?' },
  'info.claudeMd.desc': { ko: 'Claude에게 항상 전달되는 지시문 파일입니다. 전역 또는 프로젝트별로 설정 가능합니다.', en: 'Instruction file always passed to Claude. Configurable globally or per-project.' },
  'info.memory.title': { ko: 'Memory란?', en: 'What is Memory?' },
  'info.memory.desc': { ko: '프로젝트별 기억 저장소입니다. 세션이 종료되어도 정보가 유지됩니다.', en: 'Per-project memory storage. Information persists across sessions.' },
  'info.teams.title': { ko: 'Teams란?', en: 'What are Teams?' },
  'info.teams.desc': { ko: '여러 에이전트를 조합한 멀티 에이전트 팀을 구성합니다.', en: 'Compose multi-agent teams by combining multiple agents.' },
  'info.marketplace.title': { ko: 'Marketplace란?', en: 'What is the Marketplace?' },
  'info.marketplace.desc': { ko: '공식/커뮤니티 마켓플레이스에서 플러그인과 스킬을 탐색하고 설치합니다.', en: 'Browse and install plugins and skills from official/community marketplaces.' },
  'info.marketplace.detail': { ko: '등록된 마켓플레이스에서 검색', en: 'Search across registered marketplaces' },
  'info.monitor.title': { ko: 'Session Monitor란?', en: 'What is Session Monitor?' },
  'info.monitor.desc': { ko: '최근 세션의 도구 호출 이벤트를 실시간으로 확인합니다.', en: 'View recent session tool call events in real-time.' },
  'info.cost.title': { ko: '비용 추적이란?', en: 'What is Cost Tracking?' },
  'info.cost.desc': { ko: '세션 JSONL 로그에서 토큰 사용량을 파싱하여 예상 비용을 계산합니다.', en: 'Parses token usage from session JSONL logs to estimate costs.' },
  'info.cost.detail': { ko: 'input/output 토큰 × 모델별 단가 (Opus/Sonnet/Haiku)', en: 'input/output tokens × per-model pricing (Opus/Sonnet/Haiku)' },
  'info.templates.title': { ko: 'Templates란?', en: 'What are Templates?' },
  'info.templates.desc': { ko: 'CLAUDE.md, hooks, MCP 설정을 묶어 저장한 harness 템플릿입니다.', en: 'Harness templates bundling CLAUDE.md, hooks, and MCP settings.' },
  'info.configDiff.title': { ko: 'Config Diff란?', en: 'What is Config Diff?' },
  'info.configDiff.desc': { ko: '두 프로젝트의 Claude 설정을 나란히 비교하고 동기화합니다.', en: 'Compare and sync Claude settings between two projects side by side.' },
  'info.configDiff.detail': { ko: '~/.claude/projects/{path}/ 디렉토리 비교', en: '~/.claude/projects/{path}/ directory comparison' },
  'info.projects.title': { ko: '프로젝트 현황이란?', en: 'What is Project Status?' },
  'info.projects.desc': { ko: '각 프로젝트별로 CLAUDE.md, Memory, docs, 테스트 등의 설정 상태를 한눈에 확인합니다.', en: 'View CLAUDE.md, Memory, docs, and test status for each project at a glance.' },
  'info.projects.detail': { ko: '~/.claude/projects/ + 각 프로젝트 디렉토리', en: '~/.claude/projects/ + each project directory' },
  'info.sessions.title': { ko: '세션 기록이란?', en: 'What is Session History?' },
  'info.sessions.desc': { ko: 'Claude Code의 프로젝트별 대화 기록을 조회하고 관리합니다.', en: 'Browse and manage per-project conversation history from Claude Code.' },
  'info.claudeSettings.title': { ko: 'Claude 설정이란?', en: 'What are Claude Settings?' },
  'info.claudeSettings.desc': { ko: 'Claude Code의 모델, 연결 상태 등을 설정합니다.', en: 'Configure Claude Code model, connection status, and more.' },
  // Update
  'update.available': { ko: '새 버전이 있습니다', en: 'Update available' },
  'update.updating': { ko: '업데이트 중...', en: 'Updating...' },
  'update.done': { ko: '업데이트 완료', en: 'Updated' },
  'update.restart': { ko: '재시작', en: 'Restart' },
  'update.install': { ko: '업데이트', en: 'Update' },
  'update.failed': { ko: '업데이트 실패', en: 'Update failed' },
  'update.retry': { ko: '재시도', en: 'Retry' },
  // Common
  'common.saved': { ko: '저장됨', en: 'Saved' },
  'common.close': { ko: '닫기', en: 'Close' },
  'common.select': { ko: '— 선택 —', en: '— Select —' },
  'common.comparing': { ko: '비교 중...', en: 'Comparing...' },
  'common.copyDone': { ko: '복사 완료', en: 'Copy complete' },
  'common.component': { ko: '컴포넌트', en: 'Component' },
  'common.status': { ko: '상태', en: 'Status' },
  'common.action': { ko: '액션', en: 'Action' },
  'common.help': { ko: '도움말', en: 'Help' },
  // Extensions
  'extensions.subtitle': { ko: 'Skills, Plugins, Agents, Hooks, MCP 통합 관리', en: 'Manage Skills, Plugins, Agents, Hooks, MCP in one place' },
  // Context
  'context.subtitle': { ko: 'CLAUDE.md, Memory, Context Compare 통합 관리', en: 'Manage CLAUDE.md, Memory, Context Compare' },
  // Cost
  'cost.7d': { ko: '7일', en: '7d' },
  'cost.30d': { ko: '30일', en: '30d' },
  'cost.all': { ko: '전체', en: 'All' },
  'cost.calcMethod': { ko: '산출 방식: 세션 JSONL의 input/output 토큰에 모델별 공개 단가 적용. 캐시 할인 미반영. 구독료와 별개.', en: 'Calculated from session JSONL input/output tokens × model pricing. Cache discounts not included. Separate from subscription.' },
  // Dashboard help
  'dashboard.syncHelp': { ko: 'Claude Code 세션 로그에서 스킬/플러그인 사용 이력을 추출하여 통계 DB에 반영합니다.\n\n데이터: ~/.claude-hub/usage.db', en: 'Extract skill/plugin usage from Claude Code session logs and import to statistics DB.\n\nData: ~/.claude-hub/usage.db' },
  'dashboard.backupHelp': { ko: 'claude-hub에서 설정을 수정할 때마다 자동으로 이전 상태를 백업합니다.\n\n저장 위치: ~/.claude-hub/backups/\n최대 보관: 50개', en: 'Automatically backs up previous state whenever settings are modified.\n\nLocation: ~/.claude-hub/backups/\nMax: 50 backups' },
  // Delete confirmations
  'delete.agent': { ko: '에이전트를 삭제하시겠습니까?', en: 'Delete this agent?' },
  'delete.command': { ko: '커맨드를 삭제하시겠습니까?', en: 'Delete this command?' },
  'delete.hook': { ko: '훅을 삭제하시겠습니까?', en: 'Delete this hook?' },
  'delete.remove': { ko: '제거', en: 'Remove' },
  // Keybindings
  'keybindings.whatIs': { ko: '키바인딩이란?', en: 'What are Keybindings?' },
  'keybindings.desc': { ko: 'Claude Code CLI에서 사용하는 키보드 단축키를 커스터마이징하는 기능입니다.', en: 'Customize keyboard shortcuts used in Claude Code CLI.' },
  'keybindings.example': { ko: '사용 예시', en: 'Examples' },
  'keybindings.clearHistory': { ko: '채팅 히스토리 초기화', en: 'Clear chat history' },
  'keybindings.resume': { ko: '이전 세션 resume', en: 'Resume previous session' },
  'keybindings.cancelGen': { ko: '현재 생성 중단 / 입력 취소', en: 'Cancel generation / input' },
  // Sessions bulk
  'sessions.bulkDelete': { ko: '개 세션을 삭제하시겠습니까?', en: 'session(s) will be deleted. Continue?' },
  'sessions.bulkDeleteDesc': { ko: '선택된 세션의 대화 기록이 모두 삭제됩니다.', en: 'All conversation history of selected sessions will be deleted.' },
  // Project
  'projects.noClaudeMd': { ko: '이 프로젝트에 Claude 설정이 없습니다', en: 'No Claude configuration found for this project' },
  'projects.wizardBannerDesc': { ko: 'Harness Wizard가 Anthropic 공식 가이드 기반으로 최적의 설정을 AI로 생성합니다.', en: 'Harness Wizard generates optimal settings using AI, based on Anthropic\'s official guide.' },
  'projects.runWizard': { ko: 'Harness Wizard 실행', en: 'Run Harness Wizard' },
  // Duplicate scan
  'dupScan.desc': { ko: '설치된 모든 스킬(custom + installed)의 SKILL.md 파일 내용을 1:1 쌍으로 비교합니다. 텍스트 시퀀스 매칭(SequenceMatcher)으로 유사도를 산출하며,', en: 'Compares all installed skills (custom + installed) by their SKILL.md content in 1:1 pairs using text sequence matching (SequenceMatcher).' },
  'dupScan.yellow': { ko: '70% 이상이면 주의(yellow)', en: '70%+ is caution (yellow)' },
  'dupScan.red': { ko: '90% 이상이면 중복 의심(red)으로 표시합니다.', en: '90%+ is suspected duplicate (red).' },
  // Marketplace filter
  'marketplace.filterAll': { ko: '전체', en: 'All' },
  'marketplace.filterInstalled': { ko: '설치됨', en: 'Installed' },
  'marketplace.deletePlugin': { ko: '플러그인 삭제', en: 'Delete Plugin' },
  'marketplace.deleteMcp': { ko: 'MCP 서버 삭제', en: 'Delete MCP Server' },
  'marketplace.detail': { ko: '상세 정보', en: 'Details' },
  'marketplace.skills': { ko: '포함된 스킬', en: 'Included Skills' },
  'marketplace.source': { ko: '출처', en: 'Source' },
  'marketplace.category': { ko: '카테고리', en: 'Category' },
  'marketplace.version': { ko: '버전', en: 'Version' },
  'marketplace.package': { ko: '패키지', en: 'Package' },
}

let currentLang: Lang = (localStorage.getItem('claude-hub-lang') as Lang) || 'en'

export function t(key: string): string {
  return translations[key]?.[currentLang] ?? key
}

export function getLang(): Lang {
  return currentLang
}

export function setLang(lang: Lang) {
  currentLang = lang
  localStorage.setItem('claude-hub-lang', lang)
}
