// French translations. Reviewed for UI register (informal vous-vouvoiement is
// standard for software UIs in France; tu would feel underdressed for a B2B tool).
// Native review recommended before publicizing as fully supported.
export default {
// Nav
'nav.displays': 'Écrans',
'nav.content': 'Contenu',
'nav.playlists': 'Listes de lecture',
'nav.layouts': 'Mises en page',
'nav.widgets': 'Widgets',
'nav.schedule': 'Calendrier',
'nav.walls': 'Murs vidéo',
'nav.reports': 'Rapports',
'nav.kiosk': 'Kiosque',
'nav.designer': 'Concepteur',
'nav.activity': 'Activité',
'nav.teams': 'Équipes',
'nav.help': 'Aide',
'nav.settings': 'Paramètres',
'nav.subscription': 'Abonnement',
'nav.admin': 'Admin',
// Common
'common.save': 'Enregistrer',
'common.cancel': 'Annuler',
'common.delete': 'Supprimer',
'common.edit': 'Modifier',
'common.done': 'Terminé',
'common.loading': 'Chargement...',
'common.connected': 'Connecté',
'common.disconnected': 'Déconnecté',
'common.never': 'Jamais',
'common.just_now': 'À l\'instant',
'common.minutes_ago': 'il y a {n}m',
'common.hours_ago': 'il y a {n}h',
'common.days_ago': 'il y a {n}j',
'common.unknown': 'Inconnu',
// Auth
'auth.sign_in': 'Se connecter',
'auth.sign_out': 'Se déconnecter',
'auth.create_account': 'Créer un compte',
'auth.create_admin_account': 'Créer un compte administrateur',
'auth.email': 'E-mail',
'auth.password': 'Mot de passe',
'auth.name': 'Nom',
'auth.placeholder_email': 'vous@exemple.com',
'auth.placeholder_password': '••••••••',
'auth.placeholder_name': 'Votre nom',
'auth.placeholder_register_password': 'Au moins 6 caractères',
'auth.subtitle_setup': 'Créez votre compte administrateur pour commencer',
'auth.subtitle_signin': 'Connectez-vous pour gérer vos écrans',
'auth.trial_notice': 'Les nouveaux comptes obtiennent un essai Pro gratuit de 14 jours',
'auth.divider_or': 'OU',
'auth.signin_google': 'Se connecter avec Google',
'auth.signin_microsoft': 'Se connecter avec Microsoft',
'auth.back_to_signin': 'Retour à la connexion',
'auth.support_access': 'Accès au support',
'auth.support_token_placeholder': 'Collez le jeton de support',
'auth.support_authenticate': 'Authentifier avec le jeton de support',
'auth.terms': 'Conditions d\'utilisation',
'auth.privacy': 'Politique de confidentialité',
'auth.error_email_password_required': 'E-mail et mot de passe requis',
'auth.error_password_min_6': 'Le mot de passe doit comporter au moins 6 caractères',
'auth.error_login_failed': 'Échec de la connexion',
'auth.error_registration_failed': 'Échec de l\'inscription',
'auth.error_paste_support_token': 'Collez un jeton de support',
'auth.error_support_failed': 'Échec de la connexion de support',
'auth.error_google_failed': 'Échec de la connexion Google',
'auth.error_microsoft_failed': 'Échec de la connexion Microsoft',
// Dashboard
'dashboard.title': 'Écrans',
'dashboard.subtitle': 'Gérez vos écrans distants',
'dashboard.help_tip': 'Vos écrans appariés. Vert = en ligne, rouge = hors ligne. Cliquez sur un écran pour gérer sa liste de lecture, voir la télémétrie ou utiliser le contrôle à distance.',
'dashboard.add': 'Ajouter un écran',
'dashboard.create_group': '+ Groupe',
'dashboard.search': 'Rechercher des écrans...',
'dashboard.all_status': 'Tous les statuts',
'dashboard.online': 'En ligne',
'dashboard.offline': 'Hors ligne',
'dashboard.awaiting_pairing': 'En attente d\'appairage',
'dashboard.no_preview': 'Aperçu indisponible',
'dashboard.total_displays': 'Écrans totaux',
'dashboard.ungrouped': 'Sans groupe',
'dashboard.no_displays': 'Aucun écran pour le moment',
'dashboard.no_displays_desc': 'Installez l\'application ScreenTinker sur votre TV et appariez-la avec le bouton ci-dessus.',
'dashboard.failed_to_load': 'Échec du chargement des écrans',
'dashboard.unknown_playlist': 'Liste de lecture inconnue',
'dashboard.mixed_playlists': 'Listes mixtes',
'dashboard.playlist_label': 'Liste : {name}',
'dashboard.devices_count_one': '{n} appareil',
'dashboard.devices_count_other': '{n} appareils',
'dashboard.online_count': '{n} en ligne',
'dashboard.set_playlist_placeholder': 'Définir la liste...',
'dashboard.send_command_placeholder': 'Envoyer une commande...',
'dashboard.manage': 'Gérer',
'dashboard.manage_tooltip': 'Ajouter/retirer des appareils',
'dashboard.delete_group_tooltip': 'Supprimer le groupe',
'dashboard.no_devices_in_group': 'Aucun appareil dans ce groupe. Cliquez sur Gérer pour en ajouter.',
'dashboard.manage_group_subtitle': 'Cochez les appareils à ajouter à ce groupe',
'dashboard.draft_suffix': '(brouillon)',
'dashboard.cmd.screen_on': 'Allumer l\'écran',
'dashboard.cmd.screen_off': 'Éteindre l\'écran',
'dashboard.cmd.restart_app': 'Redémarrer l\'app',
'dashboard.cmd.check_update': 'Vérifier la mise à jour',
'dashboard.cmd.reboot': 'Redémarrer',
'dashboard.cmd.shutdown': 'Arrêter',
'dashboard.prompt_group_name': 'Nom du groupe :',
'dashboard.error_pairing_code': 'Saisissez un code d\'appairage valide à 6 chiffres',
'dashboard.confirm_add_to_group': '{name} est déjà dans : {groups}\n\nL\'ajouter aussi à « {target} » ?',
'dashboard.confirm_assign_playlist': 'Attribuer la liste « {playlist} » à tous les appareils de « {group} » ?',
'dashboard.confirm_destructive_command': '{cmd} les {n} appareils de « {group} » ?\n\nCette action est irréversible.',
'dashboard.confirm_delete_group': 'Supprimer ce groupe ? Les appareils ne seront pas affectés.',
'dashboard.toast.display_paired': 'Écran appairé avec succès !',
'dashboard.toast.group_created': 'Groupe créé',
'dashboard.toast.group_deleted': 'Groupe supprimé',
'dashboard.toast.already_in_group': '{name} est déjà dans {group}',
'dashboard.toast.moved_device': '{name} déplacé vers {group}',
'dashboard.toast.removed_device_one': '{name} retiré de 1 groupe',
'dashboard.toast.removed_device_other': '{name} retiré de {n} groupes',
'dashboard.toast.playlist_assigned_one': 'Liste attribuée à 1 appareil',
'dashboard.toast.playlist_assigned_other': 'Liste attribuée à {n} appareils',
'dashboard.toast.command_sent': '{cmd} envoyé à {sent}/{total} appareils',
'dashboard.toast.command_sent_with_offline': '{cmd} envoyé à {sent}/{total} appareils ({offline} hors ligne)',
// Content library
'content.title': 'Bibliothèque de contenu',
'content.subtitle': 'Téléversez et gérez vos fichiers multimédias',
'content.help_tip': 'Téléversez des vidéos et des images ici. Sélectionnez plusieurs fichiers pour un envoi groupé. Utilisez l\'URL distante pour diffuser depuis des sources externes. Cliquez sur une miniature pour prévisualiser.',
'content.drop': 'Déposez les fichiers ici ou cliquez pour téléverser',
'content.upload_hint': 'Prend en charge MP4, WebM, AVI, MKV, JPEG, PNG, GIF, WebP',
'content.upload_progress': 'Téléversement...',
'content.upload_progress_named': 'Téléversement de {name}...',
'content.upload_progress_named_pct': 'Téléversement de {name}... {pct}%',
'content.remote_url': 'URL distante',
'content.remote_desc': 'Diffusez directement depuis une URL. Économise la bande passante locale.',
'content.remote_url_placeholder': 'https://exemple.com/video.mp4',
'content.remote_name_placeholder': 'Nom à afficher (facultatif)',
'content.remote_add_btn': 'Ajouter une URL distante',
'content.youtube': 'YouTube',
'content.youtube_desc': 'Intégrez une vidéo YouTube sur vos écrans.',
'content.youtube_url_placeholder': 'https://youtube.com/watch?v=...',
'content.youtube_name_placeholder': 'Nom à afficher (facultatif)',
'content.youtube_add_btn': 'Ajouter une vidéo YouTube',
'content.search_placeholder': 'Rechercher du contenu...',
'content.new_folder_btn': '+ Nouveau dossier',
'content.breadcrumb_root': 'Tout le contenu',
'content.rename_btn': 'Renommer',
'content.delete_folder_btn': 'Supprimer le dossier',
'content.prompt_folder_name': 'Nom du dossier :',
'content.prompt_rename_folder': 'Renommer le dossier :',
'content.confirm_delete_folder': 'Supprimer ce dossier ? Le contenu retournera à la racine. Les sous-dossiers seront aussi supprimés.',
'content.empty_folder_title': 'Ce dossier est vide',
'content.empty_folder_desc': 'Glissez du contenu ici ou utilisez l\'action Déplacer.',
'content.no_content': 'Pas encore de contenu',
'content.no_content_desc': 'Téléversez des vidéos et des images pour commencer.',
'content.failed_to_load': 'Échec du chargement du contenu',
'content.type_youtube': 'YouTube',
'content.type_remote': 'URL distante',
'content.type_remote_short': 'Distant',
'content.type_video': 'Vidéo',
'content.type_image': 'Image',
'content.btn_edit': 'Modifier',
'content.btn_delete': 'Supprimer',
'content.btn_confirm_delete': 'Confirmer la suppression ?',
'content.btn_deleting': 'Suppression...',
'content.edit_modal_title': 'Modifier le contenu',
'content.label_filename': 'Nom du fichier / Affichage',
'content.label_remote_url_field': 'URL distante',
'content.label_mime_type': 'Type MIME',
'content.label_folder': 'Dossier',
'content.label_replace_file': 'Remplacer le fichier',
'content.replace_file_hint': 'Laissez vide pour conserver le fichier actuel',
'content.folder_root_option': '— Racine —',
'content.save_changes': 'Enregistrer les modifications',
'content.mime.video_mp4': 'Vidéo (MP4)',
'content.mime.video_webm': 'Vidéo (WebM)',
'content.mime.image_jpeg': 'Image (JPEG)',
'content.mime.image_png': 'Image (PNG)',
'content.mime.image_gif': 'Image (GIF)',
'content.mime.image_webp': 'Image (WebP)',
'content.error_enter_url': 'Saisissez une URL',
'content.error_enter_youtube_url': 'Saisissez une URL YouTube',
'content.error_update_failed': 'Échec de la mise à jour',
'content.toast.remote_added': 'Contenu distant ajouté',
'content.toast.youtube_added': 'Vidéo YouTube ajoutée',
'content.toast.deleted': 'Contenu supprimé',
'content.toast.updated': 'Contenu mis à jour',
'content.toast.uploaded_named': '{name} téléversé avec succès',
'content.toast.upload_failed_named': 'Échec du téléversement de {name} : {error}',
'content.toast.folder_created_named': 'Dossier « {name} » créé',
'content.toast.folder_renamed': 'Dossier renommé',
'content.toast.folder_deleted': 'Dossier supprimé',
'content.toast.moved': 'Déplacé',
'content.toast.moved_to_root': 'Déplacé à la racine',
// Device detail
'device.back': 'Retour aux écrans',
'device.owner_label': 'Propriétaire : {owner}',
'device.rename': 'Renommer',
'device.screenshot_btn': 'Capture',
'device.remove': 'Retirer',
'device.click_to_confirm': 'Cliquez à nouveau pour confirmer',
'device.prompt_new_name': 'Saisissez le nouveau nom :',
'device.confirm_discard_draft': 'Annuler toutes les modifications non publiées et revenir à la dernière version publiée ?',
'device.failed_load': 'Échec du chargement de l\'appareil',
'device.no_screenshot': 'Aucune capture disponible. Cliquez sur « Capture » pour en prendre une.',
'device.no_content_assigned': 'Aucun contenu attribué',
'device.now_playing_id': 'En lecture : {id}',
'device.playlist_count_one': '1 élément dans la liste',
'device.playlist_count_other': '{n} éléments dans la liste',
'device.tab.now_playing': 'En cours de lecture',
'device.tab.now_playing_tip': 'Capture en direct de ce qui s\'affiche sur cet appareil.',
'device.tab.playlist': 'Liste de lecture',
'device.tab.playlist_tip': 'Contenu attribué à cet appareil. Glissez pour réorganiser. Ajoutez des médias, widgets ou pages kiosque.',
'device.tab.info': 'Infos appareil',
'device.tab.info_tip': 'Télémétrie matérielle, orientation, notes et contrôles de l\'appareil.',
'device.tab.remote': 'Contrôle à distance',
'device.tab.remote_tip': 'Visualisez l\'écran en temps réel et envoyez des touches. Fonctionne sur l\'APK Android et le lecteur web.',
'device.draft.banner_title': 'Modifications non publiées',
'device.draft.devices_showing_published': 'Les appareils affichent encore la dernière version publiée.',
'device.draft.never_published': 'Cette liste n\'a jamais été publiée. Les appareils n\'afficheront rien jusqu\'à publication.',
'device.draft.discard': 'Annuler',
'device.draft.publish': 'Publier',
'device.draft.publishing': 'Publication...',
'device.layout.label': 'Mise en page',
'device.layout.fullscreen_default': 'Plein écran (par défaut)',
'device.layout.zones_count': '{name} ({n} zones)',
'device.layout.template_zones_count': '[Modèle] {name} ({n} zones)',
'device.layout.apply': 'Appliquer',
'device.playlist.label': 'Liste de lecture',
'device.playlist.no_playlist': 'Aucune liste',
'device.playlist.copy_to_btn': 'Copier vers...',
'device.playlist.add_content_btn': 'Ajouter du contenu',
'device.playlist.empty_title': 'Aucun contenu attribué',
'device.playlist.empty_desc': 'Ajoutez du contenu de votre bibliothèque à la liste de cet écran.',
'device.playlist_picker.with_count': '{name} — {n} éléments',
'device.playlist_picker.with_auto': '{name} (auto) — {n} éléments',
'device.info.status': 'Statut',
'device.info.ip_address': 'Adresse IP',
'device.info.battery': 'Batterie',
'device.info.storage': 'Stockage',
'device.info.size_free': '{size} libres',
'device.info.player_type': 'Type de lecteur',
'device.info.web_player': 'Lecteur web',
'device.info.wifi': 'WiFi',
'device.info.uptime': 'Disponibilité',
'device.info.android_version': 'Version d\'Android',
'device.info.app_version': 'Version de l\'app',
'device.info.screen_resolution': 'Résolution',
'device.info.ram': 'RAM',
'device.info.cpu_usage': 'Utilisation CPU',
'device.timeline.title': 'Disponibilité (24 dernières heures)',
'device.timeline.h24_ago': 'il y a 24h',
'device.timeline.now': 'Maintenant',
'device.timeline.online': 'En ligne',
'device.timeline.offline': 'Hors ligne',
'device.timeline.no_data': 'Aucune donnée',
'device.timeline.uptime_pct_tracked': '{pct}% disponible ({n}min suivies)',
'device.timeline.uptime_pct_no_data': '{pct}% disponible (aucune donnée)',
'device.form.orientation_label': 'Orientation / Rotation',
'device.form.orientation.landscape': 'Paysage (0°)',
'device.form.orientation.portrait': 'Portrait (90° SH)',
'device.form.orientation.landscape_flipped': 'Paysage retourné (180°)',
'device.form.orientation.portrait_flipped': 'Portrait retourné (270° SH)',
'device.form.default_content_label': 'Contenu par défaut',
'device.form.default_content_none': 'Aucun (afficher « En attente... »)',
'device.form.notes_label': 'Notes',
'device.form.notes_placeholder': 'Emplacement, détails d\'installation, etc.',
'device.form.save_settings': 'Enregistrer les paramètres',
'device.ctl.reboot_device': 'Redémarrer l\'appareil',
'device.ctl.screen_off': 'Éteindre l\'écran',
'device.ctl.screen_on': 'Allumer l\'écran',
'device.ctl.launch_player': 'Lancer le lecteur',
'device.ctl.force_update': 'Forcer la mise à jour',
'device.ctl.shutdown': 'Arrêter',
'device.remote.start_prompt': 'Cliquez sur « Démarrer » pour commencer',
'device.remote.start': 'Démarrer',
'device.remote.stop': 'Arrêter',
'device.remote.vol_up': 'Vol +',
'device.remote.vol_down': 'Vol -',
'device.remote.home': 'Accueil',
'device.remote.back': 'Retour',
'device.remote.recents': 'Récents',
'device.remote.power': 'Marche',
'device.remote.ok': 'OK',
'device.remote.settings': 'Paramètres',
'device.remote.scrn_off': 'Écr. off',
'device.remote.scrn_on': 'Écr. on',
'device.remote.enable_system_view': 'Activer la vue système',
'device.remote.system_view_tooltip': 'Demande à l\'utilisateur d\'autoriser la capture plein écran - permet de voir l\'écran d\'accueil, les paramètres et d\'autres apps',
'device.remote.system_view_hint': 'Approbation unique requise sur l\'appareil',
'device.remote.waiting_for_approval': 'Attente de l\'approbation de l\'appareil...',
'device.remote.system_view_enabled': 'Vue système activée',
'device.remote.unlocked_hint': 'Navigation et contrôles système débloqués',
'device.pl_item.widget_with_type': 'Widget ({type})',
'device.pl_item.youtube': 'YouTube',
'device.pl_item.video': 'Vidéo',
'device.pl_item.image': 'Image',
'device.pl_item.zone_label': 'Zone : {id}',
'device.pl_item.no_zone': 'Aucune zone',
'device.pl_item.mute': 'Muet',
'device.pl_item.unmute': 'Réactiver le son',
'device.pl_item.remove': 'Retirer',
'device.copy.no_other_devices': 'Aucun autre appareil vers lequel copier',
'device.copy.prompt': 'Copier la liste vers quel appareil ?\n\n{list}\n\nSaisissez le numéro :',
'device.copy.invalid_selection': 'Sélection invalide',
'device.copy.toast': '{n} éléments copiés vers {device}',
'device.assign.empty_all': 'Pas encore de contenu, widgets ou pages kiosque. Créez-en un d\'abord !',
'device.assign.modal_title': 'Ajouter à la liste',
'device.assign.zone_label': 'Zone',
'device.assign.zone_default': 'Par défaut (plein écran)',
'device.assign.duration_label': 'Durée (secondes, pour images/widgets)',
'device.assign.tab.media': 'Médias ({n})',
'device.assign.tab.widgets': 'Widgets ({n})',
'device.assign.tab.kiosk': 'Kiosque ({n})',
'device.assign.no_media': 'Aucun média téléversé',
'device.assign.no_widgets': 'Aucun widget créé.',
'device.assign.no_kiosk': 'Aucune page kiosque.',
'device.assign.create_one': 'Créez-en un',
'device.assign.add_selected': 'Ajouter la sélection',
'device.assign.select_first': 'Sélectionnez d\'abord un élément',
'device.assign.kiosk_widget_name': 'Kiosque : {name}',
'device.toast.screenshot_requested': 'Capture demandée',
'device.toast.renamed': 'Écran renommé',
'device.toast.removing': 'Suppression...',
'device.toast.removed': 'Écran retiré',
'device.toast.settings_saved': 'Paramètres enregistrés',
'device.toast.published': 'Liste publiée — appareils mis à jour',
'device.toast.draft_discarded': 'Modifications du brouillon annulées',
'device.toast.playlist_changed': 'Liste modifiée',
'device.toast.layout_applied': 'Mise en page appliquée',
'device.toast.switched_to_fullscreen': 'Passé en plein écran',
'device.toast.added_to_playlist': 'Ajouté à la liste',
'device.toast.unmuted': 'Son réactivé',
'device.toast.muted': 'Son coupé',
'device.toast.zone_updated': 'Zone mise à jour',
'device.toast.removed_from_playlist': 'Contenu retiré de la liste',
'device.toast.playlist_reordered': 'Liste réorganisée',
'device.toast.reboot_sent': 'Commande de redémarrage envoyée',
'device.toast.shutdown_sent': 'Commande d\'arrêt envoyée',
'device.toast.screen_off_sent': 'Commande d\'extinction de l\'écran envoyée',
'device.toast.screen_on_sent': 'Commande d\'allumage de l\'écran envoyée',
'device.toast.launch_sent': 'Commande de lancement envoyée',
'device.toast.update_triggered': 'Vérification de mise à jour déclenchée',
'device.toast.remote_started': 'Session de contrôle à distance démarrée',
// Settings
'settings.title': 'Paramètres',
'settings.subtitle': 'Configuration du serveur et informations d\'installation',
'settings.account': 'Compte',
'settings.save_profile': 'Enregistrer le profil',
'settings.change_password': 'Changer le mot de passe',
'settings.password_min_8': 'Doit contenir au moins 8 caractères.',
'settings.current_password': 'Mot de passe actuel',
'settings.new_password': 'Nouveau mot de passe',
'settings.confirm_new_password': 'Confirmer le nouveau mot de passe',
'settings.sso_note': 'Vous vous connectez via {provider}. Gérez votre mot de passe là-bas.',
'settings.license': 'Licence',
'settings.license_mit': 'Licence MIT - toutes les fonctionnalités incluses.',
'settings.platform_admin_link': 'Les outils d\'administration sont sur la page',
'settings.platform_admin_page_suffix': '.',
'settings.user_management': 'Gestion des utilisateurs',
'settings.loading_users': 'Chargement des utilisateurs...',
'settings.white_label': 'Marque blanche / Branding',
'settings.white_label_desc': 'Personnalisez l\'apparence du tableau de bord et du lecteur pour vos clients.',
'settings.brand_name': 'Nom de la marque',
'settings.logo_url': 'URL du logo',
'settings.primary_color': 'Couleur principale',
'settings.bg_color': 'Couleur de fond',
'settings.custom_domain': 'Domaine personnalisé',
'settings.favicon_url': 'URL du favicon',
'settings.custom_css': 'CSS personnalisé (facultatif)',
'settings.hide_branding': 'Masquer la marque « ScreenTinker »',
'settings.save_branding': 'Enregistrer le branding',
'settings.preview': 'Aperçu',
'settings.white_label_enterprise_only': 'Le branding personnalisé est disponible sur le plan Enterprise',
'settings.view_plans': 'Voir les plans',
'settings.server_info': 'Informations du serveur',
'settings.server_url': 'URL du serveur',
'settings.api_endpoint': 'Point de terminaison API',
'settings.server_url_hint': 'Utilisez cette URL pour configurer l\'app Android',
'settings.setup_guide': 'Guide d\'installation',
'settings.setup_step_1': 'Installez l\'APK ScreenTinker sur votre TV via le sideloading',
'settings.setup_step_2_prefix': 'Ouvrez l\'app et saisissez cette URL du serveur :',
'settings.setup_step_3': 'L\'app affichera un code d\'appairage à 6 chiffres',
'settings.setup_step_4': 'Cliquez sur « Ajouter un écran » et saisissez le code',
'settings.setup_step_5': 'Téléversez du contenu dans la Bibliothèque',
'settings.setup_step_6': 'Attribuez du contenu à la liste de l\'écran',
'settings.your_data': 'Vos données',
'settings.your_data_desc': 'Exportez ou importez vos appareils, contenu, mises en page, calendriers et tous les paramètres. Utilisez cela pour migrer entre cloud et auto-hébergé.',
'settings.export_my_data': 'Exporter mes données',
'settings.include_media_zip': 'Inclure les fichiers médias (ZIP)',
'settings.import_data': 'Importer des données',
'settings.language': 'Langue',
'settings.about': 'À propos',
'settings.about_tagline': 'Système de gestion d\'affichage dynamique.',
'settings.third_party_licenses': 'Licences tierces',
'settings.import.reading_file': 'Lecture du fichier...',
'settings.import.zip_detected': 'Export ZIP détecté : {name} ({size} Mo)
Contient données + fichiers médias.',
'settings.import.confirm': 'Confirmer l\'import',
'settings.import.invalid_file': 'Fichier invalide. Doit être un JSON ou ZIP d\'export ScreenTinker.',
'settings.import.summary_devices': '{n} appareils',
'settings.import.summary_content': '{n} contenus',
'settings.import.summary_widgets': '{n} widgets',
'settings.import.summary_layouts': '{n} mises en page',
'settings.import.summary_schedules': '{n} calendriers',
'settings.import.summary_walls': '{n} murs vidéo',
'settings.import.summary_kiosk': '{n} pages kiosque',
'settings.import.found_summary': 'Trouvé : {summary}.
De : {email} (exporté {date})',
'settings.import.empty_export': 'export vide',
'settings.import.uploading_zip': 'Téléversement et import... Cela peut prendre du temps pour les gros fichiers.',
'settings.import.importing': 'Import...',
'settings.import.complete': 'Import terminé : {imported}.',
'settings.import.pairing_codes_title': 'Codes d\'appairage :',
'settings.import.pairing_codes_hint': 'Saisissez ces codes sur chaque appareil pour les relier. Les attributions et calendriers seront préservés.',
'settings.import.failed': 'Échec de l\'import',
'settings.import.failed_with_error': 'Échec de l\'import : {error}',
'settings.import.read_failed': 'Échec de lecture du fichier : {error}',
'settings.toast.support_token_generated': 'Jeton de support généré (valide {hours}h)',
'settings.toast.import_success': 'Données importées avec succès',
'settings.toast.name_required': 'Le nom ne peut pas être vide',
'settings.toast.profile_saved': 'Profil enregistré',
'settings.toast.current_password_required': 'Saisissez votre mot de passe actuel',
'settings.toast.new_password_min_8': 'Le nouveau mot de passe doit comporter au moins 8 caractères',
'settings.toast.passwords_dont_match': 'Les nouveaux mots de passe ne correspondent pas',
'settings.toast.password_changed': 'Mot de passe changé',
'settings.toast.branding_saved': 'Branding enregistré',
'settings.toast.preview_applied': 'Aperçu appliqué (rechargez pour réinitialiser)',
'settings.toast.plan_updated': 'Plan mis à jour',
'settings.toast.user_removed': 'Utilisateur retiré',
'settings.user.col_user': 'Utilisateur',
'settings.user.col_auth': 'Auth',
'settings.user.col_role': 'Rôle',
'settings.user.col_plan': 'Plan',
'settings.user.col_actions': 'Actions',
'settings.user.remove': 'Retirer',
'settings.user.you': 'Vous',
'settings.user.confirm': 'Confirmer ?',
'settings.user.count_one': '1 utilisateur inscrit',
'settings.user.count_other': '{n} utilisateurs inscrits',
'settings.user.reset_password': 'Réinitialiser le mot de passe',
'settings.user.prompt_reset_password': 'Saisissez un nouveau mot de passe pour {email} (8 caractères minimum) :',
'settings.toast.password_reset_for_user': 'Mot de passe réinitialisé',
// Widgets
'widget.title': 'Widgets',
'widget.subtitle': 'Ajoutez du contenu dynamique à vos mises en page',
'widget.help_tip': 'Éléments de contenu dynamique : horloges, météo, tickers RSS, texte, pages web et flux sociaux. Créez un widget puis attribuez-le à la liste d\'un appareil.',
'widget.new_widget': 'Nouveau widget',
'widget.configure': 'Configurer le widget',
'widget.preview': 'Aperçu',
'widget.preview_title': 'Aperçu',
'widget.close': 'Fermer',
'widget.edit_x': 'Modifier {type}',
'widget.new_x': 'Nouveau {type}',
'widget.empty_title': 'Aucun widget pour le moment',
'widget.empty_desc': 'Créez un widget pour ajouter du contenu dynamique à vos mises en page.',
'widget.this_widget': 'ce widget',
'widget.confirm_delete': 'Supprimer « {name} » ? Cette action est irréversible.',
'widget.toast.saved': 'Widget enregistré',
'widget.toast.deleted': 'Widget supprimé',
'widget.toast.preview_failed': 'Échec de l\'aperçu',
'widget.type.clock.name': 'Horloge',
'widget.type.clock.desc': 'Horloge numérique avec date',
'widget.type.weather.name': 'Météo',
'widget.type.weather.desc': 'Conditions météo actuelles',
'widget.type.rss.name': 'Bandeau d\'actualités',
'widget.type.rss.desc': 'Flux RSS défilant',
'widget.type.text.name': 'Texte/HTML',
'widget.type.text.desc': 'Texte ou contenu HTML personnalisé',
'widget.type.webpage.name': 'Page web',
'widget.type.webpage.desc': 'Intégrer une page web',
'widget.type.social.name': 'Flux social',
'widget.type.social.desc': 'Flux de réseaux sociaux',
'widget.type.directory_board.name': 'Annuaire',
'widget.type.directory_board.desc': 'Annuaire défilant des locataires/salles pour halls',
'widget.field.name': 'Nom du widget',
'widget.field.format': 'Format',
'widget.field.format_12h': '12 heures',
'widget.field.format_24h': '24 heures',
'widget.field.timezone': 'Fuseau horaire',
'widget.field.font_size': 'Taille de police',
'widget.field.font_size_px': 'Taille de police (px)',
'widget.field.color': 'Couleur',
'widget.field.background': 'Fond',
'widget.field.location': 'Emplacement',
'widget.field.location_placeholder': 'Ville, Région',
'widget.field.units': 'Unités',
'widget.field.units_imperial': 'Impérial (°F)',
'widget.field.units_metric': 'Métrique (°C)',
'widget.field.feed_url': 'URL du flux',
'widget.field.scroll_speed_seconds': 'Vitesse de défilement (secondes)',
'widget.field.max_items': 'Éléments max',
'widget.field.html_content': 'Contenu HTML',
'widget.field.css_optional': 'CSS (facultatif)',
'widget.field.url': 'URL',
'widget.field.zoom_pct': 'Zoom (%)',
'widget.field.refresh_interval': 'Intervalle d\'actualisation (secondes, 0 = jamais)',
'widget.field.platform': 'Plateforme',
'widget.field.platform_twitter': 'Twitter/X',
'widget.field.platform_instagram': 'Instagram',
'widget.field.query': 'Requête',
'widget.field.query_placeholder': '@compte ou #hashtag',
'widget.picker.default_title': 'Sélectionner une image',
'widget.picker.select_logo': 'Sélectionner un logo',
'widget.picker.select_bg_images': 'Sélectionner des images de fond',
'widget.picker.search': 'Rechercher des images...',
'widget.picker.no_matches': 'Aucun résultat.',
'widget.picker.no_images': 'Aucune image dans votre bibliothèque. Téléversez d\'abord des images depuis la Bibliothèque.',
'widget.picker.selected_count': '{n} sélectionnées',
'widget.dir.title_label': 'Titre',
'widget.dir.title_placeholder': 'Entrepôt Lincoln',
'widget.dir.logo_label': 'Logo (facultatif)',
'widget.dir.footer_text_label': 'Texte de pied',
'widget.dir.footer_placeholder': 'Demandes de location : Contact...',
'widget.dir.bg_images_label': 'Images de fond (facultatif)',
'widget.dir.bg_images_hint': 'Les images alternent toutes les 15 secondes à 30 % d\'opacité. Ajoutez-en plusieurs pour la rotation.',
'widget.dir.add_bg_image': '+ Ajouter une image de fond',
'widget.dir.theme': 'Thème',
'widget.dir.theme_dark': 'Sombre',
'widget.dir.theme_light': 'Clair',
'widget.dir.scroll_speed': 'Vitesse de défilement',
'widget.dir.speed_slow': 'Lente',
'widget.dir.speed_medium': 'Moyenne',
'widget.dir.speed_fast': 'Rapide',
'widget.dir.columns': 'Colonnes',
'widget.dir.columns_auto': 'Auto',
'widget.dir.categories': 'Catégories',
'widget.dir.add_category': '+ Ajouter une catégorie',
'widget.dir.add_entry': '+ Ajouter une entrée',
'widget.dir.empty_categories': 'Ajoutez votre premier étage ou département pour commencer',
'widget.dir.no_entries': 'Pas encore d\'entrées',
'widget.dir.entry': 'entrée',
'widget.dir.entries': 'entrées',
'widget.dir.collapse': 'Réduire',
'widget.dir.expand': 'Développer',
'widget.dir.move_up': 'Monter',
'widget.dir.move_down': 'Descendre',
'widget.dir.delete_category': 'Supprimer la catégorie',
'widget.dir.delete_entry': 'Supprimer l\'entrée',
'widget.dir.unnamed': '(sans nom)',
'widget.dir.confirm_delete_category': 'Supprimer la catégorie « {name} » et toutes ses entrées ?',
'widget.dir.category_name_placeholder': 'ex. Premier étage',
'widget.dir.entry_id_placeholder': '101',
'widget.dir.entry_name_placeholder': 'Nom du locataire',
'widget.dir.entry_subtitle_placeholder': 'Détails (facultatif)',
'widget.dir.available': 'Disponible',
'widget.dir.change': 'Changer',
'widget.dir.choose_logo': 'Choisir un logo',
'widget.dir.remove_logo': 'Retirer',
'widget.dir.no_bg_images': 'Aucune image de fond sélectionnée',
'widget.dir.remove_bg': 'Retirer',
// Designer
'designer.title': 'Concepteur de contenu',
'designer.subtitle': 'Créez du contenu d\'affichage dynamique',
'designer.help_tip': 'Créez de l\'affichage personnalisé avec des éléments en direct : horloges, météo, tickers RSS, comptes à rebours, codes QR. Publiez comme widget ou exportez en PNG.',
'designer.load_design': 'Charger un design',
'designer.export_png': 'Exporter PNG',
'designer.publish': 'Publier dans la bibliothèque',
'designer.preview_hint': 'Cliquez sur les éléments pour les sélectionner. Glissez pour les repositionner. L\'aperçu se met à jour en temps réel.',
'designer.add_element': 'Ajouter un élément',
'designer.background': 'Fond',
'designer.bg_image': 'Image',
'designer.properties': 'Propriétés',
'designer.layers': 'Calques',
'designer.no_elements': 'Pas encore d\'éléments',
'designer.save_design_file': 'Enregistrer le fichier de design',
'designer.qr_label': 'CODE QR',
'designer.loading_news': 'Chargement des actualités...',
'designer.no_items': 'Aucun élément',
'designer.feed_unavailable': 'Flux indisponible',
'designer.countdown_now': 'MAINTENANT !',
'designer.widget_name': 'Design {date}',
'designer.el.text': 'Texte',
'designer.el.heading': 'Titre',
'designer.el.image': 'Image',
'designer.el.video': 'Vidéo',
'designer.el.clock': 'Horloge',
'designer.el.date': 'Date',
'designer.el.weather': 'Météo',
'designer.el.ticker': 'Bandeau',
'designer.el.shape': 'Forme',
'designer.el.qr': 'Code QR',
'designer.el.countdown': 'Compte à rebours',
'designer.el.webpage': 'Page web',
'designer.bg.black': 'Noir',
'designer.bg.dark_blue': 'Bleu sombre',
'designer.bg.dark_gradient': 'Dégradé sombre',
'designer.bg.blue_gradient': 'Dégradé bleu',
'designer.bg.sunset': 'Coucher de soleil',
'designer.bg.ocean': 'Océan',
'designer.bg.forest': 'Forêt',
'designer.bg.dark_red': 'Rouge sombre',
'designer.bg.white': 'Blanc',
'designer.default.text': 'Votre texte ici',
'designer.default.heading': 'TITRE',
'designer.default.coming_soon': 'Bientôt',
'designer.prompt.video_url': 'URL de la vidéo (MP4) :',
'designer.prompt.weather_location': 'Ville, Région :',
'designer.prompt.rss_url': 'URL du flux RSS :',
'designer.prompt.qr_url': 'URL du code QR :',
'designer.prompt.countdown_date': 'Date cible (AAAA-MM-JJ) :',
'designer.prompt.webpage_url': 'URL de la page web :',
'designer.prop.text': 'Texte',
'designer.prop.size': 'Taille',
'designer.prop.font': 'Police',
'designer.prop.color': 'Couleur',
'designer.prop.bold': 'Gras',
'designer.prop.shadow': 'Ombre',
'designer.prop.format': 'Format',
'designer.prop.show_seconds': 'Afficher les secondes',
'designer.prop.muted': 'Muet',
'designer.prop.loop': 'Boucle',
'designer.prop.opacity': 'Opacité',
'designer.prop.shape': 'Forme',
'designer.prop.location': 'Emplacement',
'designer.prop.feed_url': 'URL du flux',
'designer.prop.speed': 'Vitesse (secondes)',
'designer.prop.text_color': 'Couleur du texte',
'designer.prop.bg_color': 'Couleur de fond',
'designer.prop.target_date': 'Date cible',
'designer.prop.label': 'Étiquette',
'designer.toast.published': 'Publié comme widget ! Attribuez-le à une zone de mise en page.',
'designer.toast.publish_failed': 'Échec de la publication',
'designer.toast.export_failed': 'Échec de l\'export : {error}',
'designer.toast.loaded': 'Design chargé',
'designer.toast.invalid_file': 'Fichier de design invalide',
// Playlists
'playlist.title': 'Listes de lecture',
'playlist.subtitle': 'Créez et gérez des listes de contenu',
'playlist.show_auto_generated': 'Afficher les listes auto',
'playlist.new_playlist_btn': '+ Nouvelle liste',
'playlist.new_playlist': 'Nouvelle liste',
'playlist.empty_title': 'Pas encore de listes',
'playlist.empty_desc': 'Créez votre première liste pour organiser le contenu de vos écrans.',
'playlist.all_auto_generated': 'Toutes les listes sont auto-générées. Cochez « Afficher les listes auto » pour les voir.',
'playlist.tag_auto': 'auto',
'playlist.tag_draft': 'brouillon',
'playlist.item_count_one': '1 élément',
'playlist.item_count_other': '{n} éléments',
'playlist.created_at': 'Créée {date}',
'playlist.display_count_one': '1 écran',
'playlist.display_count_other': '{n} écrans',
'playlist.assigned_to_one': 'Attribuée à 1 écran',
'playlist.assigned_to_other': 'Attribuée à {n} écrans',
'playlist.load_failed': 'Échec du chargement des listes : {error}',
'playlist.back_to_playlists': 'Retour aux listes',
'playlist.name_placeholder': 'Nom de la liste',
'playlist.desc_placeholder': 'Description (facultatif)',
'playlist.create_btn': 'Créer',
'playlist.add_desc_placeholder': 'Ajouter une description...',
'playlist.click_to_rename': 'Cliquer pour renommer',
'playlist.click_to_edit_desc': 'Cliquer pour modifier la description',
'playlist.add_content': '+ Ajouter du contenu',
'playlist.delete_playlist': 'Supprimer la liste',
'playlist.back': 'Retour',
'playlist.items_empty': 'Cette liste est vide',
'playlist.items_empty_hint': 'Cliquez sur « Ajouter du contenu » pour ajouter des éléments.',
'playlist.duration': 'Durée',
'playlist.sec': 'sec',
'playlist.move_up': 'Monter',
'playlist.move_down': 'Descendre',
'playlist.remove_item': 'Retirer l\'élément',
'playlist.item_widget': 'Widget',
'playlist.unknown_type': 'Type inconnu',
'playlist.confirm_delete': 'Supprimer « {name} » ? Cette action est irréversible.',
'playlist.confirm_discard_draft': 'Annuler toutes les modifications non publiées et revenir à la dernière version publiée ?',
'playlist.draft.banner_title': 'Modifications non publiées',
'playlist.draft.devices_showing_published': 'Les appareils affichent encore la dernière version publiée.',
'playlist.draft.never_published': 'Cette liste n\'a jamais été publiée. Les appareils n\'afficheront rien jusqu\'à publication.',
'playlist.draft.discard_changes': 'Annuler les modifications',
'playlist.draft.publish': 'Publier',
'playlist.draft.publishing': 'Publication...',
'playlist.toast.created': 'Liste créée',
'playlist.toast.deleted': 'Liste supprimée',
'playlist.toast.published': 'Liste publiée — appareils mis à jour',
'playlist.toast.draft_discarded': 'Modifications du brouillon annulées',
'playlist.toast.item_removed': 'Élément retiré',
'playlist.add_modal_title': 'Ajouter du contenu à la liste',
'playlist.tab_content': 'Contenu',
'playlist.tab_widgets': 'Widgets',
'playlist.search_placeholder': 'Rechercher...',
'playlist.close': 'Fermer',
'playlist.no_content_found': 'Aucun contenu trouvé',
'playlist.no_widgets_found': 'Aucun widget trouvé',
'playlist.add_btn': 'Ajouter',
'playlist.adding': 'Ajout...',
'playlist.added': 'Ajouté',
// Onboarding
'onboarding.back': 'Retour',
'onboarding.next': 'Suivant',
'onboarding.skip': 'Ignorer l\'assistant',
'onboarding.go_to_dashboard': 'Aller au tableau de bord',
'onboarding.pair_display': 'Apparier l\'écran',
'onboarding.step.welcome.title': 'Bienvenue sur ScreenTinker !',
'onboarding.step.welcome.intro': 'Configurons tout en moins de 5 minutes.',
'onboarding.step.welcome.guide_through': 'Cet assistant vous guidera à travers :',
'onboarding.step.welcome.bullet_download': 'Télécharger l\'app du lecteur',
'onboarding.step.welcome.bullet_pair': 'Apparier votre premier écran',
'onboarding.step.welcome.bullet_upload': 'Téléverser et attribuer du contenu',
'onboarding.step.player.title': 'Étape 1 : Obtenez l\'app du lecteur',
'onboarding.step.player.intro': 'Installez le lecteur sur votre appareil d\'affichage.',
'onboarding.step.player.android_label': 'APK Android',
'onboarding.step.player.android_desc': 'Boîtiers TV, tablettes, Fire TV',
'onboarding.step.player.web_label': 'Lecteur web',
'onboarding.step.player.web_desc': 'Tout navigateur, Pi, ChromeOS',
'onboarding.step.player.url_hint': 'Ouvrez l\'app sur votre écran et saisissez cette URL du serveur :',
'onboarding.step.pair.title': 'Étape 2 : Appariez votre écran',
'onboarding.step.pair.intro': 'Saisissez le code à 6 chiffres affiché sur votre écran.',
'onboarding.step.pair.name_placeholder': 'Nom (ex. TV du hall)',
'onboarding.step.upload.title': 'Étape 3 : Téléversez du contenu',
'onboarding.step.upload.intro': 'Téléversez une vidéo ou une image à afficher.',
'onboarding.step.upload.click_to_select': 'Cliquez pour sélectionner un fichier',
'onboarding.step.upload.formats': 'MP4, WebM, JPEG, PNG, GIF',
'onboarding.step.upload.uploading': 'Téléversement...',
'onboarding.step.done.title': 'Tout est prêt !',
'onboarding.step.done.intro': 'Votre écran est apparié et le contenu est en lecture !',
'onboarding.step.done.whats_next': 'Et après ?',
'onboarding.step.done.next_content': 'Ajoutez plus de contenu dans la Bibliothèque',
'onboarding.step.done.next_layouts': 'Créez des mises en page multi-zones dans Mises en page',
'onboarding.step.done.next_schedule': 'Configurez un calendrier dans Calendrier',
'onboarding.step.done.next_widgets': 'Ajoutez des widgets en direct (horloge, météo, ticker) dans Widgets',
'onboarding.step.done.next_kiosk': 'Créez des écrans interactifs dans Kiosque',
'onboarding.step.done.next_designer': 'Concevez du contenu personnalisé dans le Concepteur',
'onboarding.toast.invalid_code': 'Saisissez un code valide à 6 chiffres',
'onboarding.toast.pairing': 'Appairage...',
'onboarding.toast.pair_failed': 'Échec de l\'appairage',
'onboarding.toast.pair_failed_with_error': 'Échec de l\'appairage : {error}',
'onboarding.toast.paired': 'Écran apparié !',
'onboarding.toast.uploaded_assigning': 'Téléversé ! Attribution à l\'écran...',
'onboarding.toast.content_assigned': 'Contenu téléversé et attribué !',
'onboarding.toast.upload_failed': 'Échec du téléversement',
'onboarding.toast.error_with_error': 'Erreur : {error}',
// Admin
'admin.title': 'Administration de la plateforme',
'admin.subtitle': 'Contrôles superadmin - vous seul pouvez voir ceci',
'admin.access_denied': 'Accès refusé',
'admin.access_denied_desc': 'Accès administrateur plateforme requis.',
'admin.all_users': 'Tous les utilisateurs',
'admin.plans': 'Plans d\'abonnement',
'admin.system': 'Système',
'admin.col.user': 'Utilisateur',
'admin.col.auth': 'Auth',
'admin.col.last_login': 'Dernière connexion',
'admin.col.role': 'Rôle',
'admin.col.plan': 'Plan',
'admin.col.actions': 'Actions',
'admin.col.devices': 'Appareils',
'admin.col.storage': 'Stockage',
'admin.col.monthly': 'Mensuel',
'admin.col.yearly': 'Annuel',
'admin.role.user': 'Utilisateur',
'admin.role.admin': 'Admin',
'admin.role.superadmin': 'Superadmin',
'admin.remove': 'Retirer',
'admin.owner': 'Propriétaire',
'admin.confirm': 'Confirmer ?',
'admin.total_users': '{n} utilisateurs au total',
'admin.unlimited': 'Illimité',
'admin.free': 'Gratuit',
'admin.version': 'Version',
'admin.frontend_hash': 'Hash du frontend',
'admin.download_db_backup': 'Télécharger la sauvegarde BDD',
'admin.server_status': 'État du serveur',
'admin.toast.role_updated': 'Rôle mis à jour',
'admin.toast.plan_updated': 'Plan mis à jour',
'admin.toast.user_removed': 'Utilisateur retiré',
'admin.reset_password': 'Réinitialiser le mot de passe',
'admin.prompt_reset_password': 'Saisissez un nouveau mot de passe pour {email} (8 caractères minimum) :',
'admin.toast.password_min_8': 'Le mot de passe doit comporter au moins 8 caractères',
'admin.toast.password_reset': 'Mot de passe réinitialisé',
// Schedule
'schedule.title': 'Calendrier',
'schedule.subtitle': 'Calendrier de programmation du contenu',
'schedule.help_tip': 'Calendrier hebdomadaire visuel pour la programmation. Cliquez sur Ajouter une plage pour créer des créneaux. La récurrence permet de répéter du contenu. La priorité plus haute prime. Les plages au niveau appareil priment sur celles de groupe.',
'schedule.prev_week': '< Préc',
'schedule.next_week': 'Suiv >',
'schedule.add_schedule': 'Ajouter une plage',
'schedule.edit_schedule': 'Modifier la plage',
'schedule.apply_to': 'Appliquer à',
'schedule.target_device': 'Appareil',
'schedule.target_group': 'Groupe',
'schedule.group_devices_count': '{n} appareils',
'schedule.no_groups_msg': 'Aucun groupe créé. Créez-en sur la page Écrans.',
'schedule.zone_note': 'Note : les plages par zone dépendent de la mise en page. Assurez-vous que tous les appareils du groupe utilisent la même.',
'schedule.playlist_override': 'Liste prioritaire',
'schedule.no_playlist_override': '— Pas de liste prioritaire —',
'schedule.draft_suffix': '(brouillon)',
'schedule.layout_override': 'Mise en page prioritaire',
'schedule.no_layout_override': '— Pas de mise en page prioritaire —',
'schedule.content_label': 'Contenu',
'schedule.content_hint': '(élément unique, facultatif)',
'schedule.content_none': '— Aucun —',
'schedule.title_label': 'Titre (facultatif)',
'schedule.title_placeholder': 'ex. Liste matin',
'schedule.start_time': 'Début',
'schedule.end_time': 'Fin',
'schedule.repeat': 'Répéter',
'schedule.repeat_none': 'Ne pas répéter',
'schedule.repeat_daily': 'Quotidien',
'schedule.repeat_weekdays': 'Jours ouvrables',
'schedule.repeat_weekends': 'Week-ends',
'schedule.repeat_weekly': 'Hebdomadaire',
'schedule.priority': 'Priorité',
'schedule.color': 'Couleur',
'schedule.scheduled_label': 'Programmé',
'schedule.tooltip_group_prefix': 'Groupe : ',
'schedule.tooltip_priority': 'Priorité : {n}',
'schedule.day.sun': 'Dim',
'schedule.day.mon': 'Lun',
'schedule.day.tue': 'Mar',
'schedule.day.wed': 'Mer',
'schedule.day.thu': 'Jeu',
'schedule.day.fri': 'Ven',
'schedule.day.sat': 'Sam',
'schedule.hour_12am': '00h',
'schedule.hour_am': 'h',
'schedule.hour_12pm': '12h',
'schedule.hour_pm': 'h',
'schedule.toast.no_groups': 'Aucun groupe disponible. Créez-en un d\'abord.',
'schedule.toast.saved': 'Plage enregistrée',
// Reports
'report.title': 'Rapports',
'report.subtitle': 'Analyses de lecture et disponibilité des appareils',
'report.help_tip': 'Analyses de lecture. Voyez ce qui a été lu, quand et sur quel appareil. Filtrez par période et appareil. Export CSV pour vérification.',
'report.export_csv': 'Exporter CSV',
'report.device': 'Appareil',
'report.all_devices': 'Tous les appareils',
'report.start_date': 'Date de début',
'report.end_date': 'Date de fin',
'report.load_report': 'Charger le rapport',
'report.select_range': 'Sélectionnez une période et cliquez sur Charger le rapport',
'report.error': 'Erreur',
'report.total_plays': 'Lectures totales',
'report.total_hours': 'Heures totales',
'report.unique_content': 'Contenu unique',
'report.active_devices': 'Appareils actifs',
'report.avg_duration': 'Durée moyenne',
'report.plays_per_day': 'Lectures par jour',
'report.plays_by_hour': 'Lectures par heure',
'report.top_content': 'Contenu le plus lu',
'report.by_device': 'Par appareil',
'report.no_data': 'Aucune donnée',
'report.col.content': 'Contenu',
'report.col.device': 'Appareil',
'report.col.plays': 'Lectures',
'report.col.total_hours': 'Heures totales',
'report.col.completion': 'Achèvement',
// Kiosk
'kiosk.title': 'Pages kiosque',
'kiosk.subtitle': 'Créez des interfaces tactiles interactives',
'kiosk.help_tip': 'Créez des interfaces tactiles interactives. Ajoutez des boutons avec icônes et actions. Inclut un écran d\'attente après inactivité. Attribuez aux appareils comme widget.',
'kiosk.new_page': 'Nouvelle page kiosque',
'kiosk.prompt_name': 'Nom de la page kiosque :',
'kiosk.empty_title': 'Aucune page kiosque',
'kiosk.empty_desc': 'Créez une interface tactile interactive pour vos écrans.',
'kiosk.label': 'Page kiosque',
'kiosk.preview': 'Aperçu',
'kiosk.confirm_delete': 'Supprimer la page « {name} » ? Cette action est irréversible.',
'kiosk.toast.deleted': 'Page supprimée',
'kiosk.toast.delete_failed': 'Échec de la suppression',
'kiosk.toast.saved': 'Page enregistrée',
'kiosk.not_found': 'Page introuvable',
'kiosk.back': 'Retour aux pages',
'kiosk.page_settings': 'Paramètres de la page',
'kiosk.title_label': 'Titre',
'kiosk.subtitle_label': 'Sous-titre',
'kiosk.logo_url': 'URL du logo',
'kiosk.footer_text': 'Texte de pied',
'kiosk.idle_title': 'Titre écran d\'attente',
'kiosk.idle_default': 'Touchez pour commencer',
'kiosk.idle_timeout': 'Délai d\'inactivité (secondes)',
'kiosk.style': 'Style',
'kiosk.background': 'Fond',
'kiosk.text_color': 'Couleur du texte',
'kiosk.columns': 'Colonnes',
'kiosk.button_color': 'Couleur des boutons',
'kiosk.button_hover': 'Couleur survol',
'kiosk.buttons': 'Boutons',
'kiosk.add_btn': '+ Ajouter',
'kiosk.icon_placeholder': 'Emoji',
'kiosk.label_placeholder': 'Étiquette',
'kiosk.sublabel_placeholder': 'Sous-étiquette',
'kiosk.action_none': 'Aucune action',
'kiosk.action_url': 'Ouvrir l\'URL',
'kiosk.action_page': 'Aller à la page',
'kiosk.url_placeholder': 'URL ou page',
'kiosk.no_buttons': 'Aucun bouton',
'kiosk.new_button': 'Nouveau bouton',
// Layout editor
'layout.title': 'Mises en page',
'layout.subtitle': 'Mises en page d\'écran et modèles',
'layout.help_tip': 'Créez des mises en page multi-zones. Utilisez des modèles ou créez les vôtres. Glissez les zones pour positionner, redimensionnez avec la poignée. Attribuez les mises en page aux appareils depuis l\'onglet Liste.',
'layout.new_layout': 'Nouvelle mise en page',
'layout.templates': 'Modèles',
'layout.my_layouts': 'Mes mises en page',
'layout.empty_custom': 'Aucune mise en page personnalisée',
'layout.prompt_name': 'Nom de la mise en page :',
'layout.default_zone_name': 'Principal',
'layout.template_label': 'Modèle',
'layout.use_template': 'Utiliser le modèle',
'layout.zone_count_one': '1 zone',
'layout.zone_count_other': '{n} zones',
'layout.confirm_delete': 'Supprimer la mise en page « {name} » ? Cette action est irréversible.',
'layout.toast.deleted': 'Mise en page supprimée',
'layout.toast.delete_failed': 'Échec de la suppression',
'layout.toast.saved': 'Mise en page enregistrée',
'layout.not_found': 'Mise en page introuvable',
'layout.back': 'Retour aux mises en page',
'layout.add_zone': 'Ajouter une zone',
'layout.zones': 'Zones',
'layout.properties': 'Propriétés',
'layout.delete_zone': 'Supprimer la zone',
'layout.zone_n': 'Zone {n}',
'layout.prop.name': 'Nom',
'layout.prop.x': 'X (%)',
'layout.prop.y': 'Y (%)',
'layout.prop.width': 'Largeur (%)',
'layout.prop.height': 'Hauteur (%)',
'layout.prop.type': 'Type',
'layout.type_content': 'Contenu',
'layout.type_widget': 'Widget',
// Video walls
'wall.title': 'Murs vidéo',
'wall.subtitle': 'Combinez plusieurs écrans en un seul grand',
'wall.help_tip': 'Combinez plusieurs écrans en un seul grand. Définissez la grille, glissez les appareils, ajustez la compensation de cadre. Attribuez du contenu pour la lecture sur tous les appareils.',
'wall.new_wall': 'Nouveau mur vidéo',
'wall.prompt_name': 'Nom du mur vidéo :',
'wall.empty_title': 'Aucun mur vidéo',
'wall.empty_desc': 'Créez un mur vidéo pour combiner plusieurs écrans.',
'wall.grid_summary': 'Grille {cols}x{rows} • {n} appareils',
'wall.not_found': 'Mur introuvable',
'wall.back': 'Retour aux murs',
'wall.delete_wall': 'Supprimer le mur',
'wall.grid_config': 'Configuration de la grille',
'wall.columns': 'Colonnes',
'wall.rows': 'Lignes',
'wall.h_bezel': 'Cadre H (mm)',
'wall.v_bezel': 'Cadre V (mm)',
'wall.update': 'Mettre à jour',
'wall.content': 'Contenu',
'wall.no_content': 'Aucun contenu',
'wall.set_content': 'Définir le contenu',
'wall.available_displays': 'Écrans disponibles',
'wall.all_assigned': 'Tous les appareils attribués',
'wall.drop_here': 'Déposer ici',
'wall.toast.placed': '{name} placé en [{col},{row}]',
'wall.toast.grid_updated': 'Grille mise à jour',
'wall.toast.content_updated': 'Contenu mis à jour',
'wall.toast.deleted': 'Mur supprimé',
// Billing
'billing.title': 'Abonnement',
'billing.subtitle': 'Gérez votre plan et votre facturation',
'billing.current_plan': 'Plan actuel',
'billing.self_hosted': 'Auto-hébergé',
'billing.trial_days_left': 'Essai - {n} jours restants',
'billing.trial_ends': 'Votre essai {plan} se termine dans {n} jours',
'billing.trial_after': 'Après l\'essai, vous passerez au plan Gratuit (1 appareil). Mettez à niveau maintenant pour conserver vos appareils et fonctionnalités.',
'billing.devices': 'Appareils',
'billing.devices_lc': 'appareils',
'billing.storage': 'Stockage',
'billing.storage_lc': 'stockage',
'billing.features': 'Fonctionnalités',
'billing.feat.remote_control': 'Contrôle à distance',
'billing.feat.remote_urls': 'URLs distantes',
'billing.feat.priority_support': 'Support prioritaire',
'billing.available_plans': 'Plans disponibles',
'billing.current': 'Actuel',
'billing.unlimited': 'Illimité',
'billing.free': 'Gratuit',
'billing.per_month': '/mois',
'billing.yearly_save': 'ou {price} $/an (économisez {pct} %)',
'billing.monthly': 'Mensuel',
'billing.yearly': 'Annuel',
'billing.manage_subscription': 'Gérer l\'abonnement',
'billing.self_hosted_note': 'Mode auto-hébergé : les plans peuvent être attribués par les administrateurs sans facturation.',
'billing.failed_to_load': 'Échec du chargement',
'billing.toast.checkout_failed': 'Échec du paiement : {error}',
'billing.toast.portal_failed': 'Échec d\'ouverture du portail : {error}',
'billing.toast.payment_success': 'Paiement réussi ! Votre plan a été mis à niveau.',
// Teams
'team.title': 'Équipes',
'team.subtitle': 'Gérez les équipes et l\'accès partagé',
'team.help_tip': 'Créez des équipes pour partager des appareils. Les propriétaires gèrent l\'équipe, les éditeurs modifient le contenu/listes, les spectateurs ne font que surveiller.',
'team.new_team': 'Nouvelle équipe',
'team.prompt_name': 'Nom de l\'équipe :',
'team.empty_title': 'Aucune équipe',
'team.empty_desc': 'Créez une équipe pour partager des appareils avec d\'autres utilisateurs.',
'team.your_role': 'Votre rôle : {role}',
'team.member_count_one': '1 membre',
'team.member_count_other': '{n} membres',
'team.not_found': 'Équipe introuvable',
'team.back': 'Retour aux équipes',
'team.delete_team': 'Supprimer l\'équipe',
'team.members_count': 'Membres ({n})',
'team.invite': '+ Inviter',
'team.role_viewer': 'Spectateur',
'team.role_editor': 'Éditeur',
'team.role_owner': 'Propriétaire',
'team.remove': 'Retirer',
'team.remove_from_team': 'Retirer de l\'équipe',
'team.no_members': 'Aucun membre',
'team.shared_devices': 'Appareils partagés ({n})',
'team.add_device': '+ Ajouter un appareil...',
'team.no_devices': 'Aucun appareil partagé avec cette équipe',
'team.prompt_email': 'E-mail à inviter :',
'team.prompt_role': 'Rôle (viewer, editor ou owner) :',
'team.toast.invalid_role': 'Rôle invalide',
'team.toast.invitation_sent': 'Invitation envoyée',
'team.toast.role_updated': 'Rôle mis à jour',
'team.toast.member_removed': 'Membre retiré',
'team.toast.device_added': 'Appareil ajouté à l\'équipe',
'team.toast.device_removed': 'Appareil retiré de l\'équipe',
'team.toast.deleted': 'Équipe supprimée',
// Activity
'activity.title': 'Journal d\'activité',
'activity.subtitle': 'Audit de toutes les actions',
'activity.load_more': 'Charger plus',
'activity.empty_title': 'Aucune activité',
'activity.empty_desc': 'Les actions apparaîtront ici au fur et à mesure de votre utilisation.',
'activity.system': 'Système',
'activity.verb_created': 'a créé',
'activity.verb_updated': 'a mis à jour',
'activity.verb_deleted': 'a supprimé',
'activity.action_paired_device': 'a apparié un appareil',
'activity.action_added_remote_content': 'a ajouté du contenu distant',
'activity.noun_content': 'contenu',
'activity.noun_device': 'appareil',
'activity.noun_playlist_assignment': 'attribution de liste',
'activity.noun_assignment': 'attribution',
'activity.noun_layout': 'mise en page',
'activity.noun_widget': 'widget',
'activity.noun_schedule': 'plage horaire',
'activity.noun_video_wall': 'mur vidéo',
'activity.alert_device_offline': 'alerte : appareil hors ligne',
// Help
'help.title': 'Centre d\'aide',
'help.subtitle': 'Guides rapides et FAQ',
'help.faq': 'Questions fréquentes',
'help.shortcuts': 'Raccourcis clavier',
'help.shortcut_esc': 'Réinitialiser le lecteur web (sur la page du lecteur)',
'help.shortcut_f': 'Basculer le plein écran (lecteur web)',
// Add Display modal
'add_display.title': 'Ajouter un écran',
'add_display.intro': 'Saisissez le code d\'appairage à 6 chiffres affiché sur l\'écran.',
'add_display.pairing_code': 'Code d\'appairage',
'add_display.display_name': 'Nom (facultatif)',
'add_display.name_placeholder': 'ex. TV du hall',
'add_display.need_player': 'Besoin d\'une app de lecture ? Installez-en une pour obtenir un code :',
'add_display.android_apk': 'APK Android',
'add_display.web_player': 'Lecteur web',
'add_display.raspberry_pi': 'Raspberry Pi',
'add_display.windows': 'Windows',
'add_display.smart_tv_note': 'Smart TVs (LG/Samsung) : ouvrez le navigateur intégré et allez à /player',
'add_display.pair_btn': 'Apparier l\'écran',
};