diff --git a/pkg/api/locale.go b/pkg/api/locale.go
index 9d8593d7c..e29ffb9ef 100644
--- a/pkg/api/locale.go
+++ b/pkg/api/locale.go
@@ -13,6 +13,7 @@ var matcher = language.NewMatcher([]language.Tag{
language.MustParse("es-ES"),
language.MustParse("de-DE"),
language.MustParse("it-IT"),
+ language.MustParse("fr-FR"),
language.MustParse("pt-BR"),
language.MustParse("sv-SE"),
language.MustParse("zh-CN"),
diff --git a/ui/v2.5/src/components/Changelog/versions/v0110.md b/ui/v2.5/src/components/Changelog/versions/v0110.md
index 8fc4d2011..886c3ab9e 100644
--- a/ui/v2.5/src/components/Changelog/versions/v0110.md
+++ b/ui/v2.5/src/components/Changelog/versions/v0110.md
@@ -10,6 +10,7 @@
* Added interface options to disable creating performers/studios/tags from dropdown selectors. ([#1814](https://github.com/stashapp/stash/pull/1814))
### đš Improvements
+* Added fr-FR language option. ([#1967](https://github.com/stashapp/stash/pull/1967/files))
* Added stash-id to scene scrape dialog. ([#1955](https://github.com/stashapp/stash/pull/1955))
* Reworked main navbar and positioned at bottom for mobile devices. ([#1769](https://github.com/stashapp/stash/pull/1769))
* Show files being deleted in the Delete dialogs. ([#1852](https://github.com/stashapp/stash/pull/1852))
diff --git a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
index 0799f94d3..6171d0a89 100644
--- a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
+++ b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
@@ -175,6 +175,7 @@ export const SettingsInterfacePanel: React.FC = () => {
+
diff --git a/ui/v2.5/src/locales/fr-FR.json b/ui/v2.5/src/locales/fr-FR.json
new file mode 100644
index 000000000..c05c15b4a
--- /dev/null
+++ b/ui/v2.5/src/locales/fr-FR.json
@@ -0,0 +1,755 @@
+{
+ "actions": {
+ "add": "Ajouter",
+ "add_directory": "Ajouter un répertoire",
+ "add_entity": "Ajouter {entityType}",
+ "add_to_entity": "Ajouter Ă {entityType}",
+ "allow": "Autoriser",
+ "allow_temporarily": "Autoriser temporairement",
+ "apply": "Appliquer",
+ "auto_tag": "Taggage automatique",
+ "backup": "Sauvegarde",
+ "cancel": "Annuler",
+ "clean": "Nettoyer",
+ "clear": "Vider",
+ "clear_back_image": "Suppr. l'image Verso",
+ "clear_front_image": "Suppr. l'image Recto",
+ "clear_image": "Supprimer l'image",
+ "close": "Fermer",
+ "create": "Créer",
+ "create_entity": "Créer {entityType}",
+ "create_marker": "Créer un Marqueur",
+ "created_entity": "Créé: {entity_type}: {entity_name}",
+ "delete": "Supprimer",
+ "delete_entity": "Supprimer {entityType}",
+ "delete_file": "Supprimer le fichier",
+ "delete_generated_supporting_files": "Supprimer les fichiers générés",
+ "disallow": "Refuser",
+ "download": "Télécharger",
+ "download_backup": "Télécharger une sauvegarde",
+ "edit": "Editer",
+ "export": "ExporterâŠ",
+ "export_all": "Exporter toutâŠ",
+ "find": "Trouver",
+ "from_file": "A partir du fichierâŠ",
+ "from_url": "A partir de l'URLâŠ",
+ "full_export": "Export Complet",
+ "full_import": "Import Complet",
+ "generate": "Générer",
+ "generate_thumb_default": "Générer la miniature par défaut",
+ "generate_thumb_from_current": "Générer une miniature",
+ "hash_migration": "hash migration",
+ "hide": "Masquer",
+ "identify": "Identifier",
+ "import": "ImporterâŠ",
+ "import_from_file": "Importer Ă partir d'un fichier",
+ "merge": "Fusionner",
+ "merge_from": "Fusionner depuis",
+ "merge_into": "Fusionner dans",
+ "not_running": "pas en cours d'exécution",
+ "overwrite": "Ecraser",
+ "play_random": "Lecture aléatoire",
+ "play_selected": "Lire la sélection",
+ "preview": "Aperçu",
+ "refresh": "Rafraichir",
+ "reload_plugins": "Recharger les Plugins",
+ "reload_scrapers": "Recharger les Scrapers",
+ "remove": "Retirer",
+ "rename_gen_files": "Renommer les fichiers générés",
+ "rescan": "Scanner Ă nouveau",
+ "reshuffle": "Mélanger à nouveau",
+ "running": "en cours d'exécution",
+ "save": "Sauvegarder",
+ "save_delete_settings": "Use these options by default when deleting",
+ "save_filter": "Sauvegarder le filtre",
+ "scan": "Scanner",
+ "scrape": "Scrape",
+ "scrape_with": "Scrape avecâŠ",
+ "scrape_query": "RequĂȘte de Scrape",
+ "scrape_scene_fragment": "Scrape par fragment",
+ "search": "Chercher",
+ "select_all": "Sélectionner tout",
+ "select_none": "Ne rien sélectionner",
+ "selective_auto_tag": "Tagging automatique sélectif",
+ "selective_scan": "Scan sélectif",
+ "set_as_default": "Définir comme valeur par défaut",
+ "set_back_image": "Image VersoâŠ",
+ "set_front_image": "Image Recto",
+ "set_image": "Choisir l'imageâŠ",
+ "show": "Montrer",
+ "skip": "Passer",
+ "stop": "Stop",
+ "tasks": {
+ "clean_confirm_message": "Ătes-vous sĂ»r de vouloir nettoyer ? Cela supprimera les informations de la base de donnĂ©es et le contenu gĂ©nĂ©rĂ© pour toutes les VidĂ©os et Galeries qui ne se trouvent plus dans le systĂšme de fichiers.",
+ "dry_mode_selected": "Essais Ă blanc. Aucune suppression n'aura lieu.",
+ "import_warning": "Ătes-vous sĂ»r de vouloir importer ? Cela supprimera la base de donnĂ©es et rĂ©importera des donnĂ©es Ă partir de vos mĂ©tadonnĂ©es exportĂ©es."
+ },
+ "temp_disable": "DĂ©sactiver temporairementâŠ",
+ "temp_enable": "Activer temporairementâŠ",
+ "view_random": "Visionner au hasard",
+ "confirm": "Confirmer",
+ "select_folders": "Sélectionner des répertoires",
+ "browse_for_image": "SĂ©lectionner une imageâŠ",
+ "open_random": "Ouvrir au hasard",
+ "next_action": "Suivant",
+ "previous_action": "Précédent",
+ "finish": "Terminer",
+ "use_default": "Utiliser la valeur par défaut",
+ "ignore": "Ignorer"
+ },
+ "actions_name": "Actions",
+ "age": "Ăge",
+ "aliases": "Alias",
+ "all": "tout",
+ "also_known_as": "Aussi connu sous le nom",
+ "ascending": "Ascendant",
+ "average_resolution": "Résolution moyenne",
+ "birth_year": "Année de naissance",
+ "birthdate": "Date de naissance",
+ "bitrate": "BitRate",
+ "career_length": "Durée de la carriÚre",
+ "subsidiary_studios": "Studios affiliés/filiales",
+ "sub_tags": "Sous-Tags",
+ "sub_tag_count": "Nombre de sous-Tags",
+ "component_tagger": {
+ "config": {
+ "active_instance": "Instance stash-box active:",
+ "blacklist_desc": "ĂlĂ©ments Ă exclure de la requĂȘte, sous la forme d'une expression rĂ©guliĂšre insensible Ă la casse. Certains caractĂšres doivent ĂȘtre Ă©chapĂ©s avec un backslash : {chars_require_escape}",
+ "blacklist_label": "Exclure",
+ "query_mode_auto": "Automatique",
+ "query_mode_auto_desc": "Se base sur les métadonnées du fichier si présentes, sinon utilise le nom du fichier",
+ "query_mode_dir": "Répertoire parent",
+ "query_mode_dir_desc": "Se base uniquement sur le nom du répertoire parent",
+ "query_mode_filename": "Nom de fichier",
+ "query_mode_filename_desc": "Se base uniquement sur le nom du fichier",
+ "query_mode_label": "Mode",
+ "query_mode_metadata": "Métadonnées",
+ "query_mode_metadata_desc": "Se base uniquement sur les métadonnées du fichier",
+ "query_mode_path": "Chemin complet",
+ "query_mode_path_desc": "Se base sur le chemin complet du fichier",
+ "set_cover_desc": "Si une vignette a été trouvée, remplace la vignette de la vidéo par la vignette trouvée.",
+ "set_cover_label": "Enregistrer la vignette",
+ "set_tag_desc": "Ajoute les Tags à la vidéo, en fusionnant avec ou en écrasant les Tags existants.",
+ "set_tag_label": "Enregistrer les Tags",
+ "source": "Source",
+ "show_male_desc": "Cochez si vous voulez Taguer également les Acteurs (hommes).",
+ "show_male_label": "Montrer également les Acteurs"
+ },
+ "noun_query": "RequĂȘte",
+ "results": {
+ "fp_found": "{fpCount, plural, =0 {Aucune empreinte correspondante} other {# nouvelles empreintes correspondantes}}",
+ "fp_matches": "La durée correspond !",
+ "fp_matches_multi": "La durée correspond à {matchCount}/{durationsLength} empreintes(s)",
+ "hash_matches": "Correspondance trouvée : {hash_type}",
+ "match_failed_already_tagged": "Vidéo déjà Taguée",
+ "match_failed_no_result": "Aucun résultat trouvé",
+ "match_success": "ScÚne Taguée avec succÚs",
+ "unnamed": "Anonyme",
+ "duration_off": "La durée diffÚre d'au moins {number} secondes",
+ "duration_unknown": "Durée inconnue",
+ "phash_matches": "{count} PHashe(s) correspondant(s)"
+ },
+ "verb_match_fp": "Empreintes correspondantes",
+ "verb_matched": "Associé",
+ "verb_scrape_all": "Extraire tout",
+ "verb_submit_fp": "Soumettre {fpCount, plural, one{# Empreinte} other{# Empreintes}}",
+ "verb_toggle_config": "{toggle} {configuration}",
+ "verb_toggle_unmatched": "{toggle} vidéos associées"
+ },
+ "config": {
+ "about": {
+ "build_hash": "Build hash:",
+ "build_time": "Build time:",
+ "check_for_new_version": "Rechercher une mise Ă jour",
+ "latest_version_build_hash": "Latest Version Build Hash:",
+ "new_version_notice": "[NEW]",
+ "stash_discord": "Join our {url} channel",
+ "stash_home": "Stash home at {url}",
+ "stash_open_collective": "Support us through {url}",
+ "stash_wiki": "Stash {url} page",
+ "version": "Version"
+ },
+ "categories": {
+ "about": "A propos",
+ "interface": "Interface",
+ "logs": "Journaux",
+ "plugins": "Plugins",
+ "scraping": "Scraping",
+ "tasks": "TĂąches",
+ "tools": "Outils"
+ },
+ "dlna": {
+ "allow_temp_ip": "Autoriser {tempIP}",
+ "allowed_ip_addresses": "Adresses IP autorisées",
+ "default_ip_whitelist": "Liste blanche d'adresses IP",
+ "default_ip_whitelist_desc": "Liste d'adresses IP que seront autorisées par défaut à accéder au serveur DLNA. Utilisez {wildcard} pour autoriser toutes les adresses.",
+ "enabled_by_default": "Activer par défaut",
+ "network_interfaces": "Interfaces",
+ "network_interfaces_desc": "Interfaces réseaux sur lesquelles exposer le serveur DLNA. Si rien n'est spécifié, le serveur sera exposé sur toutes les interfaces disponibles. Redémarrez le serveur DLNA pour appliquer la modification.",
+ "recent_ip_addresses": "Adresses IP récentes",
+ "server_display_name": "Nom du serveur DLNA",
+ "server_display_name_desc": "Nom du serveur DLNA. Si aucun nom n'est spécifié, le nom du serveur sera {server_name}.",
+ "until_restart": "jusqu'au redémarrage"
+ },
+ "general": {
+ "auth": {
+ "api_key": "Clé API",
+ "api_key_desc": "Clé API pour systÚme tier. Requis uniquement lorsque un nom d'utilisateur et un mot de passe ont été spécifiés. Le nom d'utilisateur doit avoir été enregistré avant de générer la clé API.",
+ "authentication": "Authentification",
+ "clear_api_key": "Effacer la clé API",
+ "generate_api_key": "Générer une clé API",
+ "log_file": "Fichier journal",
+ "log_file_desc": "Chemin vers le fichier journal. Laissez vide pour désactiver la journalisation. Nécéssite un redémarrage.",
+ "log_http": "Journaliser les accĂšs HTTP",
+ "log_http_desc": "Journalise les accÚs HTTP dans le terminal. Nécéssite un redémarrage.",
+ "log_to_terminal": "Journaliser dans le terminal",
+ "log_to_terminal_desc": "Journalise dans le terminal en plus du fichier journal. Actif par défaut si la journalisation dans le fichier journal est désactivée. Nécéssite un redémarrage.",
+ "maximum_session_age": "Durée maximum de session",
+ "maximum_session_age_desc": "Temps d'inactivité maximum avant la déconnexion automatique de la session.",
+ "password": "Mot de passe",
+ "password_desc": "Mot de passe pour accéder à Stash. Laissez vide pour désactiver l'authentification.",
+ "stash-box_integration": "Integration stash-box",
+ "trusted_proxies": "Proxys de confiance",
+ "trusted_proxies_desc": "Liste des proxys autorisés à transférer le trafic vers Stash. Laissez vide pour autoriser à partir du réseau privé. ",
+ "username": "Nom d'utilisateur",
+ "username_desc": "Nom d'utilisateur pour accéder à Stash. Laissez vide pour désactiver l'authentification."
+ },
+ "cache_location": "Chemin vers le répertoire qui sera utilisé pour la mise en cache.",
+ "cache_path_head": "Répertorie de mise en cache",
+ "calculate_md5_and_ohash_desc": "Calculer l'empreinte MD5 en plus de OSHash. Activer cette option rendra plus lent le scan initial des fichiers. Le hachage des nom de fichiers doit ĂȘtre dĂ©fini sur oshash pour dĂ©sactiver le calcul du MD5.",
+ "calculate_md5_and_ohash_label": "Calculer le MD5 pour les vidéos",
+ "check_for_insecure_certificates": "Vérifier les certificats non sécurisés",
+ "check_for_insecure_certificates_desc": "Certains sites Web utilisent des certificats SSL non sécurisés. Lorsque cette option est décochée, le Scraper ignore la vérification des certificats non sécurisés et permet le Scraping de ces sites. Si vous obtenez une erreur de certificat lors du Scraping, décochez cette option.",
+ "chrome_cdp_path": "Chrome CDP",
+ "chrome_cdp_path_desc": "Chemin vers l'exécutable Chrome, ou une adresse distante (commençant par http:// ou https://, par exemple http://localhost:9222/json/version) vers une instance Chrome.",
+ "create_galleries_from_folders_desc": "Si coché, crée des Galeries à partir des dossiers contenant des images.",
+ "create_galleries_from_folders_label": "Créer des Galeries à partir des dossiers contenant des fichiers images",
+ "db_path_head": "Base de données",
+ "directory_locations_to_your_content": "Emplacements vers vos bibliothĂšques de contenu",
+ "exclude_image": "Exclure les images",
+ "exclude_video": "Exclure les vidéos",
+ "excluded_image_gallery_patterns_desc": "Expressions réguliÚres des fichiers ou chemins vers les images ou galeries à exclure de l'analyse et à ajouter au nettoyage.",
+ "excluded_image_gallery_patterns_head": "Images/galeries Ă exclure",
+ "excluded_video_patterns_desc": "Expressions réguliÚres des fichiers ou chemins vers les vidéos à exclure de l'analyse et à ajouter au nettoyage.",
+ "excluded_video_patterns_head": "Vidéos à exclure",
+ "gallery_ext_desc": "Liste des extensions de fichier Archive qui seront considérés comme des Galeries d'Images. Séparez les extentions par une virgule.",
+ "gallery_ext_head": "Extensions de fichiers d'Archive pour les Galeries",
+ "generated_file_naming_hash_desc": "Utiliser MD5 ou OSHash pour le nommage des fichiers gĂ©nĂ©rĂ©s. Modifier ce rĂ©glage nĂ©cĂ©ssite que le MD5/OSHash ai dĂ©jĂ Ă©tĂ© gĂ©nĂ©rĂ© pour toutes les VidĂ©os et Images. AprĂšs avoir modifiĂ© ce rĂ©glage, les fichiers gĂ©nĂ©rĂ©s existants devront ĂȘtre migrĂ©s ou rĂ©gĂ©nĂ©rĂ©s. Voir la page TĂąches pour la migration.",
+ "generated_file_naming_hash_head": "Algorithme de hachage pour le nommage des fichiers générés",
+ "generated_files_location": "Emplacement pour les fichiers générés (marqueurs, apercus, sprites, etc)",
+ "generated_path_head": "Emplacement des fichiers générés",
+ "hashing": "Hachage",
+ "image_ext_desc": "Liste des extensions de fichiers Images",
+ "image_ext_head": "Extensions de fichiers Images",
+ "logging": "Journalisation",
+ "maximum_streaming_transcode_size_desc": "Résolution maximum pour la conversions des stream",
+ "maximum_streaming_transcode_size_head": "Résolution maximum de conversion pour les stream",
+ "maximum_transcode_size_desc": "Résolution maximum pour la conversions des fichiers",
+ "maximum_transcode_size_head": "Résolution maximum de conversion",
+ "metadata_path": {
+ "heading": "Emplacement des fichiers de Métadonnées",
+ "description": "Emplacement du répertoire qui sera utilisé pour un export ou un import de métadonnées"
+ },
+ "number_of_parallel_task_for_scan_generation_desc": "0 pour détection automatique. Attention: une valeur trop élevée peut réduire les performances et causer d'autres problÚmes.",
+ "number_of_parallel_task_for_scan_generation_head": "Nombre de tùches en parallÚles pour le scan et la génération",
+ "parallel_scan_head": "Scan/Génération en parallÚle",
+ "preview_generation": "Générer les aperçus",
+ "scraper_user_agent": "User-Agent pour les Scraper",
+ "scraper_user_agent_desc": "ChaĂźne User-Agent utilisĂ©e dans les requĂȘtes http lors du Scraping.",
+ "scraping": "Scraping",
+ "sqlite_location": "Emplacement du fichier de base de données SQLite (nécéssite un redémarrage)",
+ "video_ext_desc": "Liste des extensions de fichiers Vidéos",
+ "video_ext_head": "Extensions de fichiers Vidéo",
+ "video_head": "Vidéo",
+ "include_audio_head": "Inclure l'audio",
+ "include_audio_desc": "Inclure l'audio dans la génération des aperçus."
+ },
+ "logs": {
+ "log_level": "Niveau de journalisation"
+ },
+ "plugins": {
+ "hooks": "Hooks",
+ "triggers_on": "Déclenche sur"
+ },
+ "scraping": {
+ "entity_metadata": "{entityType} Métadonnées",
+ "entity_scrapers": "{entityType} scrapers",
+ "excluded_tag_patterns_desc": "Expressions réguliÚres pour l'exclusion de certains Tags des résultats de Scraping",
+ "excluded_tag_patterns_head": "Exclusion de Tags",
+ "scraper": "Scraper",
+ "scrapers": "Scrapers",
+ "search_by_name": "Recherche par nom",
+ "supported_types": "Types supportés",
+ "supported_urls": "URLs"
+ },
+ "stashbox": {
+ "add_instance": "Ajouter une instance stash-box",
+ "api_key": "Clé API",
+ "description": "Stash-box facilite le taggage automatique des vidĂ©os et des acteur.trice.s en se basant sur l'empreinte et le nom des fichiers. Le Endpoint et la ClĂ© API peuvent ĂȘtre trouvĂ© dans votre compte stash-box. Si vous spĂ©cifiez plusieurs instances stash-box, le nom est requis.",
+ "endpoint": "Endpoint",
+ "graphql_endpoint": "Endpoint GraphQL",
+ "name": "Nom",
+ "title": "Endpoints Stash-box"
+ },
+ "tasks": {
+ "added_job_to_queue": "{operation_name} ajouté(e) à la liste des tùches",
+ "auto_tag_based_on_filenames": "Taggage automatique basé sur le nom des fichiers.",
+ "auto_tagging": "Taggage automatique",
+ "backing_up_database": "Sauvegarder la base de données",
+ "backup_and_download": "Sauvegarde la base de données et télécharge le fichier de sauvegarde.",
+ "backup_database": "Sauvegarde la base de donnĂ©es au mĂȘme emplacement que le fichier de base de donnĂ©es. Le fichier se sauvegarde aura le format suivant: {filename_format}",
+ "cleanup_desc": "Cherche et supprime les fichiers orphelins de la base de données. Cette action est destructive.",
+ "dont_include_file_extension_as_part_of_the_title": "Ne pas inclure l'extension du fichier dans le titre",
+ "export_to_json": "Exporte la base de données au format JSON dans le dossier metadata",
+ "generate_desc": "GénÚre les fichiers images, sprite, vidéo, vtt autres fichiers.",
+ "generate_phashes_during_scan": "Générer les PHashes pendant le scan (pour la déduplication et l'identification des vidéos)",
+ "generate_previews_during_scan": "Générer également les aperçus image pendant le scan (WebP animé, requis seulement si le Type d'apercu est définis sur Image Animée)",
+ "generate_sprites_during_scan": "Générer les Sprites pendant le scan (pour l'aperçu sur la barre de progression)",
+ "generate_video_previews_during_scan": "Générer les aperçus pendant le scan (courte vidéo d'aperçu jouée lorsque vous surlovez une Vidéo)",
+ "generate_thumbnails_during_scan": "Générer les miniatures pour les Images pendant le scan.",
+ "generated_content": "Contenu généré",
+ "identify": {
+ "and_create_missing": "et créer si manquant",
+ "create_missing": "Créer si manquant",
+ "heading": "Identifier",
+ "description": "Associe automatiquement les métadonnées aux Vidéos en utilisant stash-box et les Scrapers",
+ "default_options": "Options par défaut",
+ "explicit_set_description": "Ces options seront utilisées par défaut à moins qu'une Source ne les définissent autrement.",
+ "field_behaviour": "{strategy} {field}",
+ "field_options": "options pour les champs",
+ "identifying_scenes": "Identifier {num} {scene}",
+ "identifying_from_paths": "Identifier les vidéos à partir des emplacements suivants",
+ "include_male_performers": "Inclure les acteurs hommes",
+ "set_cover_images": "Enregistrer l'image de couverture",
+ "set_organized": "Marquer comme Organisé",
+ "source_options": "Options pour {source}",
+ "source": "Source",
+ "sources": "Sources",
+ "field": "Champ",
+ "strategy": "Stratégie"
+ },
+ "import_from_exported_json": "Import from exported JSON in the metadata directory. Wipes the existing database.",
+ "incremental_import": "Incremental import from a supplied export zip file.",
+ "job_queue": "File d'attente des tĂąches",
+ "maintenance": "Maintenance",
+ "migrate_hash_files": "A utiliser si vous avez modifié l'algorithme de hachage pour le nommage des fichiers générés. Renomme les fichiers générés en fonction de l'algorithme de hachage sélectionné.",
+ "migrations": "Migrations",
+ "only_dry_run": "Effectuer un essai Ă blanc. Ne supprime rien du tout.",
+ "plugin_tasks": "TĂąches des Plugins",
+ "scan_for_content_desc": "Scanner pour des nouveaux contenus et les ajouter à la base de données.",
+ "set_name_date_details_from_metadata_if_present": "Enregistre le titre, la date et autres détails à partir des métadonnées du fichier (si présentes)"
+ },
+ "tools": {
+ "scene_duplicate_checker": "Vérificateur de doublons Vidéos",
+ "scene_filename_parser": {
+ "add_field": "Ajouter un champ",
+ "capitalize_title": "Titre en majuscule",
+ "display_fields": "Afficher les champs",
+ "escape_chars": "Utilisez \\ pour échapper les caractÚres littéraux",
+ "filename": "Nom du fichier",
+ "filename_pattern": "Pattern des noms de fichier",
+ "ignore_organized": "Ignorer les Vidéos déjà Organisées",
+ "ignored_words": "Mots Ă ignorer",
+ "matches_with": "Matches with {i}",
+ "select_parser_recipe": "Sélectionner une recette d'analyse",
+ "title": "Analyseur de nom de fichier Vidéos",
+ "whitespace_chars": "Espaces",
+ "whitespace_chars_desc": "Ces caractÚres seront remplacés par un espace dans le titre"
+ },
+ "scene_tools": "Outils Vidéos"
+ },
+ "ui": {
+ "custom_css": {
+ "description": "La page doit ĂȘtre rafraichie pour que les changements prennent effet.",
+ "heading": "CSS personalisé",
+ "option_label": "Activer le CSS personalisé"
+ },
+ "delete_options": {
+ "description": "Réglages par défaut lors de la suppression des Vidéo, Images et Galeries.",
+ "heading": "Options de suppression",
+ "options": {
+ "delete_file": "Par défaut, effacer les fichiers",
+ "delete_generated_supporting_files": "Par défaut, effacer les fichiers générés"
+ }
+ },
+ "desktop_integration": {
+ "desktop_integration": "Intégration avec le Bureau",
+ "skip_opening_browser": "Ne pas ouvrir de navigateur",
+ "skip_opening_browser_on_startup": "ne pas ouvrir de navigateur au démarrage de l'application"
+ },
+ "editing": {
+ "disable_dropdown_create": {
+ "heading": "Désactiver la création depuis la liste déroulante.",
+ "description": "Désactive la possibilité de créer des nouveaux Actrices/Acteurs, Studio et Tags depuis la liste déroulante."
+ },
+ "heading": "Edition"
+ },
+ "handy_connection_key": {
+ "description": "Clé de connexion Handy pour les Vidéos interactives",
+ "heading": "Clé de connexion Handy"
+ },
+ "funscript_offset": {
+ "description": "Décalage temporel (en millisecondes) à appliquer lors de la lecture des scripts interactifs.",
+ "heading": "Décalage Funscript (ms)"
+ },
+ "images": {
+ "options": {
+ "write_image_thumbnails": {
+ "heading": "Write image thumbnails",
+ "description": "Write image thumbnails to disk when generated on-the-fly"
+ }
+ }
+ },
+ "language": {
+ "heading": "Langue"
+ },
+ "max_loop_duration": {
+ "description": "Durée maximum de la vidéo pendant laquelle le lecteur rebouclera la vidéo - 0 pour désactiver",
+ "heading": "Durée maximum de rebouclage"
+ },
+ "menu_items": {
+ "description": "Afficher ou masquer différents types de contenus dans la barre de navigation",
+ "heading": "ĂlĂ©ments de la barre de navigation"
+ },
+ "performers": {
+ "options": {
+ "image_location": {
+ "heading": "Image par défaut personalisée pour les actrices/acteurs",
+ "description": "Chemin vers l'image à utiliser pour les Actrices/Acteurs qui n'ont pas d'image. Laissez vide pour utiliser l'image par défaut de Stash."
+ }
+ }
+ },
+ "preview_type": {
+ "description": "Configuration des éléments du Mur",
+ "heading": "Type d'aperçu",
+ "options": {
+ "animated": "Image animée",
+ "static": "Image fixe",
+ "video": "Vidéo"
+ }
+ },
+ "scene_list": {
+ "heading": "Liste Vidéo",
+ "options": {
+ "show_studio_as_text": "Afficher les Studios en tant que texte"
+ }
+ },
+ "scene_player": {
+ "heading": "Lecteur Vidéo",
+ "options": {
+ "auto_start_video": "Lecture automatique"
+ }
+ },
+ "scene_wall": {
+ "heading": "Scene / Marker Wall",
+ "options": {
+ "display_title": "Display title and tags",
+ "toggle_sound": "Enable sound"
+ }
+ },
+ "slideshow_delay": {
+ "description": "Diaporama disponible dans Galeries en mode de visionnage Mur",
+ "heading": "Durée de défilement du diaporama"
+ },
+ "title": "Interface utilisateur"
+ }
+ },
+ "configuration": "Configuration",
+ "countables": {
+ "galleries": "{count, plural, one {Galerie} other {Galeries}}",
+ "images": "{count, plural, one {Image} other {Images}}",
+ "markers": "{count, plural, one {Marqueur} other {Marqueurs}}",
+ "movies": "{count, plural, one {Film} other {Films}}",
+ "performers": "{count, plural, one {Actrice/Acteur} other {Actrices/Acteurs}}",
+ "scenes": "{count, plural, one {Vidéo} other {Vidéos}}",
+ "studios": "{count, plural, one {Studio} other {Studios}}",
+ "tags": "{count, plural, one {Tag} other {Tags}}",
+ "files": "{count, plural, one {Fichier} other {Fichiers}}"
+ },
+ "country": "Pays",
+ "cover_image": "Image de couverture",
+ "created_at": "Date de création",
+ "criterion": {
+ "greater_than": "Supérieur à ",
+ "less_than": "Inférieur à ",
+ "value": "Valeur"
+ },
+ "criterion_modifier": {
+ "equals": "est égal à ",
+ "excludes": "ne contient pas",
+ "format_string": "{criterion} {modifierString} {valueString}",
+ "greater_than": "est plus grand que",
+ "includes": "contient",
+ "includes_all": "contient tout",
+ "is_null": "est null",
+ "less_than": "est plus petit que",
+ "matches_regex": "match l'expression réguliÚre",
+ "not_equals": "n'est pas égal à ",
+ "not_matches_regex": "ne match pas l'expression réguliÚre",
+ "not_null": "n'est pas null",
+ "between": "entre",
+ "not_between": "en dehors"
+ },
+ "custom": "Personalisé",
+ "date": "Date",
+ "death_date": "Date de décÚs",
+ "death_year": "Année de décÚs",
+ "descending": "Descendant",
+ "detail": "Détail",
+ "details": "Détails",
+ "developmentVersion": "Version de Développement",
+ "dialogs": {
+ "delete_alert": "{count, plural, one {Ce/Cette {singularEntity} sera supprimé(e)} other {Ces {pluralEntity} seront supprimé(e)s}} définitivement:",
+ "delete_confirm": "Ătes-vous sĂ»r de vouloir supprimer {entityName} ?",
+ "delete_entity_desc": "{count, plural, one {Ătes-vous sĂ»r de vouloir supprimer cette {singularEntity} ? Ă moins que le fichier ne soit Ă©galement supprimĂ©, cette {singularEntity} sera ajoutĂ©e Ă nouveau lors du prochain Scan.} other {Ătes-vous sĂ»r de vouloir supprimer ces {pluralEntity} ? Ă moins que les fichiers ne soient Ă©galement supprimĂ©s, ces {pluralEntity} seront ajoutĂ©es Ă nouveau lors du prochain Scan.}}",
+ "delete_entity_title": "{count, plural, one {Delete {singularEntity}} other {Delete {pluralEntity}}}",
+ "delete_object_desc": "Ătes-vous sĂ»r de vouloir supprimer :",
+ "delete_object_overflow": "âŠet {count} {count, plural, one {autre {singularEntity}} other {autres {pluralEntity}}}.",
+ "delete_object_title": "Supprimer {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "delete_galleries_extra": "âŠainsi que tout fichier image non-associĂ© Ă une autre Galerie.",
+ "edit_entity_title": "Editer {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "export_include_related_objects": "Inclure les entités liées",
+ "export_title": "Export",
+ "lightbox": {
+ "delay": "Délais (Secondes)",
+ "display_mode": {
+ "label": "Mode d'affichage",
+ "original": "Original",
+ "fit_to_screen": "Adapter à l'écran",
+ "fit_horizontally": "Adapter horizontalement"
+ },
+ "options": "Options",
+ "reset_zoom_on_nav": "Remise Ă zero du niveau de zoom au changement d'image",
+ "scale_up": {
+ "label": "Adapter à l'écran",
+ "description": "Agrandir l'image pour adapter à l'écran"
+ },
+ "scroll_mode": {
+ "label": "Mode de défilement",
+ "zoom": "Zoom",
+ "pan_y": "Pan Y",
+ "description": "Maintenir MAJ pour utiliser temporairement l'autre mode"
+ }
+ },
+ "merge_tags": {
+ "destination": "Destination",
+ "source": "Source"
+ },
+ "overwrite_filter_confirm": "Ătes-vous sĂ»r de vouloir Ă©craser le filtre sauvegardĂ© {entityName} ?",
+ "scene_gen": {
+ "image_previews": "Aperçus image (Image WebP animée. Requis seulement si le type d'Aperçu est défini sur Image Animée)",
+ "markers": "Marqueurs (vidéo de 20 secondes qui démarre au Timecode courant)",
+ "marker_image_previews": "Aperçus Marqueurs (Image WebP animée. Requis seulement si le type d'aperçu est défini sur Image Animée)",
+ "marker_screenshots": "Capture d'écran Marqueurs (Image JPG fixe. Requis seulement si le type d'Aperçu est défini sur Image Fixe)",
+ "overwrite": "Ecraser les fichiers générés existants",
+ "phash": "Hachage perceptif (pour la déduplication)",
+ "preview_exclude_end_time_desc": "Exclure les x derniĂšres secondes de la vidĂ©o pour la gĂ©nĂ©ration de l'aperçu. La valeur peut-ĂȘtre exprimĂ©e en secondes ou bien en pourcentage (ex: 2%) de la durĂ©e totale de la vidĂ©o.",
+ "preview_exclude_end_time_head": "Exclure Ă la fin",
+ "preview_exclude_start_time_desc": "Exclure les x premiĂšres secondes de la vidĂ©o pour la gĂ©nĂ©ration de l'aperçu. La valeur peut-ĂȘtre exprimĂ©e en secondes ou bien en pourcentage (ex: 2%) de la durĂ©e totale de la vidĂ©o.",
+ "preview_exclude_start_time_head": "Exclure au début",
+ "preview_options": "Options d'Aperçus",
+ "preview_preset_desc": "Le Preset d'encodage rĂ©gule la taille, la qualitĂ© et le temps d'encodage des aperçus. Les Preset plus bas que âslowâ n'apportent pas de gain significatif et ne sont pas recommandĂ©s.",
+ "preview_preset_head": "Preset d'encodage de l'aperçu",
+ "preview_seg_count_desc": "Nombre total de segments dans un aperçu.",
+ "preview_seg_count_head": "Nombre de segments dans un aperçu",
+ "preview_seg_duration_desc": "Durée de chaque segment d'aperçu (en secondes).",
+ "preview_seg_duration_head": "Durée d'un segment d'aperçu",
+ "sprites": "Sprites (pour l'aperçu sur la barre de progression)",
+ "transcodes": "Transcodages (conversion au format MP4 des fichiers vidéo dont le format n'est pas supporté par le lecteur vidéo)",
+ "video_previews": "Aperçus (courte vidéo jouée lorsque vous survolez une Vidéo)"
+ },
+ "scenes_found": "{count} Vidéo(s) trouvée(s)",
+ "scrape_entity_query": "RequĂȘte de Scrape {entity_type}",
+ "scrape_entity_title": "Résultat du Scraping {entity_type}",
+ "scrape_results_existing": "Existant",
+ "scrape_results_scraped": "Scraped",
+ "set_image_url_title": "URL de l'image",
+ "unsaved_changes": "Changements non-sauvegardĂ©s. Ătes-vous sĂ»r de vouloir quitter ?",
+ "aliases_must_be_unique": "Les alias doivent ĂȘtre uniques",
+ "delete_gallery_files": "Supprime le dossier ou l'archive de la galerie, ainsi que toute image non associées à une autre galerie."
+ },
+ "dimensions": "Dimensions de l'image",
+ "director": "Réalisateur",
+ "display_mode": {
+ "grid": "Grille",
+ "list": "Liste",
+ "tagger": "Taggueur",
+ "unknown": "Inconnu",
+ "wall": "Mur"
+ },
+ "donate": "Faire un don",
+ "dupe_check": {
+ "description": "Les prĂ©cisions plus faibles que 'Exacte' peuvent prendre plus de temps Ă ĂȘtre calculĂ©es. Les niveaux de prĂ©cisions faibles peuvent Ă©galement mener Ă des rĂ©sultats faux-positifs.",
+ "found_sets": "{setCount, plural, one{# ensemble de doublons trouvé.} other {# ensembles de doublons trouvés.}}",
+ "options": {
+ "exact": "Exacte",
+ "high": "Haute",
+ "low": "Basse",
+ "medium": "Moyenne"
+ },
+ "search_accuracy_label": "Précision",
+ "title": "ScĂšnes en double"
+ },
+ "duration": "Durée",
+ "effect_filters": {
+ "aspect": "Aspect",
+ "blue": "Bleu",
+ "blur": "Flou",
+ "brightness": "Luminosité",
+ "contrast": "Contraste",
+ "gamma": "Gamma",
+ "green": "Vert",
+ "hue": "Teinte",
+ "name": "Filtres",
+ "name_transforms": "Transformations",
+ "red": "Red",
+ "reset_filters": "Annuler les filtres",
+ "reset_transforms": "Annuler les transformations",
+ "rotate": "Rotation",
+ "rotate_left_and_scale": "Rotation Gauche & Dimensionnement",
+ "rotate_right_and_scale": "Rotation Droite & Dimensionnement",
+ "saturation": "Saturation",
+ "scale": "Dimension",
+ "warmth": "Chaleur"
+ },
+ "ethnicity": "Ethnicité",
+ "eye_color": "Couleur des yeux",
+ "fake_tits": "Implants mammaires",
+ "false": "Faux",
+ "favourite": "Favoris",
+ "file": "fichier",
+ "files": "fichier",
+ "file_info": "Infos fichier",
+ "file_mod_time": "Date de modification fichier",
+ "filesize": "Taille du fichier",
+ "filter": "Filtre",
+ "filter_name": "Nom du filtre",
+ "filters": "Filtres",
+ "framerate": "Fréquence d'images",
+ "frames_per_second": "{value} ips",
+ "galleries": "Galeries",
+ "gallery": "Galerie",
+ "gallery_count": "Nombre de Galeries",
+ "gender": "Genre",
+ "hair_color": "Couleur des cheveux",
+ "hasMarkers": "PossĂšde des marqueurs",
+ "height": "Taille",
+ "help": "Aide",
+ "image": "Image",
+ "image_count": "Nombre d'Images",
+ "images": "Images",
+ "include_parent_tags": "Inclure les Tags parents",
+ "include_sub_studios": "Inclure les studios affiliés / filiales",
+ "include_sub_tags": "Inclure les sous-Tags",
+ "instagram": "Instagram",
+ "interactive": "Interactif",
+ "isMissing": "Manquant",
+ "library": "BibliothĂšque",
+ "loading": {
+ "generic": "ChargementâŠ"
+ },
+ "marker_count": "Nombre de Marqueurs",
+ "markers": "Marqueurs",
+ "measurements": "Mensurations",
+ "media_info": {
+ "audio_codec": "Codec Audio",
+ "checksum": "Checksum",
+ "downloaded_from": "Téléchargé de",
+ "hash": "Hachage",
+ "performer_card": {
+ "age": "{age} {years_old}",
+ "age_context": "{age} {years_old} in this scene"
+ },
+ "phash": "PHash",
+ "stream": "Stream",
+ "video_codec": "Codec vidéo"
+ },
+ "megabits_per_second": "{value} Mbps",
+ "metadata": "Métadonnées",
+ "movie": "Film",
+ "movie_scene_number": "Nombre de ScĂšnes de films",
+ "movies": "Films",
+ "name": "Nom",
+ "new": "Nouveau",
+ "none": "Aucun",
+ "o_counter": "O-mĂštre",
+ "operations": "Opérations",
+ "organized": "Organisé",
+ "pagination": {
+ "first": "PremiĂšre",
+ "last": "DerniĂšre",
+ "next": "Suivante",
+ "previous": "Précédente"
+ },
+ "parent_of": "Parent de {children}",
+ "parent_studios": "Studio parent",
+ "parent_tags": "Tag parent",
+ "parent_tag_count": "Nombre de Tags Parents",
+ "part_of": "Fait partie de {parent}",
+ "path": "Chemin",
+ "performer": "Actrice/Acteur",
+ "performer_count": "Nombre d'Actrices/Acteurs",
+ "performer_image": "Photo",
+ "performers": "Actrices/Acteurs",
+ "performerTags": "Tags d'Actrice/Acteur",
+ "piercings": "Piercings",
+ "queue": "File de lecture",
+ "random": "Aléatoire",
+ "rating": "Note",
+ "resolution": "Résolution",
+ "scene": "Vidéo",
+ "scene_count": "Nombre de Vidéos",
+ "scene_id": "Vidéo ID",
+ "scenes": "Vidéos",
+ "scenes_updated_at": "ScÚne modifiée le",
+ "sceneTagger": "Taggueur de ScĂšne",
+ "sceneTags": "Tags de ScĂšne",
+ "search_filter": {
+ "add_filter": "Ajouter un filtre",
+ "name": "Filtres",
+ "saved_filters": "Filtres sauvegardés",
+ "update_filter": "Mise Ă jour du filtre"
+ },
+ "seconds": "Secondes",
+ "settings": "ParamĂštres",
+ "sub_tag_of": "Sous-Tag de {parent}",
+ "stash_id": "Stash ID",
+ "stash_ids": "Stash IDs",
+ "status": "Statut: {statusText}",
+ "studio": "Studio",
+ "studio_depth": "Niveaux (empty for all)",
+ "studios": "Studios",
+ "synopsis": "Synopsis",
+ "tag": "Tag",
+ "tag_count": "Nombre de Tags",
+ "tags": "Tags",
+ "tattoos": "Tattoos",
+ "title": "Titre",
+ "toast": {
+ "added_entity": "{entity} ajouté(e)",
+ "added_generation_job_to_queue": "Tùche de génération ajoutée dans la file des tùches",
+ "create_entity": "Créé(e) {entity}",
+ "default_filter_set": "Filtre par défaut enregistré",
+ "delete_entity": "Suppression de {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "delete_past_tense": "{count, plural, one {{singularEntity}} other {{pluralEntity}}} supprimé(e)(s)",
+ "generating_screenshot": "GĂ©nĂ©ration de la capture d'Ă©cranâŠ",
+ "merged_tags": "Tags fusionnés",
+ "rescanning_entity": "Rescan de {count, plural, one {{singularEntity}} other {{pluralEntity}}}âŠ",
+ "started_auto_tagging": "Démarrage du Taggage automatique",
+ "saved_entity": "{entity} sauvegardé(e)",
+ "updated_entity": "{entity} mis(e) Ă jour"
+ },
+ "total": "Total",
+ "true": "Vrai",
+ "twitter": "Twitter",
+ "up-dir": "Remonter d'un répertoire",
+ "updated_at": "Date de modification",
+ "url": "URL",
+ "weight": "Poids",
+ "years_old": "ans",
+ "stats": {
+ "image_size": "Taille Images",
+ "scenes_size": "Taille Vidéos",
+ "scenes_duration": "Durée Vidéos"
+ }
+}
diff --git a/ui/v2.5/src/locales/index.ts b/ui/v2.5/src/locales/index.ts
index 6a3534d8d..ed9505b7b 100644
--- a/ui/v2.5/src/locales/index.ts
+++ b/ui/v2.5/src/locales/index.ts
@@ -3,6 +3,7 @@ import enGB from "./en-GB.json";
import enUS from "./en-US.json";
import esES from "./es-ES.json";
import ptBR from "./pt-BR.json";
+import frFR from "./fr-FR.json";
import itIT from "./it-IT.json";
import svSE from "./sv-SE.json";
import zhTW from "./zh-TW.json";
@@ -14,6 +15,7 @@ export default {
enUS,
esES,
ptBR,
+ frFR,
itIT,
svSE,
zhTW,