@rigel-cms/rigel 1.0.0 → 1.2.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.
Files changed (159) hide show
  1. package/README.md +8 -0
  2. package/docs/content-locales.md +53 -0
  3. package/docs/extensions.md +194 -0
  4. package/package.json +16 -3
  5. package/src/article-body.ts +49 -37
  6. package/src/article-render.ts +25 -2
  7. package/src/article.ts +44 -0
  8. package/src/config.ts +26 -2
  9. package/src/editor/App.svelte +149 -107
  10. package/src/editor/blocks/extension.ts +29 -0
  11. package/src/editor/blocks/index.ts +17 -15
  12. package/src/editor/blocks/video.ts +2 -1
  13. package/src/editor/i18n/README.md +23 -0
  14. package/src/editor/i18n/de/connection.json +136 -0
  15. package/src/editor/i18n/de/defaults.json +6 -0
  16. package/src/editor/i18n/de/fields.json +130 -0
  17. package/src/editor/i18n/de/local.json +49 -0
  18. package/src/editor/i18n/de/media.json +166 -0
  19. package/src/editor/i18n/de/richtext.json +116 -0
  20. package/src/editor/i18n/de/shell.json +182 -0
  21. package/src/editor/i18n/de/system.json +14 -0
  22. package/src/editor/i18n/de/validation.json +82 -0
  23. package/src/editor/i18n/en/connection.json +136 -0
  24. package/src/editor/i18n/en/defaults.json +6 -0
  25. package/src/editor/i18n/en/fields.json +130 -0
  26. package/src/editor/i18n/en/local.json +49 -0
  27. package/src/editor/i18n/en/media.json +166 -0
  28. package/src/editor/i18n/en/richtext.json +116 -0
  29. package/src/editor/i18n/en/shell.json +182 -0
  30. package/src/editor/i18n/en/system.json +14 -0
  31. package/src/editor/i18n/en/validation.json +82 -0
  32. package/src/editor/i18n/es/connection.json +136 -0
  33. package/src/editor/i18n/es/defaults.json +6 -0
  34. package/src/editor/i18n/es/fields.json +130 -0
  35. package/src/editor/i18n/es/local.json +49 -0
  36. package/src/editor/i18n/es/media.json +166 -0
  37. package/src/editor/i18n/es/richtext.json +116 -0
  38. package/src/editor/i18n/es/shell.json +182 -0
  39. package/src/editor/i18n/es/system.json +14 -0
  40. package/src/editor/i18n/es/validation.json +82 -0
  41. package/src/editor/i18n/format.ts +26 -0
  42. package/src/editor/i18n/fr/connection.json +136 -0
  43. package/src/editor/i18n/fr/defaults.json +6 -0
  44. package/src/editor/i18n/fr/fields.json +130 -0
  45. package/src/editor/i18n/fr/local.json +49 -0
  46. package/src/editor/i18n/fr/media.json +166 -0
  47. package/src/editor/i18n/fr/richtext.json +116 -0
  48. package/src/editor/i18n/fr/shell.json +182 -0
  49. package/src/editor/i18n/fr/system.json +14 -0
  50. package/src/editor/i18n/fr/validation.json +82 -0
  51. package/src/editor/i18n/index.ts +18 -0
  52. package/src/editor/i18n/it/connection.json +136 -0
  53. package/src/editor/i18n/it/defaults.json +6 -0
  54. package/src/editor/i18n/it/fields.json +130 -0
  55. package/src/editor/i18n/it/local.json +49 -0
  56. package/src/editor/i18n/it/media.json +166 -0
  57. package/src/editor/i18n/it/richtext.json +116 -0
  58. package/src/editor/i18n/it/shell.json +182 -0
  59. package/src/editor/i18n/it/system.json +14 -0
  60. package/src/editor/i18n/it/validation.json +82 -0
  61. package/src/editor/i18n/ja/connection.json +136 -0
  62. package/src/editor/i18n/ja/defaults.json +6 -0
  63. package/src/editor/i18n/ja/fields.json +130 -0
  64. package/src/editor/i18n/ja/local.json +49 -0
  65. package/src/editor/i18n/ja/media.json +166 -0
  66. package/src/editor/i18n/ja/richtext.json +116 -0
  67. package/src/editor/i18n/ja/shell.json +182 -0
  68. package/src/editor/i18n/ja/system.json +14 -0
  69. package/src/editor/i18n/ja/validation.json +82 -0
  70. package/src/editor/i18n/locales.ts +13 -0
  71. package/src/editor/i18n/nl/connection.json +136 -0
  72. package/src/editor/i18n/nl/defaults.json +6 -0
  73. package/src/editor/i18n/nl/fields.json +130 -0
  74. package/src/editor/i18n/nl/local.json +49 -0
  75. package/src/editor/i18n/nl/media.json +166 -0
  76. package/src/editor/i18n/nl/richtext.json +116 -0
  77. package/src/editor/i18n/nl/shell.json +182 -0
  78. package/src/editor/i18n/nl/system.json +14 -0
  79. package/src/editor/i18n/nl/validation.json +82 -0
  80. package/src/editor/i18n/ru/connection.json +138 -0
  81. package/src/editor/i18n/ru/defaults.json +6 -0
  82. package/src/editor/i18n/ru/fields.json +132 -0
  83. package/src/editor/i18n/ru/local.json +49 -0
  84. package/src/editor/i18n/ru/media.json +166 -0
  85. package/src/editor/i18n/ru/richtext.json +116 -0
  86. package/src/editor/i18n/ru/shell.json +182 -0
  87. package/src/editor/i18n/ru/system.json +14 -0
  88. package/src/editor/i18n/ru/validation.json +82 -0
  89. package/src/editor/i18n/server.ts +13 -0
  90. package/src/editor/i18n/zh/connection.json +136 -0
  91. package/src/editor/i18n/zh/defaults.json +6 -0
  92. package/src/editor/i18n/zh/fields.json +130 -0
  93. package/src/editor/i18n/zh/local.json +49 -0
  94. package/src/editor/i18n/zh/media.json +166 -0
  95. package/src/editor/i18n/zh/richtext.json +116 -0
  96. package/src/editor/i18n/zh/shell.json +182 -0
  97. package/src/editor/i18n/zh/system.json +14 -0
  98. package/src/editor/i18n/zh/validation.json +82 -0
  99. package/src/editor/lib/ActionDialog.svelte +5 -4
  100. package/src/editor/lib/BlockEditor.svelte +305 -88
  101. package/src/editor/lib/CollectionPanel.svelte +17 -15
  102. package/src/editor/lib/DatePicker.svelte +15 -12
  103. package/src/editor/lib/ExtensionMount.svelte +12 -0
  104. package/src/editor/lib/Field.svelte +3 -2
  105. package/src/editor/lib/ImagePicker.svelte +82 -81
  106. package/src/editor/lib/MarkdownEditor.svelte +25 -24
  107. package/src/editor/lib/MediaPicker.svelte +6 -5
  108. package/src/editor/lib/MenuEditor.svelte +31 -30
  109. package/src/editor/lib/PreviewFrame.svelte +11 -6
  110. package/src/editor/lib/PropertiesTabs.svelte +3 -2
  111. package/src/editor/lib/PublishDialog.svelte +15 -14
  112. package/src/editor/lib/ReferenceSelect.svelte +3 -2
  113. package/src/editor/lib/SchemaField.svelte +15 -13
  114. package/src/editor/lib/SchemaPanel.svelte +20 -19
  115. package/src/editor/lib/Select.svelte +5 -4
  116. package/src/editor/lib/SeoGuidance.svelte +6 -5
  117. package/src/editor/lib/Settings.svelte +54 -54
  118. package/src/editor/lib/Shortcuts.svelte +7 -6
  119. package/src/editor/lib/SitePreview.svelte +10 -9
  120. package/src/editor/lib/TopBar.svelte +18 -17
  121. package/src/editor/lib/UnsavedChanges.svelte +7 -6
  122. package/src/editor/lib/VisualEditor.svelte +19 -18
  123. package/src/editor/lib/calendar.ts +10 -4
  124. package/src/editor/lib/embed-preview.ts +23 -5
  125. package/src/editor/lib/extension-preview.ts +121 -0
  126. package/src/editor/lib/github-auth.ts +23 -22
  127. package/src/editor/lib/github-backend.ts +96 -91
  128. package/src/editor/lib/images.ts +33 -31
  129. package/src/editor/lib/menu-tree.ts +5 -4
  130. package/src/editor/lib/preview-frame.ts +4 -3
  131. package/src/editor/lib/schema-edit.ts +3 -2
  132. package/src/editor/lib/settings.ts +5 -3
  133. package/src/editor/lib/slash-command.ts +1 -0
  134. package/src/editor/lib/tooltip.ts +1 -1
  135. package/src/editor/main.ts +9 -0
  136. package/src/editor/styles.css +15 -3
  137. package/src/env.d.ts +11 -1
  138. package/src/extensions.ts +160 -0
  139. package/src/index.ts +1 -1
  140. package/src/manifest/collections.ts +6 -5
  141. package/src/manifest/content-locales.ts +45 -0
  142. package/src/manifest/menu.ts +12 -10
  143. package/src/manifest/navigation.ts +13 -8
  144. package/src/manifest/references.ts +8 -7
  145. package/src/manifest/seo.ts +4 -3
  146. package/src/manifest/types.ts +4 -0
  147. package/src/preview.ts +36 -2
  148. package/src/routes/local-api.ts +5 -3
  149. package/src/routes/local-documents.ts +20 -16
  150. package/src/routes/local-media.ts +21 -16
  151. package/src/routes/local-menu.ts +9 -7
  152. package/src/routes/local-post.ts +18 -12
  153. package/src/routes/media-files.ts +10 -8
  154. package/src/routes/rigel-page.astro +2 -1
  155. package/src/schema/store.ts +22 -20
  156. package/src/schema/types.ts +2 -0
  157. package/src/schema/validate.ts +73 -69
  158. package/src/slugs.ts +11 -10
  159. package/src/vite/manifest-plugin.ts +38 -2
@@ -0,0 +1,136 @@
1
+ {
2
+ "connection.invalidAuthOrigin": "Origine de la passerelle d’authentification invalide.",
3
+ "connection.authorizationDenied": "L’autorisation GitHub a été refusée. Reconnectez-vous et autorisez l’accès pour continuer.",
4
+ "connection.tokenExchangeFailed": "La passerelle d’authentification n’a pas pu échanger le code d’autorisation GitHub contre un jeton. L’accès au dépôt n’a pas été vérifié.",
5
+ "connection.loginFailed": "La connexion à GitHub a échoué. Réessayez de vous connecter.",
6
+ "connection.invalidCredentials": "GitHub a renvoyé des identifiants invalides ou expirés. Reconnectez-vous.",
7
+ "connection.loginOpenFailed": "Impossible d’ouvrir la connexion GitHub. Autorisez les fenêtres contextuelles et réessayez.",
8
+ "connection.loginBlocked": "La fenêtre de connexion GitHub a été bloquée. Autorisez les fenêtres contextuelles et réessayez.",
9
+ "connection.loginCancelled": "La connexion à GitHub a été annulée. Réessayez.",
10
+ "connection.loginTimeout": "Le délai de connexion à GitHub a expiré. Réessayez.",
11
+ "connection.invalidSession": "La session GitHub est invalide. Reconnectez-vous.",
12
+ "connection.invalidConfiguration": "Configuration du dépôt ou de l’application GitHub invalide.",
13
+ "connection.unreachable": "Impossible de joindre GitHub. Vérifiez votre connexion et réessayez.",
14
+ "connection.sessionExpired": "La session GitHub a expiré ou a été révoquée. Reconnectez-vous.",
15
+ "connection.accessRateLimited": "Limite de requêtes GitHub atteinte. Patientez quelques minutes et réessayez.",
16
+ "connection.accessDenied": "Accès à GitHub refusé. Vérifiez les autorisations de l’application et l’approbation de l’organisation, puis reconnectez-vous.",
17
+ "connection.repositoryUnavailable": "Le dépôt GitHub ou l’installation est indisponible. Vérifiez le nom du dépôt et l’installation de l’application, puis réessayez.",
18
+ "connection.accessCheckFailed": "GitHub n’a pas pu vérifier l’accès. Réessayez plus tard.",
19
+ "connection.invalidAccessResponse": "GitHub a renvoyé une réponse d’accès invalide. Réessayez.",
20
+ "connection.incompleteAccessListing": "La liste des accès GitHub est incomplète. Réessayez ou réduisez la sélection des dépôts de l’application.",
21
+ "connection.invalidUser": "GitHub a renvoyé un utilisateur invalide. Reconnectez-vous.",
22
+ "connection.invalidRepository": "GitHub a renvoyé un dépôt invalide. Réessayez.",
23
+ "connection.unsafePath": "Chemin de contenu GitHub non sûr",
24
+ "connection.invalidBranch": "Branche GitHub invalide",
25
+ "connection.connectFirst": "Connectez d’abord le dépôt GitHub configuré",
26
+ "connection.dedicatedDraftBranch": "Les modifications du contenu GitHub nécessitent une branche dédiée aux brouillons, jamais la branche de publication",
27
+ "connection.overlappingDirectories": "Les répertoires de contenu GitHub ne doivent pas se chevaucher",
28
+ "connection.invalidFilename": "Nom de fichier de contenu invalide",
29
+ "connection.requestFailed": "La requête GitHub a échoué ; vérifiez votre connexion et reconnectez-vous",
30
+ "connection.malformedResponse": "Réponse de l’API GitHub mal formée",
31
+ "connection.malformedSha": "SHA GitHub mal formé",
32
+ "connection.malformedPayload": "Données de contenu GitHub mal formées",
33
+ "connection.invalidPayload": "Données de contenu GitHub invalides ou trop volumineuses",
34
+ "connection.invalidUtf8": "Données de contenu GitHub invalides en UTF-8",
35
+ "connection.contentTooLarge": "Le contenu dépasse la limite de 1 MiB",
36
+ "connection.invalidRemoteJson": "JSON du contenu distant invalide",
37
+ "connection.incompleteTree": "Arborescence GitHub incomplète ; le contenu ne peut pas être chargé de façon fiable",
38
+ "connection.malformedTreeEntry": "Entrée d’arborescence GitHub mal formée",
39
+ "connection.duplicateTreePath": "Chemin en double dans l’arborescence GitHub",
40
+ "connection.invalidDirectory": "Le répertoire de contenu doit être un véritable répertoire GitHub",
41
+ "connection.invalidFile": "Le contenu doit être un fichier ordinaire GitHub existant",
42
+ "connection.blobShaMismatch": "Le SHA du blob GitHub ne correspond pas",
43
+ "connection.invalidRemoteFilename": "Nom de fichier du contenu distant invalide",
44
+ "connection.invalidCopyGroups": "Les groupes de textes doivent contenir des objets de valeurs",
45
+ "connection.invalidDocument": "Le document distant doit être un objet",
46
+ "connection.missingCollection": "Collection GitHub configurée introuvable",
47
+ "connection.invalidArticle": "Article distant invalide",
48
+ "connection.menuSlugMismatch": "Le slug du menu distant ne correspond pas au nom du fichier",
49
+ "connection.reloadDraft": "Rechargez le contenu du brouillon avant d’enregistrer dans ce dépôt",
50
+ "connection.draftConflictUnsaved": "Conflit sur la branche de brouillons GitHub ; rechargez avant d’enregistrer. Vos modifications non enregistrées sont toujours là.",
51
+ "connection.draftConflict": "Conflit sur la branche de brouillons GitHub ; rechargez avant d’enregistrer.",
52
+ "connection.branchUpdateUnverified": "La mise à jour de la branche GitHub n’a pas pu être vérifiée ; réessayez ou rechargez.",
53
+ "connection.deletionUnverified": "La suppression sur GitHub n’a pas pu être vérifiée ; rechargez",
54
+ "connection.saveChanged": "L’enregistrement sur GitHub a changé avant sa vérification ; rechargez",
55
+ "connection.waitBeforeSaving": "Attendez la fin de la publication avant d’enregistrer.",
56
+ "connection.invalidValues": "Les valeurs du contenu doivent former un objet",
57
+ "connection.unknownCopyPage": "Page de textes inconnue",
58
+ "connection.reloadCopyPage": "Rechargez la page de textes avant d’enregistrer",
59
+ "connection.unknownCollection": "Collection inconnue",
60
+ "connection.missingSchema": "Aucun schéma de document configuré",
61
+ "connection.unknownDocument": "Type de document ou slug inconnu",
62
+ "connection.creationDisabled": "La création d’entrées est désactivée pour ce type de document",
63
+ "connection.menusNotConfigured": "Les menus doivent être configurés par la personne qui développe le site",
64
+ "connection.selectContent": "Sélectionnez du contenu modifiable avant d’enregistrer",
65
+ "connection.incompletePublishTree": "Arborescence GitHub incomplète. La publication est indisponible ; examinez cette modification sur GitHub.",
66
+ "connection.malformedPublishTree": "Arborescence de publication GitHub mal formée",
67
+ "connection.malformedPublishTreeMode": "Mode d’arborescence de publication GitHub mal formé",
68
+ "connection.publishWriteRequired": "La publication nécessite un accès en écriture au dépôt.",
69
+ "connection.squashDisabled": "La fusion squash est désactivée. Demandez au propriétaire du dépôt de l’activer avant de publier.",
70
+ "connection.automaticDeletionEnabled": "Demandez au propriétaire du dépôt de désactiver la suppression automatique des branches sources avant de publier, afin de préserver la branche de brouillons.",
71
+ "connection.comparisonTargetMismatch": "La comparaison GitHub ne correspond pas à la cible examinée.",
72
+ "connection.comparisonLimit": "Les comparaisons GitHub de 300 fichiers ou plus ne sont pas prises en charge. Publiez cette modification sur GitHub ; aucune liste partielle n’est affichée.",
73
+ "connection.unsupportedComparison": "Comparaison de fichiers GitHub incomplète ou non prise en charge. Publiez cette modification sur GitHub.",
74
+ "connection.incompleteRename": "Comparaison de renommage GitHub incomplète",
75
+ "connection.incompleteComparison": "Comparaison de fichiers GitHub incomplète. La publication est indisponible ; aucune liste partielle n’est affichée.",
76
+ "connection.publishFileLimit": "La publication de 300 fichiers ou plus n’est pas prise en charge. Examinez et publiez cette modification sur GitHub.",
77
+ "connection.branchesChangedDuringReview": "Les branches ont changé pendant l’examen. Examinez à nouveau les modifications avant de publier.",
78
+ "connection.waitForWrite": "Attendez la fin de l’enregistrement ou de la publication en cours.",
79
+ "connection.reviewFirst": "Examinez les modifications enregistrées avant de publier.",
80
+ "connection.branchesChanged": "Les branches ont changé. Examinez à nouveau les modifications avant de publier.",
81
+ "connection.pullRequestMismatch": "La demande de fusion ne correspond plus à cet examen. Examinez à nouveau les modifications.",
82
+ "connection.incompletePullRequests": "Liste des demandes de fusion GitHub incomplète",
83
+ "connection.multiplePullRequests": "Plusieurs demandes de fusion correspondent. Résolvez-les sur GitHub avant de publier.",
84
+ "connection.pullRequestListingStopped": "Liste des demandes de fusion GitHub incomplète ; publication arrêtée.",
85
+ "connection.publishSettingsChanged": "Les paramètres de publication ou les droits d’accès ont changé. Activez les fusions squash, désactivez la suppression automatique des branches et vérifiez l’accès en écriture, puis recommencez l’examen.",
86
+ "connection.pullRequestCreationUnconfirmed": "La création de la demande de fusion précédente n’est pas confirmée. Vérifiez sur GitHub avant de réessayer ; aucun doublon n’a été créé.",
87
+ "connection.pullRequestTargetChanged": "La demande de fusion ou la cible a changé. Examinez à nouveau les modifications avant de publier.",
88
+ "connection.syncUnverified": "GitHub synchronise encore les brouillons, ou la synchronisation n’a pas pu être vérifiée. Patientez, rechargez le contenu des brouillons et recommencez l’examen. Rien n’a été publié.",
89
+ "connection.mergeBlocked": "GitHub n’a pas autorisé cette fusion. Résolvez les conflits, les vérifications requises, les revues ou les protections de branche sur GitHub, puis réessayez. Aucune protection n’est contournée.",
90
+ "connection.mergeFailed": "GitHub n’a pas fusionné la demande de fusion. Vérifiez les vérifications requises, les revues et les protections de branche, puis réessayez.",
91
+ "connection.publishUnverified": "Le résultat de la publication n’a pas pu être vérifié. Vérifiez cette demande de fusion sur GitHub avant de réessayer.",
92
+ "connection.publishPermissions": "La publication nécessite les autorisations GitHub App Contents et Pull requests en lecture/écriture, l’approbation du propriétaire de l’installation et un accès en écriture au dépôt. Reconnectez-vous après approbation. Les protections de branche s’appliquent toujours.",
93
+ "connection.publishRejected": "GitHub a refusé la publication. Vérifiez les conflits, les vérifications et revues requises, les protections de branche et les paramètres de fusion squash. Examinez à nouveau les modifications si l’une des branches a changé.",
94
+ "connection.waitBeforeDeleting": "Attendez la fin de la publication avant de supprimer.",
95
+ "connection.contentExists": "Le contenu existe déjà ; choisissez un autre slug",
96
+ "connection.reloadContent": "Rechargez ce contenu avant de le modifier",
97
+ "connection.requestRateLimited": "Limite de requêtes GitHub atteinte ; patientez avant de réessayer ({status})",
98
+ "connection.requestSessionExpired": "La session GitHub a expiré ; reconnectez-vous ({status})",
99
+ "connection.requestAccessDenied": "Accès à GitHub refusé ; vérifiez les autorisations de l’installation pour le dépôt ({status})",
100
+ "connection.requestUnavailable": "Dépôt, branche ou fichier GitHub indisponible ; vérifiez l’accès et rechargez ({status})",
101
+ "connection.requestConflict": "Conflit de contenu GitHub ; rechargez avant d’enregistrer ({status})",
102
+ "connection.requestRejected": "GitHub a refusé cette modification ; le chemin ou la branche existe peut-être déjà ; rechargez ({status})",
103
+ "connection.requestError": "La requête GitHub a échoué ; réessayez après avoir vérifié l’accès au dépôt ({status})",
104
+ "connection.publishOutcomeUnconfirmed": "Le résultat de la publication n’est pas confirmé. Vérifiez la demande de fusion #{number} sur GitHub, ou réessayez pour vérifier le résultat avant de lancer une autre publication.",
105
+ "connection.cancel": "Annuler",
106
+ "connection.working": "Traitement en cours…",
107
+ "connection.actionFailed": "L’action n’a pas pu être effectuée. Réessayez.",
108
+ "connection.publishTitle": "Publier les modifications enregistrées",
109
+ "connection.closePublishReview": "Fermer l’examen de publication",
110
+ "connection.publishDescription": "La publication inclut {scope}, y compris les fichiers hors des dossiers de contenu du CMS. Les modifications non enregistrées ne sont jamais incluses ni enregistrées automatiquement.",
111
+ "connection.publishScope": "toutes les modifications enregistrées sur la branche de brouillons",
112
+ "connection.loadingReview": "Chargement de l’examen complet des fichiers…",
113
+ "connection.publishBranches": "De {branch} vers {publishBranch}, en un seul commit squash.",
114
+ "connection.syncDescription": "La branche de publication contient des modifications absentes des brouillons, notamment des publications squash antérieures. Commencez par la synchroniser explicitement avec la branche de brouillons à l’aide d’une fusion normale sur GitHub. Cette opération ne publie rien. Les conflits arrêtent la synchronisation. Examinez ensuite à nouveau les fichiers mis à jour avant de publier.",
115
+ "connection.treeDifferences": "Voici les différences actuelles entre les arborescences, et non la liste définitive des fichiers à publier :",
116
+ "connection.fileCount.one": "{count} fichier",
117
+ "connection.fileCount.other": "{count} fichiers",
118
+ "connection.allChangedFiles": "Tous les fichiers modifiés",
119
+ "connection.previousFilename": "Ancien nom : {filename}",
120
+ "connection.noSavedChanges": "Aucune modification enregistrée à publier. Les arborescences des branches sont identiques.",
121
+ "connection.publishSafety": "Les révisions des deux branches sont à nouveau vérifiées avant la publication. GitHub fixe la révision du brouillon, mais ne peut pas verrouiller la révision cible de façon atomique ; une mise à jour de la cible au dernier instant peut encore créer une situation de concurrence. Les vérifications requises, les revues et les protections de branche s’appliquent.",
122
+ "connection.close": "Fermer",
123
+ "connection.reviewAgain": "Examiner à nouveau",
124
+ "connection.syncDraftsFirst": "Synchroniser d’abord les brouillons",
125
+ "connection.confirmPublish": "Confirmer la publication",
126
+ "connection.unsavedTitle": "Modifications non enregistrées",
127
+ "connection.keepEditing": "Continuer à modifier",
128
+ "connection.unsavedDescription": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de quitter ou abandonner ce brouillon ?",
129
+ "connection.discardChanges": "Abandonner les modifications",
130
+ "connection.saving": "Enregistrement…",
131
+ "connection.saveAndLeave": "Enregistrer et quitter",
132
+ "connection.fileStatus.added": "ajouté",
133
+ "connection.fileStatus.modified": "modifié",
134
+ "connection.fileStatus.removed": "supprimé",
135
+ "connection.fileStatus.renamed": "renommé"
136
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "defaults.draft": "Brouillon",
3
+ "defaults.seoTitle": "Titre SEO",
4
+ "defaults.seoDescription": "Description SEO",
5
+ "defaults.socialImage": "Image pour les réseaux sociaux"
6
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "fields.remove": "Supprimer",
3
+ "fields.addItem": "Ajouter un élément",
4
+ "fields.colorPicker": "Choisir la couleur pour « {label} »",
5
+ "fields.colorHexValue": "Valeur hexadécimale de « {label} »",
6
+ "fields.hideValue": "Masquer « {label} »",
7
+ "fields.showValue": "Afficher « {label} »",
8
+ "fields.choose": "Choisir…",
9
+ "fields.itemNumber": "Élément {number}",
10
+ "fields.moveItemUp": "Monter l’élément {number} de « {label} »",
11
+ "fields.moveItemDown": "Descendre l’élément {number} de « {label} »",
12
+ "fields.duplicateItem": "Dupliquer l’élément {number} de « {label} »",
13
+ "fields.removeItem": "Supprimer l’élément {number} de « {label} »",
14
+ "fields.itemLabel": "Élément {number} de « {label} »",
15
+ "fields.moveUp": "Monter",
16
+ "fields.moveDown": "Descendre",
17
+ "fields.duplicate": "Dupliquer",
18
+ "fields.selectLabel": "Sélectionner « {label} »…",
19
+ "fields.unavailableReference": "Indisponible ({id})",
20
+ "fields.noEntries": "Aucune entrée n’a encore été déclarée.",
21
+ "fields.properties": "Propriétés",
22
+ "fields.content": "Contenu",
23
+ "fields.seo": "SEO",
24
+ "fields.selectOptions": "Sélectionner des options…",
25
+ "fields.noOptions": "Aucune option disponible.",
26
+ "fields.demoContentNotice": "Exemples de champs à tester. Ces valeurs sont indépendantes des paramètres de votre site.",
27
+ "fields.sharedContentNotice": "Contenu partagé. Les modifications apparaissent sur toutes les pages qui y font référence.",
28
+ "fields.pageProperties": "Propriétés de la page",
29
+ "fields.urlSlug": "Slug de l’URL",
30
+ "fields.documentSlugHint": "Modifie l’URL, pas l’identifiant du document ni le nom du fichier. La route du site doit utiliser la métadonnée slug.",
31
+ "fields.newPageNotice": "Nouvelle page. Enregistrer écrit le fichier JSON ; la route apparaît une fois le fichier présent sur le site.",
32
+ "fields.structure": "Structure",
33
+ "fields.moveSectionUp": "Monter la section « {label} »",
34
+ "fields.moveSectionDown": "Descendre la section « {label} »",
35
+ "fields.duplicateSection": "Dupliquer la section « {label} »",
36
+ "fields.removeSection": "Supprimer la section « {label} »",
37
+ "fields.sectionTypeToAdd": "Type de section à ajouter",
38
+ "fields.chooseSection": "Choisir une section…",
39
+ "fields.addSection": "Ajouter une section",
40
+ "fields.pendingSections.one": "{count} nouvelle section apparaîtra après l’enregistrement.",
41
+ "fields.pendingSections.other": "{count} nouvelles sections apparaîtront après l’enregistrement.",
42
+ "fields.sectionProperties": "Propriétés de la section",
43
+ "fields.editReference": "Modifier « {label} » ↗",
44
+ "fields.articleDetails": "Détails de l’article",
45
+ "fields.collectionSlugHint": "Modifie l’URL, pas le nom du fichier de contenu. La route du site doit utiliser la métadonnée slug.",
46
+ "fields.commaSeparatedLabel": "{label} (valeurs séparées par des virgules)",
47
+ "fields.editArticleBody": "Modifier le corps de l’article dans l’aperçu",
48
+ "fields.loadingPreview": "Chargement de l’aperçu…",
49
+ "fields.editArticleBodyHint": "Cliquez sur le corps de l’article dans l’aperçu pour le modifier. Enregistrez pour conserver les modifications du contenu.",
50
+ "fields.seoNotSet": "Non défini",
51
+ "fields.seoTooShort": "Trop court",
52
+ "fields.seoTooLong": "Trop long",
53
+ "fields.seoRecommendedLength": "Longueur recommandée",
54
+ "fields.seoTitleLength": "Longueur du titre SEO",
55
+ "fields.seoDescriptionLength": "Longueur de la description SEO",
56
+ "fields.seoLengthDetails": "{count} caractères. {status}. Longueur recommandée : de {min} à {max}.",
57
+ "fields.seoRecommendedCharacters": "Recommandation : de {min} à {max} caractères.",
58
+ "fields.seoRecommendedImageSize": "Dimensions recommandées : 1200 × 628 px.",
59
+ "fields.section": "Section",
60
+ "fields.menuItemNotFound": "Élément de menu introuvable",
61
+ "fields.menuMoveIntoSelf": "Un élément ne peut pas être déplacé dans lui-même ni dans ses enfants",
62
+ "fields.menuDropTargetMissing": "La cible du dépôt n’existe plus",
63
+ "fields.menuMoveDepthLimit": "Ce déplacement dépasse la limite de {maxDepth} niveaux",
64
+ "fields.menuItemMoved": "Élément de menu déplacé",
65
+ "fields.menuCannotMoveItem": "Impossible de déplacer l’élément",
66
+ "fields.menuMaximumLevels": "{maxDepth} niveaux maximum",
67
+ "fields.menuNewItem": "Nouvel élément",
68
+ "fields.menuItemAdded": "Élément de menu ajouté",
69
+ "fields.menuMoveCancelled": "Déplacement annulé",
70
+ "fields.menuItems": "Éléments du menu",
71
+ "fields.menuPath": "Chemin dans le menu",
72
+ "fields.menuUntitledItem": "Élément sans titre",
73
+ "fields.menuItemDetails": "Détails de « {label} »",
74
+ "fields.menuItemActions": "Actions pour « {label} »",
75
+ "fields.menuUp": "Monter",
76
+ "fields.menuDown": "Descendre",
77
+ "fields.menuIndent": "Indenter",
78
+ "fields.menuOutdent": "Réduire le retrait",
79
+ "fields.menuLabel": "Libellé",
80
+ "fields.menuLabelFor": "Libellé de « {id} »",
81
+ "fields.menuUrl": "URL",
82
+ "fields.menuUrlFor": "URL de « {id} »",
83
+ "fields.menuUrlPlaceholder": "/about ou https://example.com",
84
+ "fields.menuOpenInNewTab": "Ouvrir dans un nouvel onglet",
85
+ "fields.menuGroupItems": "Éléments",
86
+ "fields.menuDragItem": "Faire glisser « {label} »",
87
+ "fields.menuOpenItem": "Ouvrir « {label} »",
88
+ "fields.menuEmptyGroup": "Aucun élément dans ce groupe.",
89
+ "fields.menuEmpty": "Aucun élément de menu pour le moment.",
90
+ "fields.menuAddChild": "Ajouter un enfant",
91
+ "fields.menuMaximumLevelsHint": "{maxDepth} niveaux maximum.",
92
+ "fields.menuRemoveTitle": "Supprimer « {label} » ?",
93
+ "fields.menuRemoveDescription": "L’élément et tous ses enfants seront supprimés du brouillon. Cliquez sur Enregistrer pour conserver cette modification.",
94
+ "fields.menuItemRemoved": "Élément de menu supprimé",
95
+ "fields.calendarHeading": "{month} {year}",
96
+ "fields.chooseDate": "Choisir une date…",
97
+ "fields.calendarFor": "Calendrier de « {label} »",
98
+ "fields.previousMonth": "Mois précédent",
99
+ "fields.calendarMonth": "Mois du calendrier",
100
+ "fields.calendarYear": "Année du calendrier",
101
+ "fields.nextMonth": "Mois suivant",
102
+ "fields.today": "Aujourd’hui",
103
+ "fields.clear": "Effacer",
104
+ "fields.month.january": "janvier",
105
+ "fields.month.february": "février",
106
+ "fields.month.march": "mars",
107
+ "fields.month.april": "avril",
108
+ "fields.month.may": "mai",
109
+ "fields.month.june": "juin",
110
+ "fields.month.july": "juillet",
111
+ "fields.month.august": "août",
112
+ "fields.month.september": "septembre",
113
+ "fields.month.october": "octobre",
114
+ "fields.month.november": "novembre",
115
+ "fields.month.december": "décembre",
116
+ "fields.weekday.sunday": "dimanche",
117
+ "fields.weekday.monday": "lundi",
118
+ "fields.weekday.tuesday": "mardi",
119
+ "fields.weekday.wednesday": "mercredi",
120
+ "fields.weekday.thursday": "jeudi",
121
+ "fields.weekday.friday": "vendredi",
122
+ "fields.weekday.saturday": "samedi",
123
+ "fields.weekdayShort.sunday": "di",
124
+ "fields.weekdayShort.monday": "lu",
125
+ "fields.weekdayShort.tuesday": "ma",
126
+ "fields.weekdayShort.wednesday": "me",
127
+ "fields.weekdayShort.thursday": "je",
128
+ "fields.weekdayShort.friday": "ve",
129
+ "fields.weekdayShort.saturday": "sa"
130
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "local.documentTooLarge": "Le document dépasse la limite de 1 MiB",
3
+ "local.dataRequired": "Le corps de la requête doit contenir un objet data",
4
+ "local.unknownDocument": "Document inconnu",
5
+ "local.readDocumentFailed": "Impossible de lire le document",
6
+ "local.documentDeveloperOnly": "Les documents sont créés et supprimés par le développeur du site",
7
+ "local.unknownDocumentTarget": "Type de document ou slug inconnu",
8
+ "local.saveDocumentFailed": "Impossible d’enregistrer le document",
9
+ "local.unknownCollectionSlug": "Collection ou slug inconnu",
10
+ "local.invalidArticle": "Article invalide",
11
+ "local.postExists": "Un article avec ce slug existe déjà. Rechargez la collection et recréez le brouillon.",
12
+ "local.postNotFound": "Article introuvable",
13
+ "local.invalidMenuSlug": "Slug de menu invalide",
14
+ "local.menuDeveloperOnly": "Les menus sont déclarés par le développeur du site. Seuls les menus existants peuvent être modifiés.",
15
+ "local.menuSlugMismatch": "Le slug du menu doit correspondre à celui de la requête",
16
+ "local.menuNotFound": "Menu introuvable",
17
+ "local.notFound": "Introuvable",
18
+ "local.unsupportedMedia": "Type de média ou nom de fichier non pris en charge ou incohérent",
19
+ "local.mediaTooLarge": "Le média dépasse {limit} Mo",
20
+ "local.emptyMedia": "Le corps du média est vide",
21
+ "local.readImageFailed": "Impossible de lire le corps de l’image",
22
+ "local.emptyImage": "Le corps de l’image est vide",
23
+ "local.mediaBytesMismatch": "Le type du média ne correspond pas à ses octets",
24
+ "local.saveImageFailed": "Impossible d’enregistrer l’image",
25
+ "local.saveMetadataFailed": "Impossible d’enregistrer les métadonnées",
26
+ "local.mediaUrlRequired": "Une URL de média est requise",
27
+ "local.fileNotFound": "Fichier introuvable",
28
+ "local.deleteFileFailed": "Impossible de supprimer le fichier. Réessayez.",
29
+ "local.missingSlug": "Slug manquant",
30
+ "local.copyNotFound": "Aucun module copy pour {slug}",
31
+ "local.copyValuesNotFound": "Impossible de trouver le bloc values dans {slug}.ts",
32
+ "local.unknownDocumentType": "Type de document inconnu : {type}",
33
+ "local.creatingDisabled": "La création d’entrées est désactivée pour ce type de document",
34
+ "local.invalidDocumentSlug": "Slug de document invalide",
35
+ "local.documentObjectRequired": "Le document doit être un objet",
36
+ "local.documentExists": "Un document avec ce slug existe déjà",
37
+ "local.documentNotFound": "Document introuvable",
38
+ "local.writeDocumentFailed": "Impossible d’écrire le document",
39
+ "local.invalidMetadataBody": "Corps de requête invalide",
40
+ "local.unknownMetadataField": "Champ de métadonnées inconnu",
41
+ "local.unknownAsset": "Fichier inconnu",
42
+ "local.invalidDisplayName": "Nom d’affichage invalide",
43
+ "local.metadataTitleString": "Le titre doit être une chaîne de caractères",
44
+ "local.metadataDescriptionString": "La description doit être une chaîne de caractères",
45
+ "local.metadataAltString": "Le texte alternatif doit être une chaîne de caractères",
46
+ "local.metadataAltImagesOnly": "Le texte alternatif n’est disponible que pour les images",
47
+ "local.mediaDirectoryUnavailable": "Dossier des médias indisponible",
48
+ "local.menuStorageUnavailable": "Impossible d’accéder au menu : données stockées invalides ou stockage non sûr ou indisponible"
49
+ }
@@ -0,0 +1,166 @@
1
+ {
2
+ "media.insertMedia": "Insérer un média",
3
+ "media.image": "Image",
4
+ "media.video": "Vidéo",
5
+ "media.insertImage": "Insérer une image",
6
+ "media.metadataSaveFailedStatus": "Échec de l’enregistrement des métadonnées ({status})",
7
+ "media.metadataSaved": "Métadonnées enregistrées.",
8
+ "media.metadataSaveFailed": "Échec de l’enregistrement des métadonnées",
9
+ "media.deleteFailed": "Impossible de supprimer le fichier ({status}). Réessayez.",
10
+ "media.fileDeleted": "Fichier supprimé.",
11
+ "media.listingUnavailable": "Liste des médias indisponible. Démarrez le serveur de développement local ou recompilez le site.",
12
+ "media.enterVideoUrl": "Saisissez une URL de vidéo commençant par https:// ou /",
13
+ "media.enterImageUrl": "Saisissez une URL d’image commençant par https:// ou /",
14
+ "media.chooseVideoUrl": "Choisissez l’URL d’une vidéo MP4, WebM ou MOV.",
15
+ "media.chooseImageUrl": "Choisissez l’URL d’une image, et non d’un document ou d’un autre fichier multimédia.",
16
+ "media.searchFailed": "Échec de la recherche",
17
+ "media.pasteVideoUrl": "Collez une URL de vidéo {provider}.",
18
+ "media.unsafeMediaUrl": "URL de média non sûre",
19
+ "media.uploadedMetadataFailed": "Fichier importé, mais les métadonnées n’ont pas pu être enregistrées ({status}). Réessayez pour terminer l’importation.",
20
+ "media.availableInLibrary": "Média disponible dans la médiathèque du dépôt.",
21
+ "media.photoImportFailed": "Échec de l’importation de la photo",
22
+ "media.chooseSupportedFile": "Choisissez un fichier pris en charge de {limit} Mo maximum, avec un nom de fichier sûr.",
23
+ "media.chooseSupportedVideo": "Choisissez une vidéo prise en charge de {limit} Mo maximum, avec un nom de fichier sûr.",
24
+ "media.chooseSupportedImage": "Choisissez une image prise en charge de {limit} Mo maximum, avec un nom de fichier sûr.",
25
+ "media.heading": "Médias",
26
+ "media.upload": "Importer",
27
+ "media.noImage": "Aucune image",
28
+ "media.choose": "Choisir…",
29
+ "media.removeImage": "Retirer l’image",
30
+ "media.repositoryWritable": "Médias du dépôt : public/{folder}. Les fichiers sont écrits dès la confirmation de l’importation ; le contenu doit toujours être enregistré avec Enregistrer.",
31
+ "media.repositorySnapshot": "Médias du dépôt : public/{folder}. Instantané créé lors de la compilation. Les importations de fichiers et de photos de banques d’images nécessitent le serveur de développement local ; l’importation via GitHub n’est pas connectée.",
32
+ "media.view": "Affichage des médias",
33
+ "media.gridView": "Vue en grille",
34
+ "media.listView": "Vue en liste",
35
+ "media.type": "Type de média",
36
+ "media.videoFormat": "Format vidéo",
37
+ "media.imageFormat": "Format d’image",
38
+ "media.allItems": "Tous les médias",
39
+ "media.allVideos": "Toutes les vidéos",
40
+ "media.allImages": "Toutes les images",
41
+ "media.category.Images": "Images",
42
+ "media.category.Audio": "Audio",
43
+ "media.category.Video": "Vidéo",
44
+ "media.category.Documents": "Documents",
45
+ "media.category.Spreadsheets": "Feuilles de calcul",
46
+ "media.category.Archives": "Archives",
47
+ "media.category.Other": "Autres",
48
+ "media.modifiedMonth": "Mois de modification",
49
+ "media.modifiedMonthHint": "Mois de modification dans le système de fichiers (UTC), et non date d’importation",
50
+ "media.allModifiedDates": "Toutes les dates de modification",
51
+ "media.refresh": "Actualiser",
52
+ "media.resetFilters": "Réinitialiser les filtres",
53
+ "media.searchMedia": "Rechercher des médias",
54
+ "media.searchMediaPlaceholder": "Rechercher des médias…",
55
+ "media.fileExtension": "FICHIER",
56
+ "media.library": "Médiathèque",
57
+ "media.file": "Fichier",
58
+ "media.fileType": "Type",
59
+ "media.size": "Taille",
60
+ "media.modifiedUtc": "Modifié (UTC)",
61
+ "media.loading": "Chargement des médias…",
62
+ "media.noMatches": "Aucun média ne correspond à ces filtres.",
63
+ "media.emptyFolder": "Ce dossier ne contient pas encore de médias.",
64
+ "media.editVideo": "Modifier la vidéo",
65
+ "media.addVideoLink": "Ajouter un lien vidéo",
66
+ "media.uploadMedia": "Importer des médias",
67
+ "media.chooseVideo": "Choisir une vidéo",
68
+ "media.chooseImage": "Choisir une image",
69
+ "media.editProviderVideo": "Modifier la vidéo {provider}",
70
+ "media.addProviderVideo": "Ajouter une vidéo {provider}",
71
+ "media.previewMedia": "Aperçu du média",
72
+ "media.close": "Fermer",
73
+ "media.pdfPreview": "Aperçu du PDF",
74
+ "media.textPreview": "Aperçu du texte",
75
+ "media.selectedImagePreview": "Aperçu de l’image sélectionnée",
76
+ "media.displayName": "Nom d’affichage",
77
+ "media.mediaDisplayName": "Nom d’affichage du média",
78
+ "media.decorativeAlt": "Texte alternatif (laisser vide si l’image est décorative)",
79
+ "media.imageAlt": "Texte alternatif de l’image",
80
+ "media.alt": "Texte alternatif",
81
+ "media.mediaAlt": "Texte alternatif du média",
82
+ "media.title": "Titre",
83
+ "media.imageTitle": "Titre de l’image",
84
+ "media.mediaTitle": "Titre du média",
85
+ "media.description": "Description",
86
+ "media.imageDescription": "Description de l’image",
87
+ "media.mediaDescription": "Description du média",
88
+ "media.author": "Auteur : {author}",
89
+ "media.localUser": "Utilisateur local",
90
+ "media.videoUrl": "URL de la vidéo",
91
+ "media.imageUrl": "URL de l’image",
92
+ "media.captionOptional": "Légende (facultative)",
93
+ "media.descriptiveAlt": "Texte alternatif (décrire l’image ; laisser vide si elle est décorative)",
94
+ "media.videoCaption": "Légende de la vidéo",
95
+ "media.muted": "Son coupé",
96
+ "media.showControls": "Afficher les commandes",
97
+ "media.confirmUpload": "La confirmation importe ce fichier dans le dossier des médias du dépôt. Le contenu doit toujours être enregistré avec Enregistrer.",
98
+ "media.confirmDownload": "La confirmation télécharge ce fichier dans le dossier des médias du dépôt. Le contenu doit toujours être enregistré avec Enregistrer.",
99
+ "media.downloadFile": "Télécharger le fichier",
100
+ "media.deleteFile": "Supprimer le fichier",
101
+ "media.filePath": "Chemin du fichier média",
102
+ "media.cancel": "Annuler",
103
+ "media.saving": "Enregistrement…",
104
+ "media.save": "Enregistrer",
105
+ "media.back": "Retour",
106
+ "media.done": "Terminé",
107
+ "media.uploadingVideo": "Importation de la vidéo…",
108
+ "media.importingPhoto": "Importation de la photo…",
109
+ "media.useVideo": "Utiliser la vidéo",
110
+ "media.uploadFile": "Importer un fichier",
111
+ "media.importImage": "Importer l’image",
112
+ "media.videoSources": "Sources vidéo",
113
+ "media.imageSources": "Sources d’images",
114
+ "media.source.library": "médiathèque",
115
+ "media.source.upload": "importation",
116
+ "media.source.url": "url",
117
+ "media.unsplashUploadsHint": "Les photos de l’API Unsplash doivent rester liées à leur source et ne sont disponibles que pour insérer des images dans le contenu, pas pour les importer dans le dépôt.",
118
+ "media.providerLinkHint": "Collez un lien {provider}. Le mode de confidentialité avancée est activé par défaut.",
119
+ "media.accessibleTitle": "Titre pour l’accessibilité (facultatif)",
120
+ "media.privacyEnhanced": "Confidentialité avancée (aucun cookie avant la lecture)",
121
+ "media.updateVideo": "Mettre à jour la vidéo",
122
+ "media.insert": "Insérer",
123
+ "media.localFileHint": "Choisissez un fichier local, puis vérifiez l’aperçu et confirmez. Aucun fichier n’est importé avant la confirmation.",
124
+ "media.uploadVideoLimit": "Importer une vidéo (MP4, WebM, MOV) · {limit} Mo maximum",
125
+ "media.uploadMediaLimit": "Importer des médias (images, audio, vidéos, documents, feuilles de calcul, archives) · {limit} Mo maximum",
126
+ "media.uploadImageLimit": "Importer une image (JPEG, PNG, WebP, GIF, AVIF) · {limit} Mo maximum",
127
+ "media.readOnlyUploads": "Les importations locales nécessitent le serveur de développement local. Cette médiathèque est en lecture seule.",
128
+ "media.videoUrlPlaceholder": "https://… ou /media/video.mp4",
129
+ "media.imageUrlPlaceholder": "https://… ou /images/photo.jpg",
130
+ "media.useUrl": "Utiliser cette URL",
131
+ "media.picsumHint": "Photos de remplacement de Lorem Picsum (graine, pas de recherche sémantique).",
132
+ "media.unsplashHint": "Les photos Unsplash restent liées à Unsplash ; leur sélection enregistre un téléchargement.",
133
+ "media.stockImportHint": "Importez les photos sélectionnées dans le dossier des médias (développement local uniquement).",
134
+ "media.searchPhotos": "Rechercher des photos",
135
+ "media.searchPhotosPlaceholder": "Rechercher des photos…",
136
+ "media.search": "Rechercher",
137
+ "media.noPhotos": "Aucune photo trouvée. Essayez une autre recherche.",
138
+ "media.deleteTitle": "Supprimer « {name} » ?",
139
+ "media.deleteDescription": "Le fichier et ses métadonnées seront définitivement supprimés. Cette action est irréversible. Les pages utilisant ce fichier afficheront des médias ou des liens rompus.",
140
+ "media.pexelsKeyPlaceholder": "p. ex. Ab3dE6fG9hJ2…",
141
+ "media.pixabayKeyPlaceholder": "p. ex. 12345678-abcdef012345…",
142
+ "media.unsplashKeyPlaceholder": "p. ex. AbCdEf12_GhIjKl34…",
143
+ "media.providerStatus": "{provider} {status}",
144
+ "media.pixabayKeyRequired": "Ajoutez une clé API Pixabay dans Paramètres → Médias",
145
+ "media.unsplashKeyRequired": "Ajoutez une clé API Unsplash dans Paramètres",
146
+ "media.pexelsKeyRequired": "Ajoutez une clé API Pexels dans Paramètres → Médias",
147
+ "media.unknownStockProvider": "Fournisseur de photos inconnu",
148
+ "media.unexpectedStockUrl": "URL de photo inattendue",
149
+ "media.unsplashPhotoMissing": "Photo Unsplash ou clé API manquante",
150
+ "media.unsplashTrackingFailed": "Échec du suivi des téléchargements Unsplash ({status})",
151
+ "media.unsafeImageUrl": "URL d’image non sûre",
152
+ "media.remoteRequiresHttps": "Les importations distantes nécessitent HTTPS",
153
+ "media.unsplashHotlinkRequired": "Les images de l’API Unsplash doivent rester liées à leur source. Utilisez Unsplash dans le sélecteur d’images du contenu.",
154
+ "media.imageDownloadFailed": "Échec du téléchargement de l’image. La source doit autoriser les téléchargements dans le navigateur (CORS) ; sinon, importez le fichier image.",
155
+ "media.photoDownloadFailed": "Échec du téléchargement de la photo ({status})",
156
+ "media.photoLimitExceeded": "La photo dépasse la limite d’importation de {limit} Mo",
157
+ "media.chooseImageFormat": "Choisissez une image JPEG, PNG ou WebP.",
158
+ "media.emptyDownload": "L’image téléchargée est vide",
159
+ "media.uploadFailed": "Échec de l’importation ({status}) : {body}",
160
+ "media.invalidUploadedUrl": "URL du fichier importé invalide",
161
+ "media.localImportRequired": "L’importation de photos nécessite le serveur de développement local",
162
+ "media.photoImportFailedStatus": "Échec de l’importation de la photo ({status})",
163
+ "media.invalidImportedUrl": "URL de la photo importée invalide",
164
+ "media.providerVideo": "Vidéo {provider}",
165
+ "media.embedCaption": "{provider} · {title}"
166
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "richtext.bold": "Gras",
3
+ "richtext.italic": "Italique",
4
+ "richtext.inlineCode": "Code en ligne",
5
+ "richtext.strikethrough": "Barré",
6
+ "richtext.underline": "Souligné",
7
+ "richtext.highlight": "Surlignage",
8
+ "richtext.subscript": "Indice",
9
+ "richtext.superscript": "Exposant",
10
+ "richtext.video": "Vidéo",
11
+ "richtext.youtube": "YouTube",
12
+ "richtext.vimeo": "Vimeo",
13
+ "richtext.body": "Corps du texte",
14
+ "richtext.loadArticleError": "Impossible de charger l’article",
15
+ "richtext.safeUrlError": "Saisissez une URL sûre : http, https, mailto ou relative.",
16
+ "richtext.link": "Lien",
17
+ "richtext.moreFormatting": "Autres options de mise en forme",
18
+ "richtext.tableControls": "Commandes du tableau",
19
+ "richtext.addRowBelow": "Ajouter une ligne en dessous",
20
+ "richtext.addColumnRight": "Ajouter une colonne à droite",
21
+ "richtext.removeRow": "Supprimer la ligne",
22
+ "richtext.removeColumn": "Supprimer la colonne",
23
+ "richtext.headerRow": "Ligne d’en-tête",
24
+ "richtext.imageEditing": "Modification de l’image",
25
+ "richtext.bodyFormatting": "Mise en forme du corps du texte",
26
+ "richtext.editAltText": "Modifier le texte alternatif",
27
+ "richtext.editImageLink": "Modifier le lien de l’image",
28
+ "richtext.addImageLink": "Ajouter un lien à l’image",
29
+ "richtext.blockType": "Type de bloc",
30
+ "richtext.replaceImage": "Remplacer l’image",
31
+ "richtext.insertMedia": "Insérer un média",
32
+ "richtext.table": "Tableau",
33
+ "richtext.bulletedList": "Liste à puces",
34
+ "richtext.numberedList": "Liste numérotée",
35
+ "richtext.undo": "Annuler",
36
+ "richtext.redo": "Rétablir",
37
+ "richtext.addBlock": "Ajouter un bloc",
38
+ "richtext.moreActions": "Autres actions",
39
+ "richtext.viewAsMarkdown": "Afficher en Markdown",
40
+ "richtext.editLink": "Modifier le lien",
41
+ "richtext.linkUrl": "URL du lien",
42
+ "richtext.applyLink": "Appliquer le lien",
43
+ "richtext.removeLink": "Supprimer le lien",
44
+ "richtext.closeLink": "Fermer le lien",
45
+ "richtext.editImageAltText": "Modifier le texte alternatif de l’image",
46
+ "richtext.decorativeAltText": "Texte alternatif (laisser vide si l’image est décorative)",
47
+ "richtext.imageAltText": "Texte alternatif de l’image",
48
+ "richtext.applyAltText": "Appliquer le texte alternatif",
49
+ "richtext.closeAltText": "Fermer le texte alternatif",
50
+ "richtext.selectedTextFormatting": "Mise en forme du texte sélectionné",
51
+ "richtext.closeMarkdownView": "Fermer la vue Markdown",
52
+ "richtext.bodyAsMarkdown": "Corps du texte en Markdown",
53
+ "richtext.articleBlocks": "Blocs de l’article",
54
+ "richtext.insertParagraphHere": "Insérer un paragraphe ici",
55
+ "richtext.insertParagraph": "Insérer un paragraphe",
56
+ "richtext.blockOptionsHandle": "Options du bloc et poignée de déplacement",
57
+ "richtext.dragBlockHint": "Faites glisser pour réorganiser ; cliquez pour afficher les options du bloc",
58
+ "richtext.insertBlock": "Insérer un bloc",
59
+ "richtext.chooseBlock": "Choisir un bloc",
60
+ "richtext.findBlock": "Rechercher un bloc",
61
+ "richtext.findBlockPlaceholder": "Rechercher un bloc…",
62
+ "richtext.noMatchingBlocks": "Aucun bloc correspondant.",
63
+ "richtext.addTable": "Ajouter un tableau",
64
+ "richtext.blockOptions": "Options du bloc",
65
+ "richtext.duplicateBlock": "Dupliquer le bloc",
66
+ "richtext.deleteBlock": "Supprimer le bloc",
67
+ "richtext.moveUp": "Monter",
68
+ "richtext.moveDown": "Descendre",
69
+ "richtext.convertBlockType": "Changer le type de bloc",
70
+ "richtext.code": "Code",
71
+ "richtext.bulletList": "Liste à puces",
72
+ "richtext.quote": "Citation",
73
+ "richtext.unsupportedMarkdown": "Ce Markdown contient une mise en forme que l’éditeur visuel ne peut pas préserver de façon fiable. Modifiez la source d’origine ci-dessous ; rien n’a été converti.",
74
+ "richtext.visual": "Visuel",
75
+ "richtext.markdown": "Markdown",
76
+ "richtext.textStyle": "Style du texte",
77
+ "richtext.paragraph": "Paragraphe",
78
+ "richtext.codeBlock": "Bloc de code",
79
+ "richtext.textFormatting": "Mise en forme du texte",
80
+ "richtext.listsAndQuote": "Listes et citation",
81
+ "richtext.image": "Image",
82
+ "richtext.divider": "Séparateur",
83
+ "richtext.pageLoadError": "La page n’a pas pu être chargée dans l’aperçu.",
84
+ "richtext.liveEditingUnavailable": "Cette page n’est pas configurée pour la modification en direct. Les modifications n’apparaîtront pas dans cet aperçu.",
85
+ "richtext.previewUnavailable": "Aperçu indisponible",
86
+ "richtext.previewMode": "Mode d’aperçu",
87
+ "richtext.browse": "Parcourir",
88
+ "richtext.edit": "Modifier",
89
+ "richtext.editPreviewHint": "Cliquez sur une zone pour la modifier. Les scripts, formulaires et liens restent désactivés.",
90
+ "richtext.browsePreviewHint": "Les scripts, formulaires et liens sont désactivés dans cet aperçu.",
91
+ "richtext.previewOnWebsite": "Afficher l’aperçu sur le site",
92
+ "richtext.togglePropertiesPanel": "Afficher ou masquer le panneau des propriétés",
93
+ "richtext.newPagePreviewHint": "Nouvelle page — Enregistrer écrit le fichier. La route s’affichera une fois le fichier disponible sur le site.",
94
+ "richtext.noDocumentPreview": "Aucune URL d’aperçu n’est associée à ce document. Utilisez le panneau des propriétés pour le modifier.",
95
+ "richtext.websitePageEditor": "Éditeur de pages du site",
96
+ "richtext.editText": "Modifier le texte",
97
+ "richtext.propertiesPanelWidth": "Largeur du panneau des propriétés",
98
+ "richtext.preparedPageLoadError": "La page préparée n’a pas pu être chargée. Vérifiez son URL et ses en-têtes autorisant l’affichage dans un cadre.",
99
+ "richtext.previewTimeout": "Le chargement de l’aperçu a pris trop de temps. Vérifiez son URL et réessayez.",
100
+ "richtext.loadingPreview": "Chargement de l’aperçu…",
101
+ "richtext.preparedPageUnavailable": "La page préparée n’a pas pu être chargée.",
102
+ "richtext.noPreparedAnchors": "Cette page ne contient aucune ancre Rigel préparée.",
103
+ "richtext.websitePreview": "Aperçu du site",
104
+ "richtext.liveDraftPreview": "Aperçu en direct du brouillon sur le site",
105
+ "richtext.preparedTemplateHint": "Modèle préparé · Scripts, navigation et formulaires désactivés. Les champs et listes sans ancre ne sont pas affichés dans l’aperçu.",
106
+ "richtext.menuPreviewUnsupported": "L’aperçu des menus n’est pas pris en charge.",
107
+ "richtext.noContentPreview": "Aucune URL d’aperçu préparé n’est associée à ce contenu.",
108
+ "richtext.previewFetchError": "Impossible de récupérer l’aperçu du brouillon. Vérifiez l’URL, HTTPS, CORS (Access-Control-Allow-Origin pour cet éditeur), les redirections et la directive connect-src de l’éditeur. Les cookies d’authentification ne sont pas envoyés.",
109
+ "richtext.previewHtmlError": "L’aperçu du brouillon n’a pas renvoyé de HTML. Vérifiez la route associée et l’en-tête Content-Type.",
110
+ "richtext.heading": "Titre {level}",
111
+ "richtext.editingMode": "Mode de modification : {label}",
112
+ "richtext.formatting": "Mise en forme : {label}",
113
+ "richtext.markdownSource": "Source Markdown : {label}",
114
+ "richtext.panelPixels": "{width} pixels",
115
+ "richtext.previewHttpError": "L’aperçu du brouillon a renvoyé HTTP {status}. Vérifiez le déploiement du brouillon et la route associée."
116
+ }