decidim-comments 0.17.2 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
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"