decidim-comments 0.22.0 → 0.23.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/comments/bundle.js +53 -53
- data/app/assets/javascripts/decidim/comments/bundle.js.map +1 -1
- data/app/cells/decidim/comments/comment_activity_cell.rb +2 -22
- data/app/cells/decidim/comments/comment_cell.rb +22 -0
- data/app/cells/decidim/comments/comment_m/footer.erb +5 -0
- data/app/cells/decidim/comments/comment_m/top.erb +7 -0
- data/app/cells/decidim/comments/comment_m_cell.rb +29 -0
- data/app/commands/decidim/comments/create_comment.rb +1 -1
- data/app/events/decidim/comments/comment_event.rb +1 -9
- data/app/forms/decidim/comments/comment_form.rb +8 -1
- data/app/frontend/comments/add_comment_form.component.test.tsx +30 -28
- data/app/frontend/comments/add_comment_form.component.tsx +32 -16
- data/app/frontend/comments/comment.component.test.tsx +35 -4
- data/app/frontend/comments/comment.component.tsx +24 -15
- data/app/frontend/comments/comment_thread.component.test.tsx +9 -8
- data/app/frontend/comments/comment_thread.component.tsx +3 -1
- data/app/frontend/comments/comments.component.test.tsx +17 -14
- data/app/frontend/comments/comments.component.tsx +28 -4
- data/app/frontend/comments/down_vote_button.component.tsx +24 -9
- data/app/frontend/comments/up_vote_button.component.tsx +24 -9
- data/app/frontend/mutations/add_comment.mutation.graphql +2 -2
- data/app/frontend/mutations/down_vote.mutation.graphql +2 -2
- data/app/frontend/mutations/up_vote.mutation.graphql +2 -2
- data/app/frontend/queries/comments.query.graphql +2 -2
- data/app/frontend/support/schema.ts +1060 -735
- data/app/helpers/decidim/comments/comment_cells_helper.rb +33 -0
- data/app/models/decidim/comments/comment.rb +80 -21
- data/app/models/decidim/comments/seed.rb +1 -1
- data/app/types/decidim/comments/commentable_interface.rb +1 -1
- data/app/types/decidim/comments/commentable_mutation_type.rb +4 -1
- data/config/locales/am-ET.yml +1 -0
- data/config/locales/bg.yml +6 -0
- data/config/locales/ca.yml +1 -0
- data/config/locales/cs.yml +2 -1
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +29 -28
- data/config/locales/en.yml +1 -0
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +1 -0
- data/config/locales/es-PY.yml +1 -0
- data/config/locales/es.yml +3 -2
- data/config/locales/et.yml +1 -0
- data/config/locales/fi-plain.yml +1 -0
- data/config/locales/fi.yml +2 -1
- data/config/locales/fr-CA.yml +2 -1
- data/config/locales/fr.yml +2 -1
- data/config/locales/gl.yml +13 -0
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +1 -1
- data/config/locales/is-IS.yml +0 -2
- data/config/locales/is.yml +76 -0
- data/config/locales/it.yml +1 -0
- data/config/locales/ja-JP.yml +2 -2
- data/config/locales/ja.yml +121 -0
- data/config/locales/ko-KR.yml +1 -0
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt.yml +1 -0
- data/config/locales/{lv-LV.yml → lv.yml} +0 -0
- data/config/locales/mt.yml +1 -0
- data/config/locales/nl.yml +11 -10
- data/config/locales/om-ET.yml +1 -0
- data/config/locales/pl.yml +6 -5
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/so-SO.yml +1 -0
- data/config/locales/sv.yml +1 -0
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/ti-ER.yml +1 -0
- data/config/locales/tr-TR.yml +53 -33
- data/config/locales/uk.yml +0 -1
- data/config/locales/vi-VN.yml +1 -0
- data/config/locales/vi.yml +1 -0
- data/config/locales/zh-CN.yml +121 -0
- data/config/locales/zh-TW.yml +1 -0
- data/db/migrate/20200706123136_make_comments_handle_i18n.rb +41 -0
- data/db/migrate/20200828101910_add_commentable_counter_cache_to_comments.rb +9 -0
- data/lib/decidim/comments/api/comment_type.rb +5 -1
- data/lib/decidim/comments/comment_serializer.rb +7 -2
- data/lib/decidim/comments/comment_vote_serializer.rb +5 -1
- data/lib/decidim/comments/commentable.rb +11 -0
- data/lib/decidim/comments/comments_helper.rb +28 -4
- data/lib/decidim/comments/engine.rb +13 -0
- data/lib/decidim/comments/mutation_extensions.rb +8 -0
- data/lib/decidim/comments/query_extensions.rb +4 -0
- data/lib/decidim/comments/test/factories.rb +10 -1
- data/lib/decidim/comments/test/shared_examples/comment_event.rb +1 -1
- data/lib/decidim/comments/version.rb +1 -1
- metadata +42 -14
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Comments
|
5
|
+
# Custom helpers for comments cells.
|
6
|
+
#
|
7
|
+
module CommentCellsHelper
|
8
|
+
def renderable?
|
9
|
+
comment.present? && root_commentable.present?
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource_link_text
|
13
|
+
comment.formatted_body
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource_link_path
|
17
|
+
return root_commentable.polymorphic_resource_path(url_params) if root_commentable&.respond_to?(:polymorphic_resource_path)
|
18
|
+
|
19
|
+
resource_locator(root_commentable).path(url_params)
|
20
|
+
end
|
21
|
+
|
22
|
+
delegate :root_commentable, to: :comment
|
23
|
+
|
24
|
+
def root_commentable_title
|
25
|
+
decidim_html_escape(translated_attribute(root_commentable.title))
|
26
|
+
end
|
27
|
+
|
28
|
+
def url_params
|
29
|
+
{ commentId: comment.id }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -13,6 +13,9 @@ module Decidim
|
|
13
13
|
include Decidim::DataPortability
|
14
14
|
include Decidim::Traceable
|
15
15
|
include Decidim::Loggable
|
16
|
+
include Decidim::Searchable
|
17
|
+
include Decidim::TranslatableResource
|
18
|
+
include Decidim::TranslatableAttributes
|
16
19
|
|
17
20
|
# Limit the max depth of a comment tree. If C is a comment and R is a reply:
|
18
21
|
# C (depth 0)
|
@@ -22,23 +25,42 @@ module Decidim
|
|
22
25
|
# |--R (depth 3)
|
23
26
|
MAX_DEPTH = 3
|
24
27
|
|
28
|
+
translatable_fields :body
|
29
|
+
|
25
30
|
belongs_to :commentable, foreign_key: "decidim_commentable_id", foreign_type: "decidim_commentable_type", polymorphic: true
|
26
|
-
belongs_to :root_commentable, foreign_key: "decidim_root_commentable_id", foreign_type: "decidim_root_commentable_type", polymorphic: true
|
31
|
+
belongs_to :root_commentable, foreign_key: "decidim_root_commentable_id", foreign_type: "decidim_root_commentable_type", polymorphic: true, touch: true
|
27
32
|
has_many :up_votes, -> { where(weight: 1) }, foreign_key: "decidim_comment_id", class_name: "CommentVote", dependent: :destroy
|
28
33
|
has_many :down_votes, -> { where(weight: -1) }, foreign_key: "decidim_comment_id", class_name: "CommentVote", dependent: :destroy
|
29
34
|
|
30
|
-
|
31
|
-
|
32
|
-
|
35
|
+
# Updates the counter caches for the root_commentable when a comment is
|
36
|
+
# created or updated.
|
37
|
+
after_save :update_counter
|
33
38
|
|
34
|
-
|
39
|
+
# Updates the counter caches for the root_commentable when a comment is
|
40
|
+
# deleted.
|
41
|
+
after_destroy :update_counter
|
35
42
|
|
36
|
-
|
43
|
+
# Updates the counter caches for the root_commentable when a comment is
|
44
|
+
# touched, which happens when a comment was reported and its moderation
|
45
|
+
# is accepted and sets the comment as hidden.
|
46
|
+
after_touch :update_counter
|
37
47
|
|
38
48
|
before_validation :compute_depth
|
49
|
+
validates :body, presence: true
|
50
|
+
validates :depth, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: MAX_DEPTH }
|
51
|
+
validates :alignment, inclusion: { in: [0, 1, -1] }
|
52
|
+
validate :body_length
|
53
|
+
validate :commentable_can_have_comments
|
39
54
|
|
40
55
|
delegate :organization, to: :commentable
|
41
56
|
|
57
|
+
translatable_fields :body
|
58
|
+
searchable_fields(
|
59
|
+
participatory_space: :itself,
|
60
|
+
A: :body,
|
61
|
+
datetime: :created_at
|
62
|
+
)
|
63
|
+
|
42
64
|
def self.positive
|
43
65
|
where(alignment: 1)
|
44
66
|
end
|
@@ -99,23 +121,30 @@ module Decidim
|
|
99
121
|
|
100
122
|
# Public: Overrides the `reported_content_url` Reportable concern method.
|
101
123
|
def reported_content_url
|
102
|
-
|
103
|
-
end
|
124
|
+
url_params = { anchor: "comment_#{id}" }
|
104
125
|
|
105
|
-
|
106
|
-
|
107
|
-
|
126
|
+
if root_commentable&.respond_to?(:polymorphic_resource_url)
|
127
|
+
root_commentable.polymorphic_resource_url(url_params)
|
128
|
+
else
|
129
|
+
ResourceLocatorPresenter.new(root_commentable).url(url_params)
|
130
|
+
end
|
108
131
|
end
|
109
132
|
|
110
133
|
def self.export_serializer
|
111
134
|
Decidim::Comments::CommentSerializer
|
112
135
|
end
|
113
136
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
137
|
+
# Public: Returns the list of author IDs of type `UserBaseEntity` that commented in one of the +resources+.
|
138
|
+
# Expects all +resources+ to be of the same "commentable_type".
|
139
|
+
# If the result is not `Decidim::Comments::Commentable` returns `nil`.
|
140
|
+
def self.user_commentators_ids_in(resources)
|
141
|
+
if resources.first&.kind_of?(Decidim::Comments::Commentable)
|
142
|
+
commentable_type = resources.first.class.name
|
143
|
+
Decidim::Comments::Comment.select("DISTINCT decidim_author_id").not_hidden
|
144
|
+
.where(decidim_commentable_id: resources.pluck(:id))
|
145
|
+
.where(decidim_commentable_type: commentable_type)
|
146
|
+
.where("decidim_author_type" => "Decidim::UserBaseEntity").pluck(:decidim_author_id)
|
147
|
+
end
|
119
148
|
end
|
120
149
|
|
121
150
|
def can_participate?(user)
|
@@ -124,8 +153,35 @@ module Decidim
|
|
124
153
|
root_commentable.can_participate?(user)
|
125
154
|
end
|
126
155
|
|
156
|
+
def formatted_body
|
157
|
+
Decidim::ContentProcessor.render(sanitize_content(render_markdown(translated_body)), "div")
|
158
|
+
end
|
159
|
+
|
160
|
+
def translated_body
|
161
|
+
@translated_body ||= translated_attribute(body, organization)
|
162
|
+
end
|
163
|
+
|
127
164
|
private
|
128
165
|
|
166
|
+
def body_length
|
167
|
+
language = (body.keys - ["machine_translations"]).first
|
168
|
+
errors.add(:body, :too_long, count: comment_maximum_length) unless body[language].length <= comment_maximum_length
|
169
|
+
end
|
170
|
+
|
171
|
+
def comment_maximum_length
|
172
|
+
return unless commentable.commentable?
|
173
|
+
return component.settings.comments_max_length if component_settings_comments_max_length?
|
174
|
+
return organization.comments_max_length if organization.comments_max_length.positive?
|
175
|
+
|
176
|
+
1000
|
177
|
+
end
|
178
|
+
|
179
|
+
def component_settings_comments_max_length?
|
180
|
+
return unless component&.settings.respond_to?(:comments_max_length)
|
181
|
+
|
182
|
+
component.settings.comments_max_length.positive?
|
183
|
+
end
|
184
|
+
|
129
185
|
# Private: Check if commentable can have comments and if not adds
|
130
186
|
# a validation error to the model
|
131
187
|
def commentable_can_have_comments
|
@@ -138,11 +194,8 @@ module Decidim
|
|
138
194
|
end
|
139
195
|
|
140
196
|
# Private: Returns the comment body sanitized, sanitizing HTML tags
|
141
|
-
def
|
142
|
-
|
143
|
-
render_markdown(body),
|
144
|
-
scrubber: Decidim::Comments::UserInputScrubber.new
|
145
|
-
).try(:html_safe)
|
197
|
+
def sanitize_content(content)
|
198
|
+
Decidim::ContentProcessor.sanitize(content)
|
146
199
|
end
|
147
200
|
|
148
201
|
# Private: Initializes the Markdown parser
|
@@ -154,6 +207,12 @@ module Decidim
|
|
154
207
|
def render_markdown(string)
|
155
208
|
markdown.render(string)
|
156
209
|
end
|
210
|
+
|
211
|
+
def update_counter
|
212
|
+
return unless root_commentable
|
213
|
+
|
214
|
+
root_commentable.update_comments_count
|
215
|
+
end
|
157
216
|
end
|
158
217
|
end
|
159
218
|
end
|
@@ -17,7 +17,10 @@ module Decidim
|
|
17
17
|
|
18
18
|
resolve lambda { |obj, args, ctx|
|
19
19
|
params = { "comment" => { "body" => args[:body], "alignment" => args[:alignment], "user_group_id" => args[:userGroupId], "commentable" => obj } }
|
20
|
-
form = Decidim::Comments::CommentForm.from_params(params).with_context(
|
20
|
+
form = Decidim::Comments::CommentForm.from_params(params).with_context(
|
21
|
+
current_organization: ctx[:current_organization],
|
22
|
+
current_component: obj.component
|
23
|
+
)
|
21
24
|
Decidim::Comments::CreateComment.call(form, ctx[:current_user]) do
|
22
25
|
on(:ok) do |comment|
|
23
26
|
return comment
|
@@ -0,0 +1 @@
|
|
1
|
+
am:
|
data/config/locales/ca.yml
CHANGED
data/config/locales/cs.yml
CHANGED
@@ -24,6 +24,7 @@ cs:
|
|
24
24
|
comments_count: Počet komentářů
|
25
25
|
last_activity:
|
26
26
|
new_comment_at_html: "<span>Nový komentář v %{link}</span>"
|
27
|
+
view: Zobrazit
|
27
28
|
votes:
|
28
29
|
create:
|
29
30
|
error: Při hlasování o komentáři došlo k chybě.
|
@@ -66,7 +67,7 @@ cs:
|
|
66
67
|
comment_order_selector:
|
67
68
|
order:
|
68
69
|
best_rated: Nejlépe hodnocené
|
69
|
-
most_discussed:
|
70
|
+
most_discussed: Nejvíce diskutované
|
70
71
|
older: Starší
|
71
72
|
recent: Nedávné
|
72
73
|
title: 'Seřadit podle:'
|
@@ -0,0 +1 @@
|
|
1
|
+
da:
|
data/config/locales/de.yml
CHANGED
@@ -20,41 +20,42 @@ de:
|
|
20
20
|
comments_count: Kommentaranzahl
|
21
21
|
last_activity:
|
22
22
|
new_comment_at_html: "<span>Neuer Kommentar unter %{link}</span>"
|
23
|
+
view: Ansicht
|
23
24
|
votes:
|
24
25
|
create:
|
25
26
|
error: Beim Abstimmen des Kommentars sind Fehler aufgetreten.
|
26
27
|
components:
|
27
28
|
add_comment_form:
|
28
|
-
account_message: <a href="%{sign_in_url}">Melden Sie sich mit Ihrem Konto an</a> oder <a href="%{sign_up_url}">
|
29
|
+
account_message: <a href="%{sign_in_url}">Melden Sie sich mit Ihrem Konto an</a> oder <a href="%{sign_up_url}">registrieren Sie sich</a>, um Ihren Kommentar hinzuzufügen.
|
29
30
|
form:
|
30
31
|
body:
|
31
32
|
label: Kommentar
|
32
|
-
placeholder: Was
|
33
|
+
placeholder: Was denken Sie darüber?
|
33
34
|
form_error: Der Text ist erforderlich und darf nicht länger als %{length} Zeichen sein.
|
34
35
|
submit: Senden
|
35
36
|
user_group_id:
|
36
|
-
label:
|
37
|
+
label: Kommentieren als
|
37
38
|
opinion:
|
38
39
|
neutral: Neutral
|
39
40
|
remaining_characters: "%{count} Zeichen übrig"
|
40
41
|
remaining_characters_1: "%{count} Zeichen übrig"
|
41
|
-
title:
|
42
|
+
title: Kommentar hinzufügen
|
42
43
|
comment:
|
43
44
|
alignment:
|
44
45
|
against: Gegen
|
45
46
|
in_favor: Zugunsten
|
46
47
|
deleted_user: Gelöschter Benutzer
|
47
|
-
hide_replies: Antworten
|
48
|
+
hide_replies: Antworten verbergen
|
48
49
|
reply: Antworten
|
49
50
|
report:
|
50
|
-
action:
|
51
|
+
action: Melden
|
51
52
|
already_reported: Dieser Inhalt wurde bereits gemeldet und wird von einem Administrator überprüft.
|
52
53
|
close: Schließen
|
53
54
|
description: Ist dieser Inhalt unangemessen?
|
54
55
|
details: Zusätzliche Kommentare
|
55
56
|
reasons:
|
56
|
-
does_not_belong: Enthält illegale Aktivitäten, Selbstmorddrohungen, persönliche Informationen oder etwas anderes, von dem Sie denken, dass es nicht auf %{organization_name}.
|
57
|
-
offensive: Enthält Rassismus, Sexismus,
|
57
|
+
does_not_belong: Enthält illegale Aktivitäten, Selbstmorddrohungen, persönliche Informationen oder etwas anderes, von dem Sie denken, dass es nicht auf %{organization_name} gehört.
|
58
|
+
offensive: Enthält Rassismus, Sexismus, Verleumdungen, persönliche Angriffe, Morddrohungen, Selbstmordanträge oder jegliche Form von Hassreden.
|
58
59
|
spam: Enthält Clickbait, Werbung, Scams oder Script Bots.
|
59
60
|
title: Ungeeigneten Inhalt melden
|
60
61
|
show_replies: '%{replies_count} Antworten anzeigen'
|
@@ -63,8 +64,8 @@ de:
|
|
63
64
|
order:
|
64
65
|
best_rated: Am besten bewertet
|
65
66
|
most_discussed: Meist diskutiert
|
66
|
-
older:
|
67
|
-
recent: Kürzlich
|
67
|
+
older: Chronologisch
|
68
|
+
recent: Kürzlich hinzugefügt
|
68
69
|
title: 'Sortieren nach:'
|
69
70
|
comment_thread:
|
70
71
|
title: Konversation mit %{authorName}
|
@@ -83,35 +84,35 @@ de:
|
|
83
84
|
events:
|
84
85
|
comments:
|
85
86
|
comment_by_followed_user:
|
86
|
-
email_intro: "%{author_name} hat einen Kommentar
|
87
|
-
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie %{author_name}. Sie
|
88
|
-
email_subject:
|
89
|
-
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a>
|
87
|
+
email_intro: "%{author_name} hat einen Kommentar zu %{resource_title} hinterlassen. Sie können diesen auf dieser Seite lesen:"
|
88
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie %{author_name} folgen. Falls Sie keine solchen Benachrichtigungen mehr erhalten möchten, besuchen Sie die Profil-Seite dieses Benutzers.
|
89
|
+
email_subject: Neuer Kommentar von %{author_name} zu %{resource_title}
|
90
|
+
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a> zu <a href="%{resource_path}">%{resource_title}</a>.
|
90
91
|
comment_by_followed_user_group:
|
91
|
-
email_intro: 'Die Gruppe %{author_name} hat einen Kommentar in %{resource_title} hinterlassen. Sie können
|
92
|
-
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie %{author_name} folgen. Sie
|
93
|
-
email_subject:
|
94
|
-
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a>
|
92
|
+
email_intro: 'Die Gruppe %{author_name} hat einen Kommentar in %{resource_title} hinterlassen. Sie können diesen auf dieser Seite lesen:'
|
93
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie %{author_name} folgen. Falls Sie keine solchen Benachrichtigungen mehr erhalten möchten, besuchen Sie die Profil-Seite dieser Gruppe.
|
94
|
+
email_subject: Neuer Kommentar von %{author_name} zu %{resource_title}
|
95
|
+
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a> zu <a href="%{resource_path}">%{resource_title}</a>.
|
95
96
|
comment_created:
|
96
97
|
email_intro: "%{resource_title} wurde kommentiert. Sie können den Kommentar auf dieser Seite lesen:"
|
97
|
-
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie "%{resource_title}" oder seinem Autor folgen. Sie
|
98
|
-
email_subject:
|
99
|
-
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a>
|
98
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie "%{resource_title}" oder seinem Autor folgen. Falls Sie keine solchen Benachrichtigungen mehr erhalten möchten, besuchen Sie den obigen Link.
|
99
|
+
email_subject: Neuer Kommentar von %{author_name} zu %{resource_title}
|
100
|
+
notification_title: Es gibt einen neuen Kommentar von <a href="%{author_path}">%{author_name} %{author_nickname}</a> zu <a href="%{resource_path}">%{resource_title}</a>
|
100
101
|
reply_created:
|
101
|
-
email_intro: "%{author_name} hat Ihren Kommentar
|
102
|
+
email_intro: "%{author_name} hat auf Ihren Kommentar zu %{resource_title} geantwortet. Sie können das auf dieser Seite lesen:"
|
102
103
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Ihr Kommentar beantwortet wurde.
|
103
|
-
email_subject: "%{author_name} hat Ihren Kommentar
|
104
|
-
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> hat Ihren Kommentar in <a href="%{resource_path}">%{resource_title}</a>geantwortet
|
104
|
+
email_subject: "%{author_name} hat auf Ihren Kommentar zu %{resource_title} geantwortet"
|
105
|
+
notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> hat auf Ihren Kommentar in <a href="%{resource_path}">%{resource_title}</a> geantwortet
|
105
106
|
user_group_mentioned:
|
106
107
|
email_intro: Eine Ihrer Gruppen wurde erwähnt
|
107
108
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie ein Mitglied der Gruppe %{group_name} sind, die in %{resource_title} erwähnt wurde.
|
108
109
|
email_subject: Sie wurden in %{resource_title} als Mitglied von %{group_name} erwähnt
|
109
110
|
notification_title: Sie wurden in <a href="%{resource_path}">%{resource_title}</a> von <a href="%{author_path}">%{author_name} %{author_nickname}</a> als ein Mitglied von <a href="%{group_path}">%{group_name} %{group_nickname}</a> erwähnt
|
110
111
|
user_mentioned:
|
111
|
-
email_intro:
|
112
|
-
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie in %{resource_title}.
|
113
|
-
email_subject:
|
114
|
-
notification_title: Sie wurden in <a href="%{resource_path}">%{resource_title}</a> von <a href="%{author_path}">%{author_name} %{author_nickname}</a>
|
112
|
+
email_intro: Sie wurden erwähnt
|
113
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie in %{resource_title} erwähnt wurden.
|
114
|
+
email_subject: Sie wurden in %{resource_title} erwähnt
|
115
|
+
notification_title: Sie wurden in <a href="%{resource_path}">%{resource_title}</a> von <a href="%{author_path}">%{author_name} %{author_nickname}</a> erwähnt
|
115
116
|
metrics:
|
116
117
|
comments:
|
117
118
|
description: Anzahl der von Benutzern generierten Kommentare
|
data/config/locales/en.yml
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
eo:
|
data/config/locales/es-MX.yml
CHANGED
data/config/locales/es-PY.yml
CHANGED
data/config/locales/es.yml
CHANGED
@@ -20,6 +20,7 @@ es:
|
|
20
20
|
comments_count: Número de comentarios
|
21
21
|
last_activity:
|
22
22
|
new_comment_at_html: "<span>Nuevo comentario en %{link}</span>"
|
23
|
+
view: Ver
|
23
24
|
votes:
|
24
25
|
create:
|
25
26
|
error: Se ha producido un error al votar el comentario.
|
@@ -88,8 +89,8 @@ es:
|
|
88
89
|
email_subject: Hay un nuevo comentario de %{author_name} en %{resource_title}
|
89
90
|
notification_title: Hay un nuevo comentario de <a href="%{author_path}">%{author_name} %{author_nickname}</a> en <a href="%{resource_path}">%{resource_title}</a>.
|
90
91
|
comment_by_followed_user_group:
|
91
|
-
email_intro: '%{author_name} ha dejado un comentario en %{resource_title}.
|
92
|
-
email_outro: Recibes esta notificación porque sigues a %{author_name}. Puedes dejar de seguir a este grupo
|
92
|
+
email_intro: '%{author_name} ha dejado un comentario en %{resource_title}. Puedes leerlo en esta página:'
|
93
|
+
email_outro: Recibes esta notificación porque sigues a %{author_name}. Puedes dejar de seguir a este grupo desde su página de perfil.
|
93
94
|
email_subject: Hay un nuevo comentario de %{author_name} en %{resource_title}
|
94
95
|
notification_title: Hay un nuevo comentario de <a href="%{author_path}">%{author_name} %{author_nickname}</a> en <a href="%{resource_path}">%{resource_title}</a>.
|
95
96
|
comment_created:
|
@@ -0,0 +1 @@
|
|
1
|
+
et:
|
data/config/locales/fi-plain.yml
CHANGED