strapi-plugin-comments 2.1.0-beta.1 → 2.1.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.
- package/README.md +41 -5
- package/admin/src/components/Avatar/index.d.ts +12 -0
- package/admin/src/components/Avatar/index.js +26 -0
- package/admin/src/components/DiscussionThreadItemFooter/index.js +3 -4
- package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +2 -2
- package/admin/src/translations/fr.json +132 -1
- package/admin/src/translations/pt-BR.json +130 -130
- package/package.json +3 -3
- package/server/controllers/client.d.ts +2 -2
- package/server/controllers/client.js +38 -22
- package/server/controllers/utils/functions.d.ts +2 -2
- package/server/controllers/utils/parsers.d.ts +5 -10
- package/server/controllers/utils/parsers.js +33 -5
- package/server/graphql/mutations/createComment.d.ts +1 -1
- package/server/graphql/mutations/removeComment.d.ts +1 -1
- package/server/graphql/mutations/updateComment.d.ts +1 -1
- package/server/graphql/queries/findAllFlat.d.ts +1 -1
- package/server/graphql/queries/findAllFlat.js +11 -6
- package/server/graphql/queries/findAllInHierarchy.d.ts +1 -2
- package/server/graphql/queries/findAllInHierarchy.js +5 -1
- package/server/routes/client.js +37 -1
- package/server/services/admin.js +10 -5
- package/server/services/client.js +57 -45
- package/server/services/common.js +30 -11
- package/server/services/utils/functions.d.ts +1 -1
- package/server/services/utils/functions.js +9 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/types/contentTypes.d.ts +13 -9
package/README.md
CHANGED
|
@@ -32,6 +32,19 @@
|
|
|
32
32
|
|
|
33
33
|
A plugin for [Strapi Headless CMS](https://github.com/strapi/strapi) that provides end to end comments feature with their moderation panel, bad words filtering, abuse reporting and much more.
|
|
34
34
|
|
|
35
|
+
### Table of Contents
|
|
36
|
+
|
|
37
|
+
1. [✨ Features](#-features)
|
|
38
|
+
2. [⏳ Installation](#-installation)
|
|
39
|
+
3. [🖐 Requirements](#-requirements)
|
|
40
|
+
4. [🔧 Configuration](#-configuration)
|
|
41
|
+
- [Settings page](#in-v203-and-newer)
|
|
42
|
+
- [Plugin file](#in-v202-and-older--default-configuration-state-for-v203-and-newer)
|
|
43
|
+
5. [🕸️ Public API - REST](#%EF%B8%8F-public-rest-api-specification)
|
|
44
|
+
6. [🕸️ Public API - GraphQL](#%EF%B8%8F-public-graphql-specification)
|
|
45
|
+
7. [🤝 Contributing](#-contributing)
|
|
46
|
+
8. [👨💻 Community support](#-community-support)
|
|
47
|
+
|
|
35
48
|
## ✨ Features
|
|
36
49
|
|
|
37
50
|
- **Comments Public REST + GraphQL API:** Elegant, entirely customizable and a fully extensible admin panel.
|
|
@@ -48,13 +61,23 @@ A plugin for [Strapi Headless CMS](https://github.com/strapi/strapi) that provid
|
|
|
48
61
|
|
|
49
62
|
## ⏳ Installation
|
|
50
63
|
|
|
64
|
+
### Via Strapi Markerplace
|
|
65
|
+
|
|
66
|
+
As a ✅ **verified** plugin by Strapi team we're available on the [**Strapi Marketplace**](https://market.strapi.io/plugins/strapi-plugin-comments) as well as **In-App Marketplace** where you can follow the installation instructions.
|
|
67
|
+
|
|
68
|
+
<div style="margin: 20px 0" align="center">
|
|
69
|
+
<img style="width: 100%; height: auto;" src="public/assets/marketplace.png" alt="Strapi In-App Marketplace" />
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
### Via command line
|
|
73
|
+
|
|
51
74
|
(Use **yarn** to install this plugin within your Strapi project (recommended). [Install yarn with these docs](https://yarnpkg.com/lang/en/docs/install/).)
|
|
52
75
|
|
|
53
76
|
```bash
|
|
54
77
|
yarn add strapi-plugin-comments@latest
|
|
55
78
|
```
|
|
56
79
|
|
|
57
|
-
After successful installation you've to build
|
|
80
|
+
After successful installation you've to re-build your Strapi instance. To archive that simply use:
|
|
58
81
|
|
|
59
82
|
```bash
|
|
60
83
|
yarn build
|
|
@@ -69,7 +92,9 @@ yarn develop --watch-admin
|
|
|
69
92
|
|
|
70
93
|
The **Comments** plugin should appear in the **Plugins** section of Strapi sidebar after you run app again.
|
|
71
94
|
|
|
72
|
-
|
|
95
|
+
As a next step you must configure your the plugin by the way you want to. See [**Configuration**](#🔧-configuration) section.
|
|
96
|
+
|
|
97
|
+
All done. Enjoy 🎉
|
|
73
98
|
|
|
74
99
|
### Working in development mode
|
|
75
100
|
|
|
@@ -107,7 +132,7 @@ In our minimum support we're following [official Node.js releases timelines](htt
|
|
|
107
132
|
|
|
108
133
|
**Supported Strapi versions**:
|
|
109
134
|
|
|
110
|
-
- Strapi v4.1.
|
|
135
|
+
- Strapi v4.1.7 (recently tested)
|
|
111
136
|
- Strapi v4.x
|
|
112
137
|
|
|
113
138
|
> This plugin is designed for **Strapi v4** and is not working with v3.x. To get version for **Strapi v3** install version [v1.x](https://github.com/VirtusLab-Open-Source/strapi-plugin-comments/tree/strapi-v3).
|
|
@@ -116,14 +141,22 @@ In our minimum support we're following [official Node.js releases timelines](htt
|
|
|
116
141
|
|
|
117
142
|
## 🔧 Configuration
|
|
118
143
|
|
|
119
|
-
|
|
144
|
+
To start your journey with **Comments plugin** you must first setup it using the dedicated Settings page (`v2.0.3` and newer) or for any version, put your configuration in `config/plugins.js`. Anyway we're recommending the click-through option where your configuration is going to be properly validated.
|
|
145
|
+
|
|
146
|
+
### In `v2.0.3` and newer
|
|
120
147
|
|
|
121
148
|
Version `2.0.3` introduce the intuitive **Settings** page which you can easly access via `Strapi Settings -> Section: Comments Plugin -> Configuration`. On dedicated page you will be able to setup all crucial properties which drives the plugin and customize each individual collection for which **Comments plugin** should be enabled.
|
|
122
149
|
|
|
150
|
+
On the dedicated page, you will be able to set up all crucial properties which drive the plugin and customize each individual collection for which **Comments plugin** should be enabled.
|
|
151
|
+
|
|
152
|
+
<div style="margin: 20px 0" align="center">
|
|
153
|
+
<img style="width: 100%; height: auto;" src="public/assets/configuration.png" alt="Plugin configuration" />
|
|
154
|
+
</div>
|
|
155
|
+
|
|
123
156
|
> _Note_
|
|
124
157
|
> Default configuration for your plugin is fetched from `config/plugins.js` or directly from the plugin itself. If you would like to customize the default state to which you might revert, please follow the next section.
|
|
125
158
|
|
|
126
|
-
### In `v2.0.2` and older + default configuration state for `v2.0.3` and
|
|
159
|
+
### In `v2.0.2` and older + default configuration state for `v2.0.3` and newer
|
|
127
160
|
|
|
128
161
|
To setup amend default plugin configuration we recommend to put following snippet as part of `config/plugins.js` or `config/<env>/plugins.js` file. If the file does not exist yet, you have to create it manually. If you've got already configurations for other plugins stores by this way, use just the `comments` part within exising `plugins` item.
|
|
129
162
|
|
|
@@ -154,6 +187,7 @@ module.exports = ({ env }) => ({
|
|
|
154
187
|
|
|
155
188
|
### Properties
|
|
156
189
|
|
|
190
|
+
- `enabledCollections` - list of Collection and Single Types for which plugin should be enabled in format like `'api::<collection name>.<content type name>'`. By default it's empty and none comments are not enabled for any of type in Strapi.
|
|
157
191
|
- `badWords` - Enabled support for [bad words filtering](https://www.npmjs.com/package/bad-words). Can be turned off or overwritten using [options reference](https://www.npmjs.com/package/bad-words#constructor). Default value: `true`.
|
|
158
192
|
- `moderatorRoles` - Optional list of names of roles. Users with those roles will be notified by email when a new abuse report is created. This feature requires a built-in [Strapi email plugin](https://docs.strapi.io/developer-docs/latest/plugins/email.html) configured.
|
|
159
193
|
- `approvalFlow` - list of Content Types which are supporting approval flow. Values must be in format like `'api::<collection name>.<content type name>'`. For not included, posted comments are going to be immediately visible.
|
|
@@ -276,6 +310,7 @@ Return a hierarchical tree structure of comments for specified instance of Conte
|
|
|
276
310
|
|
|
277
311
|
#### Strapi REST API properties support:
|
|
278
312
|
|
|
313
|
+
- [field selection](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.html#field-selection)
|
|
279
314
|
- [sorting](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/sort-pagination.html#sorting)
|
|
280
315
|
|
|
281
316
|
### Get Comments (flat structure)
|
|
@@ -317,6 +352,7 @@ Return a flat structure of comments for specified instance of Content Type like
|
|
|
317
352
|
#### Strapi REST API properties support:
|
|
318
353
|
|
|
319
354
|
- [filtering](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/filtering-locale-publication.html#filtering)
|
|
355
|
+
- [field selection](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.html#field-selection)
|
|
320
356
|
- [sorting](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/sort-pagination.html#sorting)
|
|
321
357
|
- [pagination](https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/sort-pagination.html#pagination)
|
|
322
358
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const prop_types_1 = __importDefault(require("prop-types"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const Avatar_1 = require("@strapi/design-system/Avatar");
|
|
10
|
+
const utils_1 = require("../../utils");
|
|
11
|
+
const UserAvatar = ({ avatar, name }) => {
|
|
12
|
+
if (avatar) {
|
|
13
|
+
let image = avatar;
|
|
14
|
+
if ((0, lodash_1.isObject)(avatar)) {
|
|
15
|
+
image = avatar?.formats?.thumbnail.url || avatar.url;
|
|
16
|
+
}
|
|
17
|
+
return react_1.default.createElement(Avatar_1.Avatar, { src: image, alt: name });
|
|
18
|
+
}
|
|
19
|
+
return react_1.default.createElement(Avatar_1.Initials, null, (0, utils_1.renderInitials)(name));
|
|
20
|
+
};
|
|
21
|
+
UserAvatar.propTypes = {
|
|
22
|
+
avatar: prop_types_1.default.oneOfType(prop_types_1.default.string, prop_types_1.default.object).isRequired,
|
|
23
|
+
name: prop_types_1.default.string,
|
|
24
|
+
};
|
|
25
|
+
exports.default = UserAvatar;
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -6,11 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
7
|
const prop_types_1 = __importDefault(require("prop-types"));
|
|
8
8
|
const react_intl_1 = require("react-intl");
|
|
9
|
-
const Avatar_1 = require("@strapi/design-system/Avatar");
|
|
10
9
|
const Box_1 = require("@strapi/design-system/Box");
|
|
11
10
|
const Typography_1 = require("@strapi/design-system/Typography");
|
|
12
|
-
const utils_1 = require("../../utils");
|
|
13
11
|
const styles_1 = require("./styles");
|
|
12
|
+
const Avatar_1 = __importDefault(require("../Avatar"));
|
|
14
13
|
const DiscussionThreadItemFooter = ({ children, author, createdAt, updatedAt, }) => {
|
|
15
14
|
const { formatDate } = (0, react_intl_1.useIntl)();
|
|
16
15
|
const dateTime = formatDate(updatedAt || createdAt, {
|
|
@@ -20,7 +19,7 @@ const DiscussionThreadItemFooter = ({ children, author, createdAt, updatedAt, })
|
|
|
20
19
|
const { name, avatar } = author;
|
|
21
20
|
return (react_1.default.createElement(styles_1.DiscussionThreadItemFooterStyled, { as: Box_1.Box, paddingTop: 2, direction: "row" },
|
|
22
21
|
react_1.default.createElement(styles_1.DiscussionThreadItemFooterMeta, { size: 3, horizontal: true },
|
|
23
|
-
|
|
22
|
+
react_1.default.createElement(Avatar_1.default, { avatar: avatar, name: name }),
|
|
24
23
|
react_1.default.createElement(Typography_1.Typography, { variant: "pi", fontWeight: "bold", textColor: "neutral800" }, name),
|
|
25
24
|
react_1.default.createElement(Typography_1.Typography, { variant: "pi", textColor: "neutral600" }, dateTime)),
|
|
26
25
|
children));
|
|
@@ -30,7 +29,7 @@ DiscussionThreadItemFooter.propTypes = {
|
|
|
30
29
|
id: prop_types_1.default.oneOfType(prop_types_1.default.string, prop_types_1.default.number).isRequired,
|
|
31
30
|
name: prop_types_1.default.string.isRequired,
|
|
32
31
|
email: prop_types_1.default.string,
|
|
33
|
-
avatar: prop_types_1.default.string,
|
|
32
|
+
avatar: prop_types_1.default.oneOfType(prop_types_1.default.string, prop_types_1.default.object),
|
|
34
33
|
}).isRequired,
|
|
35
34
|
createdAt: prop_types_1.default.string.isRequired,
|
|
36
35
|
updatedAt: prop_types_1.default.string,
|
|
@@ -31,7 +31,6 @@ const prop_types_1 = __importDefault(require("prop-types"));
|
|
|
31
31
|
const react_intl_1 = require("react-intl");
|
|
32
32
|
const react_query_1 = require("react-query");
|
|
33
33
|
const lodash_1 = require("lodash");
|
|
34
|
-
const Avatar_1 = require("@strapi/design-system/Avatar");
|
|
35
34
|
const Flex_1 = require("@strapi/design-system/Flex");
|
|
36
35
|
const IconButton_1 = require("@strapi/design-system/IconButton");
|
|
37
36
|
const Link_1 = require("@strapi/design-system/Link");
|
|
@@ -49,6 +48,7 @@ const DiscussionThreadItemApprovalFlowActions_1 = __importDefault(require("../..
|
|
|
49
48
|
const StatusBadge_1 = __importDefault(require("../../../../components/StatusBadge"));
|
|
50
49
|
const styles_2 = require("../../../../components/IconButton/styles");
|
|
51
50
|
const DiscussionThreadItemReviewAction_1 = __importDefault(require("../../../../components/DiscussionThreadItemReviewAction"));
|
|
51
|
+
const Avatar_1 = __importDefault(require("../../../../components/Avatar"));
|
|
52
52
|
const DiscoverTableRow = ({ config, item, allowedActions: { canModerate, canAccessReports, canReviewReports }, onClick, }) => {
|
|
53
53
|
const { id, reports } = item;
|
|
54
54
|
const [blockButtonsDisabled, setBlockButtonsDisabled] = (0, react_1.useState)(false);
|
|
@@ -128,7 +128,7 @@ const DiscoverTableRow = ({ config, item, allowedActions: { canModerate, canAcce
|
|
|
128
128
|
item.id)),
|
|
129
129
|
react_1.default.createElement(Table_1.Td, null,
|
|
130
130
|
react_1.default.createElement(Stack_1.Stack, { size: 2, horizontal: true },
|
|
131
|
-
|
|
131
|
+
react_1.default.createElement(Avatar_1.default, { avatar: item.author?.avatar, name: item.author.name }),
|
|
132
132
|
react_1.default.createElement(Typography_1.Typography, { textColor: "neutral800", variant: "pi" }, item.author.name))),
|
|
133
133
|
react_1.default.createElement(Table_1.Td, { style: { maxWidth: "30vw" } },
|
|
134
134
|
react_1.default.createElement(Typography_1.Typography, { textColor: "neutral800", ellipsis: true }, item.content)),
|
|
@@ -1 +1,132 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"plugin.name": "Commentaires",
|
|
3
|
+
"plugin.section": "Plugin de commentaires",
|
|
4
|
+
"plugin.section.item": "Configuration",
|
|
5
|
+
"common.button.back": "Retour",
|
|
6
|
+
"nav.header.moderation": "Modération",
|
|
7
|
+
"nav.header.settings": "Paramètres",
|
|
8
|
+
"nav.item.updates": "Mises à jour",
|
|
9
|
+
"nav.item.discover": "Découvrir",
|
|
10
|
+
"nav.item.reports": "Rapports",
|
|
11
|
+
"nav.item.settings": "Paramètres",
|
|
12
|
+
"page.common.item.status.OPEN": "Ouvert",
|
|
13
|
+
"page.common.item.status.PENDING": "En attente",
|
|
14
|
+
"page.common.item.status.BLOCKED": "Bloqué",
|
|
15
|
+
"page.common.item.status.APPROVED": "Approuvé",
|
|
16
|
+
"page.common.item.status.TO_REVIEW": "À examiner ({count, number})",
|
|
17
|
+
"page.common.item.status.REJECTED": "Rejeté",
|
|
18
|
+
"page.common.item.status.REMOVED": "Retiré par l'auteur",
|
|
19
|
+
"page.updates.header": "Mises à jour récentes",
|
|
20
|
+
"page.discover.header": "Découvrir les threads",
|
|
21
|
+
"page.discover.header.count": "entrées trouvées",
|
|
22
|
+
"page.discover.table.header.id": "ID",
|
|
23
|
+
"page.discover.table.header.author": "Auteur",
|
|
24
|
+
"page.discover.table.header.message": "Message",
|
|
25
|
+
"page.discover.table.header.thread": "Thread de",
|
|
26
|
+
"page.discover.table.header.entry": "Entrée",
|
|
27
|
+
"page.discover.table.header.lastUpdate": "Dernière mise à jour",
|
|
28
|
+
"page.discover.table.header.status": "Status",
|
|
29
|
+
"page.discover.table.header.actions": "Actions",
|
|
30
|
+
"page.discover.table.cell.thread": "Commentaire #{id}",
|
|
31
|
+
"page.discover.table.action.display": "Afficher",
|
|
32
|
+
"page.discover.table.action.reports": "Rapports",
|
|
33
|
+
"page.discover.table.empty": "Vous n'avez pas de encore de commentaires.",
|
|
34
|
+
"page.discover.table.empty.search": "Aucun commentaire ne correspond à votre recherche.",
|
|
35
|
+
"page.discover.table.filters": "Filtrage",
|
|
36
|
+
"page.discover.table.reports.review": "Consultation des rapports",
|
|
37
|
+
"page.details.header": "Panel de discussion",
|
|
38
|
+
"page.details.header.description": "Exploration et gestion de discussions relatives à l'entité",
|
|
39
|
+
"page.details.panel.discussion": "Discussion",
|
|
40
|
+
"page.details.panel.discussion.nav.drilldown": "Exploration",
|
|
41
|
+
"page.details.panel.discussion.nav.back": "Retour en haut",
|
|
42
|
+
"page.details.panel.discussion.warnings.reports.description": "rapports ouverts",
|
|
43
|
+
"page.details.panel.discussion.warnings.reports.review": "consultation",
|
|
44
|
+
"page.details.panel.discussion.warnings.reports.dialog.list": "Rapports",
|
|
45
|
+
"page.details.panel.discussion.warnings.reports.dialog.header": "Modération : Examiner les rapports ouverts",
|
|
46
|
+
"page.details.panel.discussion.warnings.reports.dialog.reason": "Raison",
|
|
47
|
+
"page.details.panel.discussion.warnings.reports.dialog.reason.BAD_LANGUAGE": "Langage inapproprié",
|
|
48
|
+
"page.details.panel.discussion.warnings.reports.dialog.reason.DISCRIMINATION": "Discrimination",
|
|
49
|
+
"page.details.panel.discussion.warnings.reports.dialog.reason.OTHER": "Autre",
|
|
50
|
+
"page.details.panel.discussion.warnings.reports.dialog.content": "Contenu",
|
|
51
|
+
"page.details.panel.discussion.warnings.reports.dialog.createdAt": "Date de création",
|
|
52
|
+
"page.details.panel.discussion.warnings.reports.dialog.status": "Status",
|
|
53
|
+
"page.details.panel.discussion.warnings.reports.dialog.status.OPEN": "Ouvert",
|
|
54
|
+
"page.details.panel.discussion.warnings.reports.dialog.status.RESOLVED": "Résolu",
|
|
55
|
+
"page.details.panel.discussion.warnings.reports.dialog.actions": "Actions",
|
|
56
|
+
"page.details.panel.discussion.warnings.reports.dialog.actions.resolve": "Résoudre",
|
|
57
|
+
"page.details.panel.discussion.warnings.reports.dialog.confirmation.success": "Le rapport ouvert a été résolu",
|
|
58
|
+
"page.details.panel.discussion.status.blocked": "Bloqué",
|
|
59
|
+
"page.details.panel.entity": "Détails de l'entité",
|
|
60
|
+
"page.details.panel.status": "La discussion est",
|
|
61
|
+
"page.details.panel.status.open": "Ouvert",
|
|
62
|
+
"page.details.panel.status.blocked": "Bloqué",
|
|
63
|
+
"page.details.panel.status.pending": "En attente",
|
|
64
|
+
"page.details.panel.loading": "Récupération de l'entité...",
|
|
65
|
+
"page.details.actions.comment.block": "Bloquer le commentaire",
|
|
66
|
+
"page.details.actions.comment.block.confirmation.header": "Modération : Bloquer le commentaire",
|
|
67
|
+
"page.details.actions.comment.block.confirmation.description": "Voulez-vous vraiment bloquer ce commentaire ?",
|
|
68
|
+
"page.details.actions.comment.block.confirmation.button.confirm": "Oui, bloqué le",
|
|
69
|
+
"page.details.actions.comment.block.confirmation.success": "Le commentaire a été bloqué",
|
|
70
|
+
"page.details.actions.comment.unblock": "Débloquer le commentaire",
|
|
71
|
+
"page.details.actions.comment.unblock.confirmation.success": "Le commentaire a été débloqué",
|
|
72
|
+
"page.details.actions.comment.reports.review": "Consulter",
|
|
73
|
+
"page.details.actions.thread.block": "Bloquer le thread",
|
|
74
|
+
"page.details.actions.thread.block.confirmation.header": "Moderation: Bloquer le thread",
|
|
75
|
+
"page.details.actions.thread.block.confirmation.description": "Voulez-vous vraiment bloquer tout le thread ? Aucune autre discussion ne sera autorisée.",
|
|
76
|
+
"page.details.actions.thread.block.confirmation.button.confirm": "Oui, bloqué le",
|
|
77
|
+
"page.details.actions.thread.block.confirmation.success": "Le thread a été bloqué",
|
|
78
|
+
"page.details.actions.thread.unblock": "Débloquer le thread",
|
|
79
|
+
"page.details.actions.thread.unblock.confirmation.success": "Le thread a été débloqué",
|
|
80
|
+
"page.details.actions.comment.approve.confirmation.success": "Le commentaire a été apprové",
|
|
81
|
+
"page.details.actions.comment.reject.confirmation.success": "Le commentaire a été rejeté",
|
|
82
|
+
"page.details.filters.label": "Voir",
|
|
83
|
+
"page.details.filters.removed.visibility": "Afficher les commentaires supprimés",
|
|
84
|
+
"page.coming.soon": "Attendez pour ce qui va bientôt arriver...",
|
|
85
|
+
"page.settings": "Paramètres",
|
|
86
|
+
"page.settings.header.title": "Commentaires",
|
|
87
|
+
"page.settings.header.description": "Configurez vos capacités de modération des commentaires",
|
|
88
|
+
"page.settings.actions.submit": "Enregistrer",
|
|
89
|
+
"page.settings.actions.restore": "Restaurer les paramètres par défaut",
|
|
90
|
+
"page.settings.actions.restart": "Redémarrer Strapi",
|
|
91
|
+
"page.settings.section.general": "Configuration générale",
|
|
92
|
+
"page.settings.section.additional": "Configuration supplémentaire",
|
|
93
|
+
"page.settings.section.restore": "Restaurer les paramètres par défaut",
|
|
94
|
+
"page.settings.section.restore.subtitle": "Suppression de tous les paramètres appliqués et retour aux paramètres par défaut du plugin. Utilisez-les raisonnablement",
|
|
95
|
+
"page.settings.form.enabledCollections.label": "Activer les commentaires uniquement pour",
|
|
96
|
+
"page.settings.form.enabledCollections.placeholder": "Sélectionnez une ou plusieurs collections",
|
|
97
|
+
"page.settings.form.enabledCollections.hint": "Si aucun n'est sélectionné, tous les types de contenu sont activés",
|
|
98
|
+
"page.settings.form.contentTypesSettings.label": "Types de contenu",
|
|
99
|
+
"page.settings.form.contentTypesSettings.tooltip": "Configuration personnalisée par type de contenu",
|
|
100
|
+
"page.settings.form.moderatorRoles.label": "Envoyer des notifications importantes à",
|
|
101
|
+
"page.settings.form.moderatorRoles.placeholder": "Sélectionnez un ou plusieurs rôles",
|
|
102
|
+
"page.settings.form.moderatorRoles.hint": "Rôles qui vont être notifiés par le plugin sur les actions significatives à effectuer",
|
|
103
|
+
"page.settings.form.badWords.label": "Filtrage des gros mots",
|
|
104
|
+
"page.settings.form.badWords.hint": "Si activé, chaque message / mise à jour de commentaire va être vérifié contre les gros mots",
|
|
105
|
+
"page.settings.form.gqlAuth.label": "Autorisation des requêtes GraphQL",
|
|
106
|
+
"page.settings.form.gqlAuth.hint": "Si elle est activée, les requêtes et mutations de l'API GraphQL ne peuvent être déclenchées que par les utilisateurs Strapi authentifiés. Sinon, l'API reste ouverte.",
|
|
107
|
+
"page.settings.form.approvalFlow.label": "Flux de validation",
|
|
108
|
+
"page.settings.form.approvalFlow.hint": "Les commentaires associés au type de contenu \"{nom}\" vont être soumis à un flux de vérification manuel",
|
|
109
|
+
"page.settings.form.entryLabel.label": "Champs de titre",
|
|
110
|
+
"page.settings.form.entryLabel.placeholder": "Sélectionnez au moins un champ ou laissez vide pour appliquer les valeurs par défaut",
|
|
111
|
+
"page.settings.form.entryLabel.hint": "Si vous laissez vide, le rendu du titre sera le suivant : \"Title\", \"Subject\" & \"Name\"",
|
|
112
|
+
"page.settings.actions.restore.confirmation.header": "Restaurer la configuration par défaut",
|
|
113
|
+
"page.settings.actions.restore.confirmation.description": "Vous êtes sur le point de restaurer la configuration du plugin à ses valeurs par défaut. Cela pourrait avoir un impact destructeur sur le contenu déjà collecté. Voulez-vous vraiment continuer ?",
|
|
114
|
+
"page.settings.actions.restore.confirmation.button.confirm": "Oui, je veux restaurer",
|
|
115
|
+
"page.settings.actions.restart.alert.title": "Strapi requiert un redémarrage",
|
|
116
|
+
"page.settings.actions.restart.alert.description": "Vous avez effectué un changement de configuration qui nécessite que votre application Strapi soit redémarrée pour prendre effet dans le schéma GraphQL. Faites-le manuellement ou en utilisant le déclencheur ci-dessous.",
|
|
117
|
+
"page.settings.actions.restart.alert.close": "Abandonner",
|
|
118
|
+
"page.settings.notification.fetch.error": "Impossible de récupérer la configuration. Nouvelle tentative en cours...",
|
|
119
|
+
"page.settings.notification.submit.success": "La configuration a été enregistrée avec succès",
|
|
120
|
+
"page.settings.notification.submit.error": "Échec de la sauvegarde de la configuration. Veuillez rééssayer plus tard.",
|
|
121
|
+
"page.settings.notification.restore.success": "La configuration a été restaurée avec succès",
|
|
122
|
+
"page.settings.notification.restore.error": "Impossible de restaurer la configuration. Veuillez rééssayer plus tard.",
|
|
123
|
+
"page.settings.notification.restart.success": "L'application a été redémarrée avec succès",
|
|
124
|
+
"page.settings.notification.restart.error": "Le redémarrage de votre application a échoué. Essayez de le faire manuellement.",
|
|
125
|
+
"page.settings.loading": "Récupération de la configuration...",
|
|
126
|
+
"compontents.confirmation.dialog.header": "Confirmation",
|
|
127
|
+
"compontents.confirmation.dialog.description": "Voulez-vous vraiment effectuer cette action ?",
|
|
128
|
+
"compontents.confirmation.dialog.button.confirm": "Oui, je le veux",
|
|
129
|
+
"compontents.confirmation.dialog.button.cancel": "Annuler",
|
|
130
|
+
"compontents.toogle.enabled": "Activé",
|
|
131
|
+
"compontents.toogle.disabled": "Désactivé"
|
|
132
|
+
}
|