pgkiln 0.58.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1383,4 +1383,405 @@ export const fr: BuilderMessages = {
1383
1383
  'st.saved': 'Enregistré.',
1384
1384
  'st.settings_saved': 'Paramètres enregistrés.',
1385
1385
  'st.app_deleted': 'Application supprimée.',
1386
+ // ------------------------------------------------------------ Users and identity providers (sprint 125)
1387
+ 'us.hints_none': 'Cette application ne vérifie encore aucun rôle. Les rôles ne comptent que là où un schéma d’autorisation ou {fn} les vérifie (Shared Components → Schémas d’autorisation).',
1388
+ 'us.hints_label': 'Rôles que vérifie cette application',
1389
+ 'us.hints_add': 'Ajouter',
1390
+ 'us.hints_app': '{app} vérifie',
1391
+ 'us.title': 'Utilisateurs',
1392
+ 'us.providers_btn': 'Fournisseurs d’identité (authentification unique)',
1393
+ 'us.ldap_btn': 'Annuaires LDAP',
1394
+ 'us.intro': 'Un compte par personne. Donnez aux comptes l’accès aux applications, avec des rôles par application, ici ou sous {where} d’une application.',
1395
+ 'us.access_path': 'Shared Components → Contrôle d’accès',
1396
+ 'us.accounts': 'Comptes',
1397
+ 'us.search_ph': 'Rechercher un nom, un identifiant ou un e-mail…',
1398
+ 'us.search_label': 'Rechercher des comptes',
1399
+ 'us.search': 'Rechercher',
1400
+ 'us.username': 'Nom d’utilisateur',
1401
+ 'us.name': 'Nom',
1402
+ 'us.apps_roles': 'Applications (rôles)',
1403
+ 'us.applications': 'Applications',
1404
+ 'us.signin': 'Connexion',
1405
+ 'us.status': 'Statut',
1406
+ 'us.none': 'aucune',
1407
+ 'us.password': 'mot de passe',
1408
+ 'us.no_password': 'pas de mot de passe',
1409
+ 'us.active': 'actif',
1410
+ 'us.inactive': 'inactif',
1411
+ 'us.last': 'dernier {at}',
1412
+ 'us.no_accounts': 'Aucun compte trouvé.',
1413
+ 'us.create': 'Créer un compte',
1414
+ 'us.username_help': 'Sans espaces ni deux-points ; insensible à la casse.',
1415
+ 'us.email': 'E-mail',
1416
+ 'us.password_label': 'Mot de passe',
1417
+ 'us.password_help': 'Au moins 8 caractères. Laissez vide pour les comptes qui ne se connectent que par authentification unique.',
1418
+ 'us.must_change': 'Exiger le changement du mot de passe à la première utilisation',
1419
+ 'us.settings': 'Paramètres des comptes',
1420
+ 'us.min_length': 'Longueur minimale du mot de passe',
1421
+ 'us.lifetime': 'Durée de validité du mot de passe (jours)',
1422
+ 'us.lifetime_help': 'Après ce nombre de jours, les utilisateurs doivent choisir un nouveau mot de passe à la connexion. 0 = jamais.',
1423
+ 'us.mixed': 'Les mots de passe doivent contenir des lettres et des chiffres',
1424
+ 'us.policy_note': 'Les mots de passe ne peuvent jamais contenir le nom d’utilisateur. La connexion est bloquée {minutes} minutes après {failures} échecs (Utilitaires de l’espace de travail → Paramètres de l’instance) ; Débloquer sur un compte la lève.',
1425
+ 'us.save_settings': 'Enregistrer les paramètres',
1426
+ 'us.created': 'Compte créé. Donnez-lui maintenant accès à des applications.',
1427
+ 'us.exists': 'Un compte avec ce nom d’utilisateur existe déjà.',
1428
+ 'us.settings_saved': 'Paramètres des comptes enregistrés.',
1429
+ 'us.details': 'Détails',
1430
+ 'us.active_label': 'Actif',
1431
+ 'us.active_help': 'Les comptes inactifs ne peuvent se connecter à aucune application ; la désactivation met fin à leurs sessions.',
1432
+ 'us.save': 'Enregistrer',
1433
+ 'us.password_title': 'Mot de passe',
1434
+ 'us.set': 'Défini',
1435
+ 'us.set_on': 'Défini le {date}',
1436
+ 'us.sso_only': 'Pas de mot de passe (authentification unique uniquement)',
1437
+ 'us.must_next': 'Doit être changé à la prochaine connexion',
1438
+ 'us.expires': 'Expire dans {n} jour(s)',
1439
+ 'us.fails': '{n} échec(s) de connexion dans la dernière heure',
1440
+ 'us.unexpire': 'Annuler l’expiration',
1441
+ 'us.expire': 'Faire expirer le mot de passe',
1442
+ 'us.unlock': 'Débloquer la connexion',
1443
+ 'us.new_password': 'Nouveau mot de passe',
1444
+ 'us.set_password_label': 'Définir un mot de passe',
1445
+ 'us.ends_sessions': 'Met fin aux sessions du compte.',
1446
+ 'us.set_password': 'Définir le mot de passe',
1447
+ 'us.remove_confirm': 'Retirer le mot de passe ? Le compte ne pourra plus se connecter que par authentification unique.',
1448
+ 'us.remove_password': 'Retirer le mot de passe',
1449
+ 'us.delete_confirm': 'Supprimer le compte {user} et tous ses accès aux applications ?',
1450
+ 'us.delete': 'Supprimer le compte',
1451
+ 'us.app_access': 'Accès aux applications',
1452
+ 'us.application': 'Application',
1453
+ 'us.roles': 'Rôles',
1454
+ 'us.roles_in': 'Rôles dans {app}',
1455
+ 'us.roles_ph': 'aucun rôle (p. ex. {example})',
1456
+ 'us.revoke_confirm': 'Retirer l’accès à {app} ?',
1457
+ 'us.revoke': 'Retirer',
1458
+ 'us.no_access': 'Pas encore d’accès à une application.',
1459
+ 'us.grant': 'Accorder l’accès',
1460
+ 'us.roles_comma': 'séparés par des virgules, ou choisissez ci-dessous',
1461
+ 'us.saved': 'Compte enregistré.',
1462
+ 'us.pw_removed': 'Mot de passe retiré.',
1463
+ 'us.pw_set': 'Mot de passe défini.',
1464
+ 'us.pw_expired': 'Mot de passe expiré : il doit être changé à la prochaine connexion.',
1465
+ 'us.pw_unexpired': 'Le mot de passe n’est plus expiré.',
1466
+ 'us.unlocked': 'Connexion débloquée.',
1467
+ 'us.deleted': 'Compte supprimé.',
1468
+ 'us.granted': 'Accès accordé.',
1469
+ 'us.roles_saved': 'Rôles enregistrés. L’utilisateur les reçoit à la prochaine connexion.',
1470
+ 'us.revoked': 'Accès retiré.',
1471
+ 'idp.title': 'Fournisseurs d’identité',
1472
+ 'idp.name': 'Nom (dans les URL)',
1473
+ 'idp.name_help': 'en minuscules, p. ex. entra, google, keycloak',
1474
+ 'idp.protocol': 'Protocole',
1475
+ 'idp.label': 'Libellé du bouton',
1476
+ 'idp.label_help': 'Affiché comme « Se connecter avec … »',
1477
+ 'idp.issuer': 'Émetteur (OIDC : URL ; SAML : l’entity ID de l’IdP)',
1478
+ 'idp.issuer_help': 'p. ex. https://login.microsoftonline.com/<tenant>/v2.0, https://keycloak.example.com/realms/acme, ou pour SAML l’entityID des métadonnées de l’IdP',
1479
+ 'idp.client_id': 'ID client (SAML : l’entity ID de pgkiln)',
1480
+ 'idp.client_id_help': 'OIDC : obligatoire. SAML : vide = l’URL des métadonnées de ce fournisseur.',
1481
+ 'idp.sso_url': 'SAML : URL de connexion de l’IdP',
1482
+ 'idp.sso_url_help': 'L’emplacement du SingleSignOnService (liaison HTTP-Redirect) dans les métadonnées de l’IdP.',
1483
+ 'idp.cert': 'SAML : certificat de signature de l’IdP (PEM)',
1484
+ 'idp.cert_help': 'Issu des métadonnées de l’IdP (X509Certificate, entouré des lignes BEGIN/END CERTIFICATE). Les assertions doivent être signées avec lui.',
1485
+ 'idp.secret': 'Secret client',
1486
+ 'idp.secret_kept': 'Un secret est enregistré. Laissez vide pour le garder.',
1487
+ 'idp.secret_public': 'Laissez vide pour un client public (PKCE uniquement).',
1488
+ 'idp.scopes': 'Portées',
1489
+ 'idp.username_claim': 'Claim du nom d’utilisateur',
1490
+ 'idp.username_claim_help': 'Utilisez un claim que les utilisateurs ne peuvent pas modifier eux-mêmes (p. ex. preferred_username, upn, email). SAML : un nom d’attribut ou nameID.',
1491
+ 'idp.groups_claim': 'Claim des groupes',
1492
+ 'idp.groups_claim_help': 'Les chemins à points fonctionnent, p. ex. realm_access.roles',
1493
+ 'idp.auto_create': 'Créer les comptes automatiquement à la première connexion',
1494
+ 'idp.auto_create_help': 'Sinon, seules les personnes avec un compte lié à ce fournisseur (ou autorisées ci-dessous) peuvent se connecter.',
1495
+ 'idp.link': 'Lier les comptes existants de même nom d’utilisateur à leur première connexion',
1496
+ 'idp.link_help': 'Seulement quand les utilisateurs ne peuvent pas choisir eux-mêmes le claim du nom chez ce fournisseur : sinon quelqu’un pourrait enregistrer le nom d’un compte existant et s’en emparer. Avec le claim e-mail, seules les adresses vérifiées sont liées. Désactivez-le une fois les comptes liés.',
1497
+ 'idp.enabled': 'Activé',
1498
+ 'idp.remove_secret': 'Retirer le secret client enregistré',
1499
+ 'idp.add': 'Ajouter le fournisseur',
1500
+ 'idp.intro': 'Fournisseurs OpenID Connect pour l’authentification unique (Microsoft Entra ID, Google, Okta, Keycloak, Auth0, …). Enregistrez pgkiln chez le fournisseur comme application web avec l’URI de redirection affichée, puis activez le fournisseur par application sous {where}.',
1501
+ 'idp.where': 'Paramètres → Méthodes de connexion',
1502
+ 'idp.providers': 'Fournisseurs',
1503
+ 'idp.provider': 'Fournisseur',
1504
+ 'idp.issuer_col': 'Émetteur',
1505
+ 'idp.used_by': 'Utilisé par',
1506
+ 'idp.linked': 'Comptes liés',
1507
+ 'idp.no_apps': 'aucune application',
1508
+ 'idp.enabled_s': 'activé',
1509
+ 'idp.disabled_s': 'désactivé',
1510
+ 'idp.auto_s': 'création automatique',
1511
+ 'idp.links_s': 'lie les comptes existants',
1512
+ 'idp.none': 'Pas encore de fournisseurs d’identité.',
1513
+ 'idp.settings': 'Paramètres',
1514
+ 'idp.delete_confirm': 'Supprimer {name} ? Les identités liées sont retirées ; les comptes restent.',
1515
+ 'idp.delete': 'Supprimer le fournisseur',
1516
+ 'idp.register_idp': 'Enregistrer chez le fournisseur d’identité',
1517
+ 'idp.sp_metadata': 'Métadonnées du fournisseur de services (à importer chez l’IdP) :',
1518
+ 'idp.by_hand': 'Ou à la main : entity ID {entity}, assertion consumer service (HTTP-POST) {acs}.',
1519
+ 'idp.saml_note': 'Basé sur {env}. Signez les assertions ; envoyez les groupes dans l’attribut {claim} pour les associer à des rôles.',
1520
+ 'idp.register': 'Enregistrer chez le fournisseur',
1521
+ 'idp.redirect': 'URI de redirection (callback) :',
1522
+ 'idp.public_url': 'Basé sur {env} ; réglez-le sur l’adresse que voient les utilisateurs (p. ex. https://apps.example.com).',
1523
+ 'idp.grant': 'Type d’autorisation : {type} avec PKCE. Portées : {scopes}. Incluez un claim {claim} dans le jeton d’ID pour associer les groupes aux rôles.',
1524
+ 'idp.auth_code': 'code d’autorisation',
1525
+ 'idp.test': 'Tester la découverte',
1526
+ 'idp.added': 'Fournisseur ajouté. Enregistrez l’URI de redirection chez le fournisseur, puis testez la connexion.',
1527
+ 'idp.saved': 'Fournisseur enregistré.',
1528
+ 'idp.works': 'La découverte fonctionne. Point d’autorisation : {url}',
1529
+ 'idp.failed': 'La découverte a échoué : {error}',
1530
+ 'idp.deleted': 'Fournisseur supprimé.',
1531
+ // ------------------------------------------------------------ Workspaces (sprint 125)
1532
+ 'wsp.title': 'Espaces de travail',
1533
+ 'wsp.admins_only': 'Seuls les administrateurs gèrent les espaces de travail.',
1534
+ 'wsp.err.exists': 'Un espace de travail de ce nom existe déjà.',
1535
+ 'wsp.err.name_check': 'Le nom compte 1 à 60 caractères, sans espace au début ni à la fin.',
1536
+ 'wsp.err.name': 'Le nom compte 1 à 60 caractères.',
1537
+ 'wsp.iso.secret': 'définissez PGKILN_SECRET_KEY (au moins 32 caractères) dans l’environnement du serveur : les connexions de base de données de l’espace de travail en tirent leurs mots de passe.',
1538
+ 'wsp.iso.runtime': 'définissez RUNTIME_DATABASE_URL : les applications s’exécutent sur la connexion du propriétaire, donc aucun espace de travail ne peut être isolé.',
1539
+ 'wsp.err.role_taken': 'ce rôle appartient déjà à un autre espace de travail.',
1540
+ 'wsp.err.role_has': 'l’espace de travail a déjà ce rôle.',
1541
+ 'wsp.isolated_tag': 'isolé',
1542
+ 'wsp.iso.on': 'Ses applications s’exécutent en tant que {run} et le SQL de ses développeurs (SQL Workshop, contrôles de code, l’Advisor) en tant que {dev}. Les deux n’atteignent que les rôles ci-dessous et ne voient que les applications, sessions et comptes de cet espace de travail dans les tables de pgkiln. Les développeurs qui appartiennent aussi à un espace partagé y gardent ses droits.',
1543
+ 'wsp.db_role': 'Rôle de base de données',
1544
+ 'wsp.used_by': 'Utilisé par',
1545
+ 'wsp.missing': 'manquant',
1546
+ 'wsp.no_app': 'aucune application',
1547
+ 'wsp.remove': 'Retirer',
1548
+ 'wsp.no_roles': 'Aucun rôle de base de données : les applications d’ici ne peuvent pas s’exécuter sous un rôle propre.',
1549
+ 'wsp.add_role': 'Ajouter un rôle de base de données',
1550
+ 'wsp.add_role_help': 'Un rôle existant (pas un superutilisateur, ni un rôle qui crée des rôles ou contourne la sécurité au niveau des lignes). Ses droits deviennent ceux de cet espace de travail ; il ne peut pas appartenir à un autre.',
1551
+ 'wsp.add_role_btn': 'Ajouter le rôle',
1552
+ 'wsp.make_shared_confirm': 'Rendre {name} de nouveau partagé ? Ses applications s’exécuteront alors sur la connexion d’exécution partagée, et le SQL de ses développeurs en tant que propriétaire.',
1553
+ 'wsp.make_shared': 'Rendre partagé',
1554
+ 'wsp.shared_text': 'Partagé : les applications s’exécutent sur la connexion d’exécution partagée et le SQL des développeurs en tant que propriétaire, comme pour tout espace partagé.',
1555
+ 'wsp.iso_help': 'Isoler donne à l’espace de travail deux connexions de base de données propres et les rôles qu’utilisent maintenant ses applications. Le code des applications n’atteint alors que ces rôles et les applications de cet espace ; le SQL Workshop de ses développeurs s’exécute sur la connexion de l’espace au lieu du propriétaire. Les nouvelles applications reçoivent un rôle et un schéma propres.',
1556
+ 'wsp.to_isolate': 'Pour isoler un espace de travail, {problem}',
1557
+ 'wsp.isolate_confirm': 'Isoler {name} ?',
1558
+ 'wsp.isolate': 'Isoler cet espace de travail',
1559
+ 'wsp.isolation': 'Isolation',
1560
+ 'wsp.service': 'Gérer le service',
1561
+ 'wsp.message': 'Message de l’espace de travail',
1562
+ 'wsp.message_help': 'Affiché aux développeurs de cet espace sur l’accueil d’App Builder, p. ex. une fenêtre de maintenance. Texte brut.',
1563
+ 'wsp.banner': 'Bandeau d’environnement',
1564
+ 'wsp.banner_help': 'Un court libellé en haut de chaque page du builder tant que cet espace est actif. Vide : pas de bandeau.',
1565
+ 'wsp.banner_colour': 'Couleur du bandeau',
1566
+ 'wsp.save': 'Enregistrer',
1567
+ 'wsp.prefs': 'Préférences de l’espace de travail',
1568
+ 'wsp.sql_on': 'Activer SQL Workshop',
1569
+ 'wsp.sql_on_help': 'Désactivé : la feuille de calcul SQL, le navigateur d’objets, les scripts SQL, le chargement et déchargement de données, Quick SQL, le générateur de requêtes, DDL, Comparer et l’IA sont refusés tant que cet espace est actif, pour tous les développeurs.',
1570
+ 'wsp.rest_on': 'Activer les services RESTful',
1571
+ 'wsp.rest_on_help': 'Désactivé : les modules REST des applications de cet espace répondent 404 (Not found) à {path} ; ils restent modifiables.',
1572
+ 'wsp.builder_home': 'Les liens du builder ouvrent',
1573
+ 'wsp.home.apps': 'App Builder',
1574
+ 'wsp.home.home': 'Accueil de l’espace de travail',
1575
+ 'wsp.builder_home_help': 'Où mène un lien vers /builder (un favori d’avant l’accueil de l’espace de travail) dans cet espace. La connexion ouvre toujours l’accueil de l’espace ; App Builder est à /builder/apps.',
1576
+ 'wsp.save_prefs': 'Enregistrer les préférences',
1577
+ 'wsp.links': 'Liens d’extension',
1578
+ 'wsp.links_help': 'Liens vers d’autres outils qu’utilisent les développeurs de cet espace (supervision, wiki, système de tickets), dans le menu {menu} du builder tant que l’espace est actif. Ils s’ouvrent dans un nouvel onglet.',
1579
+ 'wsp.extensions': 'Extensions',
1580
+ 'wsp.label': 'Libellé',
1581
+ 'wsp.url': 'URL',
1582
+ 'wsp.order': 'Ordre',
1583
+ 'wsp.delete_link_confirm': 'Supprimer le lien {label} ?',
1584
+ 'wsp.delete': 'Supprimer',
1585
+ 'wsp.no_links': 'Aucun lien d’extension.',
1586
+ 'wsp.label_ph': 'Supervision',
1587
+ 'wsp.description': 'Description',
1588
+ 'wsp.add_link': 'Ajouter le lien',
1589
+ 'wsp.switched': 'Espace de travail {name}.',
1590
+ 'wsp.intro': 'Un espace de travail regroupe des applications et les développeurs qui les construisent. Les développeurs voient et modifient les applications de leurs propres espaces ; les administrateurs les voient toutes. Un espace partagé n’est pas une frontière de sécurité entre développeurs qui écrivent du SQL : son SQL Workshop et le code des applications s’exécutent avec les droits de cette installation. Un espace {isolated} en est une : ses applications et son SQL s’exécutent sur des connexions de base de données propres qui n’atteignent que ses rôles et ses propres applications.',
1591
+ 'wsp.isolated_word': 'isolé',
1592
+ 'wsp.workspace': 'Espace de travail',
1593
+ 'wsp.applications': 'Applications',
1594
+ 'wsp.developers': 'Développeurs',
1595
+ 'wsp.admins_text': 'administrateurs uniquement',
1596
+ 'wsp.add': 'Ajouter un espace de travail',
1597
+ 'wsp.name': 'Nom',
1598
+ 'wsp.name_help': 'Par exemple l’équipe ou le service qui construit ici ses applications.',
1599
+ 'wsp.first_dev': 'Vous en devenez le premier développeur ; ajoutez-en d’autres sur sa page.',
1600
+ 'wsp.added': 'Espace de travail {name} ajouté.',
1601
+ 'wsp.settings': 'Paramètres',
1602
+ 'wsp.default_no_delete': 'L’espace Default ne peut pas être supprimé : les applications importées et celles créées en ligne de commande y commencent.',
1603
+ 'wsp.delete_confirm': 'Supprimer l’espace de travail {name} ?',
1604
+ 'wsp.delete_ws': 'Supprimer l’espace de travail',
1605
+ 'wsp.move_first': 'Déplacez d’abord ses applications vers un autre espace de travail.',
1606
+ 'wsp.devs_help': 'Les développeurs de cet espace voient et modifient ses applications. Les administrateurs voient tous les espaces.',
1607
+ 'wsp.administrator': '(administrateur)',
1608
+ 'wsp.ws_admins': 'Administrateurs de l’espace de travail',
1609
+ 'wsp.ws_admins_help': 'Ils gèrent le nom et les développeurs de cet espace. L’isolation, les rôles de base de données, le déplacement des applications et la suppression de l’espace restent aux administrateurs.',
1610
+ 'wsp.save_devs': 'Enregistrer les développeurs',
1611
+ 'wsp.mail_net': 'Messagerie et accès réseau',
1612
+ 'wsp.mail_net_text': 'Le {mail} propre à cet espace pour ses applications qui n’en ont pas, sa liste d’{network} (les hôtes que ses applications peuvent appeler, dans la liste de l’installation) et la {queue}.',
1613
+ 'wsp.mail_service': 'service de messagerie',
1614
+ 'wsp.network': 'accès réseau',
1615
+ 'wsp.queue': 'file des e-mails',
1616
+ 'wsp.iso_short_on': 'Isolé : ses applications et son SQL s’exécutent sur des connexions de base de données propres.',
1617
+ 'wsp.iso_short_off': 'Partagé.',
1618
+ 'wsp.admins_change': 'Les administrateurs le modifient.',
1619
+ 'wsp.application': 'Application',
1620
+ 'wsp.move_to': 'Déplacer vers',
1621
+ 'wsp.move_label': 'Déplacer {app} vers',
1622
+ 'wsp.move': 'Déplacer',
1623
+ 'wsp.no_other': 'aucun autre espace de travail',
1624
+ 'wsp.no_apps': 'Aucune application.',
1625
+ 'wsp.saved': 'Espace de travail enregistré.',
1626
+ 'wsp.not_found': 'Introuvable.',
1627
+ 'wsp.devs_saved': 'Développeurs enregistrés.',
1628
+ 'wsp.not_moved': 'Non déplacée : {why}',
1629
+ 'wsp.moved': 'Application déplacée vers {name}.',
1630
+ 'wsp.err.default': 'L’espace Default ne peut pas être supprimé.',
1631
+ 'wsp.err.isolated': 'Rendez l’espace partagé (non isolé) avant de le supprimer.',
1632
+ 'wsp.err.has_apps': 'Déplacez d’abord les applications de cet espace vers un autre.',
1633
+ 'wsp.deleted': 'Espace de travail {name} supprimé.',
1634
+ 'wsp.isolated_now': 'L’espace de travail est isolé : ses applications et son SQL s’exécutent désormais sur ses propres connexions de base de données.',
1635
+ 'wsp.shared_now': 'L’espace de travail est de nouveau partagé : ses applications s’exécutent sur la connexion d’exécution partagée.',
1636
+ 'wsp.not_isolated': 'Non isolé : {why}',
1637
+ 'wsp.not_changed': 'Non modifié : {why}',
1638
+ 'wsp.err.role_name': 'Un nom de rôle est une lettre ou _ suivie de lettres, de chiffres, de _ ou de $ (au plus 63).',
1639
+ 'wsp.err.no_role': 'Il n’existe pas de rôle de base de données {role}.',
1640
+ 'wsp.err.role_used_one': '{apps} s’exécute en tant que {role} : donnez-lui d’abord un autre rôle.',
1641
+ 'wsp.err.role_used': '{apps} s’exécutent en tant que {role} : donnez-leur d’abord un autre rôle.',
1642
+ 'wsp.role_removed': 'Rôle {role} retiré.',
1643
+ 'wsp.role_added': 'Rôle {role} ajouté.',
1644
+ 'wsp.not_saved': 'Non enregistré : {why}',
1645
+ 'wsp.err.message': 'Le message compte au plus 2000 caractères.',
1646
+ 'wsp.err.banner': 'Le libellé du bandeau compte au plus 40 caractères.',
1647
+ 'wsp.service_saved': 'Message et bandeau enregistrés.',
1648
+ 'wsp.prefs_saved': 'Préférences enregistrées.',
1649
+ 'wsp.err.label': 'Le libellé compte 1 à 60 caractères.',
1650
+ 'wsp.err.url': 'L’URL commence par http:// ou https://.',
1651
+ 'wsp.err.description': 'La description compte au plus 500 caractères.',
1652
+ 'wsp.err.order': 'L’ordre est un nombre entier.',
1653
+ 'wsp.link_added': 'Lien {label} ajouté.',
1654
+ 'wsp.link_exists': 'Un lien {label} existe déjà.',
1655
+ 'wsp.link_not_saved': 'Le lien n’a pas été enregistré.',
1656
+ 'wsp.link_deleted': 'Lien supprimé.',
1657
+ 'wsp.util_title': 'Utilisation de l’espace de travail : {name}',
1658
+ 'wsp.pages': 'Pages',
1659
+ 'wsp.views30': 'Pages vues (30 jours)',
1660
+ 'wsp.scripts': 'Scripts SQL',
1661
+ 'wsp.regions': 'Régions',
1662
+ 'wsp.items': 'Éléments',
1663
+ 'wsp.users30': 'Utilisateurs (30 jours)',
1664
+ 'wsp.static': 'Fichiers statiques',
1665
+ 'wsp.views': 'Pages vues',
1666
+ 'wsp.users': 'Utilisateurs',
1667
+ 'wsp.schemas': 'Schémas',
1668
+ 'wsp.schemas_help': 'Les schémas que les rôles de base de données de l’espace peuvent utiliser, avec le stockage de leurs tables, index et données TOAST.',
1669
+ 'wsp.schema': 'Schéma',
1670
+ 'wsp.owner': 'Propriétaire',
1671
+ 'wsp.tables': 'Tables',
1672
+ 'wsp.storage': 'Stockage',
1673
+ 'wsp.no_schemas': 'Aucun schéma : les applications de l’espace n’ont pas de rôle de base de données propre.',
1674
+ 'wsp.utilization': 'Utilisation',
1675
+ 'wsp.util_crumb': 'Utilisation : {name}',
1676
+ // ------------------------------------------------------------ Developers (sprint 125)
1677
+ 'dev.title': 'Développeurs',
1678
+ 'dev.change_pw': 'Changer votre mot de passe',
1679
+ 'dev.current': 'Mot de passe actuel',
1680
+ 'dev.new': 'Nouveau mot de passe',
1681
+ 'dev.min8': 'Au moins 8 caractères.',
1682
+ 'dev.change_btn': 'Changer le mot de passe',
1683
+ 'dev.your_email': 'Votre adresse e-mail',
1684
+ 'dev.email': 'Adresse e-mail',
1685
+ 'dev.email_help': '« Trouver mon espace de travail » sur la page de connexion y envoie vos espaces. Vide : aucune.',
1686
+ 'dev.save': 'Enregistrer',
1687
+ 'dev.accounts': 'Comptes de développeur',
1688
+ 'dev.accounts_help': 'Les administrateurs ajoutent et retirent des développeurs et peuvent lever les verrous de pages et d’applications des autres.',
1689
+ 'dev.username': 'Nom d’utilisateur',
1690
+ 'dev.role': 'Rôle',
1691
+ 'dev.email_col': 'E-mail',
1692
+ 'dev.you': '(vous)',
1693
+ 'dev.administrator': 'Administrateur',
1694
+ 'dev.developer': 'Développeur',
1695
+ 'dev.email_of': 'Adresse e-mail de {user}',
1696
+ 'dev.none': 'aucune',
1697
+ 'dev.make_dev': 'Rendre développeur',
1698
+ 'dev.make_admin': 'Rendre administrateur',
1699
+ 'dev.remove_confirm': 'Retirer le développeur {user} ?',
1700
+ 'dev.remove': 'Retirer',
1701
+ 'dev.add': 'Ajouter un développeur',
1702
+ 'dev.password': 'Mot de passe',
1703
+ 'dev.optional_email': 'Facultatif : pour « Trouver mon espace de travail ».',
1704
+ 'dev.admins_only': 'Seuls les administrateurs ajoutent et retirent des développeurs.',
1705
+ 'dev.err.email': 'L’adresse e-mail n’est pas valide.',
1706
+ 'dev.added_ws': 'Développeur ajouté à l’espace de travail {name}.',
1707
+ 'dev.added': 'Développeur ajouté.',
1708
+ 'dev.err.current': 'Le mot de passe actuel est incorrect.',
1709
+ 'dev.pw_changed': 'Mot de passe changé.',
1710
+ 'dev.email_saved': 'Adresse e-mail enregistrée.',
1711
+ 'dev.not_found': 'Introuvable.',
1712
+ 'dev.role_changed': 'Rôle modifié.',
1713
+ 'dev.removed': 'Développeur retiré.',
1714
+ // ------------------------------------------------------------ Security: two-factor sign-in (sprint 126)
1715
+ 'mfa.menu': 'Connexion à deux facteurs',
1716
+ 'mfa.title': 'Sécurité',
1717
+ 'mfa.intro': 'Connectez-vous avec un code d’une application d’authentification après votre mot de passe. Les codes de récupération vous laissent entrer si vous perdez le téléphone.',
1718
+ 'mfa.required_you': 'Votre administrateur exige la connexion à deux facteurs : ajoutez une application d’authentification.',
1719
+ 'mfa.banner': 'La connexion à deux facteurs est obligatoire. Configurez-la avant le {date} : {link}',
1720
+ 'mfa.set_up_now': 'configurer maintenant',
1721
+ 'mfa.apps': 'Applications d’authentification',
1722
+ 'mfa.app_name': 'Nom',
1723
+ 'mfa.app_default': 'Téléphone',
1724
+ 'mfa.added': 'Ajoutée',
1725
+ 'mfa.last_used': 'Dernière utilisation',
1726
+ 'mfa.no_apps': 'Pas encore d’application d’authentification : vous vous connectez avec votre mot de passe seul.',
1727
+ 'mfa.add_app': 'Ajouter une application d’authentification',
1728
+ 'mfa.no_key': 'La connexion à deux facteurs a besoin de la clé de l’instance (PGKILN_SECRET_KEY) pour stocker le secret de l’application.',
1729
+ 'mfa.scan': 'Scannez le code QR avec une application d’authentification.',
1730
+ 'mfa.or_enter': 'Ou saisissez cette clé à la main :',
1731
+ 'mfa.enter_code': 'Saisissez le code à 6 chiffres affiché par l’application.',
1732
+ 'mfa.qr_label': 'Code QR pour l’application d’authentification',
1733
+ 'mfa.confirm_app': 'Confirmer et activer',
1734
+ 'mfa.cancel_setup': 'Annuler',
1735
+ 'mfa.setup_expired': 'La configuration a pris trop de temps : recommencez.',
1736
+ 'mfa.wrong_setup': 'Ce code ne correspond pas : vérifiez l’heure de votre téléphone et essayez le code suivant.',
1737
+ 'mfa.app_added': 'Application d’authentification ajoutée : désormais, vous vous connectez aussi avec un code.',
1738
+ 'mfa.remove': 'Supprimer',
1739
+ 'mfa.remove_app': 'Supprimer cette application',
1740
+ 'mfa.your_password': 'Votre mot de passe',
1741
+ 'mfa.wrong_password': 'Mot de passe incorrect.',
1742
+ 'mfa.cannot_remove_required': 'La connexion à deux facteurs est obligatoire pour vous : ajoutez une autre application avant de supprimer celle-ci.',
1743
+ 'mfa.cannot_remove_admin': 'Au moins deux administrateurs (ou tous, s’ils sont moins nombreux) doivent garder la connexion à deux facteurs tant que la règle est active.',
1744
+ 'mfa.keep_admins': 'Pas maintenant : la règle à deux facteurs exige au moins deux administrateurs avec la connexion à deux facteurs (ou tous, s’ils sont moins nombreux).',
1745
+ 'mfa.removed': 'Application d’authentification supprimée.',
1746
+ 'mfa.codes_title': 'Codes de récupération',
1747
+ 'mfa.codes_once': 'Conservez ces codes en lieu sûr, loin de votre téléphone. Chacun remplace une fois un code de l’application. Ils ne sont affichés que maintenant.',
1748
+ 'mfa.codes_saved': 'J’ai conservé ces codes',
1749
+ 'mfa.codes_done': 'Terminé',
1750
+ 'mfa.codes_kept': 'Codes de récupération conservés.',
1751
+ 'mfa.codes_left': 'Codes de récupération inutilisés : {n}.',
1752
+ 'mfa.codes_after': 'Vous recevez des codes de récupération en ajoutant une application d’authentification.',
1753
+ 'mfa.codes_low': 'Il reste peu de codes de récupération : créez-en de nouveaux.',
1754
+ 'mfa.codes_new': 'Nouveaux codes de récupération',
1755
+ 'mfa.codes_new_confirm': 'Créer de nouveaux codes de récupération ? Les anciens ne fonctionneront plus.',
1756
+ 'mfa.expired': 'La connexion a pris trop de temps : reconnectez-vous.',
1757
+ 'mfa.step_title': 'Connexion à deux facteurs',
1758
+ 'mfa.step_intro': 'Saisissez le code de votre application d’authentification pour {user}.',
1759
+ 'mfa.code': 'Code',
1760
+ 'mfa.code_help': '6 chiffres de l’application, ou l’un de vos codes de récupération.',
1761
+ 'mfa.verify': 'Vérifier',
1762
+ 'mfa.cancel': 'Retour à la connexion',
1763
+ 'mfa.locked_out': 'Téléphone et codes perdus ? Demandez à un administrateur de réinitialiser votre connexion à deux facteurs.',
1764
+ 'mfa.wrong': 'Ce code est incorrect ou a déjà été utilisé.',
1765
+ 'mfa.column': 'Deux facteurs',
1766
+ 'mfa.on': 'activée',
1767
+ 'mfa.off': 'désactivée',
1768
+ 'mfa.reset': 'Réinitialiser',
1769
+ 'mfa.reason': 'Motif',
1770
+ 'mfa.reset_help': 'Supprime les applications et codes de récupération de {user} et le déconnecte. Journalisé ; les administrateurs sont prévenus par e-mail.',
1771
+ 'mfa.reset_btn': 'Réinitialiser la connexion à deux facteurs',
1772
+ 'mfa.reason_needed': 'Indiquez un motif pour la réinitialisation.',
1773
+ 'mfa.reset_done': 'Connexion à deux facteurs de {user} réinitialisée.',
1774
+ 'mfa.policy_title': 'Connexion à deux facteurs',
1775
+ 'mfa.policy_label': 'Exiger la connexion à deux facteurs pour',
1776
+ 'mfa.policy_off': 'Personne (facultatif)',
1777
+ 'mfa.policy_admins': 'Administrateurs',
1778
+ 'mfa.policy_all': 'Tous les développeurs',
1779
+ 'mfa.grace': 'Délai de grâce (jours)',
1780
+ 'mfa.grace_help': 'Les développeurs sans application voient un rappel jusque-là ; ensuite, seulement leur page Sécurité.',
1781
+ 'mfa.policy_help': 'Administrateurs avec la connexion à deux facteurs : {enrolled} sur {admins}. L’exiger demande au moins deux d’entre eux (ou tous, s’ils sont moins nombreux).',
1782
+ 'mfa.policy_save': 'Enregistrer',
1783
+ 'mfa.policy_saved': 'Règle à deux facteurs enregistrée.',
1784
+ 'mfa.policy_needs_admins': 'D’abord, au moins deux administrateurs (ou tous, s’ils sont moins nombreux) configurent la connexion à deux facteurs, pour que personne ne reste bloqué seul.',
1785
+ 'mfa.without': 'Sans connexion à deux facteurs : {list}.',
1786
+ 'mfa.cli_note': 'Bloqué ? Sur le serveur : pgkiln admin reset-2fa <developer> ou pgkiln admin set-2fa-policy off.',
1386
1787
  };