Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@
window, into one file with FFmpeg (`IMediaJoiner`); pictures become PNG through the image engines first. Like the
other one-file jobs, the output follows "subfolder only for several files", and a join that fails or is cancelled
is undone by the job's allocator, which deletes only paths that were the job's own.
"Merge images" puts the pictures, in the order picked in the same window (with their layout: one under another or
side by side, the same width or their own sizes, a gap and a background), into one image with ImageMagick
(`IImageJoiner`), in the first picture's format. Pictures ImageMagick doesn't read become PNG first; a merged image
over 200 megapixels is refused with its size.
6. **Report** – progress and results appear in the toast window and in Home → Recent conversions.
Renderers check only the original source for referenced fonts. `ConversionStep.MissingFonts` reports any missing
families to `FileResult.MissingFonts`; the toast card can offer one trusted source, while the CLI and watch jobs
Expand Down
29 changes: 29 additions & 0 deletions src/Filee.App/Assets/i18n/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
"error.ocr_needs_tesseract": "لا يستطيع Apple Vision قراءة هذه اللغة. ثبّت Tesseract من الإعدادات ← المحركات",
"error.too_many_frames": "عدد الإطارات كبير جدًا لحفظها كصور. زِد قيمة «كل إطار رقم N»",
"error.too_many_pictures": "عدد الصور كبير جدًا لفيديو واحد، قسّمها على عدة فيديوهات",
"error.merged_image_too_large": "ستكون الصورة المدمجة كبيرة جدًا، ادمج صورًا أقل أو أصغر",
"error.over_size_limit": "لا يمكن تصغيره بما يكفي ليناسب حد الحجم",
"error.not_enough_space": "لا توجد مساحة كافية على القرص لحفظ الصور",
"error.no_motion_photo": "لا تحتوي هذه الصورة على فيديو يستطيع Filee قراءته (صورة Motion Photo من Android، أو Live Photo من iPhone مع ملف MOV بجانبها)",
Expand Down Expand Up @@ -253,6 +254,23 @@
"crop.state_done": "تم الاقتصاص",
"crop.state_skipped": "تم التخطي",
"crop.state_failed": "فشل",
"preset.hide": "بكسلة / تمويه",
"preset.hide.donut": "بكسلة",
"error.cannot_hide": "البكسلة والتمويه متاحان للصور فقط",
"hide.save": "إخفاء وحفظ",
"hide.save_next": "إخفاء والتالي",
"hide.pixelate": "بكسلة",
"hide.pixelate_hint": "التغطية بمربعات بمتوسط الألوان (P)",
"hide.blur": "تمويه",
"hide.blur_hint": "التغطية بتمويه قوي (B)",
"hide.strength": "الشدة",
"hide.strength_value": "الشدة {0} من 10 (− / +)",
"hide.remove": "إزالة الإطار",
"hide.remove_hint": "إزالة الإطار المحدد (Del)",
"hide.clear": "إزالة الكل",
"hide.empty_hint": "اسحب فوق ما تريد إخفاءه",
"hide.hint_keys": "يختار Tab إطارًا وتحرّكه مفاتيح الأسهم، ومع Shift تكون الخطوة أكبر بعشر مرات · Del يزيله · Ctrl+Z للتراجع · Esc للإغلاق",
"hide.state_done": "تم",
"preset.clip": "قص مقطع",
"clip.start": "البداية",
"clip.end": "النهاية",
Expand Down Expand Up @@ -338,6 +356,16 @@
"preset.merge_pdf": "دمج PDF",
"merge.order_title": "اختيار ترتيب الدمج",
"merge.order_hint": "حدّد ملفًا وانقله إلى أعلى أو أسفل. تُدمج الملفات بالترتيب من الأعلى إلى الأسفل. (‎Alt+↑ / Alt+↓‎)",
"merge.images_hint": "حدّد صورة وانقلها إلى أعلى أو أسفل. تأتي الأولى في الأعلى، أو على اليسار عند وضع الصور جنبًا إلى جنب. (‎Alt+↑ / Alt+↓‎)",
"merge.vertical": "من الأعلى إلى الأسفل",
"merge.horizontal": "جنبًا إلى جنب",
"merge.same_width": "العرض نفسه",
"merge.same_height": "الارتفاع نفسه",
"merge.same_size_tip": "يغيّر حجم الصور لتتطابق حوافها. عند الإيقاف تحتفظ كل صورة بحجمها في المنتصف.",
"merge.gap": "المسافة (بكسل)",
"merge.background": "الخلفية",
"merge.transparent": "شفافة",
"merge.transparent_tip": "لصيغ PNG وWEBP وغيرها مما يحفظ الشفافية. تصبح هذه المساحة بيضاء في JPG.",
"preset.group_pdf_edit": "تحرير",
"preset.pdf_crop": "اقتصاص PDF",
"preset.pdf_crop.short": "اقتصاص",
Expand Down Expand Up @@ -385,6 +413,7 @@
"preset.merge_videos": "دمج الفيديوهات",
"preset.compress_audio": "ضغط الصوت",
"preset.merge_audio": "دمج الصوت",
"preset.merge_images": "دمج الصور",
"preset.remove_metadata": "إزالة البيانات الوصفية",
"format.folder": "مجلد",
"format.category.Image": "صورة",
Expand Down
29 changes: 29 additions & 0 deletions src/Filee.App/Assets/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
"error.ocr_needs_tesseract": "Apple Vision kann diese Sprache nicht lesen. Installiere Tesseract unter Einstellungen → Module",
"error.too_many_frames": "Zu viele Einzelbilder zum Speichern. Erhöhe den Wert für „Jedes n-te Einzelbild“",
"error.too_many_pictures": "Zu viele Bilder für ein Video. Teile sie auf mehrere Videos auf",
"error.merged_image_too_large": "Das zusammengeführte Bild wäre zu groß. Führe weniger oder kleinere Bilder zusammen",
"error.over_size_limit": "Es lässt sich nicht klein genug für das Größenlimit machen",
"error.not_enough_space": "Nicht genügend freier Speicherplatz für die Bilder",
"error.no_motion_photo": "Dieses Foto enthält kein für Filee lesbares Video (Android Motion Photo oder iPhone Live Photo mit zugehöriger MOV-Datei im selben Ordner)",
Expand Down Expand Up @@ -253,6 +254,23 @@
"crop.state_done": "Zugeschnitten",
"crop.state_skipped": "Übersprungen",
"crop.state_failed": "Fehlgeschlagen",
"preset.hide": "Verpixeln / Weichzeichnen",
"preset.hide.donut": "Verpixeln",
"error.cannot_hide": "Verpixeln und Weichzeichnen ist nur bei Bildern möglich",
"hide.save": "Verbergen & Speichern",
"hide.save_next": "Verbergen & Weiter",
"hide.pixelate": "Verpixeln",
"hide.pixelate_hint": "Mit Quadraten in der Durchschnittsfarbe abdecken (P)",
"hide.blur": "Weichzeichnen",
"hide.blur_hint": "Mit starker Unschärfe abdecken (B)",
"hide.strength": "Stärke",
"hide.strength_value": "Stärke {0} von 10 (− / +)",
"hide.remove": "Rahmen entfernen",
"hide.remove_hint": "Ausgewählten Rahmen entfernen (Entf)",
"hide.clear": "Alle entfernen",
"hide.empty_hint": "Ziehe über das, was verborgen werden soll",
"hide.hint_keys": "Tab wählt einen Rahmen, Pfeiltasten verschieben ihn, Umschalt × 10 · Entf entfernt ihn · Strg+Z macht rückgängig · Esc schließt",
"hide.state_done": "Fertig",
"preset.clip": "Clip schneiden",
"clip.start": "Beginn",
"clip.end": "Ende",
Expand Down Expand Up @@ -338,6 +356,16 @@
"preset.merge_pdf": "PDF zusammenführen",
"merge.order_title": "Reihenfolge festlegen",
"merge.order_hint": "Wähle eine Datei und verschiebe sie nach oben oder unten. Dateien werden von oben nach unten zusammengeführt. (Alt+↑ / Alt+↓)",
"merge.images_hint": "Wähle ein Bild und verschiebe es nach oben oder unten. Das erste kommt nach oben, nebeneinander nach links. (Alt+↑ / Alt+↓)",
"merge.vertical": "Untereinander",
"merge.horizontal": "Nebeneinander",
"merge.same_width": "Gleiche Breite",
"merge.same_height": "Gleiche Höhe",
"merge.same_size_tip": "Skaliert die Bilder, sodass ihre Kanten bündig sind. Aus: Jedes behält seine Größe und wird zentriert.",
"merge.gap": "Abstand (px)",
"merge.background": "Hintergrund",
"merge.transparent": "Transparent",
"merge.transparent_tip": "Für PNG, WEBP und andere Formate mit Transparenz. Ein JPG wird dort weiß.",
"preset.group_pdf_edit": "Bearbeiten",
"preset.pdf_crop": "PDF zuschneiden",
"preset.pdf_crop.short": "Zuschneiden",
Expand Down Expand Up @@ -385,6 +413,7 @@
"preset.merge_videos": "Videos zusammenführen",
"preset.compress_audio": "Audio komprimieren",
"preset.merge_audio": "Audio zusammenführen",
"preset.merge_images": "Bilder zusammenführen",
"preset.remove_metadata": "Metadaten entfernen",
"format.folder": "Ordner",
"format.category.Image": "Bild",
Expand Down
29 changes: 29 additions & 0 deletions src/Filee.App/Assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
"error.ocr_needs_tesseract": "Apple Vision can't read this language. Install Tesseract in Settings → Engines",
"error.too_many_frames": "Too many frames to save as pictures, raise \"Every Nth frame\"",
"error.too_many_pictures": "Too many pictures for one video, split them into several",
"error.merged_image_too_large": "The merged picture would be too large, merge fewer or smaller pictures",
"error.over_size_limit": "It can't be made small enough for the size limit",
"error.not_enough_space": "Not enough free disk space for the pictures",
"error.no_motion_photo": "This photo has no video Filee can read (an Android Motion Photo, or an iPhone Live Photo with its MOV next to it)",
Expand Down Expand Up @@ -262,6 +263,23 @@
"crop.state_done": "Cropped",
"crop.state_skipped": "Skipped",
"crop.state_failed": "Failed",
"preset.hide": "Pixelate / blur",
"preset.hide.donut": "Pixelate",
"error.cannot_hide": "Only pictures can be pixelated or blurred",
"hide.save": "Hide & Save",
"hide.save_next": "Hide & Next",
"hide.pixelate": "Pixelate",
"hide.pixelate_hint": "Cover with squares of the average colour (P)",
"hide.blur": "Blur",
"hide.blur_hint": "Cover with a strong blur (B)",
"hide.strength": "Strength",
"hide.strength_value": "Strength {0} of 10 (− / +)",
"hide.remove": "Remove frame",
"hide.remove_hint": "Remove the selected frame (Del)",
"hide.clear": "Clear all",
"hide.empty_hint": "Drag over what you want to hide",
"hide.hint_keys": "Tab picks a frame, arrow keys move it, Shift × 10 · Del removes it · Ctrl+Z undoes · Esc closes",
"hide.state_done": "Done",
"preset.clip": "Cut a clip",
"clip.start": "Start",
"clip.end": "End",
Expand Down Expand Up @@ -348,6 +366,16 @@
"preset.merge_pdf": "Merge PDF",
"merge.order_title": "Choose merge order",
"merge.order_hint": "Select a file and move it up or down. Files are merged from top to bottom. (Alt+↑ / Alt+↓)",
"merge.images_hint": "Select a picture and move it up or down. The first one goes at the top, or on the left side by side. (Alt+↑ / Alt+↓)",
"merge.vertical": "Top to bottom",
"merge.horizontal": "Side by side",
"merge.same_width": "Same width",
"merge.same_height": "Same height",
"merge.same_size_tip": "Scales the pictures so their edges line up. Off: each keeps its own size, centred.",
"merge.gap": "Gap (px)",
"merge.background": "Background",
"merge.transparent": "Transparent",
"merge.transparent_tip": "For PNG, WEBP and other formats that keep transparency. A JPG gets white there.",
"preset.group_pdf_edit": "Edit",
"preset.pdf_crop": "Crop PDF",
"preset.pdf_crop.short": "Crop",
Expand Down Expand Up @@ -395,6 +423,7 @@
"preset.merge_videos": "Merge videos",
"preset.compress_audio": "Compress audio",
"preset.merge_audio": "Merge audio",
"preset.merge_images": "Merge images",
"preset.remove_metadata": "Remove metadata",

"format.folder": "Folder",
Expand Down
29 changes: 29 additions & 0 deletions src/Filee.App/Assets/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
"error.ocr_needs_tesseract": "Apple Vision no puede leer este idioma. Instala Tesseract en Ajustes → Motores",
"error.too_many_frames": "Demasiados fotogramas para guardar como imágenes; aumenta «Cada N fotogramas»",
"error.too_many_pictures": "Demasiadas imágenes para un vídeo; divídelas en varios",
"error.merged_image_too_large": "La imagen unida sería demasiado grande; une menos imágenes o imágenes más pequeñas",
"error.over_size_limit": "No se puede reducir lo suficiente para el límite de tamaño",
"error.not_enough_space": "Espacio libre en disco insuficiente para las imágenes",
"error.no_motion_photo": "Esta foto no tiene un vídeo que Filee pueda leer (una Motion Photo de Android o una Live Photo de iPhone con su MOV al lado)",
Expand Down Expand Up @@ -253,6 +254,23 @@
"crop.state_done": "Recortado",
"crop.state_skipped": "Omitido",
"crop.state_failed": "Error",
"preset.hide": "Pixelar / difuminar",
"preset.hide.donut": "Pixelar",
"error.cannot_hide": "Solo se pueden pixelar o difuminar imágenes",
"hide.save": "Ocultar y guardar",
"hide.save_next": "Ocultar y seguir",
"hide.pixelate": "Pixelar",
"hide.pixelate_hint": "Cubrir con cuadros del color medio (P)",
"hide.blur": "Difuminar",
"hide.blur_hint": "Cubrir con un desenfoque fuerte (B)",
"hide.strength": "Intensidad",
"hide.strength_value": "Intensidad {0} de 10 (− / +)",
"hide.remove": "Quitar marco",
"hide.remove_hint": "Quitar el marco seleccionado (Supr)",
"hide.clear": "Quitar todos",
"hide.empty_hint": "Arrastra sobre lo que quieras ocultar",
"hide.hint_keys": "Tab elige un marco, las flechas lo mueven, Mayús × 10 · Supr lo quita · Ctrl+Z deshace · Esc cierra",
"hide.state_done": "Hecho",
"preset.clip": "Cortar un clip",
"clip.start": "Inicio",
"clip.end": "Fin",
Expand Down Expand Up @@ -338,6 +356,16 @@
"preset.merge_pdf": "Combinar PDF",
"merge.order_title": "Elegir el orden de combinación",
"merge.order_hint": "Selecciona un archivo y muévelo arriba o abajo. Los archivos se combinan de arriba abajo. (Alt+↑ / Alt+↓)",
"merge.images_hint": "Selecciona una imagen y muévela arriba o abajo. La primera va arriba, o a la izquierda si van lado a lado. (Alt+↑ / Alt+↓)",
"merge.vertical": "De arriba abajo",
"merge.horizontal": "Lado a lado",
"merge.same_width": "Mismo ancho",
"merge.same_height": "Misma altura",
"merge.same_size_tip": "Escala las imágenes para que sus bordes coincidan. Desactivado: cada una conserva su tamaño, centrada.",
"merge.gap": "Separación (px)",
"merge.background": "Fondo",
"merge.transparent": "Transparente",
"merge.transparent_tip": "Para PNG, WEBP y otros formatos con transparencia. Un JPG queda en blanco ahí.",
"preset.group_pdf_edit": "Editar",
"preset.pdf_crop": "Recortar PDF",
"preset.pdf_crop.short": "Recortar",
Expand Down Expand Up @@ -385,6 +413,7 @@
"preset.merge_videos": "Unir vídeos",
"preset.compress_audio": "Comprimir audio",
"preset.merge_audio": "Unir audio",
"preset.merge_images": "Unir imágenes",
"preset.remove_metadata": "Quitar metadatos",
"format.folder": "Carpeta",
"format.category.Image": "Imagen",
Expand Down
29 changes: 29 additions & 0 deletions src/Filee.App/Assets/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
"error.ocr_needs_tesseract": "Apple Vision ne lit pas cette langue. Installez Tesseract dans Paramètres → Moteurs",
"error.too_many_frames": "Trop d'images à enregistrer, augmentez « Une image sur N »",
"error.too_many_pictures": "Trop d'images pour une seule vidéo, répartissez-les en plusieurs",
"error.merged_image_too_large": "L'image fusionnée serait trop grande, fusionnez moins d'images ou des images plus petites",
"error.over_size_limit": "Impossible de le rendre assez léger pour la taille maximale",
"error.not_enough_space": "Pas assez d'espace disque libre pour les images",
"error.no_motion_photo": "Cette photo ne contient aucune vidéo lisible par Filee (une Motion Photo Android, ou une Live Photo d'iPhone avec son MOV à côté)",
Expand Down Expand Up @@ -262,6 +263,23 @@
"crop.state_done": "Recadré",
"crop.state_skipped": "Ignoré",
"crop.state_failed": "Échec",
"preset.hide": "Pixeliser / flouter",
"preset.hide.donut": "Pixeliser",
"error.cannot_hide": "Seules les images peuvent être pixelisées ou floutées",
"hide.save": "Masquer et enregistrer",
"hide.save_next": "Masquer et suivant",
"hide.pixelate": "Pixeliser",
"hide.pixelate_hint": "Couvrir de carrés de la couleur moyenne (P)",
"hide.blur": "Flouter",
"hide.blur_hint": "Couvrir d'un flou intense (B)",
"hide.strength": "Intensité",
"hide.strength_value": "Intensité {0} sur 10 (− / +)",
"hide.remove": "Supprimer le cadre",
"hide.remove_hint": "Supprimer le cadre sélectionné (Suppr)",
"hide.clear": "Tout effacer",
"hide.empty_hint": "Faites glisser sur ce que vous voulez masquer",
"hide.hint_keys": "Tab choisit un cadre, les flèches le déplacent, Maj × 10 · Suppr le supprime · Ctrl+Z annule · Échap ferme",
"hide.state_done": "Terminé",
"preset.clip": "Couper un extrait",
"clip.start": "Début",
"clip.end": "Fin",
Expand Down Expand Up @@ -348,6 +366,16 @@
"preset.merge_pdf": "Fusionner les PDF",
"merge.order_title": "Choisir l'ordre de fusion",
"merge.order_hint": "Sélectionnez un fichier et déplacez-le vers le haut ou le bas. Les fichiers sont fusionnés de haut en bas. (Alt+↑ / Alt+↓)",
"merge.images_hint": "Sélectionnez une image et déplacez-la vers le haut ou le bas. La première va en haut, ou à gauche côte à côte. (Alt+↑ / Alt+↓)",
"merge.vertical": "De haut en bas",
"merge.horizontal": "Côte à côte",
"merge.same_width": "Même largeur",
"merge.same_height": "Même hauteur",
"merge.same_size_tip": "Met les images à l'échelle pour aligner leurs bords. Désactivé : chacune garde sa taille, centrée.",
"merge.gap": "Espacement (px)",
"merge.background": "Arrière-plan",
"merge.transparent": "Transparent",
"merge.transparent_tip": "Pour PNG, WEBP et les autres formats qui gardent la transparence. Un JPG y devient blanc.",
"preset.group_pdf_edit": "Modifier",
"preset.pdf_crop": "Rogner le PDF",
"preset.pdf_crop.short": "Rogner",
Expand Down Expand Up @@ -395,6 +423,7 @@
"preset.merge_videos": "Fusionner les vidéos",
"preset.compress_audio": "Compresser l'audio",
"preset.merge_audio": "Fusionner l'audio",
"preset.merge_images": "Fusionner les images",
"preset.remove_metadata": "Supprimer les métadonnées",

"format.folder": "Dossier",
Expand Down
Loading
Loading