mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
Add complete i18n infrastructure with 21 supported languages: English, Simplified Chinese, Traditional Chinese, Japanese, Korean, Spanish, French, Italian, Brazilian Portuguese, German, Dutch, Swedish, Russian, Polish, Ukrainian, Arabic (RTL), Turkish, Hindi, Vietnamese, Indonesian, and Thai. - I18nProvider context with three-tier locale detection (user preference > navigator.languages > instance default > English) - ~1500 translation keys per locale with TypeScript-enforced completeness - Dynamic code-splitting: only the active locale is loaded at runtime - Language selectors in footer, login page, settings, and mobile sidebar - Arabic RTL support with CSS logical properties across all components - Tool names, descriptions, and categories translated via i18n helpers - Public API endpoint GET /api/v1/config/locale for instance default - Multi-script font stack (CJK, Arabic, Devanagari, Thai, Cyrillic) - format() and plural() helpers for interpolation and pluralization - API error translation mapping (translateApiError) - 36 Playwright e2e tests verifying all 21 locales load correctly - 25 unit tests for format, plural, locale detection, and completeness - Updated translations.md docs and CLAUDE.md conventions
1917 lines
73 KiB
TypeScript
1917 lines
73 KiB
TypeScript
import type { TranslationKeys } from "./en.js";
|
|
|
|
export const ko: TranslationKeys = {
|
|
common: {
|
|
upload: "컴퓨터에서 업로드",
|
|
process: "처리",
|
|
download: "다운로드",
|
|
cancel: "취소",
|
|
save: "저장",
|
|
delete: "삭제",
|
|
settings: "설정",
|
|
search: "도구 검색...",
|
|
dropFiles: "여기에 파일을 놓거나 업로드 버튼을 클릭하세요",
|
|
loading: "로딩 중...",
|
|
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: "개인정보 처리방침",
|
|
},
|
|
categories: {
|
|
essentials: "기본 도구",
|
|
optimization: "최적화",
|
|
adjustments: "조정",
|
|
watermark: "워터마크 및 오버레이",
|
|
utilities: "유틸리티",
|
|
layout: "레이아웃 및 구도",
|
|
format: "포맷 및 변환",
|
|
ai: "AI 도구",
|
|
},
|
|
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로 이미지에서 높은 정확도로 텍스트 추출",
|
|
},
|
|
"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: "얼굴 자동 감지로 정부 규격에 맞는 여권, 비자, 신분증 사진 생성",
|
|
},
|
|
"transparency-fixer": {
|
|
name: "PNG 투명도 수정",
|
|
description: "가짜 투명 PNG를 원클릭으로 수정",
|
|
},
|
|
"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 코드 생성",
|
|
},
|
|
"barcode-read": {
|
|
name: "바코드 리더",
|
|
description: "이미지에서 QR 코드, 바코드 및 2D 코드 스캔",
|
|
},
|
|
collage: {
|
|
name: "콜라주 / 그리드",
|
|
description: "25가지 이상의 템플릿으로 이미지를 아름다운 그리드 콜라주로 합성",
|
|
},
|
|
stitch: {
|
|
name: "이미지 결합",
|
|
description: "이미지를 나란히, 세로로 또는 그리드로 결합",
|
|
},
|
|
split: {
|
|
name: "이미지 분할",
|
|
description: "그리드 또는 픽셀 크기로 이미지 분할(실시간 미리보기 지원)",
|
|
},
|
|
border: {
|
|
name: "테두리 및 프레임",
|
|
description: "테두리, 패딩, 둥근 모서리, 그림자를 원클릭 프리셋으로 추가",
|
|
},
|
|
beautify: {
|
|
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 등에 임베드",
|
|
},
|
|
pipeline: { name: "Pipeline 빌더", description: "여러 도구를 워크플로로 연결" },
|
|
},
|
|
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: "불투명도",
|
|
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: "텍스트 추출 중",
|
|
},
|
|
"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: "사진이 생성되었습니다. 왼쪽 패널에서 다운로드하세요.",
|
|
},
|
|
"transparency-fixer": {
|
|
description: "가짜 투명 배경의 PNG를 업로드하면 원클릭으로 수정해 드립니다.",
|
|
removeWatermark: "워터마크 제거",
|
|
removeWatermarkHelp: "반투명 워터마크 감지 및 제거",
|
|
requiresEraser: "객체 지우기 번들 필요",
|
|
advanced: "고급",
|
|
defringe: "디프린지",
|
|
outputFormat: "출력 포맷",
|
|
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: "텍스트 오버레이 추가 중",
|
|
},
|
|
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",
|
|
},
|
|
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 코드 다운로드",
|
|
},
|
|
"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: "스크린샷 꾸미는 중",
|
|
},
|
|
"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() 복사",
|
|
},
|
|
"enhance-faces-standalone": {
|
|
model: "모델",
|
|
fast: "빠름",
|
|
balanced: "균형",
|
|
best: "최고",
|
|
},
|
|
},
|
|
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: "이미지 영역",
|
|
},
|
|
homePage: {
|
|
generatingPreview: "미리보기 생성 중...",
|
|
loadingPreview: "미리보기 로딩 중...",
|
|
changeFile: "파일 변경",
|
|
quickActions: "빠른 실행",
|
|
allTools: "모든 도구",
|
|
},
|
|
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: "서버 디코딩 실패",
|
|
},
|
|
},
|
|
settings: {
|
|
heading: "설정",
|
|
nav: {
|
|
general: "일반",
|
|
systemSettings: "시스템 설정",
|
|
security: "보안",
|
|
people: "멤버",
|
|
teams: "팀",
|
|
roles: "역할",
|
|
auditLog: "감사 로그",
|
|
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: "세션 기간",
|
|
},
|
|
security: {
|
|
heading: "보안",
|
|
description: "비밀번호 및 인증 설정.",
|
|
changePasswordHeading: "비밀번호 변경",
|
|
currentPasswordPlaceholder: "현재 비밀번호",
|
|
newPasswordPlaceholder: "새 비밀번호",
|
|
confirmPasswordPlaceholder: "새 비밀번호 확인",
|
|
passwordsMismatch: "비밀번호가 일치하지 않습니다",
|
|
passwordTooShort: "비밀번호는 4자 이상이어야 합니다",
|
|
changeSuccess: "비밀번호가 변경되었습니다",
|
|
changeFailed: "비밀번호 변경에 실패했습니다",
|
|
currentPasswordIncorrect: "현재 비밀번호가 올바르지 않습니다",
|
|
changePasswordButton: "비밀번호 변경",
|
|
loginAttemptLimitNote: "로그인 시도 제한은 시스템 설정에서 구성할 수 있습니다.",
|
|
},
|
|
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: "저장",
|
|
},
|
|
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: "같은 이름의 팀이 이미 존재합니다",
|
|
},
|
|
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}일 전",
|
|
},
|
|
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: "서버 시작 시 오래된 임시 파일 정리",
|
|
},
|
|
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...",
|
|
},
|
|
about: {
|
|
heading: "정보",
|
|
appName: "SnapOtter",
|
|
appDescription:
|
|
"셀프 호스팅, 개인정보 우선의 이미지 처리 도구 모음으로 51개의 도구를 제공합니다. 리사이즈, 압축, 변환, 워터마크 추가 등 이미지 워크플로를 클라우드에 데이터를 보내지 않고 자동화할 수 있습니다.",
|
|
versionLabel: "버전:",
|
|
linksHeading: "링크",
|
|
githubLink: "GitHub 저장소",
|
|
docsLink: "문서",
|
|
apiRefLink: "API 레퍼런스 (Swagger)",
|
|
},
|
|
},
|
|
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: "인증 오류. 다시 시도해 주세요.",
|
|
passwordManagedByProvider: "비밀번호는 ID 제공자에서 관리됩니다.",
|
|
enterUsername: "사용자명 입력",
|
|
enterPassword: "비밀번호 입력",
|
|
heroTitle: "당신의 이미지는, 당신의 것입니다.",
|
|
heroSubtitle: "필요한 모든 이미지 도구가 여기에.",
|
|
rotatingPhrases: [
|
|
"가입도 필요 없고, 계정도 필요 없어요.",
|
|
"클라우드 업로드? 절대 없습니다.",
|
|
"100% 로컬 처리.",
|
|
"무료. 영원히 무료.",
|
|
"제한 없음. 숨겨진 상한 없음.",
|
|
"완전히 오프라인으로 작동해요.",
|
|
"무제한 일괄 처리.",
|
|
"51개의 이미지 도구.",
|
|
"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: "단계를 추가하여 자동화를 구성하세요",
|
|
step: "단계",
|
|
},
|
|
nav: {
|
|
tools: "도구",
|
|
reader: "리더",
|
|
automate: "자동화",
|
|
editor: "에디터",
|
|
files: "파일",
|
|
help: "도움말",
|
|
settings: "설정",
|
|
grid: "그리드",
|
|
},
|
|
files: {
|
|
recentTab: "최근",
|
|
uploadTab: "업로드",
|
|
fileDetailsAriaLabel: "파일 상세",
|
|
fileDetailsHeading: "파일 상세",
|
|
},
|
|
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}개 파일 선택됨",
|
|
},
|
|
reviewPanel: {
|
|
processedResultAlt: "처리 결과",
|
|
sizeLabel: "크기: {size}",
|
|
typeLabel: "유형: {type}",
|
|
processedLabel: "처리 시간: {time}",
|
|
undoButton: "실행 취소",
|
|
downloadButton: "다운로드",
|
|
openInEditor: "에디터에서 열기",
|
|
reviewHeading: "리뷰",
|
|
continueEditing: "편집 계속하기",
|
|
},
|
|
features: {
|
|
notEnabledTitle: "기능이 활성화되지 않았습니다",
|
|
notEnabledDescription:
|
|
"이 기능이 활성화되지 않았습니다. 관리자에게 설정에서 활성화를 요청하세요.",
|
|
requiresDownload: "이 기능은 추가 다운로드가 필요합니다 (약 {size})",
|
|
retryButton: "재시도",
|
|
queued: "설치 대기 중...",
|
|
enableButton: "{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: "이미지 정보로 이동",
|
|
},
|
|
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: "설정",
|
|
},
|
|
} as const;
|
|
|
|
export default ko;
|