decidim-proposals 0.27.5 → 0.27.6

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +1 -1
  3. data/app/cells/decidim/proposals/participatory_text_proposal/buttons.erb +2 -2
  4. data/app/cells/decidim/proposals/proposal_tags/show.erb +2 -2
  5. data/app/controllers/decidim/proposals/widgets_controller.rb +11 -1
  6. data/app/models/decidim/proposals/proposal.rb +2 -14
  7. data/app/models/decidim/proposals/valuation_assignment.rb +2 -1
  8. data/app/packs/src/decidim/proposals/admin/proposals.js +7 -0
  9. data/app/permissions/decidim/proposals/permissions.rb +9 -0
  10. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +1 -1
  11. data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +1 -1
  12. data/app/views/decidim/proposals/admin/proposals/show.html.erb +1 -1
  13. data/app/views/decidim/proposals/admin/proposals/update_attribute.js.erb +2 -1
  14. data/app/views/decidim/proposals/proposals/show.html.erb +3 -1
  15. data/config/locales/ar.yml +1 -4
  16. data/config/locales/bg.yml +156 -2
  17. data/config/locales/ca.yml +28 -26
  18. data/config/locales/cs.yml +5 -3
  19. data/config/locales/de.yml +8 -6
  20. data/config/locales/el.yml +0 -3
  21. data/config/locales/en.yml +2 -0
  22. data/config/locales/es-MX.yml +7 -5
  23. data/config/locales/es-PY.yml +8 -6
  24. data/config/locales/es.yml +18 -16
  25. data/config/locales/eu.yml +5 -3
  26. data/config/locales/fi-plain.yml +7 -5
  27. data/config/locales/fi.yml +6 -4
  28. data/config/locales/fr-CA.yml +8 -6
  29. data/config/locales/fr.yml +8 -6
  30. data/config/locales/ga-IE.yml +7 -0
  31. data/config/locales/gl.yml +1 -3
  32. data/config/locales/he-IL.yml +1 -0
  33. data/config/locales/hu.yml +15 -9
  34. data/config/locales/id-ID.yml +1 -3
  35. data/config/locales/is-IS.yml +4 -3
  36. data/config/locales/it.yml +3 -5
  37. data/config/locales/ja.yml +19 -17
  38. data/config/locales/lt.yml +0 -3
  39. data/config/locales/lv.yml +1 -3
  40. data/config/locales/nl.yml +4 -6
  41. data/config/locales/no.yml +1 -3
  42. data/config/locales/pl.yml +29 -4
  43. data/config/locales/pt-BR.yml +34 -4
  44. data/config/locales/pt.yml +1 -3
  45. data/config/locales/ro-RO.yml +1 -3
  46. data/config/locales/ru.yml +6 -3
  47. data/config/locales/sk.yml +5 -7
  48. data/config/locales/sv.yml +3 -6
  49. data/config/locales/tr-TR.yml +7 -6
  50. data/config/locales/uk.yml +6 -3
  51. data/config/locales/zh-CN.yml +1 -3
  52. data/config/locales/zh-TW.yml +0 -3
  53. data/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb +16 -0
  54. data/decidim-proposals.gemspec +40 -0
  55. data/lib/decidim/proposals/proposal_serializer.rb +1 -0
  56. data/lib/decidim/proposals/test/factories.rb +63 -56
  57. data/lib/decidim/proposals/valuatable.rb +2 -1
  58. data/lib/decidim/proposals/version.rb +1 -1
  59. metadata +29 -27
  60. data/config/environment.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d86dedc7c769a8efba7a3e155139f0e0668e31ffe54edafb51a49485479fef8
4
- data.tar.gz: 1e8ea8f759a82484b1b1b93513c77d55d06b780e033f3cb13862cb46c6085b6b
3
+ metadata.gz: 85856f36076b1726e3bfe1f049f46968909f1acd6ded28784a020abe858dddbd
4
+ data.tar.gz: 9329f0d81040190473850146061ebcf3778c669cec4b22a3d1778cc01b568b03
5
5
  SHA512:
6
- metadata.gz: 69f4c89eeea8892cb2906d9b87895615c79d47de2865391f661b79be144b9ad59a49f1532110c82ba4ac78dc7fc88f3317be07f94a30fcc814f9511a9285e94b
7
- data.tar.gz: 06d799b876315ba91c6e97f73297f663e393094718122d7cb5c5677e2033d91a93c77797dcbe8a0e93a59d11796d6463d0013b281ad58ddef234e0546516e5bb
6
+ metadata.gz: 2aff02ae9dfbf6e0f0d87014e79344a4ec1e995af11a4d51196702506de9cdc2c356276a096a0b25fbe96060945d56cc56a6e1dc3e06803f490d7267b5b331cf
7
+ data.tar.gz: 1dd27d121005ba63c91f56db70f540f265ef3a4579e0de837a5307f2acda20a54281d0c67621deb0e0465e9c87c20a2daf901f85a4fd7e2b92ef3ebcb56f674e
@@ -1,6 +1,6 @@
1
1
  <section class="section row collapse highlighted_proposals">
2
2
  <h3 class="section-heading">
3
- <%= translated_attribute(model.name) %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_proposals.see_all", count: proposals_count) %></a>
3
+ <%= decidim_escape_translated(model.name) %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_proposals.see_all", count: proposals_count) %></a>
4
4
  </h3>
5
5
 
6
6
  <%= cell(
@@ -6,7 +6,7 @@
6
6
  <%= link_to resource_amendments_path, class: "column medium-4 button light secondary" do %>
7
7
  <%= visible_emendations.count %>
8
8
  <% end %>
9
- <%= link_to amend_resource_path, class: "column button hollow secondary button--sc", disabled: amend_button_disabled? do %>
9
+ <%= action_authorized_link_to :amend, amend_resource_path, resource: model, data: { "redirect_url" => amend_resource_path }, class: "column button hollow secondary button--sc", disabled: amend_button_disabled? do %>
10
10
  <%= t("amend", scope: "decidim.proposals.participatory_text_proposal.buttons") %>
11
11
  <% end %>
12
12
  </div>
@@ -23,7 +23,7 @@
23
23
  <%= link_to resource_comments_path, class: "column medium-4 button light secondary" do %>
24
24
  <%= icon "comment-square", class: "icon--small", aria_label: t("comments", scope: "decidim.proposals.participatory_text_proposal.buttons"), role: "img" %> <%= model.comments_count %>
25
25
  <% end %>
26
- <%= link_to resource_comments_path, class: "column button hollow secondary button--sc" do %>
26
+ <%= action_authorized_link_to :comment, resource_comments_path, resource: model, class: "column button hollow secondary button--sc" do %>
27
27
  <%= t("comment", scope: "decidim.proposals.participatory_text_proposal.buttons") %>
28
28
  <% end %>
29
29
  <% end %>
@@ -3,8 +3,8 @@
3
3
  <% if category.present? %>
4
4
  <li>
5
5
  <%= link_to resource_locator(model).index(filter: { with_any_category: [category.id.to_s] }), title: t("decidim.tags.filter_results_for_category", resource: translated_attribute(category.name)) do %>
6
- <span class="show-for-sr"><%= t "decidim.tags.filter_results_for_category", resource: translated_attribute(category.name) %></span>
7
- <span aria-hidden="true"><%= translated_attribute(category.name) %></span>
6
+ <span class="show-for-sr"><%= t "decidim.tags.filter_results_for_category", resource: decidim_html_escape(translated_attribute(category.name)) %></span>
7
+ <span aria-hidden="true"><%= decidim_html_escape(translated_attribute(category.name)) %></span>
8
8
  <% end %>
9
9
  <% if previous_category.present? && show_previous_category? %>
10
10
  &nbsp;
@@ -5,15 +5,25 @@ module Decidim
5
5
  class WidgetsController < Decidim::WidgetsController
6
6
  helper Proposals::ApplicationHelper
7
7
 
8
+ def show
9
+ enforce_permission_to :embed, :proposal, proposal: model if model
10
+
11
+ super
12
+ end
13
+
8
14
  private
9
15
 
10
16
  def model
11
- @model ||= Proposal.where(component: params[:component_id]).find(params[:proposal_id])
17
+ @model ||= Proposal.not_hidden.except_withdrawn.where(component: current_component).find(params[:proposal_id])
12
18
  end
13
19
 
14
20
  def iframe_url
15
21
  @iframe_url ||= proposal_widget_url(model)
16
22
  end
23
+
24
+ def permission_class_chain
25
+ [Decidim::Proposals::Permissions]
26
+ end
17
27
  end
18
28
  end
19
29
  end
@@ -96,11 +96,11 @@ module Decidim
96
96
  }
97
97
 
98
98
  scope :sort_by_valuation_assignments_count_asc, lambda {
99
- order(Arel.sql("#{sort_by_valuation_assignments_count_nulls_last_query} ASC NULLS FIRST").to_s)
99
+ order(valuation_assignments_count: :asc)
100
100
  }
101
101
 
102
102
  scope :sort_by_valuation_assignments_count_desc, lambda {
103
- order(Arel.sql("#{sort_by_valuation_assignments_count_nulls_last_query} DESC NULLS LAST").to_s)
103
+ order(valuation_assignments_count: :desc)
104
104
  }
105
105
 
106
106
  scope_search_multi :with_any_state, [:accepted, :rejected, :evaluating, :state_not_published]
@@ -333,18 +333,6 @@ module Decidim
333
333
  ProposalSearch.new(self, params, options)
334
334
  end
335
335
 
336
- # Defines the base query so that ransack can actually sort by this value
337
- def self.sort_by_valuation_assignments_count_nulls_last_query
338
- <<-SQL.squish
339
- (
340
- SELECT COUNT(decidim_proposals_valuation_assignments.id)
341
- FROM decidim_proposals_valuation_assignments
342
- WHERE decidim_proposals_valuation_assignments.decidim_proposal_id = decidim_proposals_proposals.id
343
- GROUP BY decidim_proposals_valuation_assignments.decidim_proposal_id
344
- )
345
- SQL
346
- end
347
-
348
336
  # method to filter by assigned valuator role ID
349
337
  def self.valuator_role_ids_has(value)
350
338
  query = <<-SQL.squish
@@ -9,7 +9,8 @@ module Decidim
9
9
  include Decidim::Traceable
10
10
  include Decidim::Loggable
11
11
 
12
- belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal"
12
+ belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal",
13
+ counter_cache: true
13
14
  belongs_to :valuator_role, polymorphic: true
14
15
 
15
16
  def self.log_presenter_class_for(_log)
@@ -47,6 +47,12 @@ $(() => {
47
47
  }
48
48
  }
49
49
 
50
+ const resetForms = function() {
51
+ $("#js-bulk-actions-dropdown button").each(function() {
52
+ $(`#js-form-${$(this).data("action")}`)[0].reset();
53
+ })
54
+ }
55
+
50
56
  const showOtherActionsButtons = function() {
51
57
  $("#js-other-actions-wrapper").removeClass("hide");
52
58
  }
@@ -68,6 +74,7 @@ $(() => {
68
74
  window.showOtherActionsButtons = showOtherActionsButtons;
69
75
  window.hideOtherActionsButtons = hideOtherActionsButtons;
70
76
  window.hideBulkActionForms = hideBulkActionForms;
77
+ window.resetForms = resetForms;
71
78
 
72
79
  if ($(".js-bulk-action-form").length) {
73
80
  hideBulkActionForms();
@@ -4,6 +4,7 @@ module Decidim
4
4
  module Proposals
5
5
  class Permissions < Decidim::DefaultPermissions
6
6
  def permissions
7
+ allow_embed_proposal?
7
8
  return permission_action unless user
8
9
 
9
10
  # Delegate the admin permission checks to the admin permissions class
@@ -47,6 +48,14 @@ module Decidim
47
48
  @proposal ||= context.fetch(:proposal, nil) || context.fetch(:resource, nil)
48
49
  end
49
50
 
51
+ # As this is a public action, we need to run this before other checks
52
+ def allow_embed_proposal?
53
+ return unless permission_action.action == :embed && permission_action.subject == :proposal && proposal
54
+ return disallow! if proposal.withdrawn?
55
+
56
+ allow!
57
+ end
58
+
50
59
  def voting_enabled?
51
60
  return unless current_settings
52
61
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  <div class="row column" id="proposal_meeting">
46
46
  <%= form.select :meeting_id,
47
- options_for_select(@form.meetings&.map { |meeting| [present(meeting).title, meeting.id] }, selected: meetings_as_authors_selected ),
47
+ options_for_select(@form.meetings&.map { |meeting| [present(meeting).title(html_escape: true), meeting.id] }, selected: meetings_as_authors_selected ),
48
48
  { include_blank: true, label: t(".select_a_meeting") },
49
49
  { multiple: false, class: "chosen-select" } %>
50
50
  </div>
@@ -53,7 +53,7 @@
53
53
  </td>
54
54
 
55
55
  <td class="valuators-count">
56
- <%= proposal.valuation_assignments.count %>
56
+ <%= proposal.valuation_assignments.size %>
57
57
  </td>
58
58
 
59
59
  <td>
@@ -107,7 +107,7 @@
107
107
  <% proposal_meetings.each do |meeting| %>
108
108
  <% presented_meeting = present(meeting) %>
109
109
  <li>
110
- <%= link_to presented_meeting.title, presented_meeting.profile_path %>
110
+ <%= link_to decidim_escape_translated(meeting.title).html_safe, presented_meeting.profile_path %>
111
111
  </li>
112
112
  <% end %>
113
113
  </ul>
@@ -22,5 +22,6 @@
22
22
  window.hideBulkActionsButton();
23
23
  window.hideBulkActionForms();
24
24
  window.showOtherActionsButtons();
25
- window.selectedResourcesCountUpdate();
25
+ window.selectedProposalsCountUpdate();
26
+ window.resetForms();
26
27
  <% end %>
@@ -129,7 +129,9 @@ extra_admin_link(
129
129
  <%= resource_version(proposal_presenter, versions_path: proposal_versions_path(@proposal)) %>
130
130
  <%= cell("decidim/fingerprint", @proposal) %>
131
131
  <%= render partial: "decidim/shared/share_modal", locals: { resource: @proposal } %>
132
- <%= embed_modal_for proposal_widget_url(@proposal, format: :js) %>
132
+ <% if allowed_to? :embed, :proposal, proposal: @proposal %>
133
+ <%= embed_modal_for proposal_widget_url(@proposal, format: :js) %>
134
+ <% end %>
133
135
  <%= cell "decidim/proposals/proposal_link_to_collaborative_draft", @proposal %>
134
136
  <%= cell "decidim/proposals/proposal_link_to_rejected_emendation", @proposal %>
135
137
  </div>
@@ -291,7 +291,6 @@ ar:
291
291
  notification_title: تم قبول اقتراحك <a href="%{resource_path}">%{resource_title}</a>.
292
292
  follower:
293
293
  email_intro: 'تم قبول الاقتراح "%{resource_title}". يمكنك قراءة الإجابة على هذه الصفحة:'
294
- email_outro: لقد تلقيت هذا الإشعار لأنك تتابع %{resource_title}. يمكنك إلغاء المتابعة على الرابط السابق.
295
294
  email_subject: تم قبول اقتراح تتابعه
296
295
  notification_title: لقد تم قبول المُقتَرح <a href="%{resource_path}">%{resource_title}</a>.
297
296
  proposal_evaluating:
@@ -302,7 +301,6 @@ ar:
302
301
  notification_title: يتم تقييم الاقتراح الخاص بك <a href="%{resource_path}">%{resource_title}</a>.
303
302
  follower:
304
303
  email_intro: 'الاقتراح "%{resource_title}" قيد التقييم حاليا. يمكنك التحقق من وجود إجابة على هذه الصفحة:'
305
- email_outro: لقد تلقيت هذا الإشعار لأنك تتابع %{resource_title}. يمكنك إلغاء المتابعة على الرابط السابق.
306
304
  email_subject: واحد من الاقتراحات التي تتبعها قيد التقييم الآن
307
305
  notification_title: الاقتراح <a href="%{resource_path}">%{resource_title}</a> قيد التقييم الآن.
308
306
  proposal_mentioned:
@@ -329,7 +327,6 @@ ar:
329
327
  notification_title: تم رفض اقتراحك <a href="%{resource_path}">%{resource_title}</a>.
330
328
  follower:
331
329
  email_intro: 'تم رفض الاقتراح %{resource_title}. يمكنك قراءة الإجابة على ذلك على هذه الصفحة:'
332
- email_outro: لقد تلقيت هذا الإشعار لأنك تتابع %{resource_title}. يمكنك إلغاء المتابعة على الرابط السابق.
333
330
  email_subject: واحد من الاقتراحات التي تتبعها تم رفضها
334
331
  notification_title: تم رفض الاقتراح <a href="%{resource_path}">%{resource_title}</a>.
335
332
  proposal_update_category:
@@ -496,7 +493,7 @@ ar:
496
493
  accepted: وافقت
497
494
  answer_proposal: إجابة
498
495
  evaluating: تقييم
499
- not_answered: لم تتم الإجابة عليه
496
+ not_answered: بلا جواب
500
497
  rejected: مرفوض
501
498
  title: الإجابة على الاقتراح %{title}
502
499
  proposal_notes:
@@ -11,6 +11,8 @@ bg:
11
11
  state: Състояние
12
12
  title: Заглавие
13
13
  user_group_id: Създай съвместна чернова като
14
+ import_participatory_text:
15
+ document: Текстов документ за участие
14
16
  proposal:
15
17
  address: Адрес
16
18
  answer: Отговор
@@ -141,6 +143,7 @@ bg:
141
143
  endorsements_enabled: Одобряване разрешено
142
144
  proposal_answering_enabled: Отговора на предложение е разрешен
143
145
  publish_answers_immediately: Публикувай отговорите на предложения незабавно
146
+ publish_answers_immediately_help_html: 'Имайте предвид, че ако отговаряте на някои предложения, без това активиране, ще трябва да ги публикувате ръчно, като ги изберете и използвате действието за публикуване. За повече информация как работи това вижте <a href="https://docs.decidim.org/en/admin/components/proposals/answers#_publication" target="_blank">страницата с документация за отговорите на предложенията</a>.'
144
147
  suggested_hashtags: Предлагай хаштаг на участниците когато създават предложения
145
148
  votes_blocked: Поддържането блокирано
146
149
  votes_enabled: Поддържането разрешено
@@ -189,7 +192,6 @@ bg:
189
192
  notification_title: Вашето предложение <a href="%{resource_path}">%{resource_title}</a> е одобрено.
190
193
  follower:
191
194
  email_intro: 'Предложението "%{resource_title}" е одобрено. Прочетете отговора на страницата:'
192
- email_outro: Получавате това известие, защото следвате "%{resource_title}". Може да премахнете следването чрез предната връзка.
193
195
  email_subject: Предложение, което следвате е одобрено
194
196
  notification_title: Предложението <a href="%{resource_path}">%{resource_title}</a> беше одобрено.
195
197
  proposal_evaluating:
@@ -200,7 +202,6 @@ bg:
200
202
  notification_title: Вашето предложение <a href="%{resource_path}">%{resource_title}</a> се разглежда.
201
203
  follower:
202
204
  email_intro: 'Предложението "%{resource_title}" се разглежда в момента. Прочетете отговора на страницата:'
203
- email_outro: Получавате това известие, защото следвате "%{resource_title}". Може да премахнете следването чрез предната връзка.
204
205
  email_subject: Предложение, което следвате се разглежда
205
206
  notification_title: Предложението <a href="%{resource_path}">%{resource_title}</a> се разглежда.
206
207
  proposal_mentioned:
@@ -216,20 +217,173 @@ bg:
216
217
  proposal_published_for_space:
217
218
  email_intro: Предложението "%{resource_title}" беше добавено в "%{participatory_space_title}", което следвате.
218
219
  email_outro: Получавате това известие, защото следвате "%{participatory_space_title}". Може да прекратите известията чрез предната връзка.
220
+ notification_title: Предложениетоl <a href="%{resource_path}">%{resource_title}</a> е добавено към %{participatory_space_title} от %{author}
221
+ notification_title_official: Официалното предложение <a href="%{resource_path}">%{resource_title}</a> е добавено към %{participatory_space_title}
222
+ proposal_rejected:
223
+ affected_user:
224
+ email_intro: 'Вашето предложение "%{resource_title}" беше отхвърлено. Можете да прочетете отговора на тази страница:'
225
+ email_outro: Получавате това известие, защото сте автор на %{resource_title}".
226
+ email_subject: Вашето предложение беше отхвърлено
227
+ notification_title: Вашето предложение <a href="%{resource_path}">%{resource_title}</a> беше отхвърлено.
228
+ follower:
229
+ email_intro: 'Предложението „%{resource_title}“ беше отхвърлено. Можете да прочетете отговора на тази страница:'
230
+ email_subject: Предложение, което следвате, беше отхвърлено
231
+ notification_title: Предложението <a href="%{resource_path}">%{resource_title}</a> беше отхвърлено.
232
+ gamification:
233
+ badges:
234
+ proposal_votes:
235
+ unearned_another: Този участник все още не е подкрепил нито едно предложение.
236
+ proposals:
237
+ unearned_another: Този участник все още не е създал нито едно предложение.
238
+ participatory_spaces:
239
+ highlighted_proposals:
240
+ see_all: Виж всички предложения (%{count})
219
241
  proposals:
220
242
  admin:
221
243
  imports:
222
244
  title:
245
+ answers: Импортиране на отговори на предложения
223
246
  proposals: Копиране на предложения
247
+ participatory_texts:
248
+ new_import:
249
+ document_legend: 'Добавете документ с големина до 2 Mb, като всеки раздел до 3 нива надолу в структурата ще бъде анализиран в „Предложения“. Поддържаните формати са: %{valid_mime_types}'
250
+ publish:
251
+ invalid: Неуспешно публикуване на предложения
252
+ success: Всички предложения бяха публикувани
253
+ proposal_notes:
254
+ create:
255
+ error: Възникна проблем при създаването на тази бележка за предложението
256
+ success: Бележката за предложението беше създадена успешно
224
257
  proposals:
258
+ answer:
259
+ invalid: Възникна проблем при отговарянето на това предложение
260
+ success: Отговорихте успешно на предложението
261
+ create:
262
+ invalid: Възникна проблем при създаването на това предложение
263
+ success: Предложението беше създадено успешно
264
+ publish_answers:
265
+ number_of_proposals: Отговорите на %{number} предложения ще бъдат публикувани.
266
+ select_a_proposal: Моля, изберете предложение
225
267
  show:
268
+ authors: Автори
269
+ comments_negative_count: Против
270
+ comments_neutral_count: Неутрален
271
+ comments_positive_count: Подкрепям
272
+ created_at: Дата на създаване
273
+ endorsements_ranking: Класиране по препоръки
274
+ link: Връзка
226
275
  proposals: Предложения
276
+ votes_ranking: Класиране по подкрепяния
277
+ update_category:
278
+ select_a_proposal: Моля, изберете предложение
279
+ update_scope:
280
+ select_a_proposal: Моля, изберете предложение
281
+ select_a_scope: Моля, изберете обхват
227
282
  proposals_imports:
283
+ create:
284
+ invalid: Възникна проблем при импортирането на предложенията
285
+ success: "%{number} предложения бяха импортирани успешно"
228
286
  new:
229
287
  title: Копиране на предложения
288
+ valuation_assignments:
289
+ create:
290
+ invalid: Възникна грешка при възлагането на предложенията на оценител
291
+ success: Предложенията бяха възложени успешно на оценител
292
+ delete:
293
+ invalid: Възникна грешка при отмяна на възлагането на предложения към оценител
294
+ success: Оценителят бе успешно премахнат от предложенията
295
+ collaborative_drafts:
296
+ collaborative_draft:
297
+ publish:
298
+ irreversible_action_modal:
299
+ body: След като черновата бъде публикувана като предложение, тя повече няма да може да се редактира. За предложението няма да могат да се приемат нови автори или добавки.
300
+ view_collaborative_draft: Преглед на съвместна чернова
301
+ withdraw:
302
+ irreversible_action_modal:
303
+ body: След като черновата бъде затворена, тя повече няма да може да се редактира. За черновата няма да могат да се приемат нови автори или добавки.
304
+ count:
305
+ drafts_count:
306
+ one: "Съвместна чернова"
307
+ other: "Съвместни чернови"
308
+ requests:
309
+ accepted_request:
310
+ success: "@%{user} беше приет(а) успешно като сътрудник"
311
+ access_requested:
312
+ success: Вашата заявка за сътрудничество беше изпратена успешно
313
+ rejected_request:
314
+ success: "@%{user} беше отхвърлен(а) успешно като сътрудник"
315
+ show:
316
+ final_proposal: окончателно предложение
317
+ info-message: Това е <strong>съвместна чернова</strong> за предложение. Това означава, че можете да помогнете на авторите да оформят предложението си, като използвате раздела за коментари по-долу, или да го подобрите директно, като поискате редакторски достъп. След като авторите Ви предоставят достъп, ще можете да извършвате промени в черновата.
318
+ published_proposal: публикувано предложение
319
+ version_history: вижте хронологията на версиите за това предложение
320
+ wizard_aside:
321
+ info: Създавате <strong>съвместна чернова</strong>.
230
322
  content_blocks:
231
323
  highlighted_proposals:
232
324
  proposals: Предложения
325
+ last_activity:
326
+ new_proposal_at_html: "<span>Ново предложение на адрес: %{link}</span>"
327
+ proposal_updated_at_html: "<span>Предложение беше актуализирано на: %{link}</span>"
328
+ models:
329
+ collaborative_draft:
330
+ fields:
331
+ authors: Автори
332
+ contributions: Добавки
333
+ new:
334
+ limit_reached: Не можете да създавате нови предложения, докато сте надхвърлили ограничението.
335
+ proposals:
336
+ count:
337
+ proposals_count:
338
+ one: "%{count} предложение"
339
+ other: "%{count} предложения"
340
+ edit:
341
+ add_image: Добавяне на изображение
342
+ edit_image: Редактиране на изображение
343
+ gallery_legend: "(Незадължително) Добавете изображение към картата с предложението"
344
+ index:
345
+ view_proposal: Преглед на предложението
346
+ linked_proposals:
347
+ proposal_votes:
348
+ one: поддръжка
349
+ other: поддръжки
350
+ participatory_texts:
351
+ view_index:
352
+ see_index: Вижте индекса
353
+ proposal:
354
+ creation_date: 'Създадено на:'
355
+ view_proposal: Преглед на предложението
356
+ proposals:
357
+ empty: Все още няма предложение
358
+ empty_filters: Няма предложение, което да отговаря на тези критерии
359
+ show:
360
+ back_to: Назад към
361
+ back_to_list: Назад към списъка
362
+ endorsements_list: Списък с одобрения
363
+ read_less: Виж по-малко
364
+ read_more: Прочетете повече
365
+ report: Отчет
366
+ tags:
367
+ changed_from: "(променено от предишното <u>%{previous_name}</u> от администратор)"
368
+ votes_count:
369
+ most_popular_proposal: Най-популярно предложение
370
+ need_more_votes: Има нужда от повече подкрепяния
371
+ voting_rules:
372
+ minimum_votes_per_user:
373
+ given_enough_votes: Предоставили сте достатъчно подкрепяния.
374
+ threshold_per_proposal:
375
+ description: За да бъдат валидирани, предложенията трябва да съберат %{limit} подкрепяния
376
+ vote_limit:
377
+ left: Оставащи
378
+ wizard_aside:
379
+ info: Вие създавате <strong>предложение</strong>.
380
+ wizard_steps:
381
+ see_steps: вижте стъпките
382
+ step_of: Стъпка %{current_step_num} от общо %{total_steps}
383
+ proposals_picker:
384
+ close: Затвори
385
+ more_proposals: Има още %{number} предложения. Прецизирайте търсенето си, за да ги намерите.
386
+ no_proposals: Няма предложения, които да съответстват на критериите Ви за търсене, или няма никакви предложения.
233
387
  versions:
234
388
  collaborative_drafts:
235
389
  back_to_resource: Обратно към съвместната чернова