feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진

packages/i18n (@d3ro/i18n) 신규:
- src/locales/ 12개 JSON (ko/en/ja/zh/zh-TW/es/fr/de/pt/ru/vi/th)
- src/index.tsx: TFunction/Locale/LOCALE_META/resolveTranslation/
  포맷 유틸(createFormatDate/Number/RelativeDate/Time)/
  I18nContext/useI18n/I18nProvider

Electron 독립성 확보 (monorepo 원칙 준수):
- I18nStorage interface 신설 (load/save 어댑터 추상화)
- window.electronAPI.config 직접 호출 제거
- I18nProvider는 storage prop으로 영속화 어댑터 주입
- 기본값 noopStorage (메모리 한정, 세션 범위)
- 결과: packages/i18n은 React에만 의존, web/mobile에서 재사용 가능

apps/desktop 어댑터:
- App.tsx에 electronI18nStorage 구현 (config.get/set 래핑)
- <I18nProvider storage={electronI18nStorage}>로 주입

apps/desktop 설정:
- package.json: @d3ro/i18n '*' dep 추가
- tsconfig.node/web.json paths에 @d3ro/i18n 추가
- electron.vite.config.ts alias + externalize exclude 추가
- vitest.config.ts alias 추가

일괄 치환 (29 파일):
- ./i18n, ../i18n, ../../i18n → @d3ro/i18n

apps/desktop/src/renderer/i18n/ 디렉토리 완전 제거.

검증: typecheck + build + dev 런타임 모두 통과.
Phase V2-1 전체 완료 (a/b/c/d).
This commit is contained in:
yunchan8804 2026-04-08 14:57:27 +09:00
parent a041f1b6a9
commit 3524e958ba
51 changed files with 175 additions and 66 deletions

View file

@ -0,0 +1,483 @@
{
"app.name": "D3RO Voice",
"app.tagline": "로컬 AI 음성 어시스턴트",
"nav.dashboard": "대시보드",
"nav.history": "히스토리",
"nav.dictionary": "사전",
"nav.commands": "명령어",
"nav.settings": "설정",
"dashboard.sessionOverview": "세션 개요",
"dashboard.systemStatus": "시스템 상태",
"dashboard.sessionsToday": "오늘 세션",
"dashboard.pressToRecord": "{{key}}를 눌러 녹음 시작",
"dashboard.hotkeyNotSet": "핫키 미설정",
"dashboard.words": "단어",
"dashboard.total": "전체",
"dashboard.streak": "연속",
"dashboard.days": "일",
"dashboard.recording": "녹음",
"dashboard.sessions": "세션",
"dashboard.today": "오늘",
"dashboard.recentTranscriptions": "최근 전사",
"dashboard.noHistory": "히스토리 없음 — 핫키를 눌러 녹음을 시작하세요",
"dashboard.copy": "복사",
"dashboard.entries": "{{count}}건",
"dashboard.stat": "통계",
"dashboard.sys": "시스템",
"history.title": "전사 기록",
"history.search": "검색...",
"history.entries": "{{count}}건",
"history.loading": "로딩...",
"history.noResults": "검색 결과 없음",
"history.noHistory": "히스토리 없음 — 녹음을 시작하세요",
"history.count": "{{count}}건",
"dictionary.title": "커스텀 사전",
"dictionary.words": "{{count}}개",
"dictionary.add": "추가",
"dictionary.search": "검색...",
"dictionary.loading": "로딩...",
"dictionary.noResults": "검색 결과 없음",
"dictionary.noWords": "단어 없음 — STT 정확도 향상을 위해 커스텀 단어를 추가하세요",
"dictionary.used": "{{count}}회 사용",
"dictionary.editTitle": "단어 편집",
"dictionary.addTitle": "단어 추가",
"dictionary.word": "단어",
"dictionary.pronunciation": "발음 (선택)",
"commands.title": "LLM 명령어",
"commands.count": "{{count}}개",
"commands.add": "추가",
"commands.activeCommand": "활성 명령어",
"commands.none": "없음",
"commands.loading": "로딩...",
"commands.noCommands": "명령어 없음 — 추가를 클릭하여 생성",
"commands.editTitle": "명령어 편집",
"commands.addTitle": "명령어 추가",
"commands.name": "이름",
"commands.description": "설명",
"commands.promptTemplate": "프롬프트 템플릿",
"commands.promptHelp": "{{text}}는 전사된 텍스트로 치환됩니다",
"commands.defaultPrompt": "{{text}}를 다듬어주세요.",
"settings.title": "설정",
"settings.tabs.general": "일반",
"settings.tabs.audio": "오디오",
"settings.tabs.stt": "STT",
"settings.tabs.llm": "LLM",
"settings.tabs.about": "정보",
"settings.shortcuts": "단축키",
"settings.dictation": "받아쓰기",
"settings.dictation.desc": "누른 상태에서 말하기. 키를 놓으면 전사가 시작됩니다.",
"settings.agent": "Agent 모드",
"settings.agent.descWithKey": "{{key}}를 두 번 클릭하면 Agent 모드에 진입합니다.",
"settings.agent.descNoKey": "받아쓰기 핫키를 먼저 설정하세요.",
"settings.oneTouch": "원터치 모드",
"settings.oneTouch.desc": "눌러서 시작, 다시 눌러서 중지. 별도 단축키가 필요합니다.",
"settings.caption": "실시간 자막",
"settings.caption.desc": "핫키로 자막 모드를 토글합니다. 마이크 입력을 실시간 전사합니다.",
"settings.captionAudio": "자막 오디오 소스",
"settings.captionSource": "오디오 소스",
"settings.captionSource.mic": "마이크만",
"settings.captionSource.system": "시스템 오디오만 (데스크톱 소리)",
"settings.captionSource.both": "마이크 + 시스템 오디오",
"settings.key": "키",
"settings.notSet": "미설정",
"settings.enabled": "활성화됨",
"settings.disabled": "비활성화",
"settings.interface": "인터페이스",
"settings.theme": "테마",
"settings.theme.system": "시스템",
"settings.theme.light": "라이트",
"settings.theme.dark": "다크",
"settings.language": "언어",
"settings.appBehavior": "앱 동작",
"settings.closeToTray": "트레이로 최소화",
"settings.autoLaunch": "시스템 시작 시 자동 실행",
"settings.autoInsert": "전사 후 자동 텍스트 삽입",
"settings.soundEffects": "효과음",
"settings.microphone": "마이크",
"settings.inputDevice": "입력 장치",
"settings.deviceDefault": "(기본)",
"settings.textInsert": "텍스트 삽입",
"settings.insertMethod": "삽입 방식",
"settings.insertClipboard": "클립보드 (Ctrl+V)",
"settings.insertKeyboard": "키보드 타이핑",
"settings.whisperModel": "Whisper 모델",
"settings.model.tiny": "tiny (39 MB, 가장 빠름)",
"settings.model.base": "base (74 MB, 균형)",
"settings.model.small": "small (244 MB, 양호)",
"settings.model.medium": "medium (769 MB, 우수)",
"settings.model.large": "large-v3 (1.5 GB, 최고)",
"settings.sttLanguage": "인식 언어",
"settings.sttLang.auto": "자동 감지",
"settings.ollamaServer": "Ollama 서버",
"settings.ollamaUrl": "Ollama 서버 URL",
"settings.ollamaHint": "Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull qwen3:4b).",
"settings.llmModel": "LLM 모델",
"settings.postProcess": "음성 후처리",
"settings.defaultAction": "기본 후처리 명령어",
"settings.action.none": "없음 (원본 텍스트 그대로)",
"settings.action.refine": "다듬기 (문법+자연스러움)",
"settings.action.translate": "번역",
"settings.action.summarize": "요약",
"settings.action.grammar": "문법 교정",
"settings.action.custom": "커스텀 프롬프트",
"settings.actionHint": "핫키로 녹음 후 전사된 텍스트에 선택한 LLM 후처리가 적용됩니다. Ollama가 연결되어 있을 때만 동작합니다.",
"settings.about.version": "버전",
"settings.about.techStack": "기술 스택",
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
"settings.about.voiceEngine": "음성 엔진",
"settings.about.voiceEngineValue": "STT: faster-whisper (로컬) / LLM: Ollama (로컬)",
"settings.about.description": "Speakly 리버스엔지니어링 노하우 기반 로컬 AI 음성 어시스턴트. 클라우드 의존성 없이 완전 로컬로 동작합니다.",
"settings.about.restartOnboarding": "초기 설정 안내 다시 보기",
"status.ollama": "OLLAMA",
"status.offline": "OFFLINE",
"status.nudge.title": "Ollama가 실행되지 않고 있어요",
"status.nudge.desc": "LLM 후처리(번역, 요약 등)를 사용하려면 Ollama가 필요합니다.",
"status.nudge.guide": "설치 안내 보기 →",
"onboarding.welcome.title": "D3RO-VOICE",
"onboarding.welcome.desc": "타이핑 없이, 음성으로. 로컬 AI 음성 어시스턴트입니다.",
"onboarding.welcome.start": "시작하기",
"onboarding.mic.title": "마이크 설정",
"onboarding.mic.desc": "사용할 마이크를 선택하세요. 나중에 설정에서 변경할 수 있습니다.",
"onboarding.hotkey.title": "단축키 설정",
"onboarding.hotkey.desc": "받아쓰기 단축키를 설정하세요. 키를 누르고 있는 동안 녹음됩니다.",
"onboarding.hotkey.notSet": "단축키가 설정되지 않았습니다",
"onboarding.hotkey.change": "단축키 변경",
"onboarding.hotkey.set": "단축키 설정",
"onboarding.ollama.title": "Ollama 설치 (선택)",
"onboarding.ollama.desc": "번역, 요약 등 LLM 후처리를 사용하려면 Ollama가 필요합니다. 음성 받아쓰기 자체는 Ollama 없이도 동작합니다.",
"onboarding.ollama.download": "Ollama 다운로드",
"onboarding.ollama.modelHint": "설치 후 터미널에서 모델을 다운로드하세요",
"onboarding.done.title": "설정 완료!",
"onboarding.done.descWithKey": "{{key}} 키를 누르고 말하면 음성이 텍스트로 변환됩니다.",
"onboarding.done.descNoKey": "설정에서 단축키를 지정하면 음성 받아쓰기를 시작할 수 있습니다.",
"onboarding.done.start": "시작하기",
"onboarding.back": "뒤로",
"onboarding.next": "다음",
"hotkey.title": "단축키 설정",
"hotkey.dictationTitle": "받아쓰기 단축키 설정",
"hotkey.oneTouchTitle": "원터치 모드 단축키 설정",
"hotkey.captionTitle": "실시간 자막 단축키 설정",
"hotkey.prompt": "키 조합을 눌러주세요...",
"hotkey.ready": "✓ {{keys}} — 저장을 눌러주세요",
"hotkey.noKey": "키를 입력해주세요",
"hotkey.reserved": "{{keys}}은 시스템 예약 단축키입니다",
"hotkey.current": "현재: {{keys}}",
"hotkey.hint": "조합키(예: Ctrl+Shift+Q) 또는 단일키(예: F5)를 입력하세요",
"hotkey.reset": "다시 입력",
"ollama.title": "OLLAMA SETUP GUIDE",
"ollama.step1.title": "STEP 1 — Ollama 설치",
"ollama.step1.desc": "Ollama는 로컬에서 LLM을 실행하는 무료 도구입니다.",
"ollama.step2.title": "STEP 2 — 모델 다운로드",
"ollama.step2.desc": "터미널에서 원하는 모델을 pull하세요. 한국어에 추천:",
"ollama.step2.alt": "또는 더 큰 모델: ollama pull qwen3:8b (더 정확, 더 느림)",
"ollama.step3.title": "STEP 3 — 자동 연결",
"ollama.step3.desc": "Ollama가 실행되면 D3RO-VOICE가 자동으로 감지합니다. 하단 상태 바의 LED가 빨간색에서 초록색으로 바뀌면 준비 완료!",
"service.sttEngine": "STT ENGINE",
"service.ollamaLlm": "OLLAMA LLM",
"service.hotkeyHook": "HOTKEY HOOK",
"service.audioInput": "AUDIO INPUT",
"service.ready": "READY",
"service.connected": "CONNECTED",
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"common.cancel": "취소",
"common.save": "저장",
"common.delete": "삭제",
"common.add": "추가",
"common.edit": "편집",
"common.close": "닫기",
"common.confirm": "확인",
"common.loading": "로딩...",
"common.copy": "복사",
"common.test": "테스트",
"common.stop": "중지",
"memo.tags": "태그",
"memo.addTag": "태그 추가",
"memo.removeTag": "태그 제거",
"memo.tagPlaceholder": "태그 입력 후 Enter",
"memo.noTags": "태그 없음",
"memo.export": "마크다운 내보내기",
"memo.exportSuccess": "내보내기 완료",
"memo.filterByTag": "태그로 필터",
"memo.allTags": "전체 태그",
"memo.clearFilter": "필터 해제",
"voiceCommand.title": "음성 명령어",
"voiceCommand.enabled": "음성 키워드 인식",
"voiceCommand.enabledDesc": "전사 시작 시 키워드를 감지하여 명령어를 자동 선택합니다.",
"voiceCommand.keywords": "키워드",
"voiceCommand.keywordPlaceholder": "키워드 입력 후 Enter",
"voiceCommand.noKeywords": "키워드 없음",
"voiceCommand.matchMode": "매칭 모드",
"voiceCommand.matchMode.prefix": "앞부분 일치",
"voiceCommand.matchMode.suffix": "뒷부분 일치",
"voiceCommand.matchMode.contains": "포함",
"chain.title": "LLM 체인",
"chain.count": "{{count}}개",
"chain.add": "체인 추가",
"chain.editTitle": "체인 편집",
"chain.addTitle": "체인 추가",
"chain.name": "체인 이름",
"chain.steps": "단계",
"chain.addStep": "단계 추가",
"chain.removeStep": "제거",
"chain.inputSource": "입력 소스",
"chain.inputSource.original": "원본 텍스트",
"chain.inputSource.previous": "이전 단계 결과",
"chain.selectInstruction": "명령어 선택",
"chain.execute": "실행",
"chain.executing": "실행 중...",
"chain.noChains": "체인 없음 — 여러 명령어를 순차 실행하는 파이프라인을 만들어 보세요",
"chain.step": "{{n}}단계",
"chain.progress": "{{current}}/{{total}} 단계 처리 중",
"context.title": "화면 컨텍스트",
"context.enabled": "스크린 컨텍스트",
"context.enabledDesc": "녹음 시작 시 활성 앱과 선택된 텍스트를 캡처하여 LLM에 전달합니다.",
"dashboard.caption": "실시간 자막",
"dashboard.captionStart": "자막 시작",
"dashboard.captionStop": "자막 종료",
"dashboard.captionActive": "자막 활성",
"settings.voiceCommands": "음성 명령어",
"settings.voiceCommands.desc": "전사된 텍스트에서 키워드를 감지하여 명령어를 자동 선택합니다.",
"settings.screenContext": "화면 컨텍스트",
"settings.screenContext.desc": "녹음 시 활성 앱 정보와 선택된 텍스트를 LLM에 함께 전달합니다.",
"date.today": "오늘",
"date.yesterday": "어제",
"license.title": "라이선스",
"license.currentTier": "현재 등급",
"license.free": "FREE",
"license.pro": "PRO",
"license.proPlus": "PRO+",
"license.activate": "라이선스 활성화",
"license.deactivate": "비활성화",
"license.keyPlaceholder": "라이선스 키 입력...",
"license.activating": "활성화 중...",
"license.activated": "활성화 완료",
"license.activateError": "활성화 실패: {{message}}",
"license.deactivated": "비활성화 완료",
"license.machineId": "기기 ID",
"license.activatedAt": "활성화 일시",
"license.manageLicense": "라이선스 관리",
"license.upgrade": "업그레이드",
"license.upgradeTitle": "Pro로 업그레이드",
"license.upgradeDesc": "모든 기능을 잠금 해제하세요",
"license.quotaUsed": "{{used}}/{{limit}} 사용",
"license.quotaUnlimited": "무제한",
"license.tierComparison": "등급 비교",
"license.dailyUsage": "일일 사용량",
"license.feature.dictation": "받아쓰기",
"license.feature.llm_process": "LLM 처리",
"license.feature.live_caption": "실시간 자막",
"license.feature.screen_context": "화면 컨텍스트",
"license.feature.voice_command": "음성 명령어",
"license.feature.llm_chain": "LLM 체인",
"license.feature.voice_memo": "음성 메모",
"license.feature.history_unlimited": "무제한 히스토리",
"license.feature.history_export": "히스토리 내보내기",
"license.feature.custom_instruction_create": "커스텀 명령어 생성",
"license.feature.file_transcription": "파일 전사",
"license.feature.voice_conversation": "음성 대화",
"license.feature.dictation_template": "받아쓰기 템플릿",
"license.feature.meeting_summary": "회의 요약",
"license.feature.local_rag": "로컬 RAG",
"license.feature.os_automation": "OS 자동화",
"license.feature.llmProcess": "LLM 처리",
"license.feature.liveCaption": "실시간 자막",
"license.feature.screenContext": "화면 컨텍스트",
"license.feature.voiceCommand": "음성 명령어",
"license.feature.llmChain": "LLM 체인",
"license.feature.voiceMemo": "음성 메모",
"license.feature.historyUnlimited": "무제한 히스토리",
"license.feature.historyExport": "히스토리 내보내기",
"license.feature.customInstruction": "커스텀 명령어 생성",
"license.feature.fileTranscription": "파일 전사",
"license.feature.voiceConversation": "음성 대화",
"license.feature.dictationTemplate": "받아쓰기 템플릿",
"license.feature.meetingSummary": "회의 요약",
"license.feature.localRag": "로컬 RAG",
"license.feature.osAutomation": "OS 자동화",
"license.pro.required": "PRO 필요",
"license.proPlus.required": "PRO+ 필요",
"license.included": "포함",
"license.notIncluded": "미포함",
"license.keyLabel": "라이선스 키",
"license.quotaExceeded.title": "오늘의 {{feature}}을(를) 모두 사용했습니다",
"license.quotaExceeded.desc": "Pro로 업그레이드하면 무제한으로 사용할 수 있습니다",
"license.tierRequired.title": "{{feature}}은(는) {{tier}} 기능입니다",
"license.tierRequired.desc": "{{tier}}로 업그레이드하여 잠금을 해제하세요",
"license.tryTomorrow": "내일 다시 사용하기",
"license.learnMore": "알아보기",
"license.upgradeBenefits": "업그레이드 혜택",
"license.benefit.unlimitedDictation": "무제한 받아쓰기",
"license.benefit.unlimitedLLM": "무제한 AI 다듬기",
"license.benefit.liveCaption": "실시간 자막",
"license.benefit.unlimitedHistory": "히스토리 무제한 보존",
"license.usageToday": "오늘 사용량",
"license.perDay": "회/일",
"license.unlimited": "무제한",
"license.locked": "잠금",
"license.nav": "라이선스",
"fileTranscription.title": "파일 전사",
"fileTranscription.dropZone": "오디오/비디오 파일을 여기에 드래그하세요",
"fileTranscription.dropZoneHint": "MP3, WAV, M4A, MP4, MKV, WEBM 지원",
"fileTranscription.converting": "변환 중...",
"fileTranscription.processing": "전사 중...",
"fileTranscription.progress": "청크 {{current}} / {{total}}",
"fileTranscription.complete": "전사 완료",
"fileTranscription.copyAll": "전체 복사",
"fileTranscription.cancel": "취소",
"fileTranscription.retry": "다시 시도",
"fileTranscription.error.invalidFormat": "지원하지 않는 파일 형식입니다",
"fileTranscription.error.unknown": "알 수 없는 오류",
"meetingSummary.title": "회의록 요약",
"meetingSummary.generating": "요약 생성 중...",
"meetingSummary.summary": "요약",
"meetingSummary.decisions": "핵심 결정사항",
"meetingSummary.actionItems": "할 일 목록",
"meetingSummary.exportMarkdown": "마크다운 내보내기",
"meetingSummary.noSummary": "요약이 없습니다",
"meetingSummary.generate": "요약 생성",
"template.title": "딕테이션 템플릿",
"template.create": "새 템플릿",
"template.edit": "템플릿 편집",
"template.delete": "삭제",
"template.name": "템플릿 이름",
"template.description": "설명",
"template.fields": "필드",
"template.addField": "필드 추가",
"template.fieldName": "필드명",
"template.fieldLabel": "라벨",
"template.fieldPrompt": "음성 안내",
"template.outputFormat": "출력 포맷",
"template.startSession": "시작",
"template.cancelSession": "세션 취소",
"template.empty": "템플릿이 없습니다",
"nav.conversation": "대화",
"conversation.title": "음성 대화",
"conversation.idle": "대기",
"conversation.listening": "듣는 중",
"conversation.thinking": "생각 중",
"conversation.speaking": "말하는 중",
"conversation.empty": "D3RO에게 말을 걸어보세요",
"conversation.emptyHint": "마이크 버튼을 누르거나 텍스트를 입력하세요",
"conversation.inputPlaceholder": "메시지 입력...",
"conversation.end": "종료",
"conversation.clearHistory": "대화 초기화",
"nav.knowledge": "지식 베이스",
"rag.title": "지식 베이스",
"rag.addDocument": "문서 추가",
"rag.documents": "문서",
"rag.noDocuments": "문서가 없습니다",
"rag.chunks": "청크",
"rag.indexed": "인덱싱 완료",
"rag.pending": "대기 중",
"rag.indexing": "인덱싱 중",
"rag.reindex": "재인덱싱",
"rag.askQuestion": "질문하기",
"rag.queryPlaceholder": "문서에 대해 질문하세요...",
"rag.searching": "검색 중...",
"rag.sources": "참조 문서",
"rag.adding": "추가 중...",
"rag.parsing": "문서 분석 중...",
"voiceAction.title": "음성 액션",
"voiceAction.execute": "실행",
"voiceAction.presets": "프리셋 명령",
"voiceAction.history": "실행 이력",
"voiceAction.noHistory": "실행 이력이 없습니다",
"voiceAction.blocked": "차단됨 (위험 명령)",
"voiceAction.executed": "실행됨",
"settings.theme.nord": "Nord",
"settings.theme.solarized": "Solarized",
"settings.theme.catppuccin": "Catppuccin",
"settings.theme.dracula": "Dracula",
"settings.sttLang.ko": "한국어",
"settings.sttLang.en": "English",
"settings.sttLang.ja": "日本語",
"settings.sttLang.zh": "中文",
"template.outputHelperText": "{{필드명}} 형식으로 플레이스홀더를 사용하세요",
"nav.meeting": "회의",
"meeting.title": "회의 모드",
"meeting.newMeeting": "새 회의",
"meeting.startRecording": "녹음 시작",
"meeting.stopRecording": "녹음 종료",
"meeting.recording": "녹음 중",
"meeting.processing": "회의록 생성 중...",
"meeting.completed": "완료",
"meeting.error": "오류",
"meeting.elapsed": "경과 시간",
"meeting.memoPlaceholder": "메모 입력 (Enter로 추가)",
"meeting.memoAdded": "메모 추가됨",
"meeting.noSessions": "회의 녹음이 없습니다",
"meeting.noSessionsDesc": "새 회의 버튼을 눌러 녹음을 시작하세요",
"meeting.summary": "요약",
"meeting.decisions": "결정사항",
"meeting.actionItems": "할 일",
"meeting.timeline": "타임라인",
"meeting.transcript": "원문 전사",
"meeting.memos": "메모",
"meeting.exportPdf": "PDF 내보내기",
"meeting.exportMarkdown": "마크다운 내보내기",
"meeting.delete": "삭제",
"meeting.deleteConfirm": "이 회의록을 삭제하시겠습니까?",
"meeting.backToList": "목록으로",
"meeting.notificationTitle": "회의록 준비 완료",
"meeting.notificationBody": "회의록이 생성되었습니다. 클릭하여 확인하세요.",
"meeting.sessions": "{{count}}건",
"meeting.duration": "{{minutes}}분",
"meeting.editTitle": "제목 편집",
"meeting.untitled": "무제 회의",
"meeting.processingStep.merging": "전사 텍스트 합산 중...",
"meeting.processingStep.generating": "LLM 회의록 생성 중...",
"meeting.processingStep.parsing": "회의록 파싱 중...",
"meeting.processingStep.saving": "저장 중...",
"meeting.processingStep.notifying": "완료 알림 중...",
"meeting.transcriptTab": "전사",
"meeting.addDocument": "문서 추가",
"meeting.selectTemplate": "템플릿 선택",
"meeting.generate": "생성",
"meeting.generating": "문서 생성 중...",
"meeting.editMode": "편집",
"meeting.previewMode": "미리보기",
"meeting.modified": "수정됨",
"meeting.originalText": "원본 보기",
"meeting.editedText": "수정본 보기",
"meeting.exportDocx": "DOCX 내보내기",
"meeting.exportTxt": "TXT 내보내기",
"meeting.exportFormat": "내보내기",
"meeting.customPrompt": "커스텀 프롬프트",
"meeting.templateName": "템플릿 이름",
"meeting.templatePrompt": "AI 프롬프트",
"meeting.templateSave": "템플릿 저장",
"meeting.documentDeleted": "문서가 삭제되었습니다",
"meeting.autoSaved": "자동 저장됨",
"meeting.minutesTemplate": "회의록",
"meeting.reportTemplate": "보고서",
"meeting.ideaNoteTemplate": "아이디어 노트",
"meeting.customTemplate": "커스텀",
"meeting.downloadTranscript": "전사 다운로드",
"meeting.polish": "AI 다듬기",
"meeting.polishing": "AI가 전사를 다듬는 중...",
"meeting.polished": "AI 다듬기 완료",
"meeting.mindmapTemplate": "마인드맵",
"meeting.chat": "AI 채팅",
"meeting.chatPlaceholder": "회의 내용에 대해 질문하세요...",
"meeting.chatSend": "전송",
"meeting.chatClear": "대화 초기화",
"meeting.copyToClipboard": "클립보드 복사",
"meeting.copied": "복사됨",
"meeting.chatCollapse": "채팅 접기",
"meeting.chatExpand": "채팅 펼치기",
"meeting.exportMd": "Markdown (.md)",
"meeting.exportPdfFmt": "PDF (.pdf)",
"meeting.polishFailed": "AI 다듬기에 실패했습니다",
"meeting.viewDetailError": "회의 상세 정보를 불러오지 못했습니다",
"meeting.startRecordingError": "녹음을 시작하지 못했습니다",
"meeting.diarize": "화자 구분",
"meeting.diarizing": "화자를 구분하는 중...",
"meeting.diarizeComplete": "화자 구분 완료",
"meeting.speaker": "화자",
"settings.hfToken": "HuggingFace 토큰",
"settings.hfTokenHint": "화자 구분을 위해 HuggingFace 토큰이 필요합니다",
"settings.diarization": "화자 구분",
"settings.diarizationHint": "녹음 종료 후 화자를 자동으로 구분합니다"
}