Files
SnapOtter/packages/shared/src/i18n/fr.ts
T

3458 lines
121 KiB
TypeScript

import type { TranslationKeys } from "./en.js";
export const fr: TranslationKeys = {
common: {
upload: "Importer depuis l'ordinateur",
process: "Traiter",
download: "Telecharger",
cancel: "Annuler",
save: "Enregistrer",
delete: "Supprimer",
settings: "Parametres",
search: "Rechercher des outils...",
dropFiles: "Deposez des fichiers ici ou cliquez sur le bouton d'import",
loading: "Chargement...",
error: "Une erreur est survenue",
confirm: "Confirmer",
close: "Fermer",
back: "Retour",
next: "Suivant",
clear: "Effacer",
copy: "Copier",
copied: "Copie !",
noResults: "Aucun resultat trouve",
showLess: "Afficher moins",
showMore: "Afficher {count} de plus",
experimental: "Experimental",
enabled: "Active",
disabled: "Desactive",
rename: "Renommer",
edit: "Modifier",
actions: "Actions",
create: "Creer",
or: "ou",
goHome: "Retour a l'accueil",
somethingWentWrong: "Quelque chose s'est mal passe",
unexpectedError: "Une erreur inattendue est survenue.",
retry: "Réessayer",
privacyPolicy: "Politique de confidentialite",
pageNotFound: "Page not found",
pageNotFoundDescription: "The page you are looking for does not exist or has been moved.",
},
categories: {
essentials: "Essentiels",
adjustments: "Reglages",
enhance: "Enhance & AI",
watermark: "Filigrane et superposition",
layout: "Mise en page et composition",
utilities: "Utilitaires",
optimization: "Optimisation",
format: "Format et conversion",
"video-edit": "Video",
"video-convert": "Convert",
"video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files",
archives: "Archives",
},
modalities: {
image: "Image",
video: "Video",
audio: "Audio",
documentsAndFiles: "Documents & Files",
},
tools: {
resize: {
name: "Redimensionner",
description: "Redimensionnez par pixels, pourcentage ou presets pour reseaux sociaux",
},
crop: {
name: "Recadrer",
description: "Recadrage libre, presets de ratio, recadrage par forme",
},
rotate: {
name: "Rotation et miroir",
description: "Rotation, miroir et redressement d'images",
},
convert: { name: "Convertir", description: "Convertissez entre formats d'image" },
compress: {
name: "Compresser",
description: "Reduisez la taille du fichier par qualite ou taille cible",
},
"optimize-for-web": {
name: "Optimiser pour le web",
description:
"Optimisez les images pour le web avec conversion de format, controle de qualite et apercu en direct",
},
"strip-metadata": {
name: "Supprimer les metadonnees",
description: "Supprimez EXIF, GPS et informations de l'appareil photo",
},
"edit-metadata": {
name: "Modifier les metadonnees",
description: "Modifiez EXIF, IPTC, XMP, GPS, mots-cles et dates",
},
"bulk-rename": {
name: "Renommage par lot",
description: "Renommez plusieurs fichiers avec des motifs",
},
"image-to-pdf": {
name: "Image vers PDF",
description: "Combinez des images dans un document PDF",
},
"pdf-to-image": {
name: "PDF vers image",
description: "Convertissez des pages PDF en images",
},
favicon: {
name: "Generateur de Favicon",
description: "Generez toutes les tailles de favicon et d'icones d'application",
},
"adjust-colors": {
name: "Ajuster les couleurs",
description: "Luminosite, contraste, exposition, saturation, temperature, nettete et effets",
},
sharpening: {
name: "Nettete",
description: "Nettete adaptative, masque flou et passe-haut avec presets",
},
"replace-color": {
name: "Remplacer et inverser la couleur",
description: "Remplacez des couleurs specifiques ou inversez",
},
"color-blindness": {
name: "Simulation du daltonisme",
description:
"Simulez l'apparence des images avec differents types de deficience de la vision des couleurs",
},
"remove-background": {
name: "Supprimer l'arriere-plan",
description: "Suppression d'arriere-plan par AI",
},
upscale: {
name: "Agrandissement d'image",
description: "Amelioration par super-resolution AI",
},
"erase-object": {
name: "Effaceur d'objets",
description: "Supprimez les objets indesirables avec l'AI",
},
ocr: {
name: "OCR / Extraction de texte",
description: "Extrayez du texte a partir d'images avec une precision alimentee par l'AI",
},
"ocr-pdf": {
name: "OCR de PDF",
description: "Extrayez du texte de documents PDF avec OCR alimente par l'IA",
},
"blur-faces": {
name: "Floutage de visages / donnees sensibles",
description: "Detectez et floutez automatiquement les visages et informations sensibles",
},
"enhance-faces": {
name: "Amelioration des visages",
description: "Restaurez et ameliorez les visages avec l'AI",
},
"smart-crop": {
name: "Recadrage intelligent",
description: "Recadrage intelligent par sujet, visage ou rognage automatique",
},
"image-enhancement": {
name: "Amelioration d'image",
description:
"Amelioration automatique en un clic : exposition, contraste, couleur et nettete intelligents",
},
"noise-removal": {
name: "Suppression du bruit",
description: "Suppression du bruit et du grain par AI",
},
"red-eye-removal": {
name: "Correction des yeux rouges",
description: "Detection et correction des yeux rouges par AI pour les photos au flash",
},
"restore-photo": {
name: "Restauration de photos",
description:
"Reparation de rayures, dechirures et dommages sur les photos anciennes avec l'AI",
},
"content-aware-resize": {
name: "Redimensionnement intelligent",
description:
"Redimensionnez les images de maniere intelligente tout en preservant le contenu important",
},
"ai-canvas-expand": {
name: "Extension de canevas AI",
description: "Etendez le canevas avec un remplissage genere par AI",
},
colorize: {
name: "Colorisation AI",
description:
"Convertissez les photos noir et blanc en couleur a l'aide de modeles d'apprentissage profond AI",
},
"passport-photo": {
name: "Photo d'identite",
description:
"Creez des photos de passeport, visa et pieces d'identite conformes aux normes officielles avec detection automatique du visage",
},
"transcribe-audio": {
name: "Transcrire l'audio",
description: "Convertir la parole en texte avec la transcription par IA",
},
"auto-subtitles": {
name: "Sous-titres automatiques",
description: "Generer des fichiers de sous-titres a partir des pistes audio video",
},
"transparency-fixer": {
name: "Correcteur de transparence PNG",
description: "Corrigez les PNG a fausse transparence en un clic",
},
"background-replace": {
name: "Remplacement du fond",
description: "Remplacer le fond par une couleur unie",
},
"blur-background": {
name: "Flou d'arriere-plan",
description: "Flouter le fond en gardant le sujet net",
},
"watermark-text": {
name: "Filigrane texte",
description: "Ajoutez un filigrane textuel en superposition",
},
"watermark-image": {
name: "Filigrane image",
description: "Superposez un logo en filigrane",
},
"text-overlay": {
name: "Texte en superposition",
description: "Ajoutez du texte stylise aux images",
},
compose: {
name: "Composition d'image",
description: "Superposez des images avec position et opacite",
},
"meme-generator": {
name: "Generateur de Meme",
description:
"Creez des memes avec des modeles populaires ou vos propres images. Texte classique style Impact avec polices, couleurs et positionnement personnalisables.",
},
info: {
name: "Info image",
description: "Consultez toutes les metadonnees et proprietes de l'image",
},
compare: {
name: "Comparer des images",
description: "Comparaison cote a cote de deux images",
},
"find-duplicates": {
name: "Trouver les doublons",
description: "Detectez les images en double et quasi-identiques",
},
"color-palette": {
name: "Palette de couleurs",
description: "Extrayez les couleurs dominantes d'une image",
},
"qr-generate": {
name: "Generateur de codes QR",
description: "Generez des codes QR stylises avec couleurs, motifs et logos personnalises",
},
"html-to-image": {
name: "HTML to Image",
description: "Capture webpages as high-quality images",
},
"barcode-read": {
name: "Lecteur de codes-barres",
description: "Scannez les images pour detecter les codes QR, codes-barres et codes 2D",
},
collage: {
name: "Collage / Grille",
description: "Combinez des images en de magnifiques collages avec plus de 25 modeles",
},
stitch: {
name: "Assembler / Combiner",
description: "Assemblez des images cote a cote, empilees ou en grille",
},
split: {
name: "Decoupage d'image",
description: "Decoupez des images en grille ou par taille en pixels avec apercu en direct",
},
border: {
name: "Bordure et cadre",
description:
"Ajoutez des bordures, du rembourrage, des coins arrondis et des ombres avec des presets en un clic",
},
beautify: {
name: "Embellir une capture d'ecran",
description:
"Ajoutez des fonds degrades, des cadres d'appareils, des ombres et des tailles pour reseaux sociaux aux captures d'ecran",
},
"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 vers raster",
description:
"Convertissez SVG en PNG, JPEG, WebP, AVIF, TIFF, GIF ou HEIF a une echelle et un DPI personnalises",
},
vectorize: {
name: "Image vers SVG",
description: "Convertissez des images en graphiques vectoriels redimensionnables",
},
"gif-tools": {
name: "Outils GIF",
description:
"Redimensionnez, optimisez, changez la vitesse, inversez, extrayez des images et faites pivoter des GIFs animes",
},
"image-to-base64": {
name: "Image vers Base64",
description:
"Convertissez des images en chaines Base64 pour les integrer dans HTML, CSS et plus",
},
"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: "Constructeur de Pipeline",
description: "Enchainez plusieurs outils dans un flux de travail",
},
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",
},
},
toolSettings: {
compress: {
compressionMode: "Mode de compression",
targetSize: "Taille cible",
quality: "Qualite",
smallestFile: "Fichier le plus petit",
bestQuality: "Meilleure qualite",
submit: "Compresser",
submitBatch: "Compresser ({count} fichiers)",
progressLabel: "Compression en cours",
original: "Original : {size} KB",
processed: "Traite : {size} KB",
saved: "Economie : {percent}%",
},
resize: {
customSize: "Taille personnalisee",
scale: "Echelle",
presets: "Presets",
contentAware: "Intelligent",
widthPx: "Largeur (px)",
heightPx: "Hauteur (px)",
fitMode: "Mode d'ajustement",
cropToFit: "Recadrer pour ajuster",
fitInside: "Ajuster a l'interieur",
stretch: "Etirer",
limitToOriginalSize: "Limiter a la taille d'origine",
limitToOriginalSizeHint:
"Si votre image est deja plus petite que la cible, elle est conservee telle quelle au lieu d'etre agrandie",
scalePercent: "Echelle (%)",
resizeToSquare: "Redimensionner en carre",
protectFaces: "Proteger les visages",
smoothing: "Lissage",
edgeSensitivity: "Sensibilite des contours",
submit: "Redimensionner",
submitBatch: "Redimensionner ({count} fichiers)",
progressLabel: "Redimensionnement en cours",
},
crop: {
aspectRatio: "Ratio d'aspect",
custom: "Personnalise",
positionAndSize: "Position et taille",
ruleOfThirds: "Regle des tiers",
leftOffsetPx: "Decalage gauche (px)",
topOffsetPx: "Decalage haut (px)",
submit: "Recadrer",
submitBatch: "Recadrer ({count} fichiers)",
progressLabel: "Recadrage en cours",
},
rotate: {
rotate: "Rotation",
angle: "Angle",
straighten: "Redresser",
flip: "Miroir",
horizontal: "Horizontal",
vertical: "Vertical",
resetAllChanges: "Reinitialiser toutes les modifications",
submit: "Appliquer",
submitBatch: "Appliquer ({count} fichiers)",
progressLabel: "Application en cours",
},
convert: {
targetFormat: "Format cible",
sourceFormat: "Format source",
quality: "Qualite",
submit: "Convertir",
submitBatch: "Convertir ({count} fichiers)",
progressLabel: "Conversion en cours",
},
"optimize-for-web": {
outputFormat: "Format de sortie",
quality: "Qualite",
smallestFile: "Fichier le plus petit",
bestQuality: "Meilleure qualite",
maxDimensions: "Dimensions maximales",
maxWidth: "Largeur maximale",
maxHeight: "Hauteur maximale",
stripMetadata: "Supprimer les metadonnees",
sizeComparison: "Comparaison de taille",
optimized: "Optimise :",
smaller: "{percent}% plus petit",
larger: "{percent}% plus grand",
submit: "Traiter et telecharger",
submitBatch: "Traiter et telecharger ({count} fichiers)",
progressLabel: "Optimisation en cours",
},
"strip-metadata": {
currentMetadata: "Metadonnees actuelles",
readingMetadata: "Lecture des metadonnees...",
noMetadataFound: "Aucune metadonnee trouvee dans cette image.",
removeAllMetadata: "Supprimer toutes les metadonnees",
selectSpecific: "Ou selectionnez des metadonnees specifiques :",
stripExif: "Supprimer EXIF (info appareil, date, exposition)",
stripGps: "Supprimer GPS (donnees de localisation)",
stripIcc: "Supprimer ICC (profil colorimetrique)",
stripXmp: "Supprimer XMP (metadonnees extensibles)",
locationFound: "localisation trouvee",
locationWarning:
"Cette image contient votre localisation precise. Pensez a supprimer les donnees GPS avant de la partager.",
metadataSections: "{count} section de metadonnees trouvee",
metadataSectionsPlural: "{count} sections de metadonnees trouvees",
metadataRemoved: "Metadonnees supprimees : {size} KB",
submit: "Supprimer les metadonnees",
progressLabel: "Suppression des metadonnees",
},
"edit-metadata": {
readingMetadata: "Lecture des metadonnees...",
couldNotReadMetadata: "Impossible de lire les metadonnees - les champs seront vides.",
basicInfo: "Informations de base",
description: "Description",
artist: "Artiste",
copyright: "Copyright",
software: "Logiciel",
iptc: "IPTC",
title: "Titre",
headline: "Titre principal",
city: "Ville",
stateProvince: "Etat/Province",
country: "Pays",
dateAndTime: "Date et heure",
editDates: "Modifier les dates",
shiftAllDates: "Decaler toutes les dates",
dateModified: "Date de modification",
dateTaken: "Date de prise de vue",
shiftHint:
"Decalez tous les champs de date d'un decalage (utile pour les corrections de fuseau horaire)",
direction: "Direction",
forward: "+ En avant",
backward: "- En arriere",
hoursMinutes: "Heures:Minutes",
locationGps: "Localisation (GPS)",
locationDataFound: "Donnees de localisation trouvees",
noGpsData: "Aucune donnee GPS. Ajoutez des coordonnees ci-dessous.",
latitude: "Latitude",
longitude: "Longitude",
altitudeMeters: "Altitude (metres)",
removeAllGpsData: "Supprimer toutes les donnees GPS",
keywords: "Mots-cles",
addKeywordPlaceholder: "Ajoutez un mot-cle et appuyez sur Entree",
addToExisting: "Ajouter aux existants",
replaceAll: "Tout remplacer",
allMetadata: "Toutes les metadonnees",
templates: "Modeles",
templateNamePlaceholder: "Nom du modele",
uploadPrompt: "Importez une image pour modifier ses metadonnees.",
changes: "{count} modifications :",
modified: "{count} modifie(s)",
removed: "{count} supprime(s)",
gpsCleared: "GPS efface",
gpsAdded: "GPS ajoute",
datesShifted: "dates decalees",
submit: "Appliquer les metadonnees",
progressLabel: "Ecriture des metadonnees",
},
"bulk-rename": {
pattern: "Motif",
patternHint: "Variables : {{index}}, {{padded}}, {{original}}",
startIndex: "Index de depart",
preview: "Apercu",
andMore: "... et {count} de plus",
renaming: "Renommage en cours...",
submit: "Renommer {count} fichiers",
zipDownloaded: "ZIP telecharge avec succes",
},
"image-to-pdf": {
imageCount: "{count} image sera convertie en {mode}",
imageCountPlural: "{count} images seront converties en {mode}",
singlePdfMode: "un seul PDF, une image par page",
separatePdfMode: "des PDFs separes, un par image",
combineAllImages: "Combiner toutes les images en un PDF",
pageSize: "Taille de page",
orientation: "Orientation",
portrait: "Portrait",
landscape: "Paysage",
margin: "Marge",
targetSizeLabel: "Taille de fichier cible (optionnel)",
targetSizePlaceholder: "ex. 2",
targetSizeHint: "Laissez vide pour une qualite maximale",
targetSizeMet: "Objectif atteint",
targetSizeNotMet:
"Impossible d'atteindre l'objectif. Fichier compresse a la qualite minimale.",
targetSizeTooSmall: "L'objectif doit etre d'au moins 50KB",
jpegQualityLabel: "Qualite JPEG utilisee",
noImage: "Aucune image",
submitCollate: "Creer le PDF ({count} pages)",
submitSeparate: "Creer {count} PDFs",
downloadPdf: "Telecharger le PDF",
downloadZip: "Telecharger le ZIP",
progressLabel: "Creation du PDF",
uploadingImages: "Import des images...",
processingPages: "Traitement de {count} pages...",
},
"pdf-to-image": {
dropPdf: "Deposez un PDF ici ou cliquez pour selectionner",
readingPdf: "Lecture du PDF...",
pageCount: "{count} page",
pageCountPlural: "{count} pages",
outputFormat: "Format de sortie",
quality: "Qualite",
resolutionDpi: "Resolution (DPI)",
dpiScreen: "Ecran",
dpiStandard: "Standard",
dpiPrint: "Impression",
dpiHighQuality: "Haute qualite",
colorMode: "Mode couleur",
colorModeColor: "Couleur",
colorModeGrayscale: "Niveaux de gris",
colorModeBw: "N&B",
pages: "Pages",
allPages: "Toutes les pages",
pagesHint: "ex. 1-3, 5, 8-10 (le document contient {count} pages)",
converting: "Conversion en cours...",
submit: "Convertir {count} page",
submitPlural: "Convertir {count} pages",
downloadAllZip: "Tout telecharger (ZIP)",
},
favicon: {
uploadHint:
"Importez des images carrees (512x512 ou plus recommande) pour generer toutes les tailles de favicon et d'icones d'application.",
multipleHint: "Chacune des {count} images obtient son propre dossier dans le ZIP.",
generatedSizes: "Tailles generees (par image)",
plusManifest: "+ manifest.json + extrait HTML",
submit: "Generer les Favicons ({count} image)",
submitPlural: "Generer les Favicons ({count} images)",
downloadZip: "Telecharger le ZIP des Favicons",
progressLabel: "Generation des Favicons",
},
"adjust-colors": {
light: "Lumiere",
brightness: "Luminosite",
contrast: "Contraste",
exposure: "Exposition",
color: "Couleur",
saturation: "Saturation",
temperature: "Temperature",
temperatureHint: "froid / chaud",
tint: "Teinte",
tintHint: "vert / magenta",
hue: "Teinte chromatique",
detail: "Detail",
sharpness: "Nettete",
effects: "Effets",
none: "aucun",
grayscale: "niveaux de gris",
sepia: "sepia",
invert: "inverser",
colorChannels: "Canaux de couleur",
channelModified: "modifie",
red: "Rouge",
green: "Vert",
blue: "Bleu",
resetAll: "Tout reinitialiser",
submit: "Appliquer",
submitBatch: "Appliquer ({count} fichiers)",
progressLabel: "Ajustement des couleurs",
},
sharpening: {
method: "Methode",
adaptive: "Adaptatif",
unsharpMask: "Masque flou",
highPass: "Passe-haut",
presets: "Presets",
textureAmount: "Quantite de texture",
amount: "Quantite",
strength: "Intensite",
noiseReduction: "Reduction du bruit",
off: "desactive",
lightDenoise: "leger",
mediumDenoise: "moyen",
strongDenoise: "fort",
advancedControls: "Controles avances",
radius: "Rayon",
flatProtection: "Protection des aplats",
detailThreshold: "Seuil de detail",
haloLimitLight: "Limite de halo (clair)",
haloLimitDark: "Limite de halo (sombre)",
threshold: "Seuil",
kernelSize: "Taille du noyau",
submit: "Accentuer",
submitBatch: "Accentuer ({count} fichiers)",
progressLabel: "Accentuation en cours",
},
"replace-color": {
sourceColor: "Couleur source (a remplacer)",
targetColor: "Couleur cible (remplacement)",
makeTransparent: "Rendre transparent a la place",
tolerance: "Tolerance",
exactMatch: "Correspondance exacte",
wideRange: "Plage etendue",
submit: "Remplacer la couleur",
submitBatch: "Remplacer la couleur ({count} fichiers)",
progressLabel: "Remplacement de la couleur",
},
"color-blindness": {
simulationType: "Type de simulation",
redGreen: "Rouge-Vert",
blueYellow: "Bleu-Jaune",
monochromatic: "Monochromatique",
submit: "Simuler",
submitBatch: "Simuler ({count} fichiers)",
progressLabel: "Simulation du daltonisme",
},
"remove-background": {
subject: "Sujet",
people: "Personnes",
products: "Produits",
general: "General",
passportIdPhoto: "Photo de passeport / piece d'identite",
quality: "Qualite",
fast: "Rapide",
hd: "HD",
max: "Max",
ultra: "Ultra",
background: "Arriere-plan",
transparent: "Transparent",
bgColor: "Couleur",
gradient: "Degrade",
image: "Image",
gradientDirection: "Direction",
chooseBackgroundImage: "Choisir une image d'arriere-plan",
effectsSection: "Effets",
effectsActive: "actifs",
blurBackground: "Flouter l'arriere-plan",
intensity: "Intensite",
addShadow: "Ajouter une ombre",
opacity: "Opacite",
outputFormat: "Output Format",
edgeSmoothing: "Edge Smoothing",
edgeSmoothingOff: "Off",
edgeSmoothingLight: "Light",
edgeSmoothingMedium: "Medium",
edgeSmoothingStrong: "Strong",
colorDecontamination: "Color Decontamination",
rendering: "Rendu en cours...",
submit: "Supprimer l'arriere-plan",
submitBatch: "Supprimer l'arriere-plan ({count} fichiers)",
progressLabel: "Suppression de l'arriere-plan",
},
upscale: {
scaleFactor: "Facteur d'echelle",
quality: "Qualite",
enhanceFaces: "Ameliorer les visages",
noiseReduction: "Reduction du bruit",
noiseReductionHint:
"Lisse le grain et le bruit. Des valeurs plus elevees suppriment davantage de bruit mais peuvent adoucir les details.",
outputFormat: "Format de sortie",
submit: "Agrandir {scale}x",
submitBatch: "Agrandir {scale}x ({count} fichiers)",
progressLabel: "Agrandissement de l'image",
progressLabelBatch: "Agrandissement de {count} images",
},
"erase-object": {
brushSize: "Taille du pinceau",
fine: "Fin",
wide: "Large",
undo: "Annuler",
clear: "Effacer",
outputFormat: "Format de sortie",
quality: "Qualite",
paintHint:
"Peignez sur les objets que vous souhaitez supprimer. Utilisez Ctrl+Z pour annuler.",
submit: "Effacer l'objet",
submitBatch: "Tout effacer ({count})",
progressLabel: "Effacement de l'objet",
},
ocr: {
quality: "Qualite",
enhanceBeforeScanning: "Ameliorer avant le scan",
enhanceHint:
"Redresse, ameliore le contraste, supprime le bruit et agrandit automatiquement l'image avant le scan pour une meilleure precision.",
language: "Langue",
autoDetect: "Detection automatique",
extractedText: "Texte extrait",
noTextDetected: "Aucun texte detecte dans cette image",
characters: "{count} caracteres",
submit: "Extraire le texte",
submitBatch: "Extraire le texte ({count} fichiers)",
progressLabel: "Extraction du texte",
},
"ocr-pdf": {
quality: "Qualite",
language: "Langue",
autoDetect: "Detection automatique",
pages: "Pages",
pagesPlaceholder: "all, 1-3, 5",
pagesHint: "Entrez des numeros de pages ou des plages (ex. 1-3, 5, 8-10). Max 50 pages.",
submit: "Extraire le texte",
submitBatch: "Extraire le texte ({count} fichiers)",
progressLabel: "Extraction du texte du PDF",
},
"blur-faces": {
blurRadius: "Rayon du flou",
blurLight: "Leger",
blurHeavy: "Fort",
detectionSensitivity: "Sensibilite de detection",
moreFaces: "Plus de visages",
fewerFaces: "Moins de visages",
submit: "Flouter les visages",
progressLabel: "Floutage des visages",
},
"enhance-faces": {
quality: "Qualite",
enhancementStrength: "Intensite de l'amelioration",
onlyCenterFace: "Visage central uniquement",
detectionSensitivity: "Sensibilite de detection",
submit: "Ameliorer les visages",
submitBatch: "Ameliorer les visages ({count} fichiers)",
progressLabel: "Amelioration des visages",
},
"smart-crop": {
subjectFocus: "Mise au point sur le sujet",
faceFocus: "Mise au point sur le visage",
autoTrim: "Rognage automatique",
customSize: "Taille personnalisee",
socialPresets: "Presets pour reseaux sociaux",
detectionStrategy: "Strategie de detection",
detectionStrategyHint:
"L'attention trouve la region visuellement la plus saillante. L'entropie trouve la zone avec le plus de details et d'informations.",
attention: "Attention",
entropy: "Entropie",
padding: "Marge interieure",
paddingHint: "Espace supplementaire autour de la zone de mise au point",
outputQuality: "Qualite de sortie",
outputQualityHint: "Pour les sorties JPEG et WebP. Le PNG est toujours sans perte.",
subjectDescription:
"Detecte la region la plus interessante par analyse de saillance et recadre a la taille souhaitee.",
framing: "Cadrage",
facePadding: "Marge autour du visage",
facePaddingHint: "Espace supplementaire autour des visages detectes",
fewerFalsePositives: "Moins de faux positifs",
faceDescription:
"Utilise la detection faciale AI pour garder les visages bien cadres. Se replie sur la mise au point sur le sujet si aucun visage n'est detecte.",
trimTolerance: "Tolerance",
trimDescription:
"A quel point un pixel de bordure peut differer de la couleur du bord et etre quand meme rogne. Plus eleve = plus agressif.",
padToSquare: "Remplir en carre",
targetSizePx: "Taille cible (px)",
padColor: "Couleur de remplissage",
trimHint:
'Supprime les bordures de couleur uniforme autour du sujet. Activez "Remplir en carre" pour des images pretes pour le e-commerce.',
submitSubject: "Recadrage intelligent",
submitFace: "Recadrage par visage",
submitTrim: "Rogner les bordures",
},
imageEnhancement: {
enhancementMode: "Mode d'amelioration",
auto: "Automatique",
portrait: "Portrait",
landscape: "Paysage",
lowLight: "Faible luminosite",
food: "Nourriture",
document: "Document",
intensity: "Intensite",
deepEnhance: "Amelioration profonde (AI)",
deepEnhanceDescription: "Supprime le bruit et les artefacts avec l'AI",
deepEnhanceRequires: "Necessite le pack Agrandissement et amelioration",
analyzingImage: "Analyse de l'image...",
detectedIssues: "Problemes detectes",
imageLooksGood: "L'image semble bonne. Ajustez avec le curseur d'intensite.",
issueUnderexposed: "Sous-exposition",
issueOverexposed: "Surexposition",
issueLowContrast: "Contraste plat",
issueColorCast: "Dominante de couleur",
issueDesaturated: "Desaturee",
issueSoftFocus: "Mise au point douce",
issueNoisy: "Bruitee",
submit: "Ameliorer",
submitDeep: "Amelioration profonde",
submitBatch: "Ameliorer ({count} fichiers)",
submitDeepBatch: "Amelioration profonde ({count} fichiers)",
progressLabel: "Amelioration de l'image",
progressLabelBatch: "Amelioration de {count} images",
},
"noise-removal": {
denoisingTier: "Niveau de debruitage",
quick: "Rapide",
balanced: "Equilibre",
quality: "Qualite",
maximum: "Maximum",
quickDesc: "Rapide et leger",
balancedDesc: "Bonne qualite, vitesse moderee",
qualityDesc: "Par AI, lent",
maximumDesc: "Meilleur modele AI, le plus lent",
strength: "Intensite",
subtle: "Subtil",
aggressive: "Agressif",
detailPreservation: "Preservation des details",
smooth: "Lisse",
sharp: "Net",
colorNoise: "Bruit de couleur",
heavy: "Intense",
outputFormat: "Format de sortie",
gifAiWarning:
"Le debruitage AI sur les fichiers GIF ne traite que la premiere image. Pour les GIFs animes, utilisez le niveau Rapide ou Equilibre.",
submit: "Supprimer le bruit",
submitBatch: "Supprimer le bruit ({count} fichiers)",
progressLabel: "Suppression du bruit",
progressLabelBatch: "Suppression du bruit de {count} images",
},
"red-eye-removal": {
sensitivity: "Sensibilite",
strict: "Stricte",
aggressive: "Aggressive",
correctionStrength: "Intensite de la correction",
subtle: "Subtil",
dark: "Sombre",
outputFormat: "Format de sortie",
quality: "Qualite",
submit: "Corriger les yeux rouges",
submitBatch: "Corriger les yeux rouges ({count} fichiers)",
progressLabel: "Correction des yeux rouges",
progressLabelBatch: "Correction des yeux rouges dans {count} images",
},
"restore-photo": {
scratchRemoval: "Suppression des rayures",
scratchRemovalDesc: "Detecte et repare les rayures, dechirures et taches",
faceEnhancement: "Amelioration des visages",
faceEnhancementDesc: "Restaure les visages degrades avec CodeFormer AI",
faceFidelity: "Fidelite du visage",
enhanced: "Ameliore",
faithful: "Fidele",
noiseReduction: "Reduction du bruit",
noiseReductionDesc: "Supprime le grain et le bruit des photos anciennes",
denoiseStrength: "Intensite du debruitage",
autoColorize: "Colorisation automatique",
autoColorizeDesc: "Ajoutez de la couleur aux photos N&B avec DDColor AI",
colorizeStrength: "Intensite de la colorisation",
vivid: "Vif",
submit: "Restaurer la photo",
submitBatch: "Restaurer les photos ({count})",
progressLabel: "Restauration de la photo",
progressLabelBatch: "Restauration de {count} photos",
},
"content-aware-resize": {
widthPx: "Largeur (px)",
heightPx: "Hauteur (px)",
resizeToSquare: "Redimensionner en carre",
protectFaces: "Proteger les visages",
protectFacesHint:
"Detecte et protege les zones de visage de la suppression de coutures par detection faciale",
smoothing: "Lissage",
edgeSensitivity: "Sensibilite des contours",
submit: "Redimensionner",
submitBatch: "Redimensionner ({count} fichiers)",
progressLabel: "Redimensionnement intelligent",
},
"ai-canvas-expand": {
quality: "Qualite",
fast: "Rapide",
balanced: "Equilibre",
highQuality: "Haute qualite",
fastDesc: "Apercu rapide, moins de passes AI",
balancedDesc: "Bonne qualite, vitesse moderee",
highQualityDesc: "Meilleurs resultats, plus lent",
extendToAspectRatio: "Etendre au ratio d'aspect",
extendByPixels: "Etendre de (pixels)",
top: "Haut",
right: "Droite",
bottom: "Bas",
left: "Gauche",
newSize: "Nouvelle taille : {width} x {height}",
submit: "Etendre le canevas",
submitBatch: "Etendre ({count} fichiers)",
progressLabel: "Extension du canevas",
},
colorize: {
aiModel: "Modele AI",
fast: "Rapide",
fastDesc: "Resultats rapides",
balanced: "Equilibre",
balancedDesc: "Le meilleur disponible",
best: "Optimal",
bestDesc: "La plus haute qualite",
colorIntensity: "Intensite des couleurs",
grayscaleLabel: "Niveaux de gris",
subtleLabel: "Subtil",
naturalLabel: "Naturel",
vividLabel: "Vif",
intensityHint: "Des valeurs plus basses produisent des couleurs plus douces, style vintage.",
strength: "Intensite de la colorisation",
submit: "Coloriser",
submitBatch: "Coloriser ({count} fichiers)",
progressLabel: "Colorisation en cours",
progressLabelBatch: "Colorisation de {count} images",
},
"passport-photo": {
country: "Pays",
searchCountries: "Rechercher des pays...",
noCountriesFound: "Aucun pays trouve",
customDimensions: "Dimensions personnalisees",
documentType: "Type de document",
dimensionsMm: "Dimensions (mm)",
dpi: "DPI",
pixelsPerInch: "pixels par pouce",
backgroundColor: "Couleur de fond",
maxFileSize: "Taille de fichier maximale",
noLimit: "Sans limite",
customKb: "Personnalise KB...",
uploadPortrait: "Importez une photo portrait",
uploadHint:
"Deposez ou importez une image dans le panneau de gauche pour previsualiser votre photo d'identite",
analyzingPhoto: "Analyse de la photo",
detectingLandmarks: "Detection des reperes faciaux et suppression de l'arriere-plan...",
generatePassportPhoto: "Generer la photo d'identite",
generating: "Generation en cours...",
downloadPhoto: "Telecharger la photo",
faceCentered: "Visage centre",
headLevel: "Tete droite",
lookingStraight: "Regard face camera",
faceSize: "Taille du visage",
whatYouSee: "Ce que vous voyez est ce que vous telechargez",
dragToAdjust: "Glissez pour ajuster",
scrollToZoom: "Faites defiler pour zoomer",
photoGenerated: "Photo generee. Telechargez-la depuis le panneau de gauche.",
},
"transcribe-audio": {
language: "Langue",
autoDetect: "Detection automatique",
outputFormat: "Format de sortie",
plainText: "Texte brut",
submit: "Transcrire",
submitBatch: "Transcrire ({count} fichiers)",
progressLabel: "Transcription de l'audio",
},
"auto-subtitles": {
language: "Langue",
autoDetect: "Detection automatique",
format: "Format des sous-titres",
submit: "Generer les sous-titres",
submitBatch: "Generer les sous-titres ({count} fichiers)",
progressLabel: "Generation des sous-titres",
},
"transparency-fixer": {
description:
"Importez un PNG avec un faux fond transparent et nous le corrigeons en un clic.",
removeWatermark: "Supprimer le filigrane",
removeWatermarkHelp: "Detecte et supprime les filigranes semi-transparents",
requiresEraser: "Necessite le pack Effaceur d'objets",
advanced: "Avance",
defringe: "Supprimer les franges",
outputFormat: "Format de sortie",
submit: "Corriger la transparence",
submitBatch: "Corriger la transparence ({count} fichiers)",
progressLabel: "Correction de la transparence",
},
"background-replace": {
color: "Couleur de fond",
submit: "Remplacer le fond",
submitBatch: "Remplacer le fond ({count} fichiers)",
progressLabel: "Remplacement du fond",
},
"blur-background": {
intensity: "Intensite du flou",
submit: "Flouter le fond",
submitBatch: "Flouter le fond ({count} fichiers)",
progressLabel: "Floutage du fond",
},
"watermark-text": {
watermarkText: "Texte du filigrane",
fontSize: "Taille de police",
color: "Couleur",
opacity: "Opacite",
position: "Position",
rotation: "Rotation",
center: "Centre",
topLeft: "Haut gauche",
topRight: "Haut droite",
bottomLeft: "Bas gauche",
bottomRight: "Bas droite",
tiled: "Mosaique",
submit: "Ajouter le filigrane",
submitBatch: "Ajouter le filigrane ({count} fichiers)",
progressLabel: "Ajout du filigrane",
},
"watermark-image": {
uploadWatermark: "Importer l'image du filigrane",
position: "Position",
opacity: "Opacite",
scale: "Echelle",
submit: "Appliquer le filigrane",
submitBatch: "Appliquer le filigrane ({count} fichiers)",
},
"text-overlay": {
text: "Texte",
fontSize: "Taille de police",
color: "Couleur",
position: "Position",
top: "Haut",
center: "Centre",
bottom: "Bas",
backgroundBox: "Boite de fond",
backgroundColor: "Couleur de fond",
shadow: "Ombre",
submit: "Ajouter le texte",
submitBatch: "Ajouter le texte ({count} fichiers)",
progressLabel: "Ajout du texte en superposition",
download: "Download",
defaultText: "Your Text Here",
},
compose: {
uploadOverlay: "Importer l'image de superposition",
xPosition: "Position X",
yPosition: "Position Y",
opacity: "Opacite",
blendMode: "Mode de fusion",
submit: "Composer",
},
"meme-generator": {
selectTemplate:
"Selectionnez un modele dans la galerie ou importez votre propre image pour commencer.",
chooseLayout: "Choisissez une disposition de texte pour votre image personnalisee.",
textContent: "Contenu du texte",
textStyle: "Style du texte",
font: "Police",
fontSize: "Taille de police",
textColor: "Couleur du texte",
strokeColor: "Couleur du contour",
allCaps: "MAJUSCULES",
generate: "Generer le Meme",
generating: "Generation en cours...",
downloadMeme: "Telecharger le Meme",
backToGallery: "Retour a la galerie",
},
info: {
loadingInfo: "Chargement des informations...",
filename: "Nom du fichier",
fileSize: "Taille du fichier",
dimensions: "Dimensions",
format: "Format",
channels: "Canaux",
colorSpace: "Espace colorimetrique",
density: "Densite",
bitDepth: "Profondeur de bits",
progressive: "Progressif",
pages: "Pages",
hasAlpha: "Canal alpha",
hasProfile: "Profil",
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: "Importer une seconde image",
similarity: "Similarite : {percent}%",
submit: "Comparer",
downloadDiff: "Telecharger la difference",
},
"find-duplicates": {
preset: "Preset",
exact: "Exact",
similar: "Similaire",
loose: "Large",
exactDesc: "Copies identiques au pixel pres, meme image dans differents formats.",
similarDesc: "Copies redimensionnees, recompressees ou legerement modifiees.",
looseDesc: "Images visuellement liees, recadrages legers, expositions differentes.",
threshold: "Seuil",
submit: "Rechercher les doublons",
scanning: "Analyse en cours...",
},
"color-palette": {
submit: "Extraire la palette",
extracting: "Extraction en cours...",
dominantColors: "Couleurs dominantes",
clickToCopy: "Cliquez pour copier",
},
"qr-generate": {
contentType: "Type de contenu",
url: "URL",
text: "Texte",
wifi: "WiFi",
vcard: "vCard",
email: "Email",
phone: "Telephone",
sms: "SMS",
styling: "Style",
dotStyle: "Style des points",
cornerSquareStyle: "Style du carre d'angle",
cornerDotStyle: "Style du point d'angle",
foregroundColor: "Couleur de premier plan",
bgColor: "Couleur de fond",
logo: "Logo",
downloadFormat: "Format de telechargement",
submit: "Generer le code QR",
download: "Telecharger le code 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: "Scanner les codes-barres",
submitBatch: "Scanner ({count} fichiers)",
scanning: "Analyse en cours...",
noBarcodesFound: "Aucun code-barres trouve",
barcodesFound: "{count} code-barres trouve",
barcodesFoundPlural: "{count} codes-barres trouves",
},
collage: {
template: "Modele",
aspectRatio: "Ratio d'aspect",
gap: "Espacement",
cornerRadius: "Rayon d'angle",
backgroundColor: "Couleur de fond",
outputFormat: "Format de sortie",
quality: "Qualite",
submit: "Creer le collage",
downloadCollage: "Telecharger le collage",
},
stitch: {
direction: "Direction",
horizontal: "Horizontal",
vertical: "Vertical",
grid: "Grille",
gridColumns: "Colonnes de grille",
resizeMode: "Mode de redimensionnement",
fit: "Ajuster",
original: "Original",
stretchMode: "Etirer",
cropMode: "Recadrer",
alignment: "Alignement",
start: "Debut",
center: "Centre",
end: "Fin",
gap: "Espacement",
border: "Bordure",
cornerRadius: "Rayon d'angle",
backgroundColor: "Couleur de fond",
outputFormat: "Format de sortie",
quality: "Qualite",
submit: "Assembler les images",
},
split: {
modeGrid: "Grille",
modeTileSize: "Taille des tuiles",
presets: "Presets",
columns: "Colonnes",
rows: "Lignes",
tileWidth: "Largeur de tuile",
tileHeight: "Hauteur de tuile",
outputFormat: "Format de sortie",
quality: "Qualite",
submit: "Decouper l'image",
downloadAll: "Tout telecharger (ZIP)",
},
border: {
presets: "Presets",
borderWidth: "Largeur de bordure",
borderColor: "Couleur de bordure",
padding: "Marge interieure",
paddingColor: "Couleur de marge",
cornerRadius: "Rayon d'angle",
shadow: "Ombre",
shadowBlur: "Flou de l'ombre",
shadowOffsetX: "Decalage X de l'ombre",
shadowOffsetY: "Decalage Y de l'ombre",
shadowColor: "Couleur de l'ombre",
shadowOpacity: "Opacite de l'ombre",
submit: "Ajouter la bordure",
submitBatch: "Ajouter la bordure ({count} fichiers)",
progressLabel: "Ajout de la bordure",
},
beautify: {
preset: "Preset",
backgroundType: "Type de fond",
solidColor: "Couleur unie",
linearGradient: "Degrade lineaire",
radialGradient: "Degrade radial",
customImage: "Image personnalisee",
gradientAngle: "Angle du degrade",
padding: "Marge interieure",
borderRadius: "Rayon de bordure",
shadowPreset: "Preset d'ombre",
deviceFrame: "Cadre d'appareil",
submit: "Embellir",
submitBatch: "Embellir ({count} fichiers)",
progressLabel: "Embellissement de la capture d'ecran",
},
"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: "Format de sortie",
sizing: "Dimensionnement",
scaleMode: "Echelle",
customMode: "Personnalise",
scalePresets: "Presets d'echelle",
dpiPresets: "Presets de DPI",
customWidth: "Largeur (px)",
customHeight: "Hauteur (px)",
background: "Arriere-plan",
bgTransparent: "Transparent",
bgColor: "Couleur",
quality: "Qualite",
submit: "Convertir le SVG",
submitBatch: "Convertir ({count} fichiers)",
progressLabel: "Conversion du SVG",
},
vectorize: {
preset: "Preset",
logo: "Logo",
illustration: "Illustration",
photo: "Photo",
sketch: "Croquis",
customPreset: "Personnalise",
colorMode: "Mode couleur",
bw: "N&B",
colorModeColor: "Couleur",
threshold: "Seuil",
colorPrecision: "Precision des couleurs",
layerDifference: "Difference de calque",
filterSpeckle: "Filtrer les taches",
pathMode: "Mode de trace",
cornerThreshold: "Seuil d'angle",
invertColors: "Inverser les couleurs",
submit: "Vectoriser",
submitBatch: "Vectoriser ({count} fichiers)",
progressLabel: "Vectorisation en cours",
},
"gif-tools": {
mode: "Mode",
resize: "Redimensionner",
optimize: "Optimiser",
speed: "Vitesse",
reverse: "Inverser",
extract: "Extraire",
rotateMode: "Rotation",
pixel: "Pixel",
percentage: "Pourcentage",
colors: "Couleurs",
dither: "Tramage",
effort: "Effort",
speedFactor: "Facteur de vitesse",
loopControl: "Controle de boucle",
infinite: "Infini",
once: "Une fois",
customLoop: "Personnalise",
loopCount: "Nombre de boucles",
extractSingle: "Unique",
extractRange: "Plage",
extractAll: "Tout",
frameNumber: "Numero d'image",
frameStart: "Image de debut",
frameEnd: "Image de fin",
extractFormat: "Format",
submit: "Traiter le GIF",
submitBatch: "Traiter ({count} fichiers)",
progressLabel: "Traitement du GIF",
},
"image-to-base64": {
outputFormat: "Format de sortie",
keepOriginal: "Conserver l'original",
quality: "Qualite",
maxWidth: "Largeur maximale",
maxHeight: "Hauteur maximale",
submit: "Convertir en Base64",
submitBatch: "Convertir ({count} fichiers)",
copyBase64: "Copier Base64",
copyDataUri: "Copier Data URI",
copyImgTag: "Copier la balise <img>",
copyCssUrl: "Copier 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: "Modele",
fast: "Rapide",
balanced: "Equilibre",
best: "Optimal",
},
"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: "Importer depuis des URLs",
placeholder: "Collez des URLs d'images, une par ligne...",
importButton: "Importer les URLs",
addButton: "Ajouter {count} fichiers",
adding: "Ajout en cours...",
retryButton: "Reessayer",
cancelButton: "Annuler",
readyCount: "{count} prets",
failedStatus: "Echec",
},
comparison: {
original: "Original",
processed: "Traite",
before: "Avant",
after: "Apres",
savings: "Economie",
},
toolPage: {
emptyPrompt: "Deposez ou importez une image pour commencer",
filesCount: "Fichiers ({count})",
addMore: "+ Ajouter",
clearAll: "Tout effacer",
acceptDescription: "Fichiers {exts} uniquement",
notFound: "Outil introuvable",
configureAndGenerate: "Configurez les parametres et generez.",
processingFailed: "Echec du traitement pour ce fichier",
conversionComplete: "Conversion terminee",
cannotPreviewDownload:
"Les fichiers {type} ne peuvent pas etre previsualises dans le navigateur. Utilisez le bouton de telechargement pour enregistrer votre fichier.",
generatingPreview: "Generation de l'apercu...",
cannotPreviewWillProcess:
"Les fichiers {ext} ne peuvent pas etre previsualises dans le navigateur. L'outil traitera ce fichier normalement.",
previousImage: "Image precedente",
nextImage: "Image suivante",
imageCounter: "{current} / {total}",
settingsLabel: "Parametres",
downloadAllZip: "Tout telecharger (ZIP)",
hideSettings: "Masquer les parametres",
imageArea: "Zone d'image",
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",
andMore: "and {count} more",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
original: "Original",
processed: "Processed",
saved: "Saved",
noChange: "no change",
download: "Download",
},
homePage: {
generatingPreview: "Generation de l'apercu...",
loadingPreview: "Chargement de l'apercu...",
changeFile: "Changer de fichier",
quickActions: "Actions rapides",
allTools: "Tous les outils",
searchPlaceholder: "Search {count} tools...",
recent: "Recent",
popular: "Popular",
browseByCategory: "Browse by Category",
gettingStarted: "Getting Started",
noToolsMatch: "No tools match '{query}'",
clearSearch: "Clear search",
all: "All",
documents: "Documents",
data: "Data",
toolCount: "{count} tools",
},
fullscreenGrid: {
searchPlaceholder: "Rechercher des outils...",
hideDetails: "Masquer les details",
showDetails: "Afficher les details",
switchToSidebar: "Passer a la vue barre laterale",
sidebarButton: "Barre laterale",
noToolsFound: "Aucun outil trouve",
tryDifferent: "Essayez un autre terme de recherche",
},
editor: {
menu: {
file: {
label: "Fichier",
new: "Nouveau",
open: "Ouvrir",
save: "Enregistrer",
exportAs: "Exporter sous...",
quickExportPng: "Export rapide en PNG",
close: "Fermer",
},
edit: {
label: "Edition",
undo: "Annuler",
redo: "Retablir",
cut: "Couper",
copy: "Copier",
copyMerged: "Copier avec fusion",
paste: "Coller",
pasteInPlace: "Coller sur place",
delete: "Supprimer",
freeTransform: "Transformation libre",
transform: {
label: "Transformation",
scale: "Echelle",
rotate: "Rotation",
skew: "Inclinaison",
flipHorizontal: "Miroir horizontal",
flipVertical: "Miroir vertical",
},
},
image: {
label: "Image",
imageSize: "Taille de l'image...",
canvasSize: "Taille du canevas...",
rotation: {
label: "Rotation de l'image",
cw90: "90 sens horaire",
ccw90: "90 sens antihoraire",
r180: "180",
flipHorizontal: "Miroir horizontal",
flipVertical: "Miroir vertical",
},
trim: "Rogner",
adjustments: {
label: "Reglages",
brightnessContrast: "Luminosite/Contraste",
hueSaturation: "Teinte/Saturation",
colorBalance: "Balance des couleurs",
levels: "Niveaux",
curves: "Courbes",
},
},
layer: {
label: "Calque",
newLayer: "Nouveau calque",
duplicateLayer: "Dupliquer le calque",
deleteLayer: "Supprimer le calque",
arrange: {
label: "Organiser",
bringToFront: "Mettre au premier plan",
bringForward: "Avancer",
sendBackward: "Reculer",
sendToBack: "Mettre en arriere-plan",
},
mergeDown: "Fusionner vers le bas",
flattenImage: "Aplatir l'image",
},
select: {
label: "Selection",
all: "Tout",
deselect: "Deselectionner",
inverse: "Inverser",
colorRange: "Plage de couleurs...",
},
filter: {
label: "Filtre",
blur: {
label: "Flou",
gaussian: "Flou gaussien",
motion: "Flou de mouvement",
radial: "Flou radial",
surface: "Flou de surface",
},
sharpen: {
label: "Nettete",
sharpen: "Nettete",
unsharpMask: "Masque flou",
},
noise: {
label: "Bruit",
addNoise: "Ajouter du bruit",
reduceNoise: "Reduire le bruit",
},
pixelate: {
label: "Pixelisation",
pixelate: "Pixeliser",
mosaic: "Mosaique",
},
stylize: {
label: "Styliser",
emboss: "Relief",
solarize: "Solariser",
posterize: "Posteriser",
},
grayscale: "Niveaux de gris",
sepia: "Sepia",
invert: "Inverser",
},
view: {
label: "Affichage",
zoomIn: "Zoom avant",
zoomOut: "Zoom arriere",
fitOnScreen: "Ajuster a l'ecran",
actualPixels: "Pixels reels",
rulers: "Regles",
grid: "Grille",
guides: "Reperes",
snap: "Magnetisme",
panels: "Panneaux",
},
},
menuBar: {
backTitle: "Retour a SnapOtter",
},
welcome: {
ariaLabel: "Zone de depot d'image",
heading: "Editeur d'images",
dropDescription: "Deposez une image ici pour commencer",
openImageButton: "Ouvrir une image",
newDocumentButton: "Nouveau document",
pasteHint: "Ou collez depuis le presse-papiers (Ctrl+V)",
},
mobile: {
heading: "Bureau recommande",
description:
"L'editeur d'images fonctionne mieux sur les ecrans de bureau. Veuillez passer a un appareil avec un ecran plus grand pour profiter pleinement de l'experience d'edition.",
},
errors: {
serverDecodeFailed: "Echec du decodage serveur",
},
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: "Parametres",
nav: {
general: "General",
systemSettings: "Parametres systeme",
security: "Securite",
people: "Personnes",
teams: "Equipes",
roles: "Roles",
auditLog: "Journal d'audit",
usage: "Usage",
apiKeys: "Cles API",
aiFeatures: "Fonctionnalites AI",
tools: "Outils",
productAnalytics: "Analytique produit",
about: "A propos",
},
general: {
heading: "General",
description: "Preferences utilisateur et parametres d'affichage.",
loading: "Chargement...",
logOut: "Se deconnecter",
defaultToolViewLabel: "Vue par defaut des outils",
defaultToolViewDescription: "Comment les outils sont affiches sur la page d'accueil",
sidebarOption: "Barre laterale",
fullscreenGridOption: "Grille plein ecran",
appVersionLabel: "Version de l'application",
appVersionDescription: "Version actuelle de SnapOtter",
saveButton: "Enregistrer les parametres",
saveSuccess: "Parametres enregistres.",
saveFailed: "Echec de l'enregistrement des parametres.",
},
system: {
heading: "Parametres systeme",
description: "Configuration cote serveur et limites.",
fileUploadLimitLabel: "Limite d'import de fichier (MB)",
fileUploadLimitDescription: "Taille maximale de fichier par import",
defaultThemeLabel: "Theme par defaut",
defaultThemeDescription: "Theme applique pour les nouvelles sessions",
lightOption: "Clair",
darkOption: "Sombre",
systemOption: "Systeme",
languageLabel: "Langue",
languageDescription: "Langue de l'interface",
loginAttemptLimitLabel: "Limite de tentatives de connexion",
loginAttemptLimitDescription:
"Nombre maximal de tentatives de connexion echouees par minute avant verrouillage",
fileManagementHeading: "Gestion des fichiers",
maxFileAgeLabel: "Age maximal des fichiers (heures)",
maxFileAgeDescription:
"Duree de conservation des fichiers traites avant nettoyage automatique",
startupCleanupLabel: "Nettoyage au demarrage",
startupCleanupDescription: "Nettoie les anciens fichiers temporaires au demarrage du serveur",
saveButton: "Enregistrer les parametres",
saveSuccess: "Parametres enregistres.",
saveFailed: "Echec de l'enregistrement des parametres.",
limitsAndResources: "Limites et ressources",
maxFileSize: "Taille de fichier maximale",
maxBatchSize: "Taille de lot maximale",
concurrentJobs: "Taches simultanees",
workerThreads: "Fils d'execution",
maxPipelineSteps: "Etapes Pipeline maximales",
processingTimeout: "Delai de traitement",
rateLimitPerMin: "Limite de requetes (req/min)",
unlimited: "Illimite",
auto: "Automatique",
envOverride: "Defini par variable d'environnement",
maxCanvasPixels: "Pixels de canevas maximaux",
maxSvgSize: "Taille SVG maximale",
maxSplitGrid: "Grille de decoupage maximale",
maxPdfPages: "Pages PDF maximales",
sessionDuration: "Duree de la session",
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: "Securite",
description: "Parametres de mot de passe et d'authentification.",
changePasswordHeading: "Changer le mot de passe",
currentPasswordPlaceholder: "Mot de passe actuel",
newPasswordPlaceholder: "Nouveau mot de passe",
confirmPasswordPlaceholder: "Confirmer le nouveau mot de passe",
passwordsMismatch: "Les mots de passe ne correspondent pas",
passwordTooShort: "Le mot de passe doit contenir au moins 4 caracteres",
changeSuccess: "Mot de passe modifie avec succes",
changeFailed: "Echec de la modification du mot de passe",
currentPasswordIncorrect: "Le mot de passe actuel est incorrect",
changePasswordButton: "Changer le mot de passe",
loginAttemptLimitNote:
"Les limites de tentatives de connexion peuvent etre configurees dans les Parametres systeme.",
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: "Personnes",
description: "Gerez les membres de l'espace de travail et leurs permissions",
userCount: "{count} utilisateur",
userCountPlural: "{count} utilisateurs",
searchPlaceholder: "Rechercher des membres...",
addMembersButton: "Ajouter des membres",
newMemberHeading: "Nouveau membre",
usernamePlaceholder: "Nom d'utilisateur",
passwordPlaceholder: "Mot de passe",
roleUserOption: "Utilisateur",
roleEditorOption: "Editeur",
roleAdminOption: "Admin",
roleUserDescription: "Acces basique aux outils",
roleEditorDescription: "Tous les fichiers et pipelines",
roleAdminDescription: "Acces complet",
noDescription: "Aucune description",
defaultTeamOption: "Par defaut",
createButton: "Creer",
cancelButton: "Annuler",
createSuccess: "Utilisateur cree avec succes",
createFailed: "Echec de la creation de l'utilisateur",
userLimitReached: "Limite d'utilisateurs atteinte ({max} maximum)",
deleteConfirm: 'Supprimer l\'utilisateur "{username}" ? Cette action est irreversible.',
deleteSuccess: 'Utilisateur "{username}" supprime',
deleteFailed: "Echec de la suppression de l'utilisateur",
editHeading: "Modifier {username}",
updateSuccess: "Utilisateur mis a jour",
updateFailed: "Echec de la mise a jour de l'utilisateur",
cannotRemoveOwnAdmin: "Vous ne pouvez pas supprimer votre propre role administrateur",
resetPasswordHeading: "Reinitialiser le mot de passe de {username}",
newPasswordLabel: "Nouveau mot de passe (min. 8 caracteres)",
resetPasswordButton: "Reinitialiser le mot de passe",
resetPasswordWarning: "Cela invalidera toutes les sessions et cles API de cet utilisateur.",
resetSuccess: "Mot de passe reinitialise avec succes",
resetFailed: "Echec de la reinitialisation du mot de passe",
tableHeaderUser: "Utilisateur",
tableHeaderRole: "Role",
tableHeaderTeam: "Equipe",
noSearchResults: "Aucun membre ne correspond a votre recherche.",
noUsersFound: "Aucun utilisateur trouve.",
authBadgeLocalOidc: "Local + OIDC",
authBadgeOidc: "OIDC",
editRoleTeamAction: "Modifier le role / l'equipe",
resetPasswordAction: "Reinitialiser le mot de passe",
deleteUserAction: "Supprimer l'utilisateur",
saveButton: "Enregistrer",
copyPasswordButton: "Copier le mot de passe",
passwordCopied: "Copie !",
copyPasswordWarning:
"Copiez ce mot de passe maintenant. Vous ne pourrez plus le voir apres la creation de l'utilisateur.",
},
teams: {
heading: "Equipes",
description: "Organisez les membres en equipes pour une meilleure gestion.",
createButton: "Creer une nouvelle equipe",
newTeamHeading: "Nouvelle equipe",
teamNamePlaceholder: "Nom de l'equipe",
createSubmitButton: "Creer",
cancelButton: "Annuler",
createSuccess: "Equipe creee avec succes",
createFailed: "Echec de la creation de l'equipe",
duplicateTeamError: "Une equipe avec ce nom existe deja",
renameSuccess: "Equipe renommee",
renameFailed: "Echec du renommage de l'equipe",
deleteConfirm: 'Supprimer l\'equipe "{name}" ? Les membres seront desaffectes.',
deleteSuccess: 'Equipe "{name}" supprimee',
deleteFailed: "Echec de la suppression de l'equipe",
cannotDeleteDefault:
"Impossible de supprimer l'equipe par defaut ou une equipe avec des membres",
tableHeaderTeamName: "Nom de l'equipe",
tableHeaderMembers: "Membres",
emptyState: "Aucune equipe trouvee.",
renameSaveButton: "Enregistrer",
renameCancelButton: "Annuler",
renameAction: "Renommer",
deleteAction: "Supprimer",
totalMembers: "Nombre total de membres",
nameRequired: "Le nom de l'equipe est requis",
nameTooLong: "Le nom de l'equipe doit contenir 50 caracteres ou moins",
duplicateName: "Une equipe avec ce nom existe deja",
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: "Roles",
description:
"Gerez les roles et leurs permissions. Les roles predefinies ne peuvent pas etre modifies.",
createButton: "Creer un role personnalise",
newRoleHeading: "Nouveau role",
roleNamePlaceholder: "Nom du role",
descriptionPlaceholder: "Description (optionnel)",
permissionsLabel: "Permissions",
createSubmitButton: "Creer",
cancelButton: "Annuler",
createSuccess: "Role cree avec succes",
createFailed: "Echec de la creation du role",
duplicateRoleError: "Un role avec ce nom existe deja",
editHeading: "Modifier le role : {name}",
editSaveButton: "Enregistrer",
editCancelButton: "Annuler",
updateSuccess: "Role mis a jour",
updateFailed: "Echec de la mise a jour du role",
deleteConfirm: 'Supprimer le role "{name}" ? {count} utilisateur(s) devront etre reassignes.',
deleteConfirmSimple: 'Supprimer le role "{name}" ?',
deleteSuccess: 'Role "{name}" supprime',
deleteFailed: "Echec de la suppression du role",
emptyState: "Aucun role trouve.",
builtInBadge: "Predefini",
userCountBadge: "{count} utilisateur(s)",
editRoleTitle: "Modifier le role",
deleteRoleTitle: "Supprimer le role",
permGroup: {
tools: "Outils",
files: "Fichiers",
apiKeys: "Cles API",
pipelines: "Pipelines",
settings: "Parametres",
users: "Utilisateurs",
teams: "Equipes",
system: "Systeme",
},
},
auditLog: {
heading: "Journal d'audit",
allActionsFilter: "Toutes les actions",
emptyState: "Aucune entree dans le journal d'audit.",
tableHeaderTime: "Heure",
tableHeaderUser: "Utilisateur",
tableHeaderAction: "Action",
tableHeaderTarget: "Cible",
paginationInfo: "Page {page} sur {totalPages} ({total} entrees)",
previousButton: "Precedent",
nextButton: "Suivant",
justNow: "a l'instant",
minutesAgo: "il y a {mins}min",
hoursAgo: "il y a {hrs}h",
daysAgo: "il y a {days}j",
},
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: "Cles API",
description: "Gerez les cles API pour l'acces programmatique a SnapOtter.",
keyNamePlaceholder: "Nom de la cle (optionnel)",
generateButton: "Generer une cle API",
removeScopingLabel: "Supprimer la restriction de permissions",
restrictPermissionsLabel: "Restreindre les permissions (optionnel)",
expiresLabel: "Expire :",
clearButton: "Effacer",
copyTitle: "Copier",
keyWarning: "Conservez cette cle en lieu sur. Elle ne sera plus affichee.",
existingKeysHeading: "Cles existantes",
createdPrefix: "Creee le {date}",
scopedPrefix: "Portee :",
expiresPrefix: "Expire le {date}",
deleteKeyTitle: "Supprimer la cle",
deleteConfirm:
"Supprimer cette cle API ? Les integrations qui l'utilisent cesseront de fonctionner.",
emptyState: "Aucune cle API pour le moment. Generez-en une pour commencer.",
},
tools: {
heading: "Outils",
description:
"Activez ou desactivez les outils individuellement. Les outils desactives sont masques pour tous les utilisateurs.",
restartBanner: "Un redemarrage est necessaire pour appliquer les modifications.",
searchPlaceholder: "Rechercher des outils...",
noSearchResults: "Aucun outil ne correspond a votre recherche.",
loadFailedError:
"Echec du chargement des parametres d'outils. L'enregistrement est desactive pour eviter toute perte de donnees.",
saveButton: "Enregistrer les parametres d'outils",
disabledCount: "{count} outil(s) desactive(s)",
},
experimental: {
label: "Activer les outils experimentaux",
description: "Affiche les outils encore en developpement. Ils peuvent etre instables.",
},
fileManagement: {
title: "Gestion des fichiers",
maxAge: "Age maximal des fichiers (heures)",
maxAgeDescription: "Duree de conservation des fichiers traites avant nettoyage automatique",
startupCleanup: "Nettoyage au demarrage",
startupCleanupDescription: "Nettoie les anciens fichiers temporaires au demarrage du serveur",
},
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: "Analytique produit",
description: "Partagez des donnees d'utilisation anonymes pour aider a ameliorer SnapOtter.",
privacyNote: "Vos images ne quittent jamais votre machine.",
disabledByAdmin: "L'analytique produit a ete desactivee par l'administrateur du serveur.",
enabledLabel: "Analytique activee",
disabledLabel: "Analytique desactivee",
learnMore: "En savoir plus",
},
aiFeatures: {
title: "AI Features",
description: "Manage AI model bundles for advanced image processing.",
installAll: "Install All",
diskUsage: "Disk usage:",
installed: "Installed",
notInstalled: "Not installed",
queued: "Queued",
install: "Install",
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "A propos",
appName: "SnapOtter",
appDescription:
"Une suite de traitement d'images auto-hebergee, axee sur la confidentialite, avec 70+ outils. Redimensionnez, compressez, convertissez, ajoutez des filigranes et automatisez vos flux de travail sans envoyer de donnees vers le cloud.",
versionLabel: "Version :",
linksHeading: "Liens",
githubLink: "Depot GitHub",
docsLink: "Documentation",
apiRefLink: "Reference API (Swagger)",
licenseLabel: "License:",
licenseDescription:
"SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3).",
},
},
auth: {
login: "Connexion",
logout: "Se deconnecter",
username: "Nom d'utilisateur",
password: "Mot de passe",
loginButton: "Se connecter",
loggingIn: "Connexion en cours...",
invalidCredentials: "Nom d'utilisateur ou mot de passe invalide",
connectionError: "Erreur de connexion",
signInWith: "Se connecter avec {provider}",
signInWithSso: "Se connecter avec SSO",
or: "ou",
methodLocal: "Local",
methodOidc: "OIDC",
methodBoth: "Local + OIDC",
oidcAuthFailed: "L'authentification a echoue. Veuillez reessayer.",
oidcProviderUnreachable:
"Impossible de joindre le fournisseur d'identite. Veuillez reessayer plus tard.",
oidcSessionExpired: "La session de connexion a expire. Veuillez reessayer.",
oidcUserNotAuthorized:
"Votre compte n'est pas autorise a acceder a cette application. Contactez votre administrateur.",
oidcUserLimitReached: "Limite d'utilisateurs atteinte. Contactez votre administrateur.",
oidcGenericError: "Erreur d'authentification. Veuillez reessayer.",
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:
"Les modifications de mot de passe sont gerees par votre fournisseur d'identite.",
enterUsername: "Saisissez votre nom d'utilisateur",
enterPassword: "Saisissez votre mot de passe",
heroTitle: "Vos images. Restent les votres.",
heroSubtitle: "Tous les outils image dont vous avez besoin.",
rotatingPhrases: [
"Aucune inscription. Aucun compte.",
"Aucun envoi vers le cloud. Jamais.",
"Traitement 100% local.",
"Gratuit. Pour toujours.",
"Sans limites. Sans plafonds caches.",
"Fonctionne entierement hors ligne.",
"Traitement par lot illimite.",
"70+ outils image.",
"15 modeles AI. Votre materiel.",
"Ultra rapide. Propulse par Sharp.",
"Pret pour les reseaux isoles.",
"Un seul conteneur Docker.",
"Open source. Toujours.",
"Chaque pixel reste sur votre materiel.",
"Votre serveur. Vos regles.",
"Se deploie en un seul docker pull.",
"L'alternative auto-hebergee.",
"Redimensionnez, compressez, convertissez. Localement.",
"Editeur d'images gratuit. Sans filigrane.",
"Traitement d'images par lot. Illimite.",
"Supprimez les arriere-plans hors ligne.",
"Alternative auto-hebergee a Canva.",
"Aucune cle API necessaire.",
"Conforme au RGPD par conception.",
"Fonctionne sans internet.",
],
},
changePassword: {
title: "Changez votre mot de passe",
description:
"Vous devez definir un nouveau mot de passe avant de continuer. Votre mot de passe doit contenir au moins 8 caracteres avec des majuscules, des minuscules et un chiffre.",
usernameLabel: "Nom d'utilisateur",
currentPasswordLabel: "Mot de passe actuel",
currentPasswordPlaceholder: "Saisissez le mot de passe actuel",
newPasswordLabel: "Nouveau mot de passe",
generateButton: "Generer un mot de passe fort",
newPasswordPlaceholder: "Au moins 8 caracteres",
confirmPasswordLabel: "Confirmer le nouveau mot de passe",
confirmPasswordPlaceholder: "Repetez le nouveau mot de passe",
passwordsMismatch: "Les mots de passe ne correspondent pas",
failedError: "Echec du changement de mot de passe",
connectionError: "Erreur de connexion",
changingButton: "Modification en cours...",
changeButton: "Changer le mot de passe",
sidebarTitle: "Presque fini",
sidebarDescription:
"Definissez un mot de passe fort pour securiser votre compte, puis vous serez pret.",
},
automate: {
title: "Automatiser",
invalidPipelineFile: "Ce n'est pas un fichier Pipeline SnapOtter valide",
newerVersion: "Ce Pipeline a ete cree avec une version plus recente de SnapOtter",
missingName: "Le fichier Pipeline n'a pas de nom",
noSteps: "Le fichier Pipeline n'a aucune etape",
importFailed: "Echec de l'importation",
couldNotRead: "Impossible de lire le fichier Pipeline",
fileCount: "{count} fichier",
fileCountPlural: "{count} fichiers",
importFromLibrary: "Importer depuis la bibliotheque",
addButton: "+ Ajouter",
libraryButton: "Bibliotheque",
clearButton: "Effacer",
processingFailed: "Echec du traitement pour ce fichier",
processingMultiple: "Traitement de {count} fichiers...",
processingPipeline: "Traitement du Pipeline...",
processButton: "Traiter",
processButtonMultiple: "Traiter ({count})",
processAllButton: "Tout traiter ({count})",
addTool: "Ajouter un outil",
toolPalette: "Palette d'outils",
clickToAdd: "Cliquez pour ajouter au Pipeline",
savedLabel: "Enregistre",
importButton: "Importer",
noSavedPipelines: "Aucun Pipeline enregistre",
stepCount: "({count} etape)",
stepCountPlural: "({count} etapes)",
exportPipeline: "Exporter le Pipeline",
deletePipeline: "Supprimer le Pipeline",
moreCount: "+{count} de plus",
pipelineBuilder: "Constructeur de Pipeline",
addToolsPrompt: "Ajoutez des outils depuis la palette pour commencer",
stepsConfigured: "{count} etape configuree",
stepsConfiguredPlural: "{count} etapes configurees",
noFilesLoaded: "Aucun fichier charge",
downloadZip: "Telecharger le ZIP",
saveButton: "Enregistrer",
pipelineNamePlaceholder: "Nom du Pipeline",
descriptionPlaceholder: "Description",
savingIndicator: "...",
cancelButton: "Annuler",
preview: "Apercu",
previousImage: "Image precedente",
nextImage: "Image suivante",
imageCounter: "{current} / {total}",
imageArea: "Zone d'image",
templateSocialMedia: "Pret pour les reseaux sociaux",
templatePrivacyClean: "Nettoyage de confidentialite",
templateWebOptimization: "Optimisation web",
templateProfilePicture: "Photo de profil",
templateWatermarkBatch: "Lot de filigranes",
createNew: "Creer une nouvelle automatisation",
savedAutomations: "Automatisations enregistrees",
templates: "Modeles",
addStep: "Ajouter une etape",
removeStep: "Supprimer",
moveUp: "Monter",
moveDown: "Descendre",
savePipeline: "Enregistrer le Pipeline",
runPipeline: "Traiter",
pipelineName: "Nom du Pipeline",
pipelineDescription: "Description (optionnel)",
noStepsPrompt: "Ajoutez des etapes pour construire votre automatisation",
noStepsHeading: "No steps yet",
searchToolsPlaceholder: "Search tools...",
step: "Etape",
},
nav: {
tools: "Outils",
reader: "Lecteur",
automate: "Automatiser",
editor: "Editeur",
files: "Fichiers",
help: "Aide",
settings: "Parametres",
grid: "Grille",
},
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",
openInPipeline: "Open in Pipeline",
name: "Name",
format: "Format",
size: "Size",
dimensions: "Dimensions",
version: "Version",
toolsUsed: "Tools Used",
none: "None",
delete: "Delete",
pipeline: "Pipeline",
download: "Download",
},
dropzone: {
unsupportedFileType: "Ce type de fichier n'est pas pris en charge par cet outil",
urlFetchFailed: "Impossible de recuperer l'image depuis l'URL",
ariaLabel: "Zone de depot de fichiers",
dropPrompt: "Deposez vos images ici",
browseOrPaste: "cliquez n'importe ou pour parcourir, ou collez depuis le presse-papiers",
uploadButton: "Importer",
defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD et plus de 65 formats",
orSeparator: "ou",
urlPlaceholder: "Collez l'URL de l'image...",
urlLoadingIndicator: "...",
addUrlButton: "Ajouter",
importMultipleUrls: "Importer plusieurs URLs...",
filesSelected: "{count} fichiers selectionnes",
dropToAdd: "Deposer pour ajouter des fichiers",
dropToReplace: "Deposer pour remplacer le fichier",
},
reviewPanel: {
processedResultAlt: "Resultat traite",
sizeLabel: "Taille : {size}",
typeLabel: "Type : {type}",
processedLabel: "Traite : {time}",
undoButton: "Annuler",
downloadButton: "Telecharger",
openInEditor: "Ouvrir dans l'editeur",
reviewHeading: "Verification",
continueEditing: "Continuer l'edition",
},
features: {
notEnabledTitle: "Fonctionnalite non activee",
notEnabledDescription:
"Cette fonctionnalite n'est pas activee. Demandez a votre administrateur de l'activer dans les Parametres.",
requiresDownload: "Cette fonctionnalite necessite un telechargement supplementaire (~{size})",
retryButton: "Reessayer",
queued: "En file d'attente pour l'installation...",
enableButton: "Activer {name}",
repairRequired: "Repair Required",
repairDescription: "Some model files are missing or corrupted. Repair will re-download them.",
repairButton: "Repair {name}",
lessThanMinute: "Moins d'une minute restante",
oneMinuteLeft: "~1 minute restante",
minutesLeft: "~{mins} minutes restantes",
progressMessages: [
"Presque fini... sans doute...",
"Les bonnes choses prennent du temps...",
"Toujours plus rapide que de regarder secher la peinture...",
"Votre patience est vraiment admirable...",
"Ca travaille dur dans les coulisses...",
"C'est la partie passionnante, faites-nous confiance...",
"Des operations importantes en arriere-plan...",
"Si vous lisez ceci, ca fonctionne...",
"Preparation de quelque chose de genial...",
"Ca vaut chaque seconde, promis...",
"Le suspense fait partie de l'experience...",
"On apprend de nouveaux tours a votre ordinateur...",
"Configuration de vos super-pouvoirs...",
"Vos images vous remercieront plus tard...",
"Chargement... mais avec du style...",
"Le moment ideal pour un cafe...",
"Rome ne s'est pas faite en un jour non plus...",
"Chut... un genie au travail...",
"Vos photos vont etre jalouses de ce qui arrive...",
"On rassemble l'equipe de choc...",
"Deballage de merveilles...",
"On a presque fini de penser a commencer... on plaisante...",
"Retournement de situation : ca fait vraiment quelque chose...",
"Prechauffage des moteurs creatifs...",
"Chargement de l'imagination...",
"Ce n'est pas un ecran de veille, promis...",
"Le grand art prend du temps a s'installer...",
"Votre futur vous vous remerciera...",
"Recuperation de fichiers tres intelligents...",
"Tenez bon, le meilleur reste a venir...",
],
},
help: {
heading: "Aide",
gettingStarted: {
heading: "Pour commencer",
description:
"Selectionnez un outil dans la barre laterale ou recherchez-en un. Importez une image en la faisant glisser sur la page ou en cliquant sur la zone d'import. Ajustez les parametres et telechargez votre resultat.",
},
keyboardShortcuts: {
heading: "Raccourcis clavier",
focusSearchBar: "Focus sur la barre de recherche",
goToTools: "Aller aux outils",
toggleTheme: "Changer de theme",
goToResize: "Aller a Redimensionner",
goToCrop: "Aller a Recadrer",
goToCompress: "Aller a Compresser",
goToConvert: "Aller a Convertir",
goToRemoveBackground: "Aller a Supprimer l'arriere-plan",
goToWatermarkText: "Aller au Filigrane texte",
goToStripMetadata: "Aller a Supprimer les metadonnees",
goToImageInfo: "Aller a Info image",
},
resources: {
heading: "Ressources",
githubLink: "Depot GitHub",
reportIssueLink: "Signaler un probleme",
docsLink: "Documentation",
apiRefLink: "Reference API (Swagger)",
},
versionLabel: "SnapOtter v{version}",
},
errors: {
generic: "Une erreur est survenue",
offline: "Vous etes hors ligne",
reconnecting: "Reconnexion au serveur...",
connected: "Connecte",
processingFailed: "Echec du traitement pour ce fichier",
timeout: "Delai d'attente depasse. Le serveur est peut-etre surcharge. Veuillez reessayer.",
networkError: "Erreur reseau. Verifiez votre connexion.",
invalidCredentials: "Nom d'utilisateur ou mot de passe invalide",
connectionError: "Erreur de connexion",
},
analytics: {
consentTitle: "Aidez a ameliorer SnapOtter",
consentDescription:
"Les statistiques d'utilisation anonymes nous aident a corriger les bugs et a creer les outils dont vous avez vraiment besoin. Vos images et fichiers restent sur votre machine.",
consentChangeable: "Vous pouvez desactiver cela a tout moment dans les Parametres.",
acceptButton: "Bien sur, ca me va",
declineButton: "Pas maintenant",
settingsTitle: "Analytique produit",
settingsDescription:
"Partagez des donnees d'utilisation anonymes pour aider a ameliorer SnapOtter.",
settingsPrivacy: "Vos images ne quittent jamais votre machine.",
settingsDisabledByAdmin:
"L'analytique produit a ete desactivee par l'administrateur du serveur.",
learnMore: "En savoir plus",
},
sidebar: {
tools: "Outils",
grid: "Grille",
automate: "Automatiser",
editor: "Editeur",
files: "Fichiers",
help: "Aide",
settings: "Parametres",
},
toolCard: {
addToFavourites: "Ajouter aux favoris",
},
appLayout: {
mobileNavTools: "Outils",
mobileNavAutomate: "Automatiser",
mobileNavEditor: "Editeur",
mobileNavFiles: "Fichiers",
mobileNavSettings: "Parametres",
},
a11y: {
skipToContent: "Skip to main content",
openSidebar: "Open sidebar",
closeSidebar: "Close sidebar",
closeSettings: "Close settings",
closeHelp: "Close help",
closeDialog: "Close dialog",
zoomIn: "Zoom in",
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
blackBackground: "Black background",
expandPanel: "Expand panel",
collapsePanel: "Collapse panel",
swapDimensions: "Swap dimensions",
applyCrop: "Apply crop",
cancelCrop: "Cancel crop",
fontFamily: "Font family",
textColor: "Text color",
flipHorizontal: "Flip horizontal",
flipVertical: "Flip vertical",
hexColorValue: "Hex color value",
backgroundColor: "Background color",
foregroundColor: "Foreground color",
swapColors: "Swap foreground and background colors",
resetColors: "Reset to default black and white",
foregroundHex: "Foreground color hex value",
undo: "Undo",
redo: "Redo",
layers: "Layers",
addLayer: "Add layer",
deleteLayer: "Delete layer",
cancelOperation: "Cancel operation",
fill: "Fill",
fileDetails: "File details",
language: "Language",
selected: "Selected",
deleteKey: "Delete key",
editRole: "Edit role",
deleteRole: "Delete role",
notInstalled: "Not installed",
queued: "Queued for install",
installing: "Installing",
imageNOfTotal: "Image {n} of {total}",
processingComplete: "Image processed successfully",
processingFailed: "Processing failed",
settingsDialog: "Settings",
helpDialog: "Help",
navigationMenu: "Navigation",
},
} as const;