feat(i18n): add Korean (ko) locale

Add complete Korean translation across all 7 namespaces:
common, launch, editor, timeline, settings, dialogs, shortcuts.

All 403 translation keys covered. Passes npm run i18n:check.
This commit is contained in:
munbbok
2026-04-04 12:08:39 +09:00
parent 215d7c40c4
commit 0249c3f36e
9 changed files with 510 additions and 1 deletions
+16
View File
@@ -28,6 +28,13 @@ import esLaunch from '@/i18n/locales/es/launch.json'
import esSettings from '@/i18n/locales/es/settings.json'
import esShortcuts from '@/i18n/locales/es/shortcuts.json'
import esTimeline from '@/i18n/locales/es/timeline.json'
import koCommon from '@/i18n/locales/ko/common.json'
import koDialogs from '@/i18n/locales/ko/dialogs.json'
import koEditor from '@/i18n/locales/ko/editor.json'
import koLaunch from '@/i18n/locales/ko/launch.json'
import koSettings from '@/i18n/locales/ko/settings.json'
import koShortcuts from '@/i18n/locales/ko/shortcuts.json'
import koTimeline from '@/i18n/locales/ko/timeline.json'
import zhCNCommon from '@/i18n/locales/zh-CN/common.json'
import zhCNDialogs from '@/i18n/locales/zh-CN/dialogs.json'
import zhCNEditor from '@/i18n/locales/zh-CN/editor.json'
@@ -59,6 +66,15 @@ const messages: Record<AppLocale, LocaleBundle> = {
dialogs: esDialogs,
shortcuts: esShortcuts,
},
ko: {
common: koCommon,
launch: koLaunch,
editor: koEditor,
timeline: koTimeline,
settings: koSettings,
dialogs: koDialogs,
shortcuts: koShortcuts,
},
'zh-CN': {
common: zhCNCommon,
launch: zhCNLaunch,
+1 -1
View File
@@ -1,6 +1,6 @@
export const DEFAULT_LOCALE = 'en' as const
export const SUPPORTED_LOCALES = ['en', 'es', 'zh-CN'] as const
export const SUPPORTED_LOCALES = ['en', 'es', 'ko', 'zh-CN'] as const
export const I18N_NAMESPACES = [
'common',
+26
View File
@@ -0,0 +1,26 @@
{
"app": {
"name": "Recordly",
"editorTitle": "Recordly 편집기",
"subtitle": "화면 녹화 및 편집",
"language": "언어",
"manageRecordings": "녹화 폴더 열기"
},
"actions": {
"cancel": "취소",
"close": "닫기",
"export": "내보내기",
"load": "불러오기",
"redo": "다시 실행",
"reset": "초기화",
"save": "저장",
"undo": "실행 취소",
"delete": "삭제",
"done": "완료"
},
"errors": {
"invalidFileType": "잘못된 파일 형식입니다",
"failedToUploadImage": "이미지 업로드에 실패했습니다",
"fileReadError": "파일을 읽는 중 오류가 발생했습니다."
}
}
+62
View File
@@ -0,0 +1,62 @@
{
"export": {
"pleaseTryAgain": "다시 시도해 주세요",
"compilingGifProgress": "GIF를 만드는 중... {{progress}}%",
"compilingGifWait": "GIF를 만드는 중입니다... 잠시 시간이 걸릴 수 있습니다",
"takeMoment": "잠시만 기다려 주세요...",
"exportFailed": "내보내기 실패",
"compilingGifTitle": "GIF 생성 중",
"exportingFormat": "{{format}} 내보내는 중",
"exportComplete": "내보내기 완료",
"formatReady": "{{format}} 파일이 준비되었습니다",
"showInFolder": "폴더에서 보기",
"compiling": "생성 중",
"renderingFrames": "프레임 렌더링 중",
"processing": "처리 중...",
"status": "상태",
"format": "형식",
"compilingStatus": "생성 중...",
"frames": "프레임",
"cancelExport": "내보내기 취소",
"reopenSaveDialog": "저장 대화상자 다시 열기",
"savedSuccess": "{{format}} 파일을 저장했습니다!"
},
"addFont": {
"title": "Google 폰트 추가",
"heading": "Google 폰트 추가",
"description": "주석에 사용할 Google Fonts의 사용자 지정 글꼴을 추가합니다.",
"urlLabel": "Google Fonts 가져오기 URL",
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
"urlHelp": "Google Fonts에서 가져오세요: 글꼴 선택 → \"Get font\" 클릭 → @import URL 복사",
"nameLabel": "표시 이름",
"namePlaceholder": "내 사용자 지정 글꼴",
"nameHelp": "글꼴 선택기에서 표시될 이름입니다",
"adding": "추가 중...",
"addFont": "글꼴 추가",
"enterUrl": "Google Fonts 가져오기 URL을 입력해 주세요",
"invalidUrl": "올바른 Google Fonts URL을 입력해 주세요",
"enterName": "글꼴 이름을 입력해 주세요",
"extractFailed": "URL에서 글꼴 패밀리를 추출할 수 없습니다",
"addSuccess": "글꼴 \"{{name}}\"을(를) 추가했습니다",
"addFailed": "글꼴 추가에 실패했습니다",
"loadTimeout": "글꼴을 불러오는 데 너무 오래 걸립니다. URL을 확인한 뒤 다시 시도해 주세요.",
"loadFailed": "글꼴을 불러올 수 없습니다. Google Fonts URL이 올바른지 확인해 주세요."
},
"shortcutsConfig": {
"title": "키보드 단축키",
"configurable": "변경 가능",
"fixed": "고정",
"pressEscToCancel": "Esc를 눌러 취소",
"clickToChange": "클릭해서 변경",
"pressAKey": "키를 누르세요…",
"alreadyUsedBy": "이미 <strong>{{action}}</strong>에서 사용 중입니다",
"swap": "바꾸기",
"reserved": "이 단축키는 \"{{label}}\"에 예약되어 있어 다시 지정할 수 없습니다.",
"saved": "키보드 단축키를 저장했습니다",
"resetNotice": "기본 단축키로 초기화했습니다 — 적용하려면 저장을 클릭하세요",
"instructions": "단축키를 클릭한 다음 새 키 조합을 누르세요. 취소하려면 Esc를 누르세요.",
"resetToDefaults": "기본값으로 초기화",
"cancel": "취소",
"save": "저장"
}
}
+118
View File
@@ -0,0 +1,118 @@
{
"playback": {
"play": "재생",
"pause": "일시 정지"
},
"annotations": {
"settings": "주석 설정",
"active": "활성",
"text": "텍스트",
"image": "이미지",
"arrow": "화살표",
"textContent": "텍스트 내용",
"textPlaceholder": "텍스트를 입력하세요...",
"fontStyle": "글꼴 스타일",
"selectStyle": "스타일 선택",
"size": "크기",
"toggleBold": "굵게 전환",
"toggleItalic": "기울임꼴 전환",
"toggleUnderline": "밑줄 전환",
"alignLeft": "왼쪽 정렬",
"alignCenter": "가운데 정렬",
"alignRight": "오른쪽 정렬",
"textColor": "텍스트 색상",
"background": "배경",
"none": "없음",
"clearBackground": "배경 지우기",
"uploadImage": "이미지 업로드",
"supportedFormats": "지원 형식: JPG, PNG, GIF, WebP",
"arrowDirection": "화살표 방향",
"strokeWidth": "선 두께: {{width}}px",
"arrowColor": "화살표 색상",
"deleteAnnotation": "주석 삭제",
"shortcutsAndTips": "단축키 및 팁",
"tipSelectAnnotation": "재생 헤드를 겹치는 주석 구간으로 이동한 뒤 항목을 선택하세요.",
"tipCycleForward": "Tab 키로 겹치는 항목을 순환할 수 있습니다.",
"tipCycleBackward": "Shift+Tab으로 이전 항목으로 이동할 수 있습니다.",
"imageUploadSuccess": "이미지를 업로드했습니다!",
"imageUploadError": "JPG, PNG, GIF 또는 WebP 이미지 파일을 업로드해 주세요."
},
"fontStyles": {
"classic": "클래식",
"editor": "에디터",
"strong": "강조",
"typewriter": "타자기",
"deco": "장식",
"simple": "심플",
"modern": "모던",
"clean": "클린"
},
"format": {
"mp4Video": "MP4 비디오",
"mp4Description": "고화질 비디오 파일",
"gifAnimation": "GIF 애니메이션",
"gifDescription": "공유용 애니메이션 이미지"
},
"gifOptions": {
"frameRate": "프레임 속도",
"outputSize": "출력 크기",
"outputDimensions": "출력: {{width}} × {{height}}px",
"loopAnimation": "반복 재생",
"loopDescription": "GIF가 계속 반복 재생됩니다"
},
"tutorial": {
"howTrimmingWorks": "트림 사용법",
"title": "트림 작동 방식",
"understanding": "비디오에서 원하지 않는 부분을 잘라내는 방법을 알아보세요.",
"descriptionP1": "트림 도구는 제거하고 싶은 구간을",
"descriptionRemove": "삭제",
"descriptionP2": "하도록 설정합니다.",
"descriptionP3": "타임라인에서 빨간 트림 구간으로 덮인 부분은 내보낼 때 잘려 나갑니다.",
"visualExample": "예시 보기",
"removed": "제거됨",
"kept": "유지됨",
"finalVideo": "최종 비디오",
"part": "파트 {{number}}",
"addTrimStep": "1. 트림 추가",
"addTrimDesc": "T 키를 누르거나 가위 아이콘을 클릭해 제거할 구간을 표시하세요.",
"adjustStep": "2. 조정",
"adjustDesc": "빨간 구간의 가장자리를 드래그해 정확히 잘라낼 범위를 지정하세요."
},
"feedback": {
"trigger": "피드백",
"title": "피드백 및 문의",
"description": "문제가 있거나 빠진 기능이 있으면 직접 연락하거나 이슈를 등록해 주세요.",
"emailLabel": "이메일",
"xLabel": "X",
"reportIssue": "이슈 등록 / 피드백 보내기",
"openFailed": "링크를 열지 못했습니다."
},
"keyboardShortcuts": {
"trigger": "단축키",
"title": "키보드 단축키",
"description": "타임라인과 편집기 컨트롤에 대한 빠른 참고입니다.",
"customizeTooltip": "단축키 사용자 지정",
"customize": "사용자 지정",
"panTimeline": "타임라인 이동",
"zoomTimeline": "타임라인 확대/축소",
"cycleAnnotations": "주석 순환",
"tab": "Tab"
},
"actions": {
"saveAgain": "다시 저장",
"showInFolder": "폴더에서 보기"
},
"project": {
"untitled": "제목 없음"
},
"exportStatus": {
"exporting": "내보내는 중",
"renderingFile": "파일을 렌더링하고 있습니다.",
"preparing": "내보내기를 준비하는 중...",
"completePercent": "{{percent}}% 완료",
"issue": "내보내기 오류",
"complete": "내보내기 완료",
"savedSuccessfully": "파일이 성공적으로 저장되었습니다."
},
"openRecordingsFolder": "녹화 폴더 열기"
}
+73
View File
@@ -0,0 +1,73 @@
{
"recording": {
"disableSystemAudio": "시스템 오디오 끄기",
"enableSystemAudio": "시스템 오디오 켜기",
"disableMicrophone": "마이크 끄기",
"enableMicrophone": "마이크 켜기",
"disableWebcam": "웹캠 오버레이 끄기",
"enableWebcam": "웹캠 오버레이 켜기",
"countdownDelay": "카운트다운 지연",
"noDelay": "지연 없음",
"record": "녹화",
"recordingFolder": "녹화 폴더: {{path}}",
"chooseRecordingsFolder": "녹화 폴더 선택",
"folderPath": "경로: /{{name}}/",
"openVideoFile": "비디오 파일 열기",
"openProject": "프로젝트 열기",
"hideHudFromVideo": "녹화에서 HUD 숨기기",
"showHudInVideo": "녹화에 HUD 표시",
"hideHud": "HUD 숨기기",
"closeApp": "앱 닫기",
"screens": "화면",
"windows": "창",
"noSourcesFound": "사용 가능한 소스를 찾을 수 없습니다",
"microphone": "마이크",
"turnOffMicrophone": "마이크 끄기",
"selectMicToEnable": "사용할 마이크를 선택하세요",
"noMicrophonesFound": "마이크를 찾을 수 없습니다",
"webcam": "웹캠",
"turnOffWebcam": "웹캠 끄기",
"selectWebcamToEnable": "사용할 웹캠을 선택하세요",
"noWebcamsFound": "웹캠을 찾을 수 없습니다",
"recordingsFolder": "녹화 폴더",
"language": "언어",
"paused": "일시 정지",
"rec": "녹화 중",
"resume": "계속",
"pause": "일시 정지",
"stop": "중지",
"cancel": "취소",
"more": "더 보기",
"update": {
"update": "업데이트",
"updated": "업데이트 완료",
"idleTitle": "업데이트를 확인합니다.",
"checkingTitle": "업데이트를 확인하는 중...",
"downloadingTitle": "업데이트를 다운로드하는 중...",
"errorTitle": "업데이트 확인에 실패했습니다. 클릭하여 다시 시도하세요.",
"upToDateTitle": "Recordly {{version}}은(는) 최신 버전입니다.",
"availableTitle": "Recordly {{version}}을(를) 사용할 수 있습니다.",
"availableGenericTitle": "업데이트를 사용할 수 있습니다."
}
},
"sourceSelector": {
"loadingSources": "소스를 불러오는 중...",
"screens": "화면",
"windows": "창",
"windowsNote": "보이는 창(최소화되지 않은 창)만 녹화할 수 있습니다.",
"windowPlaceholder": "창",
"cancel": "취소",
"share": "공유"
},
"permissions": {
"screenRecordingNeeded": "녹화를 시작하기 전에 Recordly에 화면 녹화 권한이 필요합니다. 시스템 설정을 열었습니다. 권한을 허용한 뒤 Recordly를 종료하고 다시 실행해 주세요.",
"screenRecordingMissing": "화면 녹화 권한이 아직 없습니다. 시스템 설정을 다시 열었습니다. 권한을 허용한 뒤 Recordly를 종료하고 다시 실행한 후 녹화를 시작해 주세요.",
"accessibilityNeeded": "커서 추적을 위해 Recordly에 손쉬운 사용 권한도 필요합니다. 시스템 설정을 열었습니다. 권한을 허용한 뒤 Recordly를 종료하고 다시 실행해 주세요.",
"accessibilityMissing": "손쉬운 사용 권한이 아직 없습니다. 시스템 설정을 다시 열었습니다. 권한을 허용한 뒤 Recordly를 종료하고 다시 실행한 후 녹화를 시작해 주세요.",
"selectSource": "녹화할 소스를 선택해 주세요",
"systemAudioUnavailable": "이 소스에서는 시스템 오디오를 사용할 수 없습니다. 시스템 오디오 없이 녹화를 계속합니다.",
"microphoneDenied": "마이크 접근이 거부되었습니다. 마이크 오디오 없이 녹화를 계속합니다.",
"failedToStart": "녹화 시작에 실패했습니다: {{error}}",
"failedToStartGeneric": "녹화 시작에 실패했습니다"
}
}
+160
View File
@@ -0,0 +1,160 @@
{
"zoom": {
"level": "확대 레벨",
"selectRegion": "조정할 확대 구간을 선택하세요",
"deleteZoom": "확대 삭제"
},
"trim": {
"deleteRegion": "트림 구간 삭제"
},
"speed": {
"playbackSpeed": "재생 속도",
"selectRegion": "조정할 속도 구간을 선택하세요",
"deleteRegion": "속도 구간 삭제"
},
"effects": {
"title": "비디오 효과",
"show": "표시",
"showCursor": "커서 표시",
"loopCursor": "커서 반복",
"cursorStyle": "커서 스타일",
"cursorStyleOptions": {
"tahoe": "Tahoe",
"dot": "Dot",
"figma": "Minimal",
"mono": "Inverted",
"lavender": "Lavender",
"parched": "Parched",
"chooper": "Chooper",
"amongus": "Among Us",
"turtle": "Turtle"
},
"backgroundBlur": "배경 블러",
"zoomMotionBlur": "확대 모션 블러",
"connectZooms": "확대 구간 연결",
"zoomGeneralTitle": "일반",
"zoomGeneralDescription": "모든 확대 전환에 적용되는 전체 모션 설정입니다.",
"zoomInTitle": "확대 시작",
"zoomInDescription": "카메라가 확대 구간에 진입하는 방식을 제어합니다.",
"zoomOutTitle": "확대 종료",
"zoomOutDescription": "카메라가 확대 구간에서 빠져나오는 방식을 제어합니다.",
"connectedZoomTitle": "확대 구간 사이",
"connectedZoomDescription": "연결이 활성화된 경우, 연속된 확대 구간 사이의 이동을 조정합니다.",
"zoomInDuration": "확대 시작 시간",
"zoomInOverlap": "확대 시작 겹침",
"zoomOutDuration": "확대 종료 시간",
"zoomInEasing": "확대 시작 커브",
"zoomOutEasing": "확대 종료 커브",
"connectedZoomGap": "연결 확대 간격",
"connectedZoomDuration": "연결 확대 시간",
"connectedZoomEasing": "연결 이동 커브",
"zoomEasingOptions": {
"recordly": "Recordly",
"glide": "Glide",
"smooth": "Smooth",
"snappy": "Snappy",
"linear": "Linear"
},
"cursorSize": "커서 크기",
"cursorSmoothing": "커서 보정",
"off": "끔",
"cursorMotionBlur": "커서 모션 블러",
"cursorClickBounce": "커서 클릭 바운스",
"cursorClickBounceDuration": "바운스 속도",
"cursorSway": "커서 흔들림",
"webcam": "웹캠 오버레이",
"webcamFootage": "웹캠 영상",
"webcamFootageDescription": "이 비디오에 연결된 웹캠 영상이 없습니다",
"uploadWebcamFootage": "영상 업로드",
"replaceWebcamFootage": "영상 교체",
"removeWebcamFootage": "영상 제거",
"webcamFootageAdded": "웹캠 영상을 연결했습니다",
"webcamFootageRemoved": "웹캠 영상을 제거했습니다",
"webcamSize": "웹캠 크기",
"webcamReactToZoom": "확대 시 웹캠 반응",
"webcamRoundness": "웹캠 둥글기",
"webcamShadow": "웹캠 그림자",
"shadow": "그림자",
"radius": "반경",
"roundness": "둥글기",
"padding": "여백",
"removeBackground": "배경 제거"
},
"sections": {
"scene": "장면",
"captions": "자막",
"zoom": "확대",
"cursor": "커서",
"webcam": "웹캠",
"frame": "프레임",
"crop": "자르기"
},
"captions": {
"enabled": "표시",
"language": "언어",
"downloading": "다운로드 중...",
"deleteModel": "모델 삭제",
"clearModel": "모델 초기화",
"downloadModel": "모델 다운로드",
"generating": "생성 중...",
"generateFull": "자막 생성",
"regenerateFull": "자막 다시 생성",
"clearFull": "자막 지우기",
"fontSettings": "글꼴 설정",
"defaultFont": "기본값",
"fontFamily": "글꼴",
"fontSize": "글꼴 크기",
"rowCount": "행 수",
"animation": "애니메이션",
"animationOff": "없음",
"animationFade": "페이드",
"animationRise": "올라오기",
"animationPop": "팝",
"bottomOffset": "하단 오프셋",
"maxWidth": "최대 너비",
"boxRadius": "박스 반경",
"backgroundOpacity": "배경 투명도",
"textColor": "텍스트 색상"
},
"crop": {
"title": "비디오 자르기",
"instruction": "각 가장자리를 드래그해 자르기 영역을 조정하세요",
"top": "상단",
"bottom": "하단",
"left": "왼쪽",
"right": "오른쪽",
"openEditor": "자르기 편집기 열기"
},
"background": {
"title": "배경",
"image": "이미지",
"color": "색상",
"gradient": "그라데이션",
"wallpaperPreview": "배경화면 미리보기",
"uploadCustom": "사용자 이미지 업로드",
"uploadSuccess": "사용자 이미지를 업로드했습니다!",
"uploadError": "JPG 또는 JPEG 이미지 파일을 업로드해 주세요.",
"uploadErrorDescription": "JPG 또는 JPEG 이미지 파일을 업로드해 주세요."
},
"export": {
"title": "내보내기",
"mp4": "MP4",
"gif": "GIF",
"quality": {
"low": "낮음",
"medium": "보통",
"high": "높음",
"original": "원본"
},
"loop": "반복",
"outputDimensions": "출력: {{dimensions}}px",
"sizePresetOriginalShort": "원본",
"sizePresetMediumShort": "중간",
"sizePresetLargeShort": "큰",
"loadProject": "프로젝트 불러오기",
"saveProject": "프로젝트 저장",
"exportVideo": "{{format}} 내보내기",
"reportBug": "버그 신고",
"starOnGithub": "GitHub에서 별표 주기"
}
}
+16
View File
@@ -0,0 +1,16 @@
{
"actions": {
"addZoom": "확대 추가",
"addTrim": "트림 추가",
"addSpeed": "속도 추가",
"addAnnotation": "주석 추가",
"addKeyframe": "키프레임 추가",
"deleteSelected": "선택 항목 삭제",
"playPause": "재생 / 일시 정지",
"cycleForward": "주석 다음으로 순환",
"cycleBackward": "주석 이전으로 순환",
"deleteSelectedAlt": "선택 항목 삭제 (보조)",
"panTimeline": "타임라인 이동",
"zoomTimeline": "타임라인 확대/축소"
}
}
+38
View File
@@ -0,0 +1,38 @@
{
"zoom": {
"cannotPlace": "여기에는 확대를 배치할 수 없습니다",
"existsOrNoSpace": "이 위치에는 이미 확대가 있거나 사용할 수 있는 공간이 부족합니다.",
"suggestHandlerUnavailable": "확대 추천 기능을 사용할 수 없습니다",
"noTelemetry": "사용 가능한 커서 텔레메트리가 없습니다",
"recordFirst": "커서 기반 추천을 만들려면 먼저 화면 녹화를 진행해 주세요.",
"noUsableTelemetry": "사용 가능한 커서 텔레메트리가 없습니다",
"notEnoughMovement": "이 녹화에는 충분한 커서 이동 데이터가 포함되어 있지 않습니다.",
"noInteractionMoments": "명확한 상호작용 지점을 찾지 못했습니다",
"tryRecording": "중요한 동작 주변에서 잠시 멈추거나 클릭하는 녹화를 시도해 보세요.",
"noAutoZoomSlots": "자동 확대를 배치할 수 있는 구간이 없습니다",
"dwellPointsOverlap": "감지된 머무름 지점이 기존 확대 구간과 겹칩니다.",
"addedSuggestions": "상호작용 기반 확대 추천 {{count}}개를 추가했습니다",
"label": "확대 {{index}}",
"addZoom": "확대 추가 (Z)",
"suggestZooms": "커서 기반 확대 추천"
},
"trim": {
"cannotPlace": "여기에는 트림을 배치할 수 없습니다",
"existsOrNoSpace": "이 위치에는 이미 트림이 있거나 사용할 수 있는 공간이 부족합니다.",
"label": "트림 {{index}}",
"addTrim": "트림 추가 (T)"
},
"speed": {
"cannotPlace": "여기에는 속도 구간을 배치할 수 없습니다",
"existsOrNoSpace": "이 위치에는 이미 속도 구간이 있거나 사용할 수 있는 공간이 부족합니다.",
"label": "속도"
},
"annotation": {
"label": "주석",
"image": "이미지",
"addAnnotation": "주석 추가 (A)"
},
"addSpeed": "속도 추가 (S)",
"resizeLeft": "왼쪽 크기 조절",
"resizeRight": "오른쪽 크기 조절"
}