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

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

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

4079 lines
160 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const vi: TranslationKeys = {
migrationBanner: {
successTitle: "Đã nhập dữ liệu SnapOtter 1.x.",
successBody: "Đã chuyển {users} người dùng và {files} tệp đã lưu từ phiên bản trước của bạn.",
warningTitle: "Đã tìm thấy cơ sở dữ liệu 1.x nhưng chưa nhập.",
warningBody:
"Phiên bản này đã có dữ liệu nên cơ sở dữ liệu 1.x của bạn chưa được nhập. Việc nhập yêu cầu một phiên bản trống. Xem hướng dẫn nâng cấp.",
dismiss: "Đóng",
},
common: {
upload: "Tải lên từ máy tính",
process: "Xử lý",
download: "Tải xuống",
cancel: "Hủy",
save: "Lưu",
delete: "Xóa",
settings: "Cài đặt",
search: "Tìm kiếm công cụ...",
dropFiles: "Kéo thả tệp vào đây hoặc nhấn nút tải lên",
loading: "Đang tải...",
saving: "Đang lưu...",
error: "Đã xảy ra lỗi",
confirm: "Xác nhận",
close: "Đóng",
back: "Quay lại",
next: "Tiếp theo",
clear: "Xóa",
copy: "Sao chép",
copied: "Đã sao chép!",
noResults: "Không tìm thấy kết quả",
showLess: "Thu gọn",
showMore: "Hiển thị thêm {count}",
experimental: "Thử nghiệm",
enabled: "Đã bật",
disabled: "Đã tắt",
rename: "Đổi tên",
edit: "Chỉnh sửa",
actions: "Thao tác",
create: "Tạo mới",
or: "hoặc",
goHome: "Về trang chủ",
somethingWentWrong: "Đã xảy ra lỗi",
unexpectedError: "Đã xảy ra lỗi không mong muốn.",
retry: "Thử lại",
privacyPolicy: "Chính sách bảo mật",
pageNotFound: "Không tìm thấy trang",
pageNotFoundDescription: "Trang bạn đang tìm không tồn tại hoặc đã được di chuyển.",
},
feedback: {
navLabel: "Chia sẻ phản hồi",
navButtonLabel: "Phản hồi",
dialogTitle: "Chia sẻ phản hồi",
toolDialogTitle: "Công cụ này hoạt động thế nào?",
failedDialogTitle: "Báo cáo sự cố công cụ",
adminDialogTitle: "Quá trình cài đặt thế nào?",
closeLabel: "Đóng hộp thoại phản hồi",
privacyNote:
"Phản hồi chỉ được gửi khi bạn gửi đi. SnapOtter không đính kèm tệp, nội dung tệp, tên tệp hay kết quả riêng tư của bạn.",
typeLabel: "Loại phản hồi",
sentimentLabel: "Đánh giá nhanh",
messageLabel: "Phản hồi",
messagePlaceholder:
"Cho chúng tôi biết điều gì hiệu quả, điều gì gặp lỗi, hoặc điều gì sẽ giúp SnapOtter tốt hơn.",
improveFirstLabel: "Chúng tôi nên cải thiện điều gì trước?",
improveFirstPlaceholder:
"Cho chúng tôi biết điều gì khiến việc cài đặt khó khăn hơn mức cần thiết.",
contactOkLabel: "Bạn có thể liên hệ với tôi về phản hồi này.",
emailPlaceholder: "Email (tùy chọn)",
namePlaceholder: "Tên (tùy chọn)",
companyPlaceholder: "Công ty hoặc tổ chức (tùy chọn)",
submit: "Gửi phản hồi",
submitting: "Đang gửi...",
submitFailed: "Không thể gửi phản hồi. Vui lòng thử lại.",
searchMissTitle: "Yêu cầu một công cụ",
searchMissContext: "Bạn đã tìm: {query}",
searchMissDiscussionsFallback:
"Chúng tôi không ghi lại được. Mở một yêu cầu trong Discussions.",
offlineDescription:
"Bản cài đặt này đã tắt phân tích, nên phản hồi không được ghi lại ở đây. Bạn vẫn có thể liên hệ trực tiếp với nhóm SnapOtter.",
offlinePublicNote: "Issue trên GitHub là công khai.",
offlineGithubButton: "Mở một issue trên GitHub",
offlineEmailButton: "Gửi email cho chúng tôi",
thanksTitle: "Cảm ơn phản hồi của bạn.",
thanksDescription:
"Điều này giúp chúng tôi cải thiện SnapOtter mà không thu thập tệp hay nội dung riêng tư.",
quickThanks: "Cảm ơn đã cho chúng tôi biết.",
reportIssue: "Báo cáo sự cố",
toolPromptTitle: "Công cụ này hoạt động thế nào?",
toolPromptDescription: "Một phản hồi nhanh giúp chúng tôi cải thiện SnapOtter.",
dismissPrompt: "Bỏ qua lời nhắc phản hồi",
workedWell: "Hoạt động tốt",
dontAskAgain: "Đừng hỏi lại",
shareFeedback: "Chia sẻ phản hồi",
remindLater: "Nhắc tôi sau",
adminCardTitle: "Quá trình cài đặt thế nào?",
adminCardDescription:
"Một ghi chú nhanh từ quản trị viên giúp chúng tôi cải thiện Docker, cài đặt từ mã nguồn và tài liệu.",
installMethodLabel: "Phương thức cài đặt",
frictionAreaLabel: "Phần cài đặt khó nhất",
importantAreasLabel: "Những phần quan trọng nhất",
sentiments: {
great: "Tuyệt vời",
okay: "Ổn",
issue: "Gặp sự cố",
missing: "Thiếu gì đó",
bug: "Lỗi",
idea: "Ý tưởng",
other: "Khác",
},
types: {
bug: "Lỗi",
feature_request: "Yêu cầu tính năng",
confusing_ux: "Trải nghiệm khó hiểu",
performance: "Hiệu năng",
other: "Khác",
},
installMethods: {
docker: "Docker",
docker_compose: "Docker Compose",
source: "Dựng từ mã nguồn",
cloud: "Đám mây/demo",
other: "Khác",
},
usageTypes: {
personal: "Chỉ mình tôi",
team_internal: "Nhóm nhỏ",
business_workflow: "Công ty hoặc tổ chức",
education: "Giáo dục",
evaluating: "Đang đánh giá",
},
frictionAreas: {
smooth: "Không có gì, cài đặt suôn sẻ",
docker: "Cài đặt Docker/container",
environment_variables: "Biến môi trường",
auth: "Xác thực/SSO",
storage: "Lưu trữ/tải lên",
workers: "Worker/hàng đợi",
ai_tools: "Công cụ AI",
docs: "Tài liệu",
performance: "Hiệu năng/tài nguyên",
other: "Khác",
},
importantAreas: {
images: "Hình ảnh",
pdf_docs: "PDF/tài liệu",
video_audio: "Video/âm thanh",
batch_workflows: "Quy trình hàng loạt",
ai_tools: "Công cụ AI",
},
},
onboarding: {
usageSurveyTitle: "Bạn đang sử dụng SnapOtter như thế nào?",
usageSurveyToolsLabel: "Điều gì quan trọng nhất với bạn?",
pickAnyHint: "(chọn bao nhiêu tùy thích)",
continueLabel: "Tiếp tục",
},
categories: {
essentials: "Cơ bản",
adjustments: "Điều chỉnh",
enhance: "Nâng cao & AI",
watermark: "Hình mờ & Lớp phủ",
layout: "Bố cục & Kết hợp",
utilities: "Tiện ích",
optimization: "Tối ưu hóa",
format: "Định dạng & Chuyển đổi",
"video-edit": "Video",
"video-convert": "Chuyển đổi",
"video-effects": "Hiệu ứng & Ghép",
"video-subtitles": "Phụ đề",
"video-metadata": "Siêu dữ liệu",
"audio-edit": "Chỉnh sửa",
"audio-convert": "Chuyển đổi",
"audio-effects": "Hiệu ứng & Ghép",
"audio-metadata": "Siêu dữ liệu",
"pdf-organize": "Sắp xếp",
"pdf-edit": "Chỉnh sửa & Chú thích",
"pdf-security": "Bảo mật",
"pdf-optimize": "Tối ưu hóa",
"doc-convert": "Chuyển đổi",
data: "Tệp",
archives: "Lưu trữ",
},
modalities: {
image: "Hình ảnh",
video: "Video",
audio: "Âm thanh",
documentsAndFiles: "PDF & Tệp",
},
tools: {
// BEGIN conversion-presets (generated by scripts/generate-conversion-i18n.mjs)
"jpg-to-png": {
name: "JPG sang PNG",
description: "Chuyển đổi JPG sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-jpg": {
name: "PNG sang JPG",
description: "Chuyển đổi PNG sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-webp": {
name: "JPG sang WebP",
description: "Chuyển đổi JPG sang WebP trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-webp": {
name: "PNG sang WebP",
description: "Chuyển đổi PNG sang WebP trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webp-to-jpg": {
name: "WebP sang JPG",
description: "Chuyển đổi WebP sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webp-to-png": {
name: "WebP sang PNG",
description: "Chuyển đổi WebP sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-avif": {
name: "JPG sang AVIF",
description: "Chuyển đổi JPG sang AVIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-avif": {
name: "PNG sang AVIF",
description: "Chuyển đổi PNG sang AVIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webp-to-avif": {
name: "WebP sang AVIF",
description: "Chuyển đổi WebP sang AVIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"heic-to-jpg": {
name: "HEIC sang JPG",
description: "Chuyển đổi HEIC sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"heic-to-png": {
name: "HEIC sang PNG",
description: "Chuyển đổi HEIC sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"heic-to-avif": {
name: "HEIC sang AVIF",
description: "Chuyển đổi HEIC sang AVIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-gif": {
name: "JPG sang GIF",
description: "Chuyển đổi JPG sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-gif": {
name: "PNG sang GIF",
description: "Chuyển đổi PNG sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-jpg": {
name: "GIF sang JPG",
description: "Chuyển đổi GIF sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-png": {
name: "GIF sang PNG",
description: "Chuyển đổi GIF sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webp-to-gif": {
name: "WebP sang GIF",
description: "Chuyển đổi WebP sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-tiff": {
name: "JPG sang TIFF",
description: "Chuyển đổi JPG sang TIFF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-tiff": {
name: "PNG sang TIFF",
description: "Chuyển đổi PNG sang TIFF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"tiff-to-jpg": {
name: "TIFF sang JPG",
description: "Chuyển đổi TIFF sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"tiff-to-png": {
name: "TIFF sang PNG",
description: "Chuyển đổi TIFF sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"psd-to-jpg": {
name: "PSD sang JPG",
description: "Chuyển đổi PSD sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"psd-to-png": {
name: "PSD sang PNG",
description: "Chuyển đổi PSD sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-eps": {
name: "PNG sang EPS",
description: "Chuyển đổi PNG sang EPS trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-eps": {
name: "JPG sang EPS",
description: "Chuyển đổi JPG sang EPS trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"eps-to-png": {
name: "EPS sang PNG",
description: "Chuyển đổi EPS sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"eps-to-jpg": {
name: "EPS sang JPG",
description: "Chuyển đổi EPS sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-svg": {
name: "PNG sang SVG",
description: "Chuyển đổi PNG sang SVG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-svg": {
name: "JPG sang SVG",
description: "Chuyển đổi JPG sang SVG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"tiff-to-svg": {
name: "TIFF sang SVG",
description: "Chuyển đổi TIFF sang SVG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"psd-to-svg": {
name: "PSD sang SVG",
description: "Chuyển đổi PSD sang SVG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"eps-to-svg": {
name: "EPS sang SVG",
description: "Chuyển đổi EPS sang SVG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"svg-to-png": {
name: "SVG sang PNG",
description: "Chuyển đổi SVG sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"svg-to-jpg": {
name: "SVG sang JPG",
description: "Chuyển đổi SVG sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"jpg-to-pdf": {
name: "JPG sang PDF",
description: "Chuyển đổi JPG sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"png-to-pdf": {
name: "PNG sang PDF",
description: "Chuyển đổi PNG sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"heic-to-pdf": {
name: "HEIC sang PDF",
description: "Chuyển đổi HEIC sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"tiff-to-pdf": {
name: "TIFF sang PDF",
description: "Chuyển đổi TIFF sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webp-to-pdf": {
name: "WebP sang PDF",
description: "Chuyển đổi WebP sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-pdf": {
name: "GIF sang PDF",
description: "Chuyển đổi GIF sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"eps-to-pdf": {
name: "EPS sang PDF",
description: "Chuyển đổi EPS sang PDF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"pdf-to-jpg": {
name: "PDF sang JPG",
description: "Chuyển đổi PDF sang JPG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"pdf-to-png": {
name: "PDF sang PNG",
description: "Chuyển đổi PDF sang PNG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"pdf-to-tiff": {
name: "PDF sang TIFF",
description: "Chuyển đổi PDF sang TIFF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mov-to-mp4": {
name: "MOV sang MP4",
description: "Chuyển đổi MOV sang MP4 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webm-to-mp4": {
name: "WEBM sang MP4",
description: "Chuyển đổi WEBM sang MP4 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mkv-to-mp4": {
name: "MKV sang MP4",
description: "Chuyển đổi MKV sang MP4 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"avi-to-mp4": {
name: "AVI sang MP4",
description: "Chuyển đổi AVI sang MP4 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-mov": {
name: "MP4 sang MOV",
description: "Chuyển đổi MP4 sang MOV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-webm": {
name: "MP4 sang WEBM",
description: "Chuyển đổi MP4 sang WEBM trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webm-to-mov": {
name: "WEBM sang MOV",
description: "Chuyển đổi WEBM sang MOV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mkv-to-mov": {
name: "MKV sang MOV",
description: "Chuyển đổi MKV sang MOV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"avi-to-mov": {
name: "AVI sang MOV",
description: "Chuyển đổi AVI sang MOV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-avi": {
name: "MP4 sang AVI",
description: "Chuyển đổi MP4 sang AVI trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mov-to-avi": {
name: "MOV sang AVI",
description: "Chuyển đổi MOV sang AVI trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mkv-to-avi": {
name: "MKV sang AVI",
description: "Chuyển đổi MKV sang AVI trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"avi-to-mkv": {
name: "AVI sang MKV",
description: "Chuyển đổi AVI sang MKV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-gif": {
name: "MP4 sang GIF",
description: "Chuyển đổi MP4 sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mov-to-gif": {
name: "MOV sang GIF",
description: "Chuyển đổi MOV sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mkv-to-gif": {
name: "MKV sang GIF",
description: "Chuyển đổi MKV sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"avi-to-gif": {
name: "AVI sang GIF",
description: "Chuyển đổi AVI sang GIF trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-mp4": {
name: "GIF sang MP4",
description: "Chuyển đổi GIF sang MP4 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-webm": {
name: "GIF sang WEBM",
description: "Chuyển đổi GIF sang WEBM trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"gif-to-mov": {
name: "GIF sang MOV",
description: "Chuyển đổi GIF sang MOV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-mp3": {
name: "MP4 sang MP3",
description: "Chuyển đổi MP4 sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mov-to-mp3": {
name: "MOV sang MP3",
description: "Chuyển đổi MOV sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mkv-to-mp3": {
name: "MKV sang MP3",
description: "Chuyển đổi MKV sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"webm-to-mp3": {
name: "WEBM sang MP3",
description: "Chuyển đổi WEBM sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"avi-to-mp3": {
name: "AVI sang MP3",
description: "Chuyển đổi AVI sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-wav": {
name: "MP4 sang WAV",
description: "Chuyển đổi MP4 sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mov-to-wav": {
name: "MOV sang WAV",
description: "Chuyển đổi MOV sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp4-to-ogg": {
name: "MP4 sang OGG",
description: "Chuyển đổi MP4 sang OGG trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"m4a-to-mp3": {
name: "M4A sang MP3",
description: "Chuyển đổi M4A sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"m4a-to-wav": {
name: "M4A sang WAV",
description: "Chuyển đổi M4A sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"aac-to-mp3": {
name: "AAC sang MP3",
description: "Chuyển đổi AAC sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"aac-to-wav": {
name: "AAC sang WAV",
description: "Chuyển đổi AAC sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"aac-to-flac": {
name: "AAC sang FLAC",
description: "Chuyển đổi AAC sang FLAC trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"ogg-to-mp3": {
name: "OGG sang MP3",
description: "Chuyển đổi OGG sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"ogg-to-wav": {
name: "OGG sang WAV",
description: "Chuyển đổi OGG sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"wav-to-mp3": {
name: "WAV sang MP3",
description: "Chuyển đổi WAV sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"mp3-to-wav": {
name: "MP3 sang WAV",
description: "Chuyển đổi MP3 sang WAV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"flac-to-mp3": {
name: "FLAC sang MP3",
description: "Chuyển đổi FLAC sang MP3 trực tuyến. Nhanh, miễn phí và riêng tư.",
},
"excel-to-csv": {
name: "Excel sang CSV",
description: "Chuyển đổi Excel sang CSV trực tuyến. Nhanh, miễn phí và riêng tư.",
},
// END conversion-presets
resize: {
name: "Thay đổi kích thước ảnh",
description: "Thay đổi kích thước theo pixel, phần trăm hoặc mẫu mạng xã hội",
},
crop: {
name: "Cắt ảnh",
description: "Cắt tự do, tỷ lệ khung hình có sẵn, cắt theo hình dạng",
},
rotate: {
name: "Xoay & Lật ảnh",
description: "Xoay, lật và chỉnh thẳng hình ảnh",
},
convert: {
name: "Chuyển đổi ảnh",
description: "Chuyển đổi giữa các định dạng ảnh",
},
compress: {
name: "Nén ảnh",
description: "Giảm dung lượng tệp theo chất lượng hoặc kích thước mục tiêu",
},
"optimize-for-web": {
name: "Tối ưu cho Web",
description:
"Tối ưu hình ảnh cho web với chuyển đổi định dạng, kiểm soát chất lượng và xem trước trực tiếp",
},
"strip-metadata": {
name: "Xóa siêu dữ liệu ảnh",
description: "Xóa EXIF, GPS và thông tin máy ảnh",
},
"edit-metadata": {
name: "Chỉnh sửa siêu dữ liệu ảnh",
description: "Chỉnh sửa EXIF, IPTC, XMP, GPS, từ khóa và ngày tháng",
},
"bulk-rename": {
name: "Đổi tên hàng loạt",
description: "Đổi tên nhiều tệp với các mẫu tên",
},
"image-to-pdf": {
name: "Ảnh sang PDF",
description: "Kết hợp nhiều ảnh thành tài liệu PDF",
},
"pdf-to-image": {
name: "PDF sang ảnh",
description: "Chuyển đổi các trang PDF thành hình ảnh",
},
favicon: {
name: "Tạo Favicon",
description: "Tạo tất cả kích thước Favicon và biểu tượng ứng dụng",
},
"adjust-colors": {
name: "Điều chỉnh màu sắc",
description:
"Độ sáng, độ tương phản, phơi sáng, độ bão hòa, nhiệt độ màu, độ nét và hiệu ứng",
},
sharpening: {
name: "Làm nét ảnh",
description: "Làm nét thích ứng, mặt nạ không sắc nét và làm nét cao tần với các mẫu",
},
"replace-color": {
name: "Thay thế & Đảo ngược màu",
description: "Thay thế màu cụ thể hoặc đảo ngược màu",
},
"color-blindness": {
name: "Mô phỏng mù màu",
description: "Mô phỏng cách hình ảnh hiển thị với các dạng khiếm thị màu khác nhau",
},
"remove-background": {
name: "Xóa nền",
description: "Xóa nền bằng AI",
},
upscale: {
name: "Phóng to ảnh",
description: "Nâng cấp độ phân giải bằng AI",
},
"erase-object": {
name: "Xóa đối tượng",
description: "Xóa các đối tượng không mong muốn bằng AI",
},
ocr: {
name: "Trích xuất văn bản từ ảnh (OCR)",
description: "Trích xuất văn bản từ hình ảnh với độ chính xác cao nhờ AI",
},
"ocr-pdf": {
name: "OCR PDF",
description: "Trích xuất văn bản từ tài liệu PDF bằng OCR hỗ trợ bởi AI",
},
"blur-faces": {
name: "Làm mờ khuôn mặt và thông tin nhạy cảm",
description: "Tự động phát hiện và làm mờ khuôn mặt cùng thông tin nhạy cảm",
},
"enhance-faces": {
name: "Nâng cao khuôn mặt",
description: "Phục hồi và nâng cao khuôn mặt bằng AI",
},
"smart-crop": {
name: "Cắt thông minh",
description: "Cắt thông minh theo chủ thể, khuôn mặt hoặc viền",
},
"image-enhancement": {
name: "Nâng cao hình ảnh",
description:
"Tự động cải thiện với hiệu chỉnh phơi sáng, độ tương phản, màu sắc và độ nét thông minh",
},
"noise-removal": {
name: "Khử nhiễu",
description: "Khử nhiễu và hạt bằng AI",
},
"red-eye-removal": {
name: "Xóa mắt đỏ",
description: "Phát hiện và sửa mắt đỏ bằng AI cho ảnh chụp có đèn flash",
},
"restore-photo": {
name: "Phục chế ảnh",
description: "Sửa vết xước, rách và hư hỏng trên ảnh cũ bằng AI",
},
"content-aware-resize": {
name: "Thay đổi kích thước thông minh",
description: "Thay đổi kích thước thông minh trong khi bảo toàn nội dung quan trọng",
},
"ai-canvas-expand": {
name: "Mở rộng khung vẽ AI",
description: "Mở rộng khung vẽ với tính năng tô AI",
},
colorize: {
name: "Tô màu AI",
description: "Chuyển ảnh đen trắng sang màu đầy đủ bằng mô hình học sâu AI",
},
"passport-photo": {
name: "Ảnh hộ chiếu",
description:
"Tạo ảnh hộ chiếu, thị thực và giấy tờ tùy thân đạt chuẩn với phát hiện khuôn mặt tự động",
},
"transcribe-audio": {
name: "Phiên âm thanh",
description: "Chuyển đổi giọng nói thành văn bản với phiên âm bằng AI",
},
"auto-subtitles": {
name: "Phụ đề tự động",
description: "Tạo tệp phụ đề từ bản âm thanh video",
},
"transparency-fixer": {
name: "Sửa trong suốt PNG",
description: "Sửa ảnh PNG giả trong suốt chỉ với một cú nhấp",
},
"background-replace": {
name: "Thay đổi nền",
description: "Thay thế nền hình ảnh bằng màu đơn sắc",
},
"blur-background": {
name: "Làm mờ nền",
description: "Làm mờ nền trong khi giữ cho chủ thể sắc nét",
},
"watermark-text": {
name: "Hình mờ văn bản",
description: "Thêm lớp phủ hình mờ văn bản",
},
"watermark-image": {
name: "Hình mờ hình ảnh",
description: "Phủ logo làm hình mờ",
},
"text-overlay": {
name: "Lớp phủ văn bản",
description: "Thêm văn bản được định dạng vào hình ảnh",
},
compose: {
name: "Ghép ảnh",
description: "Xếp lớp hình ảnh với vị trí và độ mờ",
},
"meme-generator": {
name: "Tạo Meme",
description:
"Tạo meme với các mẫu phổ biến hoặc ảnh của bạn. Kiểu chữ Impact cổ điển với phông chữ, màu sắc và vị trí tùy chỉnh.",
},
info: {
name: "Thông tin ảnh",
description: "Xem tất cả siêu dữ liệu và thuộc tính hình ảnh",
},
compare: {
name: "So sánh ảnh",
description: "So sánh hai hình ảnh cạnh nhau",
},
"find-duplicates": {
name: "Tìm ảnh trùng",
description: "Phát hiện ảnh trùng lặp và gần trùng lặp",
},
"color-palette": {
name: "Bảng màu",
description: "Trích xuất các màu chủ đạo từ hình ảnh",
},
"qr-generate": {
name: "Tạo mã QR",
description: "Tạo mã QR có kiểu dáng với màu sắc, hoa văn và logo tùy chỉnh",
},
"html-to-image": {
name: "HTML sang hình ảnh",
description: "Chụp trang web thành hình ảnh chất lượng cao",
},
"barcode-read": {
name: "Đọc mã vạch",
description: "Quét hình ảnh để tìm mã QR, mã vạch và mã 2D",
},
collage: {
name: "Ảnh ghép và Lưới",
description: "Kết hợp hình ảnh thành ảnh ghép dạng lưới đẹp mắt với hơn 25 mẫu",
},
stitch: {
name: "Ghép nối ảnh",
description: "Nối hình ảnh cạnh nhau, xếp chồng hoặc theo lưới",
},
split: {
name: "Tách ảnh",
description:
"Tách hình ảnh thành các ô lưới hoặc theo kích thước pixel với xem trước trực tiếp",
},
border: {
name: "Viền & Khung",
description: "Thêm viền, khoảng đệm, bo góc và bóng đổ với các mẫu một cú nhấp",
},
beautify: {
name: "Làm đẹp ảnh chụp màn hình",
description:
"Thêm nền chuyển sắc, khung thiết bị, bóng đổ và kích thước mạng xã hội cho ảnh chụp màn hình",
},
"circle-crop": {
name: "Cắt hình tròn",
description: "Cắt hình ảnh thành hình tròn ở giữa với các góc trong suốt",
},
duotone: {
name: "Hai tông màu",
description: "Áp dụng hiệu ứng hai tông màu với màu bóng và màu sáng tùy chỉnh",
},
"image-pad": {
name: "Thêm viền ảnh",
description: "Thêm viền cho ảnh theo tỷ lệ khung hình mục tiêu với nền màu đơn sắc",
},
pixelate: {
name: "Khảm điểm ảnh",
description: "Áp dụng hiệu ứng pixelate cho toàn bộ ảnh hoặc một vùng cụ thể",
},
vignette: {
name: "Viền tối",
description: "Thêm hiệu ứng vignette với cường độ và màu sắc có thể điều chỉnh",
},
"gif-webp": {
name: "Chuyển đổi GIF/WebP",
description: "Chuyển đổi GIF động sang WebP và ngược lại, giữ nguyên tất cả khung hình",
},
histogram: {
name: "Biểu đồ Histogram",
description: "Tạo biểu đồ histogram RGB từ một hình ảnh",
},
"lqip-placeholder": {
name: "Ảnh giữ chỗ LQIP",
description: "Tạo ảnh giữ chỗ chất lượng thấp nhỏ gọn với URI dữ liệu base64",
},
"sprite-sheet": {
name: "Bảng Sprite",
description: "Ghép nhiều hình ảnh thành một lưới sprite sheet",
},
"svg-to-raster": {
name: "SVG sang ảnh raster",
description:
"Chuyển đổi SVG sang PNG, JPEG, WebP, AVIF, TIFF, GIF hoặc HEIF với tỷ lệ và DPI tùy chỉnh",
},
vectorize: {
name: "Ảnh sang SVG",
description: "Chuyển đổi hình ảnh sang đồ họa véc-tơ có thể thu phóng",
},
"gif-tools": {
name: "Công cụ GIF",
description:
"Thay đổi kích thước, tối ưu, thay đổi tốc độ, đảo ngược, trích xuất khung hình và xoay GIF động",
},
"image-to-base64": {
name: "Ảnh sang Base64",
description:
"Chuyển đổi hình ảnh sang chuỗi Base64 để nhúng trong HTML, CSS và nhiều hơn nữa",
},
"barcode-generate": {
name: "Tạo mã vạch",
description: "Tạo mã vạch định dạng Code 128, EAN-13, UPC-A, Code 39, ITF-14 và Data Matrix",
},
"chart-maker": {
name: "Tạo biểu đồ",
description: "Tạo biểu đồ cột, đường hoặc tròn từ dữ liệu CSV hoặc JSON",
},
"convert-video": {
name: "Chuyển đổi video",
description: "Chuyển đổi video giữa các định dạng MP4, MOV và WebM",
},
"compress-video": {
name: "Nén video",
description: "Giảm dung lượng video với kiểm soát chất lượng",
},
"trim-video": {
name: "Cắt video",
description: "Cắt một đoạn từ video",
},
"mute-video": {
name: "Tắt tiếng video",
description: "Xóa rãnh âm thanh khỏi video",
},
"video-to-gif": {
name: "Video sang GIF",
description: "Chuyển một đoạn video thành GIF động",
},
"resize-video": {
name: "Thay đổi kích thước video",
description: "Thay đổi độ phân giải hoặc kích thước video theo mẫu có sẵn",
},
"crop-video": {
name: "Cắt khung video",
description: "Cắt một vùng khỏi video",
},
"rotate-video": {
name: "Xoay video",
description: "Xoay hoặc lật video",
},
"change-fps": {
name: "Thay đổi FPS",
description: "Thay đổi tốc độ khung hình của video",
},
"video-color": {
name: "Màu sắc video",
description: "Điều chỉnh độ sáng, tương phản, bão hòa và gamma",
},
"video-speed": {
name: "Tốc độ video",
description: "Tăng hoặc giảm tốc độ video",
},
"reverse-video": {
name: "Đảo ngược video",
description: "Phát ngược một đoạn video",
},
"video-loudnorm": {
name: "Chuẩn hóa âm thanh video",
description: "Chuẩn hóa âm lượng video theo tiêu chuẩn phát sóng",
},
"aspect-pad": {
name: "Thêm viền tỷ lệ",
description: "Thêm thanh viền màu đơn sắc để phù hợp tỷ lệ khung hình mục tiêu",
},
"blur-pad": {
name: "Viền mờ",
description: "Lấp thanh viền bằng bản video làm mờ",
},
"watermark-video": {
name: "Watermark video",
description: "In watermark văn bản lên các khung hình video",
},
"stabilize-video": {
name: "Ổn định video",
description: "Giảm rung camera bằng ổn định hai lượt",
},
"gif-to-video": {
name: "GIF sang video",
description: "Chuyển đổi GIF động thành video MP4 hoặc WebM",
},
"video-to-webp": {
name: "Video sang WebP",
description: "Chuyển đổi đoạn video thành ảnh WebP động",
},
"video-to-frames": {
name: "Video sang khung hình",
description: "Trích xuất khung hình từ video thành tệp ZIP chứa ảnh",
},
"merge-videos": {
name: "Ghép video",
description: "Nối nhiều đoạn video thành một tệp",
},
"replace-audio": {
name: "Thay thế âm thanh",
description: "Thay rãnh âm thanh của video bằng tệp khác",
},
"burn-subtitles": {
name: "Ghi phụ đề cố định",
description: "Ghi phụ đề vĩnh viễn lên khung hình video",
},
"embed-subtitles": {
name: "Nhúng phụ đề",
description: "Nhúng rãnh phụ đề vào container video",
},
"extract-subtitles": {
name: "Trích xuất phụ đề",
description: "Trích xuất rãnh phụ đề từ video thành tệp SRT",
},
"images-to-video": {
name: "Ảnh sang video",
description: "Chuyển một bộ ảnh thành video trình chiếu",
},
"video-metadata": {
name: "Xóa siêu dữ liệu video",
description: "Xóa siêu dữ liệu khỏi video và báo cáo nội dung tìm thấy",
},
"convert-audio": {
name: "Chuyển đổi âm thanh",
description: "Chuyển đổi âm thanh giữa MP3, WAV, OGG và nhiều định dạng khác",
},
"trim-audio": {
name: "Cắt âm thanh",
description: "Cắt một đoạn từ tệp âm thanh",
},
"extract-audio": {
name: "Trích xuất âm thanh",
description: "Trích xuất rãnh âm thanh từ video",
},
"volume-adjust": {
name: "Điều chỉnh âm lượng",
description: "Tăng hoặc giảm âm lượng theo mức gain cố định",
},
"normalize-audio": {
name: "Chuẩn hóa âm thanh",
description: "Cân bằng âm lượng theo mức tiêu chuẩn phát sóng",
},
"fade-audio": {
name: "Mờ dần âm thanh",
description: "Thêm hiệu ứng tăng dần và giảm dần cho âm thanh",
},
"reverse-audio": {
name: "Đảo ngược âm thanh",
description: "Phát ngược âm thanh",
},
"audio-speed": {
name: "Tốc độ âm thanh",
description: "Tăng hoặc giảm tốc độ phát âm thanh",
},
"pitch-shift": {
name: "Thay đổi cao độ",
description: "Tăng hoặc giảm cao độ theo nửa cung mà không thay đổi tốc độ",
},
"audio-channels": {
name: "Kênh âm thanh",
description: "Chuyển đổi giữa mono, stereo hoặc hoán đổi kênh trái và phải",
},
"silence-removal": {
name: "Xóa khoảng lặng",
description: "Loại bỏ các đoạn im lặng khỏi âm thanh",
},
"noise-reduction": {
name: "Giảm tiếng ồn",
description: "Giảm tiếng ồn nền bằng khử nhiễu dựa trên FFT",
},
"merge-audio": {
name: "Ghép âm thanh",
description: "Gộp nhiều tệp âm thanh thành một",
},
"split-audio": {
name: "Tách âm thanh",
description: "Tách âm thanh theo thời gian, phần bằng nhau hoặc phát hiện khoảng lặng",
},
"ringtone-maker": {
name: "Tạo nhạc chuông",
description: "Tạo đoạn nhạc chuông từ bất kỳ tệp âm thanh nào",
},
"waveform-image": {
name: "Ảnh dạng sóng",
description: "Tạo hình ảnh trực quan dạng sóng dưới dạng ảnh PNG",
},
"audio-metadata": {
name: "Siêu dữ liệu âm thanh",
description: "Xem, chỉnh sửa hoặc xóa thẻ âm thanh (ID3)",
},
"merge-pdf": {
name: "Ghép PDF",
description: "Gộp nhiều tệp PDF thành một",
},
"split-pdf": {
name: "Tách PDF",
description: "Trích xuất trang hoặc tách thành nhiều phần",
},
"compress-pdf": {
name: "Nén PDF",
description: "Giảm dung lượng tệp PDF",
},
"rotate-pdf": {
name: "Xoay PDF",
description: "Xoay các trang trong PDF",
},
"convert-document": {
name: "Chuyển đổi tài liệu",
description: "Chuyển đổi giữa các định dạng Word, OpenDocument, RTF và văn bản thuần",
},
"convert-presentation": {
name: "Chuyển đổi bản trình bày",
description: "Chuyển đổi giữa các định dạng bản trình bày PowerPoint và OpenDocument",
},
"convert-spreadsheet": {
name: "Chuyển đổi bảng tính",
description:
"Chuyển đổi giữa các định dạng Excel, OpenDocument và CSV. Bảng tính nhiều sheet sẽ xuất sheet đầu tiên sang CSV.",
},
"excel-to-pdf": {
name: "Excel sang PDF",
description:
"Chuyển đổi bảng tính sang PDF. Các sheet rộng có thể được chia thành nhiều trang.",
},
"word-to-pdf": {
name: "Word sang PDF",
description: "Chuyển đổi tài liệu Word sang PDF",
},
"extract-pages": {
name: "Trích xuất trang",
description: "Trích xuất các trang đã chọn thành PDF mới",
},
"remove-pages": {
name: "Xóa trang",
description: "Xóa các trang cụ thể khỏi PDF",
},
"organize-pdf": {
name: "Sắp xếp PDF",
description: "Sắp xếp lại thứ tự trang theo trình tự chỉ định",
},
"protect-pdf": {
name: "Bảo vệ PDF",
description: "Thêm bảo vệ bằng mật khẩu (mã hóa AES-256)",
},
"unlock-pdf": {
name: "Mở khóa PDF",
description: "Xóa bảo vệ mật khẩu khỏi PDF",
},
"repair-pdf": {
name: "Sửa chữa PDF",
description: "Thử sửa chữa tệp PDF bị hỏng hoặc lỗi",
},
"linearize-pdf": {
name: "Tối ưu PDF cho web",
description: "Tuyến tính hóa PDF để xem nhanh trên web",
},
"grayscale-pdf": {
name: "PDF thang xám",
description: "Chuyển tất cả màu sang thang xám",
},
"pdfa-convert": {
name: "Bộ chuyển đổi PDF/A",
description: "Chuyển đổi sang PDF/A-2 để lưu trữ",
},
"crop-pdf": {
name: "Cắt PDF",
description: "Cắt tất cả các trang với lề đồng nhất",
},
"nup-pdf": {
name: "Số trang mỗi tờ (N-up)",
description: "Xếp nhiều trang trên một tờ",
},
"booklet-pdf": {
name: "PDF sách nhỏ",
description: "Sắp xếp trang để gấp thành sách nhỏ",
},
"watermark-pdf": {
name: "Hình mờ PDF",
description: "Thêm watermark văn bản vào mọi trang",
},
"pdf-page-numbers": {
name: "Số trang PDF",
description: "Thêm số trang vào mọi trang",
},
"flatten-pdf": {
name: "Làm phẳng PDF",
description: "Nhúng biểu mẫu và chú thích vào nội dung trang",
},
"redact-pdf": {
name: "Biên tập PDF",
description: "Xóa vĩnh viễn các đoạn văn bản (biên tập xác minh thực sự)",
},
"pdf-to-text": {
name: "PDF sang văn bản",
description: "Trích xuất văn bản thuần từ PDF",
},
"pdf-to-word": {
name: "PDF sang Word",
description: "Phù hợp nhất cho PDF dạng văn bản; trang quét cần OCR",
},
"pdf-metadata": {
name: "Siêu dữ liệu PDF",
description: "Đọc và ghi siêu dữ liệu tài liệu PDF",
},
"powerpoint-to-pdf": {
name: "PowerPoint sang PDF",
description: "Chuyển đổi bản trình bày sang PDF",
},
"html-to-pdf": {
name: "HTML sang PDF",
description: "Chuyển đổi tệp HTML sang PDF. Tài nguyên từ xa bị tắt vì quyền riêng tư.",
},
"markdown-to-docx": {
name: "Markdown sang Word",
description: "Chuyển đổi tệp Markdown sang tài liệu Word (DOCX)",
},
"markdown-to-html": {
name: "Markdown sang HTML",
description:
"Chuyển đổi tệp Markdown sang trang HTML độc lập. Hình ảnh từ xa trong nguồn được giữ nguyên trong kết quả.",
},
"markdown-to-pdf": {
name: "Markdown sang PDF",
description:
"Chuyển đổi tệp Markdown sang PDF có định dạng. Tài nguyên từ xa bị tắt vì quyền riêng tư.",
},
"epub-convert": {
name: "Chuyển đổi từ EPUB",
description:
"Chuyển đổi EPUB sang PDF, DOCX, HTML hoặc Markdown. Tài nguyên từ xa trong sách không được tải.",
},
"to-epub": {
name: "Chuyển sang EPUB",
description: "Chuyển đổi tệp Word, Markdown, HTML hoặc văn bản thuần sang EPUB",
},
"csv-excel": {
name: "CSV sang Excel",
description: "Chuyển đổi hai chiều giữa CSV và Excel (XLSX)",
},
"csv-json": {
name: "CSV sang JSON",
description: "Chuyển đổi hai chiều giữa CSV và JSON",
},
"json-xml": {
name: "JSON sang XML",
description: "Chuyển đổi hai chiều giữa JSON và XML",
},
"split-csv": {
name: "Tách CSV",
description: "Tách CSV thành các tệp nhỏ hơn theo số dòng",
},
"merge-csvs": {
name: "Ghép CSV",
description: "Gộp nhiều tệp CSV hoặc TSV có cùng cột thành một",
},
"yaml-json": {
name: "Chuyển đổi YAML / JSON",
description: "Chuyển đổi hai chiều giữa YAML và JSON",
},
"xml-to-csv": {
name: "XML sang CSV",
description: "Trích xuất các phần tử lặp lại từ XML thành bảng CSV",
},
"create-zip": {
name: "Tạo ZIP",
description: "Gộp nhiều tệp thành một kho lưu trữ ZIP",
},
"extract-zip": {
name: "Giải nén ZIP",
description:
"Giải nén tệp an toàn từ kho lưu trữ ZIP với bảo vệ chống bom. Kho lưu trữ một tệp sẽ trả về tệp trực tiếp.",
},
pipeline: {
name: "Trình xây dựng Pipeline",
description: "Kết nối nhiều công cụ thành một quy trình làm việc",
},
processing: { canceled: "Đã hủy xử lý" },
mediaPlayer: {
unsupported: "Trình duyệt của bạn không hỗ trợ định dạng media này.",
},
documentView: {
loadFailed: "Không thể tải tài liệu.",
previousPage: "Trang trước",
nextPage: "Trang sau",
inputNotPreviewable: "Không thể xem trước loại tệp này",
},
},
toolSettings: {
compress: {
compressionMode: "Chế độ nén",
targetSize: "Kích thước mục tiêu",
quality: "Chất lượng",
smallestFile: "Tệp nhỏ nhất",
bestQuality: "Chất lượng tốt nhất",
submit: "Nén",
submitBatch: "Nén ({count} tệp)",
progressLabel: "Đang nén",
original: "Gốc: {size} KB",
processed: "Đã xử lý: {size} KB",
saved: "Tiết kiệm: {percent}%",
},
resize: {
customSize: "Kích thước tùy chỉnh",
scale: "Tỷ lệ",
presets: "Mẫu có sẵn",
contentAware: "Nhận diện nội dung",
aspectRatio: "Tỷ lệ khung hình",
ratioFree: "Tự do",
ratioOriginal: "Gốc",
widthPx: "Chiều rộng (px)",
heightPx: "Chiều cao (px)",
fitMode: "Chế độ vừa vặn",
cropToFit: "Cắt vừa khung",
fitInside: "Vừa bên trong",
stretch: "Kéo giãn",
limitToOriginalSize: "Giới hạn kích thước gốc",
limitToOriginalSizeHint:
"Nếu hình ảnh của bạn đã nhỏ hơn kích thước mục tiêu, giữ nguyên thay vì phóng to",
scalePercent: "Tỷ lệ (%)",
resizeToSquare: "Đổi kích thước thành hình vuông",
protectFaces: "Bảo vệ khuôn mặt",
smoothing: "Làm mịn",
edgeSensitivity: "Độ nhạy cạnh",
submit: "Thay đổi kích thước",
submitBatch: "Thay đổi kích thước ({count} tệp)",
progressLabel: "Đang thay đổi kích thước",
},
crop: {
aspectRatio: "Tỷ lệ khung hình",
custom: "Tùy chỉnh",
positionAndSize: "Vị trí & Kích thước",
ruleOfThirds: "Quy tắc phần ba",
leftOffsetPx: "Lệch trái (px)",
topOffsetPx: "Lệch trên (px)",
submit: "Cắt",
submitBatch: "Cắt ({count} tệp)",
progressLabel: "Đang cắt",
},
rotate: {
rotate: "Xoay",
angle: "Góc",
straighten: "Chỉnh thẳng",
flip: "Lật",
horizontal: "Ngang",
vertical: "Dọc",
resetAllChanges: "Đặt lại tất cả thay đổi",
submit: "Áp dụng",
submitBatch: "Áp dụng ({count} tệp)",
progressLabel: "Đang áp dụng",
},
convert: {
targetFormat: "Định dạng đích",
sourceFormat: "Định dạng nguồn",
quality: "Chất lượng",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"optimize-for-web": {
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
smallestFile: "Tệp nhỏ nhất",
bestQuality: "Chất lượng tốt nhất",
maxDimensions: "Kích thước tối đa",
maxWidth: "Chiều rộng tối đa",
maxHeight: "Chiều cao tối đa",
stripMetadata: "Xóa siêu dữ liệu",
sizeComparison: "So sánh kích thước",
optimized: "Đã tối ưu:",
smaller: "Nhỏ hơn {percent}%",
larger: "Lớn hơn {percent}%",
submit: "Xử lý & Tải xuống",
submitBatch: "Xử lý & Tải xuống ({count} tệp)",
progressLabel: "Đang tối ưu",
},
"strip-metadata": {
currentMetadata: "Siêu dữ liệu hiện tại",
readingMetadata: "Đang đọc siêu dữ liệu...",
noMetadataFound: "Không tìm thấy siêu dữ liệu trong hình ảnh này.",
removeAllMetadata: "Xóa tất cả siêu dữ liệu",
selectSpecific: "Hoặc chọn siêu dữ liệu cụ thể:",
stripExif: "Xóa EXIF (thông tin máy ảnh, ngày, phơi sáng)",
stripGps: "Xóa GPS (dữ liệu vị trí)",
stripIcc: "Xóa ICC (cấu hình màu)",
stripXmp: "Xóa XMP (siêu dữ liệu mở rộng)",
locationFound: "đã tìm thấy vị trí",
viewOnMap: "Xem trên bản đồ",
locationWarning:
"Hình ảnh này chứa vị trí chính xác của bạn. Hãy cân nhắc xóa dữ liệu GPS trước khi chia sẻ.",
metadataSections: "Đã tìm thấy {count} phần siêu dữ liệu",
metadataSectionsPlural: "Đã tìm thấy {count} phần siêu dữ liệu",
metadataRemoved: "Đã xóa siêu dữ liệu: {size} KB",
submit: "Xóa siêu dữ liệu",
progressLabel: "Đang xóa siêu dữ liệu",
},
"edit-metadata": {
readingMetadata: "Đang đọc siêu dữ liệu...",
couldNotReadMetadata: "Không thể đọc siêu dữ liệu - các trường sẽ bắt đầu trống.",
basicInfo: "Thông tin cơ bản",
description: "Mô tả",
artist: "Tác giả",
copyright: "Bản quyền",
software: "Phần mềm",
iptc: "IPTC",
title: "Tiêu đề",
headline: "Đầu đề",
city: "Thành phố",
stateProvince: "Tỉnh/Thành phố",
country: "Quốc gia",
dateAndTime: "Ngày & Giờ",
editDates: "Chỉnh sửa ngày",
shiftAllDates: "Dịch chuyển tất cả ngày",
dateModified: "Ngày sửa đổi",
dateTaken: "Ngày chụp",
shiftHint: "Dịch chuyển tất cả trường ngày theo khoảng lệch (hữu ích cho hiệu chỉnh múi giờ)",
direction: "Hướng",
forward: "+ Tiến",
backward: "- Lùi",
hoursMinutes: "Giờ:Phút",
locationGps: "Vị trí (GPS)",
locationDataFound: "Đã tìm thấy dữ liệu vị trí",
noGpsData: "Không có dữ liệu GPS. Thêm tọa độ bên dưới.",
latitude: "Vĩ độ",
longitude: "Kinh độ",
altitudeMeters: "Độ cao (mét)",
removeAllGpsData: "Xóa tất cả dữ liệu GPS",
keywords: "Từ khóa",
addKeywordPlaceholder: "Thêm từ khóa và nhấn Enter",
addToExisting: "Thêm vào hiện có",
replaceAll: "Thay thế tất cả",
allMetadata: "Tất cả siêu dữ liệu",
templates: "Mẫu",
templateNamePlaceholder: "Tên mẫu",
uploadPrompt: "Tải lên hình ảnh để chỉnh sửa siêu dữ liệu.",
changes: "{count} thay đổi:",
modified: "{count} đã sửa đổi",
removed: "{count} đã xóa",
gpsCleared: "Đã xóa GPS",
gpsAdded: "Đã thêm GPS",
datesShifted: "đã dịch chuyển ngày",
submit: "Áp dụng siêu dữ liệu",
progressLabel: "Đang ghi siêu dữ liệu",
},
"bulk-rename": {
pattern: "Mẫu",
patternHint: "Biến: {{index}}, {{padded}}, {{original}}",
startIndex: "Chỉ số bắt đầu",
preview: "Xem trước",
andMore: "... và {count} khác",
renaming: "Đang đổi tên...",
submit: "Đổi tên {count} tệp",
zipDownloaded: "Đã tải xuống tệp ZIP thành công",
},
"image-to-pdf": {
imageCount: "{count} hình ảnh sẽ được chuyển đổi thành {mode}",
imageCountPlural: "{count} hình ảnh sẽ được chuyển đổi thành {mode}",
singlePdfMode: "một tệp PDF duy nhất, mỗi ảnh một trang",
separatePdfMode: "các tệp PDF riêng lẻ, mỗi ảnh một tệp",
combineAllImages: "Kết hợp tất cả ảnh vào một PDF",
pageSize: "Khổ giấy",
orientation: "Hướng",
portrait: "Dọc",
landscape: "Ngang",
margin: "Lề",
targetSizeLabel: "Kích thước tệp mục tiêu (tùy chọn)",
targetSizePlaceholder: "ví dụ: 2",
targetSizeHint: "Để trống để có chất lượng tối đa",
targetSizeMet: "Đã đạt mục tiêu",
targetSizeNotMet: "Không thể đạt mục tiêu. Tệp đã nén ở chất lượng tối thiểu.",
targetSizeTooSmall: "Kích thước mục tiêu phải ít nhất 50KB",
jpegQualityLabel: "Chất lượng JPEG đã sử dụng",
noImage: "Không có ảnh",
submitCollate: "Tạo PDF ({count} trang)",
submitSeparate: "Tạo {count} PDF",
downloadPdf: "Tải xuống PDF",
downloadZip: "Tải xuống ZIP",
progressLabel: "Đang tạo PDF",
uploadingImages: "Đang tải lên hình ảnh...",
processingPages: "Đang xử lý {count} trang...",
},
"pdf-to-image": {
dropPdf: "Kéo thả PDF vào đây hoặc nhấp để chọn",
readingPdf: "Đang đọc PDF...",
pageCount: "{count} trang",
pageCountPlural: "{count} trang",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
resolutionDpi: "Độ phân giải (DPI)",
dpiScreen: "Màn hình",
dpiStandard: "Tiêu chuẩn",
dpiPrint: "In ấn",
dpiHighQuality: "Chất lượng cao",
colorMode: "Chế độ màu",
colorModeColor: "Màu",
colorModeGrayscale: "Xám",
colorModeBw: "Đen trắng",
pages: "Trang",
allPages: "Tất cả trang",
pagesHint: "ví dụ: 1-3, 5, 8-10 (tài liệu có {count} trang)",
converting: "Đang chuyển đổi...",
submit: "Chuyển đổi {count} trang",
submitPlural: "Chuyển đổi {count} trang",
downloadAllZip: "Tải tất cả (ZIP)",
},
favicon: {
uploadHint:
"Tải lên hình ảnh vuông (khuyến nghị 512x512 trở lên) để tạo tất cả kích thước Favicon và biểu tượng ứng dụng.",
multipleHint: "Mỗi hình ảnh trong số {count} ảnh sẽ có thư mục riêng trong tệp ZIP.",
generatedSizes: "Kích thước được tạo (mỗi ảnh)",
plusManifest: "+ manifest.json + đoạn mã HTML",
submit: "Tạo Favicon ({count} ảnh)",
submitPlural: "Tạo Favicon ({count} ảnh)",
downloadZip: "Tải xuống Favicon ZIP",
progressLabel: "Đang tạo Favicon",
},
"adjust-colors": {
light: "Ánh sáng",
brightness: "Độ sáng",
contrast: "Độ tương phản",
exposure: "Phơi sáng",
color: "Màu sắc",
saturation: "Độ bão hòa",
temperature: "Nhiệt độ màu",
temperatureHint: "lạnh / ấm",
tint: "Sắc thái",
tintHint: "xanh lá / hồng tím",
hue: "Sắc độ",
detail: "Chi tiết",
sharpness: "Độ nét",
effects: "Hiệu ứng",
none: "không",
grayscale: "xám",
sepia: "nâu đỏ",
invert: "đảo ngược",
colorChannels: "Kênh màu",
channelModified: "đã sửa đổi",
red: "Đỏ",
green: "Xanh lá",
blue: "Xanh dương",
resetAll: "Đặt lại tất cả",
submit: "Áp dụng",
submitBatch: "Áp dụng ({count} tệp)",
progressLabel: "Đang điều chỉnh màu sắc",
},
sharpening: {
method: "Phương pháp",
adaptive: "Thích ứng",
unsharpMask: "Mặt nạ không sắc nét",
highPass: "Cao tần",
presets: "Mẫu có sẵn",
textureAmount: "Mức độ kết cấu",
amount: "Mức độ",
strength: "Cường độ",
noiseReduction: "Khử nhiễu",
off: "tắt",
lightDenoise: "nhẹ",
mediumDenoise: "vừa",
strongDenoise: "mạnh",
advancedControls: "Điều khiển nâng cao",
radius: "Bán kính",
flatProtection: "Bảo vệ vùng phẳng",
detailThreshold: "Ngưỡng chi tiết",
haloLimitLight: "Giới hạn quầng sáng (Sáng)",
haloLimitDark: "Giới hạn quầng sáng (Tối)",
threshold: "Ngưỡng",
kernelSize: "Kích thước nhân",
submit: "Làm nét",
submitBatch: "Làm nét ({count} tệp)",
progressLabel: "Đang làm nét",
},
"replace-color": {
sourceColor: "Màu nguồn (cần thay thế)",
targetColor: "Màu đích (thay thế bằng)",
makeTransparent: "Làm trong suốt thay thế",
tolerance: "Dung sai",
exactMatch: "Khớp chính xác",
wideRange: "Phạm vi rộng",
submit: "Thay thế màu",
submitBatch: "Thay thế màu ({count} tệp)",
progressLabel: "Đang thay thế màu",
},
"color-blindness": {
simulationType: "Loại mô phỏng",
redGreen: "Đỏ-Xanh lá",
blueYellow: "Xanh dương-Vàng",
monochromatic: "Đơn sắc",
submit: "Mô phỏng",
submitBatch: "Mô phỏng ({count} tệp)",
progressLabel: "Đang mô phỏng mù màu",
},
"remove-background": {
subject: "Chủ thể",
people: "Con người",
products: "Sản phẩm",
general: "Chung",
passportIdPhoto: "Ảnh hộ chiếu / Giấy tờ",
quality: "Chất lượng",
fast: "Nhanh",
hd: "HD",
max: "Tối đa",
ultra: "Siêu nét",
background: "Nền",
transparent: "Trong suốt",
bgColor: "Màu nền",
gradient: "Chuyển sắc",
image: "Hình ảnh",
gradientDirection: "Hướng chuyển sắc",
chooseBackgroundImage: "Chọn ảnh nền",
effectsSection: "Hiệu ứng",
effectsActive: "đang hoạt động",
blurBackground: "Làm mờ nền",
intensity: "Cường độ",
addShadow: "Thêm bóng đổ",
opacity: "Độ mờ",
outputFormat: "Định dạng đầu ra",
edgeSmoothing: "Làm mịn viền",
edgeSmoothingOff: "Tắt",
edgeSmoothingLight: "Nhẹ",
edgeSmoothingMedium: "Vừa",
edgeSmoothingStrong: "Mạnh",
colorDecontamination: "Khử màu viền",
rendering: "Đang kết xuất...",
submit: "Xóa nền",
submitBatch: "Xóa nền ({count} tệp)",
progressLabel: "Đang xóa nền",
},
"remove-gif-background": {
quality: "Chất lượng",
qualityFast: "Nhanh",
qualityBalanced: "Cân bằng",
qualityBest: "Tốt nhất",
qualityNote:
"Mọi khung hình đều chạy qua mô hình, nên chất lượng cao hơn sẽ chậm hơn nhiều với các clip dài.",
outputFormat: "Định dạng đầu ra",
formatWebp: "WebP",
formatApng: "APNG",
formatGif: "GIF",
formatWebpHint: "WebP và APNG giữ được độ trong suốt đầy đủ, mượt mà.",
gifCaveat: "GIF chỉ hỗ trợ độ trong suốt 1-bit, nên viền trông sắc cứng.",
background: "Nền",
bgTransparent: "Trong suốt",
bgColor: "Màu nền",
bgGradient: "Chuyển sắc",
bgBlur: "Làm mờ",
bgImage: "Hình ảnh",
gradientStart: "Bắt đầu",
gradientEnd: "Kết thúc",
gradientAngle: "Góc ({deg}°)",
blurStrength: "Cường độ làm mờ ({value})",
shadow: "Thêm bóng đổ",
shadowStrength: "Độ mờ của bóng ({value})",
advanced: "Nâng cao",
edgeRefine: "Tinh chỉnh viền (mức {level})",
edgeRefineOff: "Tinh chỉnh viền: tắt",
decontaminate: "Khử màu tràn viền",
uploadBg: "Tải lên ảnh nền",
frameNote: "Xử lý mọi khung hình, nên ảnh động dài sẽ chậm. Khuyến nghị dùng GPU.",
submit: "Xóa nền",
submitBatch: "Xóa nền ({count} tệp)",
progressLabel: "Đang xóa nền khỏi các khung hình",
download: "Tải xuống",
},
upscale: {
scaleFactor: "Hệ số phóng đại",
quality: "Chất lượng",
enhanceFaces: "Nâng cao khuôn mặt",
noiseReduction: "Khử nhiễu",
noiseReductionHint:
"Làm mịn nhiễu và hạt. Giá trị cao hơn khử nhiễu nhiều hơn nhưng có thể làm mờ chi tiết.",
outputFormat: "Định dạng đầu ra",
submit: "Phóng to {scale}x",
submitBatch: "Phóng to {scale}x ({count} tệp)",
progressLabel: "Đang phóng to ảnh",
progressLabelBatch: "Đang phóng to {count} ảnh",
},
"erase-object": {
brushMode: "Cọ",
lassoMode: "Lasso",
brushSize: "Kích thước cọ",
fine: "Mảnh",
wide: "Rộng",
undo: "Hoàn tác",
clear: "Xóa",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
paintHint: "Tô lên các đối tượng bạn muốn xóa. Nhấn Ctrl+Z để hoàn tác.",
lassoHint: "Vẽ một vòng quanh đối tượng bạn muốn xóa. Nhấn Ctrl+Z để hoàn tác.",
submit: "Xóa đối tượng",
submitBatch: "Xóa tất cả ({count})",
progressLabel: "Đang xóa đối tượng",
},
ocr: {
quality: "Chất lượng",
enhanceBeforeScanning: "Nâng cao trước khi quét",
enhanceHint:
"Cải thiện độ tương phản cục bộ trước khi nhận dạng. Nhanh áp dụng trực tiếp; Cân bằng và Tốt nhất chỉ giữ biến thể khi điểm đã hiệu chỉnh cải thiện kết quả.",
fastKoreanUnsupported:
"OCR Nhanh không hỗ trợ tiếng Hàn. Hãy cài đặt gói OCR Chính xác rồi chọn Cân bằng hoặc Tốt nhất.",
language: "Ngôn ngữ",
autoDetect: "Tự động nhận diện",
extractedText: "Văn bản trích xuất",
noTextDetected: "Không phát hiện văn bản trong hình ảnh này",
characters: "{count} ký tự",
submit: "Trích xuất văn bản",
submitBatch: "Trích xuất văn bản ({count} tệp)",
progressLabel: "Đang trích xuất văn bản",
},
"ocr-pdf": {
quality: "Chất lượng",
language: "Ngôn ngữ",
autoDetect: "Tự động nhận diện",
pages: "Trang",
pagesPlaceholder: "tất cả, 1-3, 5",
pagesHint: "Nhập số trang hoặc phạm vi (vd. 1-3, 5, 8-10). Tối đa 50 trang.",
submit: "Trích xuất văn bản",
submitBatch: "Trích xuất văn bản ({count} tệp)",
progressLabel: "Đang trích xuất văn bản từ PDF",
},
"blur-faces": {
blurRadius: "Bán kính làm mờ",
blurLight: "Nhẹ",
blurHeavy: "Mạnh",
detectionSensitivity: "Độ nhạy phát hiện",
moreFaces: "Nhiều khuôn mặt hơn",
fewerFaces: "Ít khuôn mặt hơn",
submit: "Làm mờ khuôn mặt",
progressLabel: "Đang làm mờ khuôn mặt",
},
"enhance-faces": {
quality: "Chất lượng",
enhancementStrength: "Cường độ nâng cao",
onlyCenterFace: "Chỉ khuôn mặt ở giữa",
detectionSensitivity: "Độ nhạy phát hiện",
submit: "Nâng cao khuôn mặt",
submitBatch: "Nâng cao khuôn mặt ({count} tệp)",
progressLabel: "Đang nâng cao khuôn mặt",
},
"smart-crop": {
subjectFocus: "Lấy nét chủ thể",
faceFocus: "Lấy nét khuôn mặt",
autoTrim: "Tự động cắt viền",
customSize: "Kích thước tùy chỉnh",
socialPresets: "Mẫu mạng xã hội",
detectionStrategy: "Chiến lược phát hiện",
detectionStrategyHint:
"Sự chú ý tìm vùng nổi bật nhất. Entropy tìm vùng có nhiều chi tiết và thông tin nhất.",
attention: "Sự chú ý",
entropy: "Entropy",
padding: "Khoảng đệm",
paddingHint: "Khoảng trống thêm xung quanh vùng lấy nét",
outputQuality: "Chất lượng đầu ra",
outputQualityHint: "Cho đầu ra JPEG và WebP. PNG luôn không mất dữ liệu.",
subjectDescription:
"Phát hiện vùng thú vị nhất bằng phân tích nổi bật và cắt theo kích thước mục tiêu.",
framing: "Đóng khung",
facePadding: "Khoảng đệm khuôn mặt",
facePaddingHint: "Khoảng trống thêm xung quanh khuôn mặt phát hiện được",
fewerFalsePositives: "Ít phát hiện sai hơn",
faceDescription:
"Sử dụng AI phát hiện khuôn mặt để giữ khuôn mặt được đóng khung đúng. Chuyển sang Lấy nét chủ thể nếu không phát hiện khuôn mặt.",
trimTolerance: "Dung sai",
trimDescription:
"Mức độ khác biệt của pixel viền so với màu cạnh mà vẫn bị cắt. Cao hơn = cắt mạnh hơn.",
padToSquare: "Đệm thành hình vuông",
targetSizePx: "Kích thước mục tiêu (px)",
padColor: "Màu đệm",
trimHint:
'Xóa viền đồng màu xung quanh chủ thể. Bật "Đệm thành hình vuông" cho ảnh sẵn sàng thương mại điện tử.',
submitSubject: "Cắt thông minh",
submitFace: "Cắt khuôn mặt",
submitTrim: "Cắt viền",
},
imageEnhancement: {
enhancementMode: "Chế độ nâng cao",
auto: "Tự động",
portrait: "Chân dung",
landscape: "Phong cảnh",
lowLight: "Thiếu sáng",
food: "Ẩm thực",
document: "Tài liệu",
intensity: "Cường độ",
deepEnhance: "Nâng cao sâu (AI)",
deepEnhanceDescription: "Khử nhiễu và hiện tượng lỗi bằng AI",
deepEnhanceRequires: "Yêu cầu gói Phóng to & Nâng cao",
analyzingImage: "Đang phân tích hình ảnh...",
detectedIssues: "Vấn đề phát hiện được",
imageLooksGood: "Hình ảnh trông tốt. Tinh chỉnh bằng thanh trượt cường độ.",
issueUnderexposed: "Thiếu sáng",
issueOverexposed: "Quá sáng",
issueLowContrast: "Tương phản phẳng",
issueColorCast: "Sai lệch màu",
issueDesaturated: "Nhạt màu",
issueSoftFocus: "Mờ nét",
issueNoisy: "Nhiễu",
submit: "Nâng cao",
submitDeep: "Nâng cao sâu",
submitBatch: "Nâng cao ({count} tệp)",
submitDeepBatch: "Nâng cao sâu ({count} tệp)",
progressLabel: "Đang nâng cao hình ảnh",
progressLabelBatch: "Đang nâng cao {count} hình ảnh",
},
"noise-removal": {
denoisingTier: "Mức khử nhiễu",
quick: "Nhanh",
balanced: "Cân bằng",
quality: "Chất lượng",
maximum: "Tối đa",
quickDesc: "Nhanh, nhẹ",
balancedDesc: "Chất lượng tốt, tốc độ vừa phải",
qualityDesc: "AI, chậm hơn",
maximumDesc: "Mô hình AI tốt nhất, chậm nhất",
strength: "Cường độ",
subtle: "Nhẹ nhàng",
aggressive: "Mạnh mẽ",
detailPreservation: "Bảo toàn chi tiết",
smooth: "Mịn",
sharp: "Nét",
colorNoise: "Nhiễu màu",
heavy: "Nặng",
outputFormat: "Định dạng đầu ra",
gifAiWarning:
"Khử nhiễu AI cho tệp GIF chỉ xử lý khung hình đầu tiên. Với GIF động, hãy sử dụng mức Nhanh hoặc Cân bằng.",
submit: "Khử nhiễu",
submitBatch: "Khử nhiễu ({count} tệp)",
progressLabel: "Đang khử nhiễu",
progressLabelBatch: "Đang khử nhiễu {count} ảnh",
},
"red-eye-removal": {
sensitivity: "Độ nhạy",
strict: "Nghiêm ngặt",
aggressive: "Mạnh mẽ",
correctionStrength: "Cường độ sửa chữa",
subtle: "Nhẹ nhàng",
dark: "Đậm",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
submit: "Sửa mắt đỏ",
submitBatch: "Sửa mắt đỏ ({count} tệp)",
progressLabel: "Đang sửa mắt đỏ",
progressLabelBatch: "Đang sửa mắt đỏ {count} ảnh",
},
"restore-photo": {
scratchRemoval: "Xóa vết xước",
scratchRemovalDesc: "Phát hiện và sửa chữa vết xước, rách, vết bẩn",
faceEnhancement: "Nâng cao khuôn mặt",
faceEnhancementDesc: "Phục hồi khuôn mặt bị xuống cấp bằng CodeFormer AI",
faceFidelity: "Độ trung thực khuôn mặt",
enhanced: "Nâng cao",
faithful: "Trung thực",
noiseReduction: "Khử nhiễu",
noiseReductionDesc: "Khử hạt và nhiễu từ ảnh cũ",
denoiseStrength: "Cường độ khử nhiễu",
autoColorize: "Tự động tô màu",
autoColorizeDesc: "Thêm màu cho ảnh đen trắng bằng DDColor AI",
colorizeStrength: "Cường độ tô màu",
vivid: "Rực rỡ",
submit: "Phục chế ảnh",
submitBatch: "Phục chế ảnh ({count})",
progressLabel: "Đang phục chế ảnh",
progressLabelBatch: "Đang phục chế {count} ảnh",
},
"content-aware-resize": {
widthPx: "Chiều rộng (px)",
heightPx: "Chiều cao (px)",
resizeToSquare: "Đổi kích thước thành hình vuông",
protectFaces: "Bảo vệ khuôn mặt",
protectFacesHint:
"Phát hiện và bảo vệ vùng khuôn mặt khỏi bị xóa đường nối bằng phát hiện khuôn mặt",
smoothing: "Làm mịn",
edgeSensitivity: "Độ nhạy cạnh",
submit: "Thay đổi kích thước",
submitBatch: "Thay đổi kích thước ({count} tệp)",
progressLabel: "Đang thay đổi kích thước thông minh",
},
"ai-canvas-expand": {
quality: "Chất lượng",
fast: "Nhanh",
balanced: "Cân bằng",
highQuality: "Chất lượng cao",
fastDesc: "Xem trước nhanh, ít lượt AI",
balancedDesc: "Chất lượng tốt, tốc độ vừa phải",
highQualityDesc: "Kết quả tốt nhất, chậm hơn",
extendToAspectRatio: "Mở rộng theo tỷ lệ",
extendByPixels: "Mở rộng thêm (pixel)",
top: "Trên",
right: "Phải",
bottom: "Dưới",
left: "Trái",
newSize: "Kích thước mới: {width} x {height}",
submit: "Mở rộng khung vẽ",
submitBatch: "Mở rộng ({count} tệp)",
progressLabel: "Đang mở rộng khung vẽ",
},
colorize: {
aiModel: "Mô hình AI",
fast: "Nhanh",
fastDesc: "Kết quả nhanh",
balanced: "Cân bằng",
balancedDesc: "Tốt nhất hiện có",
best: "Tốt nhất",
bestDesc: "Chất lượng cao nhất",
colorIntensity: "Cường độ màu",
grayscaleLabel: "Xám",
subtleLabel: "Nhẹ nhàng",
naturalLabel: "Tự nhiên",
vividLabel: "Rực rỡ",
intensityHint: "Giá trị thấp tạo màu trầm hơn, kiểu hoài cổ.",
strength: "Cường độ tô màu",
submit: "Tô màu",
submitBatch: "Tô màu ({count} tệp)",
progressLabel: "Đang tô màu",
progressLabelBatch: "Đang tô màu {count} ảnh",
},
"passport-photo": {
country: "Quốc gia",
searchCountries: "Tìm kiếm quốc gia...",
noCountriesFound: "Không tìm thấy quốc gia",
customDimensions: "Kích thước tùy chỉnh",
documentType: "Loại giấy tờ",
dimensionsMm: "Kích thước (mm)",
dpi: "DPI",
pixelsPerInch: "pixel trên inch",
backgroundColor: "Màu nền",
maxFileSize: "Kích thước tệp tối đa",
noLimit: "Không giới hạn",
customKb: "Tùy chỉnh KB...",
uploadPortrait: "Tải lên ảnh chân dung",
uploadHint: "Kéo thả hoặc tải lên hình ảnh ở bảng bên trái để xem trước ảnh hộ chiếu",
analyzingPhoto: "Đang phân tích ảnh",
detectingLandmarks: "Đang phát hiện các điểm mốc khuôn mặt và xóa nền...",
generatePassportPhoto: "Tạo ảnh hộ chiếu",
generating: "Đang tạo...",
downloadPhoto: "Tải ảnh xuống",
faceCentered: "Khuôn mặt ở giữa",
headLevel: "Đầu thẳng",
lookingStraight: "Nhìn thẳng",
faceSize: "Kích thước khuôn mặt",
whatYouSee: "Những gì bạn thấy là những gì bạn tải xuống",
dragToAdjust: "Kéo để điều chỉnh",
scrollToZoom: "Cuộn để thu phóng",
photoGenerated: "Ảnh đã được tạo. Tải xuống từ bảng bên trái.",
},
"transcribe-audio": {
language: "Ngôn ngữ",
autoDetect: "Tự động phát hiện",
outputFormat: "Định dạng đầu ra",
plainText: "Văn bản thuần",
submit: "Phiên âm",
submitBatch: "Phiên âm ({count} tệp)",
progressLabel: "Đang phiên âm",
},
"auto-subtitles": {
language: "Ngôn ngữ",
autoDetect: "Tự động phát hiện",
format: "Định dạng phụ đề",
submit: "Tạo phụ đề",
submitBatch: "Tạo phụ đề ({count} tệp)",
progressLabel: "Đang tạo phụ đề",
},
"transparency-fixer": {
description: "Tải lên PNG có nền giả trong suốt và chúng tôi sẽ sửa chỉ với một cú nhấp.",
removeWatermark: "Xóa hình mờ",
removeWatermarkHelp: "Phát hiện và xóa hình mờ bán trong suốt",
requiresEraser: "Yêu cầu gói Xóa đối tượng",
advanced: "Nâng cao",
defringe: "Khử viền",
outputFormat: "Định dạng đầu ra",
submit: "Sửa trong suốt",
submitBatch: "Sửa trong suốt ({count} tệp)",
progressLabel: "Đang sửa trong suốt",
},
"background-replace": {
color: "Màu nền",
submit: "Thay đổi nền",
submitBatch: "Thay đổi nền ({count} tệp)",
progressLabel: "Đang thay đổi nền",
},
"blur-background": {
intensity: "Cường độ làm mờ",
submit: "Làm mờ nền",
submitBatch: "Làm mờ nền ({count} tệp)",
progressLabel: "Đang làm mờ nền",
},
"watermark-text": {
watermarkText: "Văn bản hình mờ",
fontSize: "Cỡ chữ",
color: "Màu sắc",
opacity: "Độ mờ",
position: "Vị trí",
rotation: "Xoay",
center: "Giữa",
topLeft: "Trên trái",
topRight: "Trên phải",
bottomLeft: "Dưới trái",
bottomRight: "Dưới phải",
tiled: "Lát gạch",
submit: "Thêm hình mờ",
submitBatch: "Thêm hình mờ ({count} tệp)",
progressLabel: "Đang thêm hình mờ",
},
"watermark-image": {
uploadWatermark: "Tải lên ảnh hình mờ",
position: "Vị trí",
opacity: "Độ mờ",
scale: "Tỷ lệ",
submit: "Áp dụng hình mờ",
submitBatch: "Áp dụng hình mờ ({count} tệp)",
},
"text-overlay": {
text: "Văn bản",
fontSize: "Cỡ chữ",
color: "Màu sắc",
position: "Vị trí",
top: "Trên",
center: "Giữa",
bottom: "Dưới",
backgroundBox: "Hộp nền",
backgroundColor: "Màu nền",
shadow: "Bóng đổ",
submit: "Thêm văn bản",
submitBatch: "Thêm văn bản ({count} tệp)",
progressLabel: "Đang thêm lớp phủ văn bản",
download: "Tải xuống",
defaultText: "Nhập văn bản tại đây",
},
compose: {
uploadOverlay: "Tải lên ảnh lớp phủ",
xPosition: "Vị trí X",
yPosition: "Vị trí Y",
opacity: "Độ mờ",
blendMode: "Chế độ hòa trộn",
submit: "Ghép ảnh",
},
"meme-generator": {
selectTemplate: "Chọn một mẫu từ bộ sưu tập hoặc tải lên ảnh của bạn để bắt đầu.",
chooseLayout: "Chọn bố cục văn bản cho ảnh tùy chỉnh của bạn.",
textContent: "Nội dung văn bản",
textStyle: "Kiểu văn bản",
font: "Phông chữ",
fontSize: "Cỡ chữ",
textColor: "Màu chữ",
strokeColor: "Màu viền chữ",
allCaps: "TẤT CẢ CHỮ HOA",
generate: "Tạo Meme",
generating: "Đang tạo...",
downloadMeme: "Tải xuống Meme",
backToGallery: "Quay lại bộ sưu tập",
},
info: {
loadingInfo: "Đang tải thông tin...",
filename: "Tên tệp",
fileSize: "Dung lượng tệp",
dimensions: "Kích thước",
format: "Định dạng",
channels: "Kênh",
colorSpace: "Không gian màu",
density: "Mật độ",
bitDepth: "Độ sâu bit",
progressive: "Luỹ tiến",
pages: "Trang",
hasAlpha: "Có kênh Alpha",
hasProfile: "Có cấu hình",
hasExif: "Có EXIF",
hasIcc: "Có ICC",
hasXmp: "Có XMP",
readInfo: "Đọc thông tin",
reading: "Đang đọc...",
channelStats: "Thống kê kênh",
yes: "Có",
no: "Không",
na: "N/A",
failedToRead: "Không thể đọc thông tin",
},
compare: {
uploadSecondImage: "Tải lên ảnh thứ hai",
similarity: "Độ giống nhau: {percent}%",
submit: "So sánh",
downloadDiff: "Tải xuống ảnh khác biệt",
},
"find-duplicates": {
preset: "Mẫu",
exact: "Chính xác",
similar: "Tương tự",
loose: "Lỏng",
exactDesc: "Bản sao giống hệt pixel, cùng ảnh ở định dạng khác.",
similarDesc: "Bản sao đã thay đổi kích thước, nén lại hoặc chỉnh sửa nhẹ.",
looseDesc: "Hình ảnh liên quan trực quan, cắt nhẹ, phơi sáng khác nhau.",
threshold: "Ngưỡng",
submit: "Quét tìm ảnh trùng",
scanning: "Đang quét...",
},
"color-palette": {
submit: "Trích xuất bảng màu",
extracting: "Đang trích xuất...",
dominantColors: "Màu chủ đạo",
clickToCopy: "Nhấp để sao chép",
},
"qr-generate": {
contentType: "Loại nội dung",
url: "URL",
text: "Văn bản",
wifi: "WiFi",
vcard: "vCard",
email: "Email",
phone: "Điện thoại",
sms: "SMS",
styling: "Kiểu dáng",
dotStyle: "Kiểu chấm",
cornerSquareStyle: "Kiểu ô vuông góc",
cornerDotStyle: "Kiểu chấm góc",
foregroundColor: "Màu tiền cảnh",
bgColor: "Màu nền",
logo: "Logo",
downloadFormat: "Định dạng tải xuống",
submit: "Tạo mã QR",
download: "Tải xuống mã QR",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "Tệp HTML",
htmlFile: "Tệp HTML",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "Định dạng đầu ra",
quality: "Chất lượng",
devicePreset: "Thiết bị",
viewportWidth: "Chiều rộng",
viewportHeight: "Chiều cao",
fullPage: "Toàn trang",
submit: "Chụp",
download: "Tải ảnh chụp",
capturing: "Đang chụp trang web...",
errorTimeout: "Trang tải quá lâu",
errorBlocked: "Không thể chụp URL này",
errorUnavailable: "Dịch vụ chụp ảnh không khả dụng",
errorFailed: "Không thể chụp trang",
placeholder: "Nhập URL và nhấn Chụp",
presets: {
desktop: "Máy tính",
tablet: "Máy tính bảng",
mobile: "Di động",
custom: "Tùy chỉnh",
},
},
"barcode-read": {
submit: "Quét mã vạch",
submitBatch: "Quét ({count} tệp)",
scanning: "Đang quét...",
noBarcodesFound: "Không tìm thấy mã vạch",
barcodesFound: "Tìm thấy {count} mã vạch",
barcodesFoundPlural: "Tìm thấy {count} mã vạch",
},
collage: {
template: "Mẫu",
aspectRatio: "Tỷ lệ khung hình",
gap: "Khoảng cách",
cornerRadius: "Bán kính bo góc",
backgroundColor: "Màu nền",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
submit: "Tạo ảnh ghép",
downloadCollage: "Tải xuống ảnh ghép",
},
stitch: {
direction: "Hướng",
horizontal: "Ngang",
vertical: "Dọc",
grid: "Lưới",
gridColumns: "Cột lưới",
resizeMode: "Chế độ kích thước",
fit: "Vừa vặn",
original: "Gốc",
stretchMode: "Kéo giãn",
cropMode: "Cắt",
alignment: "Căn chỉnh",
start: "Đầu",
center: "Giữa",
end: "Cuối",
gap: "Khoảng cách",
border: "Viền",
cornerRadius: "Bán kính bo góc",
backgroundColor: "Màu nền",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
submit: "Ghép nối ảnh",
},
split: {
modeGrid: "Lưới",
modeTileSize: "Kích thước ô",
presets: "Mẫu có sẵn",
columns: "Cột",
rows: "Hàng",
tileWidth: "Chiều rộng ô",
tileHeight: "Chiều cao ô",
outputFormat: "Định dạng đầu ra",
quality: "Chất lượng",
submit: "Tách ảnh",
downloadAll: "Tải tất cả (ZIP)",
},
border: {
presets: "Mẫu có sẵn",
borderWidth: "Độ rộng viền",
borderColor: "Màu viền",
padding: "Khoảng đệm",
paddingColor: "Màu khoảng đệm",
cornerRadius: "Bán kính bo góc",
shadow: "Bóng đổ",
shadowBlur: "Độ mờ bóng",
shadowOffsetX: "Lệch bóng X",
shadowOffsetY: "Lệch bóng Y",
shadowColor: "Màu bóng",
shadowOpacity: "Độ mờ bóng",
submit: "Thêm viền",
submitBatch: "Thêm viền ({count} tệp)",
progressLabel: "Đang thêm viền",
},
beautify: {
preset: "Mẫu",
backgroundType: "Loại nền",
solidColor: "Màu đơn",
linearGradient: "Chuyển sắc tuyến tính",
radialGradient: "Chuyển sắc tỏa tròn",
customImage: "Ảnh tùy chỉnh",
gradientAngle: "Góc chuyển sắc",
padding: "Khoảng đệm",
borderRadius: "Bán kính bo góc",
shadowPreset: "Mẫu bóng đổ",
deviceFrame: "Khung thiết bị",
submit: "Làm đẹp",
submitBatch: "Làm đẹp ({count} tệp)",
progressLabel: "Đang làm đẹp ảnh chụp màn hình",
},
"circle-crop": {
submit: "Cắt tròn",
submitBatch: "Cắt tròn ({count} tệp)",
progressLabel: "Đang cắt tròn",
},
duotone: {
shadow: "Màu tối",
highlight: "Màu sáng",
submit: "Áp dụng Duotone",
submitBatch: "Áp dụng Duotone ({count} tệp)",
progressLabel: "Đang áp dụng duotone",
},
"image-pad": {
target: "Tỷ lệ mục tiêu",
color: "Màu nền",
submit: "Đệm ảnh",
submitBatch: "Đệm ảnh ({count} tệp)",
progressLabel: "Đang đệm ảnh",
},
pixelate: {
blockSize: "Kích thước ô",
submit: "Làm khảm",
submitBatch: "Làm khảm ({count} tệp)",
progressLabel: "Đang làm khảm",
},
vignette: {
strength: "Cường độ",
color: "Màu viền tối",
submit: "Áp dụng Vignette",
submitBatch: "Áp dụng Vignette ({count} tệp)",
progressLabel: "Đang áp dụng vignette",
},
"gif-webp": {
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi hoạt ảnh",
},
histogram: {
submit: "Tạo biểu đồ",
submitBatch: "Tạo biểu đồ ({count} tệp)",
progressLabel: "Đang tạo biểu đồ",
},
"lqip-placeholder": {
width: "Chiều rộng",
blur: "Độ mờ",
submit: "Tạo ảnh giữ chỗ",
submitBatch: "Tạo ảnh giữ chỗ ({count} tệp)",
progressLabel: "Đang tạo ảnh giữ chỗ",
},
"sprite-sheet": {
columns: "Số cột",
padding: "Khoảng đệm",
background: "Màu nền",
submit: "Tạo Sprite Sheet",
submitBatch: "Tạo Sprite Sheet",
progressLabel: "Đang tạo sprite sheet",
},
"svg-to-raster": {
outputFormat: "Định dạng đầu ra",
sizing: "Kích thước",
scaleMode: "Tỷ lệ",
customMode: "Tùy chỉnh",
scalePresets: "Mẫu tỷ lệ",
dpiPresets: "Mẫu DPI",
customWidth: "Chiều rộng (px)",
customHeight: "Chiều cao (px)",
background: "Nền",
bgTransparent: "Trong suốt",
bgColor: "Màu nền",
quality: "Chất lượng",
submit: "Chuyển đổi SVG",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi SVG",
},
vectorize: {
preset: "Mẫu",
logo: "Logo",
illustration: "Minh họa",
photo: "Ảnh chụp",
sketch: "Phác thảo",
customPreset: "Tùy chỉnh",
colorMode: "Chế độ màu",
bw: "Đen trắng",
colorModeColor: "Màu",
threshold: "Ngưỡng",
colorPrecision: "Độ chính xác màu",
layerDifference: "Khác biệt lớp",
filterSpeckle: "Lọc đốm",
pathMode: "Chế độ đường dẫn",
cornerThreshold: "Ngưỡng góc",
invertColors: "Đảo ngược màu",
submit: "Véc-tơ hóa",
submitBatch: "Véc-tơ hóa ({count} tệp)",
progressLabel: "Đang véc-tơ hóa",
},
"gif-tools": {
mode: "Chế độ",
resize: "Thay đổi kích thước",
optimize: "Tối ưu",
speed: "Tốc độ",
reverse: "Đảo ngược",
extract: "Trích xuất",
rotateMode: "Xoay",
pixel: "Điểm ảnh",
percentage: "Phần trăm",
colors: "Màu sắc",
dither: "Phân tán",
effort: "Mức nỗ lực",
speedFactor: "Hệ số tốc độ",
loopControl: "Điều khiển lặp",
infinite: "Vô hạn",
once: "Một lần",
customLoop: "Tùy chỉnh",
loopCount: "Số lần lặp",
extractSingle: "Đơn lẻ",
extractRange: "Phạm vi",
extractAll: "Tất cả",
frameNumber: "Số khung hình",
frameStart: "Khung hình bắt đầu",
frameEnd: "Khung hình kết thúc",
extractFormat: "Định dạng",
submit: "Xử lý GIF",
submitBatch: "Xử lý ({count} tệp)",
progressLabel: "Đang xử lý GIF",
},
"image-to-base64": {
outputFormat: "Định dạng đầu ra",
keepOriginal: "Giữ nguyên gốc",
quality: "Chất lượng",
maxWidth: "Chiều rộng tối đa",
maxHeight: "Chiều cao tối đa",
submit: "Chuyển sang Base64",
submitBatch: "Chuyển đổi ({count} tệp)",
copyBase64: "Sao chép Base64",
copyDataUri: "Sao chép Data URI",
copyImgTag: "Sao chép thẻ <img>",
copyCssUrl: "Sao chép CSS url()",
},
"barcode-generate": {
text: "Văn bản",
type: "Loại mã vạch",
scale: "Tỷ lệ",
includeText: "Hiển thị văn bản",
submit: "Tạo mã vạch",
download: "Tải mã vạch",
},
"chart-maker": {
kind: "Loại biểu đồ",
title: "Tiêu đề",
width: "Chiều rộng",
height: "Chiều cao",
submit: "Tạo biểu đồ",
submitBatch: "Tạo biểu đồ ({count} tệp)",
progressLabel: "Đang tạo biểu đồ",
},
"enhance-faces-standalone": {
model: "Mô hình",
fast: "Nhanh",
balanced: "Cân bằng",
best: "Tốt nhất",
},
"convert-video": {
format: "Định dạng đầu ra",
quality: "Chất lượng",
high: "Cao",
balanced: "Cân bằng",
small: "Nhỏ nhất",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"compress-video": {
quality: "Mức nén",
light: "Nhẹ",
balanced: "Cân bằng",
strong: "Mạnh",
resolution: "Độ phân giải",
original: "Gốc",
submit: "Nén",
submitBatch: "Nén ({count} tệp)",
progressLabel: "Đang nén",
},
"trim-video": {
start: "Bắt đầu (giây)",
end: "Kết thúc (giây)",
precise: "Chính xác từng khung hình (mã hóa lại)",
submit: "Cắt",
submitBatch: "Cắt ({count} tệp)",
progressLabel: "Đang cắt",
},
"mute-video": {
submit: "Xóa âm thanh",
submitBatch: "Xóa âm thanh ({count} tệp)",
progressLabel: "Đang tắt tiếng",
},
"video-to-gif": {
fps: "Số khung hình/giây",
width: "Chiều rộng (px)",
start: "Bắt đầu (giây)",
duration: "Thời lượng (giây)",
submit: "Tạo GIF",
submitBatch: "Tạo GIF ({count} tệp)",
progressLabel: "Đang tạo GIF",
},
"resize-video": {
preset: "Mẫu có sẵn",
width: "Chiều rộng (px)",
height: "Chiều cao (px)",
hint: "Để trống một chiều để giữ tỷ lệ khung hình",
submit: "Đổi kích thước",
submitBatch: "Đổi kích thước ({count} tệp)",
progressLabel: "Đang đổi kích thước",
},
"crop-video": {
width: "Chiều rộng (px)",
height: "Chiều cao (px)",
x: "Lệch X",
y: "Lệch Y",
submit: "Cắt",
submitBatch: "Cắt ({count} tệp)",
progressLabel: "Đang cắt",
},
"rotate-video": {
transform: "Phép biến đổi",
cw90: "Xoay 90 theo chiều kim đồng hồ",
ccw90: "Xoay 90 ngược chiều kim đồng hồ",
rotate180: "Xoay 180",
hflip: "Lật ngang",
vflip: "Lật dọc",
submit: "Xoay",
submitBatch: "Xoay ({count} tệp)",
progressLabel: "Đang xoay",
},
"change-fps": {
fps: "Số khung hình/giây",
submit: "Đổi FPS",
submitBatch: "Đổi FPS ({count} tệp)",
progressLabel: "Đang đổi FPS",
},
"video-color": {
brightness: "Độ sáng",
contrast: "Độ tương phản",
saturation: "Độ bão hòa",
gamma: "Gamma",
submit: "Áp dụng",
submitBatch: "Áp dụng ({count} tệp)",
progressLabel: "Đang chỉnh màu",
},
"video-speed": {
factor: "Hệ số tốc độ",
keepPitch: "Giữ nguyên cao độ",
submit: "Đổi tốc độ",
submitBatch: "Đổi tốc độ ({count} tệp)",
progressLabel: "Đang đổi tốc độ",
},
"reverse-video": {
hint: "Giới hạn cho các đoạn dưới 5 phút",
submit: "Đảo ngược",
submitBatch: "Đảo ngược ({count} tệp)",
progressLabel: "Đang đảo ngược",
},
"video-loudnorm": {
hint: "Chuẩn hóa âm lượng theo tiêu chuẩn phát sóng EBU R128",
submit: "Chuẩn hóa",
submitBatch: "Chuẩn hóa ({count} tệp)",
progressLabel: "Đang chuẩn hóa",
},
"aspect-pad": {
target: "Tỷ lệ mục tiêu",
color: "Màu nền",
colorHint: "Mã màu HEX, ví dụ #000000",
submit: "Đệm",
submitBatch: "Đệm ({count} tệp)",
progressLabel: "Đang đệm",
},
"blur-pad": {
target: "Tỷ lệ mục tiêu",
blur: "Cường độ làm mờ",
submit: "Đệm",
submitBatch: "Đệm ({count} tệp)",
progressLabel: "Đang đệm",
},
"watermark-video": {
text: "Văn bản hình mờ",
position: "Vị trí",
fontSize: "Cỡ chữ",
opacity: "Độ đục",
color: "Màu",
colorHint: "Mã màu HEX, ví dụ #ffffff",
submit: "Thêm hình mờ",
submitBatch: "Thêm hình mờ ({count} tệp)",
progressLabel: "Đang thêm hình mờ",
},
"stabilize-video": {
smoothing: "Độ mượt",
hint: "Chạy hai lượt và mất nhiều thời gian hơn các công cụ khác",
submit: "Ổn định",
submitBatch: "Ổn định ({count} tệp)",
progressLabel: "Đang ổn định",
},
"gif-to-video": {
format: "Định dạng đầu ra",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"video-to-webp": {
fps: "Số khung hình/giây",
width: "Chiều rộng (px)",
quality: "Chất lượng",
loop: "Lặp hoạt ảnh",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"video-to-frames": {
mode: "Chế độ trích xuất",
modeAll: "Tất cả khung hình",
modeNth: "Mỗi khung hình thứ N",
modeTimestamps: "Mốc thời gian cụ thể",
n: "Lấy mỗi khung hình thứ N",
timestamps: "Mốc thời gian (giây)",
timestampsHint: "Phân cách bằng dấu phẩy, ví dụ 0.5, 2, 4.5",
format: "Định dạng ảnh",
submit: "Trích xuất khung hình",
submitBatch: "Trích xuất khung hình ({count} tệp)",
progressLabel: "Đang trích xuất khung hình",
},
"merge-videos": {
hint: "Các tệp được ghép theo thứ tự tải lên",
submit: "Ghép",
submitBatch: "Ghép ({count} tệp)",
progressLabel: "Đang ghép",
},
"replace-audio": {
hint: "Tải video lên trước, sau đó tải âm thanh",
submit: "Thay âm thanh",
submitBatch: "Thay âm thanh ({count} tệp)",
progressLabel: "Đang thay âm thanh",
},
"burn-subtitles": {
fontSize: "Cỡ chữ",
hint: "Tải lên video và tệp phụ đề (.srt hoặc .vtt)",
submit: "Gắn phụ đề",
submitBatch: "Gắn phụ đề ({count} tệp)",
progressLabel: "Đang gắn phụ đề",
},
"embed-subtitles": {
language: "Mã ngôn ngữ",
languageHint: "Mã ISO 639-2 ba chữ cái, ví dụ eng, spa, fra",
submit: "Nhúng phụ đề",
submitBatch: "Nhúng phụ đề ({count} tệp)",
progressLabel: "Đang nhúng phụ đề",
},
"extract-subtitles": {
submit: "Trích xuất phụ đề",
submitBatch: "Trích xuất phụ đề ({count} tệp)",
progressLabel: "Đang trích xuất phụ đề",
},
"images-to-video": {
secondsPerImage: "Giây mỗi ảnh",
resolution: "Độ phân giải",
fps: "Số khung hình/giây",
submit: "Tạo video",
submitBatch: "Tạo video ({count} tệp)",
progressLabel: "Đang tạo trình chiếu",
},
"video-metadata": {
hint: "Báo cáo siêu dữ liệu hiển thị trong kết quả",
submit: "Xóa siêu dữ liệu",
submitBatch: "Xóa siêu dữ liệu ({count} tệp)",
progressLabel: "Đang xóa siêu dữ liệu",
},
"convert-audio": {
format: "Định dạng đầu ra",
bitrate: "Tốc độ bit (kbps)",
sampleRate: "Tần số lấy mẫu (Hz)",
sampleRatePreserve: "Giữ nguyên gốc",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"trim-audio": {
start: "Bắt đầu (giây)",
end: "Kết thúc (giây)",
submit: "Cắt",
submitBatch: "Cắt ({count} tệp)",
progressLabel: "Đang cắt",
},
"extract-audio": {
format: "Định dạng đầu ra",
submit: "Trích xuất",
submitBatch: "Trích xuất ({count} tệp)",
progressLabel: "Đang trích xuất",
},
"volume-adjust": {
"gain-db": "Khuếch đại (dB)",
submit: "Chỉnh âm lượng",
submitBatch: "Chỉnh âm lượng ({count} tệp)",
progressLabel: "Đang chỉnh âm lượng",
},
"normalize-audio": {
hint: "Chuẩn hóa âm lượng EBU R128",
submit: "Chuẩn hóa",
submitBatch: "Chuẩn hóa ({count} tệp)",
progressLabel: "Đang chuẩn hóa",
},
"fade-audio": {
"fade-in-s": "Tăng dần (giây)",
"fade-out-s": "Giảm dần (giây)",
submit: "Áp dụng hiệu ứng",
submitBatch: "Áp dụng hiệu ứng ({count} tệp)",
progressLabel: "Đang áp dụng hiệu ứng",
},
"reverse-audio": {
submit: "Đảo ngược",
submitBatch: "Đảo ngược ({count} tệp)",
progressLabel: "Đang đảo ngược",
},
"audio-speed": {
factor: "Hệ số tốc độ",
submit: "Đổi tốc độ",
submitBatch: "Đổi tốc độ ({count} tệp)",
progressLabel: "Đang đổi tốc độ",
},
"pitch-shift": {
semitones: "Nửa cung",
hint: "Không được phép chọn 0 nửa cung",
submit: "Dịch cao độ",
submitBatch: "Dịch cao độ ({count} tệp)",
progressLabel: "Đang dịch cao độ",
},
"audio-channels": {
mode: "Chế độ kênh",
"stereo-to-mono": "Stereo sang mono",
"mono-to-stereo": "Mono sang stereo",
swap: "Hoán đổi trái/phải",
submit: "Chuyển đổi kênh",
submitBatch: "Chuyển đổi kênh ({count} tệp)",
progressLabel: "Đang chuyển đổi kênh",
},
"silence-removal": {
"threshold-db": "Ngưỡng im lặng (dB)",
"min-silence-s": "Thời lượng im lặng tối thiểu (giây)",
submit: "Xóa khoảng lặng",
submitBatch: "Xóa khoảng lặng ({count} tệp)",
progressLabel: "Đang xóa khoảng lặng",
},
"noise-reduction": {
strength: "Cường độ",
light: "Nhẹ",
medium: "Vừa",
strong: "Mạnh",
submit: "Giảm tiếng ồn",
submitBatch: "Giảm tiếng ồn ({count} tệp)",
progressLabel: "Đang giảm tiếng ồn",
},
"merge-audio": {
format: "Định dạng đầu ra",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "Các tệp sẽ được ghép theo thứ tự tải lên",
submit: "Ghép âm thanh",
submitBatch: "Ghép âm thanh ({count} tệp)",
progressLabel: "Đang ghép âm thanh",
},
"split-audio": {
mode: "Chế độ tách",
time: "Theo thời gian",
parts: "Phần bằng nhau",
silence: "Theo khoảng lặng",
"segment-s": "Độ dài đoạn (giây)",
"num-parts": "Số phần",
"threshold-db": "Ngưỡng im lặng (dB)",
"min-silence-s": "Thời lượng im lặng tối thiểu (giây)",
submit: "Tách âm thanh",
submitBatch: "Tách âm thanh ({count} tệp)",
progressLabel: "Đang tách âm thanh",
},
"ringtone-maker": {
"start-s": "Thời điểm bắt đầu (giây)",
"duration-s": "Thời lượng (giây)",
"max-hint": "Tối đa 30 giây",
submit: "Tạo nhạc chuông",
submitBatch: "Tạo nhạc chuông ({count} tệp)",
progressLabel: "Đang tạo nhạc chuông",
},
"waveform-image": {
width: "Chiều rộng (px)",
height: "Chiều cao (px)",
color: "Màu dạng sóng",
submit: "Tạo dạng sóng",
submitBatch: "Tạo dạng sóng ({count} tệp)",
progressLabel: "Đang tạo dạng sóng",
},
"audio-metadata": {
strip: "Xóa toàn bộ siêu dữ liệu",
title: "Tiêu đề",
artist: "Nghệ sĩ",
album: "Album",
submit: "Áp dụng siêu dữ liệu",
submitBatch: "Áp dụng siêu dữ liệu ({count} tệp)",
progressLabel: "Đang áp dụng siêu dữ liệu",
},
"merge-pdf": {
addFiles: "Thêm PDF để ghép",
needTwo: "Cần ít nhất hai tệp PDF",
orderHint: "{count} PDF sẽ được ghép theo thứ tự này",
submit: "Ghép",
submitBatch: "Ghép ({count} tệp)",
progressLabel: "Đang ghép",
},
"split-pdf": {
mode: "Chế độ tách",
range: "Phạm vi trang",
rangeHint: "ví dụ: 1-3, 5, 7-z",
everyN: "Số trang mỗi phần",
submit: "Tách",
submitBatch: "Tách ({count} tệp)",
progressLabel: "Đang tách",
},
"compress-pdf": {
preset: "Cài đặt chất lượng",
screen: "Màn hình (nhỏ nhất)",
ebook: "Ebook (cân bằng)",
printer: "Máy in (chất lượng tốt nhất)",
submit: "Nén",
submitBatch: "Nén ({count} tệp)",
progressLabel: "Đang nén",
bestEffortHint:
"Mức tối đa trong khả năng. PDF chứa hình ảnh sẽ đạt gần mức này; PDF chỉ có văn bản có thể không thu nhỏ được xuống kích thước này.",
targetReached: "Đã đạt mục tiêu {target} (kết quả: {size}).",
targetMissed:
"Không thể đạt {target}. Kích thước nhỏ nhất có thể đạt là {size} vì PDF này chủ yếu là văn bản hoặc vector, mà nén ảnh không thể thu nhỏ.",
},
"rotate-pdf": {
angle: "Góc xoay",
range: "Phạm vi trang",
rangeHint: "ví dụ: 1-3, 5, 1-z (tất cả trang)",
submit: "Xoay",
submitBatch: "Xoay ({count} tệp)",
progressLabel: "Đang xoay",
},
"convert-document": {
format: "Định dạng đầu ra",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"convert-presentation": {
format: "Định dạng đầu ra",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"convert-spreadsheet": {
format: "Định dạng đầu ra",
hint: "Bảng tính nhiều trang sẽ xuất trang đầu tiên sang CSV.",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"excel-to-pdf": {
submit: "Chuyển sang PDF",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"powerpoint-to-pdf": {
submit: "Chuyển sang PDF",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"word-to-pdf": {
submit: "Chuyển sang PDF",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"extract-pages": {
range: "Phạm vi trang",
rangeHint: "ví dụ: 1-3, 5, 7-z",
submit: "Trích xuất",
submitBatch: "Trích xuất ({count} tệp)",
progressLabel: "Đang trích xuất",
},
"remove-pages": {
pages: "Các trang cần xóa",
pagesHint: "ví dụ: 2, 4-6, z (trang cuối)",
submit: "Xóa",
submitBatch: "Xóa ({count} tệp)",
progressLabel: "Đang xóa",
},
"organize-pdf": {
order: "Thứ tự trang",
orderHint: "ví dụ: 3,1,2 hoặc 1-z (giữ nguyên)",
submit: "Sắp xếp lại",
submitBatch: "Sắp xếp lại ({count} tệp)",
progressLabel: "Đang sắp xếp lại",
},
"protect-pdf": {
userPassword: "Mật khẩu người dùng",
ownerPassword: "Mật khẩu chủ sở hữu (tùy chọn)",
ownerPasswordHint: "Mặc định dùng mật khẩu người dùng nếu để trống",
submit: "Bảo vệ",
submitBatch: "Bảo vệ ({count} tệp)",
progressLabel: "Đang mã hóa",
},
"unlock-pdf": {
password: "Mật khẩu",
submit: "Mở khóa",
submitBatch: "Mở khóa ({count} tệp)",
progressLabel: "Đang giải mã",
},
"repair-pdf": {
submit: "Sửa chữa",
submitBatch: "Sửa chữa ({count} tệp)",
progressLabel: "Đang sửa chữa",
},
"linearize-pdf": {
submit: "Tối ưu hóa",
submitBatch: "Tối ưu hóa ({count} tệp)",
progressLabel: "Đang tuyến tính hóa",
},
"grayscale-pdf": {
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"pdfa-convert": {
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"crop-pdf": {
margin: "Lề (điểm)",
submit: "Cắt",
submitBatch: "Cắt ({count} tệp)",
progressLabel: "Đang cắt",
},
"nup-pdf": {
perSheet: "Số trang mỗi tờ",
submit: "Sắp xếp",
submitBatch: "Sắp xếp ({count} tệp)",
progressLabel: "Đang sắp xếp",
},
"booklet-pdf": {
perSheet: "Số trang mỗi tờ",
submit: "Tạo sách nhỏ",
submitBatch: "Tạo sách nhỏ ({count} tệp)",
progressLabel: "Đang tạo sách nhỏ",
},
"watermark-pdf": {
text: "Nội dung hình mờ",
position: "Vị trí",
fontSize: "Cỡ chữ",
opacity: "Độ mờ",
rotation: "Góc xoay",
submit: "Đóng hình mờ",
submitBatch: "Đóng hình mờ ({count} tệp)",
progressLabel: "Đang đóng hình mờ",
},
"pdf-page-numbers": {
position: "Vị trí",
fontSize: "Cỡ chữ",
submit: "Thêm số trang",
submitBatch: "Thêm số trang ({count} tệp)",
progressLabel: "Đang đánh số trang",
},
"flatten-pdf": {
submit: "Làm phẳng",
submitBatch: "Làm phẳng ({count} tệp)",
progressLabel: "Đang làm phẳng",
},
"sign-pdf": {
yourSignatures: "Chữ ký của bạn",
newSignature: "Tạo mới",
clickToPlace: "Nhấp vào một chữ ký để đặt nó lên trang hiện tại.",
selectedSignature: "Chữ ký đã chọn",
dragToAdjust: "Kéo các tay cầm để thay đổi kích thước hoặc xoay.",
disclaimer:
"Thêm một hình ảnh chữ ký trực quan. Đây không phải là chữ ký số dựa trên chứng chỉ.",
signing: "Đang ký…",
signingPercent: "Đang ký… {percent}%",
downloadSigned: "Tải PDF đã ký",
addFirst: "Thêm ít nhất một chữ ký trước khi tải xuống.",
loadFailed:
"Không thể hiển thị PDF này. Tệp có thể bị hỏng hoặc được bảo vệ bằng mật khẩu; nếu tệp được mã hóa, hãy xóa mật khẩu bằng công cụ Mở khóa PDF trước.",
pad: {
title: "Tạo chữ ký",
draw: "Vẽ",
type: "Nhập",
upload: "Tải lên",
color: "Màu",
pen: "Bút",
namePlaceholder: "Nhập tên của bạn",
yourName: "Tên của bạn",
remember: "Ghi nhớ trên thiết bị này",
save: "Lưu và đặt",
uploadHint: "Thả PNG / JPG, hoặc nhấp để chọn. PNG trong suốt hoạt động tốt nhất.",
},
},
"redact-pdf": {
terms: "Từ cần che",
termsHint: "Mỗi dòng một từ (tối đa 50)",
caseSensitive: "Phân biệt chữ hoa/thường",
submit: "Che thông tin",
submitBatch: "Che thông tin ({count} tệp)",
progressLabel: "Đang che thông tin",
},
"pdf-to-text": {
submit: "Trích xuất văn bản",
submitBatch: "Trích xuất văn bản ({count} tệp)",
progressLabel: "Đang trích xuất",
},
"pdf-to-word": {
hint: "Phù hợp nhất cho PDF dạng văn bản; trang quét cần OCR",
submit: "Chuyển sang Word",
submitBatch: "Chuyển sang Word ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"pdf-metadata": {
title: "Tiêu đề",
author: "Tác giả",
subject: "Chủ đề",
keywords: "Từ khóa",
submit: "Đặt siêu dữ liệu",
submitBatch: "Đặt siêu dữ liệu ({count} tệp)",
progressLabel: "Đang đặt siêu dữ liệu",
},
"html-to-pdf": {
hint: "Tài nguyên từ xa bị tắt để bảo vệ quyền riêng tư.",
submit: "Chuyển sang PDF",
submitBatch: "Chuyển sang PDF ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"markdown-to-docx": {
submit: "Chuyển sang DOCX",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"markdown-to-html": {
hint: "Hình ảnh từ xa trong nguồn được giữ nguyên ở đầu ra.",
submit: "Chuyển sang HTML",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"markdown-to-pdf": {
hint: "Tài nguyên từ xa bị tắt để bảo vệ quyền riêng tư.",
submit: "Chuyển sang PDF",
submitBatch: "Chuyển sang PDF ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"epub-convert": {
format: "Định dạng đầu ra",
hint: "Tài nguyên từ xa trong sách sẽ không được tải về.",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"to-epub": {
submit: "Chuyển sang EPUB",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"csv-excel": {
sheet: "Số trang tính",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"csv-json": {
pretty: "Định dạng đẹp",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"json-xml": {
pretty: "Định dạng đẹp",
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"split-csv": {
rowsPerFile: "Số hàng mỗi tệp",
keepHeader: "Giữ tiêu đề trong mỗi tệp",
submit: "Tách",
submitBatch: "Tách ({count} tệp)",
progressLabel: "Đang tách",
},
"merge-csvs": {
submit: "Ghép",
submitBatch: "Ghép ({count} tệp)",
progressLabel: "Đang ghép",
},
"yaml-json": {
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"xml-to-csv": {
submit: "Chuyển đổi",
submitBatch: "Chuyển đổi ({count} tệp)",
progressLabel: "Đang chuyển đổi",
},
"create-zip": {
submit: "Tạo ZIP",
submitBatch: "Tạo ZIP ({count} tệp)",
progressLabel: "Đang nén",
},
"extract-zip": {
submit: "Giải nén",
submitBatch: "Giải nén ({count} tệp)",
progressLabel: "Đang giải nén",
},
},
urlImport: {
title: "Nhập từ URL",
placeholder: "Dán URL hình ảnh, mỗi dòng một URL...",
importButton: "Nhập URL",
addButton: "Thêm {count} tệp",
adding: "Đang thêm...",
retryButton: "Thử lại",
cancelButton: "Hủy",
readyCount: "{count} sẵn sàng",
failedStatus: "Thất bại",
},
comparison: {
original: "Gốc",
processed: "Đã xử lý",
before: "Trước",
after: "Sau",
savings: "Tiết kiệm",
},
toolPage: {
emptyPrompt: "Kéo thả hoặc tải lên hình ảnh để bắt đầu",
filesCount: "Tệp ({count})",
addMore: "+ Thêm",
clearAll: "Xóa tất cả",
acceptDescription: "Chỉ tệp {exts}",
notFound: "Không tìm thấy công cụ",
configureAndGenerate: "Cấu hình cài đặt và tạo.",
processingFailed: "Xử lý thất bại cho tệp này",
conversionComplete: "Chuyển đổi hoàn tất",
cannotPreviewDownload:
"Không thể xem trước tệp {type} trong trình duyệt. Sử dụng nút tải xuống để lưu tệp.",
generatingPreview: "Đang tạo bản xem trước...",
cannotPreviewWillProcess:
"Không thể xem trước tệp {ext} trong trình duyệt. Công cụ vẫn sẽ xử lý tệp này bình thường.",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageCounter: "{current} / {total}",
settingsLabel: "Cài đặt",
downloadAllZip: "Tải tất cả (ZIP)",
hideSettings: "Ẩn cài đặt",
imageArea: "Vùng xem trước",
disabledByAdmin: "Công cụ này đã bị quản trị viên vô hiệu hóa",
browseOtherTools: "Duyệt công cụ khác",
privacyNote: "Tệp được xử lý trên máy chủ của bạn và không bao giờ rời khỏi mạng",
applyAndDownload: "Áp dụng và tải xuống",
andMore: "và {count} nữa",
importFromFiles: "Nhập từ Tệp",
saveToFiles: "Lưu vào Tệp",
savedToFiles: "Đã lưu vào Tệp",
librarySaveTitle: "Tệp này lấy từ Tệp của bạn",
librarySaveAsNew: "Lưu kết quả thành tệp mới",
librarySaveAsNewHint: "Giữ nguyên tệp gốc trong Tệp của bạn",
libraryOverwrite: "Ghi đè tệp gốc",
libraryOverwriteHint: "Kết quả sẽ thay thế tệp gốc trong Tệp của bạn",
viewInFiles: "Xem trong Tệp",
adjustSettings: "Điều chỉnh cài đặt",
startOver: "Bắt đầu lại với tệp mới",
newFile: "Tệp mới",
previewUnavailable: "Xem trước sẽ có sau khi xử lý",
generatePreview: "Tạo xem trước",
previewFailed: "Tạo xem trước thất bại",
backToTools: "Quay lại Công cụ",
original: "Gốc",
processed: "Đã xử lý",
saved: "Đã lưu",
noChange: "không thay đổi",
download: "Tải xuống",
settingsSaved: "Cài đặt của bạn đã được lưu.",
tryAgain: "Thử lại",
tryDifferentFile: "Thử tệp khác",
batchPartialSuccess: "{success} trong {total} đã xử lý. {failed} thất bại.",
dataResultsHint: "Kết quả hiển thị ở trên. Dùng nút sao chép trong bảng kết quả.",
downloadAsFile: "Tải xuống dạng tệp",
downloadAll: "Tải xuống tất cả",
downloadFiles: "Tải xuống {count} tệp",
audioDecodeUnsupported: "Định dạng âm thanh này không thể xem trước trong trình duyệt",
},
homePage: {
generatingPreview: "Đang tạo bản xem trước...",
loadingPreview: "Đang tải bản xem trước...",
changeFile: "Đổi tệp",
quickActions: "Thao tác nhanh",
allTools: "Tất cả công cụ",
searchPlaceholder: "Tìm kiếm {count} công cụ...",
recent: "Gần đây",
pinned: "Đã ghim",
popular: "Phổ biến",
browseByCategory: "Duyệt theo danh mục",
gettingStarted: "Bắt đầu",
noToolsMatch: "Không tìm thấy công cụ '{query}'",
clearSearch: "Xóa tìm kiếm",
requestToolCta: "Yêu cầu '{query}'",
requestToolBelowResults: "Không tìm thấy? Yêu cầu một công cụ",
all: "Tất cả",
documents: "PDF",
data: "Tệp",
pdf: "PDF",
files: "Tệp",
toolCount: "{count} công cụ",
heading: "Công cụ SnapOtter",
},
fullscreenGrid: {
searchPlaceholder: "Tìm kiếm công cụ...",
hideDetails: "Ẩn chi tiết",
showDetails: "Hiển thị chi tiết",
switchToSidebar: "Chuyển sang chế độ thanh bên",
sidebarButton: "Thanh bên",
noToolsFound: "Không tìm thấy công cụ",
tryDifferent: "Thử từ khóa tìm kiếm khác",
},
editor: {
menu: {
file: {
label: "Tệp",
new: "Mới",
open: "Mở",
save: "Lưu",
exportAs: "Xuất dưới dạng...",
quickExportPng: "Xuất nhanh PNG",
close: "Đóng",
},
edit: {
label: "Chỉnh sửa",
undo: "Hoàn tác",
redo: "Làm lại",
cut: "Cắt",
copy: "Sao chép",
copyMerged: "Sao chép đã gộp",
paste: "Dán",
pasteInPlace: "Dán tại chỗ",
delete: "Xóa",
freeTransform: "Biến đổi tự do",
transform: {
label: "Biến đổi",
scale: "Thu phóng",
rotate: "Xoay",
skew: "Nghiêng",
flipHorizontal: "Lật ngang",
flipVertical: "Lật dọc",
},
},
image: {
label: "Hình ảnh",
imageSize: "Kích thước hình ảnh...",
canvasSize: "Kích thước khung vẽ...",
rotation: {
label: "Xoay hình ảnh",
cw90: "90° theo chiều kim đồng hồ",
ccw90: "90° ngược chiều kim đồng hồ",
r180: "180°",
flipHorizontal: "Lật ngang",
flipVertical: "Lật dọc",
},
trim: "Cắt viền",
adjustments: {
label: "Điều chỉnh",
brightnessContrast: "Độ sáng/Độ tương phản",
hueSaturation: "Sắc độ/Độ bão hòa",
colorBalance: "Cân bằng màu",
levels: "Mức độ",
curves: "Đường cong",
},
},
layer: {
label: "Lớp",
newLayer: "Lớp mới",
duplicateLayer: "Nhân đôi lớp",
deleteLayer: "Xóa lớp",
arrange: {
label: "Sắp xếp",
bringToFront: "Đưa lên trước",
bringForward: "Đưa lên một bậc",
sendBackward: "Đưa xuống một bậc",
sendToBack: "Đưa xuống cuối",
},
mergeDown: "Gộp xuống",
flattenImage: "Làm phẳng hình ảnh",
},
select: {
label: "Chọn",
all: "Tất cả",
deselect: "Bỏ chọn",
inverse: "Đảo ngược",
colorRange: "Phạm vi màu...",
},
filter: {
label: "Bộ lọc",
blur: {
label: "Làm mờ",
gaussian: "Làm mờ Gaussian",
motion: "Làm mờ chuyển động",
radial: "Làm mờ tỏa tròn",
surface: "Làm mờ bề mặt",
},
sharpen: {
label: "Làm nét",
sharpen: "Làm nét",
unsharpMask: "Mặt nạ không sắc nét",
},
noise: {
label: "Nhiễu",
addNoise: "Thêm nhiễu",
reduceNoise: "Giảm nhiễu",
},
pixelate: {
label: "Khảm điểm ảnh",
pixelate: "Khảm điểm ảnh",
mosaic: "Khảm",
},
stylize: {
label: "Phong cách hóa",
emboss: "Dập nổi",
solarize: "Phơi sáng",
posterize: "Áp phích hóa",
},
grayscale: "Xám",
sepia: "Nâu đỏ",
invert: "Đảo ngược",
},
view: {
label: "Xem",
zoomIn: "Phóng to",
zoomOut: "Thu nhỏ",
fitOnScreen: "Vừa màn hình",
actualPixels: "Pixel thực tế",
rulers: "Thước kẻ",
grid: "Lưới",
guides: "Đường dẫn",
snap: "Hút dính",
panels: "Bảng điều khiển",
},
},
menuBar: {
backTitle: "Quay lại SnapOtter",
},
welcome: {
ariaLabel: "Vùng thả hình ảnh",
heading: "Trình chỉnh sửa ảnh",
dropDescription: "Kéo thả hình ảnh vào đây để bắt đầu",
openImageButton: "Mở hình ảnh",
newDocumentButton: "Tài liệu mới",
pasteHint: "Hoặc dán từ bộ nhớ tạm (Ctrl+V)",
},
mobile: {
heading: "Khuyến nghị dùng máy tính",
description:
"Trình chỉnh sửa ảnh hoạt động tốt nhất trên màn hình máy tính. Vui lòng chuyển sang thiết bị có màn hình lớn hơn để có trải nghiệm chỉnh sửa đầy đủ.",
},
errors: {
serverDecodeFailed: "Máy chủ giải mã thất bại",
},
shapes: {
shape: "Hình",
fill: "Tô màu",
stroke: "Viền",
strokeWidth: "Độ rộng",
cornerRadius: "Bán kính",
sides: "Cạnh",
points: "Đỉnh",
dashStyle: "Nét đứt",
solid: "Liền",
dashed: "Gạch ngang",
dotted: "Chấm",
none: "Không",
opacity: "Độ mờ",
rectangle: "Hình chữ nhật",
ellipse: "Hình elip",
line: "Đường thẳng",
arrow: "Mũi tên",
polygon: "Đa giác",
star: "Ngôi sao",
},
},
settings: {
heading: "Cài đặt",
nav: {
general: "Chung",
systemSettings: "Cài đặt hệ thống",
security: "Bảo mật",
people: "Thành viên",
teams: "Nhóm",
roles: "Vai trò",
auditLog: "Nhật ký kiểm tra",
usage: "Sử dụng",
apiKeys: "Khóa API",
aiFeatures: "Tính năng AI",
tools: "Công cụ",
about: "Giới thiệu",
},
general: {
heading: "Chung",
description: "Tùy chọn người dùng và cài đặt hiển thị.",
loading: "Đang tải...",
logOut: "Đăng xuất",
defaultToolViewLabel: "Chế độ xem công cụ mặc định",
defaultToolViewDescription: "Cách hiển thị công cụ trên trang chủ",
sidebarOption: "Thanh bên",
fullscreenGridOption: "Lưới toàn màn hình",
appVersionLabel: "Phiên bản ứng dụng",
appVersionDescription: "Phiên bản hiện tại của SnapOtter",
saveButton: "Lưu cài đặt",
saveSuccess: "Đã lưu cài đặt.",
saveFailed: "Lưu cài đặt thất bại.",
},
system: {
heading: "Cài đặt hệ thống",
description: "Cấu hình phía máy chủ và giới hạn.",
fileUploadLimitLabel: "Giới hạn tải lên (MB)",
fileUploadLimitDescription: "Dung lượng tệp tối đa mỗi lần tải lên",
defaultThemeLabel: "Giao diện mặc định",
defaultThemeDescription: "Giao diện áp dụng cho phiên mới",
lightOption: "Sáng",
darkOption: "Tối",
systemOption: "Hệ thống",
languageLabel: "Ngôn ngữ",
languageDescription: "Ngôn ngữ giao diện",
loginAttemptLimitLabel: "Giới hạn đăng nhập",
loginAttemptLimitDescription: "Số lần đăng nhập thất bại tối đa mỗi phút trước khi khóa",
fileManagementHeading: "Quản lý tệp",
maxFileAgeLabel: "Thời gian lưu tệp tối đa (giờ)",
maxFileAgeDescription: "Thời gian lưu giữ tệp đã xử lý trước khi tự động dọn dẹp",
startupCleanupLabel: "Dọn dẹp khi khởi động",
startupCleanupDescription: "Dọn dẹp tệp tạm cũ khi máy chủ khởi động",
saveButton: "Lưu cài đặt",
saveSuccess: "Đã lưu cài đặt.",
saveFailed: "Lưu cài đặt thất bại.",
limitsAndResources: "Giới hạn & Tài nguyên",
maxFileSize: "Dung lượng tệp tối đa",
maxBatchSize: "Kích thước lô tối đa",
concurrentJobs: "Tác vụ đồng thời",
workerThreads: "Luồng xử lý",
maxPipelineSteps: "Số bước Pipeline tối đa",
processingTimeout: "Thời gian chờ xử lý",
rateLimitPerMin: "Giới hạn tốc độ (yêu cầu/phút)",
unlimited: "Không giới hạn",
auto: "Tự động",
envOverride: "Được đặt bởi biến môi trường",
maxCanvasPixels: "Pixel khung vẽ tối đa",
maxSvgSize: "Kích thước SVG tối đa",
maxSplitGrid: "Lưới tách tối đa",
maxPdfPages: "Số trang PDF tối đa",
sessionDuration: "Thời lượng phiên",
supportBundleButton: "Tải gói hỗ trợ",
supportBundleDescription:
"Tải tệp zip chẩn đoán với cấu hình đã ẩn, nhật ký và dữ liệu công việc để khắc phục sự cố.",
supportBundleFailed: "Không thể tải gói hỗ trợ.",
},
privacy: {
title: "Quyền riêng tư",
description:
"Phân tích sản phẩm ẩn danh giúp cải thiện SnapOtter. Tính năng này được bật theo mặc định và do quản trị viên thiết lập cho toàn bộ phiên bản.",
analyticsLabel: "Phân tích sản phẩm ẩn danh",
analyticsDescription:
"Chia sẻ dữ liệu sử dụng ẩn danh (công cụ nào chạy, thời lượng, mã lỗi) và báo cáo sự cố. Không có địa chỉ IP, không có danh tính tài khoản. Chúng tôi không bao giờ thu thập tên tệp, nội dung tệp, kết quả OCR, siêu dữ liệu hình ảnh hay văn bản tài liệu của bạn. Tắt tùy chọn này để dừng tất cả.",
},
security: {
heading: "Bảo mật",
description: "Cài đặt mật khẩu và xác thực.",
changePasswordHeading: "Đổi mật khẩu",
currentPasswordPlaceholder: "Mật khẩu hiện tại",
newPasswordPlaceholder: "Mật khẩu mới",
confirmPasswordPlaceholder: "Xác nhận mật khẩu mới",
passwordsMismatch: "Mật khẩu không khớp",
passwordTooShort: "Mật khẩu phải có ít nhất 4 ký tự",
changeSuccess: "Đã đổi mật khẩu thành công",
changeFailed: "Đổi mật khẩu thất bại",
currentPasswordIncorrect: "Mật khẩu hiện tại không đúng",
changePasswordButton: "Đổi mật khẩu",
loginAttemptLimitNote: "Giới hạn đăng nhập có thể được cấu hình trong Cài đặt hệ thống.",
twoFactorHeading: "Xác thực hai yếu tố",
twoFactorDescription: "Thêm một lớp bảo mật cho tài khoản của bạn bằng ứng dụng xác thực.",
twoFactorEnabledStatus: "Xác thực hai yếu tố đang được bật.",
twoFactorDisabledStatus: "Xác thực hai yếu tố chưa được bật.",
enableTwoFactorButton: "Bật xác thực hai yếu tố",
disableTwoFactorButton: "Tắt xác thực hai yếu tố",
twoFactorScanQr:
"Quét mã QR này bằng ứng dụng xác thực của bạn (chẳng hạn Google Authenticator, Authy hoặc 1Password).",
twoFactorManualEntry: "Không quét được mã? Nhập khóa này theo cách thủ công:",
twoFactorRecoveryCodesHeading: "Mã khôi phục",
twoFactorRecoveryCodesDescription:
"Hãy lưu các mã này ở nơi an toàn. Mỗi mã dùng được một lần để đăng nhập nếu bạn mất quyền truy cập vào ứng dụng xác thực.",
twoFactorCopyRecoveryCodes: "Sao chép mã",
twoFactorCodesCopied: "Đã sao chép",
twoFactorCopyFailed:
"Không thể sao chép tự động. Hãy chọn các mã ở trên và sao chép theo cách thủ công.",
twoFactorEnterCode: "Nhập mã 6 chữ số từ ứng dụng của bạn để xác nhận thiết lập.",
twoFactorCodePlaceholder: "000000",
twoFactorConfirmButton: "Xác nhận và bật",
twoFactorCancelButton: "Hủy",
twoFactorEnableSuccess: "Xác thực hai yếu tố hiện đã được bật.",
twoFactorDisableSuccess: "Xác thực hai yếu tố đã được tắt.",
twoFactorDisablePrompt: "Nhập mã xác thực hiện tại của bạn để tắt xác thực hai yếu tố.",
adminHeading: "Cài đặt bảo mật quản trị",
adminDescription: "Cài đặt chính sách bảo mật doanh nghiệp. Áp dụng cho tất cả người dùng.",
sessionIdleTimeout: "Thời gian chờ phiên nhàn rỗi (phút)",
sessionIdleTimeoutDesc: "Tự động đăng xuất phiên nhàn rỗi. 0 = tắt.",
maxSessionsPerUser: "Số phiên tối đa mỗi người dùng",
maxSessionsPerUserDesc: "Giới hạn phiên đồng thời mỗi người dùng. 0 = không giới hạn.",
mfaPolicy: "Chính sách MFA",
mfaPolicyDesc: "Yêu cầu xác thực đa yếu tố cho người dùng.",
mfaPolicyOptional: "Tùy chọn",
mfaPolicyAdminsOnly: "Bắt buộc cho quản trị viên",
mfaPolicyRequired: "Bắt buộc cho tất cả người dùng",
ssoEnforcement: "Bắt buộc SSO",
ssoEnforcementDesc:
"Yêu cầu đăng nhập SSO cho tất cả người dùng không phải tài khoản khẩn cấp.",
ssoBreakGlassUsername: "Tên quản trị viên khẩn cấp",
ssoBreakGlassUsernameDesc:
"Quản trị viên này vẫn có thể đăng nhập bằng thông tin cục bộ khi SSO được bắt buộc.",
passwordMinLength: "Độ dài mật khẩu tối thiểu",
passwordMinLengthDesc: "Số ký tự tối thiểu yêu cầu cho mật khẩu.",
passwordRequireUppercase: "Yêu cầu chữ hoa",
passwordRequireUppercaseDesc: "Yêu cầu ít nhất một chữ cái viết hoa.",
passwordRequireNumber: "Yêu cầu chữ số",
passwordRequireNumberDesc: "Yêu cầu ít nhất một chữ số.",
passwordRequireSpecial: "Yêu cầu ký tự đặc biệt",
passwordRequireSpecialDesc: "Yêu cầu ít nhất một ký tự đặc biệt.",
passwordPolicyHeading: "Chính sách mật khẩu",
securitySettingsSaved: "Đã lưu cài đặt bảo mật",
securitySettingsFailed: "Không thể lưu cài đặt bảo mật",
},
people: {
heading: "Thành viên",
description: "Quản lý thành viên không gian làm việc và quyền của họ",
userCount: "{count} người dùng",
userCountPlural: "{count} người dùng",
searchPlaceholder: "Tìm kiếm thành viên...",
addMembersButton: "Thêm thành viên",
newMemberHeading: "Thành viên mới",
usernamePlaceholder: "Tên đăng nhập",
passwordPlaceholder: "Mật khẩu",
roleUserOption: "Người dùng",
roleEditorOption: "Biên tập viên",
roleAdminOption: "Quản trị viên",
roleUserDescription: "Truy cập công cụ cơ bản",
roleEditorDescription: "Tất cả tệp & pipeline",
roleAdminDescription: "Toàn quyền truy cập",
noDescription: "Không có mô tả",
defaultTeamOption: "Mặc định",
createButton: "Tạo",
cancelButton: "Hủy",
createSuccess: "Đã tạo người dùng thành công",
createFailed: "Tạo người dùng thất bại",
userLimitReached: "Đã đạt giới hạn người dùng (tối đa {max})",
deleteConfirm: 'Xóa người dùng "{username}"? Thao tác này không thể hoàn tác.',
deleteSuccess: 'Đã xóa người dùng "{username}"',
deleteFailed: "Xóa người dùng thất bại",
editHeading: "Chỉnh sửa {username}",
updateSuccess: "Đã cập nhật người dùng",
updateFailed: "Cập nhật người dùng thất bại",
cannotRemoveOwnAdmin: "Không thể xóa vai trò quản trị của chính bạn",
resetPasswordHeading: "Đặt lại mật khẩu cho {username}",
newPasswordLabel: "Mật khẩu mới (tối thiểu 8 ký tự)",
resetPasswordButton: "Đặt lại mật khẩu",
resetPasswordWarning:
"Thao tác này sẽ vô hiệu hóa tất cả phiên và khóa API của người dùng này.",
resetSuccess: "Đã đặt lại mật khẩu thành công",
resetFailed: "Đặt lại mật khẩu thất bại",
tableHeaderUser: "Người dùng",
tableHeaderRole: "Vai trò",
tableHeaderTeam: "Nhóm",
noSearchResults: "Không có thành viên phù hợp với tìm kiếm.",
noUsersFound: "Không tìm thấy người dùng.",
authBadgeLocalOidc: "Nội bộ + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "Chỉnh sửa vai trò / Nhóm",
resetPasswordAction: "Đặt lại mật khẩu",
deleteUserAction: "Xóa người dùng",
saveButton: "Lưu",
copyPasswordButton: "Sao chép mật khẩu",
passwordCopied: "Đã sao chép!",
copyPasswordWarning:
"Sao chép mật khẩu này ngay bây giờ. Bạn sẽ không thể xem lại sau khi tạo người dùng.",
},
teams: {
heading: "Nhóm",
description: "Tổ chức thành viên thành nhóm để quản lý tốt hơn.",
createButton: "Tạo nhóm mới",
newTeamHeading: "Nhóm mới",
teamNamePlaceholder: "Tên nhóm",
createSubmitButton: "Tạo",
cancelButton: "Hủy",
createSuccess: "Đã tạo nhóm thành công",
createFailed: "Tạo nhóm thất bại",
duplicateTeamError: "Đã tồn tại nhóm có tên này",
renameSuccess: "Đã đổi tên nhóm",
renameFailed: "Đổi tên nhóm thất bại",
deleteConfirm: 'Xóa nhóm "{name}"? Thành viên sẽ bị bỏ phân công.',
deleteSuccess: 'Đã xóa nhóm "{name}"',
deleteFailed: "Xóa nhóm thất bại",
cannotDeleteDefault: "Không thể xóa nhóm mặc định hoặc nhóm có thành viên",
tableHeaderTeamName: "Tên nhóm",
tableHeaderMembers: "Thành viên",
emptyState: "Không tìm thấy nhóm.",
renameSaveButton: "Lưu",
renameCancelButton: "Hủy",
renameAction: "Đổi tên",
deleteAction: "Xóa",
totalMembers: "Tổng thành viên",
nameRequired: "Tên nhóm là bắt buộc",
nameTooLong: "Tên nhóm phải tối đa 50 ký tự",
duplicateName: "Đã tồn tại nhóm có tên này",
teamStorageQuota: "Hạn mức lưu trữ (MB)",
teamStorageQuotaDesc:
"Dung lượng lưu trữ tối đa cho nhóm này tính bằng MB. Để trống nếu không giới hạn.",
teamRetentionHours: "Lưu giữ (giờ)",
teamRetentionHoursDesc:
"Thời gian lưu giữ tệp xử lý cho nhóm này. Để trống để dùng mặc định chung.",
quotaSaved: "Đã lưu cài đặt nhóm",
},
roles: {
heading: "Vai trò",
description: "Quản lý vai trò và quyền. Vai trò tích hợp không thể sửa đổi.",
createButton: "Tạo vai trò tùy chỉnh",
newRoleHeading: "Vai trò mới",
roleNamePlaceholder: "Tên vai trò",
descriptionPlaceholder: "Mô tả (tùy chọn)",
permissionsLabel: "Quyền",
createSubmitButton: "Tạo",
cancelButton: "Hủy",
createSuccess: "Đã tạo vai trò thành công",
createFailed: "Tạo vai trò thất bại",
duplicateRoleError: "Đã tồn tại vai trò có tên này",
editHeading: "Chỉnh sửa vai trò: {name}",
editSaveButton: "Lưu",
editCancelButton: "Hủy",
updateSuccess: "Đã cập nhật vai trò",
updateFailed: "Cập nhật vai trò thất bại",
deleteConfirm: 'Xóa vai trò "{name}"? {count} người dùng sẽ cần được phân công lại.',
deleteConfirmSimple: 'Xóa vai trò "{name}"?',
deleteSuccess: 'Đã xóa vai trò "{name}"',
deleteFailed: "Xóa vai trò thất bại",
emptyState: "Không tìm thấy vai trò.",
builtInBadge: "Tích hợp",
userCountBadge: "{count} người dùng",
editRoleTitle: "Chỉnh sửa vai trò",
deleteRoleTitle: "Xóa vai trò",
permGroup: {
tools: "Công cụ",
files: "Tệp",
apiKeys: "Khóa API",
pipelines: "Pipeline",
settings: "Cài đặt",
users: "Người dùng",
teams: "Nhóm",
system: "Hệ thống",
},
},
auditLog: {
heading: "Nhật ký kiểm tra",
allActionsFilter: "Tất cả hành động",
emptyState: "Không có mục nhật ký kiểm tra.",
tableHeaderTime: "Thời gian",
tableHeaderUser: "Người dùng",
tableHeaderAction: "Hành động",
tableHeaderTarget: "Mục tiêu",
paginationInfo: "Trang {page} / {totalPages} ({total} mục)",
previousButton: "Trước",
nextButton: "Tiếp",
justNow: "vừa xong",
minutesAgo: "{mins} phút trước",
hoursAgo: "{hrs} giờ trước",
daysAgo: "{days} ngày trước",
},
usage: {
heading: "Sử dụng",
description: "Thống kê sử dụng cục bộ từ công việc và lưu trữ tệp.",
periodLabel: "Khoảng thời gian",
days7: "7 ngày",
days30: "30 ngày",
days90: "90 ngày",
jobsPerDayHeading: "Công việc mỗi ngày",
topToolsHeading: "Công cụ hàng đầu",
perUserHeading: "Lượng theo người dùng",
durationsHeading: "Phân vị thời lượng",
noData: "Không có dữ liệu cho khoảng thời gian này.",
dayColumn: "Ngày",
totalColumn: "Tổng",
completedColumn: "Hoàn thành",
failedColumn: "Thất bại",
toolColumn: "Công cụ",
runsColumn: "Lần chạy",
userColumn: "Người dùng",
bytesInColumn: "Byte vào",
poolColumn: "Nhóm",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Lưu trữ thư viện",
storageFiles: "{count} tệp",
unknownUser: "(không rõ)",
storageByTeam: "Lưu trữ theo nhóm",
teamColumn: "Nhóm",
storageColumn: "Lưu trữ",
usersColumn: "Người dùng",
},
apiKeys: {
heading: "Khóa API",
description: "Quản lý khóa API để truy cập SnapOtter theo chương trình.",
keyNamePlaceholder: "Tên khóa (tùy chọn)",
generateButton: "Tạo khóa API",
removeScopingLabel: "Bỏ giới hạn quyền",
restrictPermissionsLabel: "Hạn chế quyền (tùy chọn)",
expiresLabel: "Hết hạn:",
clearButton: "Xóa",
copyTitle: "Sao chép",
keyWarning: "Lưu trữ khóa này an toàn. Khóa sẽ không được hiển thị lại.",
existingKeysHeading: "Khóa hiện có",
createdPrefix: "Đã tạo {date}",
scopedPrefix: "Phạm vi:",
expiresPrefix: "Hết hạn {date}",
deleteKeyTitle: "Xóa khóa",
deleteConfirm: "Xóa khóa API này? Mọi tích hợp sử dụng khóa này sẽ ngừng hoạt động.",
emptyState: "Chưa có khóa API. Tạo một khóa để bắt đầu.",
},
tools: {
heading: "Công cụ",
description: "Bật hoặc tắt từng công cụ. Công cụ bị tắt sẽ bị ẩn khỏi tất cả người dùng.",
restartBanner: "Cần khởi động lại để thay đổi có hiệu lực.",
searchPlaceholder: "Tìm kiếm công cụ...",
noSearchResults: "Không có công cụ phù hợp với tìm kiếm.",
loadFailedError: "Tải cài đặt công cụ thất bại. Lưu bị vô hiệu hóa để tránh mất dữ liệu.",
saveButton: "Lưu cài đặt công cụ",
disabledCount: "{count} công cụ bị tắt",
},
experimental: {
label: "Bật công cụ thử nghiệm",
description: "Hiển thị các công cụ đang phát triển. Chúng có thể không ổn định.",
},
fileManagement: {
title: "Quản lý tệp",
maxAge: "Thời gian lưu tệp tối đa (giờ)",
maxAgeDescription: "Thời gian lưu giữ tệp đã xử lý trước khi tự động dọn dẹp",
startupCleanup: "Dọn dẹp khi khởi động",
startupCleanupDescription: "Dọn dẹp tệp tạm cũ khi máy chủ khởi động",
},
dataRetention: {
title: "Lưu giữ dữ liệu",
fileMaxAgeHours: "Lưu giữ tệp xử lý (giờ)",
fileMaxAgeHoursDesc: "Thời gian giữ tệp đã tải lên và xử lý. Mặc định: 72 giờ.",
jobsRetentionDays: "Lưu giữ bản ghi công việc (ngày)",
jobsRetentionDaysDesc:
"Thời gian giữ siêu dữ liệu công việc. 0 = giữ mãi. Mặc định: 30 ngày.",
auditRetentionDays: "Lưu giữ nhật ký kiểm tra (ngày)",
auditRetentionDaysDesc:
"Thời gian giữ các mục nhật ký kiểm tra. 0 = giữ mãi. Mặc định: vĩnh viễn.",
},
aiFeatures: {
title: "Tính năng AI",
description: "Quản lý các gói mô hình AI cho xử lý tệp nâng cao.",
installAll: "Cài đặt tất cả",
diskUsage: "Dung lượng đĩa: {size}",
sizeOnDisk: "{size} trên ổ đĩa",
installed: "Đã cài đặt",
notInstalled: "Chưa cài đặt",
queued: "Đang chờ",
install: "Cài đặt",
repair: "Sửa chữa",
uninstall: "Gỡ cài đặt",
installing: "Đang cài đặt...",
importBundle: "Nhập gói",
importDescription: "Nhập runtime OCR đã ký hoặc gói AI cũ để sử dụng ngoại tuyến.",
importButton: "Nhập từ tệp",
importing: "Đang nhập...",
importSuccess: "Đã nhập gói thành công.",
importError: "Nhập gói thất bại: {error}",
importType: "Loại gói",
importOcr: "Gói OCR chính xác",
importLegacy: "Gói AI cũ",
importOcrIndex: "Chỉ mục OCR đã ký (.json)",
importOcrArchive: "Kho lưu trữ runtime OCR (.tar.gz)",
importLegacyArchive: "Kho lưu trữ gói cũ (.tar.gz)",
resetTitle: "Đặt lại môi trường AI",
resetDescription:
"Xóa mọi tính năng AI đã cài đặt và các mô hình đã tải xuống, sau đó bắt đầu lại từ đầu. Hãy dùng tùy chọn này nếu công cụ AI hoạt động bất thường sau khi cập nhật và việc cài đặt lại gói không khắc phục được sự cố.",
resetButton: "Đặt lại",
resetConfirmMessage:
"Thao tác này sẽ xóa mọi tính năng và mô hình AI đã cài đặt. Bạn sẽ cần cài đặt lại chúng từ Hugging Face. Hành động này không thể hoàn tác.",
resetFailed: "Đặt lại thất bại: {error}",
},
about: {
heading: "Giới thiệu",
appName: "SnapOtter",
appDescription:
"Bộ công cụ xử lý tệp tự lưu trữ, ưu tiên quyền riêng tư với 200+ công cụ. Chuyển đổi, nén, chỉnh sửa, phiên âm, OCR và tự động hóa quy trình xử lý ảnh, video, âm thanh, PDF và tệp mà không cần gửi dữ liệu lên đám mây.",
versionLabel: "Phiên bản:",
linksHeading: "Liên kết",
githubLink: "Kho mã nguồn GitHub",
docsLink: "Tài liệu",
apiRefLink: "Tham chiếu API (Swagger)",
licenseLabel: "Giấy phép:",
licenseDescription:
"SnapOtter là phần mềm mã nguồn mở được cấp phép theo GNU Affero General Public License v3 (AGPLv3).",
},
},
auth: {
login: "Đăng nhập",
logout: "Đăng xuất",
username: "Tên đăng nhập",
password: "Mật khẩu",
loginButton: "Đăng nhập",
loggingIn: "Đang đăng nhập...",
invalidCredentials: "Tên đăng nhập hoặc mật khẩu không đúng",
connectionError: "Lỗi kết nối",
signInWith: "Đăng nhập với {provider}",
signInWithSso: "Đăng nhập với SSO",
or: "hoặc",
methodLocal: "Nội bộ",
methodOidc: "OIDC",
methodBoth: "Nội bộ + OIDC",
oidcAuthFailed: "Xác thực thất bại. Vui lòng thử lại.",
oidcProviderUnreachable: "Không thể kết nối với nhà cung cấp danh tính. Vui lòng thử lại sau.",
oidcSessionExpired: "Phiên đăng nhập đã hết hạn. Vui lòng thử lại.",
oidcUserNotAuthorized:
"Tài khoản của bạn không được phép truy cập ứng dụng này. Liên hệ quản trị viên.",
oidcUserLimitReached: "Đã đạt giới hạn người dùng. Liên hệ quản trị viên.",
oidcGenericError: "Lỗi xác thực. Vui lòng thử lại.",
samlAuthFailed: "Xác thực SAML thất bại. Vui lòng thử lại.",
samlUserNotAuthorized:
"Tài khoản của bạn không được phép truy cập ứng dụng này. Liên hệ quản trị viên.",
samlUserLimitReached: "Đã đạt giới hạn người dùng. Liên hệ quản trị viên.",
ssoEnforcedLocalRestricted: "Đăng nhập cục bộ chỉ dành cho quản trị viên được ủy quyền.",
mfaRequired: "Nhập mã xác thực của bạn",
mfaRecoveryHint: "Bạn cũng có thể dùng mã khôi phục",
verify: "Xác minh",
verifying: "Đang xác minh...",
mfaInvalidCode: "Mã không hợp lệ. Vui lòng thử lại.",
mfaEnrollmentRequired:
"Tổ chức của bạn yêu cầu xác thực đa yếu tố. Vui lòng thiết lập MFA trong cài đặt tài khoản.",
methodSaml: "SAML",
passwordManagedByProvider: "Việc đổi mật khẩu được quản lý bởi nhà cung cấp danh tính của bạn.",
enterUsername: "Nhập tên đăng nhập",
enterPassword: "Nhập mật khẩu của bạn",
heroTitle: "Tệp của bạn. Thuộc về bạn.",
heroSubtitle: "Mọi công cụ bạn cần.",
rotatingPhrases: [
"Không cần đăng ký. Không cần tài khoản.",
"Không tải lên đám mây. Tuyệt đối không.",
"100% xử lý ngay trên máy bạn.",
"Miễn phí. Mãi mãi.",
"Không giới hạn. Không ẩn giấu.",
"Hoạt động hoàn toàn ngoại tuyến.",
"Xử lý hàng loạt không giới hạn.",
"200+ công cụ.",
"15 mô hình AI. Chạy trên phần cứng của bạn.",
"Nhanh như chớp. Xây dựng trên Sharp.",
"Sẵn sàng cho môi trường cách ly mạng.",
"Chỉ một container Docker.",
"Mã nguồn mở. Luôn luôn.",
"Mọi pixel đều ở trên phần cứng của bạn.",
"Máy chủ của bạn. Quy tắc của bạn.",
"Triển khai chỉ với một lệnh docker pull.",
"Giải pháp thay thế tự lưu trữ.",
"Thay đổi kích thước, nén, chuyển đổi. Ngay tại máy.",
"Trình chỉnh sửa ảnh miễn phí. Không hình mờ.",
"Xử lý tệp hàng loạt. Không giới hạn.",
"Xóa nền ngay trên máy.",
"Thay thế Canva tự lưu trữ.",
"Không cần khóa API.",
"Tuân thủ GDPR theo thiết kế.",
"Hoạt động không cần Internet.",
],
},
changePassword: {
title: "Đổi mật khẩu của bạn",
description:
"Bạn cần đặt mật khẩu mới trước khi tiếp tục. Mật khẩu phải có ít nhất 8 ký tự bao gồm chữ hoa, chữ thường và số.",
usernameLabel: "Tên đăng nhập",
currentPasswordLabel: "Mật khẩu hiện tại",
currentPasswordPlaceholder: "Nhập mật khẩu hiện tại",
newPasswordLabel: "Mật khẩu mới",
generateButton: "Tạo mật khẩu mạnh",
newPasswordPlaceholder: "Ít nhất 8 ký tự",
confirmPasswordLabel: "Xác nhận mật khẩu mới",
confirmPasswordPlaceholder: "Nhập lại mật khẩu mới",
passwordsMismatch: "Mật khẩu không khớp",
failedError: "Đổi mật khẩu thất bại",
connectionError: "Lỗi kết nối",
changingButton: "Đang đổi...",
changeButton: "Đổi mật khẩu",
sidebarTitle: "Sắp xong rồi",
sidebarDescription: "Đặt mật khẩu mạnh để bảo mật tài khoản, sau đó bạn có thể sử dụng ngay.",
},
automate: {
title: "Tự động hóa",
invalidPipelineFile: "Không phải tệp Pipeline SnapOtter hợp lệ",
newerVersion: "Pipeline này được tạo với phiên bản SnapOtter mới hơn",
missingName: "Tệp Pipeline thiếu tên",
noSteps: "Tệp Pipeline không có bước nào",
importFailed: "Nhập thất bại",
couldNotRead: "Không thể đọc tệp Pipeline",
fileCount: "{count} tệp",
fileCountPlural: "{count} tệp",
importFromLibrary: "Nhập từ thư viện",
addButton: "+ Thêm",
libraryButton: "Thư viện",
clearButton: "Xóa",
processingFailed: "Xử lý thất bại cho tệp này",
processingMultiple: "Đang xử lý {count} tệp...",
processingPipeline: "Đang xử lý Pipeline...",
processButton: "Xử lý",
processButtonMultiple: "Xử lý ({count})",
processAllButton: "Xử lý tất cả ({count})",
addTool: "Thêm công cụ",
toolPalette: "Bảng công cụ",
clickToAdd: "Nhấp để thêm vào Pipeline",
savedLabel: "Đã lưu",
templatesLabel: "Mẫu",
importButton: "Nhập",
noSavedPipelines: "Không có Pipeline đã lưu",
stepCount: "({count} bước)",
stepCountPlural: "({count} bước)",
exportPipeline: "Xuất Pipeline",
deletePipeline: "Xóa Pipeline",
moreCount: "+{count} khác",
pipelineBuilder: "Trình xây dựng Pipeline",
addToolsPrompt: "Thêm công cụ từ bảng công cụ để bắt đầu",
stepsConfigured: "{count} bước đã cấu hình",
stepsConfiguredPlural: "{count} bước đã cấu hình",
noFilesLoaded: "Chưa tải tệp nào",
downloadZip: "Tải xuống ZIP",
saveButton: "Lưu",
pipelineNamePlaceholder: "Tên Pipeline",
descriptionPlaceholder: "Mô tả",
savingIndicator: "...",
cancelButton: "Hủy",
preview: "Xem trước",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageCounter: "{current} / {total}",
imageArea: "Vùng xem trước",
templateSocialMedia: "Sẵn sàng cho mạng xã hội",
templatePrivacyClean: "Dọn dẹp quyền riêng tư",
templateWebOptimization: "Tối ưu cho Web",
templateProfilePicture: "Ảnh đại diện",
templateWatermarkBatch: "Hình mờ hàng loạt",
createNew: "Tạo tự động hóa mới",
savedAutomations: "Tự động hóa đã lưu",
templates: "Mẫu",
addStep: "Thêm bước",
removeStep: "Xóa",
moveUp: "Di chuyển lên",
moveDown: "Di chuyển xuống",
savePipeline: "Lưu Pipeline",
runPipeline: "Xử lý",
pipelineName: "Tên Pipeline",
pipelineDescription: "Mô tả (tùy chọn)",
noStepsPrompt: "Thêm các bước để xây dựng tự động hóa",
noStepsHeading: "Chưa có bước nào",
searchToolsPlaceholder: "Tìm công cụ...",
step: "Bước",
modalityWarning: "Không tương thích loại",
modalityWarningTooltip:
"Bước này cần {expected} nhưng nhận {received}; có thể không thành công khi bạn chạy quy trình.",
},
nav: {
tools: "Công cụ",
reader: "Đọc",
automate: "Tự động hóa",
editor: "Chỉnh sửa",
files: "Tệp",
help: "Trợ giúp",
settings: "Cài đặt",
grid: "Lưới",
},
files: {
myFiles: "Tệp của tôi",
recentTab: "Gần đây",
uploadTab: "Tải tệp lên",
fileDetailsAriaLabel: "Chi tiết tệp",
fileDetailsHeading: "Chi tiết tệp",
searchPlaceholder: "Tìm tệp...",
selectedCount: "Đã chọn {count}",
fileCount: "{count} tệp",
fileCountSingular: "{count} tệp",
noFilesFound: "Không tìm thấy tệp",
selectFilePrompt: "Chọn tệp để xem chi tiết",
openFile: "Mở tệp",
selectFile: "Chọn tệp",
openInPipeline: "Mở trong quy trình",
dropFilesHere: "Thả tệp vào đây",
orClickToSelect: "hoặc nhấn để chọn tệp",
name: "Tên",
format: "Định dạng",
size: "Dung lượng",
dimensions: "Kích thước",
version: "Phiên bản",
toolsUsed: "Công cụ đã dùng",
none: "Không có",
delete: "Xóa",
pipeline: "Pipeline",
download: "Tải xuống",
},
dropzone: {
unsupportedFileType: "Loại tệp này không được công cụ này hỗ trợ",
urlFetchFailed: "Không thể tải ảnh từ URL",
ariaLabel: "Vùng thả tệp",
dropPrompt: "Kéo thả hình ảnh vào đây",
browseOrPaste: "dùng nút tải lên hoặc dán từ bộ nhớ tạm",
uploadButton: "Tải lên",
defaultFormats: "Hình ảnh, Video, Audio, PDF, Tệp và hơn 150 định dạng",
orSeparator: "hoặc",
urlPlaceholder: "Dán URL hình ảnh...",
urlLoadingIndicator: "...",
addUrlButton: "Thêm",
importMultipleUrls: "Nhập nhiều URL...",
filesSelected: "Đã chọn {count} tệp",
dropToAdd: "Thả để thêm tệp",
dropToReplace: "Thả để thay thế tệp",
},
reviewPanel: {
processedResultAlt: "Kết quả đã xử lý",
sizeLabel: "Dung lượng: {size}",
typeLabel: "Loại: {type}",
processedLabel: "Đã xử lý: {time}",
undoButton: "Hoàn tác",
downloadButton: "Tải xuống",
openInEditor: "Mở trong trình chỉnh sửa",
reviewHeading: "Xem lại",
continueEditing: "Tiếp tục chỉnh sửa",
},
features: {
notEnabledTitle: "Tính năng chưa được bật",
notEnabledDescription:
"Tính năng này chưa được bật. Hãy yêu cầu quản trị viên bật trong Cài đặt.",
requiresDownload: "Tính năng này cần tải thêm (~{size})",
retryButton: "Thử lại",
queued: "Đang xếp hàng để cài đặt...",
enableButton: "Bật {name}",
repairRequired: "Cần sửa chữa",
repairDescription: "Một số tệp mô hình bị thiếu hoặc hỏng. Sửa chữa sẽ tải lại chúng.",
repairButton: "Sửa chữa {name}",
lessThanMinute: "Còn chưa đầy một phút",
oneMinuteLeft: "Còn khoảng 1 phút",
minutesLeft: "Còn khoảng {mins} phút",
progressMessages: [
"Sắp xong rồi... có lẽ thế...",
"Của ngon phải chờ...",
"Vẫn nhanh hơn đợi sơn khô...",
"Sự kiên nhẫn của bạn thật đáng ngưỡng mộ...",
"Đang làm việc chăm chỉ hơn vẻ ngoài...",
"Đây là phần hấp dẫn nhất đấy, tin đi...",
"Đang xử lý những thứ quan trọng phía sau...",
"Nếu bạn đang đọc dòng này, nghĩa là đang hoạt động...",
"Đang chuẩn bị điều tuyệt vời...",
"Xứng đáng với từng giây chờ đợi, hứa đấy...",
"Sự hồi hộp cũng là một phần trải nghiệm...",
"Đang dạy máy tính của bạn kỹ năng mới...",
"Đang thiết lập siêu năng lực cho bạn...",
"Tệp của bạn sẽ cảm ơn bạn sau...",
"Đang tải... nhưng kiểu sang chảnh...",
"Lúc này pha cà phê uống cũng hay phết...",
"Thành Rome cũng không xây trong một ngày...",
"Suỵt... thiên tài đang làm việc...",
"Đang khiến dự án của bạn ghen tị với điều sắp tới...",
"Đang tập hợp đội ngũ trong mơ...",
"Đang mở gói quà tuyệt vời...",
"Sắp xong phần suy nghĩ... đùa thôi...",
"Bất ngờ: thực ra đang làm việc thật đấy...",
"Đang khởi động động cơ sáng tạo...",
"Trí tưởng tượng đang tải...",
"Không phải màn hình chờ đâu, hứa đấy...",
"Nghệ thuật đỉnh cao cần thời gian để cài đặt...",
"Bản thân tương lai của bạn sẽ cảm ơn...",
"Đang tải về những tệp thông minh...",
"Giữ vững tinh thần, điều tốt nhất sắp đến...",
],
},
help: {
heading: "Trợ giúp",
gettingStarted: {
heading: "Bắt đầu",
description:
"Chọn một công cụ từ thanh bên hoặc tìm kiếm. Tải lên tệp bằng cách kéo thả vào trang hoặc nhấp vào vùng tải lên. Điều chỉnh cài đặt và tải xuống kết quả.",
},
keyboardShortcuts: {
heading: "Phím tắt",
focusSearchBar: "Lấy nét thanh tìm kiếm",
goToTools: "Đến công cụ",
toggleTheme: "Chuyển đổi giao diện",
goToResize: "Đến Thay đổi kích thước",
goToCrop: "Đến Cắt ảnh",
goToCompress: "Đến Nén ảnh",
goToConvert: "Đến Chuyển đổi",
goToRemoveBackground: "Đến Xóa nền",
goToWatermarkText: "Đến Hình mờ văn bản",
goToStripMetadata: "Đến Xóa siêu dữ liệu",
goToImageInfo: "Đến Thông tin ảnh",
processFile: "Xử lý tệp",
downloadResult: "Tải kết quả",
},
resources: {
heading: "Tài nguyên",
githubLink: "Kho mã nguồn GitHub",
reportIssueLink: "Báo cáo lỗi",
docsLink: "Tài liệu",
apiRefLink: "Tham chiếu API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "Đã xảy ra lỗi",
offline: "Bạn đang ngoại tuyến",
reconnecting: "Đang kết nối lại với máy chủ...",
connected: "Đã kết nối",
processingFailed: "Xử lý thất bại cho tệp này",
timeout: "Yêu cầu đã hết thời gian. Máy chủ có thể đang quá tải. Vui lòng thử lại.",
networkError: "Lỗi mạng. Kiểm tra kết nối của bạn.",
invalidCredentials: "Tên đăng nhập hoặc mật khẩu không đúng",
connectionError: "Lỗi kết nối",
},
sidebar: {
sponsor: "Ủng hộ chúng tôi",
tools: "Công cụ",
grid: "Lưới",
automate: "Tự động hóa",
editor: "Chỉnh sửa",
files: "Tệp",
help: "Trợ giúp",
settings: "Cài đặt",
},
toolCard: {
pin: "Ghim",
unpin: "Bỏ ghim",
},
appLayout: {
mobileNavTools: "Công cụ",
mobileNavAutomate: "Tự động hóa",
mobileNavEditor: "Chỉnh sửa",
mobileNavFiles: "Tệp",
mobileNavSettings: "Cài đặt",
},
a11y: {
sponsorLink: "Ủng hộ SnapOtter trên GitHub Sponsors",
skipToContent: "Chuyển đến nội dung chính",
openSidebar: "Mở thanh bên",
closeSidebar: "Đóng thanh bên",
closeSettings: "Đóng cài đặt",
closeHelp: "Đóng trợ giúp",
closeDialog: "Đóng hộp thoại",
zoomIn: "Phóng to",
zoomOut: "Thu nhỏ",
fitToView: "Vừa khung nhìn",
actualSize: "Kích thước thực",
pan: "Di chuyển",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageArea: "Vùng xem trước",
imageViewer: "Trình xem tệp",
fileDropZone: "Vùng thả tệp",
imageDropZone: "Vùng thả tệp",
beforeAfterSlider: "Thanh trượt so sánh trước/sau",
imageControls: "Điều khiển xem trước",
zoomControls: "Điều khiển thu phóng",
dragToReorder: "Kéo để sắp xếp lại",
whiteBackground: "Nền trắng",
blackBackground: "Nền đen",
expandPanel: "Mở rộng bảng",
collapsePanel: "Thu gọn bảng",
swapDimensions: "Đổi kích thước",
applyCrop: "Áp dụng cắt",
cancelCrop: "Hủy cắt",
fontFamily: "Phông chữ",
textColor: "Màu chữ",
flipHorizontal: "Lật ngang",
flipVertical: "Lật dọc",
hexColorValue: "Giá trị màu HEX",
backgroundColor: "Màu nền",
foregroundColor: "Màu tiền cảnh",
swapColors: "Đổi màu tiền cảnh và nền",
resetColors: "Đặt lại màu đen trắng mặc định",
foregroundHex: "Giá trị HEX màu tiền cảnh",
undo: "Hoàn tác",
redo: "Làm lại",
layers: "Lớp",
addLayer: "Thêm lớp",
deleteLayer: "Xóa lớp",
cancelOperation: "Hủy thao tác",
fill: "Tô",
fileDetails: "Chi tiết tệp",
language: "Ngôn ngữ",
selected: "Đã chọn",
deleteKey: "Xóa khóa",
editRole: "Sửa vai trò",
deleteRole: "Xóa vai trò",
notInstalled: "Chưa cài đặt",
queued: "Đang chờ cài đặt",
installing: "Đang cài đặt",
imageNOfTotal: "Ảnh {n} / {total}",
processingComplete: "Xử lý ảnh thành công",
processingFailed: "Xử lý thất bại",
settingsDialog: "Cài đặt",
helpDialog: "Trợ giúp",
navigationMenu: "Điều hướng",
homeLink: "Trang chủ SnapOtter",
},
pipelineTemplates: {
"web-optimize": {
name: "Tối ưu cho web",
description: "Đổi kích thước, chuyển sang WebP và nén ảnh để tải nhanh trên web.",
},
"email-friendly": {
name: "Thân thiện với email",
description: "Thu nhỏ ảnh sao cho đủ nhỏ để đính kèm vào email.",
},
"privacy-scrub": {
name: "Dọn quyền riêng tư",
description: "Xóa EXIF, GPS và các siêu dữ liệu khác, rồi nén.",
},
"social-square": {
name: "Vuông mạng xã hội",
description: "Cắt thành hình vuông 1:1 và nén cho bài đăng mạng xã hội.",
},
"watermark-batch": {
name: "Đóng dấu mờ hàng loạt",
description: "Đóng dấu mờ văn bản lên ảnh, rồi nén.",
},
"shrink-pdf-email": {
name: "Thu nhỏ PDF cho email",
description: "Làm phẳng và nén mạnh tệp PDF để vừa với giới hạn email.",
},
"podcast-polish": {
name: "Hoàn thiện podcast",
description: "Loại bỏ khoảng lặng, chuẩn hóa độ lớn và thêm hiệu ứng mờ dần vào bản ghi.",
},
"cut-out-subject": {
name: "Tách chủ thể",
description: "Xóa nền bằng AI và nén ảnh tách nền trong suốt.",
},
"restore-old-photo": {
name: "Phục hồi ảnh cũ",
description: "Sửa chữa, tô màu và phóng to ảnh cũ hoặc hư hỏng bằng AI.",
},
},
} as const;