Files
SnapOtter/packages/shared/src/i18n/ko.ts
T
SnapOtterandGitHub a23158d968 feat(files): add save-as-new vs overwrite choice for library file edits (#564)
Editing a file from the library used to silently supersede it: the worker auto-saved every result as a new version and the leaf-only listing hid the original, which read as a destructive overwrite. Tool pages now show a per-edit choice for library-sourced files. The default saves the result as an independent new file and keeps the original; picking overwrite keeps the old superseding-version behavior.

The client sends a saveMode multipart field next to fileId, validated with a 400 on unknown values, and autoSaveToLibrary branches on it. Every hand-written route that honors fileId parses the field the same way as the factory. The review panel shows where an auto-saved result went instead of offering a second, duplicate save. Tools whose route or submitter ignores fileId keep the selector hidden via a shared unsupported-tools set, and the choice resets to the non-destructive default whenever a new file is staged.

Closes #495
2026-07-18 11:36:08 +08:00

4016 lines
153 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const ko: TranslationKeys = {
migrationBanner: {
successTitle: "SnapOtter 1.x 데이터를 가져왔습니다.",
successBody: "이전 버전에서 사용자 {users}명과 저장된 파일 {files}개를 이전했습니다.",
warningTitle: "1.x 데이터베이스를 찾았지만 가져오지 않았습니다.",
warningBody:
"이 인스턴스에 이미 데이터가 있어 1.x 데이터베이스를 가져오지 않았습니다. 가져오려면 빈 인스턴스가 필요합니다. 업그레이드 가이드를 참조하세요.",
dismiss: "닫기",
},
common: {
upload: "컴퓨터에서 업로드",
process: "처리",
download: "다운로드",
cancel: "취소",
save: "저장",
delete: "삭제",
settings: "설정",
search: "도구 검색...",
dropFiles: "여기에 파일을 놓거나 업로드 버튼을 클릭하세요",
loading: "로딩 중...",
saving: "저장 중...",
error: "오류가 발생했습니다",
confirm: "확인",
close: "닫기",
back: "뒤로",
next: "다음",
clear: "지우기",
copy: "복사",
copied: "복사되었습니다!",
noResults: "결과를 찾을 수 없습니다",
showLess: "접기",
showMore: "{count}개 더 보기",
experimental: "실험적",
enabled: "활성화됨",
disabled: "비활성화됨",
rename: "이름 변경",
edit: "편집",
actions: "작업",
create: "생성",
or: "또는",
goHome: "홈으로",
somethingWentWrong: "문제가 발생했습니다",
unexpectedError: "예기치 않은 오류가 발생했습니다.",
retry: "재시도",
privacyPolicy: "개인정보 처리방침",
pageNotFound: "페이지를 찾을 수 없음",
pageNotFoundDescription: "요청하신 페이지가 존재하지 않거나 이동되었습니다.",
},
feedback: {
navLabel: "피드백 공유",
navButtonLabel: "피드백",
dialogTitle: "피드백 공유",
toolDialogTitle: "이 도구는 어떠셨나요?",
failedDialogTitle: "도구 문제 보고",
adminDialogTitle: "설치는 어떠셨나요?",
closeLabel: "피드백 대화 상자 닫기",
privacyNote:
"피드백은 제출할 때만 전송됩니다. SnapOtter는 파일, 파일 내용, 파일 이름, 비공개 결과물을 포함하지 않습니다.",
typeLabel: "피드백 유형",
sentimentLabel: "빠른 평가",
messageLabel: "피드백",
messagePlaceholder:
"무엇이 잘 되었는지, 무엇이 문제였는지, 또는 SnapOtter를 어떻게 개선하면 좋을지 알려 주세요.",
improveFirstLabel: "무엇을 먼저 개선해야 할까요?",
improveFirstPlaceholder: "설치 과정에서 필요 이상으로 어렵게 느껴졌던 부분을 알려 주세요.",
contactOkLabel: "이 피드백에 대해 연락받는 데 동의합니다.",
emailPlaceholder: "이메일 (선택)",
namePlaceholder: "이름 (선택)",
companyPlaceholder: "회사 또는 조직 (선택)",
submit: "피드백 보내기",
submitting: "보내는 중...",
submitFailed: "피드백을 보내지 못했습니다. 다시 시도해 주세요.",
searchMissTitle: "도구 요청",
searchMissContext: "검색한 내용: {query}",
searchMissDiscussionsFallback: "기록하지 못했습니다. Discussions에서 요청을 열어 주세요.",
offlineDescription:
"이 인스턴스는 분석이 꺼져 있어 피드백이 여기에 기록되지 않습니다. 그래도 SnapOtter 팀에 직접 연락할 수 있습니다.",
offlinePublicNote: "GitHub 이슈는 공개됩니다.",
offlineGithubButton: "GitHub 이슈 열기",
offlineEmailButton: "이메일 보내기",
thanksTitle: "피드백 감사합니다.",
thanksDescription:
"파일이나 비공개 콘텐츠를 수집하지 않고도 SnapOtter를 개선하는 데 도움이 됩니다.",
quickThanks: "의견 감사합니다.",
reportIssue: "문제 보고",
toolPromptTitle: "이 도구는 어떠셨나요?",
toolPromptDescription: "간단한 의견 하나가 SnapOtter를 개선하는 데 도움이 됩니다.",
dismissPrompt: "피드백 안내 닫기",
workedWell: "잘 작동함",
dontAskAgain: "다시 묻지 않기",
shareFeedback: "피드백 공유",
remindLater: "나중에 다시 알림",
adminCardTitle: "설치는 어떠셨나요?",
adminCardDescription:
"관리자의 간단한 의견은 Docker, 소스 설치, 문서를 개선하는 데 도움이 됩니다.",
installMethodLabel: "설치 방법",
frictionAreaLabel: "가장 어려웠던 설치 영역",
importantAreasLabel: "가장 중요한 영역",
sentiments: {
great: "좋음",
okay: "보통",
issue: "문제 있음",
missing: "아쉬움",
bug: "버그",
idea: "아이디어",
other: "기타",
},
types: {
bug: "버그",
feature_request: "기능 요청",
confusing_ux: "혼란스러운 UX",
performance: "성능",
other: "기타",
},
installMethods: {
docker: "Docker",
docker_compose: "Docker Compose",
source: "소스에서 빌드",
cloud: "클라우드/데모",
other: "기타",
},
usageTypes: {
personal: "개인 사용",
team_internal: "소규모 팀",
business_workflow: "회사 또는 조직",
education: "교육",
evaluating: "평가 중",
},
frictionAreas: {
smooth: "없음, 설치가 순조로웠음",
docker: "Docker/컨테이너 설치",
environment_variables: "환경 변수",
auth: "인증/SSO",
storage: "저장소/업로드",
workers: "워커/큐",
ai_tools: "AI 도구",
docs: "문서",
performance: "성능/리소스",
other: "기타",
},
importantAreas: {
images: "이미지",
pdf_docs: "PDF/문서",
video_audio: "동영상/오디오",
batch_workflows: "일괄 워크플로",
ai_tools: "AI 도구",
},
},
onboarding: {
usageSurveyTitle: "SnapOtter를 어떻게 사용하고 계신가요?",
usageSurveyToolsLabel: "가장 중요하게 생각하는 것은 무엇인가요?",
pickAnyHint: "(원하는 만큼 선택)",
continueLabel: "계속",
},
categories: {
essentials: "기본 도구",
adjustments: "조정",
enhance: "향상 & AI",
watermark: "워터마크 및 오버레이",
layout: "레이아웃 및 구도",
utilities: "유틸리티",
optimization: "최적화",
format: "포맷 및 변환",
"video-edit": "Video",
"video-convert": "변환",
"video-effects": "효과 & 합성",
"video-subtitles": "자막",
"video-metadata": "메타데이터",
"audio-edit": "편집",
"audio-convert": "변환",
"audio-effects": "효과 & 합성",
"audio-metadata": "메타데이터",
"pdf-organize": "정리",
"pdf-edit": "편집 & 주석",
"pdf-security": "보안",
"pdf-optimize": "최적화",
"doc-convert": "변환",
data: "파일",
archives: "압축 파일",
},
modalities: {
image: "이미지",
video: "동영상",
audio: "오디오",
documentsAndFiles: "PDF & 파일",
},
tools: {
// BEGIN conversion-presets (generated by scripts/generate-conversion-i18n.mjs)
"jpg-to-png": {
name: "JPG을(를) PNG(으)로",
description: "JPG을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-jpg": {
name: "PNG을(를) JPG(으)로",
description: "PNG을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-webp": {
name: "JPG을(를) WebP(으)로",
description: "JPG을(를) WebP(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-webp": {
name: "PNG을(를) WebP(으)로",
description: "PNG을(를) WebP(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webp-to-jpg": {
name: "WebP을(를) JPG(으)로",
description: "WebP을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webp-to-png": {
name: "WebP을(를) PNG(으)로",
description: "WebP을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-avif": {
name: "JPG을(를) AVIF(으)로",
description: "JPG을(를) AVIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-avif": {
name: "PNG을(를) AVIF(으)로",
description: "PNG을(를) AVIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webp-to-avif": {
name: "WebP을(를) AVIF(으)로",
description: "WebP을(를) AVIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"heic-to-jpg": {
name: "HEIC을(를) JPG(으)로",
description: "HEIC을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"heic-to-png": {
name: "HEIC을(를) PNG(으)로",
description: "HEIC을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"heic-to-avif": {
name: "HEIC을(를) AVIF(으)로",
description: "HEIC을(를) AVIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-gif": {
name: "JPG을(를) GIF(으)로",
description: "JPG을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-gif": {
name: "PNG을(를) GIF(으)로",
description: "PNG을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-jpg": {
name: "GIF을(를) JPG(으)로",
description: "GIF을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-png": {
name: "GIF을(를) PNG(으)로",
description: "GIF을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webp-to-gif": {
name: "WebP을(를) GIF(으)로",
description: "WebP을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-tiff": {
name: "JPG을(를) TIFF(으)로",
description: "JPG을(를) TIFF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-tiff": {
name: "PNG을(를) TIFF(으)로",
description: "PNG을(를) TIFF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"tiff-to-jpg": {
name: "TIFF을(를) JPG(으)로",
description: "TIFF을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"tiff-to-png": {
name: "TIFF을(를) PNG(으)로",
description: "TIFF을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"psd-to-jpg": {
name: "PSD을(를) JPG(으)로",
description: "PSD을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"psd-to-png": {
name: "PSD을(를) PNG(으)로",
description: "PSD을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-eps": {
name: "PNG을(를) EPS(으)로",
description: "PNG을(를) EPS(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-eps": {
name: "JPG을(를) EPS(으)로",
description: "JPG을(를) EPS(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"eps-to-png": {
name: "EPS을(를) PNG(으)로",
description: "EPS을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"eps-to-jpg": {
name: "EPS을(를) JPG(으)로",
description: "EPS을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-svg": {
name: "PNG을(를) SVG(으)로",
description: "PNG을(를) SVG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-svg": {
name: "JPG을(를) SVG(으)로",
description: "JPG을(를) SVG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"tiff-to-svg": {
name: "TIFF을(를) SVG(으)로",
description: "TIFF을(를) SVG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"psd-to-svg": {
name: "PSD을(를) SVG(으)로",
description: "PSD을(를) SVG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"eps-to-svg": {
name: "EPS을(를) SVG(으)로",
description: "EPS을(를) SVG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"svg-to-png": {
name: "SVG을(를) PNG(으)로",
description: "SVG을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"svg-to-jpg": {
name: "SVG을(를) JPG(으)로",
description: "SVG을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"jpg-to-pdf": {
name: "JPG을(를) PDF(으)로",
description: "JPG을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"png-to-pdf": {
name: "PNG을(를) PDF(으)로",
description: "PNG을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"heic-to-pdf": {
name: "HEIC을(를) PDF(으)로",
description: "HEIC을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"tiff-to-pdf": {
name: "TIFF을(를) PDF(으)로",
description: "TIFF을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webp-to-pdf": {
name: "WebP을(를) PDF(으)로",
description: "WebP을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-pdf": {
name: "GIF을(를) PDF(으)로",
description: "GIF을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"eps-to-pdf": {
name: "EPS을(를) PDF(으)로",
description: "EPS을(를) PDF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"pdf-to-jpg": {
name: "PDF을(를) JPG(으)로",
description: "PDF을(를) JPG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"pdf-to-png": {
name: "PDF을(를) PNG(으)로",
description: "PDF을(를) PNG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"pdf-to-tiff": {
name: "PDF을(를) TIFF(으)로",
description: "PDF을(를) TIFF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mov-to-mp4": {
name: "MOV을(를) MP4(으)로",
description: "MOV을(를) MP4(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webm-to-mp4": {
name: "WEBM을(를) MP4(으)로",
description: "WEBM을(를) MP4(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mkv-to-mp4": {
name: "MKV을(를) MP4(으)로",
description: "MKV을(를) MP4(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"avi-to-mp4": {
name: "AVI을(를) MP4(으)로",
description: "AVI을(를) MP4(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-mov": {
name: "MP4을(를) MOV(으)로",
description: "MP4을(를) MOV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-webm": {
name: "MP4을(를) WEBM(으)로",
description: "MP4을(를) WEBM(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webm-to-mov": {
name: "WEBM을(를) MOV(으)로",
description: "WEBM을(를) MOV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mkv-to-mov": {
name: "MKV을(를) MOV(으)로",
description: "MKV을(를) MOV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"avi-to-mov": {
name: "AVI을(를) MOV(으)로",
description: "AVI을(를) MOV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-avi": {
name: "MP4을(를) AVI(으)로",
description: "MP4을(를) AVI(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mov-to-avi": {
name: "MOV을(를) AVI(으)로",
description: "MOV을(를) AVI(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mkv-to-avi": {
name: "MKV을(를) AVI(으)로",
description: "MKV을(를) AVI(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"avi-to-mkv": {
name: "AVI을(를) MKV(으)로",
description: "AVI을(를) MKV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-gif": {
name: "MP4을(를) GIF(으)로",
description: "MP4을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mov-to-gif": {
name: "MOV을(를) GIF(으)로",
description: "MOV을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mkv-to-gif": {
name: "MKV을(를) GIF(으)로",
description: "MKV을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"avi-to-gif": {
name: "AVI을(를) GIF(으)로",
description: "AVI을(를) GIF(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-mp4": {
name: "GIF을(를) MP4(으)로",
description: "GIF을(를) MP4(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-webm": {
name: "GIF을(를) WEBM(으)로",
description: "GIF을(를) WEBM(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"gif-to-mov": {
name: "GIF을(를) MOV(으)로",
description: "GIF을(를) MOV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-mp3": {
name: "MP4을(를) MP3(으)로",
description: "MP4을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mov-to-mp3": {
name: "MOV을(를) MP3(으)로",
description: "MOV을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mkv-to-mp3": {
name: "MKV을(를) MP3(으)로",
description: "MKV을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"webm-to-mp3": {
name: "WEBM을(를) MP3(으)로",
description: "WEBM을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"avi-to-mp3": {
name: "AVI을(를) MP3(으)로",
description: "AVI을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-wav": {
name: "MP4을(를) WAV(으)로",
description: "MP4을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mov-to-wav": {
name: "MOV을(를) WAV(으)로",
description: "MOV을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp4-to-ogg": {
name: "MP4을(를) OGG(으)로",
description: "MP4을(를) OGG(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"m4a-to-mp3": {
name: "M4A을(를) MP3(으)로",
description: "M4A을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"m4a-to-wav": {
name: "M4A을(를) WAV(으)로",
description: "M4A을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"aac-to-mp3": {
name: "AAC을(를) MP3(으)로",
description: "AAC을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"aac-to-wav": {
name: "AAC을(를) WAV(으)로",
description: "AAC을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"aac-to-flac": {
name: "AAC을(를) FLAC(으)로",
description: "AAC을(를) FLAC(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"ogg-to-mp3": {
name: "OGG을(를) MP3(으)로",
description: "OGG을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"ogg-to-wav": {
name: "OGG을(를) WAV(으)로",
description: "OGG을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"wav-to-mp3": {
name: "WAV을(를) MP3(으)로",
description: "WAV을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"mp3-to-wav": {
name: "MP3을(를) WAV(으)로",
description: "MP3을(를) WAV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"flac-to-mp3": {
name: "FLAC을(를) MP3(으)로",
description: "FLAC을(를) MP3(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
"excel-to-csv": {
name: "Excel을(를) CSV(으)로",
description: "Excel을(를) CSV(으)로 온라인 변환. 빠르고 무료이며 비공개입니다.",
},
// END conversion-presets
resize: {
name: "이미지 크기 조정",
description: "픽셀, 퍼센트 또는 소셜 미디어 프리셋으로 리사이즈",
},
crop: { name: "이미지 크롭", description: "자유 크롭, 비율 프리셋, 도형 크롭" },
rotate: { name: "이미지 회전 및 뒤집기", description: "이미지 회전, 뒤집기 및 기울기 보정" },
convert: { name: "이미지 변환", description: "이미지 포맷 간 변환" },
compress: { name: "이미지 압축", description: "품질 또는 목표 크기로 파일 크기 축소" },
"optimize-for-web": {
name: "웹 최적화",
description: "포맷 변환, 품질 조절, 실시간 미리보기로 웹용 이미지 최적화",
},
"strip-metadata": {
name: "이미지 메타데이터 제거",
description: "EXIF, GPS 및 카메라 정보 제거",
},
"edit-metadata": {
name: "이미지 메타데이터 편집",
description: "EXIF, IPTC, XMP, GPS, 키워드 및 날짜 편집",
},
"bulk-rename": { name: "일괄 이름 변경", description: "패턴으로 여러 파일 일괄 이름 변경" },
"image-to-pdf": {
name: "이미지를 PDF로",
description: "여러 이미지를 PDF 문서로 합치기",
},
"pdf-to-image": { name: "PDF를 이미지로", description: "PDF 페이지를 이미지로 변환" },
favicon: {
name: "Favicon 생성기",
description: "모든 Favicon 및 앱 아이콘 크기 생성",
},
"adjust-colors": {
name: "색상 조정",
description: "밝기, 대비, 노출, 채도, 색온도, 선명도 및 효과",
},
sharpening: {
name: "이미지 선명하게",
description: "적응형, 언샵 마스크, 하이패스 샤프닝(프리셋 포함)",
},
"replace-color": {
name: "색상 교체 및 반전",
description: "특정 색상 교체 또는 반전",
},
"color-blindness": {
name: "색각 시뮬레이션",
description: "다양한 색각 이상에서 이미지가 어떻게 보이는지 시뮬레이션",
},
"remove-background": {
name: "배경 제거",
description: "AI 기반 배경 제거",
},
upscale: { name: "이미지 업스케일", description: "AI 초해상도 향상" },
"erase-object": { name: "객체 지우기", description: "AI로 원하지 않는 객체 제거" },
ocr: {
name: "이미지에서 텍스트 추출 (OCR)",
description: "AI로 이미지에서 높은 정확도로 텍스트 추출",
},
"ocr-pdf": {
name: "PDF OCR",
description: "AI 기반 OCR로 PDF 문서에서 텍스트 추출",
},
"blur-faces": {
name: "얼굴 및 개인정보 블러",
description: "얼굴과 민감한 정보를 자동 감지하여 블러 처리",
},
"enhance-faces": {
name: "얼굴 향상",
description: "AI로 얼굴 복원 및 향상",
},
"smart-crop": {
name: "스마트 크롭",
description: "피사체, 얼굴 또는 트림 기반 스마트 크롭",
},
"image-enhancement": {
name: "이미지 향상",
description: "원클릭으로 노출, 대비, 색상, 선명도를 스마트 보정",
},
"noise-removal": {
name: "노이즈 제거",
description: "AI 기반 노이즈 및 입자 제거",
},
"red-eye-removal": {
name: "적목 보정",
description: "AI 기반 플래시 사진의 적목 감지 및 보정",
},
"restore-photo": {
name: "사진 복원",
description: "AI로 오래된 사진의 긁힘, 찢어짐 및 손상 복원",
},
"content-aware-resize": {
name: "콘텐츠 인식 리사이즈",
description: "중요한 콘텐츠를 보호하면서 지능적으로 리사이즈",
},
"ai-canvas-expand": {
name: "AI 캔버스 확장",
description: "AI 채우기로 캔버스 확장",
},
colorize: {
name: "AI 컬러화",
description: "AI 딥러닝 모델로 흑백 사진을 풀 컬러로 변환",
},
"passport-photo": {
name: "증명사진",
description: "얼굴 자동 감지로 정부 규격에 맞는 여권, 비자, 신분증 사진 생성",
},
"transcribe-audio": {
name: "오디오 전사",
description: "AI 기반 전사로 음성을 텍스트로 변환",
},
"auto-subtitles": {
name: "자동 자막",
description: "비디오 오디오 트랙에서 자막 파일 생성",
},
"transparency-fixer": {
name: "PNG 투명도 수정",
description: "가짜 투명 PNG를 원클릭으로 수정",
},
"background-replace": {
name: "배경 교체",
description: "이미지 배경을 단색으로 교체합니다",
},
"blur-background": {
name: "배경 흐리게",
description: "피사체는 선명하게 유지하면서 배경을 흐리게 합니다",
},
"watermark-text": { name: "텍스트 워터마크", description: "텍스트 워터마크 오버레이 추가" },
"watermark-image": { name: "이미지 워터마크", description: "로고를 워터마크로 오버레이" },
"text-overlay": { name: "텍스트 오버레이", description: "이미지에 스타일 텍스트 추가" },
compose: { name: "이미지 합성", description: "위치와 불투명도로 이미지를 레이어 합성" },
"meme-generator": {
name: "Meme 생성기",
description:
"인기 템플릿이나 나만의 이미지로 Meme을 만드세요. 클래식 Impact 스타일 텍스트에 글꼴, 색상, 위치를 커스터마이징할 수 있습니다.",
},
info: { name: "이미지 정보", description: "모든 메타데이터와 이미지 속성 보기" },
compare: { name: "이미지 비교", description: "두 이미지를 나란히 비교" },
"find-duplicates": {
name: "중복 찾기",
description: "중복 및 유사 이미지 감지",
},
"color-palette": {
name: "컬러 팔레트",
description: "이미지에서 주요 색상 추출",
},
"qr-generate": {
name: "QR 코드 생성기",
description: "맞춤 색상, 패턴, 로고가 포함된 QR 코드 생성",
},
"html-to-image": {
name: "HTML을 이미지로",
description: "웹페이지를 고품질 이미지로 캡처",
},
"barcode-read": {
name: "바코드 리더",
description: "이미지에서 QR 코드, 바코드 및 2D 코드 스캔",
},
collage: {
name: "콜라주 및 그리드",
description: "25가지 이상의 템플릿으로 이미지를 아름다운 그리드 콜라주로 합성",
},
stitch: {
name: "이미지 결합",
description: "이미지를 나란히, 세로로 또는 그리드로 결합",
},
split: {
name: "이미지 분할",
description: "그리드 또는 픽셀 크기로 이미지 분할(실시간 미리보기 지원)",
},
border: {
name: "테두리 및 프레임",
description: "테두리, 패딩, 둥근 모서리, 그림자를 원클릭 프리셋으로 추가",
},
beautify: {
name: "스크린샷 꾸미기",
description: "스크린샷에 그라데이션 배경, 기기 프레임, 그림자, 소셜 미디어 크기 추가",
},
"circle-crop": {
name: "원형 크롭",
description: "이미지를 투명 모서리의 원형으로 크롭",
},
duotone: {
name: "듀오톤",
description: "사용자 지정 그림자 및 하이라이트 색상으로 듀오톤 효과 적용",
},
"image-pad": {
name: "이미지 패딩",
description: "단색 배경으로 대상 종횡비에 맞게 이미지 패딩 추가",
},
pixelate: {
name: "픽셀화",
description: "전체 이미지 또는 특정 영역에 픽셀화 효과 적용",
},
vignette: {
name: "비네팅",
description: "강도와 색상 조절이 가능한 비네팅 효과 추가",
},
"gif-webp": {
name: "GIF/WebP 변환기",
description: "애니메이션 GIF을 WebP로, 또는 반대로 변환하며 모든 프레임 유지",
},
histogram: {
name: "히스토그램",
description: "이미지에서 RGB 히스토그램 차트 생성",
},
"lqip-placeholder": {
name: "LQIP 플레이스홀더",
description: "base64 데이터 URI로 저품질 이미지 플레이스홀더 생성",
},
"sprite-sheet": {
name: "스프라이트 시트",
description: "여러 이미지를 하나의 스프라이트 시트 그리드로 결합",
},
"svg-to-raster": {
name: "SVG를 래스터로",
description: "SVG를 PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF로 맞춤 스케일 및 DPI로 변환",
},
vectorize: {
name: "이미지를 SVG로",
description: "이미지를 스케일러블 벡터 그래픽으로 변환",
},
"gif-tools": {
name: "GIF 도구",
description: "애니메이션 GIF의 리사이즈, 최적화, 속도 변경, 역재생, 프레임 추출, 회전",
},
"image-to-base64": {
name: "이미지를 Base64로",
description: "이미지를 Base64 문자열로 변환하여 HTML, CSS 등에 임베드",
},
"barcode-generate": {
name: "바코드 생성기",
description: "Code 128, EAN-13, UPC-A, Code 39, ITF-14, Data Matrix 형식의 바코드 생성",
},
"chart-maker": {
name: "차트 만들기",
description: "CSV 또는 JSON 데이터로 막대, 선, 원형 차트 생성",
},
"convert-video": {
name: "동영상 변환",
description: "MP4, MOV, WebM 간 동영상 변환",
},
"compress-video": {
name: "동영상 압축",
description: "품질 조절로 동영상 파일 크기 줄이기",
},
"trim-video": {
name: "동영상 자르기",
description: "동영상에서 원하는 구간 잘라내기",
},
"mute-video": {
name: "동영상 음소거",
description: "동영상에서 오디오 트랙 제거",
},
"video-to-gif": {
name: "동영상을 GIF로",
description: "동영상 클립을 애니메이션 GIF으로 변환",
},
"resize-video": {
name: "동영상 크기 조정",
description: "동영상을 새 해상도 또는 프리셋 크기로 조정",
},
"crop-video": {
name: "동영상 크롭",
description: "동영상에서 특정 영역 크롭",
},
"rotate-video": {
name: "동영상 회전",
description: "동영상 회전 또는 반전",
},
"change-fps": {
name: "프레임 레이트 변경",
description: "동영상의 프레임 레이트 변경",
},
"video-color": {
name: "동영상 색상",
description: "밝기, 대비, 채도, 감마 조정",
},
"video-speed": {
name: "동영상 속도",
description: "동영상 속도 높이기 또는 낮추기",
},
"reverse-video": {
name: "동영상 역재생",
description: "동영상 클립을 거꾸로 재생",
},
"video-loudnorm": {
name: "동영상 오디오 정규화",
description: "동영상 오디오 볼륨을 방송 표준으로 정규화",
},
"aspect-pad": {
name: "종횡비 패딩",
description: "대상 종횡비에 맞게 단색 바 추가",
},
"blur-pad": {
name: "블러 패딩",
description: "동영상의 흐린 복사본으로 여백 채우기",
},
"watermark-video": {
name: "동영상 워터마크",
description: "동영상 프레임에 텍스트 워터마크 삽입",
},
"stabilize-video": {
name: "동영상 손떨림 보정",
description: "2단계 보정으로 카메라 흔들림 줄이기",
},
"gif-to-video": {
name: "GIF을 동영상으로",
description: "애니메이션 GIF을 MP4 또는 WebM 동영상으로 변환",
},
"video-to-webp": {
name: "동영상을 WebP로",
description: "동영상 클립을 애니메이션 WebP 이미지로 변환",
},
"video-to-frames": {
name: "동영상을 프레임으로",
description: "동영상에서 프레임을 추출하여 이미지 ZIP으로 저장",
},
"merge-videos": {
name: "동영상 병합",
description: "여러 동영상 클립을 하나의 파일로 합치기",
},
"replace-audio": {
name: "오디오 교체",
description: "동영상의 오디오 트랙을 다른 파일로 교체",
},
"burn-subtitles": {
name: "자막 굽기",
description: "동영상 프레임에 자막을 영구적으로 렌더링",
},
"embed-subtitles": {
name: "자막 삽입",
description: "동영상 컨테이너에 자막 트랙 삽입",
},
"extract-subtitles": {
name: "자막 추출",
description: "동영상에서 자막 트랙을 SRT 파일로 추출",
},
"images-to-video": {
name: "이미지를 동영상으로",
description: "이미지 세트를 슬라이드쇼 동영상으로 만들기",
},
"video-metadata": {
name: "동영상 메타데이터 정리",
description: "동영상에서 메타데이터를 제거하고 발견된 내용 보고",
},
"convert-audio": {
name: "오디오 변환",
description: "MP3, WAV, OGG 등 오디오 형식 간 변환",
},
"trim-audio": {
name: "오디오 자르기",
description: "오디오 파일에서 원하는 구간 잘라내기",
},
"extract-audio": {
name: "오디오 추출",
description: "동영상에서 오디오 트랙 추출",
},
"volume-adjust": {
name: "볼륨 조정",
description: "고정 게인으로 오디오 볼륨 높이기 또는 낮추기",
},
"normalize-audio": {
name: "오디오 정규화",
description: "방송 표준 수준으로 음량 균일화",
},
"fade-audio": {
name: "오디오 페이드",
description: "오디오에 페이드 인/아웃 효과 추가",
},
"reverse-audio": {
name: "오디오 역재생",
description: "오디오를 거꾸로 재생",
},
"audio-speed": {
name: "오디오 속도",
description: "오디오 재생 속도 높이기 또는 낮추기",
},
"pitch-shift": {
name: "피치 변환",
description: "속도 변경 없이 반음 단위로 피치 높이기 또는 낮추기",
},
"audio-channels": {
name: "오디오 채널",
description: "모노, 스테레오 간 변환 또는 좌우 채널 교환",
},
"silence-removal": {
name: "무음 제거",
description: "오디오에서 무음 구간 제거",
},
"noise-reduction": {
name: "노이즈 감소",
description: "FFT 기반 디노이징으로 배경 소음 감소",
},
"merge-audio": {
name: "오디오 병합",
description: "여러 오디오 파일을 하나로 합치기",
},
"split-audio": {
name: "오디오 분할",
description: "시간, 균등 분할 또는 무음 감지로 오디오 분할",
},
"ringtone-maker": {
name: "벨소리 만들기",
description: "오디오 파일에서 벨소리 클립 만들기",
},
"waveform-image": {
name: "파형 이미지",
description: "PNG 이미지로 파형 시각화 생성",
},
"audio-metadata": {
name: "오디오 메타데이터",
description: "오디오 태그(ID3) 보기, 편집 또는 제거",
},
"merge-pdf": {
name: "PDF 병합",
description: "여러 PDF를 하나로 합치기",
},
"split-pdf": {
name: "PDF 분할",
description: "페이지 추출 또는 여러 부분으로 분할",
},
"compress-pdf": {
name: "PDF 압축",
description: "PDF 파일 크기 줄이기",
},
"rotate-pdf": {
name: "PDF 회전",
description: "PDF 페이지 회전",
},
"convert-document": {
name: "문서 변환",
description: "Word, OpenDocument, RTF, 일반 텍스트 형식 간 변환",
},
"convert-presentation": {
name: "프레젠테이션 변환",
description: "PowerPoint와 OpenDocument 프레젠테이션 형식 간 변환",
},
"convert-spreadsheet": {
name: "스프레드시트 변환",
description:
"Excel, OpenDocument, CSV 형식 간 변환. 다중 시트 통합 문서는 첫 번째 시트를 CSV로 내보냅니다.",
},
"excel-to-pdf": {
name: "Excel을 PDF로",
description: "스프레드시트를 PDF로 변환. 넓은 시트는 여러 페이지에 걸쳐 나뉠 수 있습니다.",
},
"word-to-pdf": {
name: "Word를 PDF로",
description: "Word 문서를 PDF로 변환",
},
"extract-pages": {
name: "페이지 추출",
description: "선택한 페이지를 새 PDF로 추출",
},
"remove-pages": {
name: "페이지 제거",
description: "PDF에서 특정 페이지 삭제",
},
"organize-pdf": {
name: "PDF 정리",
description: "명시적 페이지 순서로 페이지 재정렬",
},
"protect-pdf": {
name: "PDF 보호",
description: "비밀번호 보호 추가 (AES-256 암호화)",
},
"unlock-pdf": {
name: "PDF 잠금 해제",
description: "PDF에서 비밀번호 보호 제거",
},
"repair-pdf": {
name: "PDF 복구",
description: "손상된 PDF 복구 시도",
},
"linearize-pdf": {
name: "웹 최적화 PDF",
description: "빠른 웹 보기를 위해 PDF 선형화",
},
"grayscale-pdf": {
name: "PDF 흑백 변환",
description: "모든 색상을 흑백으로 변환",
},
"pdfa-convert": {
name: "PDF/A 변환기",
description: "보관용 PDF/A-2로 변환",
},
"crop-pdf": {
name: "PDF 크롭",
description: "균일한 여백으로 모든 페이지 크롭",
},
"nup-pdf": {
name: "한 장에 여러 페이지 (N-up)",
description: "한 장에 여러 페이지 배치",
},
"booklet-pdf": {
name: "소책자 PDF",
description: "소책자로 접을 수 있도록 페이지 배치",
},
"watermark-pdf": {
name: "PDF 워터마크",
description: "모든 페이지에 텍스트 워터마크 추가",
},
"pdf-page-numbers": {
name: "PDF 페이지 번호",
description: "모든 페이지에 페이지 번호 추가",
},
"flatten-pdf": {
name: "PDF 평탄화",
description: "양식과 주석을 페이지 콘텐츠에 고정",
},
"redact-pdf": {
name: "PDF 교정",
description: "텍스트를 영구적으로 삭제 (검증된 완전 삭제)",
},
"pdf-to-text": {
name: "PDF를 텍스트로",
description: "PDF에서 일반 텍스트 추출",
},
"pdf-to-word": {
name: "PDF를 Word로",
description: "텍스트 기반 PDF에 최적; 스캔된 페이지는 OCR 필요",
},
"pdf-metadata": {
name: "PDF 메타데이터",
description: "PDF 문서 메타데이터 읽기 및 쓰기",
},
"powerpoint-to-pdf": {
name: "PowerPoint를 PDF로",
description: "프레젠테이션을 PDF로 변환",
},
"html-to-pdf": {
name: "HTML을 PDF로",
description: "HTML 파일을 PDF로 변환. 개인정보 보호를 위해 외부 리소스는 비활성화됩니다.",
},
"markdown-to-docx": {
name: "Markdown을 Word로",
description: "Markdown 파일을 Word 문서(DOCX)로 변환",
},
"markdown-to-html": {
name: "Markdown을 HTML로",
description:
"Markdown 파일을 독립형 HTML 페이지로 변환. 원본의 외부 이미지는 출력에 그대로 유지됩니다.",
},
"markdown-to-pdf": {
name: "Markdown을 PDF로",
description:
"Markdown 파일을 스타일이 적용된 PDF로 변환. 개인정보 보호를 위해 외부 리소스는 비활성화됩니다.",
},
"epub-convert": {
name: "EPUB에서 변환",
description:
"EPUB을 PDF, DOCX, HTML 또는 Markdown으로 변환. 책 내부의 외부 리소스는 가져오지 않습니다.",
},
"to-epub": {
name: "EPUB으로 변환",
description: "Word, Markdown, HTML 또는 일반 텍스트 파일을 EPUB으로 변환",
},
"csv-excel": {
name: "CSV와 Excel 변환",
description: "CSV와 Excel(XLSX) 간 양방향 변환",
},
"csv-json": {
name: "CSV와 JSON 변환",
description: "CSV와 JSON 간 양방향 변환",
},
"json-xml": {
name: "JSON과 XML 변환",
description: "JSON과 XML 간 양방향 변환",
},
"split-csv": {
name: "CSV 분할",
description: "행 수 기준으로 CSV를 여러 파일로 분할",
},
"merge-csvs": {
name: "CSV 병합",
description: "동일한 열을 가진 여러 CSV 또는 TSV 파일을 하나로 합치기",
},
"yaml-json": {
name: "YAML / JSON 변환",
description: "YAML과 JSON 간 양방향 변환",
},
"xml-to-csv": {
name: "XML을 CSV로",
description: "XML에서 반복 요소를 CSV 테이블로 추출",
},
"create-zip": {
name: "ZIP 만들기",
description: "여러 파일을 하나의 ZIP 아카이브로 묶기",
},
"extract-zip": {
name: "ZIP 추출",
description:
"ZIP 아카이브에서 폭탄 방지 기능으로 안전하게 파일 추출. 단일 파일 아카이브는 파일을 직접 반환합니다.",
},
pipeline: { name: "Pipeline 빌더", description: "여러 도구를 워크플로로 연결" },
processing: { canceled: "처리가 취소되었습니다" },
mediaPlayer: {
unsupported: "브라우저가 이 미디어 형식을 지원하지 않습니다.",
},
documentView: {
loadFailed: "문서를 불러오지 못했습니다.",
previousPage: "이전 페이지",
nextPage: "다음 페이지",
inputNotPreviewable: "이 파일 형식은 미리보기를 사용할 수 없습니다",
},
},
toolSettings: {
compress: {
compressionMode: "압축 모드",
targetSize: "목표 크기",
quality: "품질",
smallestFile: "최소 파일",
bestQuality: "최고 품질",
submit: "압축",
submitBatch: "압축 ({count}개 파일)",
progressLabel: "압축 중",
original: "원본: {size} KB",
processed: "처리 후: {size} KB",
saved: "절감: {percent}%",
},
resize: {
customSize: "맞춤 크기",
scale: "스케일",
presets: "프리셋",
contentAware: "콘텐츠 인식",
aspectRatio: "종횡비",
ratioFree: "자유",
ratioOriginal: "원본",
widthPx: "너비 (px)",
heightPx: "높이 (px)",
fitMode: "맞춤 모드",
cropToFit: "크롭하여 맞춤",
fitInside: "내부에 맞춤",
stretch: "늘리기",
limitToOriginalSize: "원본 크기로 제한",
limitToOriginalSizeHint: "이미지가 이미 목표보다 작은 경우 확대하지 않고 원본 유지",
scalePercent: "스케일 (%)",
resizeToSquare: "정사각형으로 리사이즈",
protectFaces: "얼굴 보호",
smoothing: "스무딩",
edgeSensitivity: "엣지 감도",
submit: "리사이즈",
submitBatch: "리사이즈 ({count}개 파일)",
progressLabel: "리사이즈 중",
},
crop: {
aspectRatio: "종횡비",
custom: "맞춤",
positionAndSize: "위치 및 크기",
ruleOfThirds: "삼분할법",
leftOffsetPx: "왼쪽 오프셋 (px)",
topOffsetPx: "상단 오프셋 (px)",
submit: "크롭",
submitBatch: "크롭 ({count}개 파일)",
progressLabel: "크롭 중",
},
rotate: {
rotate: "회전",
angle: "각도",
straighten: "기울기 보정",
flip: "뒤집기",
horizontal: "수평",
vertical: "수직",
resetAllChanges: "모든 변경 초기화",
submit: "적용",
submitBatch: "적용 ({count}개 파일)",
progressLabel: "적용 중",
},
convert: {
targetFormat: "대상 포맷",
sourceFormat: "원본 포맷",
quality: "품질",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"optimize-for-web": {
outputFormat: "출력 포맷",
quality: "품질",
smallestFile: "최소 파일",
bestQuality: "최고 품질",
maxDimensions: "최대 크기",
maxWidth: "최대 너비",
maxHeight: "최대 높이",
stripMetadata: "메타데이터 제거",
sizeComparison: "크기 비교",
optimized: "최적화 후:",
smaller: "{percent}% 축소",
larger: "{percent}% 증가",
submit: "처리 후 다운로드",
submitBatch: "처리 후 다운로드 ({count}개 파일)",
progressLabel: "최적화 중",
},
"strip-metadata": {
currentMetadata: "현재 메타데이터",
readingMetadata: "메타데이터 읽는 중...",
noMetadataFound: "이 이미지에서 메타데이터를 찾을 수 없습니다.",
removeAllMetadata: "모든 메타데이터 제거",
selectSpecific: "또는 특정 메타데이터 선택:",
stripExif: "EXIF 제거 (카메라 정보, 날짜, 노출)",
stripGps: "GPS 제거 (위치 데이터)",
stripIcc: "ICC 제거 (색상 프로파일)",
stripXmp: "XMP 제거 (확장 메타데이터)",
locationFound: "위치 정보 발견",
viewOnMap: "지도에서 보기",
locationWarning:
"이 이미지에 정확한 위치 정보가 포함되어 있습니다. 공유 전에 GPS 데이터 제거를 권장합니다.",
metadataSections: "메타데이터 섹션 {count}개 발견",
metadataSectionsPlural: "메타데이터 섹션 {count}개 발견",
metadataRemoved: "제거된 메타데이터: {size} KB",
submit: "메타데이터 제거",
progressLabel: "메타데이터 제거 중",
},
"edit-metadata": {
readingMetadata: "메타데이터 읽는 중...",
couldNotReadMetadata: "메타데이터를 읽을 수 없습니다. 필드가 빈 상태로 시작됩니다.",
basicInfo: "기본 정보",
description: "설명",
artist: "아티스트",
copyright: "저작권",
software: "소프트웨어",
iptc: "IPTC",
title: "제목",
headline: "헤드라인",
city: "도시",
stateProvince: "시/도",
country: "국가",
dateAndTime: "날짜 및 시간",
editDates: "날짜 편집",
shiftAllDates: "모든 날짜 일괄 이동",
dateModified: "수정일",
dateTaken: "촬영일",
shiftHint: "모든 날짜 필드를 오프셋만큼 이동 (시간대 보정에 유용)",
direction: "방향",
forward: "+ 앞으로",
backward: "- 뒤로",
hoursMinutes: "시:분",
locationGps: "위치 (GPS)",
locationDataFound: "위치 데이터 발견",
noGpsData: "GPS 데이터 없음. 아래에서 좌표를 추가하세요.",
latitude: "위도",
longitude: "경도",
altitudeMeters: "고도 (미터)",
removeAllGpsData: "모든 GPS 데이터 제거",
keywords: "키워드",
addKeywordPlaceholder: "키워드를 입력하고 Enter를 누르세요",
addToExisting: "기존에 추가",
replaceAll: "모두 교체",
allMetadata: "모든 메타데이터",
templates: "템플릿",
templateNamePlaceholder: "템플릿 이름",
uploadPrompt: "메타데이터를 편집하려면 이미지를 업로드하세요.",
changes: "{count}개 변경:",
modified: "{count}개 수정됨",
removed: "{count}개 제거됨",
gpsCleared: "GPS 삭제됨",
gpsAdded: "GPS 추가됨",
datesShifted: "날짜 이동됨",
submit: "메타데이터 적용",
progressLabel: "메타데이터 기록 중",
},
"bulk-rename": {
pattern: "패턴",
patternHint: "변수: {{index}}, {{padded}}, {{original}}",
startIndex: "시작 인덱스",
preview: "미리보기",
andMore: "...외 {count}개 더",
renaming: "이름 변경 중...",
submit: "{count}개 파일 이름 변경",
zipDownloaded: "ZIP 다운로드 완료",
},
"image-to-pdf": {
imageCount: "{count}개의 이미지가 {mode}(으)로 변환됩니다",
imageCountPlural: "{count}개의 이미지가 {mode}(으)로 변환됩니다",
singlePdfMode: "단일 PDF, 페이지당 이미지 1개",
separatePdfMode: "개별 PDF, 이미지당 1개",
combineAllImages: "모든 이미지를 하나의 PDF로 합치기",
pageSize: "페이지 크기",
orientation: "방향",
portrait: "세로",
landscape: "가로",
margin: "여백",
targetSizeLabel: "목표 파일 크기 (선택)",
targetSizePlaceholder: "예: 2",
targetSizeHint: "비워두면 최고 품질",
targetSizeMet: "목표 달성",
targetSizeNotMet: "목표에 도달할 수 없습니다. 최저 품질로 압축되었습니다.",
targetSizeTooSmall: "목표는 최소 50KB여야 합니다",
jpegQualityLabel: "사용된 JPEG 품질",
noImage: "이미지 없음",
submitCollate: "PDF 생성 ({count}페이지)",
submitSeparate: "PDF {count}개 생성",
downloadPdf: "PDF 다운로드",
downloadZip: "ZIP 다운로드",
progressLabel: "PDF 생성 중",
uploadingImages: "이미지 업로드 중...",
processingPages: "{count}페이지 처리 중...",
},
"pdf-to-image": {
dropPdf: "여기에 PDF를 놓거나 클릭하여 선택",
readingPdf: "PDF 읽는 중...",
pageCount: "{count}페이지",
pageCountPlural: "{count}페이지",
outputFormat: "출력 포맷",
quality: "품질",
resolutionDpi: "해상도 (DPI)",
dpiScreen: "화면용",
dpiStandard: "표준",
dpiPrint: "인쇄",
dpiHighQuality: "고품질",
colorMode: "색상 모드",
colorModeColor: "컬러",
colorModeGrayscale: "그레이스케일",
colorModeBw: "흑백",
pages: "페이지",
allPages: "모든 페이지",
pagesHint: "예: 1-3, 5, 8-10 (문서 총 {count}페이지)",
converting: "변환 중...",
submit: "{count}페이지 변환",
submitPlural: "{count}페이지 변환",
downloadAllZip: "전체 다운로드 (ZIP)",
},
favicon: {
uploadHint:
"정사각형 이미지(512x512 이상 권장)를 업로드하여 모든 Favicon 및 앱 아이콘 크기를 생성하세요.",
multipleHint: "{count}개의 이미지 각각이 ZIP 내 별도 폴더에 저장됩니다.",
generatedSizes: "생성 크기 (이미지당)",
plusManifest: "+ manifest.json + HTML 스니펫",
submit: "Favicon 생성 ({count}개 이미지)",
submitPlural: "Favicon 생성 ({count}개 이미지)",
downloadZip: "Favicon ZIP 다운로드",
progressLabel: "Favicon 생성 중",
},
"adjust-colors": {
light: "라이트",
brightness: "밝기",
contrast: "대비",
exposure: "노출",
color: "색상",
saturation: "채도",
temperature: "색온도",
temperatureHint: "차가운 / 따뜻한",
tint: "틴트",
tintHint: "녹색 / 자홍",
hue: "색조",
detail: "디테일",
sharpness: "선명도",
effects: "효과",
none: "없음",
grayscale: "그레이스케일",
sepia: "세피아",
invert: "반전",
colorChannels: "색상 채널",
channelModified: "수정됨",
red: "빨강",
green: "초록",
blue: "파랑",
resetAll: "모두 초기화",
submit: "적용",
submitBatch: "적용 ({count}개 파일)",
progressLabel: "색상 조정 중",
},
sharpening: {
method: "방법",
adaptive: "적응형",
unsharpMask: "언샵 마스크",
highPass: "하이패스",
presets: "프리셋",
textureAmount: "텍스처 양",
amount: "양",
strength: "강도",
noiseReduction: "노이즈 감소",
off: "끔",
lightDenoise: "약함",
mediumDenoise: "보통",
strongDenoise: "강함",
advancedControls: "고급 설정",
radius: "반경",
flatProtection: "평탄 영역 보호",
detailThreshold: "디테일 임계값",
haloLimitLight: "할로 제한 (밝은 부분)",
haloLimitDark: "할로 제한 (어두운 부분)",
threshold: "임계값",
kernelSize: "커널 크기",
submit: "선명하게",
submitBatch: "선명하게 ({count}개 파일)",
progressLabel: "샤프닝 중",
},
"replace-color": {
sourceColor: "원본 색상 (교체 대상)",
targetColor: "대상 색상 (교체할 색상)",
makeTransparent: "투명으로 교체",
tolerance: "허용 범위",
exactMatch: "정확히 일치",
wideRange: "넓은 범위",
submit: "색상 교체",
submitBatch: "색상 교체 ({count}개 파일)",
progressLabel: "색상 교체 중",
},
"color-blindness": {
simulationType: "시뮬레이션 유형",
redGreen: "적록 색각 이상",
blueYellow: "청황 색각 이상",
monochromatic: "전색맹",
submit: "시뮬레이션",
submitBatch: "시뮬레이션 ({count}개 파일)",
progressLabel: "색각 시뮬레이션 중",
},
"remove-background": {
subject: "피사체",
people: "인물",
products: "제품",
general: "일반",
passportIdPhoto: "증명사진",
quality: "품질",
fast: "빠름",
hd: "HD",
max: "최고",
ultra: "울트라",
background: "배경",
transparent: "투명",
bgColor: "색상",
gradient: "그라데이션",
image: "이미지",
gradientDirection: "방향",
chooseBackgroundImage: "배경 이미지 선택",
effectsSection: "효과",
effectsActive: "활성",
blurBackground: "배경 블러",
intensity: "강도",
addShadow: "그림자 추가",
opacity: "불투명도",
outputFormat: "출력 형식",
edgeSmoothing: "가장자리 다듬기",
edgeSmoothingOff: "끄기",
edgeSmoothingLight: "약하게",
edgeSmoothingMedium: "보통",
edgeSmoothingStrong: "강하게",
colorDecontamination: "색상 오염 제거",
rendering: "렌더링 중...",
submit: "배경 제거",
submitBatch: "배경 제거 ({count}개 파일)",
progressLabel: "배경 제거 중",
},
"remove-gif-background": {
quality: "품질",
qualityFast: "빠름",
qualityBalanced: "균형",
qualityBest: "최고",
qualityNote: "모든 프레임이 모델을 거치므로, 긴 클립에서는 품질이 높을수록 훨씬 느립니다.",
outputFormat: "출력 형식",
formatWebp: "WebP",
formatApng: "APNG",
formatGif: "GIF",
formatWebpHint: "WebP와 APNG는 매끄럽고 완전한 투명도를 유지합니다.",
gifCaveat: "GIF는 1비트 투명도만 지원해서 가장자리가 딱딱하게 보입니다.",
background: "배경",
bgTransparent: "투명",
bgColor: "색상",
bgGradient: "그라데이션",
bgBlur: "블러",
bgImage: "이미지",
gradientStart: "시작",
gradientEnd: "끝",
gradientAngle: "각도 ({deg}°)",
blurStrength: "블러 강도 ({value})",
shadow: "그림자 추가",
shadowStrength: "그림자 불투명도 ({value})",
advanced: "고급",
edgeRefine: "가장자리 다듬기 (레벨 {level})",
edgeRefineOff: "가장자리 다듬기: 끄기",
decontaminate: "색상 번짐 제거",
uploadBg: "배경 이미지 업로드",
frameNote: "모든 프레임을 처리하므로 긴 애니메이션은 느립니다. GPU를 권장합니다.",
submit: "배경 제거",
submitBatch: "배경 제거 ({count}개 파일)",
progressLabel: "프레임에서 배경 제거 중",
download: "다운로드",
},
upscale: {
scaleFactor: "확대 배율",
quality: "품질",
enhanceFaces: "얼굴 향상",
noiseReduction: "노이즈 감소",
noiseReductionHint:
"입자와 노이즈를 스무딩합니다. 값이 높을수록 노이즈 제거가 강하지만 디테일이 부드러워질 수 있습니다.",
outputFormat: "출력 포맷",
submit: "{scale}배 확대",
submitBatch: "{scale}배 확대 ({count}개 파일)",
progressLabel: "이미지 업스케일 중",
progressLabelBatch: "{count}개 이미지 업스케일 중",
},
"erase-object": {
brushMode: "브러시",
lassoMode: "올가미",
brushSize: "브러시 크기",
fine: "가늘게",
wide: "굵게",
undo: "실행 취소",
clear: "지우기",
outputFormat: "출력 포맷",
quality: "품질",
paintHint: "제거할 객체 위를 칠하세요. Ctrl+Z로 실행 취소할 수 있습니다.",
lassoHint: "제거할 객체 주위에 올가미를 그리세요. Ctrl+Z로 실행 취소할 수 있습니다.",
submit: "객체 지우기",
submitBatch: "모두 지우기 ({count})",
progressLabel: "객체 지우는 중",
},
ocr: {
quality: "품질",
enhanceBeforeScanning: "스캔 전 향상",
enhanceHint:
"인식 전에 국소 대비를 개선합니다. 빠름은 직접 적용하고, 균형 및 최고는 보정된 점수가 결과를 개선할 때만 해당 버전을 사용합니다.",
fastKoreanUnsupported:
"빠른 OCR은 한국어를 지원하지 않습니다. 정확한 OCR 팩을 설치하고 균형 또는 최고를 선택하세요.",
language: "언어",
autoDetect: "자동 감지",
extractedText: "추출된 텍스트",
noTextDetected: "이 이미지에서 텍스트가 감지되지 않았습니다",
characters: "{count}자",
submit: "텍스트 추출",
submitBatch: "텍스트 추출 ({count}개 파일)",
progressLabel: "텍스트 추출 중",
},
"ocr-pdf": {
quality: "품질",
language: "언어",
autoDetect: "자동 감지",
pages: "페이지",
pagesPlaceholder: "전체, 1-3, 5",
pagesHint: "페이지 번호 또는 범위를 입력하세요 (예: 1-3, 5, 8-10). 최대 50페이지.",
submit: "텍스트 추출",
submitBatch: "텍스트 추출 ({count}개 파일)",
progressLabel: "PDF에서 텍스트 추출 중",
},
"blur-faces": {
blurRadius: "블러 반경",
blurLight: "약하게",
blurHeavy: "강하게",
detectionSensitivity: "감지 감도",
moreFaces: "더 많은 얼굴",
fewerFaces: "더 적은 얼굴",
submit: "얼굴 블러",
progressLabel: "얼굴 블러 중",
},
"enhance-faces": {
quality: "품질",
enhancementStrength: "향상 강도",
onlyCenterFace: "중앙 얼굴만",
detectionSensitivity: "감지 감도",
submit: "얼굴 향상",
submitBatch: "얼굴 향상 ({count}개 파일)",
progressLabel: "얼굴 향상 중",
},
"smart-crop": {
subjectFocus: "피사체 포커스",
faceFocus: "얼굴 포커스",
autoTrim: "자동 트림",
customSize: "맞춤 크기",
socialPresets: "소셜 미디어 프리셋",
detectionStrategy: "감지 전략",
detectionStrategyHint:
"어텐션은 시각적으로 가장 두드러진 영역을 찾습니다. 엔트로피는 디테일과 정보가 가장 풍부한 영역을 찾습니다.",
attention: "어텐션",
entropy: "엔트로피",
padding: "패딩",
paddingHint: "포커스 영역 주변 여분의 공간",
outputQuality: "출력 품질",
outputQualityHint: "JPEG 및 WebP 출력용. PNG는 항상 무손실입니다.",
subjectDescription: "현저성 분석으로 가장 흥미로운 영역을 감지하고 목표 크기로 크롭합니다.",
framing: "프레이밍",
facePadding: "얼굴 여백",
facePaddingHint: "감지된 얼굴 주변의 여분의 공간",
fewerFalsePositives: "오탐지 줄이기",
faceDescription:
"AI 얼굴 감지로 얼굴을 적절하게 프레이밍합니다. 얼굴이 감지되지 않으면 피사체 포커스로 전환됩니다.",
trimTolerance: "허용치",
trimDescription:
"테두리 픽셀이 엣지 색상과 얼마나 다를 수 있는지. 값이 높을수록 더 적극적으로 트림합니다.",
padToSquare: "정사각형으로 패딩",
targetSizePx: "목표 크기 (px)",
padColor: "패딩 색상",
trimHint:
"피사체 주변의 단색 테두리를 제거합니다. '정사각형으로 패딩'을 활성화하면 전자상거래용 이미지에 적합합니다.",
submitSubject: "스마트 크롭",
submitFace: "얼굴 크롭",
submitTrim: "테두리 트림",
},
imageEnhancement: {
enhancementMode: "향상 모드",
auto: "자동",
portrait: "인물",
landscape: "풍경",
lowLight: "저조도",
food: "음식",
document: "문서",
intensity: "강도",
deepEnhance: "딥 향상 (AI)",
deepEnhanceDescription: "AI로 노이즈 및 아티팩트 제거",
deepEnhanceRequires: "업스케일 및 향상 번들 필요",
analyzingImage: "이미지 분석 중...",
detectedIssues: "감지된 문제",
imageLooksGood: "이미지가 좋아 보입니다. 강도 슬라이더로 미세 조정하세요.",
issueUnderexposed: "노출 부족",
issueOverexposed: "과다 노출",
issueLowContrast: "낮은 대비",
issueColorCast: "색상 편향",
issueDesaturated: "채도 부족",
issueSoftFocus: "소프트 포커스",
issueNoisy: "노이즈 많음",
submit: "향상",
submitDeep: "딥 향상",
submitBatch: "향상 ({count}개 파일)",
submitDeepBatch: "딥 향상 ({count}개 파일)",
progressLabel: "이미지 향상 중",
progressLabelBatch: "{count}개 이미지 향상 중",
},
"noise-removal": {
denoisingTier: "노이즈 제거 레벨",
quick: "빠름",
balanced: "균형",
quality: "고품질",
maximum: "최고",
quickDesc: "빠르고 가벼운",
balancedDesc: "좋은 품질, 적당한 속도",
qualityDesc: "AI 기반, 느림",
maximumDesc: "최고의 AI 모델, 가장 느림",
strength: "강도",
subtle: "약하게",
aggressive: "강하게",
detailPreservation: "디테일 보존",
smooth: "부드럽게",
sharp: "선명하게",
colorNoise: "컬러 노이즈",
heavy: "강함",
outputFormat: "출력 포맷",
gifAiWarning:
"GIF 파일의 AI 노이즈 제거는 첫 번째 프레임만 처리합니다. 애니메이션 GIF에는 빠름 또는 균형 레벨을 사용하세요.",
submit: "노이즈 제거",
submitBatch: "노이즈 제거 ({count}개 파일)",
progressLabel: "노이즈 제거 중",
progressLabelBatch: "{count}개 이미지 노이즈 제거 중",
},
"red-eye-removal": {
sensitivity: "감도",
strict: "엄격",
aggressive: "적극적",
correctionStrength: "보정 강도",
subtle: "약하게",
dark: "어둡게",
outputFormat: "출력 포맷",
quality: "품질",
submit: "적목 보정",
submitBatch: "적목 보정 ({count}개 파일)",
progressLabel: "적목 보정 중",
progressLabelBatch: "{count}개 이미지 적목 보정 중",
},
"restore-photo": {
scratchRemoval: "긁힘 복원",
scratchRemovalDesc: "긁힘, 찢어짐, 얼룩 감지 및 복원",
faceEnhancement: "얼굴 향상",
faceEnhancementDesc: "CodeFormer AI로 열화된 얼굴 복원",
faceFidelity: "얼굴 충실도",
enhanced: "향상",
faithful: "충실",
noiseReduction: "노이즈 감소",
noiseReductionDesc: "오래된 사진의 입자 및 노이즈 제거",
denoiseStrength: "노이즈 제거 강도",
autoColorize: "자동 컬러화",
autoColorizeDesc: "DDColor AI로 흑백 사진 컬러화",
colorizeStrength: "컬러화 강도",
vivid: "선명하게",
submit: "사진 복원",
submitBatch: "사진 복원 ({count})",
progressLabel: "사진 복원 중",
progressLabelBatch: "{count}개 사진 복원 중",
},
"content-aware-resize": {
widthPx: "너비 (px)",
heightPx: "높이 (px)",
resizeToSquare: "정사각형으로 리사이즈",
protectFaces: "얼굴 보호",
protectFacesHint: "얼굴 감지를 사용하여 얼굴 영역을 감지하고 심 제거로부터 보호",
smoothing: "스무딩",
edgeSensitivity: "엣지 감도",
submit: "리사이즈",
submitBatch: "리사이즈 ({count}개 파일)",
progressLabel: "콘텐츠 인식 리사이즈 중",
},
"ai-canvas-expand": {
quality: "품질",
fast: "빠름",
balanced: "균형",
highQuality: "고품질",
fastDesc: "빠른 미리보기, 적은 AI 처리",
balancedDesc: "좋은 품질, 적당한 속도",
highQualityDesc: "최고의 결과, 느림",
extendToAspectRatio: "종횡비로 확장",
extendByPixels: "확장 픽셀 수",
top: "위",
right: "오른쪽",
bottom: "아래",
left: "왼쪽",
newSize: "새 크기: {width} x {height}",
submit: "캔버스 확장",
submitBatch: "확장 ({count}개 파일)",
progressLabel: "캔버스 확장 중",
},
colorize: {
aiModel: "AI 모델",
fast: "빠름",
fastDesc: "빠른 결과",
balanced: "균형",
balancedDesc: "최선의 사용 가능 모델",
best: "최고",
bestDesc: "최고 품질",
colorIntensity: "색상 강도",
grayscaleLabel: "그레이스케일",
subtleLabel: "은은하게",
naturalLabel: "자연스럽게",
vividLabel: "선명하게",
intensityHint: "낮은 값일수록 더 차분한 빈티지 스타일 색상을 생성합니다.",
strength: "컬러화 강도",
submit: "컬러화",
submitBatch: "컬러화 ({count}개 파일)",
progressLabel: "컬러화 중",
progressLabelBatch: "{count}개 이미지 컬러화 중",
},
"passport-photo": {
country: "국가",
searchCountries: "국가 검색...",
noCountriesFound: "국가를 찾을 수 없습니다",
customDimensions: "맞춤 크기",
documentType: "문서 유형",
dimensionsMm: "크기 (mm)",
dpi: "DPI",
pixelsPerInch: "인치당 픽셀",
backgroundColor: "배경색",
maxFileSize: "최대 파일 크기",
noLimit: "제한 없음",
customKb: "맞춤 KB...",
uploadPortrait: "초상 사진 업로드",
uploadHint: "왼쪽 패널에 이미지를 드롭하거나 업로드하여 증명사진을 미리보기",
analyzingPhoto: "사진 분석 중",
detectingLandmarks: "얼굴 특징 감지 및 배경 제거 중...",
generatePassportPhoto: "증명사진 생성",
generating: "생성 중...",
downloadPhoto: "사진 다운로드",
faceCentered: "얼굴 중앙 배치",
headLevel: "머리 수평",
lookingStraight: "정면 응시",
faceSize: "얼굴 크기",
whatYouSee: "보이는 그대로 다운로드됩니다",
dragToAdjust: "드래그하여 조정",
scrollToZoom: "스크롤하여 확대/축소",
photoGenerated: "사진이 생성되었습니다. 왼쪽 패널에서 다운로드하세요.",
},
"transcribe-audio": {
language: "언어",
autoDetect: "자동 감지",
outputFormat: "출력 형식",
plainText: "일반 텍스트",
submit: "전사",
submitBatch: "전사 ({count}개 파일)",
progressLabel: "오디오 전사 중",
},
"auto-subtitles": {
language: "언어",
autoDetect: "자동 감지",
format: "자막 형식",
submit: "자막 생성",
submitBatch: "자막 생성 ({count}개 파일)",
progressLabel: "자막 생성 중",
},
"transparency-fixer": {
description: "가짜 투명 배경의 PNG를 업로드하면 원클릭으로 수정해 드립니다.",
removeWatermark: "워터마크 제거",
removeWatermarkHelp: "반투명 워터마크 감지 및 제거",
requiresEraser: "객체 지우기 번들 필요",
advanced: "고급",
defringe: "디프린지",
outputFormat: "출력 포맷",
submit: "투명도 수정",
submitBatch: "투명도 수정 ({count}개 파일)",
progressLabel: "투명도 수정 중",
},
"background-replace": {
color: "배경 색상",
submit: "배경 교체",
submitBatch: "배경 교체 ({count}개 파일)",
progressLabel: "배경 교체 중",
},
"blur-background": {
intensity: "흐림 강도",
submit: "배경 흐리게",
submitBatch: "배경 흐리게 ({count}개 파일)",
progressLabel: "배경 흐리게 처리 중",
},
"watermark-text": {
watermarkText: "워터마크 텍스트",
fontSize: "글꼴 크기",
color: "색상",
opacity: "불투명도",
position: "위치",
rotation: "회전",
center: "중앙",
topLeft: "왼쪽 상단",
topRight: "오른쪽 상단",
bottomLeft: "왼쪽 하단",
bottomRight: "오른쪽 하단",
tiled: "타일",
submit: "워터마크 추가",
submitBatch: "워터마크 추가 ({count}개 파일)",
progressLabel: "워터마크 추가 중",
},
"watermark-image": {
uploadWatermark: "워터마크 이미지 업로드",
position: "위치",
opacity: "불투명도",
scale: "스케일",
submit: "워터마크 적용",
submitBatch: "워터마크 적용 ({count}개 파일)",
},
"text-overlay": {
text: "텍스트",
fontSize: "글꼴 크기",
color: "색상",
position: "위치",
top: "위",
center: "중앙",
bottom: "아래",
backgroundBox: "배경 박스",
backgroundColor: "배경색",
shadow: "그림자",
submit: "텍스트 추가",
submitBatch: "텍스트 추가 ({count}개 파일)",
progressLabel: "텍스트 오버레이 추가 중",
download: "다운로드",
defaultText: "여기에 텍스트 입력",
},
compose: {
uploadOverlay: "오버레이 이미지 업로드",
xPosition: "X 위치",
yPosition: "Y 위치",
opacity: "불투명도",
blendMode: "블렌드 모드",
submit: "합성",
},
"meme-generator": {
selectTemplate: "갤러리에서 템플릿을 선택하거나 나만의 이미지를 업로드하여 시작하세요.",
chooseLayout: "커스텀 이미지의 텍스트 레이아웃을 선택하세요.",
textContent: "텍스트 내용",
textStyle: "텍스트 스타일",
font: "글꼴",
fontSize: "글꼴 크기",
textColor: "텍스트 색상",
strokeColor: "외곽선 색상",
allCaps: "전체 대문자",
generate: "Meme 생성",
generating: "생성 중...",
downloadMeme: "Meme 다운로드",
backToGallery: "갤러리로 돌아가기",
},
info: {
loadingInfo: "정보 로딩 중...",
filename: "파일명",
fileSize: "파일 크기",
dimensions: "크기",
format: "포맷",
channels: "채널",
colorSpace: "색상 공간",
density: "밀도",
bitDepth: "비트 심도",
progressive: "프로그레시브",
pages: "페이지 수",
hasAlpha: "Alpha 채널",
hasProfile: "프로파일",
hasExif: "EXIF",
hasIcc: "ICC",
hasXmp: "XMP",
readInfo: "정보 읽기",
reading: "읽는 중...",
channelStats: "채널 통계",
yes: "예",
no: "아니오",
na: "해당 없음",
failedToRead: "정보를 읽지 못했습니다",
},
compare: {
uploadSecondImage: "두 번째 이미지 업로드",
similarity: "유사도: {percent}%",
submit: "비교",
downloadDiff: "차이 이미지 다운로드",
},
"find-duplicates": {
preset: "프리셋",
exact: "정확히 일치",
similar: "유사",
loose: "느슨하게",
exactDesc: "픽셀 단위로 동일한 복사본, 다른 포맷의 같은 이미지.",
similarDesc: "리사이즈, 재압축 또는 가볍게 편집된 복사본.",
looseDesc: "시각적으로 관련된 이미지, 가벼운 크롭, 다른 노출.",
threshold: "임계값",
submit: "중복 스캔",
scanning: "스캔 중...",
},
"color-palette": {
submit: "팔레트 추출",
extracting: "추출 중...",
dominantColors: "주요 색상",
clickToCopy: "클릭하여 복사",
},
"qr-generate": {
contentType: "콘텐츠 유형",
url: "URL",
text: "텍스트",
wifi: "WiFi",
vcard: "vCard",
email: "이메일",
phone: "전화",
sms: "SMS",
styling: "스타일링",
dotStyle: "도트 스타일",
cornerSquareStyle: "코너 사각 스타일",
cornerDotStyle: "코너 도트 스타일",
foregroundColor: "전경색",
bgColor: "배경색",
logo: "로고",
downloadFormat: "다운로드 포맷",
submit: "QR 코드 생성",
download: "QR 코드 다운로드",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "HTML 파일",
htmlFile: "HTML 파일",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "출력 형식",
quality: "품질",
devicePreset: "기기",
viewportWidth: "너비",
viewportHeight: "높이",
fullPage: "전체 페이지",
submit: "캡처",
download: "스크린샷 다운로드",
capturing: "웹페이지 캡처 중...",
errorTimeout: "페이지 로딩 시간이 초과되었습니다",
errorBlocked: "이 URL은 캡처할 수 없습니다",
errorUnavailable: "스크린샷 서비스를 사용할 수 없습니다",
errorFailed: "페이지 캡처에 실패했습니다",
placeholder: "URL을 입력하고 캡처를 클릭하세요",
presets: {
desktop: "데스크톱",
tablet: "태블릿",
mobile: "모바일",
custom: "사용자 지정",
},
},
"barcode-read": {
submit: "바코드 스캔",
submitBatch: "스캔 ({count}개 파일)",
scanning: "스캔 중...",
noBarcodesFound: "바코드를 찾을 수 없습니다",
barcodesFound: "바코드 {count}개 발견",
barcodesFoundPlural: "바코드 {count}개 발견",
},
collage: {
template: "템플릿",
aspectRatio: "종횡비",
gap: "간격",
cornerRadius: "모서리 반경",
backgroundColor: "배경색",
outputFormat: "출력 포맷",
quality: "품질",
submit: "콜라주 만들기",
downloadCollage: "콜라주 다운로드",
},
stitch: {
direction: "방향",
horizontal: "가로",
vertical: "세로",
grid: "그리드",
gridColumns: "그리드 열 수",
resizeMode: "리사이즈 모드",
fit: "맞춤",
original: "원본",
stretchMode: "늘리기",
cropMode: "크롭",
alignment: "정렬",
start: "시작",
center: "중앙",
end: "끝",
gap: "간격",
border: "테두리",
cornerRadius: "모서리 반경",
backgroundColor: "배경색",
outputFormat: "출력 포맷",
quality: "품질",
submit: "이미지 결합",
},
split: {
modeGrid: "그리드",
modeTileSize: "타일 크기",
presets: "프리셋",
columns: "열 수",
rows: "행 수",
tileWidth: "타일 너비",
tileHeight: "타일 높이",
outputFormat: "출력 포맷",
quality: "품질",
submit: "이미지 분할",
downloadAll: "전체 다운로드 (ZIP)",
},
border: {
presets: "프리셋",
borderWidth: "테두리 너비",
borderColor: "테두리 색상",
padding: "패딩",
paddingColor: "패딩 색상",
cornerRadius: "모서리 반경",
shadow: "그림자",
shadowBlur: "그림자 블러",
shadowOffsetX: "그림자 오프셋 X",
shadowOffsetY: "그림자 오프셋 Y",
shadowColor: "그림자 색상",
shadowOpacity: "그림자 불투명도",
submit: "테두리 추가",
submitBatch: "테두리 추가 ({count}개 파일)",
progressLabel: "테두리 추가 중",
},
beautify: {
preset: "프리셋",
backgroundType: "배경 유형",
solidColor: "단색",
linearGradient: "선형 그라데이션",
radialGradient: "방사형 그라데이션",
customImage: "커스텀 이미지",
gradientAngle: "그라데이션 각도",
padding: "패딩",
borderRadius: "모서리 반경",
shadowPreset: "그림자 프리셋",
deviceFrame: "디바이스 프레임",
submit: "꾸미기",
submitBatch: "꾸미기 ({count}개 파일)",
progressLabel: "스크린샷 꾸미는 중",
},
"circle-crop": {
submit: "원형 크롭",
submitBatch: "원형 크롭 ({count}개 파일)",
progressLabel: "원형으로 크롭 중",
},
duotone: {
shadow: "그림자 색상",
highlight: "하이라이트 색상",
submit: "듀오톤 적용",
submitBatch: "듀오톤 적용 ({count}개 파일)",
progressLabel: "듀오톤 적용 중",
},
"image-pad": {
target: "목표 비율",
color: "배경 색상",
submit: "이미지 패딩",
submitBatch: "이미지 패딩 ({count}개 파일)",
progressLabel: "이미지 패딩 중",
},
pixelate: {
blockSize: "블록 크기",
submit: "픽셀화",
submitBatch: "픽셀화 ({count}개 파일)",
progressLabel: "픽셀화 중",
},
vignette: {
strength: "강도",
color: "비네트 색상",
submit: "비네트 적용",
submitBatch: "비네트 적용 ({count}개 파일)",
progressLabel: "비네트 적용 중",
},
"gif-webp": {
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "애니메이션 변환 중",
},
histogram: {
submit: "히스토그램 생성",
submitBatch: "히스토그램 생성 ({count}개 파일)",
progressLabel: "히스토그램 생성 중",
},
"lqip-placeholder": {
width: "너비",
blur: "블러",
submit: "플레이스홀더 생성",
submitBatch: "플레이스홀더 생성 ({count}개 파일)",
progressLabel: "플레이스홀더 생성 중",
},
"sprite-sheet": {
columns: "열 수",
padding: "여백",
background: "배경 색상",
submit: "스프라이트 시트 생성",
submitBatch: "스프라이트 시트 생성",
progressLabel: "스프라이트 시트 생성 중",
},
"svg-to-raster": {
outputFormat: "출력 포맷",
sizing: "크기 설정",
scaleMode: "스케일",
customMode: "맞춤",
scalePresets: "스케일 프리셋",
dpiPresets: "DPI 프리셋",
customWidth: "너비 (px)",
customHeight: "높이 (px)",
background: "배경",
bgTransparent: "투명",
bgColor: "색상",
quality: "품질",
submit: "SVG 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "SVG 변환 중",
},
vectorize: {
preset: "프리셋",
logo: "로고",
illustration: "일러스트",
photo: "사진",
sketch: "스케치",
customPreset: "맞춤",
colorMode: "색상 모드",
bw: "흑백",
colorModeColor: "컬러",
threshold: "임계값",
colorPrecision: "색상 정밀도",
layerDifference: "레이어 차이",
filterSpeckle: "스펙클 필터",
pathMode: "패스 모드",
cornerThreshold: "코너 임계값",
invertColors: "색상 반전",
submit: "벡터화",
submitBatch: "벡터화 ({count}개 파일)",
progressLabel: "벡터화 중",
},
"gif-tools": {
mode: "모드",
resize: "리사이즈",
optimize: "최적화",
speed: "속도",
reverse: "역재생",
extract: "추출",
rotateMode: "회전",
pixel: "픽셀",
percentage: "퍼센트",
colors: "색상 수",
dither: "디더링",
effort: "처리 강도",
speedFactor: "속도 배율",
loopControl: "루프 제어",
infinite: "무한",
once: "한 번",
customLoop: "맞춤",
loopCount: "루프 횟수",
extractSingle: "단일",
extractRange: "범위",
extractAll: "전체",
frameNumber: "프레임 번호",
frameStart: "시작 프레임",
frameEnd: "끝 프레임",
extractFormat: "포맷",
submit: "GIF 처리",
submitBatch: "처리 ({count}개 파일)",
progressLabel: "GIF 처리 중",
},
"image-to-base64": {
outputFormat: "출력 포맷",
keepOriginal: "원본 포맷 유지",
quality: "품질",
maxWidth: "최대 너비",
maxHeight: "최대 높이",
submit: "Base64로 변환",
submitBatch: "변환 ({count}개 파일)",
copyBase64: "Base64 복사",
copyDataUri: "Data URI 복사",
copyImgTag: "<img> 태그 복사",
copyCssUrl: "CSS url() 복사",
},
"barcode-generate": {
text: "텍스트",
type: "바코드 유형",
scale: "크기",
includeText: "텍스트 포함",
submit: "바코드 생성",
download: "바코드 다운로드",
},
"chart-maker": {
kind: "차트 유형",
title: "제목",
width: "너비",
height: "높이",
submit: "차트 생성",
submitBatch: "차트 생성 ({count}개 파일)",
progressLabel: "차트 생성 중",
},
"enhance-faces-standalone": {
model: "모델",
fast: "빠름",
balanced: "균형",
best: "최고",
},
"convert-video": {
format: "출력 형식",
quality: "품질",
high: "높음",
balanced: "균형",
small: "최소",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"compress-video": {
quality: "압축",
light: "약하게",
balanced: "균형",
strong: "강하게",
resolution: "해상도",
original: "원본",
submit: "압축",
submitBatch: "압축 ({count}개 파일)",
progressLabel: "압축 중",
},
"trim-video": {
start: "시작 (초)",
end: "끝 (초)",
precise: "프레임 정밀 (재인코딩)",
submit: "트리밍",
submitBatch: "트리밍 ({count}개 파일)",
progressLabel: "트리밍 중",
},
"mute-video": {
submit: "오디오 제거",
submitBatch: "오디오 제거 ({count}개 파일)",
progressLabel: "음소거 중",
},
"video-to-gif": {
fps: "초당 프레임 수",
width: "너비 (px)",
start: "시작 (초)",
duration: "재생 시간 (초)",
submit: "GIF 생성",
submitBatch: "GIF 생성 ({count}개 파일)",
progressLabel: "GIF 생성 중",
},
"resize-video": {
preset: "프리셋",
width: "너비 (px)",
height: "높이 (px)",
hint: "가로세로 비율을 유지하려면 한 값을 비워두세요",
submit: "크기 조정",
submitBatch: "크기 조정 ({count}개 파일)",
progressLabel: "크기 조정 중",
},
"crop-video": {
width: "너비 (px)",
height: "높이 (px)",
x: "X 오프셋",
y: "Y 오프셋",
submit: "크롭",
submitBatch: "크롭 ({count}개 파일)",
progressLabel: "크롭 중",
},
"rotate-video": {
transform: "변형",
cw90: "시계 방향 90도 회전",
ccw90: "반시계 방향 90도 회전",
rotate180: "180도 회전",
hflip: "좌우 반전",
vflip: "상하 반전",
submit: "회전",
submitBatch: "회전 ({count}개 파일)",
progressLabel: "회전 중",
},
"change-fps": {
fps: "초당 프레임 수",
submit: "FPS 변경",
submitBatch: "FPS 변경 ({count}개 파일)",
progressLabel: "FPS 변경 중",
},
"video-color": {
brightness: "밝기",
contrast: "대비",
saturation: "채도",
gamma: "감마",
submit: "적용",
submitBatch: "적용 ({count}개 파일)",
progressLabel: "색상 조정 중",
},
"video-speed": {
factor: "속도 배율",
keepPitch: "원래 음높이 유지",
submit: "속도 변경",
submitBatch: "속도 변경 ({count}개 파일)",
progressLabel: "속도 변경 중",
},
"reverse-video": {
hint: "5분 이하의 클립만 지원됩니다",
submit: "역재생",
submitBatch: "역재생 ({count}개 파일)",
progressLabel: "역재생 중",
},
"video-loudnorm": {
hint: "오디오를 EBU R128 방송 표준으로 정규화합니다",
submit: "정규화",
submitBatch: "정규화 ({count}개 파일)",
progressLabel: "정규화 중",
},
"aspect-pad": {
target: "목표 비율",
color: "배경 색상",
colorHint: "HEX 색상, 예: #000000",
submit: "패딩",
submitBatch: "패딩 ({count}개 파일)",
progressLabel: "패딩 중",
},
"blur-pad": {
target: "목표 비율",
blur: "블러 강도",
submit: "패딩",
submitBatch: "패딩 ({count}개 파일)",
progressLabel: "패딩 중",
},
"watermark-video": {
text: "워터마크 텍스트",
position: "위치",
fontSize: "글꼴 크기",
opacity: "불투명도",
color: "색상",
colorHint: "HEX 색상, 예: #ffffff",
submit: "워터마크",
submitBatch: "워터마크 ({count}개 파일)",
progressLabel: "워터마크 적용 중",
},
"stabilize-video": {
smoothing: "부드러움",
hint: "2패스로 처리하며 대부분의 도구보다 시간이 더 걸립니다",
submit: "손떨림 보정",
submitBatch: "손떨림 보정 ({count}개 파일)",
progressLabel: "손떨림 보정 중",
},
"gif-to-video": {
format: "출력 형식",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"video-to-webp": {
fps: "초당 프레임 수",
width: "너비 (px)",
quality: "품질",
loop: "애니메이션 반복",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"video-to-frames": {
mode: "추출 모드",
modeAll: "전체 프레임",
modeNth: "N번째 프레임마다",
modeTimestamps: "특정 타임스탬프",
n: "N번째 프레임마다 추출",
timestamps: "타임스탬프 (초)",
timestampsHint: "쉼표로 구분, 예: 0.5, 2, 4.5",
format: "이미지 형식",
submit: "프레임 추출",
submitBatch: "프레임 추출 ({count}개 파일)",
progressLabel: "프레임 추출 중",
},
"merge-videos": {
hint: "업로드 순서대로 파일이 결합됩니다",
submit: "병합",
submitBatch: "병합 ({count}개 파일)",
progressLabel: "병합 중",
},
"replace-audio": {
hint: "먼저 영상을 업로드한 다음 오디오를 업로드하세요",
submit: "오디오 교체",
submitBatch: "오디오 교체 ({count}개 파일)",
progressLabel: "오디오 교체 중",
},
"burn-subtitles": {
fontSize: "글꼴 크기",
hint: "영상과 자막 파일(.srt 또는 .vtt)을 업로드하세요",
submit: "자막 입히기",
submitBatch: "자막 입히기 ({count}개 파일)",
progressLabel: "자막 입히는 중",
},
"embed-subtitles": {
language: "언어 코드",
languageHint: "ISO 639-2 세 글자 코드, 예: eng, spa, fra",
submit: "자막 삽입",
submitBatch: "자막 삽입 ({count}개 파일)",
progressLabel: "자막 삽입 중",
},
"extract-subtitles": {
submit: "자막 추출",
submitBatch: "자막 추출 ({count}개 파일)",
progressLabel: "자막 추출 중",
},
"images-to-video": {
secondsPerImage: "이미지당 초",
resolution: "해상도",
fps: "초당 프레임 수",
submit: "영상 생성",
submitBatch: "영상 생성 ({count}개 파일)",
progressLabel: "슬라이드쇼 생성 중",
},
"video-metadata": {
hint: "메타데이터 보고서가 결과에 표시됩니다",
submit: "메타데이터 제거",
submitBatch: "메타데이터 제거 ({count}개 파일)",
progressLabel: "메타데이터 제거 중",
},
"convert-audio": {
format: "출력 형식",
bitrate: "비트레이트 (kbps)",
sampleRate: "샘플 레이트 (Hz)",
sampleRatePreserve: "원본 유지",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"trim-audio": {
start: "시작 (초)",
end: "끝 (초)",
submit: "트리밍",
submitBatch: "트리밍 ({count}개 파일)",
progressLabel: "트리밍 중",
},
"extract-audio": {
format: "출력 형식",
submit: "추출",
submitBatch: "추출 ({count}개 파일)",
progressLabel: "추출 중",
},
"volume-adjust": {
"gain-db": "게인 (dB)",
submit: "볼륨 조정",
submitBatch: "볼륨 조정 ({count}개 파일)",
progressLabel: "볼륨 조정 중",
},
"normalize-audio": {
hint: "EBU R128 라우드니스 정규화",
submit: "정규화",
submitBatch: "정규화 ({count}개 파일)",
progressLabel: "정규화 중",
},
"fade-audio": {
"fade-in-s": "페이드 인 (초)",
"fade-out-s": "페이드 아웃 (초)",
submit: "페이드 적용",
submitBatch: "페이드 적용 ({count}개 파일)",
progressLabel: "페이드 적용 중",
},
"reverse-audio": {
submit: "역재생",
submitBatch: "역재생 ({count}개 파일)",
progressLabel: "역재생 중",
},
"audio-speed": {
factor: "속도 배수",
submit: "속도 변경",
submitBatch: "속도 변경 ({count}개 파일)",
progressLabel: "속도 변경 중",
},
"pitch-shift": {
semitones: "반음",
hint: "0 반음은 허용되지 않습니다",
submit: "피치 변경",
submitBatch: "피치 변경 ({count}개 파일)",
progressLabel: "피치 변경 중",
},
"audio-channels": {
mode: "채널 모드",
"stereo-to-mono": "스테레오에서 모노로",
"mono-to-stereo": "모노에서 스테레오로",
swap: "좌/우 채널 교체",
submit: "채널 변환",
submitBatch: "채널 변환 ({count}개 파일)",
progressLabel: "채널 변환 중",
},
"silence-removal": {
"threshold-db": "무음 임계값 (dB)",
"min-silence-s": "최소 무음 길이(초)",
submit: "무음 제거",
submitBatch: "무음 제거 ({count}개 파일)",
progressLabel: "무음 제거 중",
},
"noise-reduction": {
strength: "강도",
light: "약하게",
medium: "보통",
strong: "강하게",
submit: "노이즈 감소",
submitBatch: "노이즈 감소 ({count}개 파일)",
progressLabel: "노이즈 감소 중",
},
"merge-audio": {
format: "출력 형식",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "파일은 업로드 순서대로 결합됩니다",
submit: "오디오 병합",
submitBatch: "오디오 병합 ({count}개 파일)",
progressLabel: "오디오 병합 중",
},
"split-audio": {
mode: "분할 모드",
time: "시간 기준",
parts: "균등 분할",
silence: "무음 기준",
"segment-s": "구간 길이(초)",
"num-parts": "분할 수",
"threshold-db": "무음 임계값 (dB)",
"min-silence-s": "최소 무음 길이(초)",
submit: "오디오 분할",
submitBatch: "오디오 분할 ({count}개 파일)",
progressLabel: "오디오 분할 중",
},
"ringtone-maker": {
"start-s": "시작 시간(초)",
"duration-s": "길이(초)",
"max-hint": "최대 30초",
submit: "벨소리 만들기",
submitBatch: "벨소리 만들기 ({count}개 파일)",
progressLabel: "벨소리 생성 중",
},
"waveform-image": {
width: "너비 (px)",
height: "높이 (px)",
color: "파형 색상",
submit: "파형 생성",
submitBatch: "파형 생성 ({count}개 파일)",
progressLabel: "파형 생성 중",
},
"audio-metadata": {
strip: "모든 메타데이터 제거",
title: "제목",
artist: "아티스트",
album: "앨범",
submit: "메타데이터 적용",
submitBatch: "메타데이터 적용 ({count}개 파일)",
progressLabel: "메타데이터 적용 중",
},
"merge-pdf": {
addFiles: "병합할 PDF 추가",
needTwo: "PDF가 2개 이상 필요합니다",
orderHint: "{count}개의 PDF가 이 순서로 병합됩니다",
submit: "병합",
submitBatch: "병합 ({count}개 파일)",
progressLabel: "병합 중",
},
"split-pdf": {
mode: "분할 모드",
range: "페이지 범위",
rangeHint: "예: 1-3, 5, 7-z",
everyN: "파트당 페이지 수",
submit: "분할",
submitBatch: "분할 ({count}개 파일)",
progressLabel: "분할 중",
},
"compress-pdf": {
preset: "품질 프리셋",
screen: "화면용 (최소 크기)",
ebook: "전자책 (균형)",
printer: "인쇄용 (최고 품질)",
submit: "압축",
submitBatch: "압축 ({count}개 파일)",
progressLabel: "압축 중",
bestEffortHint:
"최대한 노력한 최대치입니다. 이미지 기반 PDF는 이 크기에 가깝게 도달하지만, 텍스트 전용 PDF는 이 크기까지 줄어들지 않을 수 있습니다.",
targetReached: "목표 {target}에 도달했습니다(결과: {size}).",
targetMissed:
"{target}에 도달할 수 없습니다. 이 PDF는 대부분 텍스트나 벡터로 이루어져 있어 이미지 압축으로 줄일 수 없으므로, 달성 가능한 최소 크기는 {size}였습니다.",
},
"rotate-pdf": {
angle: "회전 각도",
range: "페이지 범위",
rangeHint: "예: 1-3, 5, 1-z (전체 페이지)",
submit: "회전",
submitBatch: "회전 ({count}개 파일)",
progressLabel: "회전 중",
},
"convert-document": {
format: "출력 형식",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"convert-presentation": {
format: "출력 형식",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"convert-spreadsheet": {
format: "출력 형식",
hint: "다중 시트 통합 문서는 첫 번째 시트만 CSV로 내보냅니다.",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"excel-to-pdf": {
submit: "PDF로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"powerpoint-to-pdf": {
submit: "PDF로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"word-to-pdf": {
submit: "PDF로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"extract-pages": {
range: "페이지 범위",
rangeHint: "예: 1-3, 5, 7-z",
submit: "추출",
submitBatch: "추출 ({count}개 파일)",
progressLabel: "추출 중",
},
"remove-pages": {
pages: "제거할 페이지",
pagesHint: "예: 2, 4-6, z (마지막 페이지)",
submit: "제거",
submitBatch: "제거 ({count}개 파일)",
progressLabel: "제거 중",
},
"organize-pdf": {
order: "페이지 순서",
orderHint: "예: 3,1,2 또는 1-z (원래 순서)",
submit: "재정렬",
submitBatch: "재정렬 ({count}개 파일)",
progressLabel: "재정렬 중",
},
"protect-pdf": {
userPassword: "사용자 비밀번호",
ownerPassword: "소유자 비밀번호(선택 사항)",
ownerPasswordHint: "비어 있으면 사용자 비밀번호가 기본값으로 사용됩니다",
submit: "보호",
submitBatch: "보호 ({count}개 파일)",
progressLabel: "암호화 중",
},
"unlock-pdf": {
password: "비밀번호",
submit: "잠금 해제",
submitBatch: "잠금 해제 ({count}개 파일)",
progressLabel: "복호화 중",
},
"repair-pdf": {
submit: "복구",
submitBatch: "복구 ({count}개 파일)",
progressLabel: "복구 중",
},
"linearize-pdf": {
submit: "최적화",
submitBatch: "최적화 ({count}개 파일)",
progressLabel: "최적화 중",
},
"grayscale-pdf": {
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"pdfa-convert": {
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"crop-pdf": {
margin: "여백(포인트)",
submit: "자르기",
submitBatch: "자르기 ({count}개 파일)",
progressLabel: "자르는 중",
},
"nup-pdf": {
perSheet: "시트당 페이지 수",
submit: "배열",
submitBatch: "배열 ({count}개 파일)",
progressLabel: "배열 중",
},
"booklet-pdf": {
perSheet: "시트당 페이지 수",
submit: "소책자 만들기",
submitBatch: "소책자 만들기 ({count}개 파일)",
progressLabel: "소책자 생성 중",
},
"watermark-pdf": {
text: "워터마크 텍스트",
position: "위치",
fontSize: "글꼴 크기",
opacity: "불투명도",
rotation: "회전",
submit: "워터마크",
submitBatch: "워터마크 ({count}개 파일)",
progressLabel: "워터마크 적용 중",
},
"pdf-page-numbers": {
position: "위치",
fontSize: "글꼴 크기",
submit: "번호 추가",
submitBatch: "번호 추가 ({count}개 파일)",
progressLabel: "번호 추가 중",
},
"flatten-pdf": {
submit: "평면화",
submitBatch: "평면화 ({count}개 파일)",
progressLabel: "평면화 중",
},
"sign-pdf": {
yourSignatures: "내 서명",
newSignature: "새로 만들기",
clickToPlace: "서명을 클릭하여 현재 페이지에 배치하세요.",
selectedSignature: "선택한 서명",
dragToAdjust: "핸들을 드래그하여 크기를 조정하거나 회전하세요.",
disclaimer: "시각적 서명 이미지를 추가합니다. 인증서 기반 디지털 서명이 아닙니다.",
signing: "서명 중…",
signingPercent: "서명 중… {percent}%",
downloadSigned: "서명된 PDF 다운로드",
addFirst: "다운로드하기 전에 서명을 하나 이상 추가하세요.",
loadFailed:
"이 PDF를 표시할 수 없습니다. 파일이 손상되었거나 비밀번호로 보호되어 있을 수 있습니다. 암호화된 경우 먼저 PDF 잠금 해제 도구로 비밀번호를 제거하세요.",
pad: {
title: "서명 만들기",
draw: "그리기",
type: "입력",
upload: "업로드",
color: "색상",
pen: "펜",
namePlaceholder: "이름을 입력하세요",
yourName: "이름",
remember: "이 기기에 기억하기",
save: "저장 후 배치",
uploadHint: "PNG / JPG를 끌어다 놓거나 클릭하여 선택하세요. 투명한 PNG가 가장 좋습니다.",
},
},
"redact-pdf": {
terms: "마스킹할 용어",
termsHint: "한 줄에 하나씩 (최대 50개)",
caseSensitive: "대소문자 구분",
submit: "마스킹",
submitBatch: "마스킹 ({count}개 파일)",
progressLabel: "마스킹 중",
},
"pdf-to-text": {
submit: "텍스트 추출",
submitBatch: "텍스트 추출 ({count}개 파일)",
progressLabel: "추출 중",
},
"pdf-to-word": {
hint: "텍스트 기반 PDF에 적합합니다. 스캔된 페이지는 OCR이 필요합니다",
submit: "Word로 변환",
submitBatch: "Word로 변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"pdf-metadata": {
title: "제목",
author: "저자",
subject: "주제",
keywords: "키워드",
submit: "메타데이터 설정",
submitBatch: "메타데이터 설정 ({count}개 파일)",
progressLabel: "메타데이터 설정 중",
},
"html-to-pdf": {
hint: "개인 정보 보호를 위해 외부 리소스가 비활성화되어 있습니다.",
submit: "PDF로 변환",
submitBatch: "PDF로 변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"markdown-to-docx": {
submit: "DOCX로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"markdown-to-html": {
hint: "원본의 외부 이미지는 출력에 그대로 유지됩니다.",
submit: "HTML로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"markdown-to-pdf": {
hint: "개인 정보 보호를 위해 외부 리소스가 비활성화되어 있습니다.",
submit: "PDF로 변환",
submitBatch: "PDF로 변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"epub-convert": {
format: "출력 형식",
hint: "책 내부의 외부 리소스는 가져오지 않습니다.",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"to-epub": {
submit: "EPUB으로 변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"csv-excel": {
sheet: "워크시트 번호",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"csv-json": {
pretty: "보기 좋게 정렬",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"json-xml": {
pretty: "보기 좋게 정렬",
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"split-csv": {
rowsPerFile: "파일당 행 수",
keepHeader: "각 파일에 헤더 유지",
submit: "분할",
submitBatch: "분할 ({count}개 파일)",
progressLabel: "분할 중",
},
"merge-csvs": {
submit: "병합",
submitBatch: "병합 ({count}개 파일)",
progressLabel: "병합 중",
},
"yaml-json": {
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"xml-to-csv": {
submit: "변환",
submitBatch: "변환 ({count}개 파일)",
progressLabel: "변환 중",
},
"create-zip": {
submit: "ZIP 생성",
submitBatch: "ZIP 생성 ({count}개 파일)",
progressLabel: "압축 중",
},
"extract-zip": {
submit: "추출",
submitBatch: "추출 ({count}개 파일)",
progressLabel: "추출 중",
},
},
urlImport: {
title: "URL에서 가져오기",
placeholder: "이미지 URL을 붙여넣기, 한 줄에 하나씩...",
importButton: "URL 가져오기",
addButton: "{count}개 파일 추가",
adding: "추가 중...",
retryButton: "재시도",
cancelButton: "취소",
readyCount: "{count}개 준비 완료",
failedStatus: "실패",
},
comparison: {
original: "원본",
processed: "처리 후",
before: "이전",
after: "이후",
savings: "절감",
},
toolPage: {
emptyPrompt: "이미지를 드롭하거나 업로드하여 시작하세요",
filesCount: "파일 ({count})",
addMore: "+ 더 추가",
clearAll: "모두 지우기",
acceptDescription: "{exts} 파일만 지원",
notFound: "도구를 찾을 수 없습니다",
configureAndGenerate: "설정을 구성하고 생성하세요.",
processingFailed: "이 파일의 처리에 실패했습니다",
conversionComplete: "변환 완료",
cannotPreviewDownload:
"{type} 파일은 브라우저에서 미리볼 수 없습니다. 다운로드 버튼으로 파일을 저장하세요.",
generatingPreview: "미리보기 생성 중...",
cannotPreviewWillProcess:
"{ext} 파일은 브라우저에서 미리볼 수 없습니다. 도구는 이 파일을 정상적으로 처리합니다.",
previousImage: "이전 이미지",
nextImage: "다음 이미지",
imageCounter: "{current} / {total}",
settingsLabel: "설정",
downloadAllZip: "전체 다운로드 (ZIP)",
hideSettings: "설정 숨기기",
imageArea: "이미지 영역",
disabledByAdmin: "이 도구는 관리자에 의해 비활성화되었습니다",
browseOtherTools: "다른 도구 둘러보기",
privacyNote: "파일은 서버에서 처리되며 네트워크 외부로 전송되지 않습니다",
applyAndDownload: "적용 및 다운로드",
andMore: "외 {count}개",
importFromFiles: "파일에서 가져오기",
saveToFiles: "파일에 저장",
savedToFiles: "파일에 저장됨",
librarySaveTitle: "이 파일은 내 파일에서 가져왔습니다",
librarySaveAsNew: "결과를 새 파일로 저장",
librarySaveAsNewHint: "원본은 내 파일에 유지됩니다",
libraryOverwrite: "원본 덮어쓰기",
libraryOverwriteHint: "결과가 내 파일의 원본을 대체합니다",
viewInFiles: "내 파일에서 보기",
adjustSettings: "설정 조정",
startOver: "새 파일로 다시 시작",
newFile: "새 파일",
previewUnavailable: "처리 후 미리보기를 사용할 수 있습니다",
generatePreview: "미리보기 생성",
previewFailed: "미리보기 생성 실패",
backToTools: "도구로 돌아가기",
original: "원본",
processed: "처리됨",
saved: "저장됨",
noChange: "변경 없음",
download: "다운로드",
settingsSaved: "설정이 저장되었습니다.",
tryAgain: "다시 시도",
tryDifferentFile: "다른 파일 시도",
batchPartialSuccess: "{total}개 중 {success}개 처리됨. {failed}개 실패.",
dataResultsHint: "결과가 위에 표시됩니다. 결과 패널의 복사 버튼을 사용하세요.",
downloadAsFile: "파일로 다운로드",
downloadAll: "모두 다운로드",
downloadFiles: "{count}개 파일 다운로드",
audioDecodeUnsupported: "이 오디오 형식은 브라우저에서 미리 들을 수 없습니다",
},
homePage: {
generatingPreview: "미리보기 생성 중...",
loadingPreview: "미리보기 로딩 중...",
changeFile: "파일 변경",
quickActions: "빠른 실행",
allTools: "모든 도구",
searchPlaceholder: "{count}개 도구 검색...",
recent: "최근",
pinned: "고정됨",
popular: "인기",
browseByCategory: "카테고리별 탐색",
gettingStarted: "시작하기",
noToolsMatch: "'{query}'에 일치하는 도구가 없습니다",
clearSearch: "검색 지우기",
requestToolCta: "'{query}' 요청",
requestToolBelowResults: "찾을 수 없나요? 도구 요청",
all: "전체",
documents: "PDF",
data: "파일",
pdf: "PDF",
files: "파일",
toolCount: "{count}개 도구",
heading: "SnapOtter 도구",
},
fullscreenGrid: {
searchPlaceholder: "도구 검색...",
hideDetails: "세부사항 숨기기",
showDetails: "세부사항 보기",
switchToSidebar: "사이드바 뷰로 전환",
sidebarButton: "사이드바",
noToolsFound: "도구를 찾을 수 없습니다",
tryDifferent: "다른 검색어를 시도해 보세요",
},
editor: {
menu: {
file: {
label: "파일",
new: "새로 만들기",
open: "열기",
save: "저장",
exportAs: "내보내기...",
quickExportPng: "PNG로 빠른 내보내기",
close: "닫기",
},
edit: {
label: "편집",
undo: "실행 취소",
redo: "다시 실행",
cut: "잘라내기",
copy: "복사",
copyMerged: "병합 복사",
paste: "붙여넣기",
pasteInPlace: "같은 위치에 붙여넣기",
delete: "삭제",
freeTransform: "자유 변형",
transform: {
label: "변형",
scale: "크기 조절",
rotate: "회전",
skew: "기울이기",
flipHorizontal: "수평 뒤집기",
flipVertical: "수직 뒤집기",
},
},
image: {
label: "이미지",
imageSize: "이미지 크기...",
canvasSize: "캔버스 크기...",
rotation: {
label: "이미지 회전",
cw90: "시계 방향 90도",
ccw90: "반시계 방향 90도",
r180: "180도",
flipHorizontal: "수평 뒤집기",
flipVertical: "수직 뒤집기",
},
trim: "트림",
adjustments: {
label: "조정",
brightnessContrast: "밝기/대비",
hueSaturation: "색조/채도",
colorBalance: "색상 균형",
levels: "레벨",
curves: "곡선",
},
},
layer: {
label: "레이어",
newLayer: "새 레이어",
duplicateLayer: "레이어 복제",
deleteLayer: "레이어 삭제",
arrange: {
label: "정렬",
bringToFront: "맨 앞으로",
bringForward: "앞으로",
sendBackward: "뒤로",
sendToBack: "맨 뒤로",
},
mergeDown: "아래 레이어와 병합",
flattenImage: "이미지 병합",
},
select: {
label: "선택",
all: "모두 선택",
deselect: "선택 해제",
inverse: "선택 반전",
colorRange: "색상 범위...",
},
filter: {
label: "필터",
blur: {
label: "블러",
gaussian: "가우시안 블러",
motion: "모션 블러",
radial: "방사형 블러",
surface: "표면 블러",
},
sharpen: {
label: "선명하게",
sharpen: "선명하게",
unsharpMask: "언샵 마스크",
},
noise: {
label: "노이즈",
addNoise: "노이즈 추가",
reduceNoise: "노이즈 감소",
},
pixelate: {
label: "픽셀화",
pixelate: "픽셀화",
mosaic: "모자이크",
},
stylize: {
label: "스타일화",
emboss: "엠보스",
solarize: "솔라리제이션",
posterize: "포스터화",
},
grayscale: "그레이스케일",
sepia: "세피아",
invert: "반전",
},
view: {
label: "보기",
zoomIn: "확대",
zoomOut: "축소",
fitOnScreen: "화면에 맞추기",
actualPixels: "실제 크기",
rulers: "눈금자",
grid: "그리드",
guides: "안내선",
snap: "스냅",
panels: "패널",
},
},
menuBar: {
backTitle: "SnapOtter로 돌아가기",
},
welcome: {
ariaLabel: "이미지 드롭 영역",
heading: "이미지 에디터",
dropDescription: "여기에 이미지를 드롭하여 시작하세요",
openImageButton: "이미지 열기",
newDocumentButton: "새 문서",
pasteHint: "또는 클립보드에서 붙여넣기 (Ctrl+V)",
},
mobile: {
heading: "데스크톱 환경 권장",
description:
"이미지 에디터는 데스크톱 화면에서 최적으로 동작합니다. 전체 편집 경험을 위해 더 큰 디스플레이의 기기를 사용해 주세요.",
},
errors: {
serverDecodeFailed: "서버 디코딩 실패",
},
shapes: {
shape: "도형",
fill: "채우기",
stroke: "테두리",
strokeWidth: "두께",
cornerRadius: "모서리 반경",
sides: "변",
points: "꼭짓점",
dashStyle: "선 스타일",
solid: "실선",
dashed: "파선",
dotted: "점선",
none: "없음",
opacity: "불투명도",
rectangle: "사각형",
ellipse: "타원",
line: "선",
arrow: "화살표",
polygon: "다각형",
star: "별",
},
},
settings: {
heading: "설정",
nav: {
general: "일반",
systemSettings: "시스템 설정",
security: "보안",
people: "멤버",
teams: "팀",
roles: "역할",
auditLog: "감사 로그",
usage: "사용량",
apiKeys: "API 키",
aiFeatures: "AI 기능",
tools: "도구",
about: "정보",
},
general: {
heading: "일반",
description: "사용자 환경설정 및 표시 설정.",
loading: "로딩 중...",
logOut: "로그아웃",
defaultToolViewLabel: "기본 도구 뷰",
defaultToolViewDescription: "홈페이지에서 도구가 표시되는 방식",
sidebarOption: "사이드바",
fullscreenGridOption: "전체화면 그리드",
appVersionLabel: "앱 버전",
appVersionDescription: "SnapOtter 현재 버전",
saveButton: "설정 저장",
saveSuccess: "설정이 저장되었습니다.",
saveFailed: "설정 저장에 실패했습니다.",
},
system: {
heading: "시스템 설정",
description: "서버 측 구성 및 제한.",
fileUploadLimitLabel: "파일 업로드 제한 (MB)",
fileUploadLimitDescription: "업로드당 최대 파일 크기",
defaultThemeLabel: "기본 테마",
defaultThemeDescription: "새 세션에 적용되는 테마",
lightOption: "라이트",
darkOption: "다크",
systemOption: "시스템 설정에 따름",
languageLabel: "언어",
languageDescription: "인터페이스 언어",
loginAttemptLimitLabel: "로그인 시도 제한",
loginAttemptLimitDescription: "잠금 전 분당 최대 로그인 실패 횟수",
fileManagementHeading: "파일 관리",
maxFileAgeLabel: "최대 파일 보관 시간 (시간)",
maxFileAgeDescription: "처리된 파일이 자동 정리 전까지 보관되는 시간",
startupCleanupLabel: "시작 시 정리",
startupCleanupDescription: "서버 시작 시 오래된 임시 파일 정리",
saveButton: "설정 저장",
saveSuccess: "설정이 저장되었습니다.",
saveFailed: "설정 저장에 실패했습니다.",
limitsAndResources: "제한 및 리소스",
maxFileSize: "최대 파일 크기",
maxBatchSize: "최대 배치 크기",
concurrentJobs: "동시 작업 수",
workerThreads: "워커 스레드 수",
maxPipelineSteps: "최대 Pipeline 단계 수",
processingTimeout: "처리 타임아웃",
rateLimitPerMin: "요청 제한 (요청/분)",
unlimited: "무제한",
auto: "자동",
envOverride: "환경 변수로 설정됨",
maxCanvasPixels: "최대 캔버스 픽셀",
maxSvgSize: "최대 SVG 크기",
maxSplitGrid: "최대 분할 그리드",
maxPdfPages: "최대 PDF 페이지 수",
sessionDuration: "세션 기간",
supportBundleButton: "지원 번들 다운로드",
supportBundleDescription:
"편집된 설정, 로그 및 작업 데이터가 포함된 진단 zip을 다운로드합니다.",
supportBundleFailed: "지원 번들 다운로드에 실패했습니다.",
},
privacy: {
title: "개인정보",
description:
"익명 제품 분석은 SnapOtter 개선에 도움이 됩니다. 기본적으로 켜져 있으며 관리자가 전체 인스턴스에 대해 설정합니다.",
analyticsLabel: "익명 제품 분석",
analyticsDescription:
"익명 사용 데이터(실행된 도구, 소요 시간, 오류 코드)와 충돌 보고서를 공유합니다. IP 주소나 계정 정보는 포함되지 않습니다. 파일 이름, 파일 내용, OCR 결과, 이미지 메타데이터, 문서 텍스트는 절대 수집하지 않습니다. 모두 중단하려면 이 옵션을 끄세요.",
},
security: {
heading: "보안",
description: "비밀번호 및 인증 설정.",
changePasswordHeading: "비밀번호 변경",
currentPasswordPlaceholder: "현재 비밀번호",
newPasswordPlaceholder: "새 비밀번호",
confirmPasswordPlaceholder: "새 비밀번호 확인",
passwordsMismatch: "비밀번호가 일치하지 않습니다",
passwordTooShort: "비밀번호는 4자 이상이어야 합니다",
changeSuccess: "비밀번호가 변경되었습니다",
changeFailed: "비밀번호 변경에 실패했습니다",
currentPasswordIncorrect: "현재 비밀번호가 올바르지 않습니다",
changePasswordButton: "비밀번호 변경",
loginAttemptLimitNote: "로그인 시도 제한은 시스템 설정에서 구성할 수 있습니다.",
twoFactorHeading: "2단계 인증",
twoFactorDescription: "인증 앱으로 계정에 보안 단계를 추가하세요.",
twoFactorEnabledStatus: "2단계 인증이 활성화되어 있습니다.",
twoFactorDisabledStatus: "2단계 인증이 활성화되어 있지 않습니다.",
enableTwoFactorButton: "2단계 인증 활성화",
disableTwoFactorButton: "2단계 인증 비활성화",
twoFactorScanQr:
"인증 앱(Google Authenticator, Authy, 1Password 등)으로 이 QR 코드를 스캔하세요.",
twoFactorManualEntry: "코드를 스캔할 수 없나요? 이 키를 직접 입력하세요:",
twoFactorRecoveryCodesHeading: "복구 코드",
twoFactorRecoveryCodesDescription:
"이 코드를 안전한 곳에 보관하세요. 인증 앱에 접근할 수 없을 때 각 코드는 로그인에 한 번씩 사용할 수 있습니다.",
twoFactorCopyRecoveryCodes: "코드 복사",
twoFactorCodesCopied: "복사되었습니다",
twoFactorCopyFailed:
"자동으로 복사하지 못했습니다. 위의 코드를 선택하여 수동으로 복사하세요.",
twoFactorEnterCode: "설정을 확인하려면 앱에 표시된 6자리 코드를 입력하세요.",
twoFactorCodePlaceholder: "000000",
twoFactorConfirmButton: "확인 후 활성화",
twoFactorCancelButton: "취소",
twoFactorEnableSuccess: "2단계 인증이 활성화되었습니다.",
twoFactorDisableSuccess: "2단계 인증이 비활성화되었습니다.",
twoFactorDisablePrompt: "2단계 인증을 비활성화하려면 현재 인증 코드를 입력하세요.",
adminHeading: "관리자 보안 설정",
adminDescription: "엔터프라이즈 보안 정책 설정입니다. 모든 사용자에게 적용됩니다.",
sessionIdleTimeout: "세션 유휴 시간 제한(분)",
sessionIdleTimeoutDesc: "유휴 세션을 자동으로 로그아웃합니다. 0 = 비활성화.",
maxSessionsPerUser: "사용자당 최대 세션 수",
maxSessionsPerUserDesc: "사용자당 동시 세션 수를 제한합니다. 0 = 무제한.",
mfaPolicy: "MFA 정책",
mfaPolicyDesc: "사용자에게 다단계 인증을 요구합니다.",
mfaPolicyOptional: "선택 사항",
mfaPolicyAdminsOnly: "관리자만 필수",
mfaPolicyRequired: "모든 사용자 필수",
ssoEnforcement: "SSO 적용",
ssoEnforcementDesc: "비상 접근 사용자를 제외한 모든 사용자에게 SSO 로그인을 요구합니다.",
ssoBreakGlassUsername: "비상 접근 관리자 사용자명",
ssoBreakGlassUsernameDesc:
"SSO가 적용된 경우에도 이 관리자는 로컬 자격 증명으로 로그인할 수 있습니다.",
passwordMinLength: "최소 비밀번호 길이",
passwordMinLengthDesc: "비밀번호에 필요한 최소 문자 수입니다.",
passwordRequireUppercase: "대문자 필수",
passwordRequireUppercaseDesc: "대문자를 하나 이상 포함해야 합니다.",
passwordRequireNumber: "숫자 필수",
passwordRequireNumberDesc: "숫자를 하나 이상 포함해야 합니다.",
passwordRequireSpecial: "특수 문자 필수",
passwordRequireSpecialDesc: "특수 문자를 하나 이상 포함해야 합니다.",
passwordPolicyHeading: "비밀번호 정책",
securitySettingsSaved: "보안 설정이 저장되었습니다",
securitySettingsFailed: "보안 설정 저장에 실패했습니다",
},
people: {
heading: "멤버",
description: "워크스페이스 멤버 및 권한 관리",
userCount: "사용자 {count}명",
userCountPlural: "사용자 {count}명",
searchPlaceholder: "멤버 검색...",
addMembersButton: "멤버 추가",
newMemberHeading: "새 멤버",
usernamePlaceholder: "사용자명",
passwordPlaceholder: "비밀번호",
roleUserOption: "사용자",
roleEditorOption: "편집자",
roleAdminOption: "관리자",
roleUserDescription: "기본 도구 접근",
roleEditorDescription: "모든 파일 및 Pipeline",
roleAdminDescription: "전체 접근",
noDescription: "설명 없음",
defaultTeamOption: "기본",
createButton: "생성",
cancelButton: "취소",
createSuccess: "사용자가 생성되었습니다",
createFailed: "사용자 생성에 실패했습니다",
userLimitReached: "사용자 한도에 도달했습니다 (최대 {max}명)",
deleteConfirm: '사용자 "{username}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',
deleteSuccess: '사용자 "{username}"이(가) 삭제되었습니다',
deleteFailed: "사용자 삭제에 실패했습니다",
editHeading: "{username} 편집",
updateSuccess: "사용자가 업데이트되었습니다",
updateFailed: "사용자 업데이트에 실패했습니다",
cannotRemoveOwnAdmin: "자신의 관리자 역할은 제거할 수 없습니다",
resetPasswordHeading: "{username}의 비밀번호 재설정",
newPasswordLabel: "새 비밀번호 (8자 이상)",
resetPasswordButton: "비밀번호 재설정",
resetPasswordWarning: "이 사용자의 모든 세션과 API 키가 무효화됩니다.",
resetSuccess: "비밀번호가 재설정되었습니다",
resetFailed: "비밀번호 재설정에 실패했습니다",
tableHeaderUser: "사용자",
tableHeaderRole: "역할",
tableHeaderTeam: "팀",
noSearchResults: "검색과 일치하는 멤버가 없습니다.",
noUsersFound: "사용자를 찾을 수 없습니다.",
authBadgeLocalOidc: "로컬 + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "역할/팀 편집",
resetPasswordAction: "비밀번호 재설정",
deleteUserAction: "사용자 삭제",
saveButton: "저장",
copyPasswordButton: "비밀번호 복사",
passwordCopied: "복사됨!",
copyPasswordWarning: "지금 이 비밀번호를 복사하세요. 사용자 생성 후에는 확인할 수 없습니다.",
},
teams: {
heading: "팀",
description: "멤버를 팀으로 구성하여 효율적으로 관리하세요.",
createButton: "새 팀 만들기",
newTeamHeading: "새 팀",
teamNamePlaceholder: "팀 이름",
createSubmitButton: "생성",
cancelButton: "취소",
createSuccess: "팀이 생성되었습니다",
createFailed: "팀 생성에 실패했습니다",
duplicateTeamError: "같은 이름의 팀이 이미 존재합니다",
renameSuccess: "팀 이름이 변경되었습니다",
renameFailed: "팀 이름 변경에 실패했습니다",
deleteConfirm: '팀 "{name}"을(를) 삭제하시겠습니까? 멤버는 배정 해제됩니다.',
deleteSuccess: '팀 "{name}"이(가) 삭제되었습니다',
deleteFailed: "팀 삭제에 실패했습니다",
cannotDeleteDefault: "기본 팀이나 멤버가 있는 팀은 삭제할 수 없습니다",
tableHeaderTeamName: "팀 이름",
tableHeaderMembers: "멤버",
emptyState: "팀을 찾을 수 없습니다.",
renameSaveButton: "저장",
renameCancelButton: "취소",
renameAction: "이름 변경",
deleteAction: "삭제",
totalMembers: "총 멤버 수",
nameRequired: "팀 이름은 필수입니다",
nameTooLong: "팀 이름은 50자 이내여야 합니다",
duplicateName: "같은 이름의 팀이 이미 존재합니다",
teamStorageQuota: "저장소 할당량 (MB)",
teamStorageQuotaDesc: "이 팀의 최대 저장 용량(MB)입니다. 제한 없음은 비워 두세요.",
teamRetentionHours: "보관 기간(시간)",
teamRetentionHoursDesc:
"이 팀의 처리 파일 보관 기간입니다. 전역 기본값을 사용하려면 비워 두세요.",
quotaSaved: "팀 설정이 저장되었습니다",
},
roles: {
heading: "역할",
description: "역할과 권한을 관리합니다. 기본 제공 역할은 수정할 수 없습니다.",
createButton: "커스텀 역할 만들기",
newRoleHeading: "새 역할",
roleNamePlaceholder: "역할 이름",
descriptionPlaceholder: "설명 (선택)",
permissionsLabel: "권한",
createSubmitButton: "생성",
cancelButton: "취소",
createSuccess: "역할이 생성되었습니다",
createFailed: "역할 생성에 실패했습니다",
duplicateRoleError: "같은 이름의 역할이 이미 존재합니다",
editHeading: "역할 편집: {name}",
editSaveButton: "저장",
editCancelButton: "취소",
updateSuccess: "역할이 업데이트되었습니다",
updateFailed: "역할 업데이트에 실패했습니다",
deleteConfirm:
'역할 "{name}"을(를) 삭제하시겠습니까? {count}명의 사용자를 재배정해야 합니다.',
deleteConfirmSimple: '역할 "{name}"을(를) 삭제하시겠습니까?',
deleteSuccess: '역할 "{name}"이(가) 삭제되었습니다',
deleteFailed: "역할 삭제에 실패했습니다",
emptyState: "역할을 찾을 수 없습니다.",
builtInBadge: "기본 제공",
userCountBadge: "{count}명",
editRoleTitle: "역할 편집",
deleteRoleTitle: "역할 삭제",
permGroup: {
tools: "도구",
files: "파일",
apiKeys: "API 키",
pipelines: "Pipeline",
settings: "설정",
users: "사용자",
teams: "팀",
system: "시스템",
},
},
auditLog: {
heading: "감사 로그",
allActionsFilter: "모든 작업",
emptyState: "감사 로그 항목이 없습니다.",
tableHeaderTime: "시간",
tableHeaderUser: "사용자",
tableHeaderAction: "작업",
tableHeaderTarget: "대상",
paginationInfo: "{page}/{totalPages}페이지 (총 {total}개 항목)",
previousButton: "이전",
nextButton: "다음",
justNow: "방금",
minutesAgo: "{mins}분 전",
hoursAgo: "{hrs}시간 전",
daysAgo: "{days}일 전",
},
usage: {
heading: "사용량",
description: "작업 및 파일 저장소의 로컬 사용 통계입니다.",
periodLabel: "기간",
days7: "7일",
days30: "30일",
days90: "90일",
jobsPerDayHeading: "일별 작업 수",
topToolsHeading: "인기 도구",
perUserHeading: "사용자별 사용량",
durationsHeading: "처리 시간 백분위",
noData: "해당 기간의 데이터가 없습니다.",
dayColumn: "날짜",
totalColumn: "전체",
completedColumn: "완료",
failedColumn: "실패",
toolColumn: "도구",
runsColumn: "실행 횟수",
userColumn: "사용자",
bytesInColumn: "입력 바이트",
poolColumn: "풀",
p50Column: "p50",
p95Column: "p95",
storageHeading: "라이브러리 저장소",
storageFiles: "{count}개 파일",
unknownUser: "(알 수 없음)",
storageByTeam: "팀별 저장소",
teamColumn: "팀",
storageColumn: "저장소",
usersColumn: "사용자",
},
apiKeys: {
heading: "API 키",
description: "SnapOtter에 프로그래밍 방식으로 접근하기 위한 API 키를 관리하세요.",
keyNamePlaceholder: "키 이름 (선택)",
generateButton: "API 키 생성",
removeScopingLabel: "권한 범위 해제",
restrictPermissionsLabel: "권한 제한 (선택)",
expiresLabel: "만료:",
clearButton: "지우기",
copyTitle: "복사",
keyWarning: "이 키를 안전하게 보관하세요. 다시 표시되지 않습니다.",
existingKeysHeading: "기존 키",
createdPrefix: "{date}에 생성됨",
scopedPrefix: "범위:",
expiresPrefix: "{date}에 만료",
deleteKeyTitle: "키 삭제",
deleteConfirm: "이 API 키를 삭제하시겠습니까? 이 키를 사용하는 모든 연동이 중단됩니다.",
emptyState: "아직 API 키가 없습니다. 하나를 생성하여 시작하세요.",
},
tools: {
heading: "도구",
description:
"개별 도구를 활성화하거나 비활성화합니다. 비활성화된 도구는 모든 사용자에게 숨겨집니다.",
restartBanner: "변경 사항을 적용하려면 재시작이 필요합니다.",
searchPlaceholder: "도구 검색...",
noSearchResults: "검색과 일치하는 도구가 없습니다.",
loadFailedError:
"도구 설정 로드에 실패했습니다. 데이터 손실을 방지하기 위해 저장이 비활성화되었습니다.",
saveButton: "도구 설정 저장",
disabledCount: "{count}개 도구 비활성화됨",
},
experimental: {
label: "실험적 도구 활성화",
description: "아직 개발 중인 도구를 표시합니다. 불안정할 수 있습니다.",
},
fileManagement: {
title: "파일 관리",
maxAge: "최대 파일 보관 시간 (시간)",
maxAgeDescription: "처리된 파일이 자동 정리 전까지 보관되는 시간",
startupCleanup: "시작 시 정리",
startupCleanupDescription: "서버 시작 시 오래된 임시 파일 정리",
},
dataRetention: {
title: "데이터 보관",
fileMaxAgeHours: "처리 파일 보관 기간(시간)",
fileMaxAgeHoursDesc: "업로드 및 처리된 파일의 보관 기간입니다. 기본값: 72시간.",
jobsRetentionDays: "작업 기록 보관 기간(일)",
jobsRetentionDaysDesc: "작업 메타데이터 보관 기간입니다. 0 = 영구 보관. 기본값: 30일.",
auditRetentionDays: "감사 로그 보관 기간(일)",
auditRetentionDaysDesc: "감사 로그 항목 보관 기간입니다. 0 = 영구 보관. 기본값: 영구 보관.",
},
aiFeatures: {
title: "AI 기능",
description: "고급 파일 처리를 위한 AI 모델 번들을 관리합니다.",
installAll: "모두 설치",
diskUsage: "디스크 사용량: {size}",
sizeOnDisk: "디스크에 {size}",
installed: "설치됨",
notInstalled: "설치되지 않음",
queued: "대기 중",
install: "설치",
repair: "복구",
uninstall: "제거",
installing: "설치 중...",
importBundle: "번들 가져오기",
importDescription: "오프라인용 서명된 OCR 런타임 또는 레거시 AI 번들을 가져옵니다.",
importButton: "파일에서 가져오기",
importing: "가져오는 중...",
importSuccess: "번들을 가져왔습니다.",
importError: "번들 가져오기 실패: {error}",
importType: "번들 유형",
importOcr: "고정밀 OCR 팩",
importLegacy: "레거시 AI 번들",
importOcrIndex: "서명된 OCR 인덱스 (.json)",
importOcrArchive: "OCR 런타임 아카이브 (.tar.gz)",
importLegacyArchive: "레거시 번들 아카이브 (.tar.gz)",
resetTitle: "AI 환경 재설정",
resetDescription:
"설치된 모든 AI 기능과 다운로드한 모델을 삭제한 후 처음부터 다시 시작합니다. 업데이트 후 AI 도구가 예상치 못하게 동작하고 번들을 다시 설치해도 문제가 해결되지 않을 때 사용하세요.",
resetButton: "재설정",
resetConfirmMessage:
"설치된 모든 AI 기능과 모델이 삭제됩니다. Hugging Face에서 다시 설치해야 합니다. 이 작업은 되돌릴 수 없습니다.",
resetFailed: "재설정 실패: {error}",
},
about: {
heading: "정보",
appName: "SnapOtter",
appDescription:
"셀프 호스팅, 개인정보 우선의 파일 처리 도구 모음으로 200+개의 도구를 제공합니다. 변환, 압축, 편집, 전사, OCR 등 이미지, 동영상, 오디오, PDF, 파일 워크플로를 클라우드에 데이터를 보내지 않고 자동화할 수 있습니다.",
versionLabel: "버전:",
linksHeading: "링크",
githubLink: "GitHub 저장소",
docsLink: "문서",
apiRefLink: "API 레퍼런스 (Swagger)",
licenseLabel: "라이선스:",
licenseDescription:
"SnapOtter는 GNU Affero General Public License v3 (AGPLv3)로 라이선스된 오픈 소스 소프트웨어입니다.",
},
},
auth: {
login: "로그인",
logout: "로그아웃",
username: "사용자명",
password: "비밀번호",
loginButton: "로그인",
loggingIn: "로그인 중...",
invalidCredentials: "사용자명 또는 비밀번호가 올바르지 않습니다",
connectionError: "연결 오류",
signInWith: "{provider}(으)로 로그인",
signInWithSso: "SSO로 로그인",
or: "또는",
methodLocal: "로컬",
methodOidc: "OIDC",
methodBoth: "로컬 + OIDC",
oidcAuthFailed: "인증에 실패했습니다. 다시 시도해 주세요.",
oidcProviderUnreachable: "ID 제공자에 연결할 수 없습니다. 나중에 다시 시도해 주세요.",
oidcSessionExpired: "로그인 세션이 만료되었습니다. 다시 시도해 주세요.",
oidcUserNotAuthorized:
"귀하의 계정은 이 애플리케이션에 접근할 권한이 없습니다. 관리자에게 문의하세요.",
oidcUserLimitReached: "사용자 한도에 도달했습니다. 관리자에게 문의하세요.",
oidcGenericError: "인증 오류. 다시 시도해 주세요.",
samlAuthFailed: "SAML 인증에 실패했습니다. 다시 시도해 주세요.",
samlUserNotAuthorized: "이 애플리케이션에 대한 접근 권한이 없습니다. 관리자에게 문의하세요.",
samlUserLimitReached: "사용자 제한에 도달했습니다. 관리자에게 문의하세요.",
ssoEnforcedLocalRestricted: "로컬 로그인은 승인된 관리자로 제한됩니다.",
mfaRequired: "인증 코드를 입력하세요",
mfaRecoveryHint: "복구 코드를 사용할 수도 있습니다",
verify: "확인",
verifying: "확인 중...",
mfaInvalidCode: "잘못된 코드입니다. 다시 시도해 주세요.",
mfaEnrollmentRequired: "조직에서 다단계 인증을 요구합니다. 계정 설정에서 MFA를 설정해 주세요.",
methodSaml: "SAML",
passwordManagedByProvider: "비밀번호는 ID 제공자에서 관리됩니다.",
enterUsername: "사용자명 입력",
enterPassword: "비밀번호 입력",
heroTitle: "당신의 파일은, 당신의 것입니다.",
heroSubtitle: "필요한 모든 도구가 여기에.",
rotatingPhrases: [
"가입도 필요 없고, 계정도 필요 없어요.",
"클라우드 업로드? 절대 없습니다.",
"100% 로컬 처리.",
"무료. 영원히 무료.",
"제한 없음. 숨겨진 상한 없음.",
"완전히 오프라인으로 작동해요.",
"무제한 일괄 처리.",
"200+개의 도구.",
"15개 AI 모델. 당신의 하드웨어에서.",
"Sharp 기반의 초고속 처리.",
"에어갭 환경에서도 사용 가능.",
"Docker 컨테이너 하나면 충분해요.",
"오픈 소스. 언제나.",
"모든 픽셀이 당신의 하드웨어에 머물러요.",
"당신의 서버. 당신의 규칙.",
"docker pull 한 줄이면 배포 끝.",
"셀프 호스팅의 새로운 기준.",
"리사이즈, 압축, 변환. 모두 로컬에서.",
"무료 이미지 에디터. 워터마크 없음.",
"일괄 파일 처리. 무제한으로.",
"배경 제거도 오프라인으로.",
"셀프 호스팅 Canva 대안.",
"API 키가 필요 없어요.",
"설계 단계부터 GDPR 준수.",
"인터넷 없이도 작동해요.",
],
},
changePassword: {
title: "비밀번호를 변경하세요",
description:
"계속하려면 새 비밀번호를 설정해야 합니다. 8자 이상으로 대문자, 소문자, 숫자를 포함해야 합니다.",
usernameLabel: "사용자명",
currentPasswordLabel: "현재 비밀번호",
currentPasswordPlaceholder: "현재 비밀번호 입력",
newPasswordLabel: "새 비밀번호",
generateButton: "강력한 비밀번호 생성",
newPasswordPlaceholder: "8자 이상",
confirmPasswordLabel: "새 비밀번호 확인",
confirmPasswordPlaceholder: "새 비밀번호 다시 입력",
passwordsMismatch: "비밀번호가 일치하지 않습니다",
failedError: "비밀번호 변경에 실패했습니다",
connectionError: "연결 오류",
changingButton: "변경 중...",
changeButton: "비밀번호 변경",
sidebarTitle: "거의 다 됐어요",
sidebarDescription: "강력한 비밀번호를 설정하여 계정을 보호하면 바로 시작할 수 있습니다.",
},
automate: {
title: "자동화",
invalidPipelineFile: "유효한 SnapOtter Pipeline 파일이 아닙니다",
newerVersion: "이 Pipeline은 더 최신 버전의 SnapOtter에서 생성되었습니다",
missingName: "Pipeline 파일에 이름이 없습니다",
noSteps: "Pipeline 파일에 단계가 없습니다",
importFailed: "가져오기 실패",
couldNotRead: "Pipeline 파일을 읽을 수 없습니다",
fileCount: "{count}개 파일",
fileCountPlural: "{count}개 파일",
importFromLibrary: "라이브러리에서 가져오기",
addButton: "+ 추가",
libraryButton: "라이브러리",
clearButton: "지우기",
processingFailed: "이 파일의 처리에 실패했습니다",
processingMultiple: "{count}개 파일 처리 중...",
processingPipeline: "Pipeline 처리 중...",
processButton: "처리",
processButtonMultiple: "처리 ({count})",
processAllButton: "모두 처리 ({count})",
addTool: "도구 추가",
toolPalette: "도구 팔레트",
clickToAdd: "클릭하여 Pipeline에 추가",
savedLabel: "저장됨",
templatesLabel: "템플릿",
importButton: "가져오기",
noSavedPipelines: "저장된 Pipeline이 없습니다",
stepCount: "({count}단계)",
stepCountPlural: "({count}단계)",
exportPipeline: "Pipeline 내보내기",
deletePipeline: "Pipeline 삭제",
moreCount: "+{count}개 더",
pipelineBuilder: "Pipeline 빌더",
addToolsPrompt: "팔레트에서 도구를 추가하여 시작하세요",
stepsConfigured: "{count}단계 구성됨",
stepsConfiguredPlural: "{count}단계 구성됨",
noFilesLoaded: "로드된 파일 없음",
downloadZip: "ZIP 다운로드",
saveButton: "저장",
pipelineNamePlaceholder: "Pipeline 이름",
descriptionPlaceholder: "설명",
savingIndicator: "...",
cancelButton: "취소",
preview: "미리보기",
previousImage: "이전 이미지",
nextImage: "다음 이미지",
imageCounter: "{current} / {total}",
imageArea: "이미지 영역",
templateSocialMedia: "소셜 미디어 준비",
templatePrivacyClean: "개인정보 정리",
templateWebOptimization: "웹 최적화",
templateProfilePicture: "프로필 사진",
templateWatermarkBatch: "일괄 워터마크",
createNew: "새 자동화 만들기",
savedAutomations: "저장된 자동화",
templates: "템플릿",
addStep: "단계 추가",
removeStep: "제거",
moveUp: "위로 이동",
moveDown: "아래로 이동",
savePipeline: "Pipeline 저장",
runPipeline: "처리",
pipelineName: "Pipeline 이름",
pipelineDescription: "설명 (선택)",
noStepsPrompt: "단계를 추가하여 자동화를 구성하세요",
noStepsHeading: "단계가 없습니다",
searchToolsPlaceholder: "도구 검색...",
step: "단계",
modalityWarning: "모달리티 불일치",
modalityWarningTooltip:
"이 단계는 {expected}을(를) 기대하지만 {received}을(를) 받습니다. 파이프라인을 실행하면 실패할 수 있습니다.",
},
nav: {
tools: "도구",
reader: "리더",
automate: "자동화",
editor: "에디터",
files: "파일",
help: "도움말",
settings: "설정",
grid: "그리드",
},
files: {
myFiles: "내 파일",
recentTab: "최근",
uploadTab: "파일 업로드",
fileDetailsAriaLabel: "파일 상세 정보",
fileDetailsHeading: "파일 상세 정보",
searchPlaceholder: "파일 검색...",
selectedCount: "{count}개 선택됨",
fileCount: "{count}개 파일",
fileCountSingular: "{count}개 파일",
noFilesFound: "파일을 찾을 수 없습니다",
selectFilePrompt: "파일을 선택하여 상세 정보를 확인하세요",
openFile: "파일 열기",
selectFile: "파일 선택",
openInPipeline: "파이프라인에서 열기",
dropFilesHere: "여기에 파일을 놓으세요",
orClickToSelect: "또는 클릭하여 파일 선택",
name: "이름",
format: "형식",
size: "크기",
dimensions: "해상도",
version: "버전",
toolsUsed: "사용한 도구",
none: "없음",
delete: "삭제",
pipeline: "파이프라인",
download: "다운로드",
},
dropzone: {
unsupportedFileType: "이 도구에서 지원하지 않는 파일 형식입니다",
urlFetchFailed: "URL에서 이미지를 가져올 수 없습니다",
ariaLabel: "파일 드롭 영역",
dropPrompt: "여기에 이미지를 드롭하세요",
browseOrPaste: "업로드 버튼을 사용하거나 클립보드에서 붙여넣기",
uploadButton: "업로드",
defaultFormats: "이미지, 동영상, 오디오, PDF, 파일 및 150가지 이상의 포맷",
orSeparator: "또는",
urlPlaceholder: "이미지 URL 붙여넣기...",
urlLoadingIndicator: "...",
addUrlButton: "추가",
importMultipleUrls: "여러 URL 가져오기...",
filesSelected: "{count}개 파일 선택됨",
dropToAdd: "파일을 추가하려면 놓기",
dropToReplace: "파일을 교체하려면 놓기",
},
reviewPanel: {
processedResultAlt: "처리 결과",
sizeLabel: "크기: {size}",
typeLabel: "유형: {type}",
processedLabel: "처리 시간: {time}",
undoButton: "실행 취소",
downloadButton: "다운로드",
openInEditor: "에디터에서 열기",
reviewHeading: "리뷰",
continueEditing: "편집 계속하기",
},
features: {
notEnabledTitle: "기능이 활성화되지 않았습니다",
notEnabledDescription:
"이 기능이 활성화되지 않았습니다. 관리자에게 설정에서 활성화를 요청하세요.",
requiresDownload: "이 기능은 추가 다운로드가 필요합니다 (약 {size})",
retryButton: "재시도",
queued: "설치 대기 중...",
enableButton: "{name} 활성화",
repairRequired: "복구 필요",
repairDescription:
"일부 모델 파일이 누락되었거나 손상되었습니다. 복구하면 다시 다운로드됩니다.",
repairButton: "{name} 복구",
lessThanMinute: "1분 미만",
oneMinuteLeft: "약 1분",
minutesLeft: "약 {mins}분",
progressMessages: [
"거의 다 됐어요... 아마도...",
"좋은 건 기다림이 필요한 법이에요...",
"라면 끓이는 것보다는 빠를 거예요...",
"당신의 인내심, 정말 대단해요...",
"보이는 것보다 열심히 일하는 중이에요...",
"지금부터가 진짜예요, 믿어 주세요...",
"무대 뒤에서 중요한 작업 중...",
"이게 보인다면, 잘 돌아가고 있는 거예요...",
"대단한 걸 준비하는 중이에요...",
"기다린 보람이 있을 거예요, 약속해요...",
"긴장감도 경험의 일부예요...",
"컴퓨터에 새로운 기술을 가르치는 중...",
"슈퍼파워를 세팅 중이에요...",
"나중에 파일이 고마워할 거예요...",
"로딩 중... 근데 좀 있어 보이게...",
"커피 한 잔 타기에 딱 좋은 타이밍이에요...",
"로마도 하루 만에 세워지진 않았어요...",
"쉿... 천재가 일하는 중이에요...",
"당신의 프로젝트가 곧 올 결과를 부러워하는 중...",
"드림팀을 구성하는 중이에요...",
"대단한 걸 풀어내는 중...",
"시작할까 말까 고민 중... 농담이에요...",
"반전: 진짜로 뭔가 하고 있는 중이에요...",
"크리에이티브 엔진을 워밍업 중...",
"상상력을 로딩 중...",
"화면보호기 아니에요, 진짜로...",
"위대한 예술에는 설치 시간이 필요해요...",
"미래의 당신이 지금의 당신에게 감사할 거예요...",
"아주 스마트한 파일을 가져오는 중...",
"조금만 기다려 주세요, 좋은 건 아직이에요...",
],
},
help: {
heading: "도움말",
gettingStarted: {
heading: "시작하기",
description:
"사이드바에서 도구를 선택하거나 검색하세요. 페이지에 파일을 드래그하거나 업로드 영역을 클릭하여 파일을 업로드하세요. 설정을 조정한 후 결과를 다운로드하세요.",
},
keyboardShortcuts: {
heading: "키보드 단축키",
focusSearchBar: "검색바로 포커스",
goToTools: "도구로 이동",
toggleTheme: "테마 전환",
goToResize: "리사이즈로 이동",
goToCrop: "크롭으로 이동",
goToCompress: "압축으로 이동",
goToConvert: "변환으로 이동",
goToRemoveBackground: "배경 제거로 이동",
goToWatermarkText: "텍스트 워터마크로 이동",
goToStripMetadata: "메타데이터 제거로 이동",
goToImageInfo: "이미지 정보로 이동",
processFile: "파일 처리",
downloadResult: "결과 다운로드",
},
resources: {
heading: "리소스",
githubLink: "GitHub 저장소",
reportIssueLink: "문제 보고",
docsLink: "문서",
apiRefLink: "API 레퍼런스 (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "오류가 발생했습니다",
offline: "오프라인 상태입니다",
reconnecting: "서버에 재연결 중...",
connected: "연결됨",
processingFailed: "이 파일의 처리에 실패했습니다",
timeout: "요청 시간이 초과되었습니다. 서버가 과부하일 수 있습니다. 다시 시도해 주세요.",
networkError: "네트워크 오류. 연결을 확인하세요.",
invalidCredentials: "사용자명 또는 비밀번호가 올바르지 않습니다",
connectionError: "연결 오류",
},
sidebar: {
sponsor: "후원하기",
tools: "도구",
grid: "그리드",
automate: "자동화",
editor: "에디터",
files: "파일",
help: "도움말",
settings: "설정",
},
toolCard: {
pin: "고정",
unpin: "고정 해제",
},
appLayout: {
mobileNavTools: "도구",
mobileNavAutomate: "자동화",
mobileNavEditor: "에디터",
mobileNavFiles: "파일",
mobileNavSettings: "설정",
},
a11y: {
sponsorLink: "GitHub Sponsors에서 SnapOtter 후원하기",
skipToContent: "본문으로 건너뛰기",
openSidebar: "사이드바 열기",
closeSidebar: "사이드바 닫기",
closeSettings: "설정 닫기",
closeHelp: "도움말 닫기",
closeDialog: "대화 상자 닫기",
zoomIn: "확대",
zoomOut: "축소",
fitToView: "화면에 맞추기",
actualSize: "실제 크기",
pan: "이동",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
fileDropZone: "파일 드롭 영역",
imageDropZone: "Image drop zone",
beforeAfterSlider: "전후 비교 슬라이더",
imageControls: "Image controls",
zoomControls: "확대/축소 컨트롤",
dragToReorder: "드래그하여 순서 변경",
whiteBackground: "흰색 배경",
blackBackground: "검은색 배경",
expandPanel: "패널 펼치기",
collapsePanel: "패널 접기",
swapDimensions: "가로세로 바꾸기",
applyCrop: "자르기 적용",
cancelCrop: "자르기 취소",
fontFamily: "글꼴",
textColor: "텍스트 색상",
flipHorizontal: "좌우 반전",
flipVertical: "상하 반전",
hexColorValue: "HEX 색상 값",
backgroundColor: "배경색",
foregroundColor: "전경색",
swapColors: "전경색과 배경색 바꾸기",
resetColors: "기본 흑백으로 초기화",
foregroundHex: "전경색 HEX 값",
undo: "실행 취소",
redo: "다시 실행",
layers: "레이어",
addLayer: "레이어 추가",
deleteLayer: "레이어 삭제",
cancelOperation: "작업 취소",
fill: "채우기",
fileDetails: "파일 상세 정보",
language: "언어",
selected: "선택됨",
deleteKey: "키 삭제",
editRole: "역할 편집",
deleteRole: "역할 삭제",
notInstalled: "설치되지 않음",
queued: "설치 대기 중",
installing: "설치 중",
imageNOfTotal: "이미지 {n}/{total}",
processingComplete: "이미지 처리가 완료되었습니다",
processingFailed: "처리에 실패했습니다",
settingsDialog: "설정",
helpDialog: "도움말",
navigationMenu: "탐색 메뉴",
homeLink: "SnapOtter 홈",
},
pipelineTemplates: {
"web-optimize": {
name: "웹 최적화",
description:
"이미지 크기를 조정하고 WebP로 변환한 뒤 압축하여 웹에서 빠르게 로드되도록 합니다.",
},
"email-friendly": {
name: "이메일 적합",
description: "이메일에 첨부할 수 있을 만큼 이미지를 충분히 작게 줄입니다.",
},
"privacy-scrub": {
name: "개인정보 정리",
description: "EXIF, GPS 및 기타 메타데이터를 제거한 뒤 압축합니다.",
},
"social-square": {
name: "소셜 정사각형",
description: "1:1 정사각형으로 자르고 소셜 게시물용으로 압축합니다.",
},
"watermark-batch": {
name: "워터마크 일괄 처리",
description: "이미지에 텍스트 워터마크를 찍은 뒤 압축합니다.",
},
"shrink-pdf-email": {
name: "이메일용 PDF 축소",
description: "PDF를 평면화하고 이메일 용량 제한에 맞게 강하게 압축합니다.",
},
"podcast-polish": {
name: "팟캐스트 다듬기",
description: "무음 구간을 제거하고 음량을 정규화한 뒤 녹음에 페이드를 추가합니다.",
},
"cut-out-subject": {
name: "피사체 오려내기",
description: "AI로 배경을 제거하고 투명한 누끼 이미지를 압축합니다.",
},
"restore-old-photo": {
name: "오래된 사진 복원",
description: "AI로 오래되거나 손상된 사진을 복구하고 색을 입히며 업스케일합니다.",
},
},
} as const;
export default ko;