Files
SnapOtter/packages/shared/src/i18n/th.ts
T
SnapOtterandGitHub fb96cf8743 feat(ai): add a Reset AI Environment admin feature for the upgrade gap (#459)
Uninstalling a bundle only deletes its downloaded model weights, never the
shared venv's site-packages, so self-hosters who already hit an AI bundle
conflict (e.g. the scipy ABI strand) have no clean self-service path via
uninstall+reinstall: reinstalling just overlays corrected files on top of
stale ones. Adds POST /api/v1/admin/features/reset, which wipes
/data/ai/{venv,models,pip-cache}, resets installed.json, and reseeds a real
working venv from the image's baked /opt/venv (extracted docker/reseed-ai-venv.sh,
now shared with entrypoint.sh's existing base-venv-upgrade bootstrap instead
of duplicating that logic) -- leaving an empty venv directory here would
make the very next install fail with "spawn .../python3 ENOENT", caught by
testing this live rather than assuming it. Ships with a matching Settings UI
section (inline confirm, same pattern as per-bundle uninstall) and strings
across all 21 locales.

Verified against a real snapotter/snapotter:1.17.2 image migrated to 2.0.0,
with real multi-GB bundles installed (background-removal + OCR): confirmed
the migrated instance's inherited python3.11 venv (2.0.0 itself uses 3.12)
still imports the fixed scipy/numpy/paddleocr correctly, then reset + real
reinstall + actual tool execution (remove-background, verified output image)
all worked end-to-end.
2026-07-07 14:12:00 +08:00

3947 lines
218 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const th: TranslationKeys = {
migrationBanner: {
successTitle: "นำเข้าข้อมูล SnapOtter 1.x แล้ว",
successBody: "ย้าย {users} ผู้ใช้และ {files} ไฟล์ที่บันทึกไว้จากเวอร์ชันก่อนหน้าของคุณ",
warningTitle: "พบฐานข้อมูล 1.x แต่ยังไม่ได้นำเข้า",
warningBody:
"อินสแตนซ์นี้มีข้อมูลอยู่แล้ว จึงไม่ได้นำเข้าฐานข้อมูล 1.x ของคุณ การนำเข้าต้องใช้อินสแตนซ์ที่ว่างเปล่า ดูคู่มือการอัปเกรด",
dismiss: "ปิด",
},
common: {
upload: "อัปโหลดจากคอมพิวเตอร์",
process: "ประมวลผล",
download: "ดาวน์โหลด",
cancel: "ยกเลิก",
save: "บันทึก",
delete: "ลบ",
settings: "ตั้งค่า",
search: "ค้นหาเครื่องมือ...",
dropFiles: "ลากไฟล์มาวางที่นี่หรือกดปุ่มอัปโหลด",
loading: "กำลังโหลด...",
saving: "กำลังบันทึก...",
error: "เกิดข้อผิดพลาด",
confirm: "ยืนยัน",
close: "ปิด",
back: "ย้อนกลับ",
next: "ถัดไป",
clear: "ล้าง",
copy: "คัดลอก",
copied: "คัดลอกแล้ว!",
noResults: "ไม่พบผลลัพธ์",
showLess: "แสดงน้อยลง",
showMore: "แสดงอีก {count} รายการ",
experimental: "ทดลอง",
enabled: "เปิดใช้งาน",
disabled: "ปิดใช้งาน",
rename: "เปลี่ยนชื่อ",
edit: "แก้ไข",
actions: "การกระทำ",
create: "สร้าง",
or: "หรือ",
goHome: "กลับหน้าหลัก",
somethingWentWrong: "เกิดข้อผิดพลาด",
unexpectedError: "เกิดข้อผิดพลาดที่ไม่คาดคิด",
retry: "ลองใหม่",
privacyPolicy: "นโยบายความเป็นส่วนตัว",
pageNotFound: "ไม่พบหน้านี้",
pageNotFoundDescription: "หน้าที่คุณกำลังมองหาไม่มีอยู่หรือถูกย้ายแล้ว",
},
feedback: {
navLabel: "แสดงความคิดเห็น",
navButtonLabel: "ความคิดเห็น",
dialogTitle: "แสดงความคิดเห็น",
toolDialogTitle: "เครื่องมือนี้ทำงานเป็นอย่างไร?",
failedDialogTitle: "รายงานปัญหาเครื่องมือ",
adminDialogTitle: "การติดตั้งเป็นอย่างไรบ้าง?",
closeLabel: "ปิดกล่องแสดงความคิดเห็น",
privacyNote:
"ความคิดเห็นจะถูกส่งเมื่อคุณกดส่งเท่านั้น SnapOtter จะไม่รวมไฟล์ เนื้อหาไฟล์ ชื่อไฟล์ หรือผลลัพธ์ส่วนตัวของคุณ",
typeLabel: "ประเภทความคิดเห็น",
sentimentLabel: "ให้คะแนนอย่างรวดเร็ว",
messageLabel: "ความคิดเห็น",
messagePlaceholder: "บอกเราว่าอะไรใช้งานได้ดี อะไรมีปัญหา หรืออะไรจะทำให้ SnapOtter ดีขึ้น",
improveFirstLabel: "เราควรปรับปรุงอะไรก่อน?",
improveFirstPlaceholder: "บอกเราว่าอะไรทำให้การติดตั้งยากกว่าที่ควรจะเป็น",
contactOkLabel: "คุณสามารถติดต่อฉันเกี่ยวกับความคิดเห็นนี้ได้",
emailPlaceholder: "อีเมล (ไม่บังคับ)",
namePlaceholder: "ชื่อ (ไม่บังคับ)",
companyPlaceholder: "บริษัทหรือองค์กร (ไม่บังคับ)",
submit: "ส่งความคิดเห็น",
submitting: "กำลังส่ง...",
submitFailed: "ไม่สามารถส่งความคิดเห็นได้ กรุณาลองอีกครั้ง",
searchMissTitle: "ขอเครื่องมือ",
searchMissContext: "คุณค้นหา: {query}",
searchMissDiscussionsFallback: "เราบันทึกไม่ได้ เปิดคำขอใน Discussions",
offlineDescription:
"อินสแตนซ์นี้ปิดการวิเคราะห์ไว้ ความคิดเห็นจึงไม่ถูกบันทึกที่นี่ คุณยังสามารถติดต่อทีม SnapOtter ได้โดยตรง",
offlinePublicNote: "Issue บน GitHub เป็นสาธารณะ",
offlineGithubButton: "เปิด Issue บน GitHub",
offlineEmailButton: "ส่งอีเมลถึงเรา",
thanksTitle: "ขอบคุณสำหรับความคิดเห็น",
thanksDescription: "ช่วยให้เราปรับปรุง SnapOtter ได้โดยไม่ต้องเก็บไฟล์หรือเนื้อหาส่วนตัว",
quickThanks: "ขอบคุณที่แจ้งให้เราทราบ",
reportIssue: "รายงานปัญหา",
toolPromptTitle: "เครื่องมือนี้ทำงานเป็นอย่างไร?",
toolPromptDescription: "ความคิดเห็นสั้นๆ ช่วยให้เราปรับปรุง SnapOtter ได้",
dismissPrompt: "ปิดคำเชิญแสดงความคิดเห็น",
workedWell: "ใช้งานได้ดี",
dontAskAgain: "ไม่ต้องถามอีก",
shareFeedback: "แสดงความคิดเห็น",
remindLater: "เตือนฉันภายหลัง",
adminCardTitle: "การติดตั้งเป็นอย่างไรบ้าง?",
adminCardDescription:
"ข้อความสั้นๆ จากผู้ดูแลระบบช่วยให้เราปรับปรุง Docker การติดตั้งจากซอร์ส และเอกสารประกอบได้",
installMethodLabel: "วิธีการติดตั้ง",
frictionAreaLabel: "ส่วนที่ติดตั้งยากที่สุด",
importantAreasLabel: "ส่วนที่สำคัญที่สุด",
sentiments: {
great: "เยี่ยม",
okay: "พอใช้",
issue: "มีปัญหา",
missing: "ขาดบางอย่าง",
bug: "บั๊ก",
idea: "ไอเดีย",
other: "อื่นๆ",
},
types: {
bug: "บั๊ก",
feature_request: "ขอฟีเจอร์",
confusing_ux: "ใช้งานสับสน",
performance: "ประสิทธิภาพ",
other: "อื่นๆ",
},
installMethods: {
docker: "Docker",
docker_compose: "Docker Compose",
source: "สร้างจากซอร์สโค้ด",
cloud: "คลาวด์/เดโม",
other: "อื่นๆ",
},
usageTypes: {
personal: "แค่ฉันคนเดียว",
team_internal: "ทีมขนาดเล็ก",
business_workflow: "บริษัทหรือองค์กร",
education: "การศึกษา",
evaluating: "กำลังประเมิน",
},
frictionAreas: {
smooth: "ไม่มี ติดตั้งได้ราบรื่น",
docker: "การตั้งค่า Docker/container",
environment_variables: "ตัวแปรสภาพแวดล้อม",
auth: "การยืนยันตัวตน/SSO",
storage: "พื้นที่จัดเก็บ/การอัปโหลด",
workers: "เวิร์กเกอร์/คิวงาน",
ai_tools: "เครื่องมือ AI",
docs: "เอกสารประกอบ",
performance: "ประสิทธิภาพ/ทรัพยากร",
other: "อื่นๆ",
},
importantAreas: {
images: "รูปภาพ",
pdf_docs: "PDF/เอกสาร",
video_audio: "วิดีโอ/เสียง",
batch_workflows: "เวิร์กโฟลว์แบบชุด",
ai_tools: "เครื่องมือ AI",
},
},
onboarding: {
usageSurveyTitle: "คุณใช้ SnapOtter อย่างไร?",
usageSurveyToolsLabel: "อะไรสำคัญที่สุดสำหรับคุณ?",
pickAnyHint: "(เลือกได้หลายข้อ)",
continueLabel: "ดำเนินการต่อ",
},
categories: {
essentials: "พื้นฐาน",
adjustments: "การปรับแต่ง",
enhance: "ปรับปรุงและ AI",
watermark: "ลายน้ำและการซ้อนทับ",
layout: "เค้าโครงและการจัดองค์ประกอบ",
utilities: "เครื่องมือเสริม",
optimization: "การเพิ่มประสิทธิภาพ",
format: "รูปแบบและการแปลง",
"video-edit": "Video",
"video-convert": "แปลง",
"video-effects": "เอฟเฟกต์และคอมโพส",
"video-subtitles": "คำบรรยาย",
"video-metadata": "ข้อมูลเมตา",
"audio-edit": "แก้ไข",
"audio-convert": "แปลง",
"audio-effects": "เอฟเฟกต์และคอมโพส",
"audio-metadata": "ข้อมูลเมตา",
"pdf-organize": "จัดระเบียบ",
"pdf-edit": "แก้ไขและใส่คำอธิบาย",
"pdf-security": "ความปลอดภัย",
"pdf-optimize": "ปรับแต่ง",
"doc-convert": "แปลง",
data: "ไฟล์",
archives: "ไฟล์บีบอัด",
},
modalities: {
image: "รูปภาพ",
video: "วิดีโอ",
audio: "เสียง",
documentsAndFiles: "PDF และไฟล์",
},
tools: {
// BEGIN conversion-presets (generated by scripts/generate-conversion-i18n.mjs)
"jpg-to-png": {
name: "JPG เป็น PNG",
description: "แปลง JPG เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-jpg": {
name: "PNG เป็น JPG",
description: "แปลง PNG เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-webp": {
name: "JPG เป็น WebP",
description: "แปลง JPG เป็น WebP ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-webp": {
name: "PNG เป็น WebP",
description: "แปลง PNG เป็น WebP ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webp-to-jpg": {
name: "WebP เป็น JPG",
description: "แปลง WebP เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webp-to-png": {
name: "WebP เป็น PNG",
description: "แปลง WebP เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-avif": {
name: "JPG เป็น AVIF",
description: "แปลง JPG เป็น AVIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-avif": {
name: "PNG เป็น AVIF",
description: "แปลง PNG เป็น AVIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webp-to-avif": {
name: "WebP เป็น AVIF",
description: "แปลง WebP เป็น AVIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"heic-to-jpg": {
name: "HEIC เป็น JPG",
description: "แปลง HEIC เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"heic-to-png": {
name: "HEIC เป็น PNG",
description: "แปลง HEIC เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"heic-to-avif": {
name: "HEIC เป็น AVIF",
description: "แปลง HEIC เป็น AVIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-gif": {
name: "JPG เป็น GIF",
description: "แปลง JPG เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-gif": {
name: "PNG เป็น GIF",
description: "แปลง PNG เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-jpg": {
name: "GIF เป็น JPG",
description: "แปลง GIF เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-png": {
name: "GIF เป็น PNG",
description: "แปลง GIF เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webp-to-gif": {
name: "WebP เป็น GIF",
description: "แปลง WebP เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-tiff": {
name: "JPG เป็น TIFF",
description: "แปลง JPG เป็น TIFF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-tiff": {
name: "PNG เป็น TIFF",
description: "แปลง PNG เป็น TIFF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"tiff-to-jpg": {
name: "TIFF เป็น JPG",
description: "แปลง TIFF เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"tiff-to-png": {
name: "TIFF เป็น PNG",
description: "แปลง TIFF เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"psd-to-jpg": {
name: "PSD เป็น JPG",
description: "แปลง PSD เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"psd-to-png": {
name: "PSD เป็น PNG",
description: "แปลง PSD เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-eps": {
name: "PNG เป็น EPS",
description: "แปลง PNG เป็น EPS ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-eps": {
name: "JPG เป็น EPS",
description: "แปลง JPG เป็น EPS ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"eps-to-png": {
name: "EPS เป็น PNG",
description: "แปลง EPS เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"eps-to-jpg": {
name: "EPS เป็น JPG",
description: "แปลง EPS เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-svg": {
name: "PNG เป็น SVG",
description: "แปลง PNG เป็น SVG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-svg": {
name: "JPG เป็น SVG",
description: "แปลง JPG เป็น SVG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"tiff-to-svg": {
name: "TIFF เป็น SVG",
description: "แปลง TIFF เป็น SVG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"psd-to-svg": {
name: "PSD เป็น SVG",
description: "แปลง PSD เป็น SVG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"eps-to-svg": {
name: "EPS เป็น SVG",
description: "แปลง EPS เป็น SVG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"svg-to-png": {
name: "SVG เป็น PNG",
description: "แปลง SVG เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"svg-to-jpg": {
name: "SVG เป็น JPG",
description: "แปลง SVG เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"jpg-to-pdf": {
name: "JPG เป็น PDF",
description: "แปลง JPG เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"png-to-pdf": {
name: "PNG เป็น PDF",
description: "แปลง PNG เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"heic-to-pdf": {
name: "HEIC เป็น PDF",
description: "แปลง HEIC เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"tiff-to-pdf": {
name: "TIFF เป็น PDF",
description: "แปลง TIFF เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webp-to-pdf": {
name: "WebP เป็น PDF",
description: "แปลง WebP เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-pdf": {
name: "GIF เป็น PDF",
description: "แปลง GIF เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"eps-to-pdf": {
name: "EPS เป็น PDF",
description: "แปลง EPS เป็น PDF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"pdf-to-jpg": {
name: "PDF เป็น JPG",
description: "แปลง PDF เป็น JPG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"pdf-to-png": {
name: "PDF เป็น PNG",
description: "แปลง PDF เป็น PNG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"pdf-to-tiff": {
name: "PDF เป็น TIFF",
description: "แปลง PDF เป็น TIFF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mov-to-mp4": {
name: "MOV เป็น MP4",
description: "แปลง MOV เป็น MP4 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webm-to-mp4": {
name: "WEBM เป็น MP4",
description: "แปลง WEBM เป็น MP4 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mkv-to-mp4": {
name: "MKV เป็น MP4",
description: "แปลง MKV เป็น MP4 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"avi-to-mp4": {
name: "AVI เป็น MP4",
description: "แปลง AVI เป็น MP4 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-mov": {
name: "MP4 เป็น MOV",
description: "แปลง MP4 เป็น MOV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-webm": {
name: "MP4 เป็น WEBM",
description: "แปลง MP4 เป็น WEBM ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webm-to-mov": {
name: "WEBM เป็น MOV",
description: "แปลง WEBM เป็น MOV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mkv-to-mov": {
name: "MKV เป็น MOV",
description: "แปลง MKV เป็น MOV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"avi-to-mov": {
name: "AVI เป็น MOV",
description: "แปลง AVI เป็น MOV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-avi": {
name: "MP4 เป็น AVI",
description: "แปลง MP4 เป็น AVI ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mov-to-avi": {
name: "MOV เป็น AVI",
description: "แปลง MOV เป็น AVI ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mkv-to-avi": {
name: "MKV เป็น AVI",
description: "แปลง MKV เป็น AVI ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"avi-to-mkv": {
name: "AVI เป็น MKV",
description: "แปลง AVI เป็น MKV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-gif": {
name: "MP4 เป็น GIF",
description: "แปลง MP4 เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mov-to-gif": {
name: "MOV เป็น GIF",
description: "แปลง MOV เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mkv-to-gif": {
name: "MKV เป็น GIF",
description: "แปลง MKV เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"avi-to-gif": {
name: "AVI เป็น GIF",
description: "แปลง AVI เป็น GIF ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-mp4": {
name: "GIF เป็น MP4",
description: "แปลง GIF เป็น MP4 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-webm": {
name: "GIF เป็น WEBM",
description: "แปลง GIF เป็น WEBM ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"gif-to-mov": {
name: "GIF เป็น MOV",
description: "แปลง GIF เป็น MOV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-mp3": {
name: "MP4 เป็น MP3",
description: "แปลง MP4 เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mov-to-mp3": {
name: "MOV เป็น MP3",
description: "แปลง MOV เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mkv-to-mp3": {
name: "MKV เป็น MP3",
description: "แปลง MKV เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"webm-to-mp3": {
name: "WEBM เป็น MP3",
description: "แปลง WEBM เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"avi-to-mp3": {
name: "AVI เป็น MP3",
description: "แปลง AVI เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-wav": {
name: "MP4 เป็น WAV",
description: "แปลง MP4 เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mov-to-wav": {
name: "MOV เป็น WAV",
description: "แปลง MOV เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp4-to-ogg": {
name: "MP4 เป็น OGG",
description: "แปลง MP4 เป็น OGG ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"m4a-to-mp3": {
name: "M4A เป็น MP3",
description: "แปลง M4A เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"m4a-to-wav": {
name: "M4A เป็น WAV",
description: "แปลง M4A เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"aac-to-mp3": {
name: "AAC เป็น MP3",
description: "แปลง AAC เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"aac-to-wav": {
name: "AAC เป็น WAV",
description: "แปลง AAC เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"aac-to-flac": {
name: "AAC เป็น FLAC",
description: "แปลง AAC เป็น FLAC ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"ogg-to-mp3": {
name: "OGG เป็น MP3",
description: "แปลง OGG เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"ogg-to-wav": {
name: "OGG เป็น WAV",
description: "แปลง OGG เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"wav-to-mp3": {
name: "WAV เป็น MP3",
description: "แปลง WAV เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"mp3-to-wav": {
name: "MP3 เป็น WAV",
description: "แปลง MP3 เป็น WAV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"flac-to-mp3": {
name: "FLAC เป็น MP3",
description: "แปลง FLAC เป็น MP3 ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
"excel-to-csv": {
name: "Excel เป็น CSV",
description: "แปลง Excel เป็น CSV ออนไลน์ รวดเร็ว ฟรี และเป็นส่วนตัว",
},
// END conversion-presets
resize: {
name: "ปรับขนาด",
description: "ปรับขนาดตามพิกเซล เปอร์เซ็นต์ หรือพรีเซ็ตสื่อสังคม",
},
crop: {
name: "ครอป",
description: "ครอปอิสระ พรีเซ็ตอัตราส่วนภาพ ครอปตามรูปทรง",
},
rotate: {
name: "หมุนและพลิก",
description: "หมุน พลิก และปรับให้ตรงของภาพ",
},
convert: {
name: "แปลงไฟล์",
description: "แปลงระหว่างรูปแบบภาพต่างๆ",
},
compress: {
name: "บีบอัด",
description: "ลดขนาดไฟล์ตามคุณภาพหรือขนาดเป้าหมาย",
},
"optimize-for-web": {
name: "เพิ่มประสิทธิภาพสำหรับเว็บ",
description: "เพิ่มประสิทธิภาพภาพสำหรับเว็บด้วยการแปลงรูปแบบ ควบคุมคุณภาพ และแสดงตัวอย่างแบบสด",
},
"strip-metadata": {
name: "ลบข้อมูลเมตา",
description: "ลบ EXIF, GPS และข้อมูลกล้อง",
},
"edit-metadata": {
name: "แก้ไขข้อมูลเมตา",
description: "แก้ไข EXIF, IPTC, XMP, GPS, คำสำคัญ และวันที่",
},
"bulk-rename": {
name: "เปลี่ยนชื่อเป็นชุด",
description: "เปลี่ยนชื่อหลายไฟล์ด้วยรูปแบบ",
},
"image-to-pdf": {
name: "ภาพเป็น PDF",
description: "รวมภาพเป็นเอกสาร PDF",
},
"pdf-to-image": {
name: "PDF เป็นภาพ",
description: "แปลงหน้า PDF เป็นภาพ",
},
favicon: {
name: "สร้าง Favicon",
description: "สร้าง Favicon และไอคอนแอปทุกขนาด",
},
"adjust-colors": {
name: "ปรับสี",
description: "ความสว่าง คอนทราสต์ ค่าแสง ความอิ่มตัวของสี อุณหภูมิสี ความคมชัด และเอฟเฟกต์",
},
sharpening: {
name: "เพิ่มความคมชัด",
description: "เพิ่มความคมชัดแบบปรับตัว อันชาร์ปมาสก์ และไฮพาสพร้อมพรีเซ็ต",
},
"replace-color": {
name: "แทนที่และกลับสี",
description: "แทนที่สีเฉพาะหรือกลับสี",
},
"color-blindness": {
name: "จำลองตาบอดสี",
description: "จำลองการมองเห็นภาพของผู้มีภาวะบกพร่องทางการมองเห็นสีแบบต่างๆ",
},
"remove-background": {
name: "ลบพื้นหลัง",
description: "ลบพื้นหลังด้วย AI",
},
upscale: {
name: "ขยายภาพ",
description: "เพิ่มความละเอียดภาพด้วย AI",
},
"erase-object": {
name: "ลบวัตถุ",
description: "ลบวัตถุที่ไม่ต้องการด้วย AI",
},
ocr: {
name: "แยกข้อความจากรูปภาพ (OCR)",
description: "แยกข้อความจากภาพด้วยความแม่นยำของ AI",
},
"ocr-pdf": {
name: "แยกข้อความจาก PDF (OCR)",
description: "แยกข้อความจากเอกสาร PDF ด้วย OCR ที่ขับเคลื่อนด้วย 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: "สร้างภาพหนังสือเดินทาง วีซ่า และบัตรประชาชนตามมาตรฐานราชการด้วยการตรวจจับใบหน้าอัตโนมัติ",
},
"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: "สร้างคิวอาร์โค้ด",
description: "สร้างคิวอาร์โค้ดพร้อมสไตล์ สี ลวดลาย และโลโก้ที่กำหนดเอง",
},
"html-to-image": {
name: "HTML เป็นรูปภาพ",
description: "จับภาพหน้าเว็บเป็นรูปภาพคุณภาพสูง",
},
"barcode-read": {
name: "อ่านบาร์โค้ด",
description: "สแกนภาพเพื่อหาคิวอาร์โค้ด บาร์โค้ด และโค้ด 2D",
},
collage: {
name: "คอลลาจ / กริด",
description: "รวมภาพเป็นคอลลาจกริดสวยงามด้วยเทมเพลตกว่า 25 แบบ",
},
stitch: {
name: "ต่อภาพ / รวมภาพ",
description: "ต่อภาพเรียงข้าง ซ้อนกัน หรือเป็นกริด",
},
split: {
name: "แบ่งภาพ",
description: "แบ่งภาพเป็นช่องกริดหรือตามขนาดพิกเซลพร้อมแสดงตัวอย่างสด",
},
border: {
name: "กรอบและขอบ",
description: "เพิ่มกรอบ ระยะห่างภายใน มุมโค้ง และเงาด้วยพรีเซ็ตคลิกเดียว",
},
beautify: {
name: "ตกแต่งสกรีนช็อต",
description: "เพิ่มพื้นหลังไล่สี กรอบอุปกรณ์ เงา และขนาดสื่อสังคมให้สกรีนช็อต",
},
"circle-crop": {
name: "ครอปวงกลม",
description: "ครอปรูปภาพเป็นวงกลมกึ่งกลางพร้อมมุมโปร่งใส",
},
duotone: {
name: "ดูโอโทน",
description: "ใส่เอฟเฟกต์ดูโอโทนสองสีพร้อมกำหนดสีเงาและสีไฮไลต์เอง",
},
"image-pad": {
name: "เพิ่มขอบรูปภาพ",
description: "เพิ่มขอบรูปภาพให้ได้อัตราส่วนที่ต้องการด้วยพื้นหลังสีพื้น",
},
pixelate: {
name: "พิกเซลเลต",
description: "ใส่เอฟเฟกต์พิกเซลเลตทั้งรูปหรือเฉพาะบริเวณที่เลือก",
},
vignette: {
name: "วิกเน็ตต์",
description: "เพิ่มเอฟเฟกต์วิกเน็ตต์พร้อมปรับความเข้มและสีได้",
},
"gif-webp": {
name: "ตัวแปลง GIF/WebP",
description: "แปลง GIF แอนิเมชันเป็น WebP และกลับกัน โดยรักษาทุกเฟรม",
},
histogram: {
name: "ฮิสโตแกรม",
description: "สร้างแผนภูมิฮิสโตแกรม RGB จากรูปภาพ",
},
"lqip-placeholder": {
name: "ตัวยึดตำแหน่ง LQIP",
description: "สร้างรูปภาพตัวแทนขนาดเล็กคุณภาพต่ำพร้อม base64 data URI",
},
"sprite-sheet": {
name: "สไปรต์ชีต",
description: "รวมหลายรูปภาพเป็นตารางสไปรต์ชีตเดียว",
},
"svg-to-raster": {
name: "SVG เป็นภาพแรสเตอร์",
description:
"แปลง SVG เป็น PNG, JPEG, WebP, AVIF, TIFF, GIF หรือ HEIF ด้วยสเกลและ DPI ที่กำหนดเอง",
},
vectorize: {
name: "ภาพเป็น SVG",
description: "แปลงภาพเป็นกราฟิกเวกเตอร์ที่ปรับขนาดได้",
},
"gif-tools": {
name: "เครื่องมือ GIF",
description: "ปรับขนาด เพิ่มประสิทธิภาพ เปลี่ยนความเร็ว กลับด้าน แยกเฟรม และหมุน GIF เคลื่อนไหว",
},
"image-to-base64": {
name: "ภาพเป็น Base64",
description: "แปลงภาพเป็นสตริง Base64 สำหรับฝังใน HTML, CSS และอื่นๆ",
},
"barcode-generate": {
name: "สร้างบาร์โค้ด",
description: "สร้างบาร์โค้ดแบบ Code 128, EAN-13, UPC-A, Code 39, ITF-14 และ Data Matrix",
},
"chart-maker": {
name: "สร้างแผนภูมิ",
description: "สร้างแผนภูมิแท่ง เส้น หรือวงกลมจากข้อมูล CSV หรือ JSON",
},
"convert-video": {
name: "แปลงวิดีโอ",
description: "แปลงวิดีโอระหว่าง MP4, MOV และ WebM",
},
"compress-video": {
name: "บีบอัดวิดีโอ",
description: "ลดขนาดไฟล์วิดีโอพร้อมควบคุมคุณภาพ",
},
"trim-video": {
name: "ตัดวิดีโอ",
description: "ตัดคลิปจากวิดีโอ",
},
"mute-video": {
name: "ปิดเสียงวิดีโอ",
description: "ลบแทร็กเสียงออกจากวิดีโอ",
},
"video-to-gif": {
name: "วิดีโอเป็น GIF",
description: "เปลี่ยนคลิปวิดีโอเป็น GIF แอนิเมชัน",
},
"resize-video": {
name: "ปรับขนาดวิดีโอ",
description: "ปรับขนาดวิดีโอเป็นความละเอียดใหม่หรือขนาดที่ตั้งไว้",
},
"crop-video": {
name: "ครอปวิดีโอ",
description: "ครอปบริเวณที่เลือกออกจากวิดีโอ",
},
"rotate-video": {
name: "หมุนวิดีโอ",
description: "หมุนหรือพลิกวิดีโอ",
},
"change-fps": {
name: "เปลี่ยน FPS",
description: "เปลี่ยนอัตราเฟรมของวิดีโอ",
},
"video-color": {
name: "สีวิดีโอ",
description: "ปรับความสว่าง คอนทราสต์ ความอิ่มตัวของสี และแกมมา",
},
"video-speed": {
name: "ความเร็ววิดีโอ",
description: "เร่งหรือชะลอความเร็ววิดีโอ",
},
"reverse-video": {
name: "กลับวิดีโอ",
description: "เล่นคลิปวิดีโอย้อนกลับ",
},
"video-loudnorm": {
name: "นอร์มอลไลซ์เสียง",
description: "ปรับระดับเสียงวิดีโอให้ได้มาตรฐานการออกอากาศ",
},
"aspect-pad": {
name: "เพิ่มขอบอัตราส่วน",
description: "เพิ่มแถบสีพื้นให้พอดีอัตราส่วนที่ต้องการ",
},
"blur-pad": {
name: "ขอบเบลอ",
description: "เติมแถบขอบด้วยวิดีโอเบลอ",
},
"watermark-video": {
name: "ลายน้ำวิดีโอ",
description: "ประทับลายน้ำข้อความลงบนเฟรมวิดีโอ",
},
"stabilize-video": {
name: "กันสั่นวิดีโอ",
description: "ลดการสั่นของกล้องด้วยการกันสั่นแบบสองรอบ",
},
"gif-to-video": {
name: "GIF เป็นวิดีโอ",
description: "แปลง GIF แอนิเมชันเป็นวิดีโอ MP4 หรือ WebM",
},
"video-to-webp": {
name: "วิดีโอเป็น WebP",
description: "แปลงคลิปวิดีโอเป็นรูปภาพ WebP แอนิเมชัน",
},
"video-to-frames": {
name: "วิดีโอเป็นเฟรม",
description: "แยกเฟรมจากวิดีโอเป็น ZIP ของรูปภาพ",
},
"merge-videos": {
name: "รวมวิดีโอ",
description: "รวมคลิปวิดีโอหลายไฟล์เป็นไฟล์เดียว",
},
"replace-audio": {
name: "แทนที่เสียง",
description: "สลับแทร็กเสียงของวิดีโอด้วยไฟล์อื่น",
},
"burn-subtitles": {
name: "เบิร์นคำบรรยาย",
description: "เบิร์นคำบรรยายลงบนเฟรมวิดีโออย่างถาวร",
},
"embed-subtitles": {
name: "ฝังคำบรรยาย",
description: "ฝังแทร็กคำบรรยายลงในไฟล์วิดีโอ",
},
"extract-subtitles": {
name: "แยกคำบรรยาย",
description: "แยกแทร็กคำบรรยายจากวิดีโอเป็นไฟล์ SRT",
},
"images-to-video": {
name: "รูปภาพเป็นวิดีโอ",
description: "เปลี่ยนชุดรูปภาพเป็นวิดีโอสไลด์โชว์",
},
"video-metadata": {
name: "ล้างข้อมูลเมตาวิดีโอ",
description: "ลบข้อมูลเมตาจากวิดีโอและรายงานสิ่งที่พบ",
},
"convert-audio": {
name: "แปลงเสียง",
description: "แปลงเสียงระหว่าง MP3, WAV, OGG และอื่นๆ",
},
"trim-audio": {
name: "ตัดเสียง",
description: "ตัดส่วนที่ต้องการจากไฟล์เสียง",
},
"extract-audio": {
name: "แยกเสียง",
description: "แยกแทร็กเสียงออกจากวิดีโอ",
},
"volume-adjust": {
name: "ปรับระดับเสียง",
description: "เพิ่มหรือลดระดับเสียงตามค่าเกนที่กำหนด",
},
"normalize-audio": {
name: "นอร์มอลไลซ์เสียง",
description: "ปรับความดังเสียงให้สม่ำเสมอตามมาตรฐานการออกอากาศ",
},
"fade-audio": {
name: "เฟดเสียง",
description: "เพิ่มเอฟเฟกต์เฟดอินและเฟดเอาต์ให้เสียง",
},
"reverse-audio": {
name: "กลับเสียง",
description: "เล่นเสียงย้อนกลับ",
},
"audio-speed": {
name: "ความเร็วเสียง",
description: "เร่งหรือชะลอความเร็วการเล่นเสียง",
},
"pitch-shift": {
name: "ปรับพิทช์",
description: "เพิ่มหรือลดพิทช์ทีละครึ่งเสียงโดยไม่เปลี่ยนความเร็ว",
},
"audio-channels": {
name: "ช่องสัญญาณเสียง",
description: "แปลงระหว่างโมโน สเตอริโอ หรือสลับช่องซ้ายขวา",
},
"silence-removal": {
name: "ลบช่วงเงียบ",
description: "ตัดส่วนที่เงียบออกจากเสียง",
},
"noise-reduction": {
name: "ลดสัญญาณรบกวน",
description: "ลดเสียงรบกวนพื้นหลังด้วยการกรองสัญญาณแบบ FFT",
},
"merge-audio": {
name: "รวมเสียง",
description: "รวมไฟล์เสียงหลายไฟล์เป็นไฟล์เดียว",
},
"split-audio": {
name: "แยกเสียง",
description: "แยกเสียงตามเวลา ส่วนเท่าๆ กัน หรือตรวจจับช่วงเงียบ",
},
"ringtone-maker": {
name: "สร้างริงโทน",
description: "สร้างคลิปริงโทนจากไฟล์เสียงใดก็ได้",
},
"waveform-image": {
name: "รูปคลื่นเสียง",
description: "สร้างภาพคลื่นเสียงเป็นรูปภาพ PNG",
},
"audio-metadata": {
name: "ข้อมูลเมตาเสียง",
description: "ดู แก้ไข หรือลบแท็กเสียง (ID3)",
},
"merge-pdf": {
name: "รวม PDF",
description: "รวมไฟล์ PDF หลายไฟล์เป็นไฟล์เดียว",
},
"split-pdf": {
name: "แยก PDF",
description: "แยกหน้าหรือแบ่งเป็นส่วนย่อย",
},
"compress-pdf": {
name: "บีบอัด PDF",
description: "ลดขนาดไฟล์ PDF",
},
"rotate-pdf": {
name: "หมุน PDF",
description: "หมุนหน้าใน PDF",
},
"convert-document": {
name: "แปลงเอกสาร",
description: "แปลงระหว่าง Word, OpenDocument, RTF และข้อความธรรมดา",
},
"convert-presentation": {
name: "แปลงงานนำเสนอ",
description: "แปลงระหว่างรูปแบบ PowerPoint และ OpenDocument",
},
"convert-spreadsheet": {
name: "แปลงสเปรดชีต",
description: "แปลงระหว่าง Excel, OpenDocument และ CSV สมุดงานหลายชีตจะส่งออกชีตแรกเป็น CSV",
},
"excel-to-pdf": {
name: "Excel เป็น PDF",
description: "แปลงสเปรดชีตเป็น PDF ชีตกว้างอาจแบ่งเป็นหลายหน้า",
},
"word-to-pdf": {
name: "Word เป็น PDF",
description: "แปลงเอกสาร Word เป็น PDF",
},
"extract-pages": {
name: "แยกหน้า",
description: "ดึงหน้าที่เลือกไปเป็น PDF ใหม่",
},
"remove-pages": {
name: "ลบหน้า",
description: "ลบหน้าที่ระบุออกจาก PDF",
},
"organize-pdf": {
name: "จัดระเบียบ PDF",
description: "จัดเรียงหน้าใหม่ตามลำดับที่กำหนด",
},
"protect-pdf": {
name: "ป้องกัน PDF",
description: "เพิ่มการป้องกันด้วยรหัสผ่าน (เข้ารหัส AES-256)",
},
"unlock-pdf": {
name: "ปลดล็อก PDF",
description: "ลบการป้องกันด้วยรหัสผ่านออกจาก PDF",
},
"repair-pdf": {
name: "ซ่อม PDF",
description: "พยายามซ่อมไฟล์ PDF ที่เสียหาย",
},
"linearize-pdf": {
name: "ปรับแต่ง PDF สำหรับเว็บ",
description: "ปรับ PDF ให้เป็นแบบเชิงเส้นเพื่อเปิดดูบนเว็บได้เร็วขึ้น",
},
"grayscale-pdf": {
name: "PDF ขาวดำ",
description: "แปลงสีทั้งหมดเป็นโทนสีเทา",
},
"pdfa-convert": {
name: "แปลงเป็น PDF/A",
description: "แปลงเป็น PDF/A-2 สำหรับจัดเก็บถาวร",
},
"crop-pdf": {
name: "ครอป PDF",
description: "ครอปทุกหน้าด้วยขอบเท่ากัน",
},
"nup-pdf": {
name: "PDF หลายหน้าต่อแผ่น",
description: "จัดวางหลายหน้าในแผ่นเดียว",
},
"booklet-pdf": {
name: "PDF แบบหนังสือ",
description: "จัดวางหน้าสำหรับพับเป็นหนังสือเล่มเล็ก",
},
"watermark-pdf": {
name: "ลายน้ำ PDF",
description: "เพิ่มลายน้ำข้อความในทุกหน้า",
},
"pdf-page-numbers": {
name: "เลขหน้า PDF",
description: "เพิ่มเลขหน้าในทุกหน้า",
},
"flatten-pdf": {
name: "แฟลตเทน PDF",
description: "ผนวกฟอร์มและคำอธิบายประกอบลงในเนื้อหาหน้า",
},
"redact-pdf": {
name: "ปกปิดข้อมูล PDF",
description: "ลบข้อความที่ระบุออกอย่างถาวร (ปกปิดข้อมูลจริง)",
},
"pdf-to-text": {
name: "PDF เป็นข้อความ",
description: "แยกข้อความธรรมดาจาก PDF",
},
"pdf-to-word": {
name: "PDF เป็น Word",
description: "เหมาะกับ PDF ที่มีข้อความ หน้าสแกนต้องใช้ OCR",
},
"pdf-metadata": {
name: "ข้อมูลเมตา PDF",
description: "อ่านและแก้ไขข้อมูลเมตาของเอกสาร PDF",
},
"powerpoint-to-pdf": {
name: "PowerPoint เป็น PDF",
description: "แปลงงานนำเสนอเป็น PDF",
},
"html-to-pdf": {
name: "HTML เป็น PDF",
description: "แปลงไฟล์ HTML เป็น PDF ทรัพยากรภายนอกถูกปิดเพื่อความเป็นส่วนตัว",
},
"markdown-to-docx": {
name: "Markdown เป็น Word",
description: "แปลงไฟล์ Markdown เป็นเอกสาร Word (DOCX)",
},
"markdown-to-html": {
name: "Markdown เป็น HTML",
description: "แปลงไฟล์ Markdown เป็นหน้า HTML แบบสแตนด์อโลน รูปภาพจากภายนอกในต้นฉบับจะคงอยู่ในผลลัพธ์",
},
"markdown-to-pdf": {
name: "Markdown เป็น PDF",
description: "แปลงไฟล์ Markdown เป็น PDF ที่จัดรูปแบบแล้ว ทรัพยากรภายนอกถูกปิดเพื่อความเป็นส่วนตัว",
},
"epub-convert": {
name: "แปลง EPUB",
description: "แปลง EPUB เป็น PDF, DOCX, HTML หรือ Markdown ทรัพยากรภายนอกในหนังสือจะไม่ถูกดึงมา",
},
"to-epub": {
name: "แปลงเป็น EPUB",
description: "แปลงไฟล์ Word, Markdown, HTML หรือข้อความธรรมดาเป็น EPUB",
},
"csv-excel": {
name: "CSV เป็น Excel",
description: "แปลงระหว่าง CSV และ Excel (XLSX) ทั้งสองทิศทาง",
},
"csv-json": {
name: "CSV เป็น JSON",
description: "แปลงระหว่าง CSV และ JSON ทั้งสองทิศทาง",
},
"json-xml": {
name: "JSON เป็น XML",
description: "แปลงระหว่าง JSON และ XML ทั้งสองทิศทาง",
},
"split-csv": {
name: "แยก CSV",
description: "แยก CSV เป็นไฟล์ย่อยตามจำนวนแถว",
},
"merge-csvs": {
name: "รวม CSV",
description: "รวมไฟล์ CSV หรือ TSV หลายไฟล์ที่มีคอลัมน์ตรงกันเป็นไฟล์เดียว",
},
"yaml-json": {
name: "YAML / JSON",
description: "แปลงระหว่าง YAML และ JSON ทั้งสองทิศทาง",
},
"xml-to-csv": {
name: "XML เป็น CSV",
description: "แยกองค์ประกอบที่ซ้ำจาก XML เป็นตาราง CSV",
},
"create-zip": {
name: "สร้าง ZIP",
description: "รวมหลายไฟล์เป็นไฟล์ ZIP เดียว",
},
"extract-zip": {
name: "แตก ZIP",
description: "แตกไฟล์จาก ZIP อย่างปลอดภัยพร้อมป้องกัน ZIP bomb ไฟล์เก็บถาวรไฟล์เดียวจะส่งคืนไฟล์โดยตรง",
},
pipeline: {
name: "ตัวสร้าง Pipeline",
description: "เชื่อมต่อหลายเครื่องมือเป็นขั้นตอนทำงาน",
},
processing: { canceled: "ยกเลิกการประมวลผลแล้ว" },
mediaPlayer: {
unsupported: "เบราว์เซอร์ของคุณไม่รองรับรูปแบบสื่อนี้",
},
documentView: {
loadFailed: "ไม่สามารถโหลดเอกสารได้",
previousPage: "หน้าก่อนหน้า",
nextPage: "หน้าถัดไป",
inputNotPreviewable: "ไม่สามารถแสดงตัวอย่างไฟล์ประเภทนี้ได้",
},
},
toolSettings: {
compress: {
compressionMode: "โหมดการบีบอัด",
targetSize: "ขนาดเป้าหมาย",
quality: "คุณภาพ",
smallestFile: "ไฟล์เล็กที่สุด",
bestQuality: "คุณภาพดีที่สุด",
submit: "บีบอัด",
submitBatch: "บีบอัด ({count} ไฟล์)",
progressLabel: "กำลังบีบอัด",
original: "ต้นฉบับ: {size} KB",
processed: "ประมวลผลแล้ว: {size} KB",
saved: "ประหยัด: {percent}%",
},
resize: {
customSize: "ขนาดกำหนดเอง",
scale: "สเกล",
presets: "พรีเซ็ต",
contentAware: "รับรู้เนื้อหา",
widthPx: "ความกว้าง (px)",
heightPx: "ความสูง (px)",
fitMode: "โหมดพอดี",
cropToFit: "ครอปให้พอดี",
fitInside: "พอดีภายใน",
stretch: "ยืด",
limitToOriginalSize: "จำกัดขนาดต้นฉบับ",
limitToOriginalSizeHint: "หากภาพเล็กกว่าเป้าหมายแล้ว ให้คงเดิมแทนการขยาย",
scalePercent: "สเกล (%)",
resizeToSquare: "ปรับเป็นสี่เหลี่ยมจัตุรัส",
protectFaces: "ปกป้องใบหน้า",
smoothing: "การปรับเรียบ",
edgeSensitivity: "ความไวขอบ",
submit: "ปรับขนาด",
submitBatch: "ปรับขนาด ({count} ไฟล์)",
progressLabel: "กำลังปรับขนาด",
},
crop: {
aspectRatio: "อัตราส่วนภาพ",
custom: "กำหนดเอง",
positionAndSize: "ตำแหน่งและขนาด",
ruleOfThirds: "กฎสามส่วน",
leftOffsetPx: "ออฟเซ็ตซ้าย (px)",
topOffsetPx: "ออฟเซ็ตบน (px)",
submit: "ครอป",
submitBatch: "ครอป ({count} ไฟล์)",
progressLabel: "กำลังครอป",
},
rotate: {
rotate: "หมุน",
angle: "มุม",
straighten: "ปรับให้ตรง",
flip: "พลิก",
horizontal: "แนวนอน",
vertical: "แนวตั้ง",
resetAllChanges: "รีเซ็ตการเปลี่ยนแปลงทั้งหมด",
submit: "ใช้งาน",
submitBatch: "ใช้งาน ({count} ไฟล์)",
progressLabel: "กำลังใช้งาน",
},
convert: {
targetFormat: "รูปแบบปลายทาง",
sourceFormat: "รูปแบบต้นทาง",
quality: "คุณภาพ",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"optimize-for-web": {
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
smallestFile: "ไฟล์เล็กที่สุด",
bestQuality: "คุณภาพดีที่สุด",
maxDimensions: "ขนาดสูงสุด",
maxWidth: "ความกว้างสูงสุด",
maxHeight: "ความสูงสูงสุด",
stripMetadata: "ลบข้อมูลเมตา",
sizeComparison: "เปรียบเทียบขนาด",
optimized: "เพิ่มประสิทธิภาพแล้ว:",
smaller: "เล็กลง {percent}%",
larger: "ใหญ่ขึ้น {percent}%",
submit: "ประมวลผลและดาวน์โหลด",
submitBatch: "ประมวลผลและดาวน์โหลด ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มประสิทธิภาพ",
},
"strip-metadata": {
currentMetadata: "ข้อมูลเมตาปัจจุบัน",
readingMetadata: "กำลังอ่านข้อมูลเมตา...",
noMetadataFound: "ไม่พบข้อมูลเมตาในภาพนี้",
removeAllMetadata: "ลบข้อมูลเมตาทั้งหมด",
selectSpecific: "หรือเลือกข้อมูลเมตาเฉพาะ:",
stripExif: "ลบ EXIF (ข้อมูลกล้อง วันที่ ค่าแสง)",
stripGps: "ลบ GPS (ข้อมูลตำแหน่ง)",
stripIcc: "ลบ ICC (โปรไฟล์สี)",
stripXmp: "ลบ XMP (ข้อมูลเมตาขยาย)",
locationFound: "พบตำแหน่ง",
viewOnMap: "ดูบนแผนที่",
locationWarning: "ภาพนี้มีตำแหน่งที่ตั้งแม่นยำของคุณ ควรพิจารณาลบข้อมูล GPS ก่อนแชร์",
metadataSections: "พบ {count} ส่วนข้อมูลเมตา",
metadataSectionsPlural: "พบ {count} ส่วนข้อมูลเมตา",
metadataRemoved: "ลบข้อมูลเมตาแล้ว: {size} KB",
submit: "ลบข้อมูลเมตา",
progressLabel: "กำลังลบข้อมูลเมตา",
},
"edit-metadata": {
readingMetadata: "กำลังอ่านข้อมูลเมตา...",
couldNotReadMetadata: "ไม่สามารถอ่านข้อมูลเมตาได้ ช่องจะเริ่มว่างเปล่า",
basicInfo: "ข้อมูลพื้นฐาน",
description: "คำอธิบาย",
artist: "ศิลปิน",
copyright: "ลิขสิทธิ์",
software: "ซอฟต์แวร์",
iptc: "IPTC",
title: "ชื่อเรื่อง",
headline: "พาดหัว",
city: "เมือง",
stateProvince: "จังหวัด",
country: "ประเทศ",
dateAndTime: "วันที่และเวลา",
editDates: "แก้ไขวันที่",
shiftAllDates: "เลื่อนวันที่ทั้งหมด",
dateModified: "วันที่แก้ไข",
dateTaken: "วันที่ถ่าย",
shiftHint: "เลื่อนช่องวันที่ทั้งหมดตามค่าชดเชย (ใช้ได้สำหรับแก้ไขเขตเวลา)",
direction: "ทิศทาง",
forward: "+ ไปข้างหน้า",
backward: "- ย้อนกลับ",
hoursMinutes: "ชั่วโมง:นาที",
locationGps: "ตำแหน่ง (GPS)",
locationDataFound: "พบข้อมูลตำแหน่ง",
noGpsData: "ไม่มีข้อมูล GPS เพิ่มพิกัดด้านล่าง",
latitude: "ละติจูด",
longitude: "ลองจิจูด",
altitudeMeters: "ระดับความสูง (เมตร)",
removeAllGpsData: "ลบข้อมูล GPS ทั้งหมด",
keywords: "คำสำคัญ",
addKeywordPlaceholder: "เพิ่มคำสำคัญแล้วกด Enter",
addToExisting: "เพิ่มไปยังที่มีอยู่",
replaceAll: "แทนที่ทั้งหมด",
allMetadata: "ข้อมูลเมตาทั้งหมด",
templates: "เทมเพลต",
templateNamePlaceholder: "ชื่อเทมเพลต",
uploadPrompt: "อัปโหลดภาพเพื่อแก้ไขข้อมูลเมตา",
changes: "{count} การเปลี่ยนแปลง:",
modified: "{count} แก้ไขแล้ว",
removed: "{count} ลบแล้ว",
gpsCleared: "ล้าง GPS แล้ว",
gpsAdded: "เพิ่ม GPS แล้ว",
datesShifted: "เลื่อนวันที่แล้ว",
submit: "ใช้ข้อมูลเมตา",
progressLabel: "กำลังเขียนข้อมูลเมตา",
},
"bulk-rename": {
pattern: "รูปแบบ",
patternHint: "ตัวแปร: {{index}}, {{padded}}, {{original}}",
startIndex: "ดัชนีเริ่มต้น",
preview: "ตัวอย่าง",
andMore: "... และอีก {count} รายการ",
renaming: "กำลังเปลี่ยนชื่อ...",
submit: "เปลี่ยนชื่อ {count} ไฟล์",
zipDownloaded: "ดาวน์โหลด ZIP สำเร็จ",
},
"image-to-pdf": {
imageCount: "{count} ภาพจะถูกแปลงเป็น{mode}",
imageCountPlural: "{count} ภาพจะถูกแปลงเป็น{mode}",
singlePdfMode: "PDF เดียว หนึ่งภาพต่อหนึ่งหน้า",
separatePdfMode: "PDF แยก หนึ่งไฟล์ต่อหนึ่งภาพ",
combineAllImages: "รวมทุกภาพเป็น PDF เดียว",
pageSize: "ขนาดหน้า",
orientation: "การวางแนว",
portrait: "แนวตั้ง",
landscape: "แนวนอน",
margin: "ระยะขอบ",
targetSizeLabel: "ขนาดไฟล์เป้าหมาย (ไม่บังคับ)",
targetSizePlaceholder: "เช่น 2",
targetSizeHint: "เว้นว่างเพื่อคุณภาพสูงสุด",
targetSizeMet: "ถึงเป้าหมายแล้ว",
targetSizeNotMet: "ไม่สามารถถึงเป้าหมายได้ ไฟล์ถูกบีบอัดด้วยคุณภาพต่ำสุด",
targetSizeTooSmall: "ขนาดเป้าหมายต้องอย่างน้อย 50KB",
jpegQualityLabel: "คุณภาพ JPEG ที่ใช้",
noImage: "ไม่มีภาพ",
submitCollate: "สร้าง PDF ({count} หน้า)",
submitSeparate: "สร้าง {count} PDF",
downloadPdf: "ดาวน์โหลด PDF",
downloadZip: "ดาวน์โหลด ZIP",
progressLabel: "กำลังสร้าง PDF",
uploadingImages: "กำลังอัปโหลดภาพ...",
processingPages: "กำลังประมวลผล {count} หน้า...",
},
"pdf-to-image": {
dropPdf: "ลาก PDF มาวางที่นี่หรือคลิกเพื่อเลือก",
readingPdf: "กำลังอ่าน PDF...",
pageCount: "{count} หน้า",
pageCountPlural: "{count} หน้า",
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
resolutionDpi: "ความละเอียด (DPI)",
dpiScreen: "หน้าจอ",
dpiStandard: "มาตรฐาน",
dpiPrint: "พิมพ์",
dpiHighQuality: "คุณภาพสูง",
colorMode: "โหมดสี",
colorModeColor: "สี",
colorModeGrayscale: "ขาวเทา",
colorModeBw: "ขาวดำ",
pages: "หน้า",
allPages: "ทุกหน้า",
pagesHint: "เช่น 1-3, 5, 8-10 (เอกสารมี {count} หน้า)",
converting: "กำลังแปลง...",
submit: "แปลง {count} หน้า",
submitPlural: "แปลง {count} หน้า",
downloadAllZip: "ดาวน์โหลดทั้งหมด (ZIP)",
},
favicon: {
uploadHint: "อัปโหลดภาพสี่เหลี่ยมจัตุรัส (แนะนำ 512x512 ขึ้นไป) เพื่อสร้าง Favicon และไอคอนแอปทุกขนาด",
multipleHint: "ภาพแต่ละภาพจาก {count} ภาพจะมีโฟลเดอร์แยกใน ZIP",
generatedSizes: "ขนาดที่สร้าง (ต่อภาพ)",
plusManifest: "+ manifest.json + โค้ด HTML",
submit: "สร้าง Favicon ({count} ภาพ)",
submitPlural: "สร้าง Favicon ({count} ภาพ)",
downloadZip: "ดาวน์โหลด Favicon ZIP",
progressLabel: "กำลังสร้าง Favicon",
},
"adjust-colors": {
light: "แสง",
brightness: "ความสว่าง",
contrast: "คอนทราสต์",
exposure: "ค่าแสง",
color: "สี",
saturation: "ความอิ่มตัว",
temperature: "อุณหภูมิสี",
temperatureHint: "เย็น / อุ่น",
tint: "โทนสี",
tintHint: "เขียว / แดงม่วง",
hue: "เฉดสี",
detail: "รายละเอียด",
sharpness: "ความคมชัด",
effects: "เอฟเฟกต์",
none: "ไม่มี",
grayscale: "ขาวเทา",
sepia: "ซีเปีย",
invert: "กลับสี",
colorChannels: "ช่องสี",
channelModified: "แก้ไขแล้ว",
red: "แดง",
green: "เขียว",
blue: "น้ำเงิน",
resetAll: "รีเซ็ตทั้งหมด",
submit: "ใช้งาน",
submitBatch: "ใช้งาน ({count} ไฟล์)",
progressLabel: "กำลังปรับสี",
},
sharpening: {
method: "วิธีการ",
adaptive: "ปรับตัว",
unsharpMask: "อันชาร์ปมาสก์",
highPass: "ไฮพาส",
presets: "พรีเซ็ต",
textureAmount: "ปริมาณพื้นผิว",
amount: "ปริมาณ",
strength: "ความเข้ม",
noiseReduction: "ลดสัญญาณรบกวน",
off: "ปิด",
lightDenoise: "เบา",
mediumDenoise: "ปานกลาง",
strongDenoise: "หนัก",
advancedControls: "การควบคุมขั้นสูง",
radius: "รัศมี",
flatProtection: "ปกป้องพื้นที่เรียบ",
detailThreshold: "เกณฑ์รายละเอียด",
haloLimitLight: "ขีดจำกัดแสงรัศมี (สว่าง)",
haloLimitDark: "ขีดจำกัดแสงรัศมี (มืด)",
threshold: "เกณฑ์",
kernelSize: "ขนาดเคอร์เนล",
submit: "เพิ่มความคมชัด",
submitBatch: "เพิ่มความคมชัด ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มความคมชัด",
},
"replace-color": {
sourceColor: "สีต้นทาง (ที่จะแทนที่)",
targetColor: "สีปลายทาง (แทนที่ด้วย)",
makeTransparent: "ทำให้โปร่งใสแทน",
tolerance: "ค่าความคลาดเคลื่อน",
exactMatch: "ตรงทั้งหมด",
wideRange: "ช่วงกว้าง",
submit: "แทนที่สี",
submitBatch: "แทนที่สี ({count} ไฟล์)",
progressLabel: "กำลังแทนที่สี",
},
"color-blindness": {
simulationType: "ประเภทการจำลอง",
redGreen: "แดง-เขียว",
blueYellow: "น้ำเงิน-เหลือง",
monochromatic: "ขาวดำ",
submit: "จำลอง",
submitBatch: "จำลอง ({count} ไฟล์)",
progressLabel: "กำลังจำลองตาบอดสี",
},
"remove-background": {
subject: "ตัวแบบ",
people: "บุคคล",
products: "สินค้า",
general: "ทั่วไป",
passportIdPhoto: "ภาพหนังสือเดินทาง / บัตรประชาชน",
quality: "คุณภาพ",
fast: "เร็ว",
hd: "HD",
max: "สูงสุด",
ultra: "อัลตร้า",
background: "พื้นหลัง",
transparent: "โปร่งใส",
bgColor: "สี",
gradient: "ไล่สี",
image: "ภาพ",
gradientDirection: "ทิศทาง",
chooseBackgroundImage: "เลือกภาพพื้นหลัง",
effectsSection: "เอฟเฟกต์",
effectsActive: "ใช้งานอยู่",
blurBackground: "เบลอพื้นหลัง",
intensity: "ความเข้ม",
addShadow: "เพิ่มเงา",
opacity: "ความทึบ",
outputFormat: "รูปแบบเอาต์พุต",
edgeSmoothing: "ปรับขอบให้เรียบ",
edgeSmoothingOff: "ปิด",
edgeSmoothingLight: "เบา",
edgeSmoothingMedium: "ปานกลาง",
edgeSmoothingStrong: "เข้ม",
colorDecontamination: "กำจัดสีขอบ",
rendering: "กำลังเรนเดอร์...",
submit: "ลบพื้นหลัง",
submitBatch: "ลบพื้นหลัง ({count} ไฟล์)",
progressLabel: "กำลังลบพื้นหลัง",
},
upscale: {
scaleFactor: "ตัวคูณขยาย",
quality: "คุณภาพ",
enhanceFaces: "ปรับปรุงใบหน้า",
noiseReduction: "ลดสัญญาณรบกวน",
noiseReductionHint: "ปรับเรียบเกรนและสัญญาณรบกวน ค่าสูงขึ้นลดสัญญาณรบกวนมากขึ้นแต่อาจทำให้รายละเอียดเบลอ",
outputFormat: "รูปแบบเอาต์พุต",
submit: "ขยาย {scale}x",
submitBatch: "ขยาย {scale}x ({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: "ทั้งหมด, 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 หาบริเวณที่มีรายละเอียดและข้อมูลมากที่สุด",
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:
"การลดสัญญาณรบกวน AI สำหรับไฟล์ GIF ประมวลผลเฉพาะเฟรมแรก สำหรับ GIF เคลื่อนไหว ใช้ระดับเร็วหรือสมดุล",
submit: "ลดสัญญาณรบกวน",
submitBatch: "ลดสัญญาณรบกวน ({count} ไฟล์)",
progressLabel: "กำลังลดสัญญาณรบกวน",
progressLabelBatch: "กำลังลดสัญญาณรบกวนจาก {count} ภาพ",
},
"red-eye-removal": {
sensitivity: "ความไว",
strict: "เข้มงวด",
aggressive: "แรง",
correctionStrength: "ความเข้มของการแก้ไข",
subtle: "เบาๆ",
dark: "เข้ม",
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
submit: "แก้ไขตาแดง",
submitBatch: "แก้ไขตาแดง ({count} ไฟล์)",
progressLabel: "กำลังแก้ไขตาแดง",
progressLabelBatch: "กำลังแก้ไขตาแดงใน {count} ภาพ",
},
"restore-photo": {
scratchRemoval: "ลบรอยขีดข่วน",
scratchRemovalDesc: "ตรวจจับและซ่อมรอยขีดข่วน รอยฉีกขาด จุดด่าง",
faceEnhancement: "ปรับปรุงใบหน้า",
faceEnhancementDesc: "กู้คืนใบหน้าที่เสื่อมสภาพด้วย CodeFormer AI",
faceFidelity: "ความเที่ยงตรงของใบหน้า",
enhanced: "ปรับปรุงแล้ว",
faithful: "ซื่อสัตย์ต่อต้นฉบับ",
noiseReduction: "ลดสัญญาณรบกวน",
noiseReductionDesc: "ลดเกรนและสัญญาณรบกวนจากภาพเก่า",
denoiseStrength: "ความเข้มการลดสัญญาณรบกวน",
autoColorize: "ลงสีอัตโนมัติ",
autoColorizeDesc: "เพิ่มสีให้ภาพขาวดำด้วย DDColor AI",
colorizeStrength: "ความเข้มการลงสี",
vivid: "สดใส",
submit: "กู้คืนภาพ",
submitBatch: "กู้คืนภาพ ({count})",
progressLabel: "กำลังกู้คืนภาพ",
progressLabelBatch: "กำลังกู้คืน {count} ภาพ",
},
"content-aware-resize": {
widthPx: "ความกว้าง (px)",
heightPx: "ความสูง (px)",
resizeToSquare: "ปรับเป็นสี่เหลี่ยมจัตุรัส",
protectFaces: "ปกป้องใบหน้า",
protectFacesHint: "ตรวจจับและปกป้องบริเวณใบหน้าจากการลบรอยต่อโดยใช้การตรวจจับใบหน้า",
smoothing: "การปรับเรียบ",
edgeSensitivity: "ความไวขอบ",
submit: "ปรับขนาด",
submitBatch: "ปรับขนาด ({count} ไฟล์)",
progressLabel: "กำลังปรับขนาดแบบรับรู้เนื้อหา",
},
"ai-canvas-expand": {
quality: "คุณภาพ",
fast: "เร็ว",
balanced: "สมดุล",
highQuality: "คุณภาพสูง",
fastDesc: "ตัวอย่างเร็ว รอบ AI น้อยลง",
balancedDesc: "คุณภาพดี ความเร็วปานกลาง",
highQualityDesc: "ผลลัพธ์ดีที่สุด ช้ากว่า",
extendToAspectRatio: "ขยายตามอัตราส่วน",
extendByPixels: "ขยายเพิ่ม (พิกเซล)",
top: "บน",
right: "ขวา",
bottom: "ล่าง",
left: "ซ้าย",
newSize: "ขนาดใหม่: {width} x {height}",
submit: "ขยายแคนวาส",
submitBatch: "ขยาย ({count} ไฟล์)",
progressLabel: "กำลังขยายแคนวาส",
},
colorize: {
aiModel: "โมเดล AI",
fast: "เร็ว",
fastDesc: "ผลลัพธ์เร็ว",
balanced: "สมดุล",
balancedDesc: "ดีที่สุดที่มี",
best: "ดีที่สุด",
bestDesc: "คุณภาพสูงสุด",
colorIntensity: "ความเข้มของสี",
grayscaleLabel: "ขาวเทา",
subtleLabel: "เบาๆ",
naturalLabel: "เป็นธรรมชาติ",
vividLabel: "สดใส",
intensityHint: "ค่าต่ำให้สีนุ่มนวล สไตล์วินเทจ",
strength: "ความเข้มการลงสี",
submit: "ลงสี",
submitBatch: "ลงสี ({count} ไฟล์)",
progressLabel: "กำลังลงสี",
progressLabelBatch: "กำลังลงสี {count} ภาพ",
},
"passport-photo": {
country: "ประเทศ",
searchCountries: "ค้นหาประเทศ...",
noCountriesFound: "ไม่พบประเทศ",
customDimensions: "ขนาดกำหนดเอง",
documentType: "ประเภทเอกสาร",
dimensionsMm: "ขนาด (mm)",
dpi: "DPI",
pixelsPerInch: "พิกเซลต่อนิ้ว",
backgroundColor: "สีพื้นหลัง",
maxFileSize: "ขนาดไฟล์สูงสุด",
noLimit: "ไม่จำกัด",
customKb: "กำหนดเอง KB...",
uploadPortrait: "อัปโหลดภาพถ่ายบุคคล",
uploadHint: "ลากหรืออัปโหลดภาพในแผงซ้ายเพื่อดูตัวอย่างภาพหนังสือเดินทาง",
analyzingPhoto: "กำลังวิเคราะห์ภาพ",
detectingLandmarks: "กำลังตรวจจับจุดสำคัญบนใบหน้าและลบพื้นหลัง...",
generatePassportPhoto: "สร้างภาพหนังสือเดินทาง",
generating: "กำลังสร้าง...",
downloadPhoto: "ดาวน์โหลดภาพ",
faceCentered: "ใบหน้าอยู่กึ่งกลาง",
headLevel: "ศีรษะตรง",
lookingStraight: "มองตรงไปข้างหน้า",
faceSize: "ขนาดใบหน้า",
whatYouSee: "สิ่งที่คุณเห็นคือสิ่งที่จะดาวน์โหลด",
dragToAdjust: "ลากเพื่อปรับ",
scrollToZoom: "เลื่อนเพื่อซูม",
photoGenerated: "สร้างภาพแล้ว ดาวน์โหลดจากแผงซ้าย",
},
"transcribe-audio": {
language: "ภาษา",
autoDetect: "ตรวจจับอัตโนมัติ",
outputFormat: "รูปแบบผลลัพธ์",
plainText: "ข้อความธรรมดา",
submit: "ถอดเสียง",
submitBatch: "ถอดเสียง ({count} ไฟล์)",
progressLabel: "กำลังถอดเสียง",
},
"auto-subtitles": {
language: "ภาษา",
autoDetect: "ตรวจจับอัตโนมัติ",
format: "รูปแบบคำบรรยาย",
submit: "สร้างคำบรรยาย",
submitBatch: "สร้างคำบรรยาย ({count} ไฟล์)",
progressLabel: "กำลังสร้างคำบรรยาย",
},
"transparency-fixer": {
description: "อัปโหลด PNG ที่มีพื้นหลังโปร่งใสปลอม แล้วเราจะแก้ไขให้ในคลิกเดียว",
removeWatermark: "ลบลายน้ำ",
removeWatermarkHelp: "ตรวจจับและลบลายน้ำกึ่งโปร่งใส",
requiresEraser: "ต้องการชุดลบวัตถุ",
advanced: "ขั้นสูง",
defringe: "ลบขอบสี",
outputFormat: "รูปแบบเอาต์พุต",
submit: "แก้ไขความโปร่งใส",
submitBatch: "แก้ไขความโปร่งใส ({count} ไฟล์)",
progressLabel: "กำลังแก้ไขความโปร่งใส",
},
"background-replace": {
color: "สีพื้นหลัง",
submit: "เปลี่ยนพื้นหลัง",
submitBatch: "เปลี่ยนพื้นหลัง ({count} ไฟล์)",
progressLabel: "กำลังเปลี่ยนพื้นหลัง",
},
"blur-background": {
intensity: "ความเข้มเบลอ",
submit: "เบลอพื้นหลัง",
submitBatch: "เบลอพื้นหลัง ({count} ไฟล์)",
progressLabel: "กำลังเบลอพื้นหลัง",
},
"watermark-text": {
watermarkText: "ข้อความลายน้ำ",
fontSize: "ขนาดตัวอักษร",
color: "สี",
opacity: "ความทึบ",
position: "ตำแหน่ง",
rotation: "การหมุน",
center: "กลาง",
topLeft: "บนซ้าย",
topRight: "บนขวา",
bottomLeft: "ล่างซ้าย",
bottomRight: "ล่างขวา",
tiled: "เรียงแบบกระเบื้อง",
submit: "เพิ่มลายน้ำ",
submitBatch: "เพิ่มลายน้ำ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มลายน้ำ",
},
"watermark-image": {
uploadWatermark: "อัปโหลดภาพลายน้ำ",
position: "ตำแหน่ง",
opacity: "ความทึบ",
scale: "สเกล",
submit: "ใช้ลายน้ำ",
submitBatch: "ใช้ลายน้ำ ({count} ไฟล์)",
},
"text-overlay": {
text: "ข้อความ",
fontSize: "ขนาดตัวอักษร",
color: "สี",
position: "ตำแหน่ง",
top: "บน",
center: "กลาง",
bottom: "ล่าง",
backgroundBox: "กล่องพื้นหลัง",
backgroundColor: "สีพื้นหลัง",
shadow: "เงา",
submit: "เพิ่มข้อความ",
submitBatch: "เพิ่มข้อความ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มข้อความซ้อนทับ",
download: "ดาวน์โหลด",
defaultText: "ข้อความของคุณ",
},
compose: {
uploadOverlay: "อัปโหลดภาพซ้อนทับ",
xPosition: "ตำแหน่ง X",
yPosition: "ตำแหน่ง Y",
opacity: "ความทึบ",
blendMode: "โหมดผสม",
submit: "จัดองค์ประกอบ",
},
"meme-generator": {
selectTemplate: "เลือกเทมเพลตจากแกลเลอรีหรืออัปโหลดภาพของคุณเองเพื่อเริ่มต้น",
chooseLayout: "เลือกเลย์เอาต์ข้อความสำหรับภาพที่กำหนดเอง",
textContent: "เนื้อหาข้อความ",
textStyle: "สไตล์ข้อความ",
font: "ฟอนต์",
fontSize: "ขนาดตัวอักษร",
textColor: "สีตัวอักษร",
strokeColor: "สีขอบตัวอักษร",
allCaps: "ตัวพิมพ์ใหญ่ทั้งหมด",
generate: "สร้าง Meme",
generating: "กำลังสร้าง...",
downloadMeme: "ดาวน์โหลด Meme",
backToGallery: "กลับไปแกลเลอรี",
},
info: {
loadingInfo: "กำลังโหลดข้อมูล...",
filename: "ชื่อไฟล์",
fileSize: "ขนาดไฟล์",
dimensions: "ขนาด",
format: "รูปแบบ",
channels: "ช่อง",
colorSpace: "ปริภูมิสี",
density: "ความหนาแน่น",
bitDepth: "ความลึกบิต",
progressive: "โปรเกรสซีฟ",
pages: "หน้า",
hasAlpha: "มี Alpha",
hasProfile: "มีโปรไฟล์",
hasExif: "มี EXIF",
hasIcc: "มี ICC",
hasXmp: "มี XMP",
readInfo: "อ่านข้อมูล",
reading: "กำลังอ่าน...",
channelStats: "สถิติช่องสัญญาณ",
yes: "ใช่",
no: "ไม่",
na: "ไม่มีข้อมูล",
failedToRead: "ไม่สามารถอ่านข้อมูลได้",
},
compare: {
uploadSecondImage: "อัปโหลดภาพที่สอง",
similarity: "ความคล้าย: {percent}%",
submit: "เปรียบเทียบ",
downloadDiff: "ดาวน์โหลดภาพความต่าง",
},
"find-duplicates": {
preset: "พรีเซ็ต",
exact: "ตรงกัน",
similar: "คล้ายกัน",
loose: "หลวมๆ",
exactDesc: "สำเนาที่เหมือนกันทุกพิกเซล ภาพเดียวกันในรูปแบบต่างกัน",
similarDesc: "สำเนาที่ปรับขนาด บีบอัดใหม่ หรือแก้ไขเล็กน้อย",
looseDesc: "ภาพที่เกี่ยวข้องทางสายตา ครอปเล็กน้อย ค่าแสงต่างกัน",
threshold: "เกณฑ์",
submit: "สแกนหาภาพซ้ำ",
scanning: "กำลังสแกน...",
},
"color-palette": {
submit: "แยกจานสี",
extracting: "กำลังแยก...",
dominantColors: "สีหลัก",
clickToCopy: "คลิกเพื่อคัดลอก",
},
"qr-generate": {
contentType: "ประเภทเนื้อหา",
url: "URL",
text: "ข้อความ",
wifi: "WiFi",
vcard: "vCard",
email: "อีเมล",
phone: "โทรศัพท์",
sms: "SMS",
styling: "การจัดสไตล์",
dotStyle: "สไตล์จุด",
cornerSquareStyle: "สไตล์สี่เหลี่ยมมุม",
cornerDotStyle: "สไตล์จุดมุม",
foregroundColor: "สีพื้นหน้า",
bgColor: "สีพื้นหลัง",
logo: "โลโก้",
downloadFormat: "รูปแบบดาวน์โหลด",
submit: "สร้างคิวอาร์โค้ด",
download: "ดาวน์โหลดคิวอาร์โค้ด",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "ไฟล์ HTML",
htmlFile: "ไฟล์ HTML",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
devicePreset: "อุปกรณ์",
viewportWidth: "ความกว้าง",
viewportHeight: "ความสูง",
fullPage: "เต็มหน้า",
submit: "จับภาพ",
download: "ดาวน์โหลดภาพหน้าจอ",
capturing: "กำลังจับภาพหน้าเว็บ...",
errorTimeout: "หน้าเว็บใช้เวลาโหลดนานเกินไป",
errorBlocked: "ไม่สามารถจับภาพ URL นี้ได้",
errorUnavailable: "บริการจับภาพหน้าจอไม่พร้อมใช้งาน",
errorFailed: "จับภาพหน้าเว็บไม่สำเร็จ",
placeholder: "ใส่ URL แล้วคลิกจับภาพ",
presets: {
desktop: "เดสก์ท็อป",
tablet: "แท็บเล็ต",
mobile: "มือถือ",
custom: "กำหนดเอง",
},
},
"barcode-read": {
submit: "สแกนบาร์โค้ด",
submitBatch: "สแกน ({count} ไฟล์)",
scanning: "กำลังสแกน...",
noBarcodesFound: "ไม่พบบาร์โค้ด",
barcodesFound: "พบ {count} บาร์โค้ด",
barcodesFoundPlural: "พบ {count} บาร์โค้ด",
},
collage: {
template: "เทมเพลต",
aspectRatio: "อัตราส่วนภาพ",
gap: "ระยะห่าง",
cornerRadius: "รัศมีมุม",
backgroundColor: "สีพื้นหลัง",
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
submit: "สร้างคอลลาจ",
downloadCollage: "ดาวน์โหลดคอลลาจ",
},
stitch: {
direction: "ทิศทาง",
horizontal: "แนวนอน",
vertical: "แนวตั้ง",
grid: "กริด",
gridColumns: "คอลัมน์กริด",
resizeMode: "โหมดปรับขนาด",
fit: "พอดี",
original: "ต้นฉบับ",
stretchMode: "ยืด",
cropMode: "ครอป",
alignment: "การจัดตำแหน่ง",
start: "เริ่มต้น",
center: "กลาง",
end: "ท้าย",
gap: "ระยะห่าง",
border: "กรอบ",
cornerRadius: "รัศมีมุม",
backgroundColor: "สีพื้นหลัง",
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
submit: "ต่อภาพ",
},
split: {
modeGrid: "กริด",
modeTileSize: "ขนาดกระเบื้อง",
presets: "พรีเซ็ต",
columns: "คอลัมน์",
rows: "แถว",
tileWidth: "ความกว้างกระเบื้อง",
tileHeight: "ความสูงกระเบื้อง",
outputFormat: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
submit: "แบ่งภาพ",
downloadAll: "ดาวน์โหลดทั้งหมด (ZIP)",
},
border: {
presets: "พรีเซ็ต",
borderWidth: "ความกว้างกรอบ",
borderColor: "สีกรอบ",
padding: "ระยะห่างภายใน",
paddingColor: "สีระยะห่างภายใน",
cornerRadius: "รัศมีมุม",
shadow: "เงา",
shadowBlur: "เบลอเงา",
shadowOffsetX: "ออฟเซ็ตเงา X",
shadowOffsetY: "ออฟเซ็ตเงา Y",
shadowColor: "สีเงา",
shadowOpacity: "ความทึบเงา",
submit: "เพิ่มกรอบ",
submitBatch: "เพิ่มกรอบ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มกรอบ",
},
beautify: {
preset: "พรีเซ็ต",
backgroundType: "ประเภทพื้นหลัง",
solidColor: "สีทึบ",
linearGradient: "ไล่สีเส้นตรง",
radialGradient: "ไล่สีวงกลม",
customImage: "ภาพกำหนดเอง",
gradientAngle: "มุมไล่สี",
padding: "ระยะห่างภายใน",
borderRadius: "รัศมีกรอบ",
shadowPreset: "พรีเซ็ตเงา",
deviceFrame: "กรอบอุปกรณ์",
submit: "ตกแต่ง",
submitBatch: "ตกแต่ง ({count} ไฟล์)",
progressLabel: "กำลังตกแต่งสกรีนช็อต",
},
"circle-crop": {
submit: "ครอปวงกลม",
submitBatch: "ครอปวงกลม ({count} ไฟล์)",
progressLabel: "กำลังครอปเป็นวงกลม",
},
duotone: {
shadow: "สีเงา",
highlight: "สีไฮไลต์",
submit: "ใช้ดูโอโทน",
submitBatch: "ใช้ดูโอโทน ({count} ไฟล์)",
progressLabel: "กำลังใช้ดูโอโทน",
},
"image-pad": {
target: "อัตราส่วนเป้าหมาย",
color: "สีพื้นหลัง",
submit: "เพิ่มขอบภาพ",
submitBatch: "เพิ่มขอบภาพ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มขอบภาพ",
},
pixelate: {
blockSize: "ขนาดบล็อก",
submit: "ทำพิกเซล",
submitBatch: "ทำพิกเซล ({count} ไฟล์)",
progressLabel: "กำลังทำพิกเซล",
},
vignette: {
strength: "ความเข้ม",
color: "สีวิกเน็ต",
submit: "ใช้วิกเน็ต",
submitBatch: "ใช้วิกเน็ต ({count} ไฟล์)",
progressLabel: "กำลังใช้วิกเน็ต",
},
"gif-webp": {
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลงแอนิเมชัน",
},
histogram: {
submit: "สร้างฮิสโทแกรม",
submitBatch: "สร้างฮิสโทแกรม ({count} ไฟล์)",
progressLabel: "กำลังสร้างฮิสโทแกรม",
},
"lqip-placeholder": {
width: "ความกว้าง",
blur: "เบลอ",
submit: "สร้างตัวยึดตำแหน่ง",
submitBatch: "สร้างตัวยึดตำแหน่ง ({count} ไฟล์)",
progressLabel: "กำลังสร้างตัวยึดตำแหน่ง",
},
"sprite-sheet": {
columns: "คอลัมน์",
padding: "ระยะขอบ",
background: "สีพื้นหลัง",
submit: "สร้าง Sprite Sheet",
submitBatch: "สร้าง Sprite Sheet",
progressLabel: "กำลังสร้าง 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: "ข้อความ",
type: "ประเภทบาร์โค้ด",
scale: "มาตราส่วน",
includeText: "แสดงข้อความ",
submit: "สร้างบาร์โค้ด",
download: "ดาวน์โหลดบาร์โค้ด",
},
"chart-maker": {
kind: "ประเภทแผนภูมิ",
title: "ชื่อ",
width: "ความกว้าง",
height: "ความสูง",
submit: "สร้างแผนภูมิ",
submitBatch: "สร้างแผนภูมิ ({count} ไฟล์)",
progressLabel: "กำลังสร้างแผนภูมิ",
},
"enhance-faces-standalone": {
model: "โมเดล",
fast: "เร็ว",
balanced: "สมดุล",
best: "ดีที่สุด",
},
"convert-video": {
format: "รูปแบบเอาต์พุต",
quality: "คุณภาพ",
high: "สูง",
balanced: "สมดุล",
small: "เล็กที่สุด",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"compress-video": {
quality: "การบีบอัด",
light: "เบา",
balanced: "สมดุล",
strong: "หนัก",
resolution: "ความละเอียด",
original: "ต้นฉบับ",
submit: "บีบอัด",
submitBatch: "บีบอัด ({count} ไฟล์)",
progressLabel: "กำลังบีบอัด",
},
"trim-video": {
start: "เริ่มต้น (วินาที)",
end: "สิ้นสุด (วินาที)",
precise: "แม่นยำระดับเฟรม (เข้ารหัสใหม่)",
submit: "ตัด",
submitBatch: "ตัด ({count} ไฟล์)",
progressLabel: "กำลังตัด",
},
"mute-video": {
submit: "ลบเสียง",
submitBatch: "ลบเสียง ({count} ไฟล์)",
progressLabel: "กำลังปิดเสียง",
},
"video-to-gif": {
fps: "เฟรมต่อวินาที",
width: "ความกว้าง (px)",
start: "เริ่มต้น (วินาที)",
duration: "ระยะเวลา (วินาที)",
submit: "สร้าง GIF",
submitBatch: "สร้าง GIF ({count} ไฟล์)",
progressLabel: "กำลังสร้าง GIF",
},
"resize-video": {
preset: "พรีเซ็ต",
width: "ความกว้าง (px)",
height: "ความสูง (px)",
hint: "เว้นมิติหนึ่งว่างเพื่อรักษาอัตราส่วน",
submit: "ปรับขนาด",
submitBatch: "ปรับขนาด ({count} ไฟล์)",
progressLabel: "กำลังปรับขนาด",
},
"crop-video": {
width: "ความกว้าง (px)",
height: "ความสูง (px)",
x: "ค่าชดเชย X",
y: "ค่าชดเชย Y",
submit: "ครอป",
submitBatch: "ครอป ({count} ไฟล์)",
progressLabel: "กำลังครอป",
},
"rotate-video": {
transform: "การแปลง",
cw90: "หมุน 90 ตามเข็ม",
ccw90: "หมุน 90 ทวนเข็ม",
rotate180: "หมุน 180",
hflip: "พลิกแนวนอน",
vflip: "พลิกแนวตั้ง",
submit: "หมุน",
submitBatch: "หมุน ({count} ไฟล์)",
progressLabel: "กำลังหมุน",
},
"change-fps": {
fps: "เฟรมต่อวินาที",
submit: "เปลี่ยน FPS",
submitBatch: "เปลี่ยน FPS ({count} ไฟล์)",
progressLabel: "กำลังเปลี่ยน FPS",
},
"video-color": {
brightness: "ความสว่าง",
contrast: "คอนทราสต์",
saturation: "ความอิ่มตัว",
gamma: "แกมมา",
submit: "ใช้",
submitBatch: "ใช้ ({count} ไฟล์)",
progressLabel: "กำลังปรับสี",
},
"video-speed": {
factor: "ตัวคูณความเร็ว",
keepPitch: "คงระดับเสียงเดิม",
submit: "เปลี่ยนความเร็ว",
submitBatch: "เปลี่ยนความเร็ว ({count} ไฟล์)",
progressLabel: "กำลังเปลี่ยนความเร็ว",
},
"reverse-video": {
hint: "จำกัดเฉพาะคลิปไม่เกิน 5 นาที",
submit: "กลับด้าน",
submitBatch: "กลับด้าน ({count} ไฟล์)",
progressLabel: "กำลังกลับด้าน",
},
"video-loudnorm": {
hint: "ปรับเสียงให้ตรงตามมาตรฐาน EBU R128",
submit: "ปรับมาตรฐาน",
submitBatch: "ปรับมาตรฐาน ({count} ไฟล์)",
progressLabel: "กำลังปรับมาตรฐาน",
},
"aspect-pad": {
target: "อัตราส่วนเป้าหมาย",
color: "สีพื้นหลัง",
colorHint: "สี HEX เช่น #000000",
submit: "เพิ่มขอบ",
submitBatch: "เพิ่มขอบ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มขอบ",
},
"blur-pad": {
target: "อัตราส่วนเป้าหมาย",
blur: "ความเข้มเบลอ",
submit: "เพิ่มขอบ",
submitBatch: "เพิ่มขอบ ({count} ไฟล์)",
progressLabel: "กำลังเพิ่มขอบ",
},
"watermark-video": {
text: "ข้อความลายน้ำ",
position: "ตำแหน่ง",
fontSize: "ขนาดตัวอักษร",
opacity: "ความทึบ",
color: "สี",
colorHint: "สี HEX เช่น #ffffff",
submit: "ลายน้ำ",
submitBatch: "ลายน้ำ ({count} ไฟล์)",
progressLabel: "กำลังใส่ลายน้ำ",
},
"stabilize-video": {
smoothing: "ความเรียบ",
hint: "ประมวลผลสองรอบและใช้เวลานานกว่าเครื่องมือส่วนใหญ่",
submit: "ปรับให้นิ่ง",
submitBatch: "ปรับให้นิ่ง ({count} ไฟล์)",
progressLabel: "กำลังปรับให้นิ่ง",
},
"gif-to-video": {
format: "รูปแบบเอาต์พุต",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"video-to-webp": {
fps: "เฟรมต่อวินาที",
width: "ความกว้าง (px)",
quality: "คุณภาพ",
loop: "วนซ้ำแอนิเมชัน",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"video-to-frames": {
mode: "โหมดการแยก",
modeAll: "ทุกเฟรม",
modeNth: "ทุกเฟรมที่ N",
modeTimestamps: "เวลาที่กำหนด",
n: "แยกทุกเฟรมที่ N",
timestamps: "เวลา (วินาที)",
timestampsHint: "คั่นด้วยจุลภาค เช่น 0.5, 2, 4.5",
format: "รูปแบบภาพ",
submit: "แยกเฟรม",
submitBatch: "แยกเฟรม ({count} ไฟล์)",
progressLabel: "กำลังแยกเฟรม",
},
"merge-videos": {
hint: "ไฟล์จะถูกรวมตามลำดับที่อัปโหลด",
submit: "รวม",
submitBatch: "รวม ({count} ไฟล์)",
progressLabel: "กำลังรวม",
},
"replace-audio": {
hint: "อัปโหลดวิดีโอก่อน แล้วตามด้วยเสียง",
submit: "แทนที่เสียง",
submitBatch: "แทนที่เสียง ({count} ไฟล์)",
progressLabel: "กำลังแทนที่เสียง",
},
"burn-subtitles": {
fontSize: "ขนาดตัวอักษร",
hint: "อัปโหลดวิดีโอและไฟล์คำบรรยาย (.srt หรือ .vtt)",
submit: "เบิร์นคำบรรยาย",
submitBatch: "เบิร์นคำบรรยาย ({count} ไฟล์)",
progressLabel: "กำลังเบิร์นคำบรรยาย",
},
"embed-subtitles": {
language: "รหัสภาษา",
languageHint: "รหัส ISO 639-2 สามตัวอักษร เช่น eng, spa, fra",
submit: "ฝังคำบรรยาย",
submitBatch: "ฝังคำบรรยาย ({count} ไฟล์)",
progressLabel: "กำลังฝังคำบรรยาย",
},
"extract-subtitles": {
submit: "แยกคำบรรยาย",
submitBatch: "แยกคำบรรยาย ({count} ไฟล์)",
progressLabel: "กำลังแยกคำบรรยาย",
},
"images-to-video": {
secondsPerImage: "วินาทีต่อภาพ",
resolution: "ความละเอียด",
fps: "เฟรมต่อวินาที",
submit: "สร้างวิดีโอ",
submitBatch: "สร้างวิดีโอ ({count} ไฟล์)",
progressLabel: "กำลังสร้างสไลด์โชว์",
},
"video-metadata": {
hint: "รายงานข้อมูลเมตาจะแสดงในผลลัพธ์",
submit: "ลบข้อมูลเมตา",
submitBatch: "ลบข้อมูลเมตา ({count} ไฟล์)",
progressLabel: "กำลังลบข้อมูลเมตา",
},
"convert-audio": {
format: "รูปแบบเอาต์พุต",
bitrate: "บิตเรต (kbps)",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"trim-audio": {
start: "เริ่มต้น (วินาที)",
end: "สิ้นสุด (วินาที)",
submit: "ตัด",
submitBatch: "ตัด ({count} ไฟล์)",
progressLabel: "กำลังตัด",
},
"extract-audio": {
format: "รูปแบบเอาต์พุต",
submit: "แยก",
submitBatch: "แยก ({count} ไฟล์)",
progressLabel: "กำลังแยก",
},
"volume-adjust": {
"gain-db": "เกน (dB)",
submit: "ปรับระดับเสียง",
submitBatch: "ปรับระดับเสียง ({count} ไฟล์)",
progressLabel: "กำลังปรับระดับเสียง",
},
"normalize-audio": {
hint: "ปรับความดังตามมาตรฐาน EBU R128",
submit: "ปรับมาตรฐาน",
submitBatch: "ปรับมาตรฐาน ({count} ไฟล์)",
progressLabel: "กำลังปรับมาตรฐาน",
},
"fade-audio": {
"fade-in-s": "เฟดเข้า (วินาที)",
"fade-out-s": "เฟดออก (วินาที)",
submit: "ใช้เฟด",
submitBatch: "ใช้เฟด ({count} ไฟล์)",
progressLabel: "กำลังใช้เฟด",
},
"reverse-audio": {
submit: "กลับด้าน",
submitBatch: "กลับเสียง ({count} ไฟล์)",
progressLabel: "กำลังกลับเสียง",
},
"audio-speed": {
factor: "ตัวคูณความเร็ว",
submit: "เปลี่ยนความเร็ว",
submitBatch: "เปลี่ยนความเร็ว ({count} ไฟล์)",
progressLabel: "กำลังเปลี่ยนความเร็ว",
},
"pitch-shift": {
semitones: "ครึ่งเสียง",
hint: "ไม่อนุญาตให้ใช้ 0 ครึ่งเสียง",
submit: "ปรับระดับเสียง",
submitBatch: "ปรับระดับเสียง ({count} ไฟล์)",
progressLabel: "กำลังปรับระดับเสียง",
},
"audio-channels": {
mode: "โหมดช่องสัญญาณ",
"stereo-to-mono": "สเตอริโอเป็นโมโน",
"mono-to-stereo": "โมโนเป็นสเตอริโอ",
swap: "สลับซ้าย/ขวา",
submit: "แปลงช่องสัญญาณ",
submitBatch: "แปลงช่องสัญญาณ ({count} ไฟล์)",
progressLabel: "กำลังแปลงช่องสัญญาณ",
},
"silence-removal": {
"threshold-db": "เกณฑ์ความเงียบ (dB)",
"min-silence-s": "ระยะเวลาเงียบขั้นต่ำ (วินาที)",
submit: "ลบช่วงเงียบ",
submitBatch: "ลบช่วงเงียบ ({count} ไฟล์)",
progressLabel: "กำลังลบช่วงเงียบ",
},
"noise-reduction": {
strength: "ความแรง",
light: "เบา",
medium: "ปานกลาง",
strong: "แรง",
submit: "ลดสัญญาณรบกวน",
submitBatch: "ลดสัญญาณรบกวน ({count} ไฟล์)",
progressLabel: "กำลังลดสัญญาณรบกวน",
},
"merge-audio": {
format: "รูปแบบไฟล์ออก",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "ไฟล์จะถูกรวมตามลำดับที่อัปโหลด",
submit: "รวมเสียง",
submitBatch: "รวมเสียง ({count} ไฟล์)",
progressLabel: "กำลังรวมเสียง",
},
"split-audio": {
mode: "โหมดแยก",
time: "ตามเวลา",
parts: "ส่วนเท่ากัน",
silence: "ตามช่วงเงียบ",
"segment-s": "ความยาวส่วน (วินาที)",
"num-parts": "จำนวนส่วน",
"threshold-db": "เกณฑ์ความเงียบ (dB)",
"min-silence-s": "ระยะเวลาเงียบขั้นต่ำ (วินาที)",
submit: "แยกเสียง",
submitBatch: "แยกเสียง ({count} ไฟล์)",
progressLabel: "กำลังแยกเสียง",
},
"ringtone-maker": {
"start-s": "เวลาเริ่มต้น (วินาที)",
"duration-s": "ระยะเวลา (วินาที)",
"max-hint": "สูงสุด 30 วินาที",
submit: "สร้างริงโทน",
submitBatch: "สร้างริงโทน ({count} ไฟล์)",
progressLabel: "กำลังสร้างริงโทน",
},
"waveform-image": {
width: "ความกว้าง (px)",
height: "ความสูง (px)",
color: "สีคลื่นเสียง",
submit: "สร้างคลื่นเสียง",
submitBatch: "สร้างคลื่นเสียง ({count} ไฟล์)",
progressLabel: "กำลังสร้างคลื่นเสียง",
},
"audio-metadata": {
strip: "ลบข้อมูลเมตาทั้งหมด",
title: "ชื่อเรื่อง",
artist: "ศิลปิน",
album: "อัลบั้ม",
submit: "ใช้ข้อมูลเมตา",
submitBatch: "ใช้ข้อมูลเมตา ({count} ไฟล์)",
progressLabel: "กำลังใช้ข้อมูลเมตา",
},
"merge-pdf": {
addFiles: "เพิ่ม PDF เพื่อรวม",
needTwo: "ต้องมี PDF อย่างน้อยสองไฟล์",
orderHint: "PDF {count} ไฟล์จะถูกรวมตามลำดับนี้",
submit: "รวม",
submitBatch: "รวม ({count} ไฟล์)",
progressLabel: "กำลังรวม",
},
"split-pdf": {
mode: "โหมดแยก",
range: "ช่วงหน้า",
rangeHint: "เช่น 1-3, 5, 7-z",
everyN: "จำนวนหน้าต่อส่วน",
submit: "แยก",
submitBatch: "แยก ({count} ไฟล์)",
progressLabel: "กำลังแยก",
},
"compress-pdf": {
preset: "ค่าคุณภาพสำเร็จรูป",
screen: "หน้าจอ (เล็กสุด)",
ebook: "อีบุ๊ก (สมดุล)",
printer: "เครื่องพิมพ์ (คุณภาพดีสุด)",
submit: "บีบอัด",
submitBatch: "บีบอัด ({count} ไฟล์)",
progressLabel: "กำลังบีบอัด",
},
"rotate-pdf": {
angle: "มุมหมุน",
range: "ช่วงหน้า",
rangeHint: "เช่น 1-3, 5, 1-z (ทุกหน้า)",
submit: "หมุน",
submitBatch: "หมุน ({count} ไฟล์)",
progressLabel: "กำลังหมุน",
},
"convert-document": {
format: "รูปแบบไฟล์ออก",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"convert-presentation": {
format: "รูปแบบไฟล์ออก",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"convert-spreadsheet": {
format: "รูปแบบไฟล์ออก",
hint: "สมุดงานหลายชีตจะส่งออกเฉพาะชีตแรกเป็น CSV",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"excel-to-pdf": {
submit: "แปลงเป็น PDF",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"powerpoint-to-pdf": {
submit: "แปลงเป็น PDF",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"word-to-pdf": {
submit: "แปลงเป็น PDF",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"extract-pages": {
range: "ช่วงหน้า",
rangeHint: "เช่น 1-3, 5, 7-z",
submit: "แยกหน้า",
submitBatch: "แยกหน้า ({count} ไฟล์)",
progressLabel: "กำลังแยกหน้า",
},
"remove-pages": {
pages: "หน้าที่ต้องการลบ",
pagesHint: "เช่น 2, 4-6, z (หน้าสุดท้าย)",
submit: "ลบ",
submitBatch: "ลบ ({count} ไฟล์)",
progressLabel: "กำลังลบ",
},
"organize-pdf": {
order: "ลำดับหน้า",
orderHint: "เช่น 3,1,2 หรือ 1-z (ตามเดิม)",
submit: "จัดลำดับใหม่",
submitBatch: "จัดลำดับใหม่ ({count} ไฟล์)",
progressLabel: "กำลังจัดลำดับใหม่",
},
"protect-pdf": {
userPassword: "รหัสผ่านผู้ใช้",
ownerPassword: "รหัสผ่านเจ้าของ (ไม่บังคับ)",
ownerPasswordHint: "ใช้รหัสผ่านผู้ใช้หากเว้นว่าง",
submit: "ป้องกัน",
submitBatch: "ป้องกัน ({count} ไฟล์)",
progressLabel: "กำลังเข้ารหัส",
},
"unlock-pdf": {
password: "รหัสผ่าน",
submit: "ปลดล็อก",
submitBatch: "ปลดล็อก ({count} ไฟล์)",
progressLabel: "กำลังถอดรหัส",
},
"repair-pdf": {
submit: "ซ่อมแซม",
submitBatch: "ซ่อมแซม ({count} ไฟล์)",
progressLabel: "กำลังซ่อมแซม",
},
"linearize-pdf": {
submit: "ปรับแต่ง",
submitBatch: "ปรับแต่ง ({count} ไฟล์)",
progressLabel: "กำลังปรับแต่ง",
},
"grayscale-pdf": {
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"pdfa-convert": {
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"crop-pdf": {
margin: "ระยะขอบ (พอยต์)",
submit: "ครอป",
submitBatch: "ครอป ({count} ไฟล์)",
progressLabel: "กำลังครอป",
},
"nup-pdf": {
perSheet: "จำนวนหน้าต่อแผ่น",
submit: "จัดเรียง",
submitBatch: "จัดเรียง ({count} ไฟล์)",
progressLabel: "กำลังจัดเรียง",
},
"booklet-pdf": {
perSheet: "จำนวนหน้าต่อแผ่น",
submit: "สร้างหนังสือเล่มเล็ก",
submitBatch: "สร้างหนังสือเล่มเล็ก ({count} ไฟล์)",
progressLabel: "กำลังสร้างหนังสือเล่มเล็ก",
},
"watermark-pdf": {
text: "ข้อความลายน้ำ",
position: "ตำแหน่ง",
fontSize: "ขนาดตัวอักษร",
opacity: "ความทึบ",
rotation: "การหมุน",
submit: "ลายน้ำ",
submitBatch: "ลายน้ำ ({count} ไฟล์)",
progressLabel: "กำลังใส่ลายน้ำ",
},
"pdf-page-numbers": {
position: "ตำแหน่ง",
fontSize: "ขนาดตัวอักษร",
submit: "เพิ่มเลขหน้า",
submitBatch: "เพิ่มเลขหน้า ({count} ไฟล์)",
progressLabel: "กำลังใส่เลขหน้า",
},
"flatten-pdf": {
submit: "แผ่ราบ",
submitBatch: "แผ่ราบ ({count} ไฟล์)",
progressLabel: "กำลังแผ่ราบ",
},
"sign-pdf": {
yourSignatures: "ลายเซ็นของคุณ",
newSignature: "สร้างใหม่",
clickToPlace: "คลิกที่ลายเซ็นเพื่อวางบนหน้าปัจจุบัน",
selectedSignature: "ลายเซ็นที่เลือก",
dragToAdjust: "ลากที่จับเพื่อปรับขนาดหรือหมุน",
disclaimer: "เพิ่มภาพลายเซ็นที่มองเห็นได้ นี่ไม่ใช่ลายเซ็นดิจิทัลที่อิงใบรับรอง",
signing: "กำลังลงนาม…",
signingPercent: "กำลังลงนาม… {percent}%",
downloadSigned: "ดาวน์โหลด PDF ที่ลงนามแล้ว",
addFirst: "เพิ่มลายเซ็นอย่างน้อยหนึ่งรายการก่อนดาวน์โหลด",
pad: {
title: "สร้างลายเซ็น",
draw: "วาด",
type: "พิมพ์",
upload: "อัปโหลด",
color: "สี",
pen: "ปากกา",
namePlaceholder: "พิมพ์ชื่อของคุณ",
yourName: "ชื่อของคุณ",
remember: "จดจำบนอุปกรณ์นี้",
save: "บันทึกและวาง",
uploadHint: "วางไฟล์ PNG / JPG หรือคลิกเพื่อเลือก ไฟล์ PNG แบบโปร่งใสจะดีที่สุด",
},
},
"redact-pdf": {
terms: "คำที่ต้องปกปิด",
termsHint: "คำละหนึ่งบรรทัด (สูงสุด 50)",
caseSensitive: "ตรงตามตัวพิมพ์ใหญ่เล็ก",
submit: "ปกปิด",
submitBatch: "ปกปิด ({count} ไฟล์)",
progressLabel: "กำลังปกปิด",
},
"pdf-to-text": {
submit: "แยกข้อความ",
submitBatch: "แยกข้อความ ({count} ไฟล์)",
progressLabel: "กำลังแยกข้อความ",
},
"pdf-to-word": {
hint: "เหมาะสำหรับ PDF ที่เป็นข้อความ หน้าที่สแกนต้องใช้ OCR",
submit: "แปลงเป็น Word",
submitBatch: "แปลงเป็น Word ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"pdf-metadata": {
title: "ชื่อเรื่อง",
author: "ผู้เขียน",
subject: "หัวข้อ",
keywords: "คำสำคัญ",
submit: "ตั้งค่าข้อมูลเมตา",
submitBatch: "ตั้งค่าข้อมูลเมตา ({count} ไฟล์)",
progressLabel: "กำลังตั้งค่าข้อมูลเมตา",
},
"html-to-pdf": {
hint: "ทรัพยากรระยะไกลถูกปิดใช้งานเพื่อความเป็นส่วนตัว",
submit: "แปลงเป็น PDF",
submitBatch: "แปลงเป็น PDF ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"markdown-to-docx": {
submit: "แปลงเป็น DOCX",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"markdown-to-html": {
hint: "รูปภาพระยะไกลในต้นฉบับจะคงเดิมในผลลัพธ์",
submit: "แปลงเป็น HTML",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"markdown-to-pdf": {
hint: "ทรัพยากรระยะไกลถูกปิดใช้งานเพื่อความเป็นส่วนตัว",
submit: "แปลงเป็น PDF",
submitBatch: "แปลงเป็น PDF ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"epub-convert": {
format: "รูปแบบไฟล์ออก",
hint: "ทรัพยากรระยะไกลในหนังสือจะไม่ถูกดึงมา",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"to-epub": {
submit: "แปลงเป็น EPUB",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"csv-excel": {
sheet: "หมายเลขเวิร์กชีต",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"csv-json": {
pretty: "จัดรูปแบบสวยงาม",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"json-xml": {
pretty: "จัดรูปแบบสวยงาม",
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"split-csv": {
rowsPerFile: "จำนวนแถวต่อไฟล์",
keepHeader: "คงหัวตารางในทุกไฟล์",
submit: "แยก",
submitBatch: "แยก ({count} ไฟล์)",
progressLabel: "กำลังแยก",
},
"merge-csvs": {
submit: "รวม",
submitBatch: "รวม ({count} ไฟล์)",
progressLabel: "กำลังรวม",
},
"yaml-json": {
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"xml-to-csv": {
submit: "แปลง",
submitBatch: "แปลง ({count} ไฟล์)",
progressLabel: "กำลังแปลง",
},
"create-zip": {
submit: "สร้าง ZIP",
submitBatch: "สร้าง ZIP ({count} ไฟล์)",
progressLabel: "กำลังบีบอัด",
},
"extract-zip": {
submit: "แตกไฟล์",
submitBatch: "แตกไฟล์ ({count} ไฟล์)",
progressLabel: "กำลังแตกไฟล์",
},
},
urlImport: {
title: "นำเข้าจาก URL",
placeholder: "วาง URL ภาพ บรรทัดละหนึ่ง...",
importButton: "นำเข้า URL",
addButton: "เพิ่ม {count} ไฟล์",
adding: "กำลังเพิ่ม...",
retryButton: "ลองอีกครั้ง",
cancelButton: "ยกเลิก",
readyCount: "{count} พร้อม",
failedStatus: "ล้มเหลว",
},
comparison: {
original: "ต้นฉบับ",
processed: "ประมวลผลแล้ว",
before: "ก่อน",
after: "หลัง",
savings: "ประหยัด",
},
toolPage: {
emptyPrompt: "ลากหรืออัปโหลดภาพเพื่อเริ่มต้น",
filesCount: "ไฟล์ ({count})",
addMore: "+ เพิ่มอีก",
clearAll: "ล้างทั้งหมด",
acceptDescription: "เฉพาะไฟล์ {exts}",
notFound: "ไม่พบเครื่องมือ",
configureAndGenerate: "ตั้งค่าและสร้าง",
processingFailed: "การประมวลผลล้มเหลวสำหรับไฟล์นี้",
conversionComplete: "การแปลงเสร็จสมบูรณ์",
cannotPreviewDownload: "ไม่สามารถแสดงตัวอย่างไฟล์ {type} ในเบราว์เซอร์ได้ ใช้ปุ่มดาวน์โหลดเพื่อบันทึกไฟล์",
generatingPreview: "กำลังสร้างตัวอย่าง...",
cannotPreviewWillProcess:
"ไม่สามารถแสดงตัวอย่างไฟล์ {ext} ในเบราว์เซอร์ได้ เครื่องมือจะยังประมวลผลไฟล์นี้ตามปกติ",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageCounter: "{current} / {total}",
settingsLabel: "ตั้งค่า",
downloadAllZip: "ดาวน์โหลดทั้งหมด (ZIP)",
hideSettings: "ซ่อนการตั้งค่า",
imageArea: "พื้นที่แสดงตัวอย่าง",
disabledByAdmin: "เครื่องมือนี้ถูกปิดใช้งานโดยผู้ดูแลระบบ",
browseOtherTools: "ดูเครื่องมืออื่น",
privacyNote: "ไฟล์ถูกประมวลผลบนเซิร์ฟเวอร์ของคุณและไม่ถูกส่งออกนอกเครือข่าย",
applyAndDownload: "นำไปใช้และดาวน์โหลด",
andMore: "และอีก {count} รายการ",
importFromFiles: "นำเข้าจากไฟล์",
saveToFiles: "บันทึกไปยังไฟล์",
savedToFiles: "บันทึกไปยังไฟล์แล้ว",
adjustSettings: "ปรับการตั้งค่า",
startOver: "เริ่มใหม่ด้วยไฟล์ใหม่",
newFile: "ไฟล์ใหม่",
previewUnavailable: "ตัวอย่างจะพร้อมใช้งานหลังประมวลผลเสร็จ",
generatePreview: "สร้างตัวอย่าง",
previewFailed: "สร้างตัวอย่างไม่สำเร็จ",
backToTools: "กลับไปยังเครื่องมือ",
original: "ต้นฉบับ",
processed: "ประมวลผลแล้ว",
saved: "บันทึกแล้ว",
noChange: "ไม่มีการเปลี่ยนแปลง",
download: "ดาวน์โหลด",
settingsSaved: "บันทึกการตั้งค่าของคุณแล้ว",
tryAgain: "ลองอีกครั้ง",
tryDifferentFile: "ลองไฟล์อื่น",
batchPartialSuccess: "ประมวลผลสำเร็จ {success} จาก {total} รายการ ล้มเหลว {failed} รายการ",
dataResultsHint: "ผลลัพธ์แสดงด้านบน ใช้ปุ่มคัดลอกในแผงผลลัพธ์",
downloadAsFile: "ดาวน์โหลดเป็นไฟล์",
downloadAll: "ดาวน์โหลดทั้งหมด",
downloadFiles: "ดาวน์โหลด {count} ไฟล์",
audioDecodeUnsupported: "รูปแบบเสียงนี้ไม่สามารถแสดงตัวอย่างในเบราว์เซอร์ได้",
},
homePage: {
generatingPreview: "กำลังสร้างตัวอย่าง...",
loadingPreview: "กำลังโหลดตัวอย่าง...",
changeFile: "เปลี่ยนไฟล์",
quickActions: "การดำเนินการด่วน",
allTools: "เครื่องมือทั้งหมด",
searchPlaceholder: "ค้นหา {count} เครื่องมือ...",
recent: "ล่าสุด",
pinned: "ที่ปักหมุด",
popular: "ยอดนิยม",
browseByCategory: "เรียกดูตามหมวดหมู่",
gettingStarted: "เริ่มต้นใช้งาน",
noToolsMatch: "ไม่พบเครื่องมือที่ตรงกับ '{query}'",
clearSearch: "ล้างการค้นหา",
requestToolCta: "ขอ '{query}'",
requestToolBelowResults: "ไม่พบใช่ไหม ขอเครื่องมือ",
all: "ทั้งหมด",
documents: "PDF",
data: "ไฟล์",
pdf: "PDF",
files: "ไฟล์",
toolCount: "{count} เครื่องมือ",
heading: "เครื่องมือ SnapOtter",
},
fullscreenGrid: {
searchPlaceholder: "ค้นหาเครื่องมือ...",
hideDetails: "ซ่อนรายละเอียด",
showDetails: "แสดงรายละเอียด",
switchToSidebar: "สลับไปมุมมองแถบข้าง",
sidebarButton: "แถบข้าง",
noToolsFound: "ไม่พบเครื่องมือ",
tryDifferent: "ลองคำค้นหาอื่น",
},
editor: {
menu: {
file: {
label: "ไฟล์",
new: "ใหม่",
open: "เปิด",
save: "บันทึก",
exportAs: "ส่งออกเป็น...",
quickExportPng: "ส่งออกเร็ว PNG",
close: "ปิด",
},
edit: {
label: "แก้ไข",
undo: "เลิกทำ",
redo: "ทำซ้ำ",
cut: "ตัด",
copy: "คัดลอก",
copyMerged: "คัดลอกรวมเลเยอร์",
paste: "วาง",
pasteInPlace: "วางที่ตำแหน่งเดิม",
delete: "ลบ",
freeTransform: "แปลงอิสระ",
transform: {
label: "แปลง",
scale: "ปรับขนาด",
rotate: "หมุน",
skew: "เอียง",
flipHorizontal: "พลิกแนวนอน",
flipVertical: "พลิกแนวตั้ง",
},
},
image: {
label: "ภาพ",
imageSize: "ขนาดภาพ...",
canvasSize: "ขนาดแคนวาส...",
rotation: {
label: "หมุนภาพ",
cw90: "90° ตามเข็มนาฬิกา",
ccw90: "90° ทวนเข็มนาฬิกา",
r180: "180°",
flipHorizontal: "พลิกแนวนอน",
flipVertical: "พลิกแนวตั้ง",
},
trim: "ตัดขอบ",
adjustments: {
label: "การปรับแต่ง",
brightnessContrast: "ความสว่าง/คอนทราสต์",
hueSaturation: "เฉดสี/ความอิ่มตัว",
colorBalance: "สมดุลสี",
levels: "ระดับ",
curves: "เส้นโค้ง",
},
},
layer: {
label: "เลเยอร์",
newLayer: "เลเยอร์ใหม่",
duplicateLayer: "ทำซ้ำเลเยอร์",
deleteLayer: "ลบเลเยอร์",
arrange: {
label: "จัดลำดับ",
bringToFront: "นำไปข้างหน้าสุด",
bringForward: "นำไปข้างหน้า",
sendBackward: "ส่งไปข้างหลัง",
sendToBack: "ส่งไปข้างหลังสุด",
},
mergeDown: "รวมลง",
flattenImage: "รวมภาพทั้งหมด",
},
select: {
label: "เลือก",
all: "ทั้งหมด",
deselect: "ยกเลิกการเลือก",
inverse: "กลับด้าน",
colorRange: "ช่วงสี...",
},
filter: {
label: "ฟิลเตอร์",
blur: {
label: "เบลอ",
gaussian: "เบลอแบบเกาส์เซียน",
motion: "เบลอแบบเคลื่อนไหว",
radial: "เบลอแบบรัศมี",
surface: "เบลอแบบพื้นผิว",
},
sharpen: {
label: "เพิ่มความคมชัด",
sharpen: "เพิ่มความคมชัด",
unsharpMask: "อันชาร์ปมาสก์",
},
noise: {
label: "สัญญาณรบกวน",
addNoise: "เพิ่มสัญญาณรบกวน",
reduceNoise: "ลดสัญญาณรบกวน",
},
pixelate: {
label: "พิกเซล",
pixelate: "พิกเซล",
mosaic: "โมเสก",
},
stylize: {
label: "จัดสไตล์",
emboss: "นูน",
solarize: "โซลาไรซ์",
posterize: "โปสเตอร์ไรซ์",
},
grayscale: "ขาวเทา",
sepia: "ซีเปีย",
invert: "กลับสี",
},
view: {
label: "มุมมอง",
zoomIn: "ซูมเข้า",
zoomOut: "ซูมออก",
fitOnScreen: "พอดีหน้าจอ",
actualPixels: "พิกเซลจริง",
rulers: "ไม้บรรทัด",
grid: "กริด",
guides: "เส้นนำ",
snap: "สแนป",
panels: "แผง",
},
},
menuBar: {
backTitle: "กลับไป SnapOtter",
},
welcome: {
ariaLabel: "พื้นที่วางภาพ",
heading: "โปรแกรมแก้ไขภาพ",
dropDescription: "ลากภาพมาวางที่นี่เพื่อเริ่มต้น",
openImageButton: "เปิดภาพ",
newDocumentButton: "เอกสารใหม่",
pasteHint: "หรือวางจากคลิปบอร์ด (Ctrl+V)",
},
mobile: {
heading: "แนะนำให้ใช้คอมพิวเตอร์",
description:
"โปรแกรมแก้ไขภาพทำงานได้ดีที่สุดบนหน้าจอคอมพิวเตอร์ กรุณาเปลี่ยนไปใช้อุปกรณ์ที่มีหน้าจอใหญ่กว่าเพื่อประสบการณ์การแก้ไขเต็มรูปแบบ",
},
errors: {
serverDecodeFailed: "การถอดรหัสจากเซิร์ฟเวอร์ล้มเหลว",
},
shapes: {
shape: "รูปทรง",
fill: "เติมสี",
stroke: "เส้นขอบ",
strokeWidth: "ความกว้าง",
cornerRadius: "รัศมีมุม",
sides: "ด้าน",
points: "จุด",
dashStyle: "เส้นประ",
solid: "ทึบ",
dashed: "ขีดประ",
dotted: "จุดไข่ปลา",
none: "ไม่มี",
opacity: "ความทึบ",
rectangle: "สี่เหลี่ยม",
ellipse: "วงรี",
line: "เส้นตรง",
arrow: "ลูกศร",
polygon: "รูปหลายเหลี่ยม",
star: "ดาว",
},
},
settings: {
heading: "ตั้งค่า",
nav: {
general: "ทั่วไป",
systemSettings: "ตั้งค่าระบบ",
security: "ความปลอดภัย",
people: "สมาชิก",
teams: "ทีม",
roles: "บทบาท",
auditLog: "บันทึกการตรวจสอบ",
usage: "การใช้งาน",
apiKeys: "คีย์ API",
aiFeatures: "ฟีเจอร์ AI",
tools: "เครื่องมือ",
about: "เกี่ยวกับ",
},
general: {
heading: "ทั่วไป",
description: "การตั้งค่าผู้ใช้และการแสดงผล",
loading: "กำลังโหลด...",
logOut: "ออกจากระบบ",
defaultToolViewLabel: "มุมมองเครื่องมือเริ่มต้น",
defaultToolViewDescription: "วิธีแสดงเครื่องมือบนหน้าหลัก",
sidebarOption: "แถบข้าง",
fullscreenGridOption: "กริดเต็มจอ",
appVersionLabel: "เวอร์ชันแอป",
appVersionDescription: "เวอร์ชันปัจจุบันของ SnapOtter",
saveButton: "บันทึกการตั้งค่า",
saveSuccess: "บันทึกการตั้งค่าแล้ว",
saveFailed: "บันทึกการตั้งค่าล้มเหลว",
},
system: {
heading: "ตั้งค่าระบบ",
description: "การกำหนดค่าฝั่งเซิร์ฟเวอร์และข้อจำกัด",
fileUploadLimitLabel: "จำกัดการอัปโหลด (MB)",
fileUploadLimitDescription: "ขนาดไฟล์สูงสุดต่อการอัปโหลด",
defaultThemeLabel: "ธีมเริ่มต้น",
defaultThemeDescription: "ธีมที่ใช้สำหรับเซสชันใหม่",
lightOption: "สว่าง",
darkOption: "มืด",
systemOption: "ระบบ",
languageLabel: "ภาษา",
languageDescription: "ภาษาของอินเทอร์เฟซ",
loginAttemptLimitLabel: "จำกัดการเข้าสู่ระบบ",
loginAttemptLimitDescription: "จำนวนครั้งสูงสุดที่เข้าสู่ระบบล้มเหลวต่อนาทีก่อนล็อก",
fileManagementHeading: "การจัดการไฟล์",
maxFileAgeLabel: "อายุไฟล์สูงสุด (ชั่วโมง)",
maxFileAgeDescription: "ระยะเวลาเก็บไฟล์ที่ประมวลผลแล้วก่อนล้างอัตโนมัติ",
startupCleanupLabel: "ล้างตอนเริ่มต้น",
startupCleanupDescription: "ล้างไฟล์ชั่วคราวเก่าเมื่อเซิร์ฟเวอร์เริ่มทำงาน",
saveButton: "บันทึกการตั้งค่า",
saveSuccess: "บันทึกการตั้งค่าแล้ว",
saveFailed: "บันทึกการตั้งค่าล้มเหลว",
limitsAndResources: "ข้อจำกัดและทรัพยากร",
maxFileSize: "ขนาดไฟล์สูงสุด",
maxBatchSize: "ขนาดชุดสูงสุด",
concurrentJobs: "งานพร้อมกัน",
workerThreads: "เธรดทำงาน",
maxPipelineSteps: "ขั้นตอน Pipeline สูงสุด",
processingTimeout: "หมดเวลาประมวลผล",
rateLimitPerMin: "จำกัดอัตรา (คำขอ/นาที)",
unlimited: "ไม่จำกัด",
auto: "อัตโนมัติ",
envOverride: "กำหนดโดยตัวแปรสภาพแวดล้อม",
maxCanvasPixels: "พิกเซลแคนวาสสูงสุด",
maxSvgSize: "ขนาด SVG สูงสุด",
maxSplitGrid: "กริดแบ่งสูงสุด",
maxPdfPages: "จำนวนหน้า PDF สูงสุด",
sessionDuration: "ระยะเวลาเซสชัน",
supportBundleButton: "ดาวน์โหลดชุดข้อมูลสนับสนุน",
supportBundleDescription:
"ดาวน์โหลดไฟล์ ZIP วินิจฉัยที่มีการตั้งค่า บันทึก และข้อมูลงานที่ปกปิดข้อมูลอ่อนไหวแล้ว สำหรับการแก้ไขปัญหา",
supportBundleFailed: "ดาวน์โหลดชุดข้อมูลสนับสนุนไม่สำเร็จ",
},
privacy: {
title: "ความเป็นส่วนตัว",
description:
"การวิเคราะห์ผลิตภัณฑ์แบบไม่ระบุตัวตนช่วยพัฒนา SnapOtter ให้ดียิ่งขึ้น โดยเปิดใช้งานเป็นค่าเริ่มต้นและผู้ดูแลระบบเป็นผู้ตั้งค่าสำหรับทั้งอินสแตนซ์",
analyticsLabel: "การวิเคราะห์ผลิตภัณฑ์แบบไม่ระบุตัวตน",
analyticsDescription:
"แชร์ข้อมูลการใช้งานแบบไม่ระบุตัวตน (เครื่องมือที่ทำงาน ระยะเวลา รหัสข้อผิดพลาด) และรายงานข้อขัดข้อง ไม่มีที่อยู่ IP และไม่มีข้อมูลระบุตัวตนของบัญชี เราจะไม่เก็บชื่อไฟล์ เนื้อหาไฟล์ ผลลัพธ์ OCR ข้อมูลเมตาของรูปภาพ หรือข้อความในเอกสารของคุณเลย ปิดตัวเลือกนี้เพื่อหยุดทั้งหมด",
},
security: {
heading: "ความปลอดภัย",
description: "การตั้งค่ารหัสผ่านและการยืนยันตัวตน",
changePasswordHeading: "เปลี่ยนรหัสผ่าน",
currentPasswordPlaceholder: "รหัสผ่านปัจจุบัน",
newPasswordPlaceholder: "รหัสผ่านใหม่",
confirmPasswordPlaceholder: "ยืนยันรหัสผ่านใหม่",
passwordsMismatch: "รหัสผ่านไม่ตรงกัน",
passwordTooShort: "รหัสผ่านต้องมีอย่างน้อย 4 ตัวอักษร",
changeSuccess: "เปลี่ยนรหัสผ่านสำเร็จ",
changeFailed: "เปลี่ยนรหัสผ่านล้มเหลว",
currentPasswordIncorrect: "รหัสผ่านปัจจุบันไม่ถูกต้อง",
changePasswordButton: "เปลี่ยนรหัสผ่าน",
loginAttemptLimitNote: "สามารถกำหนดจำนวนครั้งจำกัดการเข้าสู่ระบบได้ในตั้งค่าระบบ",
adminHeading: "การตั้งค่าความปลอดภัยของผู้ดูแล",
adminDescription: "การตั้งค่านโยบายความปลอดภัยระดับองค์กร ใช้กับผู้ใช้ทุกคน",
sessionIdleTimeout: "หมดเวลาเซสชันเมื่อไม่ใช้งาน (นาที)",
sessionIdleTimeoutDesc: "ออกจากระบบอัตโนมัติเมื่อไม่มีการใช้งาน 0 = ปิดใช้งาน",
maxSessionsPerUser: "จำนวนเซสชันสูงสุดต่อผู้ใช้",
maxSessionsPerUserDesc: "จำกัดจำนวนเซสชันพร้อมกันต่อผู้ใช้ 0 = ไม่จำกัด",
mfaPolicy: "นโยบาย MFA",
mfaPolicyDesc: "กำหนดให้ผู้ใช้ใช้การยืนยันตัวตนหลายปัจจัย",
mfaPolicyOptional: "ไม่บังคับ",
mfaPolicyAdminsOnly: "บังคับสำหรับผู้ดูแลเท่านั้น",
mfaPolicyRequired: "บังคับสำหรับผู้ใช้ทุกคน",
ssoEnforcement: "บังคับใช้ SSO",
ssoEnforcementDesc: "กำหนดให้ผู้ใช้ทุกคนเข้าสู่ระบบผ่าน SSO ยกเว้นบัญชีฉุกเฉิน",
ssoBreakGlassUsername: "ชื่อผู้ใช้ผู้ดูแลฉุกเฉิน",
ssoBreakGlassUsernameDesc: "ผู้ดูแลรายนี้ยังสามารถเข้าสู่ระบบด้วยรหัสผ่านภายในได้เมื่อบังคับใช้ SSO",
passwordMinLength: "ความยาวรหัสผ่านขั้นต่ำ",
passwordMinLengthDesc: "จำนวนอักขระขั้นต่ำที่ต้องมีสำหรับรหัสผ่าน",
passwordRequireUppercase: "ต้องมีตัวพิมพ์ใหญ่",
passwordRequireUppercaseDesc: "ต้องมีตัวอักษรพิมพ์ใหญ่อย่างน้อยหนึ่งตัว",
passwordRequireNumber: "ต้องมีตัวเลข",
passwordRequireNumberDesc: "ต้องมีตัวเลขอย่างน้อยหนึ่งตัว",
passwordRequireSpecial: "ต้องมีอักขระพิเศษ",
passwordRequireSpecialDesc: "ต้องมีอักขระพิเศษอย่างน้อยหนึ่งตัว",
passwordPolicyHeading: "นโยบายรหัสผ่าน",
securitySettingsSaved: "บันทึกการตั้งค่าความปลอดภัยแล้ว",
securitySettingsFailed: "บันทึกการตั้งค่าความปลอดภัยไม่สำเร็จ",
},
people: {
heading: "สมาชิก",
description: "จัดการสมาชิกพื้นที่ทำงานและสิทธิ์ของพวกเขา",
userCount: "{count} ผู้ใช้",
userCountPlural: "{count} ผู้ใช้",
searchPlaceholder: "ค้นหาสมาชิก...",
addMembersButton: "เพิ่มสมาชิก",
newMemberHeading: "สมาชิกใหม่",
usernamePlaceholder: "ชื่อผู้ใช้",
passwordPlaceholder: "รหัสผ่าน",
roleUserOption: "ผู้ใช้",
roleEditorOption: "บรรณาธิการ",
roleAdminOption: "ผู้ดูแลระบบ",
roleUserDescription: "เข้าถึงเครื่องมือพื้นฐาน",
roleEditorDescription: "ไฟล์และ Pipeline ทั้งหมด",
roleAdminDescription: "เข้าถึงทั้งหมด",
noDescription: "ไม่มีคำอธิบาย",
defaultTeamOption: "ค่าเริ่มต้น",
createButton: "สร้าง",
cancelButton: "ยกเลิก",
createSuccess: "สร้างผู้ใช้สำเร็จ",
createFailed: "สร้างผู้ใช้ล้มเหลว",
userLimitReached: "ถึงจำนวนผู้ใช้สูงสุดแล้ว (สูงสุด {max})",
deleteConfirm: 'ลบผู้ใช้ "{username}"? การกระทำนี้ไม่สามารถเลิกทำได้',
deleteSuccess: 'ลบผู้ใช้ "{username}" แล้ว',
deleteFailed: "ลบผู้ใช้ล้มเหลว",
editHeading: "แก้ไข {username}",
updateSuccess: "อัปเดตผู้ใช้แล้ว",
updateFailed: "อัปเดตผู้ใช้ล้มเหลว",
cannotRemoveOwnAdmin: "ไม่สามารถลบบทบาทผู้ดูแลระบบของตัวเองได้",
resetPasswordHeading: "รีเซ็ตรหัสผ่านสำหรับ {username}",
newPasswordLabel: "รหัสผ่านใหม่ (อย่างน้อย 8 ตัวอักษร)",
resetPasswordButton: "รีเซ็ตรหัสผ่าน",
resetPasswordWarning: "การดำเนินการนี้จะยกเลิกเซสชันและคีย์ API ทั้งหมดของผู้ใช้นี้",
resetSuccess: "รีเซ็ตรหัสผ่านสำเร็จ",
resetFailed: "รีเซ็ตรหัสผ่านล้มเหลว",
tableHeaderUser: "ผู้ใช้",
tableHeaderRole: "บทบาท",
tableHeaderTeam: "ทีม",
noSearchResults: "ไม่มีสมาชิกตรงกับการค้นหา",
noUsersFound: "ไม่พบผู้ใช้",
authBadgeLocalOidc: "ภายใน + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "แก้ไขบทบาท / ทีม",
resetPasswordAction: "รีเซ็ตรหัสผ่าน",
deleteUserAction: "ลบผู้ใช้",
saveButton: "บันทึก",
copyPasswordButton: "คัดลอกรหัสผ่าน",
passwordCopied: "คัดลอกแล้ว!",
copyPasswordWarning: "คัดลอกรหัสผ่านนี้ตอนนี้ คุณจะไม่สามารถดูได้หลังจากสร้างผู้ใช้",
},
teams: {
heading: "ทีม",
description: "จัดระเบียบสมาชิกเป็นทีมเพื่อการจัดการที่ดีขึ้น",
createButton: "สร้างทีมใหม่",
newTeamHeading: "ทีมใหม่",
teamNamePlaceholder: "ชื่อทีม",
createSubmitButton: "สร้าง",
cancelButton: "ยกเลิก",
createSuccess: "สร้างทีมสำเร็จ",
createFailed: "สร้างทีมล้มเหลว",
duplicateTeamError: "มีทีมชื่อนี้อยู่แล้ว",
renameSuccess: "เปลี่ยนชื่อทีมแล้ว",
renameFailed: "เปลี่ยนชื่อทีมล้มเหลว",
deleteConfirm: 'ลบทีม "{name}"? สมาชิกจะถูกยกเลิกการมอบหมาย',
deleteSuccess: 'ลบทีม "{name}" แล้ว',
deleteFailed: "ลบทีมล้มเหลว",
cannotDeleteDefault: "ไม่สามารถลบทีมเริ่มต้นหรือทีมที่มีสมาชิก",
tableHeaderTeamName: "ชื่อทีม",
tableHeaderMembers: "สมาชิก",
emptyState: "ไม่พบทีม",
renameSaveButton: "บันทึก",
renameCancelButton: "ยกเลิก",
renameAction: "เปลี่ยนชื่อ",
deleteAction: "ลบ",
totalMembers: "สมาชิกทั้งหมด",
nameRequired: "ต้องระบุชื่อทีม",
nameTooLong: "ชื่อทีมต้องไม่เกิน 50 ตัวอักษร",
duplicateName: "มีทีมชื่อนี้อยู่แล้ว",
teamStorageQuota: "โควตาพื้นที่จัดเก็บ (MB)",
teamStorageQuotaDesc: "พื้นที่จัดเก็บสูงสุดสำหรับทีมนี้เป็น MB เว้นว่างไว้หากไม่จำกัด",
teamRetentionHours: "ระยะเวลาเก็บรักษา (ชั่วโมง)",
teamRetentionHoursDesc: "ระยะเวลาเก็บรักษาไฟล์ประมวลผลสำหรับทีมนี้ เว้นว่างไว้เพื่อใช้ค่าเริ่มต้น",
quotaSaved: "บันทึกการตั้งค่าทีมแล้ว",
},
roles: {
heading: "บทบาท",
description: "จัดการบทบาทและสิทธิ์ บทบาทในตัวไม่สามารถแก้ไขได้",
createButton: "สร้างบทบาทกำหนดเอง",
newRoleHeading: "บทบาทใหม่",
roleNamePlaceholder: "ชื่อบทบาท",
descriptionPlaceholder: "คำอธิบาย (ไม่บังคับ)",
permissionsLabel: "สิทธิ์",
createSubmitButton: "สร้าง",
cancelButton: "ยกเลิก",
createSuccess: "สร้างบทบาทสำเร็จ",
createFailed: "สร้างบทบาทล้มเหลว",
duplicateRoleError: "มีบทบาทชื่อนี้อยู่แล้ว",
editHeading: "แก้ไขบทบาท: {name}",
editSaveButton: "บันทึก",
editCancelButton: "ยกเลิก",
updateSuccess: "อัปเดตบทบาทแล้ว",
updateFailed: "อัปเดตบทบาทล้มเหลว",
deleteConfirm: 'ลบบทบาท "{name}"? ผู้ใช้ {count} คนจะต้องมอบหมายใหม่',
deleteConfirmSimple: 'ลบบทบาท "{name}"?',
deleteSuccess: 'ลบบทบาท "{name}" แล้ว',
deleteFailed: "ลบบทบาทล้มเหลว",
emptyState: "ไม่พบบทบาท",
builtInBadge: "ในตัว",
userCountBadge: "{count} ผู้ใช้",
editRoleTitle: "แก้ไขบทบาท",
deleteRoleTitle: "ลบบทบาท",
permGroup: {
tools: "เครื่องมือ",
files: "ไฟล์",
apiKeys: "คีย์ API",
pipelines: "Pipeline",
settings: "ตั้งค่า",
users: "ผู้ใช้",
teams: "ทีม",
system: "ระบบ",
},
},
auditLog: {
heading: "บันทึกการตรวจสอบ",
allActionsFilter: "ทุกการกระทำ",
emptyState: "ไม่มีรายการบันทึกการตรวจสอบ",
tableHeaderTime: "เวลา",
tableHeaderUser: "ผู้ใช้",
tableHeaderAction: "การกระทำ",
tableHeaderTarget: "เป้าหมาย",
paginationInfo: "หน้า {page} จาก {totalPages} ({total} รายการ)",
previousButton: "ก่อนหน้า",
nextButton: "ถัดไป",
justNow: "เมื่อกี้",
minutesAgo: "{mins} นาทีที่แล้ว",
hoursAgo: "{hrs} ชั่วโมงที่แล้ว",
daysAgo: "{days} วันที่แล้ว",
},
usage: {
heading: "การใช้งาน",
description: "สถิติการใช้งานจากงานและพื้นที่จัดเก็บไฟล์",
periodLabel: "ช่วงเวลา",
days7: "7 วัน",
days30: "30 วัน",
days90: "90 วัน",
jobsPerDayHeading: "งานต่อวัน",
topToolsHeading: "เครื่องมือยอดนิยม",
perUserHeading: "ปริมาณต่อผู้ใช้",
durationsHeading: "เปอร์เซ็นไทล์ระยะเวลา",
noData: "ไม่มีข้อมูลสำหรับช่วงเวลานี้",
dayColumn: "วัน",
totalColumn: "ทั้งหมด",
completedColumn: "สำเร็จ",
failedColumn: "ล้มเหลว",
toolColumn: "เครื่องมือ",
runsColumn: "ครั้ง",
userColumn: "ผู้ใช้",
bytesInColumn: "ไบต์เข้า",
poolColumn: "พูล",
p50Column: "p50",
p95Column: "p95",
storageHeading: "พื้นที่จัดเก็บไลบรารี",
storageFiles: "{count} ไฟล์",
unknownUser: "(ไม่ทราบ)",
storageByTeam: "พื้นที่จัดเก็บตามทีม",
teamColumn: "ทีม",
storageColumn: "พื้นที่จัดเก็บ",
usersColumn: "ผู้ใช้",
},
apiKeys: {
heading: "คีย์ API",
description: "จัดการคีย์ API สำหรับเข้าถึง SnapOtter แบบโปรแกรม",
keyNamePlaceholder: "ชื่อคีย์ (ไม่บังคับ)",
generateButton: "สร้างคีย์ API",
removeScopingLabel: "ลบการจำกัดสิทธิ์",
restrictPermissionsLabel: "จำกัดสิทธิ์ (ไม่บังคับ)",
expiresLabel: "หมดอายุ:",
clearButton: "ล้าง",
copyTitle: "คัดลอก",
keyWarning: "เก็บคีย์นี้ไว้อย่างปลอดภัย จะไม่แสดงอีก",
existingKeysHeading: "คีย์ที่มีอยู่",
createdPrefix: "สร้างเมื่อ {date}",
scopedPrefix: "ขอบเขต:",
expiresPrefix: "หมดอายุ {date}",
deleteKeyTitle: "ลบคีย์",
deleteConfirm: "ลบคีย์ API นี้? การเชื่อมต่อที่ใช้คีย์นี้จะหยุดทำงาน",
emptyState: "ยังไม่มีคีย์ API สร้างคีย์เพื่อเริ่มต้น",
},
tools: {
heading: "เครื่องมือ",
description: "เปิดหรือปิดเครื่องมือแต่ละตัว เครื่องมือที่ปิดจะถูกซ่อนจากผู้ใช้ทั้งหมด",
restartBanner: "ต้องรีสตาร์ทเพื่อให้การเปลี่ยนแปลงมีผล",
searchPlaceholder: "ค้นหาเครื่องมือ...",
noSearchResults: "ไม่มีเครื่องมือตรงกับการค้นหา",
loadFailedError: "โหลดการตั้งค่าเครื่องมือล้มเหลว ปิดการบันทึกเพื่อป้องกันข้อมูลสูญหาย",
saveButton: "บันทึกการตั้งค่าเครื่องมือ",
disabledCount: "ปิดการใช้งาน {count} เครื่องมือ",
},
experimental: {
label: "เปิดใช้เครื่องมือทดลอง",
description: "แสดงเครื่องมือที่ยังอยู่ระหว่างพัฒนา อาจไม่เสถียร",
},
fileManagement: {
title: "การจัดการไฟล์",
maxAge: "อายุไฟล์สูงสุด (ชั่วโมง)",
maxAgeDescription: "ระยะเวลาเก็บไฟล์ที่ประมวลผลแล้วก่อนล้างอัตโนมัติ",
startupCleanup: "ล้างตอนเริ่มต้น",
startupCleanupDescription: "ล้างไฟล์ชั่วคราวเก่าเมื่อเซิร์ฟเวอร์เริ่มทำงาน",
},
dataRetention: {
title: "การเก็บรักษาข้อมูล",
fileMaxAgeHours: "ระยะเวลาเก็บไฟล์ประมวลผล (ชั่วโมง)",
fileMaxAgeHoursDesc: "ระยะเวลาเก็บรักษาไฟล์ที่อัปโหลดและประมวลผล ค่าเริ่มต้น: 72 ชั่วโมง",
jobsRetentionDays: "ระยะเวลาเก็บบันทึกงาน (วัน)",
jobsRetentionDaysDesc: "ระยะเวลาเก็บรักษาข้อมูลงาน 0 = เก็บตลอด ค่าเริ่มต้น: 30 วัน",
auditRetentionDays: "ระยะเวลาเก็บบันทึกตรวจสอบ (วัน)",
auditRetentionDaysDesc: "ระยะเวลาเก็บรักษารายการบันทึกตรวจสอบ 0 = เก็บตลอด ค่าเริ่มต้น: เก็บตลอด",
},
aiFeatures: {
title: "ฟีเจอร์ AI",
description: "จัดการชุดโมเดล AI สำหรับการประมวลผลไฟล์ขั้นสูง",
installAll: "ติดตั้งทั้งหมด",
diskUsage: "การใช้พื้นที่ดิสก์: {size}",
sizeOnDisk: "{size} บนดิสก์",
installed: "ติดตั้งแล้ว",
notInstalled: "ยังไม่ได้ติดตั้ง",
queued: "อยู่ในคิว",
install: "ติดตั้ง",
repair: "ซ่อมแซม",
uninstall: "ถอนการติดตั้ง",
installing: "กำลังติดตั้ง...",
importBundle: "นำเข้าชุดข้อมูล",
importDescription: "อัปโหลดไฟล์ .tar.gz ที่ส่งออกจากการติดตั้งอื่น",
importButton: "นำเข้าจากไฟล์",
importing: "กำลังนำเข้า...",
importSuccess: "นำเข้าชุดข้อมูลสำเร็จ",
importError: "นำเข้าชุดข้อมูลไม่สำเร็จ: {error}",
resetTitle: "รีเซ็ตสภาพแวดล้อม AI",
resetDescription:
"ลบฟีเจอร์ AI ที่ติดตั้งไว้ทั้งหมดและโมเดลที่ดาวน์โหลดไว้ แล้วเริ่มต้นใหม่ทั้งหมด ใช้ตัวเลือกนี้หากเครื่องมือ AI ทำงานผิดปกติหลังการอัปเดต และการติดตั้งชุดข้อมูลใหม่ไม่ช่วยแก้ปัญหา",
resetButton: "รีเซ็ต",
resetConfirmMessage:
"การดำเนินการนี้จะลบฟีเจอร์และโมเดล AI ที่ติดตั้งไว้ทั้งหมด คุณจะต้องติดตั้งใหม่จาก Hugging Face การกระทำนี้ไม่สามารถย้อนกลับได้",
resetFailed: "รีเซ็ตล้มเหลว: {error}",
},
about: {
heading: "เกี่ยวกับ",
appName: "SnapOtter",
appDescription:
"ชุดเครื่องมือประมวลผลไฟล์แบบโฮสต์เองที่เน้นความเป็นส่วนตัวพร้อม 200+ เครื่องมือ แปลง บีบอัด แก้ไข ถอดเสียง OCR และทำงานอัตโนมัติกับภาพ วิดีโอ เสียง PDF และไฟล์โดยไม่ต้องส่งข้อมูลไปคลาวด์",
versionLabel: "เวอร์ชัน:",
linksHeading: "ลิงก์",
githubLink: "คลังเก็บโค้ด GitHub",
docsLink: "เอกสารประกอบ",
apiRefLink: "อ้างอิง API (Swagger)",
licenseLabel: "สัญญาอนุญาต:",
licenseDescription:
"SnapOtter เป็นซอฟต์แวร์โอเพนซอร์สภายใต้สัญญาอนุญาต GNU Affero General Public License v3 (AGPLv3)",
},
},
auth: {
login: "เข้าสู่ระบบ",
logout: "ออกจากระบบ",
username: "ชื่อผู้ใช้",
password: "รหัสผ่าน",
loginButton: "เข้าสู่ระบบ",
loggingIn: "กำลังเข้าสู่ระบบ...",
invalidCredentials: "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง",
connectionError: "ข้อผิดพลาดในการเชื่อมต่อ",
signInWith: "เข้าสู่ระบบด้วย {provider}",
signInWithSso: "เข้าสู่ระบบด้วย SSO",
or: "หรือ",
methodLocal: "ภายใน",
methodOidc: "OIDC",
methodBoth: "ภายใน + OIDC",
oidcAuthFailed: "การยืนยันตัวตนล้มเหลว กรุณาลองอีกครั้ง",
oidcProviderUnreachable: "ไม่สามารถเชื่อมต่อผู้ให้บริการยืนยันตัวตนได้ กรุณาลองอีกครั้งภายหลัง",
oidcSessionExpired: "เซสชันการเข้าสู่ระบบหมดอายุ กรุณาลองอีกครั้ง",
oidcUserNotAuthorized: "บัญชีของคุณไม่ได้รับอนุญาตให้เข้าถึงแอปพลิเคชันนี้ กรุณาติดต่อผู้ดูแลระบบ",
oidcUserLimitReached: "ถึงจำนวนผู้ใช้สูงสุดแล้ว กรุณาติดต่อผู้ดูแลระบบ",
oidcGenericError: "ข้อผิดพลาดในการยืนยันตัวตน กรุณาลองอีกครั้ง",
samlAuthFailed: "การยืนยันตัวตน SAML ล้มเหลว กรุณาลองอีกครั้ง",
samlUserNotAuthorized: "บัญชีของคุณไม่ได้รับอนุญาตให้เข้าถึงแอปพลิเคชันนี้ กรุณาติดต่อผู้ดูแลระบบ",
samlUserLimitReached: "ถึงจำนวนผู้ใช้สูงสุดแล้ว กรุณาติดต่อผู้ดูแลระบบ",
ssoEnforcedLocalRestricted: "การเข้าสู่ระบบภายในจำกัดเฉพาะผู้ดูแลที่ได้รับอนุญาตเท่านั้น",
mfaRequired: "ป้อนรหัสยืนยันตัวตนของคุณ",
mfaRecoveryHint: "คุณสามารถใช้รหัสกู้คืนได้เช่นกัน",
verify: "ยืนยัน",
verifying: "กำลังยืนยัน...",
mfaInvalidCode: "รหัสไม่ถูกต้อง กรุณาลองอีกครั้ง",
mfaEnrollmentRequired: "องค์กรของคุณกำหนดให้ใช้การยืนยันตัวตนหลายปัจจัย กรุณาตั้งค่า MFA ในการตั้งค่าบัญชี",
methodSaml: "SAML",
passwordManagedByProvider: "การเปลี่ยนรหัสผ่านจัดการโดยผู้ให้บริการยืนยันตัวตนของคุณ",
enterUsername: "กรอกชื่อผู้ใช้",
enterPassword: "กรอกรหัสผ่านของคุณ",
heroTitle: "ไฟล์ของคุณ เป็นของคุณ",
heroSubtitle: "เครื่องมือทุกอย่างที่คุณต้องการ",
rotatingPhrases: [
"ไม่ต้องสมัครสมาชิก ไม่ต้องสร้างบัญชี",
"ไม่อัปโหลดขึ้นคลาวด์ ตลอดไป",
"ประมวลผล 100% บนเครื่องของคุณ",
"ฟรีตลอดกาล",
"ไม่จำกัด ไม่มีเพดานซ่อน",
"ใช้งานออฟไลน์ได้เต็มที่",
"ประมวลผลเป็นชุดไม่จำกัด",
"200+ เครื่องมือ",
"15 โมเดล AI บนฮาร์ดแวร์ของคุณ",
"เร็วสายฟ้าแลบ สร้างบน Sharp",
"พร้อมใช้ในเครือข่ายปิด",
"แค่ Docker container เดียว",
"โอเพนซอร์ส ตลอดไป",
"ทุกพิกเซลอยู่บนเครื่องของคุณ",
"เซิร์ฟเวอร์คุณ กฎคุณ",
"ติดตั้งด้วย 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: "ไม่ใช่ไฟล์ Pipeline SnapOtter ที่ถูกต้อง",
newerVersion: "Pipeline นี้สร้างด้วย SnapOtter เวอร์ชันใหม่กว่า",
missingName: "ไฟล์ Pipeline ไม่มีชื่อ",
noSteps: "ไฟล์ Pipeline ไม่มีขั้นตอน",
importFailed: "นำเข้าล้มเหลว",
couldNotRead: "ไม่สามารถอ่านไฟล์ Pipeline",
fileCount: "{count} ไฟล์",
fileCountPlural: "{count} ไฟล์",
importFromLibrary: "นำเข้าจากไลบรารี",
addButton: "+ เพิ่ม",
libraryButton: "ไลบรารี",
clearButton: "ล้าง",
processingFailed: "การประมวลผลล้มเหลวสำหรับไฟล์นี้",
processingMultiple: "กำลังประมวลผล {count} ไฟล์...",
processingPipeline: "กำลังประมวลผล Pipeline...",
processButton: "ประมวลผล",
processButtonMultiple: "ประมวลผล ({count})",
processAllButton: "ประมวลผลทั้งหมด ({count})",
addTool: "เพิ่มเครื่องมือ",
toolPalette: "จานเครื่องมือ",
clickToAdd: "คลิกเพื่อเพิ่มใน Pipeline",
savedLabel: "บันทึกแล้ว",
templatesLabel: "เทมเพลต",
importButton: "นำเข้า",
noSavedPipelines: "ไม่มี Pipeline ที่บันทึก",
stepCount: "({count} ขั้นตอน)",
stepCountPlural: "({count} ขั้นตอน)",
exportPipeline: "ส่งออก Pipeline",
deletePipeline: "ลบ Pipeline",
moreCount: "+{count} อื่นๆ",
pipelineBuilder: "ตัวสร้าง Pipeline",
addToolsPrompt: "เพิ่มเครื่องมือจากจานเครื่องมือเพื่อเริ่มต้น",
stepsConfigured: "กำหนดค่าแล้ว {count} ขั้นตอน",
stepsConfiguredPlural: "กำหนดค่าแล้ว {count} ขั้นตอน",
noFilesLoaded: "ยังไม่ได้โหลดไฟล์",
downloadZip: "ดาวน์โหลด ZIP",
saveButton: "บันทึก",
pipelineNamePlaceholder: "ชื่อ Pipeline",
descriptionPlaceholder: "คำอธิบาย",
savingIndicator: "...",
cancelButton: "ยกเลิก",
preview: "ตัวอย่าง",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageCounter: "{current} / {total}",
imageArea: "พื้นที่แสดงตัวอย่าง",
templateSocialMedia: "พร้อมสำหรับสื่อสังคม",
templatePrivacyClean: "ล้างข้อมูลความเป็นส่วนตัว",
templateWebOptimization: "เพิ่มประสิทธิภาพเว็บ",
templateProfilePicture: "รูปโปรไฟล์",
templateWatermarkBatch: "ลายน้ำเป็นชุด",
createNew: "สร้างการทำงานอัตโนมัติใหม่",
savedAutomations: "การทำงานอัตโนมัติที่บันทึก",
templates: "เทมเพลต",
addStep: "เพิ่มขั้นตอน",
removeStep: "ลบ",
moveUp: "เลื่อนขึ้น",
moveDown: "เลื่อนลง",
savePipeline: "บันทึก Pipeline",
runPipeline: "ประมวลผล",
pipelineName: "ชื่อ Pipeline",
pipelineDescription: "คำอธิบาย (ไม่บังคับ)",
noStepsPrompt: "เพิ่มขั้นตอนเพื่อสร้างการทำงานอัตโนมัติ",
noStepsHeading: "ยังไม่มีขั้นตอน",
searchToolsPlaceholder: "ค้นหาเครื่องมือ...",
step: "ขั้นตอน",
modalityWarning: "ประเภทไม่ตรงกัน",
modalityWarningTooltip: "ขั้นตอนนี้คาดหวัง {expected} แต่ได้รับ {received} อาจล้มเหลวเมื่อคุณเรียกใช้ไปป์ไลน์",
},
nav: {
tools: "เครื่องมือ",
reader: "อ่าน",
automate: "อัตโนมัติ",
editor: "แก้ไข",
files: "ไฟล์",
help: "ช่วยเหลือ",
settings: "ตั้งค่า",
grid: "กริด",
},
files: {
myFiles: "ไฟล์ของฉัน",
recentTab: "ล่าสุด",
uploadTab: "อัปโหลดไฟล์",
fileDetailsAriaLabel: "รายละเอียดไฟล์",
fileDetailsHeading: "รายละเอียดไฟล์",
searchPlaceholder: "ค้นหาไฟล์...",
selectedCount: "เลือกแล้ว {count} รายการ",
fileCount: "{count} ไฟล์",
fileCountSingular: "{count} ไฟล์",
noFilesFound: "ไม่พบไฟล์",
selectFilePrompt: "เลือกไฟล์เพื่อดูรายละเอียด",
openFile: "เปิดไฟล์",
selectFile: "เลือกไฟล์",
openInPipeline: "เปิดในไปป์ไลน์",
dropFilesHere: "วางไฟล์ที่นี่",
orClickToSelect: "หรือคลิกเพื่อเลือกไฟล์",
name: "ชื่อ",
format: "รูปแบบ",
size: "ขนาด",
dimensions: "ขนาดภาพ",
version: "เวอร์ชัน",
toolsUsed: "เครื่องมือที่ใช้",
none: "ไม่มี",
delete: "ลบ",
pipeline: "Pipeline",
download: "ดาวน์โหลด",
},
dropzone: {
unsupportedFileType: "ไฟล์ประเภทนี้ไม่รองรับโดยเครื่องมือนี้",
urlFetchFailed: "ไม่สามารถดึงภาพจาก URL",
ariaLabel: "พื้นที่วางไฟล์",
dropPrompt: "ลากภาพมาวางที่นี่",
browseOrPaste: "ใช้ปุ่มอัปโหลดหรือวางจากคลิปบอร์ด",
uploadButton: "อัปโหลด",
defaultFormats: "รูปภาพ วิดีโอ เสียง PDF ไฟล์ และรูปแบบอื่นกว่า 150 รูปแบบ",
orSeparator: "หรือ",
urlPlaceholder: "วาง URL ภาพ...",
urlLoadingIndicator: "...",
addUrlButton: "เพิ่ม",
importMultipleUrls: "นำเข้าหลาย URL...",
filesSelected: "เลือกแล้ว {count} ไฟล์",
dropToAdd: "วางเพื่อเพิ่มไฟล์",
dropToReplace: "วางเพื่อแทนที่ไฟล์",
},
reviewPanel: {
processedResultAlt: "ผลลัพธ์ที่ประมวลผลแล้ว",
sizeLabel: "ขนาด: {size}",
typeLabel: "ประเภท: {type}",
processedLabel: "ประมวลผลแล้ว: {time}",
undoButton: "เลิกทำ",
downloadButton: "ดาวน์โหลด",
openInEditor: "เปิดในโปรแกรมแก้ไข",
reviewHeading: "ตรวจทาน",
continueEditing: "แก้ไขต่อ",
},
features: {
notEnabledTitle: "ฟีเจอร์ยังไม่ได้เปิดใช้",
notEnabledDescription: "ฟีเจอร์นี้ยังไม่ได้เปิดใช้ กรุณาขอให้ผู้ดูแลระบบเปิดในการตั้งค่า",
requiresDownload: "ฟีเจอร์นี้ต้องดาวน์โหลดเพิ่มเติม (~{size})",
retryButton: "ลองอีกครั้ง",
queued: "อยู่ในคิวรอติดตั้ง...",
enableButton: "เปิดใช้ {name}",
repairRequired: "ต้องซ่อมแซม",
repairDescription: "ไฟล์โมเดลบางไฟล์หายไปหรือเสียหาย การซ่อมแซมจะดาวน์โหลดใหม่",
repairButton: "ซ่อมแซม {name}",
lessThanMinute: "เหลือไม่ถึงนาที",
oneMinuteLeft: "เหลือประมาณ 1 นาที",
minutesLeft: "เหลือประมาณ {mins} นาที",
progressMessages: [
"อีกนิดเดียว... น่าจะนะ...",
"ของดีต้องรอหน่อย...",
"ยังเร็วกว่ารอข้าวสุกอีก...",
"ความอดทนของคุณน่าชื่นชมจริงๆ...",
"ทำงานหนักกว่าที่เห็นนะ...",
"ตรงนี้แหละที่ตื่นเต้นที่สุด เชื่อสิ...",
"กำลังจัดการเรื่องสำคัญเบื้องหลัง...",
"ถ้าคุณอ่านข้อความนี้ แปลว่ากำลังทำงานอยู่...",
"กำลังเตรียมสิ่งดีๆ...",
"คุ้มค่ากับทุกวินาที สัญญา...",
"ความระทึกเป็นส่วนหนึ่งของประสบการณ์...",
"กำลังสอนคอมพิวเตอร์ท่าใหม่...",
"กำลังเตรียมพลังพิเศษให้คุณ...",
"ไฟล์ของคุณจะขอบคุณทีหลัง...",
"กำลังโหลด... แบบเก๋ๆ...",
"ตอนนี้ชงกาแฟสักแก้วก็ดีนะ...",
"กรุงโรมก็ไม่ได้สร้างเสร็จในวันเดียว...",
"ชู่... อัจฉริยะกำลังทำงาน...",
"กำลังทำให้โปรเจกต์อิจฉาสิ่งที่จะมาถึง...",
"กำลังรวมทีมในฝัน...",
"กำลังแกะห่อความเจ๋ง...",
"คิดจะเริ่มเกือบเสร็จแล้ว... ล้อเล่น...",
"พลิกโผ: จริงๆ กำลังทำงานอยู่นะ...",
"กำลังอุ่นเครื่องยนต์ความคิดสร้างสรรค์...",
"จินตนาการกำลังโหลด...",
"ไม่ใช่สกรีนเซฟเวอร์นะ สัญญา...",
"งานศิลปะชั้นยอดต้องใช้เวลาติดตั้ง...",
"ตัวคุณในอนาคตจะขอบคุณ...",
"กำลังดึงไฟล์ฉลาดๆ มา...",
"อดใจอีกนิด สิ่งดีที่สุดกำลังจะมา...",
],
},
help: {
heading: "ช่วยเหลือ",
gettingStarted: {
heading: "เริ่มต้นใช้งาน",
description:
"เลือกเครื่องมือจากแถบข้างหรือค้นหา อัปโหลดไฟล์โดยลากมาวางบนหน้าเว็บหรือคลิกพื้นที่อัปโหลด ปรับการตั้งค่าแล้วดาวน์โหลดผลลัพธ์",
},
keyboardShortcuts: {
heading: "ปุ่มลัด",
focusSearchBar: "โฟกัสแถบค้นหา",
goToTools: "ไปที่เครื่องมือ",
toggleTheme: "สลับธีม",
goToResize: "ไปที่ปรับขนาด",
goToCrop: "ไปที่ครอป",
goToCompress: "ไปที่บีบอัด",
goToConvert: "ไปที่แปลงไฟล์",
goToRemoveBackground: "ไปที่ลบพื้นหลัง",
goToWatermarkText: "ไปที่ลายน้ำข้อความ",
goToStripMetadata: "ไปที่ลบข้อมูลเมตา",
goToImageInfo: "ไปที่ข้อมูลภาพ",
processFile: "ประมวลผลไฟล์",
downloadResult: "ดาวน์โหลดผลลัพธ์",
},
resources: {
heading: "แหล่งข้อมูล",
githubLink: "คลังเก็บโค้ด GitHub",
reportIssueLink: "รายงานปัญหา",
docsLink: "เอกสารประกอบ",
apiRefLink: "อ้างอิง API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "เกิดข้อผิดพลาด",
offline: "คุณออฟไลน์อยู่",
reconnecting: "กำลังเชื่อมต่อเซิร์ฟเวอร์อีกครั้ง...",
connected: "เชื่อมต่อแล้ว",
processingFailed: "การประมวลผลล้มเหลวสำหรับไฟล์นี้",
timeout: "คำขอหมดเวลา เซิร์ฟเวอร์อาจทำงานหนัก กรุณาลองอีกครั้ง",
networkError: "ข้อผิดพลาดเครือข่าย ตรวจสอบการเชื่อมต่อของคุณ",
invalidCredentials: "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง",
connectionError: "ข้อผิดพลาดในการเชื่อมต่อ",
},
sidebar: {
sponsor: "ให้ใช้ฟรีต่อไป",
tools: "เครื่องมือ",
grid: "กริด",
automate: "อัตโนมัติ",
editor: "แก้ไข",
files: "ไฟล์",
help: "ช่วยเหลือ",
settings: "ตั้งค่า",
},
toolCard: {
pin: "ปักหมุด",
unpin: "เลิกปักหมุด",
},
appLayout: {
mobileNavTools: "เครื่องมือ",
mobileNavAutomate: "อัตโนมัติ",
mobileNavEditor: "แก้ไข",
mobileNavFiles: "ไฟล์",
mobileNavSettings: "ตั้งค่า",
},
a11y: {
sponsorLink: "สนับสนุน SnapOtter บน GitHub Sponsors",
skipToContent: "ข้ามไปยังเนื้อหาหลัก",
openSidebar: "เปิดแถบด้านข้าง",
closeSidebar: "ปิดแถบด้านข้าง",
closeSettings: "ปิดการตั้งค่า",
closeHelp: "ปิดความช่วยเหลือ",
closeDialog: "ปิดกล่องโต้ตอบ",
zoomIn: "ซูมเข้า",
zoomOut: "ซูมออก",
fitToView: "พอดีกับหน้าจอ",
actualSize: "ขนาดจริง",
pan: "เลื่อน",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageArea: "พื้นที่แสดงตัวอย่าง",
imageViewer: "ตัวแสดงไฟล์",
fileDropZone: "พื้นที่วางไฟล์",
imageDropZone: "โซนวางไฟล์",
beforeAfterSlider: "ตัวเลื่อนเปรียบเทียบก่อน/หลัง",
imageControls: "การควบคุมการแสดงตัวอย่าง",
zoomControls: "ตัวควบคุมการซูม",
dragToReorder: "ลากเพื่อจัดเรียงใหม่",
whiteBackground: "พื้นหลังสีขาว",
blackBackground: "พื้นหลังสีดำ",
expandPanel: "ขยายแผง",
collapsePanel: "ยุบแผง",
swapDimensions: "สลับขนาด",
applyCrop: "ใช้การครอป",
cancelCrop: "ยกเลิกการครอป",
fontFamily: "แบบอักษร",
textColor: "สีข้อความ",
flipHorizontal: "พลิกแนวนอน",
flipVertical: "พลิกแนวตั้ง",
hexColorValue: "ค่าสี HEX",
backgroundColor: "สีพื้นหลัง",
foregroundColor: "สีพื้นหน้า",
swapColors: "สลับสีพื้นหน้าและพื้นหลัง",
resetColors: "รีเซ็ตเป็นขาวดำเริ่มต้น",
foregroundHex: "ค่าสี HEX ของพื้นหน้า",
undo: "เลิกทำ",
redo: "ทำซ้ำ",
layers: "เลเยอร์",
addLayer: "เพิ่มเลเยอร์",
deleteLayer: "ลบเลเยอร์",
cancelOperation: "ยกเลิกการดำเนินการ",
fill: "เติมสี",
fileDetails: "รายละเอียดไฟล์",
language: "ภาษา",
selected: "เลือกแล้ว",
deleteKey: "ลบคีย์",
editRole: "แก้ไขบทบาท",
deleteRole: "ลบบทบาท",
notInstalled: "ยังไม่ได้ติดตั้ง",
queued: "อยู่ในคิวรอติดตั้ง",
installing: "กำลังติดตั้ง",
imageNOfTotal: "รูปภาพที่ {n} จาก {total}",
processingComplete: "ประมวลผลรูปภาพสำเร็จ",
processingFailed: "ประมวลผลล้มเหลว",
settingsDialog: "การตั้งค่า",
helpDialog: "ความช่วยเหลือ",
navigationMenu: "เมนูนำทาง",
homeLink: "หน้าแรก SnapOtter",
},
pipelineTemplates: {
"web-optimize": {
name: "ปรับให้เหมาะกับเว็บ",
description: "ปรับขนาด แปลงเป็น WebP และบีบอัดภาพเพื่อให้โหลดบนเว็บได้รวดเร็ว",
},
"email-friendly": {
name: "เหมาะกับอีเมล",
description: "ย่อภาพให้เล็กพอที่จะแนบไปกับอีเมลได้",
},
"privacy-scrub": {
name: "ล้างข้อมูลความเป็นส่วนตัว",
description: "ลบ EXIF, GPS และข้อมูลเมตาอื่น ๆ แล้วบีบอัด",
},
"social-square": {
name: "สี่เหลี่ยมจัตุรัสโซเชียล",
description: "ครอปเป็นสี่เหลี่ยมจัตุรัส 1:1 และบีบอัดสำหรับโพสต์โซเชียล",
},
"watermark-batch": {
name: "ลายน้ำเป็นชุด",
description: "ประทับลายน้ำข้อความลงบนภาพ แล้วบีบอัด",
},
"shrink-pdf-email": {
name: "ย่อ PDF สำหรับอีเมล",
description: "ปรับให้แบนและบีบอัด PDF อย่างหนักเพื่อให้อยู่ในขีดจำกัดของอีเมล",
},
"podcast-polish": {
name: "ขัดเกลาพอดแคสต์",
description: "ลบช่วงเงียบ ปรับความดังให้สม่ำเสมอ และเพิ่มเสียงเฟดให้กับการบันทึก",
},
"cut-out-subject": {
name: "ตัดวัตถุออกมา",
description: "ลบพื้นหลังด้วย AI และบีบอัดภาพที่ตัดออกมาแบบโปร่งใส",
},
"restore-old-photo": {
name: "ฟื้นฟูภาพถ่ายเก่า",
description: "ซ่อมแซม ลงสี และขยายภาพถ่ายเก่าหรือที่เสียหายด้วย AI",
},
},
} as const;