Files
SnapOtter/packages/shared/src/i18n/ar.ts
T
SnapOtterandGitHub 17726ae59d docs: multi-modality rebrand, 2.0 architecture accuracy, and full OpenAPI coverage (#254)
* docs: rebrand from image-only to multi-modality across docs and metadata

SnapOtter expanded from image-only to 157 tools across 5 modalities
(image, video, audio, document/PDF, data). Update all product-level
copy, metadata, and i18n that still framed it as an image-only tool.

- README, package.json, root llms.txt: multi-modality framing, 157 tools
- OpenAPI info + tags, generated /llms.txt tagline (docs.ts)
- VitePress docs site: hero, getting-started, architecture, security,
  deployment, configuration, developer, supported-formats
- i18n: 10 product keys across all 21 locales (hero, app description,
  privacy notes, AI features, progress messages, getting-started)
- web/demo/landing meta + privacy copy, COMMUNITY_GUIDE, .env.example

Stale tool counts (53/50+/52/70+/35) corrected to 157 throughout.
Database/container deployment claims left unchanged (out of scope).

* docs: fix stale post-rebrand test assertions and README language list

- tests/e2e-docs/homepage.spec.ts: assert the current docs homepage (file toolkit, 157 tools, 5 modalities) instead of the old image-only strings
- tests/unit/api/docs-route.test.ts: sync the reproduced llms.txt tagline with docs.ts
- README.md: 21 languages with the correct list (add Swedish and Chinese Traditional, drop Czech which is not supported)

* docs: correct 2.0 architecture references (Postgres 17 + Redis 8, 3-container stack)

The docs and metadata still described the 1.x stack (SQLite, single container, p-queue). Update them to the current 2.0 reality.

- README: replace the broken single-container `docker run` quick-start with the real Docker Compose stack (app + Postgres 17 + Redis 8); fix the "no Redis, no Postgres" feature bullet
- package.json: description no longer claims a single container
- apps/docs: rewrite database.md for Postgres; configuration.md DB_PATH -> DATABASE_URL + REDIS_URL; architecture.md SQLite/p-queue/better-sqlite3 -> Postgres/BullMQ/pg and add media-engine + doc-engine; developer/security/deployment/docker-tags/getting-started/contributing compose examples now include postgres + redis; index.md + api/ai.md AI count 16 -> 19
- SECURITY.md: Drizzle (SQLite) -> (PostgreSQL)
- landing: enterprise/FeatureHighlights single-container wording; TrustSignals/ToolGrid 150+ -> 157 (dynamic); Pricing/FAQ 15 -> 19 AI tools

* docs(api): document all video, audio, document, and data tool endpoints in OpenAPI

The spec covered only image tools; the Scalar UI and the generated /llms.txt and /llms-full.txt inherited that gap. Add the 104 missing tool endpoints so the API docs match the code.

- Video: 29 endpoints (most long/async; auto-subtitles is AI)
- Audio: 17 (transcribe-audio is AI)
- Document/PDF: 36 (ocr-pdf is AI; conversions are long/async)
- Data: 10
- Image: 12 newer tools (background-replace, blur-background AI; histogram/lqip-placeholder/sprite-sheet custom responses; barcode-generate uses a JSON body)

Each schema is derived from the tool's Zod validator and executionHint (fast -> 200, long -> 202+SSE, AI adds 501 FeatureNotInstalledError, multi-file inputs as arrays), referencing the existing shared schemas. Tool path entries: 64 -> 168. Spec parses as valid YAML with no duplicate paths and only known $refs.
2026-06-16 18:04:52 +08:00

3454 lines
134 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const ar: 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: "PDF & Data",
},
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 باستخدام OCR مدعوم بـ AI",
},
"blur-faces": {
name: "تمويه الوجوه / المعلومات الحساسة",
description: "اكتشاف تلقائي وتمويه الوجوه والمعلومات الحساسة",
},
"enhance-faces": {
name: "تحسين الوجوه",
description: "استعادة وتحسين الوجوه بتقنية AI",
},
"smart-crop": {
name: "قص ذكي",
description: "قص ذكي حسب الموضوع أو الوجه أو التقليم",
},
"image-enhancement": {
name: "تحسين الصور",
description: "تحسين تلقائي بنقرة واحدة مع تصحيح ذكي للتعريض والتباين واللون والحدة",
},
"noise-removal": {
name: "إزالة التشويش",
description: "إزالة التشويش والحبيبات بتقنية AI",
},
"red-eye-removal": {
name: "إزالة العين الحمراء",
description: "اكتشاف وتصحيح العين الحمراء بتقنية AI لصور الفلاش",
},
"restore-photo": {
name: "استعادة الصور",
description: "إصلاح الخدوش والتمزقات والأضرار في الصور القديمة بتقنية AI",
},
"content-aware-resize": {
name: "تغيير حجم ذكي",
description: "تغيير حجم الصور بذكاء مع الحفاظ على المحتوى المهم",
},
"ai-canvas-expand": {
name: "توسيع اللوحة بـ AI",
description: "توسيع اللوحة مع ملء مدعوم بـ AI",
},
colorize: {
name: "تلوين بـ AI",
description: "تحويل الصور بالأبيض والأسود إلى صور ملونة باستخدام نماذج التعلم العميق",
},
"passport-photo": {
name: "صورة جواز السفر",
description:
"إنشاء صور جواز سفر وتأشيرة وهوية متوافقة مع المتطلبات الحكومية مع اكتشاف تلقائي للوجه",
},
"transcribe-audio": {
name: "تحويل الصوت إلى نص",
description: "تحويل الكلام إلى نص باستخدام النسخ المدعوم بالذكاء الاصطناعي",
},
"auto-subtitles": {
name: "ترجمة تلقائية",
description: "إنشاء ملفات ترجمة من المسارات الصوتية للفيديو",
},
"transparency-fixer": {
name: "إصلاح شفافية PNG",
description: "إصلاح ملفات PNG ذات الشفافية المزيفة بنقرة واحدة",
},
"background-replace": {
name: "استبدال الخلفية",
description: "استبدال خلفية الصورة بلون واحد",
},
"blur-background": {
name: "تمويه الخلفية",
description: "تمويه الخلفية مع الحفاظ على وضوح الهدف",
},
"watermark-text": {
name: "علامة مائية نصية",
description: "إضافة علامة مائية نصية",
},
"watermark-image": {
name: "علامة مائية بصورة",
description: "إضافة شعار كعلامة مائية",
},
"text-overlay": {
name: "نص فوق الصورة",
description: "إضافة نص منسق فوق الصور",
},
compose: {
name: "تركيب الصور",
description: "تراكب الصور مع التحكم بالموضع والشفافية",
},
"meme-generator": {
name: "صانع Meme",
description:
"إنشاء Meme باستخدام القوالب الشائعة أو صورك الخاصة. نص بنمط Impact الكلاسيكي مع خطوط وألوان ومواضع قابلة للتخصيص.",
},
info: {
name: "معلومات الصورة",
description: "عرض جميع البيانات الوصفية وخصائص الصورة",
},
compare: {
name: "مقارنة الصور",
description: "مقارنة صورتين جنبًا إلى جنب",
},
"find-duplicates": {
name: "البحث عن المتكررات",
description: "اكتشاف الصور المكررة والمتشابهة",
},
"color-palette": {
name: "لوحة الألوان",
description: "استخراج الألوان السائدة من الصورة",
},
"qr-generate": {
name: "مولّد رمز QR",
description: "إنشاء رموز QR مخصصة بألوان وأنماط وشعارات مميزة",
},
"html-to-image": {
name: "HTML to Image",
description: "Capture webpages as high-quality images",
},
"barcode-read": {
name: "قارئ الباركود",
description: "مسح الصور بحثًا عن رموز QR والباركود والرموز ثنائية الأبعاد",
},
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: "إنشاء Favicons ({count} صورة)",
submitPlural: "إنشاء Favicons ({count} صور)",
downloadZip: "تحميل ملف Favicons المضغوط",
progressLabel: "جاري إنشاء Favicons",
},
"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: "الجودة",
language: "اللغة",
autoDetect: "اكتشاف تلقائي",
pages: "الصفحات",
pagesPlaceholder: "all, 1-3, 5",
pagesHint: "ادخل ارقام الصفحات او النطاقات (مثال 1-3, 5, 8-10). الحد الاقصى 50 صفحة.",
submit: "استخراج النص",
submitBatch: "استخراج النص ({count} ملف)",
progressLabel: "جاري استخراج النص من PDF",
},
"blur-faces": {
blurRadius: "نصف قطر التمويه",
blurLight: "خفيف",
blurHeavy: "قوي",
detectionSensitivity: "حساسية الاكتشاف",
moreFaces: "وجوه أكثر",
fewerFaces: "وجوه أقل",
submit: "تمويه الوجوه",
progressLabel: "جاري تمويه الوجوه",
},
"enhance-faces": {
quality: "الجودة",
enhancementStrength: "قوة التحسين",
onlyCenterFace: "الوجه المركزي فقط",
detectionSensitivity: "حساسية الاكتشاف",
submit: "تحسين الوجوه",
submitBatch: "تحسين الوجوه ({count} ملف)",
progressLabel: "جاري تحسين الوجوه",
},
"smart-crop": {
subjectFocus: "التركيز على الموضوع",
faceFocus: "التركيز على الوجه",
autoTrim: "تقليم تلقائي",
customSize: "حجم مخصص",
socialPresets: "قوالب وسائل التواصل",
detectionStrategy: "استراتيجية الاكتشاف",
detectionStrategyHint:
"الانتباه يجد المنطقة الأكثر بروزًا بصريًا. الإنتروبيا تجد المنطقة الأغنى بالتفاصيل والمعلومات.",
attention: "الانتباه",
entropy: "الإنتروبيا",
padding: "المساحة الإضافية",
paddingHint: "مساحة تنفس إضافية حول منطقة التركيز",
outputQuality: "جودة الإخراج",
outputQualityHint: "لمخرجات JPEG و WebP. تكون PNG بدون فقدان دائمًا.",
subjectDescription:
"يكتشف المنطقة الأكثر إثارة للاهتمام باستخدام تحليل البروز ويقص حسب الحجم المستهدف.",
framing: "التأطير",
facePadding: "مساحة حول الوجه",
facePaddingHint: "مساحة إضافية حول الوجوه المكتشفة",
fewerFalsePositives: "نتائج إيجابية خاطئة أقل",
faceDescription:
"يستخدم اكتشاف الوجوه بـ AI للحفاظ على تأطير مناسب للوجوه. يعود إلى التركيز على الموضوع إذا لم يتم اكتشاف وجوه.",
trimTolerance: "التسامح",
trimDescription:
"مقدار اختلاف بكسل الحافة عن لون الحد الذي يظل قابلًا للتقليم. الأعلى = أكثر شدة.",
padToSquare: "ملء إلى مربع",
targetSizePx: "الحجم المستهدف (px)",
padColor: "لون الملء",
trimHint:
'يزيل الحدود ذات اللون الموحد حول الموضوع. فعّل "ملء إلى مربع" للحصول على صور جاهزة للتجارة الإلكترونية.',
submitSubject: "قص ذكي",
submitFace: "قص الوجه",
submitTrim: "تقليم الحدود",
},
imageEnhancement: {
enhancementMode: "وضع التحسين",
auto: "تلقائي",
portrait: "صورة شخصية",
landscape: "منظر طبيعي",
lowLight: "إضاءة منخفضة",
food: "طعام",
document: "مستند",
intensity: "الشدة",
deepEnhance: "تحسين عميق (AI)",
deepEnhanceDescription: "يزيل التشويش والتشوهات باستخدام AI",
deepEnhanceRequires: "يتطلب حزمة التكبير والتحسين",
analyzingImage: "جاري تحليل الصورة...",
detectedIssues: "المشاكل المكتشفة",
imageLooksGood: "تبدو الصورة جيدة. اضبط بدقة باستخدام شريط الشدة.",
issueUnderexposed: "تعريض منخفض",
issueOverexposed: "تعريض زائد",
issueLowContrast: "تباين ضعيف",
issueColorCast: "انحراف لوني",
issueDesaturated: "منزوع التشبع",
issueSoftFocus: "تركيز ناعم",
issueNoisy: "مشوّش",
submit: "تحسين",
submitDeep: "تحسين عميق",
submitBatch: "تحسين ({count} ملف)",
submitDeepBatch: "تحسين عميق ({count} ملف)",
progressLabel: "جاري تحسين الصورة",
progressLabelBatch: "جاري تحسين {count} صورة",
},
"noise-removal": {
denoisingTier: "مستوى إزالة التشويش",
quick: "سريع",
balanced: "متوازن",
quality: "جودة",
maximum: "أقصى",
quickDesc: "سريع وخفيف",
balancedDesc: "جودة جيدة وسرعة معتدلة",
qualityDesc: "مدعوم بـ AI، بطيء",
maximumDesc: "أفضل نموذج AI، الأبطأ",
strength: "القوة",
subtle: "خفيف",
aggressive: "قوي",
detailPreservation: "الحفاظ على التفاصيل",
smooth: "سلس",
sharp: "حاد",
colorNoise: "تشويش لوني",
heavy: "قوي",
outputFormat: "صيغة الإخراج",
gifAiWarning:
"إزالة التشويش بـ AI لملفات GIF تعالج الإطار الأول فقط. للصور المتحركة، استخدم المستوى السريع أو المتوازن.",
submit: "إزالة التشويش",
submitBatch: "إزالة التشويش ({count} ملف)",
progressLabel: "جاري إزالة التشويش",
progressLabelBatch: "جاري إزالة التشويش من {count} صورة",
},
"red-eye-removal": {
sensitivity: "الحساسية",
strict: "صارم",
aggressive: "قوي",
correctionStrength: "قوة التصحيح",
subtle: "خفيف",
dark: "داكن",
outputFormat: "صيغة الإخراج",
quality: "الجودة",
submit: "إصلاح العين الحمراء",
submitBatch: "إصلاح العين الحمراء ({count} ملف)",
progressLabel: "جاري إصلاح العين الحمراء",
progressLabelBatch: "جاري إصلاح العين الحمراء في {count} صورة",
},
"restore-photo": {
scratchRemoval: "إزالة الخدوش",
scratchRemovalDesc: "اكتشاف وإصلاح الخدوش والتمزقات والبقع",
faceEnhancement: "تحسين الوجوه",
faceEnhancementDesc: "استعادة الوجوه المتدهورة بتقنية CodeFormer AI",
faceFidelity: "دقة الوجه",
enhanced: "محسّن",
faithful: "مطابق",
noiseReduction: "تقليل التشويش",
noiseReductionDesc: "إزالة الحبيبات والتشويش من الصور القديمة",
denoiseStrength: "قوة إزالة التشويش",
autoColorize: "تلوين تلقائي",
autoColorizeDesc: "إضافة الألوان للصور بالأبيض والأسود باستخدام DDColor AI",
colorizeStrength: "قوة التلوين",
vivid: "حيوي",
submit: "استعادة الصورة",
submitBatch: "استعادة الصور ({count})",
progressLabel: "جاري استعادة الصورة",
progressLabelBatch: "جاري استعادة {count} صورة",
},
"content-aware-resize": {
widthPx: "العرض (px)",
heightPx: "الارتفاع (px)",
resizeToSquare: "تغيير الحجم إلى مربع",
protectFaces: "حماية الوجوه",
protectFacesHint: "اكتشاف وحماية مناطق الوجه من إزالة الخيوط باستخدام اكتشاف الوجوه",
smoothing: "التنعيم",
edgeSensitivity: "حساسية الحواف",
submit: "تغيير الحجم",
submitBatch: "تغيير الحجم ({count} ملف)",
progressLabel: "تغيير حجم ذكي",
},
"ai-canvas-expand": {
quality: "الجودة",
fast: "سريع",
balanced: "متوازن",
highQuality: "جودة عالية",
fastDesc: "معاينة سريعة، تمريرات AI أقل",
balancedDesc: "جودة جيدة وسرعة معتدلة",
highQualityDesc: "أفضل النتائج، أبطأ",
extendToAspectRatio: "توسيع إلى نسبة أبعاد",
extendByPixels: "توسيع بمقدار (بالبكسل)",
top: "أعلى",
right: "يمين",
bottom: "أسفل",
left: "يسار",
newSize: "الحجم الجديد: {width} x {height}",
submit: "توسيع اللوحة",
submitBatch: "توسيع ({count} ملف)",
progressLabel: "جاري توسيع اللوحة",
},
colorize: {
aiModel: "نموذج AI",
fast: "سريع",
fastDesc: "نتائج سريعة",
balanced: "متوازن",
balancedDesc: "أفضل متاح",
best: "الأفضل",
bestDesc: "أعلى جودة",
colorIntensity: "شدة اللون",
grayscaleLabel: "رمادي",
subtleLabel: "خفيف",
naturalLabel: "طبيعي",
vividLabel: "حيوي",
intensityHint: "القيم المنخفضة تنتج ألوانًا باهتة بنمط كلاسيكي.",
strength: "قوة التلوين",
submit: "تلوين",
submitBatch: "تلوين ({count} ملف)",
progressLabel: "جاري التلوين",
progressLabelBatch: "جاري تلوين {count} صورة",
},
"passport-photo": {
country: "البلد",
searchCountries: "البحث في البلدان...",
noCountriesFound: "لم يتم العثور على بلدان",
customDimensions: "أبعاد مخصصة",
documentType: "نوع المستند",
dimensionsMm: "الأبعاد (مم)",
dpi: "DPI",
pixelsPerInch: "بكسل لكل بوصة",
backgroundColor: "لون الخلفية",
maxFileSize: "الحجم الأقصى للملف",
noLimit: "بدون حد",
customKb: "مخصص KB...",
uploadPortrait: "ارفع صورة شخصية",
uploadHint: "اسحب أو ارفع صورة في اللوحة اليسرى لمعاينة صورة جواز السفر",
analyzingPhoto: "جاري تحليل الصورة",
detectingLandmarks: "جاري اكتشاف معالم الوجه وإزالة الخلفية...",
generatePassportPhoto: "إنشاء صورة جواز السفر",
generating: "جاري الإنشاء...",
downloadPhoto: "تحميل الصورة",
faceCentered: "الوجه في المنتصف",
headLevel: "الرأس مستوٍ",
lookingStraight: "النظر للأمام مباشرة",
faceSize: "حجم الوجه",
whatYouSee: "ما تراه هو ما ستحمّله",
dragToAdjust: "اسحب للتعديل",
scrollToZoom: "مرر للتكبير",
photoGenerated: "تم إنشاء الصورة. حمّلها من اللوحة اليسرى.",
},
"transcribe-audio": {
language: "اللغة",
autoDetect: "اكتشاف تلقائي",
outputFormat: "صيغة الإخراج",
plainText: "نص عادي",
submit: "تحويل إلى نص",
submitBatch: "تحويل إلى نص ({count} ملف)",
progressLabel: "جاري تحويل الصوت إلى نص",
},
"auto-subtitles": {
language: "اللغة",
autoDetect: "اكتشاف تلقائي",
format: "صيغة الترجمة",
submit: "إنشاء ترجمة",
submitBatch: "إنشاء ترجمة ({count} ملف)",
progressLabel: "جاري إنشاء الترجمة",
},
"transparency-fixer": {
description: "ارفع ملف PNG بخلفية شفافة مزيفة وسنصلحه بنقرة واحدة.",
removeWatermark: "إزالة العلامة المائية",
removeWatermarkHelp: "اكتشاف وإزالة العلامات المائية شبه الشفافة",
requiresEraser: "يتطلب حزمة ممحاة الكائنات",
advanced: "متقدم",
defringe: "إزالة الهالة",
outputFormat: "صيغة الإخراج",
submit: "إصلاح الشفافية",
submitBatch: "إصلاح الشفافية ({count} ملف)",
progressLabel: "جاري إصلاح الشفافية",
},
"background-replace": {
color: "لون الخلفية",
submit: "استبدال الخلفية",
submitBatch: "استبدال الخلفية ({count} ملفات)",
progressLabel: "جاري استبدال الخلفية",
},
"blur-background": {
intensity: "شدة التمويه",
submit: "تمويه الخلفية",
submitBatch: "تمويه الخلفية ({count} ملفات)",
progressLabel: "جاري تمويه الخلفية",
},
"watermark-text": {
watermarkText: "نص العلامة المائية",
fontSize: "حجم الخط",
color: "اللون",
opacity: "الشفافية",
position: "الموضع",
rotation: "التدوير",
center: "الوسط",
topLeft: "أعلى اليسار",
topRight: "أعلى اليمين",
bottomLeft: "أسفل اليسار",
bottomRight: "أسفل اليمين",
tiled: "متكرر",
submit: "إضافة علامة مائية",
submitBatch: "إضافة علامة مائية ({count} ملف)",
progressLabel: "جاري إضافة العلامة المائية",
},
"watermark-image": {
uploadWatermark: "رفع صورة العلامة المائية",
position: "الموضع",
opacity: "الشفافية",
scale: "المقياس",
submit: "تطبيق العلامة المائية",
submitBatch: "تطبيق العلامة المائية ({count} ملف)",
},
"text-overlay": {
text: "النص",
fontSize: "حجم الخط",
color: "اللون",
position: "الموضع",
top: "أعلى",
center: "وسط",
bottom: "أسفل",
backgroundBox: "مربع الخلفية",
backgroundColor: "لون الخلفية",
shadow: "ظل",
submit: "إضافة نص",
submitBatch: "إضافة نص ({count} ملف)",
progressLabel: "جاري إضافة النص",
download: "Download",
defaultText: "Your Text Here",
},
compose: {
uploadOverlay: "رفع صورة التراكب",
xPosition: "الموضع الأفقي",
yPosition: "الموضع العمودي",
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: "بطاقة جهة اتصال",
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: "إزاحة الظل أفقيًا",
shadowOffsetY: "إزاحة الظل عموديًا",
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: "استيراد من روابط",
placeholder: "الصق روابط الصور، رابط واحد في كل سطر...",
importButton: "استيراد الروابط",
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: "PDF",
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: "إدارة حزم نماذج AI لمعالجة الملفات المتقدمة.",
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:
"مجموعة أدوات معالجة ملفات ذاتية الاستضافة تركز على الخصوصية مع 157 أداة. تحويل وضغط وتحرير ونسخ صوتي وتعرّف ضوئي وأتمتة سير عمل الصور والفيديو والصوت والمستندات والبيانات دون إرسال البيانات إلى السحابة.",
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: [
"بدون تسجيل. بدون حسابات.",
"لا شيء يُرفع للسحابة. أبدًا.",
"معالجة محلية بالكامل.",
"مجاني. للأبد.",
"بلا حدود. بلا قيود خفية.",
"يعمل بدون إنترنت.",
"معالجة جماعية بلا حدود.",
"157 أداة.",
"15 نموذج AI. على جهازك.",
"سريع كالبرق. مبني على Sharp.",
"يعمل في بيئات معزولة.",
"حاوية Docker واحدة.",
"مفتوح المصدر. دائمًا.",
"كل بكسل يبقى على جهازك.",
"خادمك. قواعدك.",
"نشر بأمر docker pull واحد.",
"البديل ذاتي الاستضافة.",
"تغيير الحجم والضغط والتحويل. محليًا.",
"محرر صور مجاني. بدون علامات مائية.",
"معالجة ملفات جماعية. بلا حدود.",
"إزالة الخلفية بدون إنترنت.",
"بديل Canva ذاتي الاستضافة.",
"بدون مفاتيح API.",
"متوافق مع GDPR بالتصميم.",
"يعمل بدون اتصال بالإنترنت.",
],
},
changePassword: {
title: "غيّر كلمة المرور",
description:
"تحتاج إلى تعيين كلمة مرور جديدة قبل المتابعة. يجب أن تتكون كلمة المرور من 8 أحرف على الأقل مع أحرف كبيرة وصغيرة ورقم.",
usernameLabel: "اسم المستخدم",
currentPasswordLabel: "كلمة المرور الحالية",
currentPasswordPlaceholder: "أدخل كلمة المرور الحالية",
newPasswordLabel: "كلمة المرور الجديدة",
generateButton: "إنشاء كلمة مرور قوية",
newPasswordPlaceholder: "8 أحرف على الأقل",
confirmPasswordLabel: "تأكيد كلمة المرور الجديدة",
confirmPasswordPlaceholder: "أعد كتابة كلمة المرور الجديدة",
passwordsMismatch: "كلمتا المرور غير متطابقتين",
failedError: "فشل تغيير كلمة المرور",
connectionError: "خطأ في الاتصال",
changingButton: "جاري التغيير...",
changeButton: "تغيير كلمة المرور",
sidebarTitle: "أوشكت على الانتهاء",
sidebarDescription: "عيّن كلمة مرور قوية لتأمين حسابك، وستكون جاهزًا للانطلاق.",
},
automate: {
title: "أتمتة",
invalidPipelineFile: "ليس ملف 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: "تعذر جلب الصورة من الرابط",
ariaLabel: "منطقة إسقاط الملفات",
dropPrompt: "اسحب صورك هنا",
browseOrPaste: "اضغط في أي مكان للتصفح، أو الصق من الحافظة",
uploadButton: "رفع",
defaultFormats: "PNG، JPG، WebP، HEIC، RAW، PSD، وأكثر من 65 صيغة",
orSeparator: "أو",
urlPlaceholder: "الصق رابط الصورة...",
urlLoadingIndicator: "...",
addUrlButton: "إضافة",
importMultipleUrls: "استيراد روابط متعددة...",
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: "~دقيقة واحدة متبقية",
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: "الملف السابق",
nextImage: "الملف التالي",
imageArea: "منطقة المعاينة",
imageViewer: "عارض الملفات",
fileDropZone: "File drop zone",
imageDropZone: "منطقة إسقاط الملفات",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "عناصر تحكم المعاينة",
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;