ep_comments_page 1.0.39 → 1.0.42

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 CHANGED
@@ -1,4 +1,5 @@
1
- ![Publish Status](https://github.com/ether/ep_comments_page/workflows/Node.js%20Package/badge.svg) ![Backend Tests Status](https://github.com/ether/ep_comments_page/workflows/Backend%20tests/badge.svg)
1
+ [![Publish Status](https://github.com/ether/ep_comments_page/workflows/Node.js%20Package/badge.svg)](https://github.com/ether/ep_comments_page/actions/workflows/test-and-release.yml)
2
+ [![Backend Tests Status](https://github.com/ether/ep_comments_page/workflows/Backend%20tests/badge.svg)](https://github.com/ether/ep_comments_page/actions/workflows/backend-tests.yml)
2
3
 
3
4
  # Comments and annotations for Etherpad
4
5
 
@@ -6,7 +7,7 @@
6
7
 
7
8
  ## Installing this plugin with npm.
8
9
  ```
9
- npm install ep_comments_page
10
+ pnpm run plugins install ep_comments_page
10
11
  ```
11
12
 
12
13
  ## Extra settings
package/apiUtils.js CHANGED
@@ -1,31 +1,48 @@
1
1
  'use strict';
2
2
 
3
- const absolutePaths = require('ep_etherpad-lite/node/utils/AbsolutePaths');
4
- const fs = require('fs');
5
3
  const padManager = require('ep_etherpad-lite/node/db/PadManager');
6
4
  const settings = require('ep_etherpad-lite/node/utils/Settings');
7
5
 
8
- // ensure we have an apiKey
9
- let apiKey = '';
10
- try {
11
- apiKey = fs.readFileSync(absolutePaths.makeAbsolute('./APIKEY.txt'), 'utf8').trim();
12
- } catch (e) {
13
- console.warn('Could not find APIKEY');
14
- }
15
-
16
- // Checks if api key is correct and prepare response if it is not.
17
- // Returns true if valid, false otherwise.
18
- const validateApiKey = (fields, res) => {
19
- let valid = true;
6
+ // Validate authorization - checks API key or JWT token depending on auth method
7
+ const validateAuth = async (req, res) => {
8
+ try {
9
+ // If API key auth is configured
10
+ const apiKeyHandler = require('ep_etherpad-lite/node/handler/APIKeyHandler');
11
+ const apikey = apiKeyHandler.apikey;
12
+ if (apikey !== null && apikey.trim().length > 0) {
13
+ const fields = Object.assign({}, req.query, req.body);
14
+ const receivedKey = fields.apikey || fields.api_key || req.headers.authorization;
15
+ if (receivedKey !== apikey.trim()) {
16
+ res.statusCode = 401;
17
+ res.json({code: 4, message: 'no or wrong API Key', data: null});
18
+ return false;
19
+ }
20
+ return true;
21
+ }
20
22
 
21
- const apiKeyReceived = fields.apikey || fields.api_key;
22
- if (apiKeyReceived !== apiKey) {
23
+ // SSO/JWT auth
24
+ if (!req.headers.authorization) {
25
+ res.statusCode = 401;
26
+ res.json({code: 4, message: 'no or wrong API Key', data: null});
27
+ return false;
28
+ }
29
+ const {jwtVerify} = require('jose');
30
+ const {jwtDecode} = require('jwt-decode');
31
+ const {publicKeyExported} = require('ep_etherpad-lite/node/security/OAuth2Provider');
32
+ const clientIds = settings.sso?.clients?.map((client) => client.client_id) ?? [];
33
+ const jwtToCheck = req.headers.authorization.replace('Bearer ', '');
34
+ const payload = jwtDecode(jwtToCheck);
35
+ if (clientIds.includes(payload.sub)) {
36
+ await jwtVerify(jwtToCheck, publicKeyExported, {algorithms: ['RS256']});
37
+ } else {
38
+ await jwtVerify(jwtToCheck, publicKeyExported, {algorithms: ['RS256'], requiredClaims: ['admin']});
39
+ }
40
+ return true;
41
+ } catch (e) {
23
42
  res.statusCode = 401;
24
43
  res.json({code: 4, message: 'no or wrong API Key', data: null});
25
- valid = false;
44
+ return false;
26
45
  }
27
-
28
- return valid;
29
46
  };
30
47
 
31
48
  const validateRequiredField =
@@ -70,7 +87,7 @@ const broadcastUrlFor = (endPoint) => {
70
87
 
71
88
  /* ********** Available functions/values: ********** */
72
89
 
73
- exports.validateApiKey = validateApiKey;
90
+ exports.validateAuth = validateAuth;
74
91
  exports.validateRequiredFields = validateRequiredFields;
75
92
  exports.sanitizePadId = sanitizePadId;
76
93
  exports.broadcastUrlFor = broadcastUrlFor;
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const AttributePool = require('ep_etherpad-lite/static/js/AttributePool');
4
- const Changeset = require('ep_etherpad-lite/static/js/Changeset');
3
+ const AttributePool = require('ep_etherpad-lite/static/js/AttributePool').default || require('ep_etherpad-lite/static/js/AttributePool');
4
+ const Changeset = require('ep_etherpad-lite/static/js/Changeset').default || require('ep_etherpad-lite/static/js/Changeset');
5
5
  const eejs = require('ep_etherpad-lite/node/eejs/');
6
6
  const settings = require('ep_etherpad-lite/node/utils/Settings');
7
7
  const {Formidable} = require('formidable');
@@ -9,7 +9,7 @@ const commentManager = require('./commentManager');
9
9
  const apiUtils = require('./apiUtils');
10
10
  const _ = require('underscore');
11
11
  const padMessageHandler = require('ep_etherpad-lite/node/handler/PadMessageHandler');
12
- const readOnlyManager = require('ep_etherpad-lite/node/db/ReadOnlyManager');
12
+ const readOnlyManager = require('ep_etherpad-lite/node/db/ReadOnlyManager').default || require('ep_etherpad-lite/node/db/ReadOnlyManager');
13
13
 
14
14
  let io;
15
15
 
@@ -17,8 +17,8 @@ exports.exportEtherpadAdditionalContent = (hookName, context, callback) => callb
17
17
 
18
18
  exports.padRemove = async (hookName, context) => {
19
19
  await Promise.all([
20
- commentManager.deleteCommentReplies(context.padID),
21
- commentManager.deleteComments(context.padID),
20
+ commentManager.deleteCommentReplies(context.pad.id),
21
+ commentManager.deleteComments(context.pad.id),
22
22
  ]);
23
23
  };
24
24
 
@@ -204,11 +204,8 @@ exports.clientVars = (hook, context, cb) => {
204
204
  };
205
205
 
206
206
  exports.expressCreateServer = (hookName, args, callback) => {
207
- const handlePadRevComments = async (req, res) => {
208
- const fields = req.query;
209
- // check the api key
210
- if (!apiUtils.validateApiKey(fields, res)) return;
211
-
207
+ args.app.get('/p/:pad{/:rev}/comments', async (req, res) => {
208
+ if (!await apiUtils.validateAuth(req, res)) return;
212
209
  // sanitize pad id before continuing
213
210
  const padIdReceived = (await readOnlyManager.getIds(apiUtils.sanitizePadId(req))).padId;
214
211
 
@@ -222,23 +219,28 @@ exports.expressCreateServer = (hookName, args, callback) => {
222
219
  }
223
220
  if (data == null) return;
224
221
  res.json({code: 0, data});
225
- }
226
-
227
- args.app.get('/p/:pad/:rev/comments', async (req, res) => {
228
- await handlePadRevComments(req, res)
229
222
  });
230
223
 
231
- args.app.get('/p/:pad/comments', async (req, res) => {
232
- await handlePadRevComments(req, res)
233
- });
234
-
235
- const postRevision = async (req, res)=>{
236
- const fields = await new Promise((resolve, reject) => {
224
+ // Helper that returns request fields from either req.body (when Etherpad's
225
+ // express body-parser middleware has already parsed JSON or urlencoded) or
226
+ // by parsing the raw body with Formidable (multipart/form-data uploads).
227
+ // Formidable v3 returns array values; flatten them so callers can use
228
+ // fields.data without indexing.
229
+ const parseRequestFields = async (req) => {
230
+ if (req.body && Object.keys(req.body).length > 0) return req.body;
231
+ const raw = await new Promise((resolve, reject) => {
237
232
  new Formidable().parse(req, (err, fields) => err ? reject(err) : resolve(fields));
238
233
  });
234
+ const flat = {};
235
+ for (const [k, v] of Object.entries(raw || {})) {
236
+ flat[k] = Array.isArray(v) ? v[0] : v;
237
+ }
238
+ return flat;
239
+ };
239
240
 
240
- // check the api key
241
- if (!apiUtils.validateApiKey(fields, res)) return;
241
+ args.app.post('/p/:pad{/:rev}/comments', async (req, res) => {
242
+ if (!await apiUtils.validateAuth(req, res)) return;
243
+ const fields = await parseRequestFields(req);
242
244
 
243
245
  // check required fields from comment data
244
246
  if (!apiUtils.validateRequiredFields(fields, ['data'], res)) return;
@@ -268,23 +270,10 @@ exports.expressCreateServer = (hookName, args, callback) => {
268
270
  io.to(padIdReceived).emit('pushAddComment', commentIds[i], comments[i]);
269
271
  }
270
272
  res.json({code: 0, commentIds});
271
- }
272
-
273
- args.app.post('/p/:pad/:rev/comments', async (req, res) => {
274
- await postRevision(req, res);
275
- });
276
-
277
- args.app.post('/p/:pad/comments', async (req, res) => {
278
- await postRevision(req, res);
279
273
  });
280
274
 
281
-
282
- const getCommentReplies = async (req, res) => {
283
- // it's the same thing as the formidable's fields
284
- const fields = req.query;
285
- // check the api key
286
- if (!apiUtils.validateApiKey(fields, res)) return;
287
-
275
+ args.app.get('/p/:pad{/:rev}/commentReplies', async (req, res) => {
276
+ if (!await apiUtils.validateAuth(req, res)) return;
288
277
  // sanitize pad id before continuing
289
278
  const padIdReceived = (await readOnlyManager.getIds(apiUtils.sanitizePadId(req))).padId;
290
279
 
@@ -299,23 +288,11 @@ exports.expressCreateServer = (hookName, args, callback) => {
299
288
  }
300
289
  if (data == null) return;
301
290
  res.json({code: 0, data});
302
- }
303
-
304
- args.app.get('/p/:pad/commentReplies', async (req, res) => {
305
- await getCommentReplies(req, res);
306
- });
307
-
308
- args.app.get('/p/:pad/:rev/commentReplies', async (req, res) => {
309
- await getCommentReplies(req, res);
310
291
  });
311
292
 
312
- const postCommentReplies = async (req, res) => {
313
- const fields = await new Promise((resolve, reject) => {
314
- new Formidable().parse(req, (err, fields) => err ? reject(err) : resolve(fields));
315
- });
316
-
317
- // check the api key
318
- if (!apiUtils.validateApiKey(fields, res)) return;
293
+ args.app.post('/p/:pad{/:rev}/commentReplies', async (req, res) => {
294
+ if (!await apiUtils.validateAuth(req, res)) return;
295
+ const fields = await parseRequestFields(req);
319
296
 
320
297
  // check required fields from comment data
321
298
  if (!apiUtils.validateRequiredFields(fields, ['data'], res)) return;
@@ -346,15 +323,6 @@ exports.expressCreateServer = (hookName, args, callback) => {
346
323
  io.to(padIdReceived).emit('pushAddCommentReply', replyIds[i], replies[i]);
347
324
  }
348
325
  res.json({code: 0, replyIds});
349
- }
350
-
351
- args.app.post('/p/:pad/:rev/commentReplies', async (req, res) => {
352
- await postCommentReplies(req, res);
353
326
  });
354
-
355
- args.app.post('/p/:pad/commentReplies', async (req, res) => {
356
- await postCommentReplies(req, res);
357
- });
358
-
359
327
  return callback();
360
328
  };
package/locales/es.json CHANGED
@@ -2,21 +2,30 @@
2
2
  "@metadata": {
3
3
  "authors": [
4
4
  "Avengium",
5
- "Jakeukalane"
5
+ "Jakeukalane",
6
+ "Ovruni"
6
7
  ]
7
8
  },
8
9
  "ep_comments_page.comment": "Comentario",
9
10
  "ep_comments_page.comments": "Comentarios",
11
+ "ep_comments_page.add_comment.title": "Añadir nuevo comentario sobre la selección",
12
+ "ep_comments_page.add_comment": "Añadir nuevo comentario sobre la selección",
10
13
  "ep_comments_page.add_comment.hint": "Primero selecciona el texto para comentar",
14
+ "ep_comments_page.delete_comment.title": "Eliminar este comentario",
11
15
  "ep_comments_page.edit_comment.title": "Editar este comentario",
16
+ "ep_comments_page.show_comments": "Mostrar comentarios",
17
+ "ep_comments_page.comments_template.suggested_change": "Cambio sugerido",
18
+ "ep_comments_page.comments_template.from": "De",
12
19
  "ep_comments_page.comments_template.accept_change.value": "Aceptar cambio",
13
20
  "ep_comments_page.comments_template.revert_change.value": "Revertir cambio",
14
21
  "ep_comments_page.comments_template.suggested_change_from": "Cambio sugerido de \"{{changeFrom}}\" a \"{{changeTo}}\"",
15
22
  "ep_comments_page.comments_template.suggest_change_from": "Sugerir cambio de \"{{changeFrom}}\" a",
23
+ "ep_comments_page.comments_template.to": "Para",
16
24
  "ep_comments_page.comments_template.include_suggestion": "Incluir cambio sugerido",
17
25
  "ep_comments_page.comments_template.comment.value": "Comentario",
18
26
  "ep_comments_page.comments_template.cancel.value": "Cancelar",
19
27
  "ep_comments_page.comments_template.reply.value": "Responder",
28
+ "ep_comments_page.comments_template.reply.placeholder": "Responder",
20
29
  "ep_comments_page.comments_template.edit_comment.save": "Guardar",
21
30
  "ep_comments_page.comments_template.edit_comment.cancel": "cancelar",
22
31
  "ep_comments_page.error.edit_unauth": "¡No puedes editar los comentarios de otros usuarios!",
package/locales/fr.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "@metadata": {
3
3
  "authors": [
4
+ "Meaz",
4
5
  "Verdy p"
5
6
  ]
6
7
  },
7
8
  "ep_comments_page.comment": "Annotation",
8
9
  "ep_comments_page.comments": "Annotations",
9
- "ep_comments_page.add_comment.title": "Annoter la sélection",
10
- "ep_comments_page.add_comment": "Annoter la sélection",
11
- "ep_comments_page.add_comment.hint": "Vous devez d'abord sélectionner un texte à annoter",
12
- "ep_comments_page.delete_comment.title": "Supprimer cette annotation",
13
- "ep_comments_page.edit_comment.title": "Modifier cette annotation",
14
- "ep_comments_page.show_comments": "Afficher les annotations",
10
+ "ep_comments_page.add_comment.title": "Ajouter un nouveau commentaire sur la sélection",
11
+ "ep_comments_page.add_comment": "Ajouter un nouveau commentaire sur la sélection",
12
+ "ep_comments_page.add_comment.hint": "Vous devez d'abord sélectionner un texte à commenter",
13
+ "ep_comments_page.delete_comment.title": "Supprimer ce commentaire",
14
+ "ep_comments_page.edit_comment.title": "Modifier ce commentaire",
15
+ "ep_comments_page.show_comments": "Afficher le commentaire",
15
16
  "ep_comments_page.comments_template.suggested_change": "Modification proposée",
16
17
  "ep_comments_page.comments_template.from": "Remplacer",
17
18
  "ep_comments_page.comments_template.accept_change.value": "Appliquer la proposition",
@@ -20,7 +21,7 @@
20
21
  "ep_comments_page.comments_template.suggest_change_from": "Remplacer « {{changeFrom}} » par",
21
22
  "ep_comments_page.comments_template.to": "Par",
22
23
  "ep_comments_page.comments_template.include_suggestion": "Inclure la modification suggérée",
23
- "ep_comments_page.comments_template.comment.value": "Annotation",
24
+ "ep_comments_page.comments_template.comment.value": "Commentaire",
24
25
  "ep_comments_page.comments_template.cancel.value": "Annuler",
25
26
  "ep_comments_page.comments_template.reply.value": "Répondre",
26
27
  "ep_comments_page.comments_template.reply.placeholder": "Répondre",
@@ -0,0 +1,31 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Aindriu80"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "Trácht",
8
+ "ep_comments_page.comments": "Tráchtanna",
9
+ "ep_comments_page.add_comment.title": "Cuir trácht nua leis an rogha",
10
+ "ep_comments_page.add_comment": "Cuir trácht nua leis an rogha",
11
+ "ep_comments_page.add_comment.hint": "Roghnaigh an téacs le trácht a dhéanamh air ar dtús",
12
+ "ep_comments_page.delete_comment.title": "Scrios an trácht seo",
13
+ "ep_comments_page.edit_comment.title": "Cuir an trácht seo in eagar",
14
+ "ep_comments_page.show_comments": "Taispeáin Tráchtanna",
15
+ "ep_comments_page.comments_template.suggested_change": "Athrú Molta",
16
+ "ep_comments_page.comments_template.from": "Ó",
17
+ "ep_comments_page.comments_template.accept_change.value": "Glac leis an Athrú",
18
+ "ep_comments_page.comments_template.revert_change.value": "Athraigh a Chur Ar Ais",
19
+ "ep_comments_page.comments_template.suggested_change_from": "Athrú molta ó \"{{changeFrom}}\" go \"{{changeTo}}\"",
20
+ "ep_comments_page.comments_template.suggest_change_from": "Mol athrú ó \"{{changeFrom}}\" go",
21
+ "ep_comments_page.comments_template.to": "Chuig",
22
+ "ep_comments_page.comments_template.include_suggestion": "Cuir an t-athrú molta san áireamh",
23
+ "ep_comments_page.comments_template.comment.value": "Trácht",
24
+ "ep_comments_page.comments_template.cancel.value": "Cealaigh",
25
+ "ep_comments_page.comments_template.reply.value": "Freagra",
26
+ "ep_comments_page.comments_template.reply.placeholder": "Freagra",
27
+ "ep_comments_page.comments_template.edit_comment.save": "sábháil",
28
+ "ep_comments_page.comments_template.edit_comment.cancel": "cealaigh",
29
+ "ep_comments_page.error.edit_unauth": "Ní féidir leat tuairimí úsáideoirí eile a chur in eagar!",
30
+ "ep_comments_page.error.delete_unauth": "Ní féidir leat tuairimí úsáideoirí eile a scriosadh!"
31
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Gothicspeaker"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "𐍅𐌰𐌿𐍂𐌳",
8
+ "ep_comments_page.comments": "𐍅𐌰𐌿𐍂𐌳𐌰",
9
+ "ep_comments_page.comments_template.to": "𐌳𐌿",
10
+ "ep_comments_page.comments_template.cancel.value": "𐌱𐌹𐍅𐌰𐌽𐌳𐌾𐌰𐌽",
11
+ "ep_comments_page.comments_template.reply.value": "𐌰𐌽𐌳𐌷𐌰𐍆𐌾𐌰𐌽",
12
+ "ep_comments_page.comments_template.reply.placeholder": "𐌰𐌽𐌳𐌷𐌰𐍆𐌾𐌰𐌽",
13
+ "ep_comments_page.comments_template.edit_comment.save": "𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽",
14
+ "ep_comments_page.comments_template.edit_comment.cancel": "𐌱𐌹𐍅𐌰𐌽𐌳𐌾𐌰𐌽"
15
+ }
package/locales/gur.json CHANGED
@@ -4,7 +4,6 @@
4
4
  "Adignyoke",
5
5
  "Akakiiri",
6
6
  "Akoonaba",
7
- "Amire80",
8
7
  "Amoramah"
9
8
  ]
10
9
  },
package/locales/ha.json CHANGED
@@ -2,7 +2,6 @@
2
2
  "@metadata": {
3
3
  "authors": [
4
4
  "Abbaty",
5
- "Amire80",
6
5
  "Omar Ali",
7
6
  "Salihu aliyu"
8
7
  ]
package/locales/hu.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "@metadata": {
3
- "authors": []
3
+ "authors": [
4
+ "Urbalazs"
5
+ ]
4
6
  },
5
7
  "ep_comments_page.comment": "Megjegyzés",
6
8
  "ep_comments_page.comments": "Megjegyzések",
@@ -19,7 +21,7 @@
19
21
  "ep_comments_page.comments_template.to": "Címzett:",
20
22
  "ep_comments_page.comments_template.include_suggestion": "Javasolt változtatás tartalmazása",
21
23
  "ep_comments_page.comments_template.comment.value": "Megjegyzés",
22
- "ep_comments_page.comments_template.cancel.value": "Mégsem",
24
+ "ep_comments_page.comments_template.cancel.value": "Mégse",
23
25
  "ep_comments_page.comments_template.reply.value": "Válasz",
24
26
  "ep_comments_page.comments_template.reply.placeholder": "Válasz",
25
27
  "ep_comments_page.comments_template.edit_comment.save": "mentés",
@@ -0,0 +1,31 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Inabat Allanova"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "Pikir",
8
+ "ep_comments_page.comments": "Pikirler",
9
+ "ep_comments_page.add_comment.title": "Tańlawǵa jańa pikir qosıw",
10
+ "ep_comments_page.add_comment": "Tańlawǵa jańa pikir qosıw",
11
+ "ep_comments_page.add_comment.hint": "Dáslep, pikir jazıw ushın tekstti tańlań",
12
+ "ep_comments_page.delete_comment.title": "Pikirdi óshiriw",
13
+ "ep_comments_page.edit_comment.title": "Pikirdi redaktorlaw",
14
+ "ep_comments_page.show_comments": "Pikirlerdi kórsetiw",
15
+ "ep_comments_page.comments_template.suggested_change": "Usınılǵan ózgeris",
16
+ "ep_comments_page.comments_template.from": "Usıdan baslap:",
17
+ "ep_comments_page.comments_template.accept_change.value": "Ózgeristi qabıl etiw",
18
+ "ep_comments_page.comments_template.revert_change.value": "Ózgeristi qaytarıw",
19
+ "ep_comments_page.comments_template.suggested_change_from": "«{{changeFrom}}»tan «{{changeTo}}»qa ózgertiw usınıs etildi",
20
+ "ep_comments_page.comments_template.suggest_change_from": "«{{changeFrom}}» ornına basqasın usınıs etiń",
21
+ "ep_comments_page.comments_template.to": "Usıǵan shekem",
22
+ "ep_comments_page.comments_template.include_suggestion": "Usınılǵan ózgeristi kirgiziw",
23
+ "ep_comments_page.comments_template.comment.value": "Pikir",
24
+ "ep_comments_page.comments_template.cancel.value": "Biykarlaw",
25
+ "ep_comments_page.comments_template.reply.value": "Juwap beriw",
26
+ "ep_comments_page.comments_template.reply.placeholder": "Juwap beriw",
27
+ "ep_comments_page.comments_template.edit_comment.save": "saqlaw",
28
+ "ep_comments_page.comments_template.edit_comment.cancel": "biykarlaw",
29
+ "ep_comments_page.error.edit_unauth": "Siz basqa paydalanıwshılardıń pikirlerin redaktorlay almaysız!",
30
+ "ep_comments_page.error.delete_unauth": "Siz basqa paydalanıwshılardıń pikirlerin óshire almaysız!"
31
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "ButterflyOfFire"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "Awennit",
8
+ "ep_comments_page.comments": "Iwenniten",
9
+ "ep_comments_page.comments_template.cancel.value": "Semmet",
10
+ "ep_comments_page.comments_template.reply.value": "Tiririt",
11
+ "ep_comments_page.comments_template.reply.placeholder": "Tiririt",
12
+ "ep_comments_page.comments_template.edit_comment.save": "sekles",
13
+ "ep_comments_page.comments_template.edit_comment.cancel": "semmet"
14
+ }
package/locales/ko.json CHANGED
@@ -3,7 +3,8 @@
3
3
  "authors": [
4
4
  "Dr1t jg",
5
5
  "Ykhwong",
6
- "그냥기여자"
6
+ "그냥기여자",
7
+ "아라"
7
8
  ]
8
9
  },
9
10
  "ep_comments_page.comment": "의견",
@@ -14,7 +15,7 @@
14
15
  "ep_comments_page.delete_comment.title": "이 의견 삭제",
15
16
  "ep_comments_page.edit_comment.title": "이 의견 편집하기",
16
17
  "ep_comments_page.show_comments": "의견 표시",
17
- "ep_comments_page.comments_template.suggested_change": "제안된 변경 사항",
18
+ "ep_comments_page.comments_template.suggested_change": "제안된 변경사항",
18
19
  "ep_comments_page.comments_template.from": "출발지",
19
20
  "ep_comments_page.comments_template.accept_change.value": "변경 수락",
20
21
  "ep_comments_page.comments_template.revert_change.value": "변경사항 되돌리기",
package/locales/lb.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "@metadata": {
3
3
  "authors": [
4
- "Robby"
4
+ "Robby",
5
+ "Volvox"
5
6
  ]
6
7
  },
7
8
  "ep_comments_page.comment": "Bemierkung",
@@ -12,7 +13,7 @@
12
13
  "ep_comments_page.comments_template.suggested_change": "Proposéiert Ännerung",
13
14
  "ep_comments_page.comments_template.from": "Vum",
14
15
  "ep_comments_page.comments_template.accept_change.value": "Ännerung akzeptéieren",
15
- "ep_comments_page.comments_template.revert_change.value": "Ännerung zrécksetzen",
16
+ "ep_comments_page.comments_template.revert_change.value": "Ännerung zerécksetzen",
16
17
  "ep_comments_page.comments_template.to": "Fir",
17
18
  "ep_comments_page.comments_template.comment.value": "Bemierkung",
18
19
  "ep_comments_page.comments_template.cancel.value": "Ofbriechen",
package/locales/nl.json CHANGED
@@ -26,6 +26,6 @@
26
26
  "ep_comments_page.comments_template.reply.placeholder": "Antwoord",
27
27
  "ep_comments_page.comments_template.edit_comment.save": "bewaar",
28
28
  "ep_comments_page.comments_template.edit_comment.cancel": "annuleer",
29
- "ep_comments_page.error.edit_unauth": "You cannot edit other users comments!",
30
- "ep_comments_page.error.delete_unauth": "You cannot delete other users comments!"
29
+ "ep_comments_page.error.edit_unauth": "U kunt de opmerkingen van andere gebruikers niet bewerken!",
30
+ "ep_comments_page.error.delete_unauth": "U kunt de opmerkingen van andere gebruikers niet verwijderen!"
31
31
  }
@@ -0,0 +1,15 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Cabal"
5
+ ]
6
+ },
7
+ "ep_comments_page.comments": "ਟਿੱਪਣੀਆਂ",
8
+ "ep_comments_page.comments_template.from": "ਵੱਲੋਂ",
9
+ "ep_comments_page.comments_template.accept_change.value": "ਤਬਦੀਲੀ ਸਵੀਕਾਰੋ",
10
+ "ep_comments_page.comments_template.cancel.value": "ਰੱਦ ਕਰੋ",
11
+ "ep_comments_page.comments_template.reply.value": "ਜੁਆਬ ਦਿਓ",
12
+ "ep_comments_page.comments_template.reply.placeholder": "ਜੁਆਬ ਦਿਓ",
13
+ "ep_comments_page.comments_template.edit_comment.save": "ਸਾਂਭੋ",
14
+ "ep_comments_page.comments_template.edit_comment.cancel": "ਰੱਦ ਕਰੋ"
15
+ }
package/locales/pl.json CHANGED
@@ -1,21 +1,23 @@
1
1
  {
2
2
  "@metadata": {
3
- "authors": []
3
+ "authors": [
4
+ "Usagi.02808"
5
+ ]
4
6
  },
5
7
  "ep_comments_page.comment": "Komentarz",
6
8
  "ep_comments_page.comments": "Komentarze",
7
- "ep_comments_page.add_comment.title": "Dodaj nowy komentarz do sekcji",
8
- "ep_comments_page.add_comment": "Dodaj nowy komentarz do sekcji",
9
+ "ep_comments_page.add_comment.title": "Dodaj nowy komentarz do zaznaczonego tekstu",
10
+ "ep_comments_page.add_comment": "Dodaj nowy komentarz do zaznaczonego tekstu",
9
11
  "ep_comments_page.add_comment.hint": "Najpierw wybierz tekst do skomentowania",
10
12
  "ep_comments_page.delete_comment.title": "Usuń komentarz",
11
- "ep_comments_page.edit_comment.title": "Edit this comment",
13
+ "ep_comments_page.edit_comment.title": "Edytuj ten komentarz",
12
14
  "ep_comments_page.show_comments": "Pokaż komentarze",
13
- "ep_comments_page.comments_template.suggested_change": "Sugerowane zmiany",
15
+ "ep_comments_page.comments_template.suggested_change": "Sugerowana zmiana",
14
16
  "ep_comments_page.comments_template.from": "Od",
15
17
  "ep_comments_page.comments_template.accept_change.value": "Zaakceptuj zmiany",
16
18
  "ep_comments_page.comments_template.revert_change.value": "Przywróc zmiany",
17
- "ep_comments_page.comments_template.suggested_change_from": "Sugerowana zmiana z",
18
- "ep_comments_page.comments_template.suggest_change_from": "Zaproponuj zmiane z",
19
+ "ep_comments_page.comments_template.suggested_change_from": "Sugerowana zmiana z „{{changeFrom}}” na „{{changeTo}}”",
20
+ "ep_comments_page.comments_template.suggest_change_from": "Zaproponuj zmianę z „{{changeFrom}}” na",
19
21
  "ep_comments_page.comments_template.to": "Do",
20
22
  "ep_comments_page.comments_template.include_suggestion": "Dołącz sugestie",
21
23
  "ep_comments_page.comments_template.comment.value": "Komentarz",
@@ -24,6 +26,6 @@
24
26
  "ep_comments_page.comments_template.reply.placeholder": "Odpowiedź",
25
27
  "ep_comments_page.comments_template.edit_comment.save": "save",
26
28
  "ep_comments_page.comments_template.edit_comment.cancel": "cancel",
27
- "ep_comments_page.error.edit_unauth": "You cannot edit other users comments!",
28
- "ep_comments_page.error.delete_unauth": "You cannot delete other users comments!"
29
+ "ep_comments_page.error.edit_unauth": "Nie możesz edytować komentarzy innych użytkowników!",
30
+ "ep_comments_page.error.delete_unauth": "Nie możesz usuwać komentarzy innych użytkowników!"
29
31
  }
@@ -0,0 +1,31 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Borichèt"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "Coment",
8
+ "ep_comments_page.comments": "Coment",
9
+ "ep_comments_page.add_comment.title": "Gionté un coment neuv an sla selession",
10
+ "ep_comments_page.add_comment": "Gionté un coment neuv an sla selession",
11
+ "ep_comments_page.add_comment.hint": "Për piasì, prima ch'a serna ël test da comenté",
12
+ "ep_comments_page.delete_comment.title": "Eliminé cost coment",
13
+ "ep_comments_page.edit_comment.title": "Modifiché cost coment",
14
+ "ep_comments_page.show_comments": "Smon-e ij coment",
15
+ "ep_comments_page.comments_template.suggested_change": "Modìfiche proponùe",
16
+ "ep_comments_page.comments_template.from": "Da",
17
+ "ep_comments_page.comments_template.accept_change.value": "Aceté la modìfica",
18
+ "ep_comments_page.comments_template.revert_change.value": "Anulé la modìfica",
19
+ "ep_comments_page.comments_template.suggested_change_from": "Propon-e ëd rampiassé «{{changeFrom}}» con «{{changeTo}}»",
20
+ "ep_comments_page.comments_template.suggest_change_from": "Propon-e ëd rampiassé «{{changeFrom}}» con",
21
+ "ep_comments_page.comments_template.to": "A",
22
+ "ep_comments_page.comments_template.include_suggestion": "Anclude la modìfica sugerìa",
23
+ "ep_comments_page.comments_template.comment.value": "Coment",
24
+ "ep_comments_page.comments_template.cancel.value": "Anulé",
25
+ "ep_comments_page.comments_template.reply.value": "Rësponde",
26
+ "ep_comments_page.comments_template.reply.placeholder": "Rësponde",
27
+ "ep_comments_page.comments_template.edit_comment.save": "argistré",
28
+ "ep_comments_page.comments_template.edit_comment.cancel": "anulé",
29
+ "ep_comments_page.error.edit_unauth": "A peul pa modifiché ij coment dj'àutri utent!",
30
+ "ep_comments_page.error.delete_unauth": "A peul nen dëscancelé ij coment ëd j'àutri utent!"
31
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "شاه زمان پټان"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "څرگندونه",
8
+ "ep_comments_page.comments": "څرگندونې",
9
+ "ep_comments_page.add_comment.title": "په ټاکنې کې نوې څرگندونه ورگډول",
10
+ "ep_comments_page.add_comment": "په ټاکنې کې نوې څرگندونه ورگډول",
11
+ "ep_comments_page.add_comment.hint": "مهرباني وکړئ د څرگندونې لپاره لومړی ليکنه وټاکئ",
12
+ "ep_comments_page.delete_comment.title": "دا څرگندونه ړنگول",
13
+ "ep_comments_page.edit_comment.title": "دا څرگندونه سمول",
14
+ "ep_comments_page.show_comments": "څرگندونې ښودل",
15
+ "ep_comments_page.comments_template.suggested_change": "وړانديزشوی بدلون",
16
+ "ep_comments_page.comments_template.from": "له",
17
+ "ep_comments_page.comments_template.accept_change.value": "بدلون منل",
18
+ "ep_comments_page.comments_template.revert_change.value": "بدلون په‌څټ‌گرځول",
19
+ "ep_comments_page.comments_template.to": "ته",
20
+ "ep_comments_page.comments_template.include_suggestion": "وړانديزشوی بدلون رانغاړل",
21
+ "ep_comments_page.comments_template.comment.value": "څرگندونه",
22
+ "ep_comments_page.comments_template.cancel.value": "ناگارل",
23
+ "ep_comments_page.comments_template.reply.value": "ځوابول",
24
+ "ep_comments_page.comments_template.reply.placeholder": "ځوابول",
25
+ "ep_comments_page.comments_template.edit_comment.save": "خوندي کول",
26
+ "ep_comments_page.comments_template.edit_comment.cancel": "ناگارل",
27
+ "ep_comments_page.error.edit_unauth": "تاسو د نورو کارنانو څرگندونې نشئ سمولی!",
28
+ "ep_comments_page.error.delete_unauth": "تاسو د نورو کارنانو څرگندونې نشئ ړنگولی!"
29
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "SZ475"
5
+ ]
6
+ },
7
+ "ep_comments_page.comment": "Comentează",
8
+ "ep_comments_page.comments": "Comentarii",
9
+ "ep_comments_page.comments_template.from": "De la",
10
+ "ep_comments_page.comments_template.accept_change.value": "Acceptă schimbarea",
11
+ "ep_comments_page.comments_template.revert_change.value": "Anulează schimbarea",
12
+ "ep_comments_page.comments_template.to": "Către",
13
+ "ep_comments_page.error.edit_unauth": "Nu poți edita comentariile altor utilizatori!",
14
+ "ep_comments_page.error.delete_unauth": "Nu poți șterge comentariile altor utilizatori!"
15
+ }