Files
SnapOtter/packages/shared/src/i18n/uk.ts
T
SnapOtterandGitHub d8cf979d4b fix: resolve 18 QA-discovered bugs across tools, previews, and the AI pipeline (#242)
Exhaustive QA sweep of all 157 tools. Fixes: CSP blob media, csv-excel ExcelJS interop, ocr-pdf segfault, chart-maker upload, non-PDF doc preview, RAW decode, merge-tool multi-file path, html-to-image chromium, ogv/wma/amr/ac3 preview fallbacks, meme/gif/stabilize codecs, nav+home a11y. Plus orphan-format and test-debt cleanup, the AI bundle build script, and a reusable Playwright QA harness under tests/qa/.
2026-06-15 22:26:24 +08:00

3472 lines
147 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationKeys } from "./en.js";
export const uk: TranslationKeys = {
common: {
upload: "Завантажити з комп'ютера",
process: "Обробити",
download: "Завантажити",
cancel: "Скасувати",
save: "Зберегти",
delete: "Видалити",
settings: "Налаштування",
search: "Пошук інструментів...",
dropFiles: "Перетягніть файли сюди або натисніть кнопку завантаження",
loading: "Завантаження...",
saving: "Saving...",
error: "Сталася помилка",
confirm: "Підтвердити",
close: "Закрити",
back: "Назад",
next: "Далі",
clear: "Очистити",
copy: "Копіювати",
copied: "Скопійовано!",
noResults: "Нічого не знайдено",
showLess: "Показати менше",
showMore: "Показати ще {count}",
experimental: "Експериментальний",
enabled: "Увімкнено",
disabled: "Вимкнено",
rename: "Перейменувати",
edit: "Редагувати",
actions: "Дії",
create: "Створити",
or: "або",
goHome: "На головну",
somethingWentWrong: "Щось пішло не так",
unexpectedError: "Сталася неочікувана помилка.",
retry: "Повторити",
privacyPolicy: "Політика конфіденційності",
pageNotFound: "Page not found",
pageNotFoundDescription: "The page you are looking for does not exist or has been moved.",
},
categories: {
essentials: "Основні",
adjustments: "Корекція",
enhance: "Enhance & AI",
watermark: "Водяний знак і накладання",
layout: "Компонування та композиція",
utilities: "Утиліти",
optimization: "Оптимізація",
format: "Формат і конвертація",
"video-edit": "Video",
"video-convert": "Convert",
"video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files",
archives: "Archives",
},
modalities: {
image: "Image",
video: "Video",
audio: "Audio",
documentsAndFiles: "Documents & Files",
},
tools: {
resize: {
name: "Зміна розміру",
description: "Зміна розміру в пікселях, відсотках або за шаблонами соцмереж",
},
crop: {
name: "Обрізка",
description: "Довільна обрізка, шаблони пропорцій, фігурна обрізка",
},
rotate: {
name: "Обертання та відображення",
description: "Обертання, відображення та вирівнювання зображень",
},
convert: { name: "Конвертація", description: "Конвертація між форматами зображень" },
compress: {
name: "Стиснення",
description: "Зменшення розміру файлу за якістю або цільовим розміром",
},
"optimize-for-web": {
name: "Оптимізація для вебу",
description:
"Оптимізація зображень для вебу з конвертацією формату, контролем якості та попереднім переглядом",
},
"strip-metadata": {
name: "Видалення метаданих",
description: "Видалення EXIF, GPS та інформації про камеру",
},
"edit-metadata": {
name: "Редагування метаданих",
description: "Редагування EXIF, IPTC, XMP, GPS, ключових слів і дат",
},
"bulk-rename": {
name: "Масове перейменування",
description: "Перейменування кількох файлів за шаблоном",
},
"image-to-pdf": {
name: "Зображення у PDF",
description: "Об'єднання зображень у документ PDF",
},
"pdf-to-image": {
name: "PDF у зображення",
description: "Конвертація сторінок PDF у зображення",
},
favicon: {
name: "Генератор Favicon",
description: "Генерація всіх розмірів Favicon та іконок застосунку",
},
"adjust-colors": {
name: "Налаштування кольорів",
description:
"Яскравість, контрастність, експозиція, насиченість, температура, різкість та ефекти",
},
sharpening: {
name: "Підвищення різкості",
description: "Адаптивна, маска нерізкості та високочастотна різкість із шаблонами",
},
"replace-color": {
name: "Заміна та інверсія кольору",
description: "Заміна окремих кольорів або інверсія",
},
"color-blindness": {
name: "Симуляція дальтонізму",
description: "Симуляція сприйняття зображень за різних типів порушення кольорового зору",
},
"remove-background": {
name: "Видалення фону",
description: "Видалення фону за допомогою AI",
},
upscale: {
name: "Збільшення зображення",
description: "AI-збільшення з надроздільністю",
},
"erase-object": {
name: "Видалення об'єктів",
description: "Видалення небажаних об'єктів за допомогою AI",
},
ocr: {
name: "OCR / Витягування тексту",
description: "Витягування тексту із зображень з точністю AI",
},
"ocr-pdf": {
name: "OCR PDF",
description: "Витягування тексту з PDF-документiв за допомогою OCR на базi ШI",
},
"blur-faces": {
name: "Розмиття облич / ПД",
description: "Автоматичне виявлення та розмиття облич і конфіденційних даних",
},
"enhance-faces": {
name: "Поліпшення облич",
description: "Відновлення та поліпшення облич за допомогою AI",
},
"smart-crop": {
name: "Розумна обрізка",
description: "Розумна обрізка за об'єктом, обличчям або обрізка полів",
},
"image-enhancement": {
name: "Поліпшення зображення",
description:
"Автоматичне поліпшення в один клік: розумна корекція експозиції, контрасту, кольору та різкості",
},
"noise-removal": {
name: "Видалення шуму",
description: "Видалення шуму та зернистості за допомогою AI",
},
"red-eye-removal": {
name: "Видалення червоних очей",
description: "Виявлення та корекція червоних очей на фото зі спалахом за допомогою AI",
},
"restore-photo": {
name: "Відновлення фотографій",
description: "Виправлення подряпин, розривів і пошкоджень на старих фото за допомогою AI",
},
"content-aware-resize": {
name: "Контентно-залежне масштабування",
description: "Інтелектуальна зміна розміру зі збереженням важливого вмісту",
},
"ai-canvas-expand": {
name: "AI-розширення полотна",
description: "Розширення полотна з AI-заповненням",
},
colorize: {
name: "AI-колоризація",
description:
"Перетворення чорно-білих фотографій на кольорові за допомогою AI-моделей глибокого навчання",
},
"passport-photo": {
name: "Фото на документи",
description:
"Створення фотографій для паспорта, візи та посвідчень з автоматичним виявленням обличчя",
},
"transcribe-audio": {
name: "Транскрипцiя аудiо",
description: "Перетворення мовлення на текст за допомогою ШI",
},
"auto-subtitles": {
name: "Автоматичнi субтитри",
description: "Генерацiя файлiв субтитрiв з аудiодорiжок вiдео",
},
"transparency-fixer": {
name: "Виправлення прозорості PNG",
description: "Виправлення хибної прозорості PNG в один клік",
},
"background-replace": {
name: "Заміна фону",
description: "Замінити фон зображення суцільним кольором",
},
"blur-background": {
name: "Розмиття фону",
description: "Розмити фон зберігаючи різкість об'єкта",
},
"watermark-text": {
name: "Текстовий водяний знак",
description: "Додавання текстового водяного знаку",
},
"watermark-image": {
name: "Графічний водяний знак",
description: "Накладання логотипу як водяного знаку",
},
"text-overlay": {
name: "Накладання тексту",
description: "Додавання стилізованого тексту на зображення",
},
compose: {
name: "Композиція зображень",
description: "Накладання зображень з налаштуванням позиції та прозорості",
},
"meme-generator": {
name: "Генератор Meme",
description:
"Створення мемів із популярними шаблонами або власними зображеннями. Класичний текст у стилі Impact з налаштовуваними шрифтами, кольорами та розташуванням.",
},
info: {
name: "Інформація про зображення",
description: "Перегляд усіх метаданих та властивостей зображення",
},
compare: {
name: "Порівняння зображень",
description: "Порівняння двох зображень пліч-о-пліч",
},
"find-duplicates": {
name: "Пошук дублікатів",
description: "Виявлення точних та приблизних дублікатів зображень",
},
"color-palette": {
name: "Кольорова палітра",
description: "Витягування домінуючих кольорів із зображення",
},
"qr-generate": {
name: "Генератор QR-кодів",
description:
"Генерація стилізованих QR-кодів з налаштовуваними кольорами, візерунками та логотипами",
},
"html-to-image": {
name: "HTML to Image",
description: "Capture webpages as high-quality images",
},
"barcode-read": {
name: "Сканер штрихкодів",
description: "Сканування зображень на наявність QR-кодів, штрихкодів та 2D-кодів",
},
collage: {
name: "Колаж / Сітка",
description: "Об'єднання зображень у красиві колажі-сітки з 25+ шаблонами",
},
stitch: {
name: "Об'єднання / Склейка",
description: "З'єднання зображень поруч, стопкою або сіткою",
},
split: {
name: "Розділення зображення",
description:
"Розділення зображень на плитки сітки або за розміром у пікселях з попереднім переглядом",
},
border: {
name: "Рамка та обрамлення",
description:
"Додавання рамок, відступів, заокруглених кутів та тіней з шаблонами в один клік",
},
beautify: {
name: "Прикрашання знімку екрана",
description:
"Додавання градієнтних фонів, рамок пристроїв, тіней та розмірів для соцмереж до знімків екрана",
},
"circle-crop": {
name: "Circle Crop",
description: "Crop image to a centered circle with transparent corners",
},
duotone: {
name: "Duotone",
description: "Apply a two-color duotone effect with custom shadow and highlight colors",
},
"image-pad": {
name: "Image Pad",
description: "Pad image to a target aspect ratio with a solid color background",
},
pixelate: {
name: "Pixelate",
description: "Apply a pixelation effect to the full image or a specific region",
},
vignette: {
name: "Vignette",
description: "Add a vignette effect with adjustable strength and color",
},
"gif-webp": {
name: "GIF/WebP Converter",
description: "Convert animated GIF to WebP and vice versa, preserving all frames",
},
histogram: {
name: "Histogram",
description: "Generate an RGB histogram chart from an image",
},
"lqip-placeholder": {
name: "LQIP Placeholder",
description: "Generate a tiny low-quality image placeholder with base64 data URI",
},
"sprite-sheet": {
name: "Sprite Sheet",
description: "Combine multiple images into a single sprite sheet grid",
},
"svg-to-raster": {
name: "SVG у растр",
description:
"Конвертація SVG у PNG, JPEG, WebP, AVIF, TIFF, GIF або HEIF з налаштовуваним масштабом та DPI",
},
vectorize: {
name: "Зображення у SVG",
description: "Конвертація зображень у масштабовану векторну графіку",
},
"gif-tools": {
name: "Інструменти GIF",
description:
"Зміна розміру, оптимізація, швидкості, реверс, витягування кадрів та обертання анімованих GIF",
},
"image-to-base64": {
name: "Зображення у Base64",
description: "Конвертація зображень у рядки Base64 для вбудовування у HTML, CSS та інше",
},
"barcode-generate": {
name: "Barcode Generator",
description: "Generate barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14, and Data Matrix",
},
"chart-maker": {
name: "Chart Maker",
description: "Create bar, line, or pie charts from CSV or JSON data",
},
"convert-video": {
name: "Convert Video",
description: "Convert videos between MP4, MOV, and WebM",
},
"compress-video": {
name: "Compress Video",
description: "Shrink video file size with quality control",
},
"trim-video": {
name: "Trim Video",
description: "Cut a clip out of a video",
},
"mute-video": {
name: "Mute Video",
description: "Remove the audio track from a video",
},
"video-to-gif": {
name: "Video to GIF",
description: "Turn a video clip into an animated GIF",
},
"resize-video": {
name: "Resize Video",
description: "Scale a video to a new resolution or preset size",
},
"crop-video": {
name: "Crop Video",
description: "Crop a region out of a video",
},
"rotate-video": {
name: "Rotate Video",
description: "Rotate or flip a video",
},
"change-fps": {
name: "Change FPS",
description: "Change the frame rate of a video",
},
"video-color": {
name: "Video Color",
description: "Adjust brightness, contrast, saturation, and gamma",
},
"video-speed": {
name: "Video Speed",
description: "Speed up or slow down a video",
},
"reverse-video": {
name: "Reverse Video",
description: "Play a video clip backwards",
},
"video-loudnorm": {
name: "Normalize Audio",
description: "Normalize video audio volume to broadcast standard",
},
"aspect-pad": {
name: "Aspect Pad",
description: "Add solid-color bars to fit a target aspect ratio",
},
"blur-pad": {
name: "Blur Pad",
description: "Fill bars with a blurred copy of the video",
},
"watermark-video": {
name: "Watermark Video",
description: "Burn a text watermark onto video frames",
},
"stabilize-video": {
name: "Stabilize Video",
description: "Reduce camera shake with two-pass stabilization",
},
"gif-to-video": {
name: "GIF to Video",
description: "Convert an animated GIF into an MP4 or WebM video",
},
"video-to-webp": {
name: "Video to WebP",
description: "Convert a video clip into an animated WebP image",
},
"video-to-frames": {
name: "Video to Frames",
description: "Extract frames from a video as a ZIP of images",
},
"merge-videos": {
name: "Merge Videos",
description: "Join multiple video clips into one file",
},
"replace-audio": {
name: "Replace Audio",
description: "Swap the audio track of a video with another file",
},
"burn-subtitles": {
name: "Burn Subtitles",
description: "Permanently render subtitles onto video frames",
},
"embed-subtitles": {
name: "Embed Subtitles",
description: "Mux a subtitle track into the video container",
},
"extract-subtitles": {
name: "Extract Subtitles",
description: "Pull the subtitle track out of a video as an SRT file",
},
"images-to-video": {
name: "Images to Video",
description: "Turn a set of images into a slideshow video",
},
"video-metadata": {
name: "Clean Video Metadata",
description: "Strip metadata from a video and report what was found",
},
"convert-audio": {
name: "Convert Audio",
description: "Convert audio between MP3, WAV, OGG, and more",
},
"trim-audio": {
name: "Trim Audio",
description: "Cut a section out of an audio file",
},
"extract-audio": {
name: "Extract Audio",
description: "Pull the audio track out of a video",
},
"volume-adjust": {
name: "Volume Adjust",
description: "Increase or decrease audio volume by a fixed gain",
},
"normalize-audio": {
name: "Normalize Audio",
description: "Even out loudness to broadcast standard levels",
},
"fade-audio": {
name: "Fade Audio",
description: "Add fade-in and fade-out effects to audio",
},
"reverse-audio": {
name: "Reverse Audio",
description: "Play audio backwards",
},
"audio-speed": {
name: "Audio Speed",
description: "Speed up or slow down audio playback",
},
"pitch-shift": {
name: "Pitch Shift",
description: "Raise or lower pitch by semitones without changing speed",
},
"audio-channels": {
name: "Audio Channels",
description: "Convert between mono, stereo, or swap left and right channels",
},
"silence-removal": {
name: "Silence Removal",
description: "Strip silent sections from audio",
},
"noise-reduction": {
name: "Noise Reduction",
description: "Reduce background noise with FFT-based denoising",
},
"merge-audio": {
name: "Merge Audio",
description: "Combine multiple audio files into one",
},
"split-audio": {
name: "Split Audio",
description: "Split audio by time, equal parts, or silence detection",
},
"ringtone-maker": {
name: "Ringtone Maker",
description: "Create a ringtone clip from any audio file",
},
"waveform-image": {
name: "Waveform Image",
description: "Generate a waveform visualization as a PNG image",
},
"audio-metadata": {
name: "Audio Metadata",
description: "View, edit, or strip audio tags (ID3)",
},
"merge-pdf": {
name: "Merge PDFs",
description: "Combine multiple PDFs into one",
},
"split-pdf": {
name: "Split PDF",
description: "Extract pages or split into parts",
},
"compress-pdf": {
name: "Compress PDF",
description: "Shrink PDF file size",
},
"rotate-pdf": {
name: "Rotate PDF",
description: "Rotate pages in a PDF",
},
"convert-document": {
name: "Convert Document",
description: "Convert between Word, OpenDocument, RTF, and plain text formats",
},
"convert-presentation": {
name: "Convert Presentation",
description: "Convert between PowerPoint and OpenDocument presentation formats",
},
"convert-spreadsheet": {
name: "Convert Spreadsheet",
description:
"Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.",
},
"excel-to-pdf": {
name: "Excel to PDF",
description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.",
},
"word-to-pdf": {
name: "Word to PDF",
description: "Convert Word documents to PDF",
},
"extract-pages": {
name: "Extract Pages",
description: "Pull selected pages into a new PDF",
},
"remove-pages": {
name: "Remove Pages",
description: "Delete specific pages from a PDF",
},
"organize-pdf": {
name: "Organize PDF",
description: "Reorder pages with an explicit page order",
},
"protect-pdf": {
name: "Protect PDF",
description: "Add password protection (AES-256 encryption)",
},
"unlock-pdf": {
name: "Unlock PDF",
description: "Remove password protection from a PDF",
},
"repair-pdf": {
name: "Repair PDF",
description: "Attempt to repair a damaged or corrupted PDF",
},
"linearize-pdf": {
name: "Web-Optimize PDF",
description: "Linearize a PDF for fast web viewing",
},
"grayscale-pdf": {
name: "Grayscale PDF",
description: "Convert all colors to grayscale",
},
"pdfa-convert": {
name: "PDF/A Convert",
description: "Convert to archival PDF/A-2",
},
"crop-pdf": {
name: "Crop PDF",
description: "Crop all pages with a uniform margin",
},
"nup-pdf": {
name: "N-up PDF",
description: "Arrange multiple pages per sheet",
},
"booklet-pdf": {
name: "Booklet PDF",
description: "Arrange pages for folding into a booklet",
},
"watermark-pdf": {
name: "Watermark PDF",
description: "Add a text watermark to every page",
},
"pdf-page-numbers": {
name: "PDF Page Numbers",
description: "Add page numbers to every page",
},
"flatten-pdf": {
name: "Flatten PDF",
description: "Bake forms and annotations into page content",
},
"redact-pdf": {
name: "Redact PDF",
description: "Permanently remove text occurrences (verified true redaction)",
},
"pdf-to-text": {
name: "PDF to Text",
description: "Extract plain text from a PDF",
},
"pdf-to-word": {
name: "PDF to Word",
description: "Best for text-based PDFs; scanned pages need OCR",
},
"pdf-metadata": {
name: "PDF Metadata",
description: "Read and write PDF document metadata",
},
"powerpoint-to-pdf": {
name: "PowerPoint to PDF",
description: "Convert presentations to PDF",
},
"html-to-pdf": {
name: "HTML to PDF",
description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.",
},
"markdown-to-docx": {
name: "Markdown to Word",
description: "Convert a Markdown file to a Word document (DOCX)",
},
"markdown-to-html": {
name: "Markdown to HTML",
description:
"Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.",
},
"markdown-to-pdf": {
name: "Markdown to PDF",
description:
"Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.",
},
"epub-convert": {
name: "Convert EPUB",
description:
"Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.",
},
"to-epub": {
name: "Convert to EPUB",
description: "Convert Word, Markdown, HTML, or plain text files to EPUB",
},
"csv-excel": {
name: "CSV to Excel",
description: "Convert between CSV and Excel (XLSX), both directions",
},
"csv-json": {
name: "CSV to JSON",
description: "Convert between CSV and JSON, both directions",
},
"json-xml": {
name: "JSON to XML",
description: "Convert between JSON and XML, both directions",
},
"split-csv": {
name: "Split CSV",
description: "Split a CSV into smaller files by row count",
},
"merge-csvs": {
name: "Merge CSVs",
description: "Combine multiple CSV or TSV files with matching columns into one",
},
"yaml-json": {
name: "YAML / JSON",
description: "Convert between YAML and JSON, both directions",
},
"xml-to-csv": {
name: "XML to CSV",
description: "Extract repeating elements from XML into a CSV table",
},
"create-zip": {
name: "Create ZIP",
description: "Bundle multiple files into a single ZIP archive",
},
"extract-zip": {
name: "Extract ZIP",
description:
"Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.",
},
pipeline: {
name: "Конструктор Pipeline",
description: "Об'єднання кількох інструментів у робочий процес",
},
processing: { canceled: "Processing canceled" },
mediaPlayer: {
unsupported: "Your browser does not support this media format.",
},
documentView: {
loadFailed: "Failed to load document.",
previousPage: "Previous page",
nextPage: "Next page",
inputNotPreviewable: "Preview not available for this file type",
},
},
toolSettings: {
compress: {
compressionMode: "Режим стиснення",
targetSize: "Цільовий розмір",
quality: "Якість",
smallestFile: "Найменший файл",
bestQuality: "Найкраща якість",
submit: "Стиснути",
submitBatch: "Стиснути ({count} файлів)",
progressLabel: "Стиснення",
original: "Оригінал: {size} KB",
processed: "Оброблено: {size} KB",
saved: "Зекономлено: {percent}%",
},
resize: {
customSize: "Власний розмір",
scale: "Масштаб",
presets: "Шаблони",
contentAware: "Контентно-залежний",
widthPx: "Ширина (px)",
heightPx: "Висота (px)",
fitMode: "Режим вписування",
cropToFit: "Обрізати за розміром",
fitInside: "Вписати всередину",
stretch: "Розтягнути",
limitToOriginalSize: "Обмежити оригінальним розміром",
limitToOriginalSizeHint:
"Якщо зображення вже менше за цільовий розмір, залишити як є замість збільшення",
scalePercent: "Масштаб (%)",
resizeToSquare: "Привести до квадрату",
protectFaces: "Захистити обличчя",
smoothing: "Згладжування",
edgeSensitivity: "Чутливість до країв",
submit: "Змінити розмір",
submitBatch: "Змінити розмір ({count} файлів)",
progressLabel: "Зміна розміру",
},
crop: {
aspectRatio: "Пропорції",
custom: "Власне",
positionAndSize: "Позиція та розмір",
ruleOfThirds: "Правило третин",
leftOffsetPx: "Відступ зліва (px)",
topOffsetPx: "Відступ зверху (px)",
submit: "Обрізати",
submitBatch: "Обрізати ({count} файлів)",
progressLabel: "Обрізка",
},
rotate: {
rotate: "Обернути",
angle: "Кут",
straighten: "Вирівняти",
flip: "Відобразити",
horizontal: "Горизонтально",
vertical: "Вертикально",
resetAllChanges: "Скинути всі зміни",
submit: "Застосувати",
submitBatch: "Застосувати ({count} файлів)",
progressLabel: "Застосування",
},
convert: {
targetFormat: "Цільовий формат",
sourceFormat: "Вихідний формат",
quality: "Якість",
submit: "Конвертувати",
submitBatch: "Конвертувати ({count} файлів)",
progressLabel: "Конвертація",
},
"optimize-for-web": {
outputFormat: "Формат виводу",
quality: "Якість",
smallestFile: "Найменший файл",
bestQuality: "Найкраща якість",
maxDimensions: "Макс. розміри",
maxWidth: "Макс. ширина",
maxHeight: "Макс. висота",
stripMetadata: "Видалити метадані",
sizeComparison: "Порівняння розмірів",
optimized: "Оптимізовано:",
smaller: "На {percent}% менше",
larger: "На {percent}% більше",
submit: "Обробити й завантажити",
submitBatch: "Обробити й завантажити ({count} файлів)",
progressLabel: "Оптимізація",
},
"strip-metadata": {
currentMetadata: "Поточні метадані",
readingMetadata: "Читання метаданих...",
noMetadataFound: "Метадані у цьому зображенні не знайдено.",
removeAllMetadata: "Видалити всі метадані",
selectSpecific: "Або оберіть конкретні метадані:",
stripExif: "Видалити EXIF (інформація про камеру, дата, експозиція)",
stripGps: "Видалити GPS (дані про місцезнаходження)",
stripIcc: "Видалити ICC (колірний профіль)",
stripXmp: "Видалити XMP (розширювані метадані)",
locationFound: "місцезнаходження знайдено",
locationWarning:
"Це зображення містить Ваше точне місцезнаходження. Рекомендуємо видалити GPS-дані перед публікацією.",
metadataSections: "Знайдено {count} розділ метаданих",
metadataSectionsPlural: "Знайдено {count} розділів метаданих",
metadataRemoved: "Метадані видалено: {size} KB",
submit: "Видалити метадані",
progressLabel: "Видалення метаданих",
},
"edit-metadata": {
readingMetadata: "Читання метаданих...",
couldNotReadMetadata: "Не вдалося прочитати метадані. Поля будуть порожніми.",
basicInfo: "Основна інформація",
description: "Опис",
artist: "Автор",
copyright: "Авторські права",
software: "Програма",
iptc: "IPTC",
title: "Заголовок",
headline: "Підзаголовок",
city: "Місто",
stateProvince: "Область/Регіон",
country: "Країна",
dateAndTime: "Дата і час",
editDates: "Редагувати дати",
shiftAllDates: "Зсунути всі дати",
dateModified: "Дата зміни",
dateTaken: "Дата зйомки",
shiftHint: "Зсунути всі поля дат на вказаний інтервал (корисно для корекції часових поясів)",
direction: "Напрямок",
forward: "+ Уперед",
backward: "- Назад",
hoursMinutes: "Години:Хвилини",
locationGps: "Місцезнаходження (GPS)",
locationDataFound: "Дані про місцезнаходження знайдено",
noGpsData: "Немає GPS-даних. Додайте координати нижче.",
latitude: "Широта",
longitude: "Довгота",
altitudeMeters: "Висота (метри)",
removeAllGpsData: "Видалити всі GPS-дані",
keywords: "Ключові слова",
addKeywordPlaceholder: "Додайте ключове слово та натисніть Enter",
addToExisting: "Додати до наявних",
replaceAll: "Замінити всі",
allMetadata: "Усі метадані",
templates: "Шаблони",
templateNamePlaceholder: "Назва шаблону",
uploadPrompt: "Завантажте зображення для редагування метаданих.",
changes: "Змін: {count}:",
modified: "Змінено: {count}",
removed: "Видалено: {count}",
gpsCleared: "GPS видалено",
gpsAdded: "GPS додано",
datesShifted: "дати зсунуто",
submit: "Застосувати метадані",
progressLabel: "Запис метаданих",
},
"bulk-rename": {
pattern: "Шаблон",
patternHint: "Змінні: {{index}}, {{padded}}, {{original}}",
startIndex: "Початковий індекс",
preview: "Попередній перегляд",
andMore: "... і ще {count}",
renaming: "Перейменування...",
submit: "Перейменувати {count} файлів",
zipDownloaded: "ZIP-архів успішно завантажено",
},
"image-to-pdf": {
imageCount: "{count} зображення буде сконвертовано у {mode}",
imageCountPlural: "{count} зображень буде сконвертовано у {mode}",
singlePdfMode: "один PDF, одне зображення на сторінку",
separatePdfMode: "окремі PDF, по одному на зображення",
combineAllImages: "Об'єднати всі зображення в один PDF",
pageSize: "Розмір сторінки",
orientation: "Орієнтація",
portrait: "Книжкова",
landscape: "Альбомна",
margin: "Поля",
targetSizeLabel: "Цільовий розмір файлу (необов'язково)",
targetSizePlaceholder: "напр. 2",
targetSizeHint: "Залиште порожнім для максимальної якості",
targetSizeMet: "Цільовий розмір досягнуто",
targetSizeNotMet:
"Не вдалося досягти цільового розміру. Файл стиснуто до мінімальної якості.",
targetSizeTooSmall: "Цільовий розмір має бути не менше 50KB",
jpegQualityLabel: "Використана якість JPEG",
noImage: "Немає зображення",
submitCollate: "Створити PDF ({count} сторінок)",
submitSeparate: "Створити {count} PDF",
downloadPdf: "Завантажити PDF",
downloadZip: "Завантажити ZIP",
progressLabel: "Створення PDF",
uploadingImages: "Завантаження зображень...",
processingPages: "Обробка {count} сторінок...",
},
"pdf-to-image": {
dropPdf: "Перетягніть PDF сюди або натисніть для вибору",
readingPdf: "Читання PDF...",
pageCount: "{count} сторінка",
pageCountPlural: "{count} сторінок",
outputFormat: "Формат виводу",
quality: "Якість",
resolutionDpi: "Роздільність (DPI)",
dpiScreen: "Екран",
dpiStandard: "Стандарт",
dpiPrint: "Друк",
dpiHighQuality: "Висока якість",
colorMode: "Колірний режим",
colorModeColor: "Кольоровий",
colorModeGrayscale: "Відтінки сірого",
colorModeBw: "Ч/Б",
pages: "Сторінки",
allPages: "Усі сторінки",
pagesHint: "напр. 1-3, 5, 8-10 (у документі {count} сторінок)",
converting: "Конвертація...",
submit: "Конвертувати {count} сторінку",
submitPlural: "Конвертувати {count} сторінок",
downloadAllZip: "Завантажити все (ZIP)",
},
favicon: {
uploadHint:
"Завантажте квадратні зображення (рекомендовано 512x512 або більше) для генерації всіх розмірів Favicon та іконок застосунку.",
multipleHint: "Кожне з {count} зображень отримає власну теку у ZIP-архіві.",
generatedSizes: "Розміри, що генеруються (на зображення)",
plusManifest: "+ manifest.json + HTML-фрагмент",
submit: "Згенерувати Favicon ({count} зображення)",
submitPlural: "Згенерувати Favicon ({count} зображень)",
downloadZip: "Завантажити ZIP з Favicon",
progressLabel: "Генерація Favicon",
},
"adjust-colors": {
light: "Світло",
brightness: "Яскравість",
contrast: "Контраст",
exposure: "Експозиція",
color: "Колір",
saturation: "Насиченість",
temperature: "Температура",
temperatureHint: "холодна / тепла",
tint: "Відтінок",
tintHint: "зелений / пурпуровий",
hue: "Тон",
detail: "Деталізація",
sharpness: "Різкість",
effects: "Ефекти",
none: "немає",
grayscale: "відтінки сірого",
sepia: "сепія",
invert: "інверсія",
colorChannels: "Кольорові канали",
channelModified: "змінено",
red: "Червоний",
green: "Зелений",
blue: "Синій",
resetAll: "Скинути все",
submit: "Застосувати",
submitBatch: "Застосувати ({count} файлів)",
progressLabel: "Налаштування кольорів",
},
sharpening: {
method: "Метод",
adaptive: "Адаптивний",
unsharpMask: "Маска нерізкості",
highPass: "Високочастотний",
presets: "Шаблони",
textureAmount: "Кількість текстури",
amount: "Кількість",
strength: "Сила",
noiseReduction: "Придушення шуму",
off: "вимк.",
lightDenoise: "легке",
mediumDenoise: "середнє",
strongDenoise: "сильне",
advancedControls: "Розширені налаштування",
radius: "Радіус",
flatProtection: "Захист рівних ділянок",
detailThreshold: "Поріг деталізації",
haloLimitLight: "Обмеження ореолу (світлий)",
haloLimitDark: "Обмеження ореолу (темний)",
threshold: "Поріг",
kernelSize: "Розмір ядра",
submit: "Підвищити різкість",
submitBatch: "Підвищити різкість ({count} файлів)",
progressLabel: "Підвищення різкості",
},
"replace-color": {
sourceColor: "Вихідний колір (для заміни)",
targetColor: "Цільовий колір (замінник)",
makeTransparent: "Зробити прозорим",
tolerance: "Допуск",
exactMatch: "Точний збіг",
wideRange: "Широкий діапазон",
submit: "Замінити колір",
submitBatch: "Замінити колір ({count} файлів)",
progressLabel: "Заміна кольору",
},
"color-blindness": {
simulationType: "Тип симуляції",
redGreen: "Червоно-зелений",
blueYellow: "Синьо-жовтий",
monochromatic: "Монохроматичний",
submit: "Симулювати",
submitBatch: "Симулювати ({count} файлів)",
progressLabel: "Симуляція дальтонізму",
},
"remove-background": {
subject: "Об'єкт",
people: "Люди",
products: "Товари",
general: "Загальне",
passportIdPhoto: "Паспорт / Посвідчення",
quality: "Якість",
fast: "Швидко",
hd: "HD",
max: "Макс.",
ultra: "Ультра",
background: "Фон",
transparent: "Прозорий",
bgColor: "Колір",
gradient: "Градієнт",
image: "Зображення",
gradientDirection: "Напрямок",
chooseBackgroundImage: "Оберіть фонове зображення",
effectsSection: "Ефекти",
effectsActive: "активні",
blurBackground: "Розмиття фону",
intensity: "Інтенсивність",
addShadow: "Додати тінь",
opacity: "Непрозорість",
outputFormat: "Output Format",
edgeSmoothing: "Edge Smoothing",
edgeSmoothingOff: "Off",
edgeSmoothingLight: "Light",
edgeSmoothingMedium: "Medium",
edgeSmoothingStrong: "Strong",
colorDecontamination: "Color Decontamination",
rendering: "Рендеринг...",
submit: "Видалити фон",
submitBatch: "Видалити фон ({count} файлів)",
progressLabel: "Видалення фону",
},
upscale: {
scaleFactor: "Коефіцієнт масштабування",
quality: "Якість",
enhanceFaces: "Поліпшити обличчя",
noiseReduction: "Придушення шуму",
noiseReductionHint:
"Згладжує зернистість і шум. Вищі значення видаляють більше шуму, але можуть розмити деталі.",
outputFormat: "Формат виводу",
submit: "Збільшити {scale}x",
submitBatch: "Збільшити {scale}x ({count} файлів)",
progressLabel: "Збільшення зображення",
progressLabelBatch: "Збільшення {count} зображень",
},
"erase-object": {
brushSize: "Розмір пензля",
fine: "Тонкий",
wide: "Широкий",
undo: "Скасувати",
clear: "Очистити",
outputFormat: "Формат виводу",
quality: "Якість",
paintHint: "Замалюйте об'єкти, які хочете видалити. Натисніть Ctrl+Z для скасування.",
submit: "Видалити об'єкт",
submitBatch: "Видалити все ({count})",
progressLabel: "Видалення об'єкта",
},
ocr: {
quality: "Якість",
enhanceBeforeScanning: "Поліпшити перед скануванням",
enhanceHint:
"Автоматичне вирівнювання, поліпшення контрасту, видалення шуму та збільшення зображення перед скануванням для кращої точності.",
language: "Мова",
autoDetect: "Автовизначення",
extractedText: "Витягнутий текст",
noTextDetected: "Текст на цьому зображенні не виявлено",
characters: "{count} символів",
submit: "Витягнути текст",
submitBatch: "Витягнути текст ({count} файлів)",
progressLabel: "Витягування тексту",
},
"ocr-pdf": {
quality: "Якiсть",
language: "Мова",
autoDetect: "Автовизначення",
pages: "Сторiнки",
pagesPlaceholder: "all, 1-3, 5",
pagesHint: "Введiть номери сторiнок або дiапазони (напр. 1-3, 5, 8-10). Макс. 50 сторiнок.",
submit: "Витягнути текст",
submitBatch: "Витягнути текст ({count} файлiв)",
progressLabel: "Витягування тексту з PDF",
},
"blur-faces": {
blurRadius: "Радіус розмиття",
blurLight: "Легке",
blurHeavy: "Сильне",
detectionSensitivity: "Чутливість виявлення",
moreFaces: "Більше облич",
fewerFaces: "Менше облич",
submit: "Розмити обличчя",
progressLabel: "Розмиття облич",
},
"enhance-faces": {
quality: "Якість",
enhancementStrength: "Сила поліпшення",
onlyCenterFace: "Лише центральне обличчя",
detectionSensitivity: "Чутливість виявлення",
submit: "Поліпшити обличчя",
submitBatch: "Поліпшити обличчя ({count} файлів)",
progressLabel: "Поліпшення облич",
},
"smart-crop": {
subjectFocus: "Фокус на об'єкті",
faceFocus: "Фокус на обличчі",
autoTrim: "Автообрізка",
customSize: "Власний розмір",
socialPresets: "Шаблони для соцмереж",
detectionStrategy: "Стратегія виявлення",
detectionStrategyHint:
"Увага знаходить найбільш візуально помітну ділянку. Ентропія знаходить ділянку з найбільшою деталізацією та інформацією.",
attention: "Увага",
entropy: "Ентропія",
padding: "Відступ",
paddingHint: "Додатковий простір навколо ділянки фокусу",
outputQuality: "Якість виводу",
outputQualityHint: "Для виводу у JPEG та WebP. PNG завжди без втрат.",
subjectDescription:
"Визначає найцікавішу ділянку за допомогою аналізу помітності та обрізає до цільового розміру.",
framing: "Кадрування",
facePadding: "Відступ навколо обличчя",
facePaddingHint: "Додатковий простір навколо виявлених облич",
fewerFalsePositives: "Менше хибних спрацювань",
faceDescription:
"Використовує AI-виявлення облич для правильного кадрування. За відсутності облич перемикається на фокус по об'єкту.",
trimTolerance: "Допуск",
trimDescription:
"Наскільки піксель рамки може відрізнятися від кольору краю і все ще бути обрізаним. Вище = агресивніше.",
padToSquare: "Доповнити до квадрату",
targetSizePx: "Цільовий розмір (px)",
padColor: "Колір заповнення",
trimHint:
'Видаляє однокольорові рамки навколо об\'єкта. Увімкніть "Доповнити до квадрату" для зображень, готових до e-commerce.',
submitSubject: "Розумна обрізка",
submitFace: "Обрізка по обличчю",
submitTrim: "Обрізати поля",
},
imageEnhancement: {
enhancementMode: "Режим поліпшення",
auto: "Авто",
portrait: "Портрет",
landscape: "Пейзаж",
lowLight: "Слабке освітлення",
food: "Їжа",
document: "Документ",
intensity: "Інтенсивність",
deepEnhance: "Глибоке поліпшення (AI)",
deepEnhanceDescription: "Видаляє шум та артефакти за допомогою AI",
deepEnhanceRequires: "Потрібен пакет збільшення й поліпшення",
analyzingImage: "Аналіз зображення...",
detectedIssues: "Виявлені проблеми",
imageLooksGood: "Зображення виглядає добре. Підлаштуйте за допомогою повзунка інтенсивності.",
issueUnderexposed: "Низька експозиція",
issueOverexposed: "Переекспоновано",
issueLowContrast: "Плоский контраст",
issueColorCast: "Колірний зсув",
issueDesaturated: "Знебарвлено",
issueSoftFocus: "М'який фокус",
issueNoisy: "Зашумлено",
submit: "Поліпшити",
submitDeep: "Глибоке поліпшення",
submitBatch: "Поліпшити ({count} файлів)",
submitDeepBatch: "Глибоке поліпшення ({count} файлів)",
progressLabel: "Поліпшення зображення",
progressLabelBatch: "Поліпшення {count} зображень",
},
"noise-removal": {
denoisingTier: "Рівень шумозаглушення",
quick: "Швидкий",
balanced: "Збалансований",
quality: "Якість",
maximum: "Максимальний",
quickDesc: "Швидкий, легкий",
balancedDesc: "Добра якість, помірна швидкість",
qualityDesc: "На основі AI, повільний",
maximumDesc: "Найкраща AI-модель, найповільніший",
strength: "Сила",
subtle: "Легка",
aggressive: "Агресивна",
detailPreservation: "Збереження деталей",
smooth: "Гладкі",
sharp: "Чіткі",
colorNoise: "Кольоровий шум",
heavy: "Сильний",
outputFormat: "Формат виводу",
gifAiWarning:
"AI-шумозаглушення для файлів GIF обробляє лише перший кадр. Для анімованих GIF використовуйте швидкий або збалансований рівень.",
submit: "Видалити шум",
submitBatch: "Видалити шум ({count} файлів)",
progressLabel: "Видалення шуму",
progressLabelBatch: "Видалення шуму з {count} зображень",
},
"red-eye-removal": {
sensitivity: "Чутливість",
strict: "Сувора",
aggressive: "Агресивна",
correctionStrength: "Сила корекції",
subtle: "Легка",
dark: "Темна",
outputFormat: "Формат виводу",
quality: "Якість",
submit: "Виправити червоні очі",
submitBatch: "Виправити червоні очі ({count} файлів)",
progressLabel: "Виправлення червоних очей",
progressLabelBatch: "Виправлення червоних очей на {count} зображеннях",
},
"restore-photo": {
scratchRemoval: "Видалення подряпин",
scratchRemovalDesc: "Виявлення та відновлення подряпин, розривів, плям",
faceEnhancement: "Поліпшення облич",
faceEnhancementDesc: "Відновлення пошкоджених облич за допомогою CodeFormer AI",
faceFidelity: "Вірність обличчя",
enhanced: "Поліпшене",
faithful: "Вірне",
noiseReduction: "Придушення шуму",
noiseReductionDesc: "Видалення зернистості та шуму зі старих фото",
denoiseStrength: "Сила шумозаглушення",
autoColorize: "Автоколоризація",
autoColorizeDesc: "Додавання кольору до чорно-білих фото за допомогою DDColor AI",
colorizeStrength: "Сила колоризації",
vivid: "Яскравий",
submit: "Відновити фото",
submitBatch: "Відновити фото ({count})",
progressLabel: "Відновлення фото",
progressLabelBatch: "Відновлення {count} фотографій",
},
"content-aware-resize": {
widthPx: "Ширина (px)",
heightPx: "Висота (px)",
resizeToSquare: "Привести до квадрату",
protectFaces: "Захистити обличчя",
protectFacesHint:
"Виявлення та захист ділянок облич від видалення швів за допомогою розпізнавання облич",
smoothing: "Згладжування",
edgeSensitivity: "Чутливість до країв",
submit: "Змінити розмір",
submitBatch: "Змінити розмір ({count} файлів)",
progressLabel: "Контентно-залежне масштабування",
},
"ai-canvas-expand": {
quality: "Якість",
fast: "Швидко",
balanced: "Збалансовано",
highQuality: "Висока якість",
fastDesc: "Швидкий попередній перегляд, менше проходів AI",
balancedDesc: "Добра якість, помірна швидкість",
highQualityDesc: "Найкращий результат, повільніше",
extendToAspectRatio: "Розширити до пропорцій",
extendByPixels: "Розширити на (пікселі)",
top: "Зверху",
right: "Справа",
bottom: "Знизу",
left: "Зліва",
newSize: "Новий розмір: {width} x {height}",
submit: "Розширити полотно",
submitBatch: "Розширити ({count} файлів)",
progressLabel: "Розширення полотна",
},
colorize: {
aiModel: "AI-модель",
fast: "Швидка",
fastDesc: "Швидкий результат",
balanced: "Збалансована",
balancedDesc: "Найкраща з доступних",
best: "Найкраща",
bestDesc: "Найвища якість",
colorIntensity: "Інтенсивність кольору",
grayscaleLabel: "Відтінки сірого",
subtleLabel: "Приглушений",
naturalLabel: "Натуральний",
vividLabel: "Яскравий",
intensityHint: "Нижчі значення дають більш приглушені, вінтажні кольори.",
strength: "Сила колоризації",
submit: "Колоризувати",
submitBatch: "Колоризувати ({count} файлів)",
progressLabel: "Колоризація",
progressLabelBatch: "Колоризація {count} зображень",
},
"passport-photo": {
country: "Країна",
searchCountries: "Пошук країн...",
noCountriesFound: "Країни не знайдено",
customDimensions: "Власні розміри",
documentType: "Тип документа",
dimensionsMm: "Розміри (мм)",
dpi: "DPI",
pixelsPerInch: "пікселів на дюйм",
backgroundColor: "Колір фону",
maxFileSize: "Макс. розмір файлу",
noLimit: "Без обмежень",
customKb: "Вказати у KB...",
uploadPortrait: "Завантажте портретне фото",
uploadHint:
"Перетягніть або завантажте зображення на ліву панель для попереднього перегляду фото на документи",
analyzingPhoto: "Аналіз фото",
detectingLandmarks: "Визначення орієнтирів обличчя та видалення фону...",
generatePassportPhoto: "Створити фото на документи",
generating: "Створення...",
downloadPhoto: "Завантажити фото",
faceCentered: "Обличчя по центру",
headLevel: "Голова рівно",
lookingStraight: "Погляд прямо",
faceSize: "Розмір обличчя",
whatYouSee: "Ви завантажуєте те, що бачите",
dragToAdjust: "Перетягніть для налаштування",
scrollToZoom: "Прокрутіть для масштабування",
photoGenerated: "Фото створено. Завантажте з лівої панелі.",
},
"transcribe-audio": {
language: "Мова",
autoDetect: "Автовизначення",
outputFormat: "Формат виводу",
plainText: "Звичайний текст",
submit: "Транскрибувати",
submitBatch: "Транскрибувати ({count} файлiв)",
progressLabel: "Транскрипцiя аудiо",
},
"auto-subtitles": {
language: "Мова",
autoDetect: "Автовизначення",
format: "Формат субтитрiв",
submit: "Створити субтитри",
submitBatch: "Створити субтитри ({count} файлiв)",
progressLabel: "Створення субтитрiв",
},
"transparency-fixer": {
description: "Завантажте PNG з хибною прозорістю, і ми виправимо його в один клік.",
removeWatermark: "Видалити водяний знак",
removeWatermarkHelp: "Виявлення та видалення напівпрозорих водяних знаків",
requiresEraser: "Потрібен пакет видалення об'єктів",
advanced: "Розширені",
defringe: "Видалення ореолу",
outputFormat: "Формат виводу",
submit: "Виправити прозорість",
submitBatch: "Виправити прозорість ({count} файлів)",
progressLabel: "Виправлення прозорості",
},
"background-replace": {
color: "Колір фону",
submit: "Замінити фон",
submitBatch: "Замінити фон ({count} файлів)",
progressLabel: "Заміна фону",
},
"blur-background": {
intensity: "Інтенсивність розмиття",
submit: "Розмити фон",
submitBatch: "Розмити фон ({count} файлів)",
progressLabel: "Розмиття фону",
},
"watermark-text": {
watermarkText: "Текст водяного знаку",
fontSize: "Розмір шрифту",
color: "Колір",
opacity: "Непрозорість",
position: "Позиція",
rotation: "Обертання",
center: "Центр",
topLeft: "Зверху ліворуч",
topRight: "Зверху праворуч",
bottomLeft: "Знизу ліворуч",
bottomRight: "Знизу праворуч",
tiled: "Плиткою",
submit: "Додати водяний знак",
submitBatch: "Додати водяний знак ({count} файлів)",
progressLabel: "Додавання водяного знаку",
},
"watermark-image": {
uploadWatermark: "Завантажити зображення водяного знаку",
position: "Позиція",
opacity: "Непрозорість",
scale: "Масштаб",
submit: "Застосувати водяний знак",
submitBatch: "Застосувати водяний знак ({count} файлів)",
},
"text-overlay": {
text: "Текст",
fontSize: "Розмір шрифту",
color: "Колір",
position: "Позиція",
top: "Зверху",
center: "Центр",
bottom: "Знизу",
backgroundBox: "Фоновий блок",
backgroundColor: "Колір фону",
shadow: "Тінь",
submit: "Додати текст",
submitBatch: "Додати текст ({count} файлів)",
progressLabel: "Додавання тексту",
download: "Download",
defaultText: "Your Text Here",
},
compose: {
uploadOverlay: "Завантажити зображення для накладання",
xPosition: "Позиція X",
yPosition: "Позиція Y",
opacity: "Непрозорість",
blendMode: "Режим накладання",
submit: "Накласти",
},
"meme-generator": {
selectTemplate: "Оберіть шаблон з галереї або завантажте власне зображення для початку.",
chooseLayout: "Оберіть макет тексту для Вашого зображення.",
textContent: "Текст",
textStyle: "Стиль тексту",
font: "Шрифт",
fontSize: "Розмір шрифту",
textColor: "Колір тексту",
strokeColor: "Колір обведення",
allCaps: "ВСІ ВЕЛИКІ",
generate: "Створити Meme",
generating: "Створення...",
downloadMeme: "Завантажити Meme",
backToGallery: "Назад до галереї",
},
info: {
loadingInfo: "Завантаження інформації...",
filename: "Ім'я файлу",
fileSize: "Розмір файлу",
dimensions: "Розміри",
format: "Формат",
channels: "Канали",
colorSpace: "Колірний простір",
density: "Щільність",
bitDepth: "Глибина кольору",
progressive: "Прогресивний",
pages: "Сторінки",
hasAlpha: "Альфа-канал",
hasProfile: "Профіль",
hasExif: "EXIF",
hasIcc: "ICC",
hasXmp: "XMP",
readInfo: "Read Info",
reading: "Reading...",
channelStats: "Channel Stats",
yes: "Yes",
no: "No",
na: "N/A",
failedToRead: "Failed to read info",
},
compare: {
uploadSecondImage: "Завантажити друге зображення",
similarity: "Подібність: {percent}%",
submit: "Порівняти",
downloadDiff: "Завантажити різницю",
},
"find-duplicates": {
preset: "Шаблон",
exact: "Точні",
similar: "Подібні",
loose: "Приблизні",
exactDesc: "Ідентичні копії, одне зображення у різних форматах.",
similarDesc: "Масштабовані, перестиснені або злегка відредаговані копії.",
looseDesc: "Візуально пов'язані зображення, незначні кадрування, різна експозиція.",
threshold: "Поріг",
submit: "Шукати дублікати",
scanning: "Сканування...",
},
"color-palette": {
submit: "Витягнути палітру",
extracting: "Витягування...",
dominantColors: "Домінуючі кольори",
clickToCopy: "Натисніть для копіювання",
},
"qr-generate": {
contentType: "Тип вмісту",
url: "URL",
text: "Текст",
wifi: "WiFi",
vcard: "vCard",
email: "Email",
phone: "Телефон",
sms: "SMS",
styling: "Стилізація",
dotStyle: "Стиль точок",
cornerSquareStyle: "Стиль кутових квадратів",
cornerDotStyle: "Стиль кутових точок",
foregroundColor: "Колір переднього плану",
bgColor: "Колір фону",
logo: "Логотип",
downloadFormat: "Формат завантаження",
submit: "Згенерувати QR-код",
download: "Завантажити QR-код",
},
"html-to-image": {
modeUrl: "URL",
modeHtml: "HTML File",
htmlFile: "HTML File",
url: "URL",
urlPlaceholder: "https://snapotter.com",
format: "Output Format",
quality: "Quality",
devicePreset: "Device",
viewportWidth: "Width",
viewportHeight: "Height",
fullPage: "Full Page",
submit: "Capture",
download: "Download Screenshot",
capturing: "Capturing webpage...",
errorTimeout: "Page took too long to load",
errorBlocked: "This URL cannot be captured",
errorUnavailable: "Screenshot service is not available",
errorFailed: "Failed to capture the page",
placeholder: "Enter a URL and click Capture",
presets: {
desktop: "Desktop",
tablet: "Tablet",
mobile: "Mobile",
custom: "Custom",
},
},
"barcode-read": {
submit: "Сканувати штрихкоди",
submitBatch: "Сканувати ({count} файлів)",
scanning: "Сканування...",
noBarcodesFound: "Штрихкоди не знайдено",
barcodesFound: "Знайдено {count} штрихкод",
barcodesFoundPlural: "Знайдено {count} штрихкодів",
},
collage: {
template: "Шаблон",
aspectRatio: "Пропорції",
gap: "Відступ",
cornerRadius: "Заокруглення кутів",
backgroundColor: "Колір фону",
outputFormat: "Формат виводу",
quality: "Якість",
submit: "Створити колаж",
downloadCollage: "Завантажити колаж",
},
stitch: {
direction: "Напрямок",
horizontal: "Горизонтально",
vertical: "Вертикально",
grid: "Сітка",
gridColumns: "Стовпці сітки",
resizeMode: "Режим масштабування",
fit: "Вписати",
original: "Оригінал",
stretchMode: "Розтягнути",
cropMode: "Обрізати",
alignment: "Вирівнювання",
start: "Початок",
center: "Центр",
end: "Кінець",
gap: "Відступ",
border: "Рамка",
cornerRadius: "Заокруглення кутів",
backgroundColor: "Колір фону",
outputFormat: "Формат виводу",
quality: "Якість",
submit: "Об'єднати зображення",
},
split: {
modeGrid: "Сітка",
modeTileSize: "Розмір плитки",
presets: "Шаблони",
columns: "Стовпці",
rows: "Рядки",
tileWidth: "Ширина плитки",
tileHeight: "Висота плитки",
outputFormat: "Формат виводу",
quality: "Якість",
submit: "Розділити зображення",
downloadAll: "Завантажити все (ZIP)",
},
border: {
presets: "Шаблони",
borderWidth: "Ширина рамки",
borderColor: "Колір рамки",
padding: "Відступ",
paddingColor: "Колір відступу",
cornerRadius: "Заокруглення кутів",
shadow: "Тінь",
shadowBlur: "Розмиття тіні",
shadowOffsetX: "Зсув тіні X",
shadowOffsetY: "Зсув тіні Y",
shadowColor: "Колір тіні",
shadowOpacity: "Непрозорість тіні",
submit: "Додати рамку",
submitBatch: "Додати рамку ({count} файлів)",
progressLabel: "Додавання рамки",
},
beautify: {
preset: "Шаблон",
backgroundType: "Тип фону",
solidColor: "Суцільний колір",
linearGradient: "Лінійний градієнт",
radialGradient: "Радіальний градієнт",
customImage: "Власне зображення",
gradientAngle: "Кут градієнта",
padding: "Відступ",
borderRadius: "Заокруглення кутів",
shadowPreset: "Шаблон тіні",
deviceFrame: "Рамка пристрою",
submit: "Прикрасити",
submitBatch: "Прикрасити ({count} файлів)",
progressLabel: "Прикрашання знімку екрана",
},
"circle-crop": {
submit: "Circle Crop",
submitBatch: "Circle Crop ({count} files)",
progressLabel: "Cropping to circle",
},
duotone: {
shadow: "Shadow Color",
highlight: "Highlight Color",
submit: "Apply Duotone",
submitBatch: "Apply Duotone ({count} files)",
progressLabel: "Applying duotone",
},
"image-pad": {
target: "Target Ratio",
color: "Background Color",
submit: "Pad Image",
submitBatch: "Pad Image ({count} files)",
progressLabel: "Padding image",
},
pixelate: {
blockSize: "Block Size",
submit: "Pixelate",
submitBatch: "Pixelate ({count} files)",
progressLabel: "Pixelating",
},
vignette: {
strength: "Strength",
color: "Vignette Color",
submit: "Apply Vignette",
submitBatch: "Apply Vignette ({count} files)",
progressLabel: "Applying vignette",
},
"gif-webp": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting animation",
},
histogram: {
submit: "Generate Histogram",
submitBatch: "Generate Histogram ({count} files)",
progressLabel: "Generating histogram",
},
"lqip-placeholder": {
width: "Width",
blur: "Blur",
submit: "Generate Placeholder",
submitBatch: "Generate Placeholder ({count} files)",
progressLabel: "Generating placeholder",
},
"sprite-sheet": {
columns: "Columns",
padding: "Padding",
background: "Background Color",
submit: "Create Sprite Sheet",
submitBatch: "Create Sprite Sheet",
progressLabel: "Creating sprite sheet",
},
"svg-to-raster": {
outputFormat: "Формат виводу",
sizing: "Розмір",
scaleMode: "Масштаб",
customMode: "Власний",
scalePresets: "Шаблони масштабу",
dpiPresets: "Шаблони DPI",
customWidth: "Ширина (px)",
customHeight: "Висота (px)",
background: "Фон",
bgTransparent: "Прозорий",
bgColor: "Колір",
quality: "Якість",
submit: "Конвертувати SVG",
submitBatch: "Конвертувати ({count} файлів)",
progressLabel: "Конвертація SVG",
},
vectorize: {
preset: "Шаблон",
logo: "Логотип",
illustration: "Ілюстрація",
photo: "Фотографія",
sketch: "Ескіз",
customPreset: "Власний",
colorMode: "Колірний режим",
bw: "Ч/Б",
colorModeColor: "Кольоровий",
threshold: "Поріг",
colorPrecision: "Точність кольору",
layerDifference: "Різниця шарів",
filterSpeckle: "Фільтр артефактів",
pathMode: "Режим контурів",
cornerThreshold: "Поріг кутів",
invertColors: "Інвертувати кольори",
submit: "Векторизувати",
submitBatch: "Векторизувати ({count} файлів)",
progressLabel: "Векторизація",
},
"gif-tools": {
mode: "Режим",
resize: "Змінити розмір",
optimize: "Оптимізувати",
speed: "Швидкість",
reverse: "Реверс",
extract: "Витягнути",
rotateMode: "Обернути",
pixel: "Пікселі",
percentage: "Відсотки",
colors: "Кольори",
dither: "Дизеринг",
effort: "Зусилля",
speedFactor: "Коефіцієнт швидкості",
loopControl: "Керування циклом",
infinite: "Нескінченний",
once: "Один раз",
customLoop: "Власний",
loopCount: "Кількість циклів",
extractSingle: "Один кадр",
extractRange: "Діапазон",
extractAll: "Усі",
frameNumber: "Номер кадру",
frameStart: "Початковий кадр",
frameEnd: "Кінцевий кадр",
extractFormat: "Формат",
submit: "Обробити GIF",
submitBatch: "Обробити ({count} файлів)",
progressLabel: "Обробка GIF",
},
"image-to-base64": {
outputFormat: "Формат виводу",
keepOriginal: "Зберегти оригінал",
quality: "Якість",
maxWidth: "Макс. ширина",
maxHeight: "Макс. висота",
submit: "Конвертувати у Base64",
submitBatch: "Конвертувати ({count} файлів)",
copyBase64: "Копіювати Base64",
copyDataUri: "Копіювати Data URI",
copyImgTag: "Копіювати <img>",
copyCssUrl: "Копіювати CSS url()",
},
"barcode-generate": {
text: "Text",
type: "Barcode Type",
scale: "Scale",
includeText: "Include Text",
submit: "Generate Barcode",
download: "Download Barcode",
},
"chart-maker": {
kind: "Chart Type",
title: "Title",
width: "Width",
height: "Height",
submit: "Create Chart",
submitBatch: "Create Chart ({count} files)",
progressLabel: "Creating chart",
},
"enhance-faces-standalone": {
model: "Модель",
fast: "Швидка",
balanced: "Збалансована",
best: "Найкраща",
},
"convert-video": {
format: "Output format",
quality: "Quality",
high: "High",
balanced: "Balanced",
small: "Smallest",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"compress-video": {
quality: "Compression",
light: "Light",
balanced: "Balanced",
strong: "Strong",
resolution: "Resolution",
original: "Original",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"trim-video": {
start: "Start (seconds)",
end: "End (seconds)",
precise: "Frame-accurate (re-encodes)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"mute-video": {
submit: "Remove audio",
submitBatch: "Remove audio ({count} files)",
progressLabel: "Muting",
},
"video-to-gif": {
fps: "Frames per second",
width: "Width (px)",
start: "Start (seconds)",
duration: "Duration (seconds)",
submit: "Create GIF",
submitBatch: "Create GIFs ({count} files)",
progressLabel: "Creating GIF",
},
"resize-video": {
preset: "Preset",
width: "Width (px)",
height: "Height (px)",
hint: "Leave one dimension empty to keep aspect ratio",
submit: "Resize",
submitBatch: "Resize ({count} files)",
progressLabel: "Resizing",
},
"crop-video": {
width: "Width (px)",
height: "Height (px)",
x: "X offset",
y: "Y offset",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"rotate-video": {
transform: "Transform",
cw90: "Rotate 90 clockwise",
ccw90: "Rotate 90 counter-clockwise",
rotate180: "Rotate 180",
hflip: "Flip horizontal",
vflip: "Flip vertical",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"change-fps": {
fps: "Frames per second",
submit: "Change FPS",
submitBatch: "Change FPS ({count} files)",
progressLabel: "Changing FPS",
},
"video-color": {
brightness: "Brightness",
contrast: "Contrast",
saturation: "Saturation",
gamma: "Gamma",
submit: "Apply",
submitBatch: "Apply ({count} files)",
progressLabel: "Adjusting color",
},
"video-speed": {
factor: "Speed factor",
keepPitch: "Keep original pitch",
submit: "Change speed",
submitBatch: "Change speed ({count} files)",
progressLabel: "Changing speed",
},
"reverse-video": {
hint: "Limited to clips up to 5 minutes",
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"video-loudnorm": {
hint: "Normalizes audio to EBU R128 broadcast standard",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"aspect-pad": {
target: "Target ratio",
color: "Background color",
colorHint: "Hex color, e.g. #000000",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"blur-pad": {
target: "Target ratio",
blur: "Blur strength",
submit: "Pad",
submitBatch: "Pad ({count} files)",
progressLabel: "Padding",
},
"watermark-video": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
color: "Color",
colorHint: "Hex color, e.g. #ffffff",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"stabilize-video": {
smoothing: "Smoothing",
hint: "Runs two passes and takes longer than most tools",
submit: "Stabilize",
submitBatch: "Stabilize ({count} files)",
progressLabel: "Stabilizing",
},
"gif-to-video": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-webp": {
fps: "Frames per second",
width: "Width (px)",
quality: "Quality",
loop: "Loop animation",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"video-to-frames": {
mode: "Extraction mode",
modeAll: "All frames",
modeNth: "Every Nth frame",
modeTimestamps: "Specific timestamps",
n: "Take every Nth frame",
timestamps: "Timestamps (seconds)",
timestampsHint: "Comma-separated, e.g. 0.5, 2, 4.5",
format: "Image format",
submit: "Extract Frames",
submitBatch: "Extract Frames ({count} files)",
progressLabel: "Extracting frames",
},
"merge-videos": {
hint: "Files are joined in upload order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"replace-audio": {
hint: "Upload the video first, then the audio",
submit: "Replace Audio",
submitBatch: "Replace Audio ({count} files)",
progressLabel: "Replacing audio",
},
"burn-subtitles": {
fontSize: "Font size",
hint: "Upload a video and a subtitle file (.srt or .vtt)",
submit: "Burn Subtitles",
submitBatch: "Burn Subtitles ({count} files)",
progressLabel: "Burning subtitles",
},
"embed-subtitles": {
language: "Language code",
languageHint: "Three-letter ISO 639-2 code, e.g. eng, spa, fra",
submit: "Embed Subtitles",
submitBatch: "Embed Subtitles ({count} files)",
progressLabel: "Embedding subtitles",
},
"extract-subtitles": {
submit: "Extract Subtitles",
submitBatch: "Extract Subtitles ({count} files)",
progressLabel: "Extracting subtitles",
},
"images-to-video": {
secondsPerImage: "Seconds per image",
resolution: "Resolution",
fps: "Frames per second",
submit: "Create Video",
submitBatch: "Create Video ({count} files)",
progressLabel: "Creating slideshow",
},
"video-metadata": {
hint: "Metadata report appears in the result",
submit: "Strip Metadata",
submitBatch: "Strip Metadata ({count} files)",
progressLabel: "Stripping metadata",
},
"convert-audio": {
format: "Output format",
bitrate: "Bitrate (kbps)",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"trim-audio": {
start: "Start (seconds)",
end: "End (seconds)",
submit: "Trim",
submitBatch: "Trim ({count} files)",
progressLabel: "Trimming",
},
"extract-audio": {
format: "Output format",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"volume-adjust": {
"gain-db": "Gain (dB)",
submit: "Adjust Volume",
submitBatch: "Adjust Volume ({count} files)",
progressLabel: "Adjusting volume",
},
"normalize-audio": {
hint: "EBU R128 loudness normalization",
submit: "Normalize",
submitBatch: "Normalize ({count} files)",
progressLabel: "Normalizing",
},
"fade-audio": {
"fade-in-s": "Fade in (seconds)",
"fade-out-s": "Fade out (seconds)",
submit: "Apply Fade",
submitBatch: "Apply Fade ({count} files)",
progressLabel: "Applying fade",
},
"reverse-audio": {
submit: "Reverse",
submitBatch: "Reverse ({count} files)",
progressLabel: "Reversing",
},
"audio-speed": {
factor: "Speed factor",
submit: "Change Speed",
submitBatch: "Change Speed ({count} files)",
progressLabel: "Changing speed",
},
"pitch-shift": {
semitones: "Semitones",
hint: "0 semitones is not allowed",
submit: "Shift Pitch",
submitBatch: "Shift Pitch ({count} files)",
progressLabel: "Shifting pitch",
},
"audio-channels": {
mode: "Channel mode",
"stereo-to-mono": "Stereo to mono",
"mono-to-stereo": "Mono to stereo",
swap: "Swap left/right",
submit: "Convert Channels",
submitBatch: "Convert Channels ({count} files)",
progressLabel: "Converting channels",
},
"silence-removal": {
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Remove Silence",
submitBatch: "Remove Silence ({count} files)",
progressLabel: "Removing silence",
},
"noise-reduction": {
strength: "Strength",
light: "Light",
medium: "Medium",
strong: "Strong",
submit: "Reduce Noise",
submitBatch: "Reduce Noise ({count} files)",
progressLabel: "Reducing noise",
},
"merge-audio": {
format: "Output format",
mp3: "MP3",
wav: "WAV",
flac: "FLAC",
m4a: "M4A",
"order-hint": "Files will be joined in upload order",
submit: "Merge Audio",
submitBatch: "Merge Audio ({count} files)",
progressLabel: "Merging audio",
},
"split-audio": {
mode: "Split mode",
time: "By time",
parts: "Equal parts",
silence: "By silence",
"segment-s": "Segment length (seconds)",
"num-parts": "Number of parts",
"threshold-db": "Silence threshold (dB)",
"min-silence-s": "Minimum silence duration (seconds)",
submit: "Split Audio",
submitBatch: "Split Audio ({count} files)",
progressLabel: "Splitting audio",
},
"ringtone-maker": {
"start-s": "Start time (seconds)",
"duration-s": "Duration (seconds)",
"max-hint": "Maximum 30 seconds",
submit: "Create Ringtone",
submitBatch: "Create Ringtone ({count} files)",
progressLabel: "Creating ringtone",
},
"waveform-image": {
width: "Width (px)",
height: "Height (px)",
color: "Waveform color",
submit: "Generate Waveform",
submitBatch: "Generate Waveform ({count} files)",
progressLabel: "Generating waveform",
},
"audio-metadata": {
strip: "Strip all metadata",
title: "Title",
artist: "Artist",
album: "Album",
submit: "Apply Metadata",
submitBatch: "Apply Metadata ({count} files)",
progressLabel: "Applying metadata",
},
"merge-pdf": {
addFiles: "Add PDFs to merge",
needTwo: "At least two PDFs are required",
orderHint: "{count} PDFs will merge in this order",
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"split-pdf": {
mode: "Split mode",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
everyN: "Pages per part",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"compress-pdf": {
preset: "Quality preset",
screen: "Screen (smallest)",
ebook: "Ebook (balanced)",
printer: "Printer (best quality)",
submit: "Compress",
submitBatch: "Compress ({count} files)",
progressLabel: "Compressing",
},
"rotate-pdf": {
angle: "Rotation angle",
range: "Page range",
rangeHint: "e.g. 1-3, 5, 1-z (all pages)",
submit: "Rotate",
submitBatch: "Rotate ({count} files)",
progressLabel: "Rotating",
},
"convert-document": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-presentation": {
format: "Output format",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"convert-spreadsheet": {
format: "Output format",
hint: "Multi-sheet workbooks export the first sheet to CSV.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"excel-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"powerpoint-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"word-to-pdf": {
submit: "Convert to PDF",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"extract-pages": {
range: "Page range",
rangeHint: "e.g. 1-3, 5, 7-z",
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
"remove-pages": {
pages: "Pages to remove",
pagesHint: "e.g. 2, 4-6, z (last page)",
submit: "Remove",
submitBatch: "Remove ({count} files)",
progressLabel: "Removing",
},
"organize-pdf": {
order: "Page order",
orderHint: "e.g. 3,1,2 or 1-z (identity)",
submit: "Reorder",
submitBatch: "Reorder ({count} files)",
progressLabel: "Reordering",
},
"protect-pdf": {
userPassword: "User password",
ownerPassword: "Owner password (optional)",
ownerPasswordHint: "Defaults to user password if empty",
submit: "Protect",
submitBatch: "Protect ({count} files)",
progressLabel: "Encrypting",
},
"unlock-pdf": {
password: "Password",
submit: "Unlock",
submitBatch: "Unlock ({count} files)",
progressLabel: "Decrypting",
},
"repair-pdf": {
submit: "Repair",
submitBatch: "Repair ({count} files)",
progressLabel: "Repairing",
},
"linearize-pdf": {
submit: "Optimize",
submitBatch: "Optimize ({count} files)",
progressLabel: "Linearizing",
},
"grayscale-pdf": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"pdfa-convert": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"crop-pdf": {
margin: "Margin (points)",
submit: "Crop",
submitBatch: "Crop ({count} files)",
progressLabel: "Cropping",
},
"nup-pdf": {
perSheet: "Pages per sheet",
submit: "Arrange",
submitBatch: "Arrange ({count} files)",
progressLabel: "Arranging",
},
"booklet-pdf": {
perSheet: "Pages per sheet",
submit: "Create Booklet",
submitBatch: "Create Booklet ({count} files)",
progressLabel: "Creating booklet",
},
"watermark-pdf": {
text: "Watermark text",
position: "Position",
fontSize: "Font size",
opacity: "Opacity",
rotation: "Rotation",
submit: "Watermark",
submitBatch: "Watermark ({count} files)",
progressLabel: "Watermarking",
},
"pdf-page-numbers": {
position: "Position",
fontSize: "Font size",
submit: "Add Numbers",
submitBatch: "Add Numbers ({count} files)",
progressLabel: "Numbering",
},
"flatten-pdf": {
submit: "Flatten",
submitBatch: "Flatten ({count} files)",
progressLabel: "Flattening",
},
"redact-pdf": {
terms: "Terms to redact",
termsHint: "One term per line (max 50)",
caseSensitive: "Case sensitive",
submit: "Redact",
submitBatch: "Redact ({count} files)",
progressLabel: "Redacting",
},
"pdf-to-text": {
submit: "Extract Text",
submitBatch: "Extract Text ({count} files)",
progressLabel: "Extracting",
},
"pdf-to-word": {
hint: "Best for text-based PDFs; scanned pages need OCR",
submit: "Convert to Word",
submitBatch: "Convert to Word ({count} files)",
progressLabel: "Converting",
},
"pdf-metadata": {
title: "Title",
author: "Author",
subject: "Subject",
keywords: "Keywords",
submit: "Set Metadata",
submitBatch: "Set Metadata ({count} files)",
progressLabel: "Setting metadata",
},
"html-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"markdown-to-docx": {
submit: "Convert to DOCX",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-html": {
hint: "Remote images in the source are left as-is in the output.",
submit: "Convert to HTML",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"markdown-to-pdf": {
hint: "Remote resources are disabled for privacy.",
submit: "Convert to PDF",
submitBatch: "Convert to PDF ({count} files)",
progressLabel: "Converting",
},
"epub-convert": {
format: "Output format",
hint: "Remote resources inside the book are not fetched.",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"to-epub": {
submit: "Convert to EPUB",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-excel": {
sheet: "Worksheet number",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"csv-json": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"json-xml": {
pretty: "Pretty print",
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"split-csv": {
rowsPerFile: "Rows per file",
keepHeader: "Keep header in each file",
submit: "Split",
submitBatch: "Split ({count} files)",
progressLabel: "Splitting",
},
"merge-csvs": {
submit: "Merge",
submitBatch: "Merge ({count} files)",
progressLabel: "Merging",
},
"yaml-json": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"xml-to-csv": {
submit: "Convert",
submitBatch: "Convert ({count} files)",
progressLabel: "Converting",
},
"create-zip": {
submit: "Create ZIP",
submitBatch: "Create ZIP ({count} files)",
progressLabel: "Zipping",
},
"extract-zip": {
submit: "Extract",
submitBatch: "Extract ({count} files)",
progressLabel: "Extracting",
},
},
urlImport: {
title: "Імпорт за URL",
placeholder: "Вставте URL зображень, по одному на рядок...",
importButton: "Імпортувати URL",
addButton: "Додати {count} файлів",
adding: "Додавання...",
retryButton: "Повторити",
cancelButton: "Скасувати",
readyCount: "{count} готово",
failedStatus: "Помилка",
},
comparison: {
original: "Оригінал",
processed: "Оброблено",
before: "До",
after: "Після",
savings: "Економія",
},
toolPage: {
emptyPrompt: "Перетягніть або завантажте зображення для початку",
filesCount: "Файли ({count})",
addMore: "+ Додати ще",
clearAll: "Очистити все",
acceptDescription: "Лише файли {exts}",
notFound: "Інструмент не знайдено",
configureAndGenerate: "Налаштуйте параметри та запустіть генерацію.",
processingFailed: "Обробка цього файлу не вдалася",
conversionComplete: "Конвертацію завершено",
cannotPreviewDownload:
"Файли {type} неможливо переглянути у браузері. Скористайтеся кнопкою завантаження для збереження файлу.",
generatingPreview: "Генерація попереднього перегляду...",
cannotPreviewWillProcess:
"Файли {ext} неможливо переглянути у браузері. Інструмент все одно обробить цей файл.",
previousImage: "Попереднє зображення",
nextImage: "Наступне зображення",
imageCounter: "{current} / {total}",
settingsLabel: "Налаштування",
downloadAllZip: "Завантажити все (ZIP)",
hideSettings: "Сховати налаштування",
imageArea: "Область зображення",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
applyAndDownload: "Застосувати та завантажити",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
newFile: "New file",
previewUnavailable: "Preview will be available after processing",
generatePreview: "Generate Preview",
previewFailed: "Preview generation failed",
backToTools: "Back to Tools",
original: "Original",
processed: "Processed",
saved: "Saved",
noChange: "no change",
download: "Download",
settingsSaved: "Ваші налаштування збережено.",
tryAgain: "Спробувати знову",
tryDifferentFile: "Спробувати інший файл",
batchPartialSuccess: "{success} of {total} processed. {failed} failed.",
dataResultsHint: "Results shown above. Use the copy button in the results panel.",
downloadAsFile: "Download as file",
downloadAll: "Download All",
downloadFiles: "Download {count} files",
audioDecodeUnsupported: "This audio format cannot be previewed in the browser",
},
homePage: {
generatingPreview: "Генерація попереднього перегляду...",
loadingPreview: "Завантаження попереднього перегляду...",
changeFile: "Змінити файл",
quickActions: "Швидкі дії",
allTools: "Усі інструменти",
searchPlaceholder: "Search {count} tools...",
recent: "Recent",
popular: "Popular",
browseByCategory: "Browse by Category",
gettingStarted: "Getting Started",
noToolsMatch: "No tools match '{query}'",
clearSearch: "Clear search",
all: "All",
documents: "Documents",
data: "Data",
toolCount: "{count} tools",
heading: "SnapOtter Tools",
},
fullscreenGrid: {
searchPlaceholder: "Пошук інструментів...",
hideDetails: "Сховати деталі",
showDetails: "Показати деталі",
switchToSidebar: "Перемкнути на бічну панель",
sidebarButton: "Бічна панель",
noToolsFound: "Інструменти не знайдено",
tryDifferent: "Спробуйте інший пошуковий запит",
},
editor: {
menu: {
file: {
label: "Файл",
new: "Новий",
open: "Відкрити",
save: "Зберегти",
exportAs: "Експортувати як...",
quickExportPng: "Швидкий експорт у PNG",
close: "Закрити",
},
edit: {
label: "Редагування",
undo: "Скасувати",
redo: "Повторити",
cut: "Вирізати",
copy: "Копіювати",
copyMerged: "Копіювати зведене",
paste: "Вставити",
pasteInPlace: "Вставити на місце",
delete: "Видалити",
freeTransform: "Вільна трансформація",
transform: {
label: "Трансформація",
scale: "Масштаб",
rotate: "Обертання",
skew: "Нахил",
flipHorizontal: "Відобразити горизонтально",
flipVertical: "Відобразити вертикально",
},
},
image: {
label: "Зображення",
imageSize: "Розмір зображення...",
canvasSize: "Розмір полотна...",
rotation: {
label: "Обертання зображення",
cw90: "90° за годинниковою",
ccw90: "90° проти годинникової",
r180: "180°",
flipHorizontal: "Відобразити горизонтально",
flipVertical: "Відобразити вертикально",
},
trim: "Обрізати",
adjustments: {
label: "Корекція",
brightnessContrast: "Яскравість/Контраст",
hueSaturation: "Тон/Насиченість",
colorBalance: "Колірний баланс",
levels: "Рівні",
curves: "Криві",
},
},
layer: {
label: "Шар",
newLayer: "Новий шар",
duplicateLayer: "Дублювати шар",
deleteLayer: "Видалити шар",
arrange: {
label: "Розташування",
bringToFront: "На передній план",
bringForward: "Перемістити вперед",
sendBackward: "Перемістити назад",
sendToBack: "На задній план",
},
mergeDown: "Об'єднати з нижнім",
flattenImage: "Зведення зображення",
},
select: {
label: "Виділення",
all: "Виділити все",
deselect: "Зняти виділення",
inverse: "Інвертувати",
colorRange: "Колірний діапазон...",
},
filter: {
label: "Фільтр",
blur: {
label: "Розмиття",
gaussian: "Розмиття за Гаусом",
motion: "Розмиття руху",
radial: "Радіальне розмиття",
surface: "Поверхневе розмиття",
},
sharpen: {
label: "Різкість",
sharpen: "Підвищити різкість",
unsharpMask: "Маска нерізкості",
},
noise: {
label: "Шум",
addNoise: "Додати шум",
reduceNoise: "Зменшити шум",
},
pixelate: {
label: "Піксельизація",
pixelate: "Піксельизація",
mosaic: "Мозаїка",
},
stylize: {
label: "Стилізація",
emboss: "Тиснення",
solarize: "Соляризація",
posterize: "Постеризація",
},
grayscale: "Відтінки сірого",
sepia: "Сепія",
invert: "Інверсія",
},
view: {
label: "Вигляд",
zoomIn: "Збільшити",
zoomOut: "Зменшити",
fitOnScreen: "Вмістити на екрані",
actualPixels: "Реальний розмір",
rulers: "Лінійки",
grid: "Сітка",
guides: "Напрямні",
snap: "Прив'язка",
panels: "Панелі",
},
},
menuBar: {
backTitle: "Назад до SnapOtter",
},
welcome: {
ariaLabel: "Зона перетягування зображень",
heading: "Редактор зображень",
dropDescription: "Перетягніть зображення сюди для початку роботи",
openImageButton: "Відкрити зображення",
newDocumentButton: "Новий документ",
pasteHint: "Або вставте з буфера обміну (Ctrl+V)",
},
mobile: {
heading: "Рекомендовано настільний ПК",
description:
"Редактор зображень найкраще працює на великих екранах. Переключіться на пристрій з більшим дисплеєм для повноцінного редагування.",
},
errors: {
serverDecodeFailed: "Помилка декодування на сервері",
},
shapes: {
shape: "Shape",
fill: "Fill",
stroke: "Stroke",
strokeWidth: "Width",
cornerRadius: "Radius",
sides: "Sides",
points: "Points",
dashStyle: "Dash",
solid: "Solid",
dashed: "Dashed",
dotted: "Dotted",
none: "None",
opacity: "Opacity",
rectangle: "Rectangle",
ellipse: "Ellipse",
line: "Line",
arrow: "Arrow",
polygon: "Polygon",
star: "Star",
},
},
settings: {
heading: "Налаштування",
nav: {
general: "Загальні",
systemSettings: "Системні налаштування",
security: "Безпека",
people: "Користувачі",
teams: "Команди",
roles: "Ролі",
auditLog: "Журнал аудиту",
usage: "Usage",
apiKeys: "API-ключі",
aiFeatures: "AI-функції",
tools: "Інструменти",
productAnalytics: "Аналітика",
about: "Про програму",
},
general: {
heading: "Загальні",
description: "Налаштування користувача та параметри відображення.",
loading: "Завантаження...",
logOut: "Вийти",
defaultToolViewLabel: "Вигляд інструментів за замовчуванням",
defaultToolViewDescription: "Як інструменти відображаються на головній сторінці",
sidebarOption: "Бічна панель",
fullscreenGridOption: "Повноекранна сітка",
appVersionLabel: "Версія застосунку",
appVersionDescription: "Поточна версія SnapOtter",
saveButton: "Зберегти налаштування",
saveSuccess: "Налаштування збережено.",
saveFailed: "Не вдалося зберегти налаштування.",
},
system: {
heading: "Системні налаштування",
description: "Серверні налаштування та обмеження.",
fileUploadLimitLabel: "Обмеження завантаження файлів (MB)",
fileUploadLimitDescription: "Максимальний розмір файлу за завантаження",
defaultThemeLabel: "Тема за замовчуванням",
defaultThemeDescription: "Тема, що застосовується для нових сесій",
lightOption: "Світла",
darkOption: "Темна",
systemOption: "Системна",
languageLabel: "Мова",
languageDescription: "Мова інтерфейсу",
loginAttemptLimitLabel: "Ліміт спроб входу",
loginAttemptLimitDescription: "Максимум невдалих спроб входу на хвилину до блокування",
fileManagementHeading: "Керування файлами",
maxFileAgeLabel: "Макс. час зберігання файлів (години)",
maxFileAgeDescription: "Як довго оброблені файли зберігаються до автоматичного очищення",
startupCleanupLabel: "Очищення при запуску",
startupCleanupDescription: "Видаляти старі тимчасові файли при запуску сервера",
saveButton: "Зберегти налаштування",
saveSuccess: "Налаштування збережено.",
saveFailed: "Не вдалося зберегти налаштування.",
limitsAndResources: "Обмеження та ресурси",
maxFileSize: "Макс. розмір файлу",
maxBatchSize: "Макс. розмір пакета",
concurrentJobs: "Паралельні завдання",
workerThreads: "Робочі потоки",
maxPipelineSteps: "Макс. кроків Pipeline",
processingTimeout: "Тайм-аут обробки",
rateLimitPerMin: "Ліміт запитів (запитів/хв)",
unlimited: "Без обмежень",
auto: "Авто",
envOverride: "Задано змінною середовища",
maxCanvasPixels: "Макс. пікселів полотна",
maxSvgSize: "Макс. розмір SVG",
maxSplitGrid: "Макс. сітка розділення",
maxPdfPages: "Макс. сторінок PDF",
sessionDuration: "Тривалість сесії",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Безпека",
description: "Налаштування пароля та автентифікації.",
changePasswordHeading: "Зміна пароля",
currentPasswordPlaceholder: "Поточний пароль",
newPasswordPlaceholder: "Новий пароль",
confirmPasswordPlaceholder: "Підтвердіть новий пароль",
passwordsMismatch: "Паролі не збігаються",
passwordTooShort: "Пароль має містити щонайменше 4 символи",
changeSuccess: "Пароль успішно змінено",
changeFailed: "Не вдалося змінити пароль",
currentPasswordIncorrect: "Поточний пароль невірний",
changePasswordButton: "Змінити пароль",
loginAttemptLimitNote: "Ліміти спроб входу можна налаштувати в Системних налаштуваннях.",
adminHeading: "Admin Security Settings",
adminDescription: "Enterprise security policy settings. These apply to all users.",
sessionIdleTimeout: "Session Idle Timeout (minutes)",
sessionIdleTimeoutDesc: "Automatically log out idle sessions. 0 = disabled.",
maxSessionsPerUser: "Max Sessions Per User",
maxSessionsPerUserDesc: "Limit concurrent sessions per user. 0 = unlimited.",
mfaPolicy: "MFA Policy",
mfaPolicyDesc: "Require multi-factor authentication for users.",
mfaPolicyOptional: "Optional",
mfaPolicyAdminsOnly: "Required for admins",
mfaPolicyRequired: "Required for all users",
ssoEnforcement: "SSO Enforcement",
ssoEnforcementDesc: "Require SSO login for all non-break-glass users.",
ssoBreakGlassUsername: "Break Glass Admin Username",
ssoBreakGlassUsernameDesc:
"This admin can still log in with local credentials when SSO is enforced.",
passwordMinLength: "Minimum Password Length",
passwordMinLengthDesc: "Minimum number of characters required for passwords.",
passwordRequireUppercase: "Require Uppercase",
passwordRequireUppercaseDesc: "Require at least one uppercase letter.",
passwordRequireNumber: "Require Number",
passwordRequireNumberDesc: "Require at least one number.",
passwordRequireSpecial: "Require Special Character",
passwordRequireSpecialDesc: "Require at least one special character.",
passwordPolicyHeading: "Password Policy",
securitySettingsSaved: "Security settings saved",
securitySettingsFailed: "Failed to save security settings",
},
people: {
heading: "Користувачі",
description: "Керування учасниками робочого простору та їхніми правами",
userCount: "{count} користувач",
userCountPlural: "{count} користувачів",
searchPlaceholder: "Пошук учасників...",
addMembersButton: "Додати учасників",
newMemberHeading: "Новий учасник",
usernamePlaceholder: "Ім'я користувача",
passwordPlaceholder: "Пароль",
roleUserOption: "Користувач",
roleEditorOption: "Редактор",
roleAdminOption: "Адміністратор",
roleUserDescription: "Базовий доступ до інструментів",
roleEditorDescription: "Усі файли та Pipeline",
roleAdminDescription: "Повний доступ",
noDescription: "Без опису",
defaultTeamOption: "За замовчуванням",
createButton: "Створити",
cancelButton: "Скасувати",
createSuccess: "Користувача успішно створено",
createFailed: "Не вдалося створити користувача",
userLimitReached: "Досягнуто ліміту користувачів (макс. {max})",
deleteConfirm: 'Видалити користувача "{username}"? Цю дію не можна скасувати.',
deleteSuccess: 'Користувача "{username}" видалено',
deleteFailed: "Не вдалося видалити користувача",
editHeading: "Редагування {username}",
updateSuccess: "Користувача оновлено",
updateFailed: "Не вдалося оновити користувача",
cannotRemoveOwnAdmin: "Неможливо зняти з себе роль адміністратора",
resetPasswordHeading: "Скидання пароля для {username}",
newPasswordLabel: "Новий пароль (мін. 8 символів)",
resetPasswordButton: "Скинути пароль",
resetPasswordWarning: "Це анулює всі сесії та API-ключі цього користувача.",
resetSuccess: "Пароль успішно скинуто",
resetFailed: "Не вдалося скинути пароль",
tableHeaderUser: "Користувач",
tableHeaderRole: "Роль",
tableHeaderTeam: "Команда",
noSearchResults: "Учасників не знайдено.",
noUsersFound: "Користувачів не знайдено.",
authBadgeLocalOidc: "Локальний + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "Змінити роль / команду",
resetPasswordAction: "Скинути пароль",
deleteUserAction: "Видалити користувача",
saveButton: "Зберегти",
copyPasswordButton: "Скопіювати пароль",
passwordCopied: "Скопійовано!",
copyPasswordWarning:
"Скопіюйте цей пароль зараз. Після створення користувача ви не зможете його побачити.",
},
teams: {
heading: "Команди",
description: "Організуйте учасників у команди для зручного керування.",
createButton: "Створити нову команду",
newTeamHeading: "Нова команда",
teamNamePlaceholder: "Назва команди",
createSubmitButton: "Створити",
cancelButton: "Скасувати",
createSuccess: "Команду успішно створено",
createFailed: "Не вдалося створити команду",
duplicateTeamError: "Команда з такою назвою вже існує",
renameSuccess: "Команду перейменовано",
renameFailed: "Не вдалося перейменувати команду",
deleteConfirm: 'Видалити команду "{name}"? Учасники будуть відкріплені.',
deleteSuccess: 'Команду "{name}" видалено',
deleteFailed: "Не вдалося видалити команду",
cannotDeleteDefault: "Неможливо видалити команду за замовчуванням або команду з учасниками",
tableHeaderTeamName: "Назва команди",
tableHeaderMembers: "Учасники",
emptyState: "Команд не знайдено.",
renameSaveButton: "Зберегти",
renameCancelButton: "Скасувати",
renameAction: "Перейменувати",
deleteAction: "Видалити",
totalMembers: "Усього учасників",
nameRequired: "Назва команди обов'язкова",
nameTooLong: "Назва команди не може перевищувати 50 символів",
duplicateName: "Команда з такою назвою вже існує",
teamStorageQuota: "Storage Quota (MB)",
teamStorageQuotaDesc: "Maximum storage for this team in MB. Leave empty for no limit.",
teamRetentionHours: "Retention (hours)",
teamRetentionHoursDesc:
"Processing file retention for this team. Leave empty to use global default.",
quotaSaved: "Team settings saved",
},
roles: {
heading: "Ролі",
description: "Керування ролями та їхніми правами. Вбудовані ролі не можна змінювати.",
createButton: "Створити власну роль",
newRoleHeading: "Нова роль",
roleNamePlaceholder: "Назва ролі",
descriptionPlaceholder: "Опис (необов'язково)",
permissionsLabel: "Права доступу",
createSubmitButton: "Створити",
cancelButton: "Скасувати",
createSuccess: "Роль успішно створено",
createFailed: "Не вдалося створити роль",
duplicateRoleError: "Роль з такою назвою вже існує",
editHeading: "Редагування ролі: {name}",
editSaveButton: "Зберегти",
editCancelButton: "Скасувати",
updateSuccess: "Роль оновлено",
updateFailed: "Не вдалося оновити роль",
deleteConfirm: 'Видалити роль "{name}"? {count} користувачу(ам) потрібне перепризначення.',
deleteConfirmSimple: 'Видалити роль "{name}"?',
deleteSuccess: 'Роль "{name}" видалено',
deleteFailed: "Не вдалося видалити роль",
emptyState: "Ролей не знайдено.",
builtInBadge: "Вбудована",
userCountBadge: "{count} користувач(ів)",
editRoleTitle: "Редагувати роль",
deleteRoleTitle: "Видалити роль",
permGroup: {
tools: "Інструменти",
files: "Файли",
apiKeys: "API-ключі",
pipelines: "Pipeline",
settings: "Налаштування",
users: "Користувачі",
teams: "Команди",
system: "Система",
},
},
auditLog: {
heading: "Журнал аудиту",
allActionsFilter: "Усі дії",
emptyState: "Записів у журналі аудиту немає.",
tableHeaderTime: "Час",
tableHeaderUser: "Користувач",
tableHeaderAction: "Дія",
tableHeaderTarget: "Об'єкт",
paginationInfo: "Сторінка {page} з {totalPages} ({total} записів)",
previousButton: "Попередня",
nextButton: "Наступна",
justNow: "щойно",
minutesAgo: "{mins} хв тому",
hoursAgo: "{hrs} год тому",
daysAgo: "{days} дн. тому",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
storageByTeam: "Storage by Team",
teamColumn: "Team",
storageColumn: "Storage",
usersColumn: "Users",
},
apiKeys: {
heading: "API-ключі",
description: "Керування API-ключами для програмного доступу до SnapOtter.",
keyNamePlaceholder: "Назва ключа (необов'язково)",
generateButton: "Згенерувати API-ключ",
removeScopingLabel: "Прибрати обмеження прав",
restrictPermissionsLabel: "Обмежити права (необов'язково)",
expiresLabel: "Спливає:",
clearButton: "Очистити",
copyTitle: "Копіювати",
keyWarning: "Збережіть цей ключ у безпечному місці. Він більше не буде показаний.",
existingKeysHeading: "Наявні ключі",
createdPrefix: "Створено {date}",
scopedPrefix: "Область:",
expiresPrefix: "Спливає {date}",
deleteKeyTitle: "Видалити ключ",
deleteConfirm:
"Видалити цей API-ключ? Усі інтеграції, що його використовують, перестануть працювати.",
emptyState: "API-ключів поки немає. Згенеруйте один для початку.",
},
tools: {
heading: "Інструменти",
description:
"Увімкнення та вимкнення окремих інструментів. Вимкнені інструменти приховані від усіх користувачів.",
restartBanner: "Для застосування змін потрібен перезапуск.",
searchPlaceholder: "Пошук інструментів...",
noSearchResults: "Інструменти не знайдено.",
loadFailedError:
"Не вдалося завантажити налаштування інструментів. Збереження вимкнено для запобігання втраті даних.",
saveButton: "Зберегти налаштування інструментів",
disabledCount: "Вимкнено {count} інструмент(ів)",
},
experimental: {
label: "Увімкнути експериментальні інструменти",
description:
"Показати інструменти, що перебувають у розробці. Вони можуть працювати нестабільно.",
},
fileManagement: {
title: "Керування файлами",
maxAge: "Макс. час зберігання файлів (години)",
maxAgeDescription: "Як довго оброблені файли зберігаються до автоматичного очищення",
startupCleanup: "Очищення при запуску",
startupCleanupDescription: "Видаляти старі тимчасові файли при запуску сервера",
},
dataRetention: {
title: "Data Retention",
fileMaxAgeHours: "Processing file retention (hours)",
fileMaxAgeHoursDesc: "How long to keep uploaded and processed files. Default: 72 hours.",
jobsRetentionDays: "Job record retention (days)",
jobsRetentionDaysDesc: "How long to keep job metadata. 0 = keep forever. Default: 30 days.",
auditRetentionDays: "Audit log retention (days)",
auditRetentionDaysDesc:
"How long to keep audit log entries. 0 = keep forever. Default: forever.",
},
analytics: {
heading: "Аналітика",
description: "Надсилання анонімних даних про використання для поліпшення SnapOtter.",
privacyNote: "Ваші зображення ніколи не залишають Ваш комп'ютер.",
disabledByAdmin: "Аналітику вимкнено адміністратором сервера.",
enabledLabel: "Аналітику увімкнено",
disabledLabel: "Аналітику вимкнено",
learnMore: "Дізнатися більше",
},
aiFeatures: {
title: "AI Features",
description: "Manage AI model bundles for advanced image processing.",
installAll: "Install All",
diskUsage: "Disk usage:",
installed: "Installed",
notInstalled: "Not installed",
queued: "Queued",
install: "Install",
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Про програму",
appName: "SnapOtter",
appDescription:
"Самостійно розміщуваний набір інструментів для обробки зображень з пріоритетом конфіденційності. 70+ інструменти. Зміна розміру, стиснення, конвертація, водяні знаки та автоматизація робочих процесів без надсилання даних у хмару.",
versionLabel: "Версія:",
linksHeading: "Посилання",
githubLink: "Репозиторій GitHub",
docsLink: "Документація",
apiRefLink: "Довідник API (Swagger)",
licenseLabel: "License:",
licenseDescription:
"SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3).",
},
},
auth: {
login: "Вхід",
logout: "Вийти",
username: "Ім'я користувача",
password: "Пароль",
loginButton: "Увійти",
loggingIn: "Вхід...",
invalidCredentials: "Невірне ім'я користувача або пароль",
connectionError: "Помилка з'єднання",
signInWith: "Увійти через {provider}",
signInWithSso: "Увійти через SSO",
or: "або",
methodLocal: "Локальний",
methodOidc: "OIDC",
methodBoth: "Локальний + OIDC",
oidcAuthFailed: "Автентифікація не вдалася. Спробуйте знову.",
oidcProviderUnreachable:
"Не вдалося зв'язатися з постачальником ідентифікації. Спробуйте пізніше.",
oidcSessionExpired: "Сесія входу завершилась. Спробуйте знову.",
oidcUserNotAuthorized:
"Ваш обліковий запис не має доступу до цього застосунку. Зверніться до адміністратора.",
oidcUserLimitReached: "Досягнуто ліміту користувачів. Зверніться до адміністратора.",
oidcGenericError: "Помилка автентифікації. Спробуйте знову.",
samlAuthFailed: "SAML authentication failed. Please try again.",
samlUserNotAuthorized:
"Your account is not authorized to access this application. Contact your administrator.",
samlUserLimitReached: "User limit reached. Contact your administrator.",
ssoEnforcedLocalRestricted: "Local login is restricted to authorized administrators.",
mfaRequired: "Enter your authentication code",
mfaRecoveryHint: "You can also use a recovery code",
verify: "Verify",
verifying: "Verifying...",
mfaInvalidCode: "Invalid code. Please try again.",
mfaEnrollmentRequired:
"Your organization requires multi-factor authentication. Please set up MFA in your account settings.",
methodSaml: "SAML",
passwordManagedByProvider: "Керування паролем здійснюється Вашим постачальником ідентифікації.",
enterUsername: "Введіть ім'я користувача",
enterPassword: "Введіть пароль",
heroTitle: "Ваші зображення. Залишаються Вашими.",
heroSubtitle: "Усі інструменти для роботи із зображеннями.",
rotatingPhrases: [
"Без реєстрації. Без облікових записів.",
"Жодних завантажень у хмару. Ніколи.",
"100% локальна обробка.",
"Безкоштовно. Назавжди.",
"Без обмежень. Без прихованих лімітів.",
"Повністю працює офлайн.",
"Пакетна обробка без обмежень.",
"70+ інструменти для зображень.",
"16 AI-моделей. На Вашому обладнанні.",
"Блискавична швидкість. На базі Sharp.",
"Готовий до ізольованих мереж.",
"Один Docker-контейнер.",
"Відкритий вихідний код. Завжди.",
"Кожен піксель залишається на Вашому обладнанні.",
"Ваш сервер. Ваші правила.",
"Встановлення однією командою docker pull.",
"Альтернатива хмарним сервісам.",
"Зміна розміру, стиснення, конвертація. Локально.",
"Безкоштовний редактор. Без водяних знаків.",
"Пакетна обробка зображень. Без лімітів.",
"Видалення фону офлайн.",
"Заміна Canva для власного сервера.",
"API-ключі не потрібні.",
"Відповідність GDPR за замовчуванням.",
"Працює без інтернету.",
],
},
changePassword: {
title: "Зміна пароля",
description:
"Необхідно встановити новий пароль перед продовженням. Пароль має містити щонайменше 8 символів, включно з великими, малими літерами та цифрою.",
usernameLabel: "Ім'я користувача",
currentPasswordLabel: "Поточний пароль",
currentPasswordPlaceholder: "Введіть поточний пароль",
newPasswordLabel: "Новий пароль",
generateButton: "Згенерувати надійний пароль",
newPasswordPlaceholder: "Щонайменше 8 символів",
confirmPasswordLabel: "Підтвердіть новий пароль",
confirmPasswordPlaceholder: "Повторіть новий пароль",
passwordsMismatch: "Паролі не збігаються",
failedError: "Не вдалося змінити пароль",
connectionError: "Помилка з'єднання",
changingButton: "Зміна...",
changeButton: "Змінити пароль",
sidebarTitle: "Майже готово",
sidebarDescription:
"Встановіть надійний пароль для захисту Вашого облікового запису, і можна починати.",
},
automate: {
title: "Автоматизація",
invalidPipelineFile: "Недійсний файл Pipeline SnapOtter",
newerVersion: "Цей Pipeline створено у новішій версії SnapOtter",
missingName: "У файлі Pipeline відсутня назва",
noSteps: "У файлі Pipeline немає кроків",
importFailed: "Імпорт не вдався",
couldNotRead: "Не вдалося прочитати файл Pipeline",
fileCount: "{count} файл",
fileCountPlural: "{count} файлів",
importFromLibrary: "Імпорт із бібліотеки",
addButton: "+ Додати",
libraryButton: "Бібліотека",
clearButton: "Очистити",
processingFailed: "Обробка цього файлу не вдалася",
processingMultiple: "Обробка {count} файлів...",
processingPipeline: "Виконання Pipeline...",
processButton: "Обробити",
processButtonMultiple: "Обробити ({count})",
processAllButton: "Обробити все ({count})",
addTool: "Додати інструмент",
toolPalette: "Палітра інструментів",
clickToAdd: "Натисніть для додавання до Pipeline",
savedLabel: "Збережені",
importButton: "Імпорт",
noSavedPipelines: "Немає збережених Pipeline",
stepCount: "({count} крок)",
stepCountPlural: "({count} кроків)",
exportPipeline: "Експортувати Pipeline",
deletePipeline: "Видалити Pipeline",
moreCount: "+{count} ще",
pipelineBuilder: "Конструктор Pipeline",
addToolsPrompt: "Додайте інструменти з палітри для початку",
stepsConfigured: "Налаштовано {count} крок",
stepsConfiguredPlural: "Налаштовано {count} кроків",
noFilesLoaded: "Файли не завантажено",
downloadZip: "Завантажити ZIP",
saveButton: "Зберегти",
pipelineNamePlaceholder: "Назва Pipeline",
descriptionPlaceholder: "Опис",
savingIndicator: "...",
cancelButton: "Скасувати",
preview: "Попередній перегляд",
previousImage: "Попереднє зображення",
nextImage: "Наступне зображення",
imageCounter: "{current} / {total}",
imageArea: "Область зображення",
templateSocialMedia: "Готово для соцмереж",
templatePrivacyClean: "Очищення конфіденційності",
templateWebOptimization: "Веб-оптимізація",
templateProfilePicture: "Фото профілю",
templateWatermarkBatch: "Пакетні водяні знаки",
createNew: "Створити нову автоматизацію",
savedAutomations: "Збережені автоматизації",
templates: "Шаблони",
addStep: "Додати крок",
removeStep: "Видалити",
moveUp: "Перемістити вгору",
moveDown: "Перемістити вниз",
savePipeline: "Зберегти Pipeline",
runPipeline: "Обробити",
pipelineName: "Назва Pipeline",
pipelineDescription: "Опис (необов'язково)",
noStepsPrompt: "Додайте кроки для побудови автоматизації",
noStepsHeading: "No steps yet",
searchToolsPlaceholder: "Search tools...",
step: "Крок",
},
nav: {
tools: "Інструменти",
reader: "Рідер",
automate: "Автоматизація",
editor: "Редактор",
files: "Файли",
help: "Довідка",
settings: "Налаштування",
grid: "Сітка",
},
files: {
myFiles: "My Files",
recentTab: "Recent",
uploadTab: "Upload Files",
fileDetailsAriaLabel: "File Details",
fileDetailsHeading: "File Details",
searchPlaceholder: "Search files...",
selectedCount: "{count} selected",
fileCount: "{count} files",
fileCountSingular: "{count} file",
noFilesFound: "No files found",
selectFilePrompt: "Select a file to view details",
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
dimensions: "Dimensions",
version: "Version",
toolsUsed: "Tools Used",
none: "None",
delete: "Delete",
pipeline: "Pipeline",
download: "Download",
},
dropzone: {
unsupportedFileType: "Цей тип файлу не підтримується цим інструментом",
urlFetchFailed: "Не вдалося завантажити зображення за URL",
ariaLabel: "Зона перетягування файлів",
dropPrompt: "Перетягніть зображення сюди",
browseOrPaste: "натисніть будь-де для вибору або вставте з буфера обміну",
uploadButton: "Завантажити",
defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD та 65+ форматів",
orSeparator: "або",
urlPlaceholder: "Вставте URL зображення...",
urlLoadingIndicator: "...",
addUrlButton: "Додати",
importMultipleUrls: "Імпорт кількох URL...",
filesSelected: "Обрано файлів: {count}",
dropToAdd: "Відпустіть, щоб додати файли",
dropToReplace: "Відпустіть, щоб замінити файл",
},
reviewPanel: {
processedResultAlt: "Результат обробки",
sizeLabel: "Розмір: {size}",
typeLabel: "Тип: {type}",
processedLabel: "Оброблено: {time}",
undoButton: "Скасувати",
downloadButton: "Завантажити",
openInEditor: "Відкрити у редакторі",
reviewHeading: "Огляд",
continueEditing: "Продовжити редагування",
},
features: {
notEnabledTitle: "Функція не активована",
notEnabledDescription:
"Ця функція не активована. Попросіть адміністратора увімкнути її у Налаштуваннях.",
requiresDownload: "Для цієї функції потрібне додаткове завантаження (~{size})",
retryButton: "Повторити",
queued: "У черзі на встановлення...",
enableButton: "Увімкнути {name}",
repairRequired: "Repair Required",
repairDescription: "Some model files are missing or corrupted. Repair will re-download them.",
repairButton: "Repair {name}",
lessThanMinute: "Залишилось менше хвилини",
oneMinuteLeft: "Залишилась ~1 хвилина",
minutesLeft: "Залишилось ~{mins} хвилин",
progressMessages: [
"Майже готово... мабуть...",
"Гарні речі потребують часу...",
"Все одно швидше, ніж чекати, поки висохне фарба...",
"Ваше терпіння гідне захоплення...",
"Працюємо старанніше, ніж здається...",
"Зараз найцікавіше, повірте...",
"За лаштунками відбуваються важливі справи...",
"Якщо Ви це читаєте, все працює...",
"Готуємо щось неймовірне...",
"Варте кожної секунди, чесне слово...",
"Інтрига наростає...",
"Навчаємо Ваш комп'ютер нових фокусів...",
"Налаштовуємо Ваші суперздібності...",
"Ваші фотографії потім подякують...",
"Завантаження... але зі стилем...",
"Саме час для чашки кави...",
"Київ теж не за один день збудували...",
"Тихо... геній працює...",
"Ваші фото вже заздрять тому, що буде...",
"Збираємо команду мрії...",
"Розпаковуємо чудовість...",
"Майже закінчили думати про початок... жартуємо...",
"Поворот сюжету: тут справді щось відбувається...",
"Прогріваємо творчі двигуни...",
"Уява завантажується...",
"Це не заставка, обіцяємо...",
"Великому мистецтву потрібен час на встановлення...",
'Ваше майбутнє "я" подякує Вам...',
"Завантажуємо дуже розумні файли...",
"Зачекайте, найкраще ще попереду...",
],
},
help: {
heading: "Довідка",
gettingStarted: {
heading: "Початок роботи",
description:
"Оберіть інструмент із бічної панелі або скористайтесь пошуком. Завантажте зображення, перетягнувши його на сторінку або натиснувши область завантаження. Налаштуйте параметри та завантажте результат.",
},
keyboardShortcuts: {
heading: "Гарячі клавіші",
focusSearchBar: "Фокус на рядку пошуку",
goToTools: "Перейти до інструментів",
toggleTheme: "Перемкнути тему",
goToResize: "Перейти до зміни розміру",
goToCrop: "Перейти до обрізки",
goToCompress: "Перейти до стиснення",
goToConvert: "Перейти до конвертації",
goToRemoveBackground: "Перейти до видалення фону",
goToWatermarkText: "Перейти до текстового водяного знаку",
goToStripMetadata: "Перейти до видалення метаданих",
goToImageInfo: "Перейти до інформації про зображення",
processFile: "Обробити файл",
downloadResult: "Завантажити результат",
},
resources: {
heading: "Ресурси",
githubLink: "Репозиторій GitHub",
reportIssueLink: "Повідомити про проблему",
docsLink: "Документація",
apiRefLink: "Довідник API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "Сталася помилка",
offline: "Ви не в мережі",
reconnecting: "Перепід'єднання до сервера...",
connected: "Під'єднано",
processingFailed: "Обробка цього файлу не вдалася",
timeout: "Час очікування вичерпано. Сервер може бути перевантажений. Спробуйте знову.",
networkError: "Помилка мережі. Перевірте з'єднання.",
invalidCredentials: "Невірне ім'я користувача або пароль",
connectionError: "Помилка з'єднання",
},
analytics: {
consentTitle: "Допоможіть поліпшити SnapOtter",
consentDescription:
"Анонімна статистика використання допомагає нам виправляти помилки та створювати потрібні Вам інструменти. Ваші зображення та файли залишаються на Вашому комп'ютері.",
consentChangeable: "Ви можете вимкнути це будь-коли у Налаштуваннях.",
acceptButton: "Звісно, добре",
declineButton: "Не зараз",
settingsTitle: "Аналітика",
settingsDescription: "Надсилання анонімних даних про використання для поліпшення SnapOtter.",
settingsPrivacy: "Ваші зображення ніколи не залишають Ваш комп'ютер.",
settingsDisabledByAdmin: "Аналітику вимкнено адміністратором сервера.",
learnMore: "Дізнатися більше",
},
sidebar: {
tools: "Інструменти",
grid: "Сітка",
automate: "Автоматизація",
editor: "Редактор",
files: "Файли",
help: "Довідка",
settings: "Налаштування",
},
toolCard: {
addToFavourites: "Додати до обраного",
},
appLayout: {
mobileNavTools: "Інструменти",
mobileNavAutomate: "Автоматизація",
mobileNavEditor: "Редактор",
mobileNavFiles: "Файли",
mobileNavSettings: "Налаштування",
},
a11y: {
skipToContent: "Skip to main content",
openSidebar: "Open sidebar",
closeSidebar: "Close sidebar",
closeSettings: "Close settings",
closeHelp: "Close help",
closeDialog: "Close dialog",
zoomIn: "Zoom in",
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
blackBackground: "Black background",
expandPanel: "Expand panel",
collapsePanel: "Collapse panel",
swapDimensions: "Swap dimensions",
applyCrop: "Apply crop",
cancelCrop: "Cancel crop",
fontFamily: "Font family",
textColor: "Text color",
flipHorizontal: "Flip horizontal",
flipVertical: "Flip vertical",
hexColorValue: "Hex color value",
backgroundColor: "Background color",
foregroundColor: "Foreground color",
swapColors: "Swap foreground and background colors",
resetColors: "Reset to default black and white",
foregroundHex: "Foreground color hex value",
undo: "Undo",
redo: "Redo",
layers: "Layers",
addLayer: "Add layer",
deleteLayer: "Delete layer",
cancelOperation: "Cancel operation",
fill: "Fill",
fileDetails: "File details",
language: "Language",
selected: "Selected",
deleteKey: "Delete key",
editRole: "Edit role",
deleteRole: "Delete role",
notInstalled: "Not installed",
queued: "Queued for install",
installing: "Installing",
imageNOfTotal: "Image {n} of {total}",
processingComplete: "Image processed successfully",
processingFailed: "Processing failed",
settingsDialog: "Settings",
helpDialog: "Help",
navigationMenu: "Navigation",
homeLink: "SnapOtter home",
},
} as const;