2026-05-15 17:02:49 +08:00
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" ,
2026-06-05 22:31:28 +08:00
pageNotFound : "Page not found" ,
2026-06-06 20:47:08 +08:00
pageNotFoundDescription : "The page you are looking for does not exist or has been moved." ,
},
2026-05-15 17:02:49 +08:00
categories : {
essentials : "Essentiels" ,
optimization : "Optimisation" ,
adjustments : "Reglages" ,
watermark : "Filigrane et superposition" ,
utilities : "Utilitaires" ,
layout : "Mise en page et composition" ,
format : "Format et conversion" ,
2026-06-13 10:18:49 +08:00
video : "Video" ,
audio : "Audio" ,
documents : "PDF & Documents" ,
data : "Data Files" ,
2026-05-15 17:02:49 +08:00
ai : "Outils AI" ,
},
2026-06-13 10:18:39 +08:00
modalities : {
image : "Image" ,
video : "Video" ,
audio : "Audio" ,
documentsAndFiles : "Documents & Files" ,
},
2026-05-15 17:02:49 +08:00
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" ,
},
2026-06-13 10:19:23 +08:00
"ocr-pdf" : {
name : "OCR de PDF" ,
description : "Extrayez du texte de documents PDF avec OCR alimente par l'IA" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-13 10:19:23 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"transparency-fixer" : {
name : "Correcteur de transparence PNG" ,
description : "Corrigez les PNG a fausse transparence en un clic" ,
},
2026-06-13 10:19:23 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-06 20:47:08 +08:00
"html-to-image" : {
name : "HTML to Image" ,
description : "Capture webpages as high-quality images" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-13 10:19:16 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-13 10:19:16 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:00 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:06 +08:00
"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)" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"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." ,
},
2026-06-13 10:18:49 +08:00
"word-to-pdf" : {
name : "Word to PDF" ,
description : "Convert Word documents to PDF" ,
},
2026-06-13 10:18:55 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"powerpoint-to-pdf" : {
name : "PowerPoint to PDF" ,
description : "Convert presentations to PDF" ,
},
2026-06-13 10:18:55 +08:00
"html-to-pdf" : {
name : "HTML to PDF" ,
description : "Convert an HTML file to PDF. Remote resources are disabled for privacy." ,
},
2026-06-13 10:19:11 +08:00
"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." ,
},
2026-06-13 10:18:55 +08:00
"markdown-to-pdf" : {
name : "Markdown to PDF" ,
description :
"Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy." ,
},
2026-06-13 10:19:11 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"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." ,
},
2026-05-15 17:02:49 +08:00
pipeline : {
name : "Constructeur de Pipeline" ,
description : "Enchainez plusieurs outils dans un flux de travail" ,
},
2026-06-13 10:17:13 +08:00
processing : { canceled : "Processing canceled" },
2026-06-13 10:18:39 +08:00
mediaPlayer : {
unsupported : "Your browser does not support this media format." ,
},
documentView : {
loadFailed : "Failed to load document." ,
previousPage : "Previous page" ,
nextPage : "Next page" ,
},
2026-05-15 17:02:49 +08:00
},
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" ,
2026-06-05 23:14:57 +08:00
outputFormat : "Output Format" ,
edgeSmoothing : "Edge Smoothing" ,
edgeSmoothingOff : "Off" ,
edgeSmoothingLight : "Light" ,
edgeSmoothingMedium : "Medium" ,
edgeSmoothingStrong : "Strong" ,
colorDecontamination : "Color Decontamination" ,
2026-05-15 17:02:49 +08:00
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" ,
},
2026-06-13 10:19:23 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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." ,
},
2026-06-13 10:19:23 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-13 10:19:23 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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" ,
2026-06-07 18:27:09 +08:00
download : "Download" ,
defaultText : "Your Text Here" ,
2026-05-15 17:02:49 +08:00
},
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" ,
2026-06-07 18:27:09 +08:00
readInfo : "Read Info" ,
reading : "Reading..." ,
channelStats : "Channel Stats" ,
yes : "Yes" ,
no : "No" ,
na : "N/A" ,
failedToRead : "Failed to read info" ,
2026-05-15 17:02:49 +08:00
},
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" ,
},
2026-06-06 20:47:08 +08:00
"html-to-image" : {
2026-06-06 21:31:05 +08:00
modeUrl : "URL" ,
modeHtml : "HTML File" ,
htmlFile : "HTML File" ,
2026-06-06 20:47:08 +08:00
url : "URL" ,
2026-06-06 21:29:06 +08:00
urlPlaceholder : "https://snapotter.com" ,
2026-06-06 20:47:08 +08:00
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" ,
},
},
2026-05-15 17:02:49 +08:00
"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" ,
},
2026-06-13 10:19:16 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"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()" ,
},
2026-06-13 10:19:16 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
"enhance-faces-standalone" : {
model : "Modele" ,
fast : "Rapide" ,
balanced : "Equilibre" ,
best : "Optimal" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:00 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:06 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"word-to-pdf" : {
submit : "Convert to PDF" ,
submitBatch : "Convert ({count} files)" ,
progressLabel : "Converting" ,
},
2026-06-13 10:18:55 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"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" ,
},
2026-06-13 10:18:55 +08:00
"markdown-to-pdf" : {
hint : "Remote resources are disabled for privacy." ,
submit : "Convert to PDF" ,
submitBatch : "Convert to PDF ({count} files)" ,
progressLabel : "Converting" ,
},
2026-06-13 10:19:11 +08:00
"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" ,
},
2026-06-13 10:18:49 +08:00
"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" ,
},
2026-06-13 10:19:11 +08:00
"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" ,
},
2026-05-15 17:02:49 +08:00
},
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" ,
},
homePage : {
generatingPreview : "Generation de l'apercu..." ,
loadingPreview : "Chargement de l'apercu..." ,
changeFile : "Changer de fichier" ,
quickActions : "Actions rapides" ,
allTools : "Tous les outils" ,
},
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" ,
},
2026-06-05 16:40:57 +08:00
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" ,
},
2026-05-15 17:02:49 +08:00
},
settings : {
heading : "Parametres" ,
nav : {
general : "General" ,
systemSettings : "Parametres systeme" ,
security : "Securite" ,
people : "Personnes" ,
teams : "Equipes" ,
roles : "Roles" ,
auditLog : "Journal d'audit" ,
2026-06-13 10:17:13 +08:00
usage : "Usage" ,
2026-05-15 17:02:49 +08:00
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" ,
2026-06-13 10:17:13 +08:00
supportBundleButton : "Download Support Bundle" ,
supportBundleDescription :
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting." ,
supportBundleFailed : "Failed to download support bundle." ,
2026-05-15 17:02:49 +08:00
},
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." ,
},
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" ,
2026-05-16 23:08:19 +08:00
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." ,
2026-05-15 17:02:49 +08:00
},
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" ,
},
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" ,
},
2026-06-13 10:17:13 +08:00
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)" ,
},
2026-05-15 17:02:49 +08:00
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" ,
},
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..." ,
2026-06-13 10:17:13 +08:00
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}" ,
2026-05-15 17:02:49 +08:00
},
about : {
heading : "A propos" ,
appName : "SnapOtter" ,
appDescription :
2026-06-13 10:18:49 +08:00
"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." ,
2026-05-15 17:02:49 +08:00
versionLabel : "Version :" ,
linksHeading : "Liens" ,
githubLink : "Depot GitHub" ,
docsLink : "Documentation" ,
apiRefLink : "Reference API (Swagger)" ,
2026-06-05 22:31:28 +08:00
licenseLabel : "License:" ,
2026-06-05 23:14:57 +08:00
licenseDescription :
"SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3)." ,
2026-05-15 17:02:49 +08:00
},
},
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." ,
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." ,
2026-06-13 10:18:49 +08:00
"70+ outils image." ,
2026-05-15 17:02:49 +08:00
"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" ,
2026-06-06 20:47:08 +08:00
noStepsHeading : "No steps yet" ,
2026-06-05 22:31:28 +08:00
searchToolsPlaceholder : "Search tools..." ,
2026-06-06 20:47:08 +08:00
step : "Etape" ,
2026-05-15 17:02:49 +08:00
},
nav : {
tools : "Outils" ,
reader : "Lecteur" ,
automate : "Automatiser" ,
editor : "Editeur" ,
files : "Fichiers" ,
help : "Aide" ,
settings : "Parametres" ,
grid : "Grille" ,
},
files : {
2026-06-05 22:31:28 +08:00
myFiles : "My Files" ,
2026-06-05 23:14:57 +08:00
recentTab : "Recent" ,
uploadTab : "Upload Files" ,
fileDetailsAriaLabel : "File Details" ,
fileDetailsHeading : "File Details" ,
2026-06-05 22:31:28 +08:00
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" ,
2026-05-15 17:02:49 +08:00
},
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" ,
},
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}" ,
2026-06-09 23:09:34 +08:00
repairRequired : "Repair Required" ,
repairDescription : "Some model files are missing or corrupted. Repair will re-download them." ,
repairButton : "Repair {name}" ,
2026-05-15 17:02:49 +08:00
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" ,
},
2026-06-07 21:48:08 +08:00
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" ,
},
2026-05-15 17:02:49 +08:00
} as const ;