feat(i18n): Add Korean translation (#721)

This commit is contained in:
ryanlee-ecosy 2026-02-06 11:34:34 +09:00 committed by GitHub
parent 6de8ff5b71
commit 81b90aa675
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 475 additions and 9 deletions

View file

@ -22,13 +22,14 @@ export const LANGUAGE_METADATA: Record<
fr: { name: "French", nativeName: "Français", priority: 4 },
de: { name: "German", nativeName: "Deutsch", priority: 5 },
ja: { name: "Japanese", nativeName: "日本語", priority: 6 },
vi: { name: "Vietnamese", nativeName: "Tiếng Việt", priority: 7 },
pl: { name: "Polish", nativeName: "Polski", priority: 8 },
it: { name: "Italian", nativeName: "Italiano", priority: 9 },
ru: { name: "Russian", nativeName: "Русский", priority: 10 },
uk: { name: "Ukrainian", nativeName: "Українська", priority: 11 },
pt: { name: "Portuguese", nativeName: "Português", priority: 12 },
cs: { name: "Czech", nativeName: "Čeština", priority: 13 },
tr: { name: "Turkish", nativeName: "Türkçe", priority: 14 },
ar: { name: "Arabic", nativeName: "العربية", priority: 15, direction: "rtl" },
ko: { name: "Korean", nativeName: "한국어", priority: 7 },
vi: { name: "Vietnamese", nativeName: "Tiếng Việt", priority: 8 },
pl: { name: "Polish", nativeName: "Polski", priority: 9 },
it: { name: "Italian", nativeName: "Italiano", priority: 10 },
ru: { name: "Russian", nativeName: "Русский", priority: 11 },
uk: { name: "Ukrainian", nativeName: "Українська", priority: 12 },
pt: { name: "Portuguese", nativeName: "Português", priority: 13 },
cs: { name: "Czech", nativeName: "Čeština", priority: 14 },
tr: { name: "Turkish", nativeName: "Türkçe", priority: 15 },
ar: { name: "Arabic", nativeName: "العربية", priority: 16, direction: "rtl" },
};

View file

@ -0,0 +1,465 @@
{
"tray": {
"settings": "설정...",
"checkUpdates": "업데이트 확인...",
"copyLastTranscript": "마지막 녹음 내용 복사",
"quit": "종료",
"cancel": "취소"
},
"sidebar": {
"general": "일반",
"advanced": "고급",
"postProcessing": "후처리",
"history": "히스토리",
"debug": "디버그",
"about": "정보"
},
"onboarding": {
"subtitle": "시작하려면 음성 인식 모델을 선택하세요",
"recommended": "추천",
"download": "다운로드",
"downloading": "다운로드 중...",
"modelCard": {
"accuracy": "정확도",
"speed": "속도"
},
"models": {
"small": {
"name": "Whisper Small",
"description": "빠르고 상당히 정확합니다."
},
"medium": {
"name": "Whisper Medium",
"description": "좋은 정확도, 중간 속도"
},
"turbo": {
"name": "Whisper Turbo",
"description": "정확도와 속도의 균형."
},
"large": {
"name": "Whisper Large",
"description": "좋은 정확도지만 느립니다."
},
"parakeet-tdt-0.6b-v2": {
"name": "Parakeet V2",
"description": "영어 전용. 영어 사용자를 위한 최고의 모델."
},
"parakeet-tdt-0.6b-v3": {
"name": "Parakeet V3",
"description": "빠르고 정확함"
},
"moonshine-base": {
"name": "Moonshine Base",
"description": "매우 빠름, 영어 전용. 억양을 잘 처리합니다."
}
},
"errors": {
"loadModels": "사용 가능한 모델을 불러오는데 실패했습니다",
"downloadModel": "모델 다운로드 실패: {{error}}"
},
"permissions": {
"title": "권한 필요",
"description": "Handy가 제대로 작동하려면 몇 가지 권한이 필요합니다.",
"microphone": {
"title": "마이크 접근",
"description": "음성 인식을 위해 마이크 접근 권한이 필요합니다."
},
"accessibility": {
"title": "접근성 권한",
"description": "녹음된 텍스트를 애플리케이션에 입력하기 위해 필요합니다."
},
"grant": "권한 부여",
"granted": "승인됨",
"waiting": "대기 중...",
"allGranted": "모두 설정 완료!",
"errors": {
"checkFailed": "권한 확인에 실패했습니다. 다시 시도해주세요.",
"requestFailed": "권한 요청에 실패했습니다. 다시 시도해주세요."
}
}
},
"modelSelector": {
"welcome": "Handy에 오신 것을 환영합니다!",
"downloadPrompt": "음성 인식을 시작하려면 아래에서 모델을 다운로드하세요.",
"availableModels": "사용 가능한 모델",
"downloadModels": "모델 다운로드",
"chooseModel": "모델 선택",
"active": "활성",
"download": "다운로드",
"downloadSize": "다운로드 크기",
"noModelsAvailable": "사용 가능한 모델이 없습니다",
"extracting": "{{modelName}} 압축 해제 중...",
"extractingMultiple": "{{count}}개 모델 압축 해제 중...",
"extractingGeneric": "압축 해제 중...",
"downloading": "다운로드 중 {{percentage}}%",
"downloadingMultiple": "{{count}}개 모델 다운로드 중...",
"modelReady": "모델 준비 완료",
"loading": "{{modelName}} 로딩 중...",
"loadingGeneric": "로딩 중...",
"modelError": "모델 오류",
"modelUnloaded": "모델 언로드됨",
"noModelDownloadRequired": "모델 없음 - 다운로드 필요",
"deleteModel": "{{modelName}} 삭제"
},
"settings": {
"general": {
"title": "일반",
"shortcut": {
"title": "Handy 단축키",
"description": "음성-텍스트 녹음을 시작하는 키보드 단축키를 설정하세요",
"loading": "단축키 로딩 중...",
"none": "설정된 단축키 없음",
"notFound": "단축키를 찾을 수 없음",
"pressKeys": "키를 눌러주세요...",
"bindings": {
"transcribe": {
"name": "음성 텍스트 변환 단축키",
"description": "음성을 녹음하고 테스트로 변환하는 키보드 단축키입니다."
},
"cancel": {
"name": "취소 단축키",
"description": "현재 녹음을 취소하는 키보드 단축키입니다."
}
},
"errors": {
"restore": "원래 단축키 복원에 실패했습니다",
"set": "단축키 설정 실패: {{error}}",
"reset": "단축키를 원래 값으로 재설정하는데 실패했습니다"
}
},
"language": {
"title": "언어",
"description": "음성 인식 언어를 선택하세요. 자동은 언어를 자동으로 감지하며, 특정 언어를 선택하면 해당 언어의 정확도가 향상될 수 있습니다.",
"descriptionUnsupported": "Parakeet 모델은 자동으로 언어를 감지합니다. 수동 선택이 필요하지 않습니다.",
"searchPlaceholder": "언어 검색...",
"noResults": "언어를 찾을 수 없습니다",
"auto": "자동"
},
"pushToTalk": {
"label": "녹음 중 단축키 홀딩",
"description": "누르고 있으면 녹음, 놓으면 정지"
}
},
"sound": {
"title": "사운드",
"microphone": {
"title": "마이크",
"description": "선호하는 마이크 장치를 선택하세요",
"placeholder": "마이크 선택...",
"loading": "로딩 중..."
},
"audioFeedback": {
"label": "오디오 피드백",
"description": "녹음 시작 및 정지 시 소리 재생"
},
"outputDevice": {
"title": "출력 장치",
"description": "피드백 사운드를 위한 오디오 출력 장치를 선택하세요",
"placeholder": "출력 장치 선택...",
"loading": "로딩 중..."
},
"volume": {
"title": "볼륨",
"description": "오디오 피드백 사운드의 볼륨 조절"
}
},
"advanced": {
"title": "고급",
"groups": {
"app": "앱",
"output": "출력",
"transcription": "전사",
"history": "히스토리",
"experimental": "실험적"
},
"experimentalToggle": {
"label": "실험적 기능",
"description": "개발 중인 실험적 기능을 활성화합니다."
},
"startHidden": {
"label": "숨김으로 시작",
"description": "창을 열지 않고 시스템 트레이에서 실행합니다."
},
"autostart": {
"label": "시작 시 실행",
"description": "컴퓨터 로그인 시 Handy를 자동으로 시작합니다."
},
"overlay": {
"title": "오버레이 위치",
"description": "녹음 및 전사 중 시각적 피드백 오버레이를 표시합니다. Linux에서는 '없음'을 권장합니다.",
"options": {
"none": "없음",
"bottom": "하단",
"top": "상단"
}
},
"pasteMethod": {
"title": "붙여넣기 방법",
"description": "텍스트 삽입 방법을 선택하세요. 직접: 시스템 입력을 통해 타이핑 시뮬레이션. 없음: 붙여넣기를 건너뛰고 히스토리/클립보드만 업데이트합니다.",
"options": {
"clipboard": "클립보드 ({{modifier}}+V)",
"clipboardCtrlShiftV": "클립보드 (Ctrl+Shift+V)",
"clipboardShiftInsert": "클립보드 (Shift+Insert)",
"direct": "직접",
"none": "없음"
}
},
"clipboardHandling": {
"title": "클립보드 처리",
"description": "클립보드 수정 안 함은 전사 후 현재 클립보드 내용을 보존합니다. 클립보드에 복사는 붙여넣기 후 전사 결과를 클립보드에 남겨둡니다.",
"options": {
"dontModify": "클립보드 수정 안 함",
"copyToClipboard": "클립보드에 복사"
}
},
"translateToEnglish": {
"label": "영어로 번역",
"description": "텍스트로 변환시 다른 언어의 음성을 자동으로 영어로 번역합니다.",
"descriptionUnsupported": "번역은 {{model}} 모델에서 지원되지 않습니다."
},
"modelUnload": {
"title": "모델 언로드",
"description": "모델을 지정된 시간 동안 사용하지 않으면 자동으로 GPU/CPU 메모리를 해제합니다",
"options": {
"never": "안 함",
"immediately": "즉시",
"min2": "2분 후",
"min5": "5분 후",
"min10": "10분 후",
"min15": "15분 후",
"hour1": "1시간 후",
"sec5": "5초 후 (디버그)"
}
},
"customWords": {
"title": "사용자 정의 단어",
"description": "녹음 중 자주 잘못 들리거나 철자가 틀리는 단어를 추가하세요. 시스템이 유사한 소리의 단어를 목록과 일치하도록 자동으로 수정합니다.",
"placeholder": "단어 추가",
"add": "추가",
"remove": "{{word}} 제거"
}
},
"postProcessing": {
"title": "후처리",
"disabledNotice": "후처리가 현재 비활성화되어 있습니다. 설정하려면 디버그 설정에서 활성화하세요.",
"api": {
"title": "API (OpenAI 호환)",
"provider": {
"title": "제공자",
"description": "OpenAI 호환 제공자를 선택하세요."
},
"appleIntelligence": {
"title": "Apple Intelligence",
"description": "완전히 기기에서 실행됩니다. API 키나 네트워크 접근이 필요하지 않습니다.",
"requirements": "macOS Tahoe (26.0) 이상을 실행하는 Apple Silicon Mac이 필요합니다. 시스템 설정에서 Apple Intelligence가 활성화되어 있어야 합니다.",
"unavailable": "이 기기에서는 Apple Intelligence를 사용할 수 없습니다. macOS Tahoe (26.0) 이상을 실행하고 시스템 설정에서 Apple Intelligence가 활성화된 Apple Silicon Mac이 필요합니다."
},
"baseUrl": {
"title": "기본 URL",
"description": "선택한 제공자의 API 기본 URL입니다. 사용자 정의 제공자만 편집할 수 있습니다.",
"placeholder": "https://api.openai.com/v1"
},
"apiKey": {
"title": "API 키",
"description": "선택한 제공자의 API 키입니다.",
"placeholder": "sk-..."
},
"model": {
"title": "모델",
"descriptionApple": "선택적 숫자 토큰 제한을 제공하거나 기본 기기 내 프리셋을 유지하세요.",
"descriptionCustom": "사용자 정의 엔드포인트에서 예상하는 모델 식별자를 제공하세요.",
"descriptionDefault": "선택한 제공자가 제공하는 모델을 선택하세요.",
"placeholderApple": "Apple Intelligence",
"placeholderWithOptions": "모델 검색 또는 선택",
"placeholderNoOptions": "모델 이름 입력",
"refreshModels": "모델 새로고침"
}
},
"prompts": {
"title": "프롬프트",
"selectedPrompt": {
"title": "선택된 프롬프트",
"description": "텍스트 변환을 개선하기 위한 템플릿을 선택하거나 새로 만드세요. 프롬프트 텍스트 내에서 ${output}를 사용하여 캡처된 텍스트를 참조하세요."
},
"noPrompts": "사용 가능한 프롬프트 없음",
"selectPrompt": "프롬프트 선택",
"createNew": "새 프롬프트 만들기",
"promptLabel": "프롬프트 레이블",
"promptLabelPlaceholder": "프롬프트 이름 입력",
"promptInstructions": "프롬프트 지시사항",
"promptInstructionsPlaceholder": "텍스트 변환 후 실행할 지시사항을 작성하세요. 예: 다음 텍스트의 문법과 명확성을 개선하세요: ${output}",
"promptTip": "팁: 프롬프트에서 변환된 텍스트를 삽입하려면 <code>${output}</code>을 사용하세요.",
"updatePrompt": "프롬프트 업데이트",
"deletePrompt": "프롬프트 삭제",
"createPrompt": "프롬프트 만들기",
"cancel": "취소",
"selectToEdit": "세부 정보를 보고 편집하려면 위에서 프롬프트를 선택하세요.",
"createFirst": "첫 번째 후처리 프롬프트를 만들려면 위의 '새 프롬프트 만들기'를 클릭하세요."
}
},
"history": {
"title": "히스토리",
"openFolder": "녹음 폴더 열기",
"loading": "히스토리 로딩 중...",
"empty": "아직 변환된 내용이 없습니다. 녹음을 시작하여 히스토리를 만드세요!",
"copyToClipboard": "녹음 내용을 클립보드에 복사",
"save": "변환된 텍스트 저장",
"unsave": "저장에서 제거",
"delete": "항목 삭제",
"deleteError": "항목 삭제에 실패했습니다. 다시 시도해주세요."
},
"debug": {
"title": "디버그",
"logDirectory": {
"title": "로그 디렉토리",
"description": "로그 파일이 저장되는 위치"
},
"logLevel": {
"title": "로그 레벨",
"description": "로깅의 상세도 설정"
},
"updateChecks": {
"label": "업데이트 확인",
"description": "Handy의 새 버전을 자동으로 확인합니다"
},
"soundTheme": {
"label": "사운드 테마",
"description": "녹음 시작 및 정지 피드백을 위한 사운드 테마를 선택하세요"
},
"wordCorrectionThreshold": {
"title": "단어 수정 임계값",
"description": "사용자 정의 단어 수정의 민감도"
},
"historyLimit": {
"title": "히스토리 제한",
"description": "보관할 최대 히스토리 항목 수",
"entries": "항목"
},
"recordingRetention": {
"title": "녹음 자동 삭제",
"description": "공간을 절약하기 위해 오래된 녹음을 자동으로 삭제합니다",
"never": "안 함",
"preserveLimit": "최근 {{count}}개 유지",
"days3": "3일 후",
"weeks2": "2주 후",
"months3": "3개월 후",
"placeholder": "보관 기간 선택..."
},
"alwaysOnMicrophone": {
"label": "항상 켜진 마이크",
"description": "더 빠른 응답을 위해 마이크를 활성 상태로 유지"
},
"clamshellMicrophone": {
"title": "클램셸 마이크",
"description": "노트북 덮개가 닫혀 있을 때 사용할 마이크"
},
"postProcessingToggle": {
"label": "후처리",
"description": "텍스트 변환 후 AI 기반 텍스트 개선 활성화"
},
"muteWhileRecording": {
"label": "녹음 중 음소거",
"description": "녹음 중 시스템 오디오 음소거"
},
"appendTrailingSpace": {
"label": "끝 공백 추가",
"description": "붙여넣은 텍스트 끝에 공백 추가"
},
"keyboardImplementation": {
"title": "키보드 구현",
"description": "키보드 단축키 백엔드를 선택하세요.",
"bindingsReset": "키보드 단축키가 호환되지 않아 기본값으로 재설정되었습니다"
},
"pasteDelay": {
"title": "붙여넣기 지연",
"description": "붙여넣기 키 입력을 보내기 전 지연 시간(밀리초). 잘못된 텍스트가 붙여넣어지면 늘리세요."
},
"paths": {
"appData": "앱 데이터:",
"models": "모델:",
"settings": "설정:"
}
},
"about": {
"title": "정보",
"version": {
"title": "버전",
"description": "Handy의 현재 버전"
},
"appDataDirectory": {
"title": "앱 데이터 디렉토리",
"description": "Handy가 데이터를 저장하는 위치"
},
"sourceCode": {
"title": "소스 코드",
"description": "소스 코드 보기 및 기여",
"button": "GitHub에서 보기"
},
"supportDevelopment": {
"title": "개발 지원",
"description": "Handy 개발을 계속할 수 있도록 도와주세요",
"button": "후원하기"
},
"acknowledgments": {
"title": "감사의 말",
"whisper": {
"title": "Whisper.cpp",
"description": "OpenAI의 Whisper 자동 음성 인식 모델의 고성능 추론",
"details": "Handy는 빠르고 로컬 음성-텍스트 처리를 위해 Whisper.cpp를 사용합니다. Georgi Gerganov와 기여자들의 놀라운 작업에 감사드립니다."
}
}
}
},
"footer": {
"downloadingModel": "{{model}} 다운로드 중...",
"checkingUpdates": "업데이트 확인 중...",
"updateAvailable": "업데이트 사용 가능: {{version}}",
"updateAvailableShort": "업데이트 사용 가능",
"upToDate": "최신 상태",
"downloadUpdate": "업데이트 다운로드",
"restart": "재시작",
"updateCheckingDisabled": "업데이트 확인 비활성화됨",
"downloading": "다운로드 중... {{progress}}%",
"installing": "설치 중...",
"preparing": "준비 중...",
"checkForUpdates": "업데이트 확인"
},
"common": {
"loading": "로딩 중...",
"save": "저장",
"cancel": "취소",
"reset": "재설정",
"add": "추가",
"remove": "제거",
"delete": "삭제",
"edit": "편집",
"create": "만들기",
"update": "업데이트",
"close": "닫기",
"open": "열기",
"default": "기본값",
"enabled": "활성화됨",
"disabled": "비활성화됨",
"on": "켜짐",
"off": "꺼짐",
"yes": "예",
"no": "아니오",
"noOptionsFound": "옵션을 찾을 수 없습니다"
},
"accessibility": {
"permissionsRequired": "접근성 권한 필요",
"permissionsDescription": "Handy는 녹음된 텍스트를 입력하기 위해 접근성 권한이 필요합니다.",
"openSettings": "시스템 설정 열기",
"dismiss": "닫기"
},
"errors": {
"loadDirectory": "디렉토리 로딩 오류: {{error}}"
},
"appLanguage": {
"title": "애플리케이션 언어",
"description": "Handy 인터페이스의 언어를 변경하세요"
},
"overlay": {
"transcribing": "텍스트로 변환 중..."
}
}