Files
SnapOtter/packages/shared/src/i18n/ko.ts
T

3408 lines
121 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const ko: TranslationKeys = {
common: {
upload: "컴퓨터에서 업로드",
process: "처리",
download: "다운로드",
cancel: "취소",
save: "저장",
delete: "삭제",
settings: "설정",
search: "도구 검색...",
dropFiles: "여기에 파일을 놓거나 업로드 버튼을 클릭하세요",
loading: "로딩 중...",
saving: "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: "Page not found",
pageNotFoundDescription: "The page you are looking for does not exist or has been moved.",
},
categories: {
essentials: "기본 도구",
adjustments: "조정",
enhance: "Enhance & AI",
watermark: "워터마크 및 오버레이",
layout: "레이아웃 및 구도",
utilities: "유틸리티",
optimization: "최적화",
format: "포맷 및 변환",
"video-edit": "Video",
"video-convert": "Convert",
"video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files",
archives: "Archives",
},
modalities: {
image: "Image",
video: "Video",
audio: "Audio",
documentsAndFiles: "Documents & Files",
},
tools: {
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 to Image",
description: "Capture webpages as high-quality images",
},
"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: "Circle Crop",
description: "Crop image to a centered circle with transparent corners",
},
duotone: {
name: "Duotone",
description: "Apply a two-color duotone effect with custom shadow and highlight colors",
},
"image-pad": {
name: "Image Pad",
description: "Pad image to a target aspect ratio with a solid color background",
},
pixelate: {
name: "Pixelate",
description: "Apply a pixelation effect to the full image or a specific region",
},
vignette: {
name: "Vignette",
description: "Add a vignette effect with adjustable strength and color",
},
"gif-webp": {
name: "GIF/WebP Converter",
description: "Convert animated GIF to WebP and vice versa, preserving all frames",
},
histogram: {
name: "Histogram",
description: "Generate an RGB histogram chart from an image",
},
"lqip-placeholder": {
name: "LQIP Placeholder",
description: "Generate a tiny low-quality image placeholder with base64 data URI",
},
"sprite-sheet": {
name: "Sprite Sheet",
description: "Combine multiple images into a single sprite sheet grid",
},
"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: "Barcode Generator",
description: "Generate barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14, and Data Matrix",
},
"chart-maker": {
name: "Chart Maker",
description: "Create bar, line, or pie charts from CSV or JSON data",
},
"convert-video": {
name: "Convert Video",
description: "Convert videos between MP4, MOV, and WebM",
},
"compress-video": {
name: "Compress Video",
description: "Shrink video file size with quality control",
},
"trim-video": {
name: "Trim Video",
description: "Cut a clip out of a video",
},
"mute-video": {
name: "Mute Video",
description: "Remove the audio track from a video",
},
"video-to-gif": {
name: "Video to GIF",
description: "Turn a video clip into an animated GIF",
},
"resize-video": {
name: "Resize Video",
description: "Scale a video to a new resolution or preset size",
},
"crop-video": {
name: "Crop Video",
description: "Crop a region out of a video",
},
"rotate-video": {
name: "Rotate Video",
description: "Rotate or flip a video",
},
"change-fps": {
name: "Change FPS",
description: "Change the frame rate of a video",
},
"video-color": {
name: "Video Color",
description: "Adjust brightness, contrast, saturation, and gamma",
},
"video-speed": {
name: "Video Speed",
description: "Speed up or slow down a video",
},
"reverse-video": {
name: "Reverse Video",
description: "Play a video clip backwards",
},
"video-loudnorm": {
name: "Normalize Audio",
description: "Normalize video audio volume to broadcast standard",
},
"aspect-pad": {
name: "Aspect Pad",
description: "Add solid-color bars to fit a target aspect ratio",
},
"blur-pad": {
name: "Blur Pad",
description: "Fill bars with a blurred copy of the video",
},
"watermark-video": {
name: "Watermark Video",
description: "Burn a text watermark onto video frames",
},
"stabilize-video": {
name: "Stabilize Video",
description: "Reduce camera shake with two-pass stabilization",
},
"gif-to-video": {
name: "GIF to Video",
description: "Convert an animated GIF into an MP4 or WebM video",
},
"video-to-webp": {
name: "Video to WebP",
description: "Convert a video clip into an animated WebP image",
},
"video-to-frames": {
name: "Video to Frames",
description: "Extract frames from a video as a ZIP of images",
},
"merge-videos": {
name: "Merge Videos",
description: "Join multiple video clips into one file",
},
"replace-audio": {
name: "Replace Audio",
description: "Swap the audio track of a video with another file",
},
"burn-subtitles": {
name: "Burn Subtitles",
description: "Permanently render subtitles onto video frames",
},
"embed-subtitles": {
name: "Embed Subtitles",
description: "Mux a subtitle track into the video container",
},
"extract-subtitles": {
name: "Extract Subtitles",
description: "Pull the subtitle track out of a video as an SRT file",
},
"images-to-video": {
name: "Images to Video",
description: "Turn a set of images into a slideshow video",
},
"video-metadata": {
name: "Clean Video Metadata",
description: "Strip metadata from a video and report what was found",
},
"convert-audio": {
name: "Convert Audio",
description: "Convert audio between MP3, WAV, OGG, and more",
},
"trim-audio": {
name: "Trim Audio",
description: "Cut a section out of an audio file",
},
"extract-audio": {
name: "Extract Audio",
description: "Pull the audio track out of a video",
},
"volume-adjust": {
name: "Volume Adjust",
description: "Increase or decrease audio volume by a fixed gain",
},
"normalize-audio": {
name: "Normalize Audio",
description: "Even out loudness to broadcast standard levels",
},
"fade-audio": {
name: "Fade Audio",
description: "Add fade-in and fade-out effects to audio",
},
"reverse-audio": {
name: "Reverse Audio",
description: "Play audio backwards",
},
"audio-speed": {
name: "Audio Speed",
description: "Speed up or slow down audio playback",
},
"pitch-shift": {
name: "Pitch Shift",
description: "Raise or lower pitch by semitones without changing speed",
},
"audio-channels": {
name: "Audio Channels",
description: "Convert between mono, stereo, or swap left and right channels",
},
"silence-removal": {
name: "Silence Removal",
description: "Strip silent sections from audio",
},
"noise-reduction": {
name: "Noise Reduction",
description: "Reduce background noise with FFT-based denoising",
},
"merge-audio": {
name: "Merge Audio",
description: "Combine multiple audio files into one",
},
"split-audio": {
name: "Split Audio",
description: "Split audio by time, equal parts, or silence detection",
},
"ringtone-maker": {
name: "Ringtone Maker",
description: "Create a ringtone clip from any audio file",
},
"waveform-image": {
name: "Waveform Image",
description: "Generate a waveform visualization as a PNG image",
},
"audio-metadata": {
name: "Audio Metadata",
description: "View, edit, or strip audio tags (ID3)",
},
"merge-pdf": {
name: "Merge PDFs",
description: "Combine multiple PDFs into one",
},
"split-pdf": {
name: "Split PDF",
description: "Extract pages or split into parts",
},
"compress-pdf": {
name: "Compress PDF",
description: "Shrink PDF file size",
},
"rotate-pdf": {
name: "Rotate PDF",
description: "Rotate pages in a PDF",
},
"convert-document": {
name: "Convert Document",
description: "Convert between Word, OpenDocument, RTF, and plain text formats",
},
"convert-presentation": {
name: "Convert Presentation",
description: "Convert between PowerPoint and OpenDocument presentation formats",
},
"convert-spreadsheet": {
name: "Convert Spreadsheet",
description:
"Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.",
},
"excel-to-pdf": {
name: "Excel to PDF",
description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.",
},
"word-to-pdf": {
name: "Word to PDF",
description: "Convert Word documents to PDF",
},
"extract-pages": {
name: "Extract Pages",
description: "Pull selected pages into a new PDF",
},
"remove-pages": {
name: "Remove Pages",
description: "Delete specific pages from a PDF",
},
"organize-pdf": {
name: "Organize PDF",
description: "Reorder pages with an explicit page order",
},
"protect-pdf": {
name: "Protect PDF",
description: "Add password protection (AES-256 encryption)",
},
"unlock-pdf": {
name: "Unlock PDF",
description: "Remove password protection from a PDF",
},
"repair-pdf": {
name: "Repair PDF",
description: "Attempt to repair a damaged or corrupted PDF",
},
"linearize-pdf": {
name: "Web-Optimize PDF",
description: "Linearize a PDF for fast web viewing",
},
"grayscale-pdf": {
name: "Grayscale PDF",
description: "Convert all colors to grayscale",
},
"pdfa-convert": {
name: "PDF/A Convert",
description: "Convert to archival PDF/A-2",
},
"crop-pdf": {
name: "Crop PDF",
description: "Crop all pages with a uniform margin",
},
"nup-pdf": {
name: "N-up PDF",
description: "Arrange multiple pages per sheet",
},
"booklet-pdf": {
name: "Booklet PDF",
description: "Arrange pages for folding into a booklet",
},
"watermark-pdf": {
name: "Watermark PDF",
description: "Add a text watermark to every page",
},
"pdf-page-numbers": {
name: "PDF Page Numbers",
description: "Add page numbers to every page",
},
"flatten-pdf": {
name: "Flatten PDF",
description: "Bake forms and annotations into page content",
},
"redact-pdf": {
name: "Redact PDF",
description: "Permanently remove text occurrences (verified true redaction)",
},
"pdf-to-text": {
name: "PDF to Text",
description: "Extract plain text from a PDF",
},
"pdf-to-word": {
name: "PDF to Word",
description: "Best for text-based PDFs; scanned pages need OCR",
},
"pdf-metadata": {
name: "PDF Metadata",
description: "Read and write PDF document metadata",
},
"powerpoint-to-pdf": {
name: "PowerPoint to PDF",
description: "Convert presentations to PDF",
},
"html-to-pdf": {
name: "HTML to PDF",
description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.",
},
"markdown-to-docx": {
name: "Markdown to Word",
description: "Convert a Markdown file to a Word document (DOCX)",
},
"markdown-to-html": {
name: "Markdown to HTML",
description:
"Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.",
},
"markdown-to-pdf": {
name: "Markdown to PDF",
description:
"Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.",
},
"epub-convert": {
name: "Convert EPUB",
description:
"Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.",
},
"to-epub": {
name: "Convert to EPUB",
description: "Convert Word, Markdown, HTML, or plain text files to EPUB",
},
"csv-excel": {
name: "CSV to Excel",
description: "Convert between CSV and Excel (XLSX), both directions",
},
"csv-json": {
name: "CSV to JSON",
description: "Convert between CSV and JSON, both directions",
},
"json-xml": {
name: "JSON to XML",
description: "Convert between JSON and XML, both directions",
},
"split-csv": {
name: "Split CSV",
description: "Split a CSV into smaller files by row count",
},
"merge-csvs": {
name: "Merge CSVs",
description: "Combine multiple CSV or TSV files with matching columns into one",
},
"yaml-json": {
name: "YAML / JSON",
description: "Convert between YAML and JSON, both directions",
},
"xml-to-csv": {
name: "XML to CSV",
description: "Extract repeating elements from XML into a CSV table",
},
"create-zip": {
name: "Create ZIP",
description: "Bundle multiple files into a single ZIP archive",
},
"extract-zip": {
name: "Extract ZIP",
description:
"Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.",
},
pipeline: { name: "Pipeline 빌더", description: "여러 도구를 워크플로로 연결" },
processing: { canceled: "Processing canceled" },
mediaPlayer: {
unsupported: "Your browser does not support this media format.",
},
documentView: {
loadFailed: "Failed to load document.",
previousPage: "Previous page",
nextPage: "Next page",
},
},
toolSettings: {
compress: {
compressionMode: "압축 모드",
targetSize: "목표 크기",
quality: "품질",
smallestFile: "최소 파일",
bestQuality: "최고 품질",
submit: "압축",
submitBatch: "압축 ({count}개 파일)",
progressLabel: "압축 중",
original: "원본: {size} KB",
processed: "처리 후: {size} KB",
saved: "절감: {percent}%",
},
resize: {
customSize: "맞춤 크기",
scale: "스케일",
presets: "프리셋",
contentAware: "콘텐츠 인식",
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: "위치 정보 발견",
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: "Output Format",
edgeSmoothing: "Edge Smoothing",
edgeSmoothingOff: "Off",
edgeSmoothingLight: "Light",
edgeSmoothingMedium: "Medium",
edgeSmoothingStrong: "Strong",
colorDecontamination: "Color Decontamination",
rendering: "렌더링 중...",
submit: "배경 제거",
submitBatch: "배경 제거 ({count}개 파일)",
progressLabel: "배경 제거 중",
},
upscale: {
scaleFactor: "확대 배율",
quality: "품질",
enhanceFaces: "얼굴 향상",
noiseReduction: "노이즈 감소",
noiseReductionHint:
"입자와 노이즈를 스무딩합니다. 값이 높을수록 노이즈 제거가 강하지만 디테일이 부드러워질 수 있습니다.",
outputFormat: "출력 포맷",
submit: "{scale}배 확대",
submitBatch: "{scale}배 확대 ({count}개 파일)",
progressLabel: "이미지 업스케일 중",
progressLabelBatch: "{count}개 이미지 업스케일 중",
},
"erase-object": {
brushSize: "브러시 크기",
fine: "가늘게",
wide: "굵게",
undo: "실행 취소",
clear: "지우기",
outputFormat: "출력 포맷",
quality: "품질",
paintHint: "제거할 객체 위를 칠하세요. Ctrl+Z로 실행 취소할 수 있습니다.",
submit: "객체 지우기",
submitBatch: "모두 지우기 ({count})",
progressLabel: "객체 지우는 중",
},
ocr: {
quality: "품질",
enhanceBeforeScanning: "스캔 전 향상",
enhanceHint:
"스캔 전에 자동으로 기울기 보정, 대비 향상, 노이즈 제거, 업스케일을 수행하여 인식 정확도를 높입니다.",
language: "언어",
autoDetect: "자동 감지",
extractedText: "추출된 텍스트",
noTextDetected: "이 이미지에서 텍스트가 감지되지 않았습니다",
characters: "{count}자",
submit: "텍스트 추출",
submitBatch: "텍스트 추출 ({count}개 파일)",
progressLabel: "텍스트 추출 중",
},
"ocr-pdf": {
quality: "품질",
language: "언어",
autoDetect: "자동 감지",
pages: "페이지",
pagesPlaceholder: "all, 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: "Download",
defaultText: "Your Text Here",
},
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: "Read Info",
reading: "Reading...",
channelStats: "Channel Stats",
yes: "Yes",
no: "No",
na: "N/A",
failedToRead: "Failed to read info",
},
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 File",
htmlFile: "HTML File",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "Output Format",
quality: "Quality",
devicePreset: "Device",
viewportWidth: "Width",
viewportHeight: "Height",
fullPage: "Full Page",
submit: "Capture",
download: "Download Screenshot",
capturing: "Capturing webpage...",
errorTimeout: "Page took too long to load",
errorBlocked: "This URL cannot be captured",
errorUnavailable: "Screenshot service is not available",
errorFailed: "Failed to capture the page",
placeholder: "Enter a URL and click Capture",
presets: {
desktop: "Desktop",
tablet: "Tablet",
mobile: "Mobile",
custom: "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: "Circle Crop",
submitBatch: "Circle Crop ({count} files)",
progressLabel: "Cropping to circle",
},
duotone: {
shadow: "Shadow Color",
highlight: "Highlight Color",
submit: "Apply Duotone",
submitBatch: "Apply Duotone ({count} files)",
progressLabel: "Applying duotone",
},
"image-pad": {
target: "Target Ratio",
color: "Background Color",
submit: "Pad Image",
submitBatch: "Pad Image ({count} files)",
progressLabel: "Padding image",
},
pixelate: {
blockSize: "Block Size",
submit: "Pixelate",
submitBatch: "Pixelate ({count} files)",
progressLabel: "Pixelating",
},
vignette: {
strength: "Strength",
color: "Vignette Color",
submit: "Apply Vignette",
submitBatch: "Apply Vignette ({count} files)",
progressLabel: "Applying vignette",
},
"gif-webp": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting animation",
},
histogram: {
submit: "Generate Histogram",
submitBatch: "Generate Histogram ({count} files)",
progressLabel: "Generating histogram",
},
"lqip-placeholder": {
width: "Width",
blur: "Blur",
submit: "Generate Placeholder",
submitBatch: "Generate Placeholder ({count} files)",
progressLabel: "Generating placeholder",
},
"sprite-sheet": {
columns: "Columns",
padding: "Padding",
background: "Background Color",
submit: "Create Sprite Sheet",
submitBatch: "Create Sprite Sheet",
progressLabel: "Creating sprite sheet",
},
"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: "Text",
type: "Barcode Type",
scale: "Scale",
includeText: "Include Text",
submit: "Generate Barcode",
download: "Download Barcode",
},
"chart-maker": {
kind: "Chart Type",
title: "Title",
width: "Width",
height: "Height",
submit: "Create Chart",
submitBatch: "Create Chart ({count} files)",
progressLabel: "Creating chart",
},
"enhance-faces-standalone": {
model: "모델",
fast: "빠름",
balanced: "균형",
best: "최고",
},
"convert-video": {
format: "Output format",
quality: "Quality",
high: "High",
balanced: "Balanced",
small: "Smallest",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"compress-video": {
quality: "Compression",
light: "Light",
balanced: "Balanced",
strong: "Strong",
resolution: "Resolution",
original: "Original",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"trim-video": {
start: "Start (seconds)",
end: "End (seconds)",
precise: "Frame-accurate (re-encodes)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"mute-video": {
submit: "Remove audio",
submitBatch: "Remove audio ({count} files)",
progressLabel: "Muting",
},
"video-to-gif": {
fps: "Frames per second",
width: "Width (px)",
start: "Start (seconds)",
duration: "Duration (seconds)",
submit: "Create GIF",
submitBatch: "Create GIFs ({count} files)",
progressLabel: "Creating GIF",
},
"resize-video": {
preset: "Preset",
width: "Width (px)",
height: "Height (px)",
hint: "Leave one dimension empty to keep aspect ratio",
submit: "Resize",
submitBatch: "Resize ({count} files)",
progressLabel: "Resizing",
},
"crop-video": {
width: "Width (px)",
height: "Height (px)",
x: "X offset",
y: "Y offset",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"rotate-video": {
transform: "Transform",
cw90: "Rotate 90 clockwise",
ccw90: "Rotate 90 counter-clockwise",
rotate180: "Rotate 180",
hflip: "Flip horizontal",
vflip: "Flip vertical",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"change-fps": {
fps: "Frames per second",
submit: "Change FPS",
submitBatch: "Change FPS ({count} files)",
progressLabel: "Changing FPS",
},
"video-color": {
brightness: "Brightness",
contrast: "Contrast",
saturation: "Saturation",
gamma: "Gamma",
submit: "Apply",
submitBatch: "Apply ({count} files)",
progressLabel: "Adjusting color",
},
"video-speed": {
factor: "Speed factor",
keepPitch: "Keep original pitch",
submit: "Change speed",
submitBatch: "Change speed ({count} files)",
progressLabel: "Changing speed",
},
"reverse-video": {
hint: "Limited to clips up to 5 minutes",
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"video-loudnorm": {
hint: "Normalizes audio to EBU R128 broadcast standard",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"aspect-pad": {
target: "Target ratio",
color: "Background color",
colorHint: "Hex color, e.g. #000000",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"blur-pad": {
target: "Target ratio",
blur: "Blur strength",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"watermark-video": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
color: "Color",
colorHint: "Hex color, e.g. #ffffff",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"stabilize-video": {
smoothing: "Smoothing",
hint: "Runs two passes and takes longer than most tools",
submit: "Stabilize",
submitBatch: "Stabilize ({count} files)",
progressLabel: "Stabilizing",
},
"gif-to-video": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-webp": {
fps: "Frames per second",
width: "Width (px)",
quality: "Quality",
loop: "Loop animation",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-frames": {
mode: "Extraction mode",
modeAll: "All frames",
modeNth: "Every Nth frame",
modeTimestamps: "Specific timestamps",
n: "Take every Nth frame",
timestamps: "Timestamps (seconds)",
timestampsHint: "Comma-separated, e.g. 0.5, 2, 4.5",
format: "Image format",
submit: "Extract Frames",
submitBatch: "Extract Frames ({count} files)",
progressLabel: "Extracting frames",
},
"merge-videos": {
hint: "Files are joined in upload order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"replace-audio": {
hint: "Upload the video first, then the audio",
submit: "Replace Audio",
submitBatch: "Replace Audio ({count} files)",
progressLabel: "Replacing audio",
},
"burn-subtitles": {
fontSize: "Font size",
hint: "Upload a video and a subtitle file (.srt or .vtt)",
submit: "Burn Subtitles",
submitBatch: "Burn Subtitles ({count} files)",
progressLabel: "Burning subtitles",
},
"embed-subtitles": {
language: "Language code",
languageHint: "Three-letter ISO 639-2 code, e.g. eng, spa, fra",
submit: "Embed Subtitles",
submitBatch: "Embed Subtitles ({count} files)",
progressLabel: "Embedding subtitles",
},
"extract-subtitles": {
submit: "Extract Subtitles",
submitBatch: "Extract Subtitles ({count} files)",
progressLabel: "Extracting subtitles",
},
"images-to-video": {
secondsPerImage: "Seconds per image",
resolution: "Resolution",
fps: "Frames per second",
submit: "Create Video",
submitBatch: "Create Video ({count} files)",
progressLabel: "Creating slideshow",
},
"video-metadata": {
hint: "Metadata report appears in the result",
submit: "Strip Metadata",
submitBatch: "Strip Metadata ({count} files)",
progressLabel: "Stripping metadata",
},
"convert-audio": {
format: "Output format",
bitrate: "Bitrate (kbps)",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"trim-audio": {
start: "Start (seconds)",
end: "End (seconds)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"extract-audio": {
format: "Output format",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"volume-adjust": {
"gain-db": "Gain (dB)",
submit: "Adjust Volume",
submitBatch: "Adjust Volume ({count} files)",
progressLabel: "Adjusting volume",
},
"normalize-audio": {
hint: "EBU R128 loudness normalization",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"fade-audio": {
"fade-in-s": "Fade in (seconds)",
"fade-out-s": "Fade out (seconds)",
submit: "Apply Fade",
submitBatch: "Apply Fade ({count} files)",
progressLabel: "Applying fade",
},
"reverse-audio": {
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"audio-speed": {
factor: "Speed factor",
submit: "Change Speed",
submitBatch: "Change Speed ({count} files)",
progressLabel: "Changing speed",
},
"pitch-shift": {
semitones: "Semitones",
hint: "0 semitones is not allowed",
submit: "Shift Pitch",
submitBatch: "Shift Pitch ({count} files)",
progressLabel: "Shifting pitch",
},
"audio-channels": {
mode: "Channel mode",
"stereo-to-mono": "Stereo to mono",
"mono-to-stereo": "Mono to stereo",
swap: "Swap left/right",
submit: "Convert Channels",
submitBatch: "Convert Channels ({count} files)",
progressLabel: "Converting channels",
},
"silence-removal": {
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Remove Silence",
submitBatch: "Remove Silence ({count} files)",
progressLabel: "Removing silence",
},
"noise-reduction": {
strength: "Strength",
light: "Light",
medium: "Medium",
strong: "Strong",
submit: "Reduce Noise",
submitBatch: "Reduce Noise ({count} files)",
progressLabel: "Reducing noise",
},
"merge-audio": {
format: "Output format",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "Files will be joined in upload order",
submit: "Merge Audio",
submitBatch: "Merge Audio ({count} files)",
progressLabel: "Merging audio",
},
"split-audio": {
mode: "Split mode",
time: "By time",
parts: "Equal parts",
silence: "By silence",
"segment-s": "Segment length (seconds)",
"num-parts": "Number of parts",
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Split Audio",
submitBatch: "Split Audio ({count} files)",
progressLabel: "Splitting audio",
},
"ringtone-maker": {
"start-s": "Start time (seconds)",
"duration-s": "Duration (seconds)",
"max-hint": "Maximum 30 seconds",
submit: "Create Ringtone",
submitBatch: "Create Ringtone ({count} files)",
progressLabel: "Creating ringtone",
},
"waveform-image": {
width: "Width (px)",
height: "Height (px)",
color: "Waveform color",
submit: "Generate Waveform",
submitBatch: "Generate Waveform ({count} files)",
progressLabel: "Generating waveform",
},
"audio-metadata": {
strip: "Strip all metadata",
title: "Title",
artist: "Artist",
album: "Album",
submit: "Apply Metadata",
submitBatch: "Apply Metadata ({count} files)",
progressLabel: "Applying metadata",
},
"merge-pdf": {
addFiles: "Add PDFs to merge",
needTwo: "At least two PDFs are required",
orderHint: "{count} PDFs will merge in this order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"split-pdf": {
mode: "Split mode",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
everyN: "Pages per part",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"compress-pdf": {
preset: "Quality preset",
screen: "Screen (smallest)",
ebook: "Ebook (balanced)",
printer: "Printer (best quality)",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"rotate-pdf": {
angle: "Rotation angle",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 1-z (all pages)",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"convert-document": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-presentation": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-spreadsheet": {
format: "Output format",
hint: "Multi-sheet workbooks export the first sheet to CSV.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"excel-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"powerpoint-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"word-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"extract-pages": {
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"remove-pages": {
pages: "Pages to remove",
pagesHint: "e.g. 2, 4-6, z (last page)",
submit: "Remove",
submitBatch: "Remove ({count} files)",
progressLabel: "Removing",
},
"organize-pdf": {
order: "Page order",
orderHint: "e.g. 3,1,2 or 1-z (identity)",
submit: "Reorder",
submitBatch: "Reorder ({count} files)",
progressLabel: "Reordering",
},
"protect-pdf": {
userPassword: "User password",
ownerPassword: "Owner password (optional)",
ownerPasswordHint: "Defaults to user password if empty",
submit: "Protect",
submitBatch: "Protect ({count} files)",
progressLabel: "Encrypting",
},
"unlock-pdf": {
password: "Password",
submit: "Unlock",
submitBatch: "Unlock ({count} files)",
progressLabel: "Decrypting",
},
"repair-pdf": {
submit: "Repair",
submitBatch: "Repair ({count} files)",
progressLabel: "Repairing",
},
"linearize-pdf": {
submit: "Optimize",
submitBatch: "Optimize ({count} files)",
progressLabel: "Linearizing",
},
"grayscale-pdf": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"pdfa-convert": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"crop-pdf": {
margin: "Margin (points)",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"nup-pdf": {
perSheet: "Pages per sheet",
submit: "Arrange",
submitBatch: "Arrange ({count} files)",
progressLabel: "Arranging",
},
"booklet-pdf": {
perSheet: "Pages per sheet",
submit: "Create Booklet",
submitBatch: "Create Booklet ({count} files)",
progressLabel: "Creating booklet",
},
"watermark-pdf": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
rotation: "Rotation",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"pdf-page-numbers": {
position: "Position",
fontSize: "Font size",
submit: "Add Numbers",
submitBatch: "Add Numbers ({count} files)",
progressLabel: "Numbering",
},
"flatten-pdf": {
submit: "Flatten",
submitBatch: "Flatten ({count} files)",
progressLabel: "Flattening",
},
"redact-pdf": {
terms: "Terms to redact",
termsHint: "One term per line (max 50)",
caseSensitive: "Case sensitive",
submit: "Redact",
submitBatch: "Redact ({count} files)",
progressLabel: "Redacting",
},
"pdf-to-text": {
submit: "Extract Text",
submitBatch: "Extract Text ({count} files)",
progressLabel: "Extracting",
},
"pdf-to-word": {
hint: "Best for text-based PDFs; scanned pages need OCR",
submit: "Convert to Word",
submitBatch: "Convert to Word ({count} files)",
progressLabel: "Converting",
},
"pdf-metadata": {
title: "Title",
author: "Author",
subject: "Subject",
keywords: "Keywords",
submit: "Set Metadata",
submitBatch: "Set Metadata ({count} files)",
progressLabel: "Setting metadata",
},
"html-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"markdown-to-docx": {
submit: "Convert to DOCX",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-html": {
hint: "Remote images in the source are left as-is in the output.",
submit: "Convert to HTML",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"epub-convert": {
format: "Output format",
hint: "Remote resources inside the book are not fetched.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"to-epub": {
submit: "Convert to EPUB",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-excel": {
sheet: "Worksheet number",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-json": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"json-xml": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"split-csv": {
rowsPerFile: "Rows per file",
keepHeader: "Keep header in each file",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"merge-csvs": {
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"yaml-json": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"xml-to-csv": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"create-zip": {
submit: "Create ZIP",
submitBatch: "Create ZIP ({count} files)",
progressLabel: "Zipping",
},
"extract-zip": {
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
},
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: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
applyAndDownload: "적용 및 다운로드",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
newFile: "New file",
previewUnavailable: "Preview will be available after processing",
generatePreview: "Generate Preview",
previewFailed: "Preview generation failed",
backToTools: "Back to Tools",
original: "Original",
processed: "Processed",
saved: "Saved",
noChange: "no change",
download: "Download",
settingsSaved: "설정이 저장되었습니다.",
tryAgain: "다시 시도",
tryDifferentFile: "다른 파일 시도",
batchPartialSuccess: "{success} of {total} processed. {failed} failed.",
dataResultsHint: "Results shown above. Use the copy button in the results panel.",
downloadAsFile: "Download as file",
downloadAll: "Download All",
downloadFiles: "Download {count} files",
},
homePage: {
generatingPreview: "미리보기 생성 중...",
loadingPreview: "미리보기 로딩 중...",
changeFile: "파일 변경",
quickActions: "빠른 실행",
allTools: "모든 도구",
searchPlaceholder: "Search {count} tools...",
recent: "Recent",
popular: "Popular",
browseByCategory: "Browse by Category",
gettingStarted: "Getting Started",
noToolsMatch: "No tools match '{query}'",
clearSearch: "Clear search",
all: "All",
documents: "Documents",
data: "Data",
toolCount: "{count} tools",
},
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: "Shape",
fill: "Fill",
stroke: "Stroke",
strokeWidth: "Width",
cornerRadius: "Radius",
sides: "Sides",
points: "Points",
dashStyle: "Dash",
solid: "Solid",
dashed: "Dashed",
dotted: "Dotted",
none: "None",
opacity: "Opacity",
rectangle: "Rectangle",
ellipse: "Ellipse",
line: "Line",
arrow: "Arrow",
polygon: "Polygon",
star: "Star",
},
},
settings: {
heading: "설정",
nav: {
general: "일반",
systemSettings: "시스템 설정",
security: "보안",
people: "멤버",
teams: "팀",
roles: "역할",
auditLog: "감사 로그",
usage: "Usage",
apiKeys: "API 키",
aiFeatures: "AI 기능",
tools: "도구",
productAnalytics: "제품 분석",
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: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "보안",
description: "비밀번호 및 인증 설정.",
changePasswordHeading: "비밀번호 변경",
currentPasswordPlaceholder: "현재 비밀번호",
newPasswordPlaceholder: "새 비밀번호",
confirmPasswordPlaceholder: "새 비밀번호 확인",
passwordsMismatch: "비밀번호가 일치하지 않습니다",
passwordTooShort: "비밀번호는 4자 이상이어야 합니다",
changeSuccess: "비밀번호가 변경되었습니다",
changeFailed: "비밀번호 변경에 실패했습니다",
currentPasswordIncorrect: "현재 비밀번호가 올바르지 않습니다",
changePasswordButton: "비밀번호 변경",
loginAttemptLimitNote: "로그인 시도 제한은 시스템 설정에서 구성할 수 있습니다.",
adminHeading: "Admin Security Settings",
adminDescription: "Enterprise security policy settings. These apply to all users.",
sessionIdleTimeout: "Session Idle Timeout (minutes)",
sessionIdleTimeoutDesc: "Automatically log out idle sessions. 0 = disabled.",
maxSessionsPerUser: "Max Sessions Per User",
maxSessionsPerUserDesc: "Limit concurrent sessions per user. 0 = unlimited.",
mfaPolicy: "MFA Policy",
mfaPolicyDesc: "Require multi-factor authentication for users.",
mfaPolicyOptional: "Optional",
mfaPolicyAdminsOnly: "Required for admins",
mfaPolicyRequired: "Required for all users",
ssoEnforcement: "SSO Enforcement",
ssoEnforcementDesc: "Require SSO login for all non-break-glass users.",
ssoBreakGlassUsername: "Break Glass Admin Username",
ssoBreakGlassUsernameDesc:
"This admin can still log in with local credentials when SSO is enforced.",
passwordMinLength: "Minimum Password Length",
passwordMinLengthDesc: "Minimum number of characters required for passwords.",
passwordRequireUppercase: "Require Uppercase",
passwordRequireUppercaseDesc: "Require at least one uppercase letter.",
passwordRequireNumber: "Require Number",
passwordRequireNumberDesc: "Require at least one number.",
passwordRequireSpecial: "Require Special Character",
passwordRequireSpecialDesc: "Require at least one special character.",
passwordPolicyHeading: "Password Policy",
securitySettingsSaved: "Security settings saved",
securitySettingsFailed: "Failed to save security settings",
},
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: "Storage Quota (MB)",
teamStorageQuotaDesc: "Maximum storage for this team in MB. Leave empty for no limit.",
teamRetentionHours: "Retention (hours)",
teamRetentionHoursDesc:
"Processing file retention for this team. Leave empty to use global default.",
quotaSaved: "Team settings saved",
},
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: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
storageByTeam: "Storage by Team",
teamColumn: "Team",
storageColumn: "Storage",
usersColumn: "Users",
},
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: "Data Retention",
fileMaxAgeHours: "Processing file retention (hours)",
fileMaxAgeHoursDesc: "How long to keep uploaded and processed files. Default: 72 hours.",
jobsRetentionDays: "Job record retention (days)",
jobsRetentionDaysDesc: "How long to keep job metadata. 0 = keep forever. Default: 30 days.",
auditRetentionDays: "Audit log retention (days)",
auditRetentionDaysDesc:
"How long to keep audit log entries. 0 = keep forever. Default: forever.",
},
analytics: {
heading: "제품 분석",
description: "익명 사용 데이터를 공유하여 SnapOtter 개선에 도움을 주세요.",
privacyNote: "이미지는 절대 기기 밖으로 나가지 않습니다.",
disabledByAdmin: "서버 관리자가 제품 분석을 비활성화했습니다.",
enabledLabel: "분석 활성화됨",
disabledLabel: "분석 비활성화됨",
learnMore: "자세히 알아보기",
},
aiFeatures: {
title: "AI Features",
description: "Manage AI model bundles for advanced image processing.",
installAll: "Install All",
diskUsage: "Disk usage:",
installed: "Installed",
notInstalled: "Not installed",
queued: "Queued",
install: "Install",
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "정보",
appName: "SnapOtter",
appDescription:
"셀프 호스팅, 개인정보 우선의 이미지 처리 도구 모음으로 70+개의 도구를 제공합니다. 리사이즈, 압축, 변환, 워터마크 추가 등 이미지 워크플로를 클라우드에 데이터를 보내지 않고 자동화할 수 있습니다.",
versionLabel: "버전:",
linksHeading: "링크",
githubLink: "GitHub 저장소",
docsLink: "문서",
apiRefLink: "API 레퍼런스 (Swagger)",
licenseLabel: "License:",
licenseDescription:
"SnapOtter is open-source software licensed under the 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 authentication failed. Please try again.",
samlUserNotAuthorized:
"Your account is not authorized to access this application. Contact your administrator.",
samlUserLimitReached: "User limit reached. Contact your administrator.",
ssoEnforcedLocalRestricted: "Local login is restricted to authorized administrators.",
mfaRequired: "Enter your authentication code",
mfaRecoveryHint: "You can also use a recovery code",
verify: "Verify",
verifying: "Verifying...",
mfaInvalidCode: "Invalid code. Please try again.",
mfaEnrollmentRequired:
"Your organization requires multi-factor authentication. Please set up MFA in your account settings.",
methodSaml: "SAML",
passwordManagedByProvider: "비밀번호는 ID 제공자에서 관리됩니다.",
enterUsername: "사용자명 입력",
enterPassword: "비밀번호 입력",
heroTitle: "당신의 이미지는, 당신의 것입니다.",
heroSubtitle: "필요한 모든 이미지 도구가 여기에.",
rotatingPhrases: [
"가입도 필요 없고, 계정도 필요 없어요.",
"클라우드 업로드? 절대 없습니다.",
"100% 로컬 처리.",
"무료. 영원히 무료.",
"제한 없음. 숨겨진 상한 없음.",
"완전히 오프라인으로 작동해요.",
"무제한 일괄 처리.",
"70+개의 이미지 도구.",
"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: "저장됨",
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: "No steps yet",
searchToolsPlaceholder: "Search tools...",
step: "단계",
},
nav: {
tools: "도구",
reader: "리더",
automate: "자동화",
editor: "에디터",
files: "파일",
help: "도움말",
settings: "설정",
grid: "그리드",
},
files: {
myFiles: "My Files",
recentTab: "Recent",
uploadTab: "Upload Files",
fileDetailsAriaLabel: "File Details",
fileDetailsHeading: "File Details",
searchPlaceholder: "Search files...",
selectedCount: "{count} selected",
fileCount: "{count} files",
fileCountSingular: "{count} file",
noFilesFound: "No files found",
selectFilePrompt: "Select a file to view details",
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
dimensions: "Dimensions",
version: "Version",
toolsUsed: "Tools Used",
none: "None",
delete: "Delete",
pipeline: "Pipeline",
download: "Download",
},
dropzone: {
unsupportedFileType: "이 도구에서 지원하지 않는 파일 형식입니다",
urlFetchFailed: "URL에서 이미지를 가져올 수 없습니다",
ariaLabel: "파일 드롭 영역",
dropPrompt: "여기에 이미지를 드롭하세요",
browseOrPaste: "아무 곳이나 클릭하여 파일 탐색, 또는 클립보드에서 붙여넣기",
uploadButton: "업로드",
defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD 외 65가지 이상의 포맷",
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: "Repair Required",
repairDescription: "Some model files are missing or corrupted. Repair will re-download them.",
repairButton: "Repair {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: "연결 오류",
},
analytics: {
consentTitle: "SnapOtter 개선에 도움을 주세요",
consentDescription:
"익명 사용 데이터는 버그 수정과 정말 필요한 도구 개발에 도움이 됩니다. 이미지와 파일은 항상 사용자의 기기에 머물러요.",
consentChangeable: "설정에서 언제든 끌 수 있어요.",
acceptButton: "네, 좋아요",
declineButton: "지금은 괜찮아요",
settingsTitle: "제품 분석",
settingsDescription: "익명 사용 데이터를 공유하여 SnapOtter 개선에 도움을 주세요.",
settingsPrivacy: "이미지는 절대 기기 밖으로 나가지 않습니다.",
settingsDisabledByAdmin: "서버 관리자가 제품 분석을 비활성화했습니다.",
learnMore: "자세히 알아보기",
},
sidebar: {
tools: "도구",
grid: "그리드",
automate: "자동화",
editor: "에디터",
files: "파일",
help: "도움말",
settings: "설정",
},
toolCard: {
addToFavourites: "즐겨찾기에 추가",
},
appLayout: {
mobileNavTools: "도구",
mobileNavAutomate: "자동화",
mobileNavEditor: "에디터",
mobileNavFiles: "파일",
mobileNavSettings: "설정",
},
a11y: {
skipToContent: "Skip to main content",
openSidebar: "Open sidebar",
closeSidebar: "Close sidebar",
closeSettings: "Close settings",
closeHelp: "Close help",
closeDialog: "Close dialog",
zoomIn: "Zoom in",
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
blackBackground: "Black background",
expandPanel: "Expand panel",
collapsePanel: "Collapse panel",
swapDimensions: "Swap dimensions",
applyCrop: "Apply crop",
cancelCrop: "Cancel crop",
fontFamily: "Font family",
textColor: "Text color",
flipHorizontal: "Flip horizontal",
flipVertical: "Flip vertical",
hexColorValue: "Hex color value",
backgroundColor: "Background color",
foregroundColor: "Foreground color",
swapColors: "Swap foreground and background colors",
resetColors: "Reset to default black and white",
foregroundHex: "Foreground color hex value",
undo: "Undo",
redo: "Redo",
layers: "Layers",
addLayer: "Add layer",
deleteLayer: "Delete layer",
cancelOperation: "Cancel operation",
fill: "Fill",
fileDetails: "File details",
language: "Language",
selected: "Selected",
deleteKey: "Delete key",
editRole: "Edit role",
deleteRole: "Delete role",
notInstalled: "Not installed",
queued: "Queued for install",
installing: "Installing",
imageNOfTotal: "Image {n} of {total}",
processingComplete: "Image processed successfully",
processingFailed: "Processing failed",
settingsDialog: "Settings",
helpDialog: "Help",
navigationMenu: "Navigation",
},
} as const;
export default ko;