decidim-comments 0.28.0 → 0.28.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/comments/comment/actions.erb +4 -5
- data/app/cells/decidim/comments/comment/show.erb +7 -5
- data/app/cells/decidim/comments/comment_cell.rb +24 -4
- data/app/cells/decidim/comments/comment_thread/show.erb +1 -1
- data/app/cells/decidim/comments/comments/order_control.erb +2 -1
- data/app/cells/decidim/comments/comments/show.erb +1 -1
- data/app/cells/decidim/comments/comments/user_comments_blocked_warning.erb +2 -2
- data/app/cells/decidim/comments/comments_cell.rb +5 -1
- data/app/events/decidim/comments/comment_event.rb +4 -0
- data/app/models/decidim/comments/comment.rb +2 -2
- data/app/models/decidim/comments/comment_vote.rb +10 -0
- data/app/packs/src/decidim/comments/comments.component.test.js +4 -4
- data/app/packs/src/decidim/comments/comments.component_for_testing.js +1 -0
- data/config/locales/ar.yml +0 -1
- data/config/locales/bg.yml +169 -0
- data/config/locales/ca.yml +13 -8
- data/config/locales/cs.yml +3 -1
- data/config/locales/de.yml +6 -1
- data/config/locales/el.yml +0 -1
- data/config/locales/en.yml +6 -1
- data/config/locales/es-MX.yml +6 -1
- data/config/locales/es-PY.yml +6 -1
- data/config/locales/es.yml +14 -9
- data/config/locales/eu.yml +3 -1
- data/config/locales/fi-plain.yml +6 -1
- data/config/locales/fi.yml +6 -1
- data/config/locales/fr-CA.yml +6 -1
- data/config/locales/fr.yml +6 -1
- data/config/locales/gl.yml +0 -1
- data/config/locales/he-IL.yml +1 -0
- data/config/locales/hu.yml +5 -1
- data/config/locales/it.yml +0 -1
- data/config/locales/ja.yml +5 -1
- data/config/locales/lb.yml +0 -1
- data/config/locales/lt.yml +0 -1
- data/config/locales/lv.yml +0 -1
- data/config/locales/nl.yml +0 -1
- data/config/locales/no.yml +0 -1
- data/config/locales/pl.yml +5 -1
- data/config/locales/pt-BR.yml +0 -1
- data/config/locales/pt.yml +0 -1
- data/config/locales/ro-RO.yml +7 -4
- data/config/locales/sk.yml +0 -1
- data/config/locales/sq-AL.yml +41 -0
- data/config/locales/sr-CS.yml +0 -2
- data/config/locales/sv.yml +0 -1
- data/config/locales/tr-TR.yml +3 -1
- data/config/locales/zh-CN.yml +0 -1
- data/config/locales/zh-TW.yml +0 -1
- data/db/migrate/20240304092558_add_comment_vote_counter_cache_to_comments.rb +21 -0
- data/decidim-comments.gemspec +40 -0
- data/lib/decidim/api/comment_type.rb +2 -2
- data/lib/decidim/comments/test/factories.rb +20 -7
- data/lib/decidim/comments/test/shared_examples/comment_event.rb +34 -1
- data/lib/decidim/comments/test/shared_examples/comment_voted_event.rb +1 -1
- data/lib/decidim/comments/version.rb +1 -1
- metadata +14 -12
- data/config/environment.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24cf379816e56d8d02c96af8dfd596b8946c7098f2c672f305a97fb563861248
|
4
|
+
data.tar.gz: 361246cb66e6171732029b68e1a51edabf47bd1d605d26f698144fb148006eb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b649d92b1c7cff28097d16eaee1ab6e3d08b5600c72a180e9e83cf4556730f0a5b62223a23051d61fa160fea8b2925d9161da05e7b600e4439c973ea1fcb9a58
|
7
|
+
data.tar.gz: fef878987f09ba7d4156bc86b573d59db4c030d67f69cabca6f271ea66b1fe44288bef6e615cbf1cd423fb2e363dfa7d87a273b98fee46d7990209235b5d6467
|
@@ -1,14 +1,13 @@
|
|
1
1
|
<div class="comment__actions">
|
2
2
|
<% if depth.zero? && has_replies_in_children? %>
|
3
|
-
<button class="button button__sm button__text-secondary comment__hide" data-controls="comment-<%= model.id %>-replies">
|
3
|
+
<button class="button button__sm button__text-secondary comment__hide" data-controls="comment-<%= model.id %>-replies" data-open="true" id="comment-<%= model.id %>-replies-trigger">
|
4
|
+
<span class="show-comment-replies font-normal"><%= t("decidim.components.comment.show_replies", count: replies.size) %></span>
|
4
5
|
<%= icon "arrow-up-s-line" %>
|
5
|
-
<span class="hide-comment-replies font-normal"><%= t("decidim.components.comment.hide_replies") %></span>
|
6
|
-
<%= icon "arrow-down-s-line" %>
|
7
|
-
<span class="show-comment-replies font-normal"><%= t("decidim.components.comment.show_replies", count: replies.size, replies_count: replies.size ) %></span>
|
6
|
+
<span class="hide-comment-replies font-normal"><%= t("decidim.components.comment.hide_replies", count: replies.size) %></span>
|
8
7
|
</button>
|
9
8
|
<% end %>
|
10
9
|
<% if can_reply? %>
|
11
|
-
<button class="button button__sm button__text-secondary" data-controls="panel-<%= reply_id %>">
|
10
|
+
<button class="button button__sm button__text-secondary" data-controls="panel-<%= reply_id %>" id="panel-<%= reply_id %>-trigger">
|
12
11
|
<%= icon "chat-1-line" %>
|
13
12
|
<span class="font-normal"><%= t("decidim.components.comment.reply") %></span>
|
14
13
|
<%= icon "close-circle-line" %>
|
@@ -1,10 +1,12 @@
|
|
1
|
-
<%= content_tag :div, id: "comment_#{model.id}", class: "comment relative", data: { comment_id: model.id } do %>
|
1
|
+
<%= content_tag :div, id: "comment_#{model.id}", class: "comment relative", role: "comment", data: { comment_id: model.id, parent: parent_element_id } do %>
|
2
2
|
<% if model.hidden? %>
|
3
3
|
<%= render :moderation_data %>
|
4
4
|
<% elsif model.deleted? %>
|
5
5
|
<%= render :deletion_data %>
|
6
6
|
<% else %>
|
7
7
|
<div class="comment__header">
|
8
|
+
<div class="sr-only"><%= comment_label %></div>
|
9
|
+
|
8
10
|
<span class="font-bold">
|
9
11
|
<%== cell("decidim/author", author_presenter) %>
|
10
12
|
</span>
|
@@ -18,7 +20,7 @@
|
|
18
20
|
<% end %>
|
19
21
|
|
20
22
|
<div class="relative ml-auto">
|
21
|
-
<button id="dropdown-trigger-<%= context_menu_id %>" data-component="dropdown" data-target="dropdown-menu-<%= context_menu_id %>">
|
23
|
+
<button id="dropdown-trigger-<%= context_menu_id %>" data-component="dropdown" data-target="dropdown-menu-<%= context_menu_id %>" aria-label="<%= t("decidim.components.comment.controls_label") %>">
|
22
24
|
…
|
23
25
|
</button>
|
24
26
|
|
@@ -30,20 +32,20 @@
|
|
30
32
|
</li>
|
31
33
|
<% end %>
|
32
34
|
<li>
|
33
|
-
<%= link_to "#{commentable_path("commentId" => model.id)}#comment_#{model.id}", target: "_blank", data: { "external-link": "
|
35
|
+
<%= link_to "#{commentable_path("commentId" => model.id)}#comment_#{model.id}", target: "_blank", data: { "external-link": "text-only" }, class: "dropdown__item", title: t("decidim.components.comment.single_comment_link_title") do %>
|
34
36
|
<%= icon "share-line" %>
|
35
37
|
<span><%= t("decidim.components.comment.single_comment_link_title") %></span>
|
36
38
|
<% end %>
|
37
39
|
</li>
|
38
40
|
<% if model.authored_by?(current_user) %>
|
39
41
|
<li>
|
40
|
-
<button type="button" class="dropdown__item" data-dialog-open="<%= "editCommentModal#{model.id}" %>" title="<%= t("decidim.components.comment.edit") %>" aria-controls="<%= "editCommentModal#{model.id}" %>" aria-haspopup="dialog"
|
42
|
+
<button type="button" class="dropdown__item" data-dialog-open="<%= "editCommentModal#{model.id}" %>" title="<%= t("decidim.components.comment.edit") %>" aria-controls="<%= "editCommentModal#{model.id}" %>" aria-haspopup="dialog">
|
41
43
|
<%= icon "edit-line" %>
|
42
44
|
<span><%= t("decidim.components.comment.edit") %></span>
|
43
45
|
</button>
|
44
46
|
</li>
|
45
47
|
<li>
|
46
|
-
<%= link_to comment_path, remote: true, method: :delete, class: "dropdown__item", data: { confirm: t("decidim.components.comment.confirm_destroy") }
|
48
|
+
<%= link_to comment_path, remote: true, method: :delete, class: "dropdown__item", data: { confirm: t("decidim.components.comment.confirm_destroy") } do %>
|
47
49
|
<%= icon "delete-bin-line" %>
|
48
50
|
<span><%= t("decidim.components.comment.delete") %></span>
|
49
51
|
<% end %>
|
@@ -39,6 +39,24 @@ module Decidim
|
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
|
+
def parent_element_id
|
43
|
+
return unless reply?
|
44
|
+
|
45
|
+
"comment_#{model.decidim_commentable_id}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def comment_label
|
49
|
+
if reply?
|
50
|
+
t("decidim.components.comment.comment_label_reply", comment_id: model.id, parent_comment_id: model.decidim_commentable_id)
|
51
|
+
else
|
52
|
+
t("decidim.components.comment.comment_label", comment_id: model.id)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def reply?
|
57
|
+
model.decidim_commentable_type == model.class.name
|
58
|
+
end
|
59
|
+
|
42
60
|
def cache_hash
|
43
61
|
return @hash if defined?(@hash)
|
44
62
|
|
@@ -47,6 +65,8 @@ module Decidim
|
|
47
65
|
hash.push(model.must_render_translation?(current_organization) ? 1 : 0)
|
48
66
|
hash.push(model.authored_by?(current_user) ? 1 : 0)
|
49
67
|
hash.push(model.reported_by?(current_user) ? 1 : 0)
|
68
|
+
hash.push(model.up_votes_count)
|
69
|
+
hash.push(model.down_votes_count)
|
50
70
|
hash.push(model.cache_key_with_version)
|
51
71
|
hash.push(model.author.cache_key_with_version)
|
52
72
|
@hash = hash.join(Decidim.cache_key_separator)
|
@@ -137,11 +157,11 @@ module Decidim
|
|
137
157
|
end
|
138
158
|
|
139
159
|
def up_votes_count
|
140
|
-
model.
|
160
|
+
model.up_votes_count
|
141
161
|
end
|
142
162
|
|
143
163
|
def down_votes_count
|
144
|
-
model.
|
164
|
+
model.down_votes_count
|
145
165
|
end
|
146
166
|
|
147
167
|
def root_depth
|
@@ -157,11 +177,11 @@ module Decidim
|
|
157
177
|
end
|
158
178
|
|
159
179
|
def voted_up?
|
160
|
-
model.up_voted_by?(current_user)
|
180
|
+
@up_voted ||= model.up_voted_by?(current_user)
|
161
181
|
end
|
162
182
|
|
163
183
|
def voted_down?
|
164
|
-
model.down_voted_by?(current_user)
|
184
|
+
@down_voted ||= model.down_voted_by?(current_user)
|
165
185
|
end
|
166
186
|
|
167
187
|
def nested?
|
@@ -5,7 +5,8 @@
|
|
5
5
|
t("decidim.components.comment_order_selector.order.#{order_value}"),
|
6
6
|
decidim_comments.comments_path(commentable_gid: model.to_signed_global_id.to_s, order: order_value, reload: 1),
|
7
7
|
class: "button button__sm button__text-secondary only:m-auto comment-order-by__item inline-block #{order_value == order ? "underline font-bold" : ""}",
|
8
|
-
remote: true
|
8
|
+
remote: true,
|
9
|
+
aria: { controls: threads_node_id }
|
9
10
|
) %>
|
10
11
|
</div>
|
11
12
|
<% end %>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
</div>
|
17
17
|
<%= single_comment_warning %>
|
18
18
|
<%= blocked_comments_warning %>
|
19
|
-
<div class="comment-threads">
|
19
|
+
<div class="comment-threads" id="<%= threads_node_id %>" aria-live="polite">
|
20
20
|
<%= comments_loading %>
|
21
21
|
<% comments.each do |comment| %>
|
22
22
|
<%= cell("decidim/comments/comment_thread", comment, order:) %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%# We cannot use the AnnouncementCell directly here as the link is escaped and it would not work %>
|
2
2
|
<div class="flash warning" data-announcement="">
|
3
|
-
<
|
3
|
+
<div class="flash__message">
|
4
4
|
<% if comment_permissions? %>
|
5
5
|
<p><%= blocked_comments_for_unauthorized_user_warning_link %></p>
|
6
6
|
<% else %>
|
7
7
|
<p><%= t("decidim.components.comments.blocked_comments_for_user_warning") %></p>
|
8
8
|
<% end %>
|
9
|
-
</
|
9
|
+
</div>
|
10
10
|
</div>
|
@@ -30,7 +30,7 @@ module Decidim
|
|
30
30
|
|
31
31
|
def blocked_comments_warning
|
32
32
|
return unless comments_blocked?
|
33
|
-
return
|
33
|
+
return if user_comments_blocked?
|
34
34
|
|
35
35
|
render :blocked_comments_warning
|
36
36
|
end
|
@@ -88,6 +88,10 @@ module Decidim
|
|
88
88
|
"comments-for-#{commentable_type.demodulize}-#{model.id}"
|
89
89
|
end
|
90
90
|
|
91
|
+
def threads_node_id
|
92
|
+
"#{node_id}-threads"
|
93
|
+
end
|
94
|
+
|
91
95
|
def commentable_type
|
92
96
|
model.commentable_type
|
93
97
|
end
|
@@ -122,14 +122,14 @@ module Decidim
|
|
122
122
|
#
|
123
123
|
# Returns a bool value to indicate if the condition is truthy or not
|
124
124
|
def up_voted_by?(user)
|
125
|
-
up_votes.
|
125
|
+
up_votes.exists?(author: user)
|
126
126
|
end
|
127
127
|
|
128
128
|
# Public: Check if the user has downvoted the comment
|
129
129
|
#
|
130
130
|
# Returns a bool value to indicate if the condition is truthy or not
|
131
131
|
def down_voted_by?(user)
|
132
|
-
down_votes.
|
132
|
+
down_votes.exists?(author: user)
|
133
133
|
end
|
134
134
|
|
135
135
|
# Public: Overrides the `reported_content_url` Reportable concern method.
|
@@ -14,12 +14,22 @@ module Decidim
|
|
14
14
|
validates :weight, inclusion: { in: [-1, 1] }
|
15
15
|
validate :author_and_comment_same_organization
|
16
16
|
|
17
|
+
after_create :update_comment_votes_count
|
18
|
+
after_destroy :update_comment_votes_count
|
19
|
+
|
17
20
|
def self.export_serializer
|
18
21
|
Decidim::Comments::CommentVoteSerializer
|
19
22
|
end
|
20
23
|
|
21
24
|
private
|
22
25
|
|
26
|
+
def update_comment_votes_count
|
27
|
+
up_votes_count = self.class.where(decidim_comment_id: comment.id, weight: 1).count
|
28
|
+
down_votes_count = self.class.where(decidim_comment_id: comment.id, weight: -1).count
|
29
|
+
|
30
|
+
comment.update(up_votes_count:, down_votes_count:)
|
31
|
+
end
|
32
|
+
|
23
33
|
# Private: check if the comment and the author have the same organization
|
24
34
|
def author_and_comment_same_organization
|
25
35
|
return unless author.present? && comment.present?
|
@@ -18,8 +18,8 @@ window.Rails = Rails;
|
|
18
18
|
// Fake timers for testing polling
|
19
19
|
jest.useFakeTimers();
|
20
20
|
|
21
|
-
import { createCharacterCounter } from "
|
22
|
-
import Configuration from "
|
21
|
+
import { createCharacterCounter } from "src/decidim/input_character_counter";
|
22
|
+
import Configuration from "src/decidim/configuration";
|
23
23
|
// Component is loaded with require because using import loads it before $ has been mocked
|
24
24
|
// so tests are not able to check the spied behaviours
|
25
25
|
const CommentsComponent = require("./comments.component_for_testing.js");
|
@@ -344,9 +344,9 @@ describe("CommentsComponent", () => {
|
|
344
344
|
${generateCommentForm("Dummy", 123)}
|
345
345
|
</div>
|
346
346
|
<div class="flash primary loading-comments hidden">
|
347
|
-
<
|
347
|
+
<div class="flash__message">
|
348
348
|
Loading comments ...
|
349
|
-
</
|
349
|
+
</div>
|
350
350
|
</div>
|
351
351
|
</div>
|
352
352
|
</div>
|
data/config/locales/ar.yml
CHANGED
data/config/locales/bg.yml
CHANGED
@@ -4,4 +4,173 @@ bg:
|
|
4
4
|
models:
|
5
5
|
decidim/comments/comment_by_followed_user_event: Коментар
|
6
6
|
decidim/comments/comment_created_event: Коментар
|
7
|
+
decidim/comments/comment_upvoted_event: Коментарът е одобрен
|
7
8
|
decidim/comments/reply_created_event: Отговор на коментар
|
9
|
+
decidim/comments/user_group_mentioned_event: Споменаване
|
10
|
+
decidim/comments/user_mentioned_event: Споменаване
|
11
|
+
activerecord:
|
12
|
+
models:
|
13
|
+
decidim/comments/comment:
|
14
|
+
one: Коментар
|
15
|
+
other: Коментари
|
16
|
+
decidim/comments/comment_vote:
|
17
|
+
one: Глас
|
18
|
+
other: Гласове
|
19
|
+
decidim:
|
20
|
+
comments:
|
21
|
+
admin:
|
22
|
+
shared:
|
23
|
+
availability_fields:
|
24
|
+
enabled: Коментарите са активирани
|
25
|
+
end_time: Коментарите са активирани до
|
26
|
+
start_time: Коментарите са активирани от
|
27
|
+
comments:
|
28
|
+
create:
|
29
|
+
error: Възникна проблем при създаването на коментара.
|
30
|
+
delete:
|
31
|
+
error: Коментарът не може да бъде изтрит.
|
32
|
+
update:
|
33
|
+
error: Възникна проблем при актуализирането на коментара.
|
34
|
+
comments_title: Коментар
|
35
|
+
last_activity:
|
36
|
+
new_comment: 'Нов коментар:'
|
37
|
+
votes:
|
38
|
+
create:
|
39
|
+
error: Възникна проблем с гласуването за коментара.
|
40
|
+
components:
|
41
|
+
add_comment_form:
|
42
|
+
account_message: <a href="%{sign_in_url}">Влезте в профила си</a> или <a href="%{sign_up_url}">се регистрирайте</a>, за да добавите Вашия коментар.
|
43
|
+
form:
|
44
|
+
body:
|
45
|
+
label: Коментар
|
46
|
+
placeholder: Какво мислите за това?
|
47
|
+
form_error: Текстът е задължителен и не може да е по-дълъг от %{length} символа.
|
48
|
+
submit_reply: Публикуване на отговор
|
49
|
+
submit_root_comment: Публикуване на коментар
|
50
|
+
user_group_id:
|
51
|
+
label: Коментирайте като
|
52
|
+
opinion:
|
53
|
+
label: Вашето мнение по тази тема
|
54
|
+
negative: Негативно
|
55
|
+
negative_selected: Вашето мнение по тази тема е негативно
|
56
|
+
neutral: Неутрално
|
57
|
+
neutral_selected: Вашето мнение по тази тема е неутрално
|
58
|
+
positive: Позитивно
|
59
|
+
positive_selected: Вашето мнение по тази тема е позитивно
|
60
|
+
remaining_characters: "Оставащи символи: %{count}"
|
61
|
+
remaining_characters_1: "%{count} оставащ символ"
|
62
|
+
title: Добавете Вашия коментар
|
63
|
+
comment:
|
64
|
+
alignment:
|
65
|
+
against: Против
|
66
|
+
in_favor: Подкрепям
|
67
|
+
cancel_reply: Отказ от отговор
|
68
|
+
comment_label: Коментар %{comment_id}
|
69
|
+
comment_label_reply: Коментар %{comment_id} (отговор на коментар %{parent_comment_id})
|
70
|
+
confirm_destroy: Сигурни ли сте, че искате да изтриете този коментар?
|
71
|
+
controls_label: Контроли за коментари
|
72
|
+
delete: Изтрий
|
73
|
+
deleted_at: Коментарът е изтрит на %{date}
|
74
|
+
deleted_user: Изтрит участник
|
75
|
+
edit: Редактирай
|
76
|
+
edited: Редактирано
|
77
|
+
hide_replies:
|
78
|
+
one: Скриване на отговора
|
79
|
+
other: Скриване на %{count} отговора
|
80
|
+
moderated_at: Коментарът е модериран на %{date}
|
81
|
+
reply: Отговори
|
82
|
+
report:
|
83
|
+
action: Доклад
|
84
|
+
already_reported: Това съдържание вече е докладвано и ще бъде прегледано от администратор.
|
85
|
+
close: Затвори
|
86
|
+
description: Това съдържание неподходящо ли е?
|
87
|
+
details: Допълнителни коментари
|
88
|
+
reasons:
|
89
|
+
does_not_belong: Съдържа незаконна дейност, заплахи за самоубийство, лична информация или нещо друго, което смятате, че не принадлежи на %{organization_name}.
|
90
|
+
offensive: Съдържа расизъм, сексизъм, злословия, лични атаки, заплахи за смърт, заявки за самоубийство или всякаква форма на омраза.
|
91
|
+
spam: Съдържа примамка за кликване, реклама, измами или скриптове.
|
92
|
+
title: Докладване за неподходящо съдържание
|
93
|
+
show_replies:
|
94
|
+
one: Показване на отговора
|
95
|
+
other: Показване на %{count} отговора
|
96
|
+
single_comment_link_title: Вземете линка
|
97
|
+
comment_order_selector:
|
98
|
+
order:
|
99
|
+
best_rated: С най-висока оценка
|
100
|
+
most_discussed: Най-обсъждани
|
101
|
+
older: По-старо
|
102
|
+
recent: Скорошни
|
103
|
+
title: 'Подреди по:'
|
104
|
+
comments:
|
105
|
+
blocked_comments_for_unauthorized_user_warning: Трябва да сте верифицирани, за да коментирате в този момент, но можете да прочетете предишните.
|
106
|
+
blocked_comments_for_user_warning: Понастоящем не можете да коментирате, но можете да прочетете предходните коментари.
|
107
|
+
blocked_comments_warning: Коментарите в момента са деактивирани, но можете да прочетете предишните.
|
108
|
+
comment_details_title: Детайли за коментара
|
109
|
+
loading: Коментарите се зареждат...
|
110
|
+
single_comment_warning: <a href="%{url}">Вижте всички коментари</a>
|
111
|
+
single_comment_warning_title: Виждате единичен коментар
|
112
|
+
title:
|
113
|
+
one: "%{count} коментар"
|
114
|
+
other: "%{count} коментари"
|
115
|
+
down_vote_button:
|
116
|
+
text: Не съм съгласен с този коментар
|
117
|
+
edit_comment_modal_form:
|
118
|
+
close: Затвори
|
119
|
+
form:
|
120
|
+
body:
|
121
|
+
label: Коментар
|
122
|
+
placeholder: Какво мислите за това?
|
123
|
+
submit: Изпрати
|
124
|
+
title: Редактирайте Вашия коментар
|
125
|
+
up_vote_button:
|
126
|
+
text: Съгласен съм с този коментар
|
127
|
+
events:
|
128
|
+
comments:
|
129
|
+
comment_by_followed_user:
|
130
|
+
email_intro: "%{author_name} остави коментар в %{resource_title}. Можете да го прочетете на тази страница:"
|
131
|
+
email_outro: Получихте това известие, защото следвате %{author_name}. Можете да спрете да следвате този потребител от страницата на неговия профил.
|
132
|
+
email_subject: Има нов коментар от %{author_name} в(ъв) %{resource_title}
|
133
|
+
notification_title: Има нов коментар от <a href="%{author_path}">%{author_name} %{author_nickname}</a> в(ъв) <a href="%{resource_path}">%{resource_title}</a>.
|
134
|
+
comment_by_followed_user_group:
|
135
|
+
email_intro: 'Групата %{author_name} остави коментар в(ъв) %{resource_title}. Можете да го прочетете на следната страница:'
|
136
|
+
email_outro: Получавате това известие, защото следвате %{author_name}. Можете да спрете да следвате тази група от страницата на профила ѝ.
|
137
|
+
email_subject: Има нов коментар от %{author_name} в(ъв) %{resource_title}
|
138
|
+
notification_title: Има нов коментар от <a href="%{author_path}">%{author_name} %{author_nickname}</a> в(ъв) <a href="%{resource_path}">%{resource_title}</a>.
|
139
|
+
comment_created:
|
140
|
+
email_intro: "%{resource_title} получи коментар. Можете да прочетете коментара на тази страница:"
|
141
|
+
email_outro: Получавате това известие, защото следвате „%{resource_title}“ или неговия автор. Можете да прекратите следването от предходната връзка.
|
142
|
+
email_subject: Има нов коментар от %{author_name} по %{resource_title}
|
143
|
+
notification_title: Има нов коментар от <a href="%{author_path}">%{author_name} %{author_nickname}</a> по <a href="%{resource_path}">%{resource_title}</a>
|
144
|
+
comment_downvoted:
|
145
|
+
email_intro: Вашият коментар в „%{resource_title}“ беше гласуван против. Вече има общо %{upvotes} гласа за и %{downvotes} гласа против.
|
146
|
+
email_outro: Получихте това известие, защото вие сте авторът на този коментар.
|
147
|
+
email_subject: Вашият коментар в „%{resource_title}“ беше гласуван против.
|
148
|
+
notification_title: Вашият <a href="%{resource_path}">коментар</a> в „%{resource_title}“ беше гласуван против. Вече има общо %{upvotes} гласа за и %{downvotes} гласа против.
|
149
|
+
comment_upvoted:
|
150
|
+
email_intro: Коментарът ви в „%{resource_title}“ беше гласуван в подкрепа. Вече има общо %{upvotes} гласа за и %{downvotes} гласа против.
|
151
|
+
email_outro: Получихте това известие, защото вие сте авторът на този коментар.
|
152
|
+
email_subject: Коментарът ви в „%{resource_title}“ беше гласуван в подкрепа.
|
153
|
+
notification_title: Вашият <a href="%{resource_path}">коментар</a> в „%{resource_title}“ получи положителен глас. Вече има общо %{upvotes} гласа за и %{downvotes} гласа против.
|
154
|
+
reply_created:
|
155
|
+
email_intro: "%{author_name} отговори на вашия коментар в %{resource_title}. Можете да го прочетете на тази страница:"
|
156
|
+
email_outro: Получавате това известие, защото някой отговори на коментара Ви.
|
157
|
+
email_subject: "%{author_name} отговори на коментара Ви по %{resource_title}"
|
158
|
+
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> отговори на коментара Ви по <a href="%{resource_path}">%{resource_title}</a>
|
159
|
+
user_group_mentioned:
|
160
|
+
email_intro: Група, към която принадлежите, беше спомената
|
161
|
+
email_outro: Получавате това известие, защото сте член на групата %{group_name}, която беше спомената в(ъв) %{resource_title}.
|
162
|
+
email_subject: Бяхте споменати в(ъв) %{resource_title} като член на %{group_name}
|
163
|
+
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> Ви спомена в(ъв) <a href="%{resource_path}">%{resource_title}</a> като член на <a href="%{group_path}">%{group_name} %{group_nickname}</a>
|
164
|
+
user_mentioned:
|
165
|
+
email_intro: Бяхте споменати
|
166
|
+
email_outro: Получавате това известие, защото бяхте споменати в(ъв) %{resource_title}.
|
167
|
+
email_subject: Бяхте споменати в(ъв) %{resource_title}
|
168
|
+
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> Ви спомена в(ъв) <a href="%{resource_path}">%{resource_title}</a>
|
169
|
+
metrics:
|
170
|
+
comments:
|
171
|
+
description: Брой коментари генерирани от участници
|
172
|
+
object: коментари
|
173
|
+
title: Коментари
|
174
|
+
errors:
|
175
|
+
messages:
|
176
|
+
cannot_have_comments: не може да има коментари
|
data/config/locales/ca.yml
CHANGED
@@ -65,13 +65,18 @@ ca:
|
|
65
65
|
against: En contra
|
66
66
|
in_favor: A favor
|
67
67
|
cancel_reply: Cancel·lar resposta
|
68
|
+
comment_label: Comentari %{comment_id}
|
69
|
+
comment_label_reply: Comentari %{comment_id} (respon al comentari %{parent_comment_id})
|
68
70
|
confirm_destroy: Segur que vols esborrar aquest comentari?
|
71
|
+
controls_label: Controls de comentaris
|
69
72
|
delete: Esborrar
|
70
73
|
deleted_at: Comentari esborrat el %{date}
|
71
74
|
deleted_user: Participant eliminada
|
72
75
|
edit: Editar
|
73
76
|
edited: Editat
|
74
|
-
hide_replies:
|
77
|
+
hide_replies:
|
78
|
+
one: Amagar resposta
|
79
|
+
other: Amagar %{count} respostes
|
75
80
|
moderated_at: Comentari moderat el %{date}
|
76
81
|
reply: Respondre
|
77
82
|
report:
|
@@ -123,27 +128,27 @@ ca:
|
|
123
128
|
comments:
|
124
129
|
comment_by_followed_user:
|
125
130
|
email_intro: "%{author_name} ha deixat un comentari a %{resource_title}. Podeu llegir-lo en aquesta pàgina:"
|
126
|
-
email_outro: Has rebut aquesta notificació perquè estàs seguint %{author_name}. Pots deixar de seguir a aquesta participant des de la seva pàgina de perfil.
|
131
|
+
email_outro: Has rebut aquesta notificació perquè estàs seguint el comentari "%{author_name}". Pots deixar de seguir a aquesta participant des de la seva pàgina de perfil.
|
127
132
|
email_subject: Hi ha un nou comentari de %{author_name} en %{resource_title}
|
128
133
|
notification_title: Hi ha un nou comentari per <a href="%{author_path}">%{author_name} %{author_nickname}</a> a <a href="%{resource_path}">%{resource_title}</a>.
|
129
134
|
comment_by_followed_user_group:
|
130
135
|
email_intro: '%{author_name} ha deixat un comentari a%{resource_title}. Pots llegir-lo en aquesta pàgina:'
|
131
|
-
email_outro: Reps aquesta notificació perquè segueixes a %{author_name}. Pots deixar de seguir aquest grup des de la seva pàgina de perfil.
|
136
|
+
email_outro: Reps aquesta notificació perquè segueixes a "%{author_name}". Pots deixar de seguir aquest grup des de la seva pàgina de perfil.
|
132
137
|
email_subject: Hi ha un nou comentari de %{author_name} en %{resource_title}
|
133
138
|
notification_title: Hi ha un nou comentari per <a href="%{author_path}">%{author_name} %{author_nickname}</a> a <a href="%{resource_path}">%{resource_title}</a>.
|
134
139
|
comment_created:
|
135
140
|
email_intro: "S'ha comentat %{resource_title}. Pots llegir el comentari d'aquesta pàgina:"
|
136
|
-
email_outro: Has rebut aquesta notificació perquè estàs seguint "%{resource_title}" o la seva autora. Pots deixar de seguir-la des de l'enllaç anterior.
|
141
|
+
email_outro: Has rebut aquesta notificació perquè estàs seguint el comentari "%{resource_title}" o la seva autora. Pots deixar de seguir-la des de l'enllaç anterior.
|
137
142
|
email_subject: Hi ha un nou comentari de %{author_name} a %{resource_title}
|
138
143
|
notification_title: Hi ha un nou comentari de <a href="%{author_path}">%{author_name} %{author_nickname}</a> en <a href="%{resource_path}">%{resource_title}</a>
|
139
144
|
comment_downvoted:
|
140
145
|
email_intro: El teu comentari a "%{resource_title}" ha rebut un vot negatiu. Ara té un total de %{upvotes} vots positius i %{downvotes} vots negatius.
|
141
|
-
email_outro: Has rebut aquesta notificació perquè
|
146
|
+
email_outro: Has rebut aquesta notificació perquè vas fer aquest comentari.
|
142
147
|
email_subject: El teu comentari a "%{resource_title}" ha rebut un vot negatiu.
|
143
148
|
notification_title: El teu <a href="%{resource_path}">comentari</a> a "%{resource_title}" ha rebut un vot negatiu. Ara té un total de %{upvotes} vots positius i %{downvotes} vots negatius.
|
144
149
|
comment_upvoted:
|
145
150
|
email_intro: El teu comentari a "%{resource_title}" ha rebut un vot positiu. Ara té un total de %{upvotes} vots positius i %{downvotes} vots negatius.
|
146
|
-
email_outro: Has rebut aquesta notificació perquè
|
151
|
+
email_outro: Has rebut aquesta notificació perquè vas fer aquest comentari.
|
147
152
|
email_subject: El teu comentari a "%{resource_title}" ha rebut un vot positiu.
|
148
153
|
notification_title: El teu <a href="%{resource_path}">comentari</a> a "%{resource_title}" ha rebut un vot positiu. Ara té un total de %{upvotes} vots positius i %{downvotes} vots negatius.
|
149
154
|
reply_created:
|
@@ -153,12 +158,12 @@ ca:
|
|
153
158
|
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> ha respost el teu comentari a <a href="%{resource_path}">%{resource_title}</a>
|
154
159
|
user_group_mentioned:
|
155
160
|
email_intro: Un grup al qual pertanys ha estat esmentat
|
156
|
-
email_outro: Has rebut aquesta notificació perquè formes part del grup %{group_name} que ha estat esmentat a %{resource_title}.
|
161
|
+
email_outro: Has rebut aquesta notificació perquè formes part del grup "%{group_name}" que ha estat esmentat a %{resource_title}.
|
157
162
|
email_subject: T'han esmentat a %{resource_title} com a membre de %{group_name}
|
158
163
|
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> t'ha esmentat com a membre de <a href="%{group_path}">%{group_name} %{group_nickname}</a> a <a href="%{resource_path}">%{resource_title}</a>
|
159
164
|
user_mentioned:
|
160
165
|
email_intro: Has estat esmentada
|
161
|
-
email_outro: Has rebut aquesta notificació perquè
|
166
|
+
email_outro: Has rebut aquesta notificació perquè t'han esmentat al comentari "%{resource_title}".
|
162
167
|
email_subject: Has estat esmentada a %{resource_title}
|
163
168
|
notification_title: Has estat esmentada a <a href="%{resource_path}">%{resource_title}</a> per <a href="%{author_path}">%{author_name} %{author_nickname}</a>
|
164
169
|
metrics:
|
data/config/locales/cs.yml
CHANGED
@@ -69,13 +69,15 @@ cs:
|
|
69
69
|
against: Proti
|
70
70
|
in_favor: Ve prospěch
|
71
71
|
cancel_reply: Zrušit odpověď
|
72
|
+
comment_label: Komentář %{comment_id}
|
73
|
+
comment_label_reply: Komentář %{comment_id} (odpověď na komentář %{parent_comment_id})
|
72
74
|
confirm_destroy: Opravdu chcete odstranit tento komentář?
|
75
|
+
controls_label: Ovládání komentářů
|
73
76
|
delete: Smazat
|
74
77
|
deleted_at: Komentář byl smazán dne %{date}
|
75
78
|
deleted_user: Vymazaný účastník
|
76
79
|
edit: Upravit
|
77
80
|
edited: Upraveno
|
78
|
-
hide_replies: Skrýt odpovědi
|
79
81
|
moderated_at: Komentář moderován dne %{date}
|
80
82
|
reply: Odpověď
|
81
83
|
report:
|
data/config/locales/de.yml
CHANGED
@@ -65,13 +65,18 @@ de:
|
|
65
65
|
against: Gegen
|
66
66
|
in_favor: Zugunsten
|
67
67
|
cancel_reply: Antwort abbrechen
|
68
|
+
comment_label: Kommentar %{comment_id}
|
69
|
+
comment_label_reply: Kommentar %{comment_id} (Antwort auf Kommentar %{parent_comment_id})
|
68
70
|
confirm_destroy: Sind Sie sich sicher, dass Sie diesen Kommentar löschen möchten?
|
71
|
+
controls_label: Kommentarsteuerung
|
69
72
|
delete: Löschen
|
70
73
|
deleted_at: Kommentar gelöscht am %{date}
|
71
74
|
deleted_user: Gelöschter Benutzer
|
72
75
|
edit: Bearbeiten
|
73
76
|
edited: Bearbeitet
|
74
|
-
hide_replies:
|
77
|
+
hide_replies:
|
78
|
+
one: Antwort verbergen
|
79
|
+
other: '%{count} Antworten verbergen'
|
75
80
|
moderated_at: Kommentar moderiert am %{date}
|
76
81
|
reply: Antworten
|
77
82
|
report:
|
data/config/locales/el.yml
CHANGED
data/config/locales/en.yml
CHANGED
@@ -65,13 +65,18 @@ en:
|
|
65
65
|
against: Against
|
66
66
|
in_favor: In favor
|
67
67
|
cancel_reply: Cancel reply
|
68
|
+
comment_label: Comment %{comment_id}
|
69
|
+
comment_label_reply: Comment %{comment_id} (reply to comment %{parent_comment_id})
|
68
70
|
confirm_destroy: Are you sure you want to delete this comment?
|
71
|
+
controls_label: Comment controls
|
69
72
|
delete: Delete
|
70
73
|
deleted_at: Comment deleted on %{date}
|
71
74
|
deleted_user: Deleted participant
|
72
75
|
edit: Edit
|
73
76
|
edited: Edited
|
74
|
-
hide_replies:
|
77
|
+
hide_replies:
|
78
|
+
one: Hide reply
|
79
|
+
other: Hide %{count} replies
|
75
80
|
moderated_at: Comment moderated on %{date}
|
76
81
|
reply: Reply
|
77
82
|
report:
|
data/config/locales/es-MX.yml
CHANGED
@@ -65,13 +65,18 @@ es-MX:
|
|
65
65
|
against: En contra
|
66
66
|
in_favor: A favor
|
67
67
|
cancel_reply: Cancelar respuesta
|
68
|
+
comment_label: Comentario %{comment_id}
|
69
|
+
comment_label_reply: Comentario %{comment_id} (responder al comentario %{parent_comment_id})
|
68
70
|
confirm_destroy: '¿Seguro que quieres eliminar este comentario?'
|
71
|
+
controls_label: Controles de comentarios
|
69
72
|
delete: Eliminar
|
70
73
|
deleted_at: Comentario eliminado el %{date}
|
71
74
|
deleted_user: Usuario eliminado
|
72
75
|
edit: Editar
|
73
76
|
edited: Editado
|
74
|
-
hide_replies:
|
77
|
+
hide_replies:
|
78
|
+
one: Ocultar respuesta
|
79
|
+
other: Ocultar %{count} respuestas
|
75
80
|
moderated_at: Comentario moderado el %{date}
|
76
81
|
reply: Respuesta
|
77
82
|
report:
|