decidim-comments 0.17.2 → 0.18.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/comments/bundle.js +16 -16
  3. data/app/assets/javascripts/decidim/comments/bundle.js.map +1 -1
  4. data/app/commands/decidim/comments/vote_comment.rb +12 -2
  5. data/app/frontend/comments/add_comment_form.component.tsx +2 -0
  6. data/app/frontend/comments/comment.component.test.tsx +56 -0
  7. data/app/frontend/comments/comment.component.tsx +10 -8
  8. data/app/frontend/comments/comments.component.test.tsx +18 -0
  9. data/app/frontend/comments/comments.component.tsx +28 -5
  10. data/app/frontend/comments/down_vote_button.component.test.tsx +5 -5
  11. data/app/frontend/comments/down_vote_button.component.tsx +2 -2
  12. data/app/frontend/comments/up_vote_button.component.test.tsx +4 -4
  13. data/app/frontend/comments/up_vote_button.component.tsx +2 -2
  14. data/app/frontend/fragments/comment_data.fragment.graphql +1 -0
  15. data/app/frontend/queries/comments.query.graphql +1 -0
  16. data/app/frontend/support/generate_comments_data.ts +1 -0
  17. data/app/frontend/support/schema.ts +52 -0
  18. data/app/models/decidim/comments/comment.rb +14 -0
  19. data/app/types/decidim/comments/commentable_interface.rb +6 -0
  20. data/config/locales/ar-SA.yml +1 -0
  21. data/config/locales/ar.yml +108 -0
  22. data/config/locales/ca.yml +1 -0
  23. data/config/locales/cs.yml +1 -0
  24. data/config/locales/de.yml +1 -0
  25. data/config/locales/en.yml +1 -0
  26. data/config/locales/es-MX.yml +1 -0
  27. data/config/locales/es-PY.yml +1 -0
  28. data/config/locales/es.yml +1 -0
  29. data/config/locales/eu.yml +1 -0
  30. data/config/locales/fi-plain.yml +1 -0
  31. data/config/locales/fi.yml +1 -0
  32. data/config/locales/fr.yml +1 -0
  33. data/config/locales/gl.yml +1 -0
  34. data/config/locales/hu.yml +1 -0
  35. data/config/locales/id-ID.yml +1 -0
  36. data/config/locales/it.yml +1 -0
  37. data/config/locales/nl.yml +1 -0
  38. data/config/locales/pl.yml +1 -0
  39. data/config/locales/pt-BR.yml +1 -0
  40. data/config/locales/pt.yml +1 -0
  41. data/config/locales/sv.yml +1 -0
  42. data/config/locales/tr-TR.yml +1 -0
  43. data/lib/decidim/comments.rb +4 -0
  44. data/lib/decidim/comments/api/comment_type.rb +6 -0
  45. data/lib/decidim/comments/commentable.rb +5 -0
  46. data/lib/decidim/comments/version.rb +1 -1
  47. metadata +8 -7
@@ -36,7 +36,7 @@ export const UpVoteButton: React.SFC<UpVoteButtonProps> = ({
36
36
  }
37
37
 
38
38
  const userLoggedIn = session && session.user;
39
- const disabled = upVoted || downVoted;
39
+ const disabled = false;
40
40
 
41
41
  return (
42
42
  <VoteButton
@@ -67,7 +67,7 @@ const UpVoteButtonWithMutation = graphql<UpVoteMutation, UpVoteButtonProps>(upVo
67
67
  upVote: {
68
68
  __typename: "Comment",
69
69
  ...ownProps.comment,
70
- upVotes: ownProps.comment.upVotes + 1,
70
+ upVotes: ownProps.comment.upVotes + (ownProps.comment.upVoted ? -1 : 1),
71
71
  upVoted: true
72
72
  }
73
73
  }
@@ -19,6 +19,7 @@ fragment CommentData on Comment {
19
19
  }
20
20
  hasComments
21
21
  acceptsNewComments
22
+ userAllowedToComment
22
23
  alignment
23
24
  alreadyReported
24
25
  ...UpVoteButton
@@ -13,6 +13,7 @@ query GetComments($commentableId: String!, $commentableType: String!, $orderBy:
13
13
  }
14
14
  commentable(id: $commentableId, type: $commentableType) {
15
15
  acceptsNewComments
16
+ userAllowedToComment
16
17
  commentsHaveAlignment
17
18
  commentsHaveVotes
18
19
  totalCommentsCount
@@ -32,6 +32,7 @@ const generateCommentsData = (num = 1) => {
32
32
  hasComments: false,
33
33
  comments: [],
34
34
  acceptsNewComments: true,
35
+ userAllowedToComment: true,
35
36
  alignment: 0,
36
37
  upVotes: random.number(),
37
38
  upVoted: false,
@@ -61,6 +61,8 @@ export interface addCommentMutation {
61
61
  ),
62
62
  // Whether the object can have new comments or not
63
63
  acceptsNewComments: boolean,
64
+ // Check if the current user can comment
65
+ userAllowedToComment: boolean,
64
66
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
65
67
  alignment: number | null,
66
68
  // Check if the current user has reported the comment
@@ -121,6 +123,8 @@ export interface addCommentMutation {
121
123
  hasComments: boolean,
122
124
  // Whether the object can have new comments or not
123
125
  acceptsNewComments: boolean,
126
+ // Check if the current user can comment
127
+ userAllowedToComment: boolean,
124
128
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
125
129
  alignment: number | null,
126
130
  // Check if the current user has reported the comment
@@ -181,6 +185,8 @@ export interface addCommentMutation {
181
185
  hasComments: boolean,
182
186
  // Whether the object can have new comments or not
183
187
  acceptsNewComments: boolean,
188
+ // Check if the current user can comment
189
+ userAllowedToComment: boolean,
184
190
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
185
191
  alignment: number | null,
186
192
  // Check if the current user has reported the comment
@@ -241,6 +247,8 @@ export interface addCommentMutation {
241
247
  hasComments: boolean,
242
248
  // Whether the object can have new comments or not
243
249
  acceptsNewComments: boolean,
250
+ // Check if the current user can comment
251
+ userAllowedToComment: boolean,
244
252
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
245
253
  alignment: number | null,
246
254
  // Check if the current user has reported the comment
@@ -315,6 +323,8 @@ export interface DownVoteMutation {
315
323
  hasComments: boolean,
316
324
  // Whether the object can have new comments or not
317
325
  acceptsNewComments: boolean,
326
+ // Check if the current user can comment
327
+ userAllowedToComment: boolean,
318
328
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
319
329
  alignment: number | null,
320
330
  // Check if the current user has reported the comment
@@ -375,6 +385,8 @@ export interface DownVoteMutation {
375
385
  hasComments: boolean,
376
386
  // Whether the object can have new comments or not
377
387
  acceptsNewComments: boolean,
388
+ // Check if the current user can comment
389
+ userAllowedToComment: boolean,
378
390
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
379
391
  alignment: number | null,
380
392
  // Check if the current user has reported the comment
@@ -435,6 +447,8 @@ export interface DownVoteMutation {
435
447
  hasComments: boolean,
436
448
  // Whether the object can have new comments or not
437
449
  acceptsNewComments: boolean,
450
+ // Check if the current user can comment
451
+ userAllowedToComment: boolean,
438
452
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
439
453
  alignment: number | null,
440
454
  // Check if the current user has reported the comment
@@ -495,6 +509,8 @@ export interface DownVoteMutation {
495
509
  hasComments: boolean,
496
510
  // Whether the object can have new comments or not
497
511
  acceptsNewComments: boolean,
512
+ // Check if the current user can comment
513
+ userAllowedToComment: boolean,
498
514
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
499
515
  alignment: number | null,
500
516
  // Check if the current user has reported the comment
@@ -569,6 +585,8 @@ export interface UpVoteMutation {
569
585
  hasComments: boolean,
570
586
  // Whether the object can have new comments or not
571
587
  acceptsNewComments: boolean,
588
+ // Check if the current user can comment
589
+ userAllowedToComment: boolean,
572
590
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
573
591
  alignment: number | null,
574
592
  // Check if the current user has reported the comment
@@ -629,6 +647,8 @@ export interface UpVoteMutation {
629
647
  hasComments: boolean,
630
648
  // Whether the object can have new comments or not
631
649
  acceptsNewComments: boolean,
650
+ // Check if the current user can comment
651
+ userAllowedToComment: boolean,
632
652
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
633
653
  alignment: number | null,
634
654
  // Check if the current user has reported the comment
@@ -689,6 +709,8 @@ export interface UpVoteMutation {
689
709
  hasComments: boolean,
690
710
  // Whether the object can have new comments or not
691
711
  acceptsNewComments: boolean,
712
+ // Check if the current user can comment
713
+ userAllowedToComment: boolean,
692
714
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
693
715
  alignment: number | null,
694
716
  // Check if the current user has reported the comment
@@ -749,6 +771,8 @@ export interface UpVoteMutation {
749
771
  hasComments: boolean,
750
772
  // Whether the object can have new comments or not
751
773
  acceptsNewComments: boolean,
774
+ // Check if the current user can comment
775
+ userAllowedToComment: boolean,
752
776
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
753
777
  alignment: number | null,
754
778
  // Check if the current user has reported the comment
@@ -799,6 +823,8 @@ export interface GetCommentsQuery {
799
823
  commentable: {
800
824
  // Whether the object can have new comments or not
801
825
  acceptsNewComments: boolean,
826
+ // Check if the current user can comment
827
+ userAllowedToComment: boolean,
802
828
  // Whether the object comments have alignment or not
803
829
  commentsHaveAlignment: boolean,
804
830
  // Whether the object comments have votes or not
@@ -853,6 +879,8 @@ export interface GetCommentsQuery {
853
879
  ),
854
880
  // Whether the object can have new comments or not
855
881
  acceptsNewComments: boolean,
882
+ // Check if the current user can comment
883
+ userAllowedToComment: boolean,
856
884
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
857
885
  alignment: number | null,
858
886
  // Check if the current user has reported the comment
@@ -913,6 +941,8 @@ export interface GetCommentsQuery {
913
941
  hasComments: boolean,
914
942
  // Whether the object can have new comments or not
915
943
  acceptsNewComments: boolean,
944
+ // Check if the current user can comment
945
+ userAllowedToComment: boolean,
916
946
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
917
947
  alignment: number | null,
918
948
  // Check if the current user has reported the comment
@@ -973,6 +1003,8 @@ export interface GetCommentsQuery {
973
1003
  hasComments: boolean,
974
1004
  // Whether the object can have new comments or not
975
1005
  acceptsNewComments: boolean,
1006
+ // Check if the current user can comment
1007
+ userAllowedToComment: boolean,
976
1008
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
977
1009
  alignment: number | null,
978
1010
  // Check if the current user has reported the comment
@@ -1033,6 +1065,8 @@ export interface GetCommentsQuery {
1033
1065
  hasComments: boolean,
1034
1066
  // Whether the object can have new comments or not
1035
1067
  acceptsNewComments: boolean,
1068
+ // Check if the current user can comment
1069
+ userAllowedToComment: boolean,
1036
1070
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1037
1071
  alignment: number | null,
1038
1072
  // Check if the current user has reported the comment
@@ -1121,6 +1155,8 @@ export interface CommentFragment {
1121
1155
  hasComments: boolean,
1122
1156
  // Whether the object can have new comments or not
1123
1157
  acceptsNewComments: boolean,
1158
+ // Check if the current user can comment
1159
+ userAllowedToComment: boolean,
1124
1160
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1125
1161
  alignment: number | null,
1126
1162
  // Check if the current user has reported the comment
@@ -1181,6 +1217,8 @@ export interface CommentFragment {
1181
1217
  hasComments: boolean,
1182
1218
  // Whether the object can have new comments or not
1183
1219
  acceptsNewComments: boolean,
1220
+ // Check if the current user can comment
1221
+ userAllowedToComment: boolean,
1184
1222
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1185
1223
  alignment: number | null,
1186
1224
  // Check if the current user has reported the comment
@@ -1241,6 +1279,8 @@ export interface CommentFragment {
1241
1279
  hasComments: boolean,
1242
1280
  // Whether the object can have new comments or not
1243
1281
  acceptsNewComments: boolean,
1282
+ // Check if the current user can comment
1283
+ userAllowedToComment: boolean,
1244
1284
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1245
1285
  alignment: number | null,
1246
1286
  // Check if the current user has reported the comment
@@ -1301,6 +1341,8 @@ export interface CommentFragment {
1301
1341
  hasComments: boolean,
1302
1342
  // Whether the object can have new comments or not
1303
1343
  acceptsNewComments: boolean,
1344
+ // Check if the current user can comment
1345
+ userAllowedToComment: boolean,
1304
1346
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1305
1347
  alignment: number | null,
1306
1348
  // Check if the current user has reported the comment
@@ -1366,6 +1408,8 @@ export interface CommentDataFragment {
1366
1408
  hasComments: boolean,
1367
1409
  // Whether the object can have new comments or not
1368
1410
  acceptsNewComments: boolean,
1411
+ // Check if the current user can comment
1412
+ userAllowedToComment: boolean,
1369
1413
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1370
1414
  alignment: number | null,
1371
1415
  // Check if the current user has reported the comment
@@ -1428,6 +1472,8 @@ export interface CommentThreadFragment {
1428
1472
  ),
1429
1473
  // Whether the object can have new comments or not
1430
1474
  acceptsNewComments: boolean,
1475
+ // Check if the current user can comment
1476
+ userAllowedToComment: boolean,
1431
1477
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1432
1478
  alignment: number | null,
1433
1479
  // Check if the current user has reported the comment
@@ -1488,6 +1534,8 @@ export interface CommentThreadFragment {
1488
1534
  hasComments: boolean,
1489
1535
  // Whether the object can have new comments or not
1490
1536
  acceptsNewComments: boolean,
1537
+ // Check if the current user can comment
1538
+ userAllowedToComment: boolean,
1491
1539
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1492
1540
  alignment: number | null,
1493
1541
  // Check if the current user has reported the comment
@@ -1548,6 +1596,8 @@ export interface CommentThreadFragment {
1548
1596
  hasComments: boolean,
1549
1597
  // Whether the object can have new comments or not
1550
1598
  acceptsNewComments: boolean,
1599
+ // Check if the current user can comment
1600
+ userAllowedToComment: boolean,
1551
1601
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1552
1602
  alignment: number | null,
1553
1603
  // Check if the current user has reported the comment
@@ -1608,6 +1658,8 @@ export interface CommentThreadFragment {
1608
1658
  hasComments: boolean,
1609
1659
  // Whether the object can have new comments or not
1610
1660
  acceptsNewComments: boolean,
1661
+ // Check if the current user can comment
1662
+ userAllowedToComment: boolean,
1611
1663
  // The comment's alignment. Can be 0 (neutral), 1 (in favor) or -1 (against)'
1612
1664
  alignment: number | null,
1613
1665
  // Check if the current user has reported the comment
@@ -53,6 +53,13 @@ module Decidim
53
53
  root_commentable.accepts_new_comments? && depth < MAX_DEPTH
54
54
  end
55
55
 
56
+ # Public: Override comment threads to exclude hidden ones.
57
+ #
58
+ # Returns comment.
59
+ def comment_threads
60
+ super.reject(&:hidden?)
61
+ end
62
+
56
63
  # Public: Override Commentable concern method `users_to_notify_on_comment_created`.
57
64
  # Return the comment author together with whatever ActiveRecord::Relation is returned by
58
65
  # the `commentable`. This will cause the comment author to be notified when the
@@ -91,6 +98,13 @@ module Decidim
91
98
  Decidim::Comments::CommentSerializer
92
99
  end
93
100
 
101
+ def self.newsletter_participant_ids(space)
102
+ Decidim::Comments::Comment.includes(:root_commentable).not_hidden
103
+ .where("decidim_comments_comments.decidim_author_id IN (?)", Decidim::User.where(organization: space.organization).pluck(:id))
104
+ .where("decidim_comments_comments.decidim_author_type IN (?)", "Decidim::UserBaseEntity")
105
+ .map(&:author).pluck(:id).flatten.compact.uniq
106
+ end
107
+
94
108
  private
95
109
 
96
110
  # Private: Check if commentable can have comments and if not adds
@@ -49,6 +49,12 @@ module Decidim
49
49
  obj.comment_threads.size.positive?
50
50
  }
51
51
  end
52
+
53
+ field :userAllowedToComment, !types.Boolean, "Check if the current user can comment" do
54
+ resolve lambda { |obj, _args, ctx|
55
+ obj.commentable? && obj.user_allowed_to_comment?(ctx[:current_user])
56
+ }
57
+ end
52
58
  end
53
59
  end
54
60
  end
@@ -72,6 +72,7 @@ ar:
72
72
  comment_thread:
73
73
  title: المحادثة مع %{authorName}
74
74
  comments:
75
+ blocked_comments_for_user_warning: لا يمكنك التعليق في هذه اللحظة ، ولكن يمكنك قراءة التعليقات السابقة.
75
76
  blocked_comments_warning: التعليقات معطلة في هذا الوقت ، لكن يمكنك قراءة التعليقات السابقة.
76
77
  loading: جارٍ تحميل التعليقات ...
77
78
  title: "%{count} تعليقات"
@@ -0,0 +1,108 @@
1
+ ar:
2
+ activemodel:
3
+ models:
4
+ decidim/comments/comment_by_followed_user_event: تعليق
5
+ decidim/comments/comment_created_event: تعليق
6
+ decidim/comments/reply_created_event: تعليق الرد
7
+ decidim/comments/user_mentioned_event: أشير
8
+ activerecord:
9
+ models:
10
+ decidim/comments/comment:
11
+ zero: تعليقات
12
+ one: تعليق
13
+ two: تعليقات
14
+ few: تعليقات
15
+ many: تعليقات
16
+ other: تعليقات
17
+ decidim/comments/comment_vote:
18
+ zero: الأصوات
19
+ one: تصويت
20
+ two: الأصوات
21
+ few: الأصوات
22
+ many: الأصوات
23
+ other: الأصوات
24
+ decidim:
25
+ comments:
26
+ comments: تعليقات
27
+ last_activity:
28
+ new_comment_at_html: "<span>تعليق جديد على %{link}</span>"
29
+ votes:
30
+ create:
31
+ error: حدثت مشكلة في التصويت على التعليق.
32
+ components:
33
+ add_comment_form:
34
+ account_message: <a href="%{sign_in_url}">سجل الدخول بحسابك</a> أو <a href="%{sign_up_url}">اشترك</a> لإضافة تعليقك.
35
+ form:
36
+ body:
37
+ label: تعليق
38
+ placeholder: ما رأيك بهذا؟
39
+ form_error: النص مطلوب ولا يمكن أن يكون أطول من %{length} حرف.
40
+ submit: إرسال
41
+ user_group_id:
42
+ label: التعليق باسم
43
+ opinion:
44
+ neutral: محايد
45
+ remaining_characters: "%{count} الحروف المتبقية"
46
+ remaining_characters_1: "%{count} حرف اليسار"
47
+ title: أضف تعليقك
48
+ comment:
49
+ alignment:
50
+ against: ضد
51
+ in_favor: لصالح
52
+ deleted_user: مشارك محذوف
53
+ reply: الرد
54
+ report:
55
+ action: أبلغ عن
56
+ already_reported: تم الإبلاغ عن هذا المحتوى بالفعل وسيتم مراجعته من قبل المشرف.
57
+ close: قريب
58
+ description: هل هذا المحتوى غير مناسب؟
59
+ details: تعليقات اضافية
60
+ reasons:
61
+ does_not_belong: يحتوي على نشاط غير قانوني أو تهديدات انتحارية أو معلومات شخصية أو أي شيء آخر تعتقد أنه لا ينتمي إلى %{organization_name}.
62
+ offensive: يحتوي على العنصرية والتمييز الجنسي والتشهير والهجمات الشخصية والتهديدات بالقتل أو طلبات الانتحار أو أي شكل من أشكال خطاب الكراهية.
63
+ spam: يحتوي على clickbait أو الإعلان أو الخدع أو روبوت البرامج النصية.
64
+ title: الإبلاغ عن مشكلة
65
+ comment_order_selector:
66
+ order:
67
+ best_rated: أفضل تصنيف
68
+ most_discussed: الأكثر مناقشة
69
+ older: اكبر سنا
70
+ recent: الأخيرة
71
+ title: 'ترتيب حسب:'
72
+ comment_thread:
73
+ title: المحادثة مع %{authorName}
74
+ comments:
75
+ blocked_comments_for_user_warning: لا يمكنك التعليق في هذه اللحظة ، ولكن يمكنك قراءة التعليقات السابقة.
76
+ blocked_comments_warning: التعليقات معطلة في هذا الوقت ، لكن يمكنك قراءة التعليقات السابقة.
77
+ loading: جارٍ تحميل التعليقات ...
78
+ title: "%{count} تعليقات"
79
+ events:
80
+ comments:
81
+ comment_by_followed_user:
82
+ email_intro: "%{author_name} ترك تعليق في %{resource_title}. يمكنك قراءتها في هذه الصفحة:"
83
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع %{author_name}. يمكنك إلغاء تتبع هذا المستخدم من صفحة ملفه الشخصي.
84
+ email_subject: هناك تعليق جديد مِن %{author_name} على %{resource_title}
85
+ notification_title: هناك تعليق جديد مِن <a href="%{author_path}">%{author_name} %{author_nickname}</a> على <a href="%{resource_path}">%{resource_title}</a>.
86
+ comment_created:
87
+ email_intro: "%{resource_title} تم التعليق. يمكنك قراءة التعليق في هذه الصفحة:"
88
+ email_outro: لقد تلقيت هذا الإشعار لأنك تتابع "%{resource_title}" أو مؤلفه. يمكنك إلغاء تتبعه من الرابط السابق.
89
+ email_subject: هناك تعليق جديد من %{author_name} في %{resource_title}
90
+ notification_title: هناك تعليق جديد مِن <a href="%{author_path}">%{author_name} %{author_nickname}</a> على <a href="%{resource_path}">%{resource_title}</a>
91
+ reply_created:
92
+ email_intro: "%{author_name} رد على تعليقك في %{resource_title}. يمكنك قراءتها في هذه الصفحة:"
93
+ email_outro: لقد تلقيت هذا الإشعار لأنه تم الرد على تعليقك.
94
+ email_subject: "%{author_name} رد على تعليقك في %{resource_title}"
95
+ notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> رد على تعليقك في <a href="%{resource_path}">%{resource_title}</a>
96
+ user_mentioned:
97
+ email_intro: لقد ذكرت
98
+ email_outro: لقد تلقيت هذا الإشعار لأنك ذكرت في %{resource_title}.
99
+ email_subject: لقد ذكرت في %{resource_title}
100
+ notification_title: لقد ذكرت في <a href="%{resource_path}">%{resource_title}</a> من <a href="%{author_path}">%{author_name} %{author_nickname}</a>
101
+ metrics:
102
+ comments:
103
+ description: عدد التعليقات الناتجة عن المشاركين
104
+ object: تعليقات
105
+ title: تعليقات
106
+ errors:
107
+ messages:
108
+ cannot_have_comments: لا يمكن أن يكون لديك تعليقات
@@ -64,6 +64,7 @@ ca:
64
64
  comment_thread:
65
65
  title: Conversa amb %{authorName}
66
66
  comments:
67
+ blocked_comments_for_user_warning: No pots fer comentaris en aquest moment, però pots llegir els anteriors.
67
68
  blocked_comments_warning: Els comentaris estan desactivats en aquest moment, però pots llegir els anteriors.
68
69
  loading: Carregant els comentaris ...
69
70
  title: "%{count} comentaris"
@@ -68,6 +68,7 @@ cs:
68
68
  comment_thread:
69
69
  title: Konverzace s číslem %{authorName}
70
70
  comments:
71
+ blocked_comments_for_user_warning: V tuto chvíli nemůžete komentovat, ale můžete si přečíst předchozí.
71
72
  blocked_comments_warning: Komentáře jsou v tuto chvíli zakázány, ale můžete si přečíst předchozí.
72
73
  loading: Načítání komentářů ...
73
74
  title: "%{count} komentářů"
@@ -64,6 +64,7 @@ de:
64
64
  comment_thread:
65
65
  title: Konversation mit %{authorName}
66
66
  comments:
67
+ blocked_comments_for_user_warning: Sie können momentan nichts kommentieren, aber Sie können die vorherigen lesen.
67
68
  blocked_comments_warning: Kommentare sind zu diesem Zeitpunkt deaktiviert, aber Sie können die vorherigen lesen.
68
69
  loading: Kommentare werden geladen ...
69
70
  title: "%{count} Kommentare"