decidim-proposals 0.31.2 → 0.31.3

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/decidim/proposals/admin/proposals_imports_controller.rb +15 -0
  3. data/app/forms/decidim/proposals/admin/proposal_form.rb +51 -1
  4. data/app/forms/decidim/proposals/admin/proposals_import_form.rb +7 -22
  5. data/app/packs/entrypoints/decidim_proposals_admin.js +1 -0
  6. data/app/packs/src/decidim/proposals/admin/controllers/import_proposals/controller.js +110 -0
  7. data/app/packs/src/decidim/proposals/admin/import_proposals.js +5 -0
  8. data/app/views/decidim/proposals/admin/proposals_imports/new.html.erb +9 -12
  9. data/config/locales/ar.yml +12 -2
  10. data/config/locales/bg.yml +6 -0
  11. data/config/locales/ca-IT.yml +10 -10
  12. data/config/locales/ca.yml +10 -10
  13. data/config/locales/cs.yml +8 -2
  14. data/config/locales/de.yml +3 -3
  15. data/config/locales/el.yml +6 -0
  16. data/config/locales/es-MX.yml +9 -9
  17. data/config/locales/es-PY.yml +5 -5
  18. data/config/locales/es.yml +8 -8
  19. data/config/locales/eu.yml +4 -4
  20. data/config/locales/fi-plain.yml +6 -4
  21. data/config/locales/fi.yml +4 -2
  22. data/config/locales/fr-CA.yml +13 -10
  23. data/config/locales/fr.yml +13 -10
  24. data/config/locales/ga-IE.yml +5 -0
  25. data/config/locales/gl.yml +9 -3
  26. data/config/locales/hu.yml +8 -2
  27. data/config/locales/id-ID.yml +6 -3
  28. data/config/locales/is-IS.yml +24 -0
  29. data/config/locales/it.yml +11 -5
  30. data/config/locales/ja.yml +5 -5
  31. data/config/locales/lt.yml +11 -3
  32. data/config/locales/lv.yml +7 -2
  33. data/config/locales/nl.yml +12 -8
  34. data/config/locales/no.yml +6 -0
  35. data/config/locales/pl.yml +13 -5
  36. data/config/locales/pt-BR.yml +5 -5
  37. data/config/locales/pt.yml +8 -2
  38. data/config/locales/ro-RO.yml +9 -2
  39. data/config/locales/ru.yml +27 -0
  40. data/config/locales/sk.yml +9 -3
  41. data/config/locales/sl.yml +6 -0
  42. data/config/locales/sv.yml +144 -32
  43. data/config/locales/tr-TR.yml +12 -5
  44. data/config/locales/uk.yml +27 -0
  45. data/config/locales/zh-CN.yml +5 -0
  46. data/config/locales/zh-TW.yml +6 -1
  47. data/lib/decidim/proposals/admin_engine.rb +5 -2
  48. data/lib/decidim/proposals/version.rb +1 -1
  49. metadata +22 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ff74807479920d9ab3da7a3c96b9a0d19dbbedf38d857c330127e7b625bb7ee
4
- data.tar.gz: d4d5182693c18d797dc7fa949ba0c643247e4453eb7cc440e7e0368733f05fae
3
+ metadata.gz: c245b1ea6ef736a9799553e7f87f5f95d5c7c7b4c3b7c3e4830f3c9c4626d650
4
+ data.tar.gz: a6238f6e26575eee72a3e3f1b87c07e30a8822fef9c0cb47475af9c571e6b677
5
5
  SHA512:
6
- metadata.gz: d3b16acf11cb62832f4427f6930e8fa8285f4e878cf08e0373f1ac045b746278156fd1b63294cae390953cbccb5ab9ec47a4a1c7ab90d44ffae48c37057aa210
7
- data.tar.gz: 8947155f6686a5a459e8977f48461a219007cbce96a233b6bff7c6a01f6d9f9c3c7c13aaecb473beb21678ae83d9b50483352a775573e5336c57a424c3d0e812
6
+ metadata.gz: e03002daa5cfc826e8c18fbcfc60dba89d1d5aa294e4bf909db8eab8933f97b7b73d3061b94ae1190dc59750b91764e77fc0397fee6a49201efe98ebf1fa9853
7
+ data.tar.gz: 857327cf0f33058d2830e7b34ded7e299577c9d5e1cf30dad5ba06b78541647f9e4d7c1a885ed290354b85e5309f70001439250769136fed4fcc94ec3337b05c
@@ -27,6 +27,21 @@ module Decidim
27
27
  end
28
28
  end
29
29
  end
30
+
31
+ def component_states
32
+ enforce_permission_to :import, :proposals
33
+ component = current_participatory_space.components.find_by(id: params[:origin_id])
34
+
35
+ if component
36
+ states = Decidim::Proposals::ProposalState
37
+ .where(component:)
38
+ .map { |s| { token: s.token, title: translated_attribute(s.title) } }
39
+ states << { token: "not_answered", title: I18n.t("decidim.proposals.answers.not_answered") }
40
+ render json: states
41
+ else
42
+ render json: []
43
+ end
44
+ end
30
45
  end
31
46
  end
32
47
  end
@@ -27,12 +27,62 @@ module Decidim
27
27
 
28
28
  self.title = presenter.title(all_locales: title.is_a?(Hash))
29
29
  self.body = presenter.editor_body(all_locales: body.is_a?(Hash))
30
- self.documents = model.attachments
30
+ self.documents = model.attachments.ids
31
+ self.add_documents = model.attachments.map { |att| { id: att.id, title: att.title } }
32
+ end
33
+
34
+ def documents=(value)
35
+ case value
36
+ when String
37
+ super(parse_string_documents(value))
38
+ when Integer
39
+ super([value])
40
+ else
41
+ super
42
+ end
43
+ end
44
+
45
+ def documents
46
+ result = super
47
+
48
+ if should_use_add_documents?(result)
49
+ extract_ids_from_add_documents
50
+ else
51
+ result.is_a?(Array) ? result : []
52
+ end
31
53
  end
32
54
 
33
55
  def notify_missing_attachment_if_errored
34
56
  errors.add(:add_documents, :needs_to_be_reattached) if errors.any? && add_documents.present?
35
57
  end
58
+
59
+ private
60
+
61
+ def should_use_add_documents?(result)
62
+ (result.blank? || result.is_a?(String)) && add_documents.present?
63
+ end
64
+
65
+ def extract_ids_from_add_documents
66
+ add_documents
67
+ .select { |doc| doc.is_a?(Hash) && (doc[:id].present? || doc["id"].present?) }
68
+ .map { |doc| (doc[:id] || doc["id"]).to_i }
69
+ end
70
+
71
+ def parse_string_documents(value)
72
+ return [] if value.blank?
73
+
74
+ parse_document_ids(value)
75
+ end
76
+
77
+ def parse_document_ids(value)
78
+ ids = begin
79
+ Array(JSON.parse(value))
80
+ rescue JSON::ParserError
81
+ value.split(",").map(&:strip)
82
+ end
83
+
84
+ ids.map(&:to_i).reject(&:zero?)
85
+ end
36
86
  end
37
87
  end
38
88
  end
@@ -14,16 +14,10 @@ module Decidim
14
14
  attribute :keep_authors, Boolean
15
15
  attribute :states, Array[String]
16
16
 
17
- validates :origin_component_id, :origin_component, :states, :current_component, presence: true
17
+ validates :origin_component_id, :origin_component, :current_component, presence: true
18
+ validates :states, presence: true
18
19
  validate :valid_states
19
20
 
20
- def states_collection
21
- @states_collection ||= ProposalState.where(component: current_component) + [ProposalState.new(token: "not_answered",
22
- title: I18n.t(
23
- :not_answered, scope: "decidim.proposals.answers"
24
- ))]
25
- end
26
-
27
21
  def states
28
22
  super.compact_blank
29
23
  end
@@ -42,23 +36,14 @@ module Decidim
42
36
  end
43
37
  end
44
38
 
45
- def available_states(component_id = nil)
46
- scope = Decidim::Proposals::ProposalState
47
- scope = scope.where(component: Decidim::Component.find(component_id)) if component_id.present?
48
-
49
- states = scope.pluck(:token).uniq.map do |token|
50
- OpenStruct.new(token:, title: token.humanize)
51
- end
52
-
53
- states + [OpenStruct.new(token: "not_answered", title: I18n.t("decidim.proposals.answers.not_answered"))]
54
- end
55
-
56
39
  private
57
40
 
58
41
  def valid_states
59
- return if states.all? do |state|
60
- available_states(origin_component_id).pluck(:token).include?(state)
61
- end
42
+ return unless origin_component
43
+ return if states.empty?
44
+
45
+ valid_tokens = Decidim::Proposals::ProposalState.where(component: origin_component).pluck(:token) + ["not_answered"]
46
+ return if states.all? { |state| valid_tokens.include?(state) }
62
47
 
63
48
  errors.add(:states, :invalid)
64
49
  end
@@ -1,3 +1,4 @@
1
1
  import "src/decidim/proposals/admin/proposals"
2
2
  import "src/decidim/proposals/admin/proposals_form"
3
3
  import "src/decidim/proposals/admin/proposals_merge"
4
+ import "src/decidim/proposals/admin/import_proposals"
@@ -0,0 +1,110 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ /**
4
+ * Stimulus controller for the admin import-proposals form.
5
+ *
6
+ * Watches a `<select>` element (the origin component picker) and dynamically
7
+ * fetches the available proposal states for the chosen component.
8
+ * The retrieved states are rendered as a list of checkboxes inside a
9
+ * container element, so admins can easily filter which proposal states to import.
10
+ *
11
+ * Targets:
12
+ * - `select` – The `<select>` element used to choose the origin component.
13
+ * - `container` – The wrapper element where the state checkboxes are rendered.
14
+ *
15
+ * Values:
16
+ * - `statesUrl` {String} – Base URL of the endpoint that returns available states.
17
+ * - `selectedStates` {Array} – Pre-selected state tokens (populated on page load
18
+ * when re-rendering a previously submitted form).
19
+ */
20
+ export default class ImportProposalsController extends Controller {
21
+
22
+ /**
23
+ * Lifecycle callback invoked by Stimulus when the controller is connected to
24
+ * the DOM. Triggers an initial state fetch based on the currently selected
25
+ * component so that a pre-filled form displays the correct checkboxes.
26
+ * @returns {void}
27
+ */
28
+ connect() {
29
+ this._fetchStates(this.selectTarget.value);
30
+ }
31
+
32
+ /**
33
+ * Triggered when the select value changes.
34
+ * @param {Event} event - The change event fired by the select element.
35
+ * @returns {void}
36
+ */
37
+ onSelectChange(event) {
38
+ this._fetchStates(event.target.value);
39
+ }
40
+
41
+ /**
42
+ * Escapes a string for safe insertion into HTML.
43
+ * @param {string} str - The string to escape.
44
+ * @returns {string} The escaped HTML string.
45
+ */
46
+ _escapeHtml(str) {
47
+ const div = document.createElement("div");
48
+ div.appendChild(document.createTextNode(str));
49
+ return div.innerHTML;
50
+ }
51
+
52
+ /**
53
+ * Fetches the available states for the given component ID and renders them.
54
+ * @param {string} componentId - The ID of the selected component to fetch states for.
55
+ * @returns {void}
56
+ */
57
+ _fetchStates(componentId) {
58
+ const container = this.containerTarget;
59
+ if (!componentId) {
60
+ container.innerHTML = "";
61
+ container.style.display = "none";
62
+ return;
63
+ }
64
+
65
+ const url = `${this.statesUrlValue}?origin_id=${componentId}`;
66
+ fetch(url, {
67
+ credentials: "same-origin",
68
+ headers: { Accept: "application/json" }
69
+ }).then((res) => {
70
+ return res.json();
71
+ }).then((states) => {
72
+ if (!states.length) {
73
+ container.innerHTML = "";
74
+ container.style.display = "none";
75
+ return;
76
+ }
77
+
78
+ const selectedStates = this.selectedStatesValue;
79
+ const wrapper = document.createElement("div");
80
+ wrapper.className = "row column";
81
+
82
+ states.forEach((state) => {
83
+ const div = document.createElement("div");
84
+ const label = document.createElement("label");
85
+ const input = document.createElement("input");
86
+ input.type = "checkbox";
87
+ input.name = "proposals_import[states][]";
88
+ input.value = state.token;
89
+ input.checked = selectedStates.includes(state.token);
90
+ label.appendChild(input);
91
+ label.appendChild(document.createTextNode(` ${state.title}`));
92
+ div.appendChild(label);
93
+ wrapper.appendChild(div);
94
+ });
95
+
96
+ container.innerHTML = "";
97
+ container.appendChild(wrapper);
98
+ container.style.display = "block";
99
+ }).catch(() => {
100
+ container.innerHTML = "";
101
+ container.style.display = "none";
102
+ });
103
+ }
104
+ }
105
+
106
+ ImportProposalsController.targets = ["select", "container"]
107
+ ImportProposalsController.values = {
108
+ statesUrl: String,
109
+ selectedStates: { type: Array, default: [] }
110
+ }
@@ -0,0 +1,5 @@
1
+ import { Application } from "@hotwired/stimulus"
2
+ import ImportProposalsController from "src/decidim/proposals/admin/controllers/import_proposals/controller.js"
3
+
4
+ const application = Application.start()
5
+ application.register("import-proposals", ImportProposalsController)
@@ -1,4 +1,5 @@
1
1
  <% add_decidim_page_title(t(".title")) %>
2
+ <%= append_javascript_pack_tag "decidim_proposals_admin" %>
2
3
  <div class="item_show__header">
3
4
  <h1 class="item_show__header-title">
4
5
  <%= t(".title") %>
@@ -7,25 +8,21 @@
7
8
 
8
9
  <div class="item__edit item__edit-1col">
9
10
  <div class="item__edit-form">
10
- <%= decidim_form_for(@form, url: proposals_import_path, html: { class: "form form-defaults import_proposals" }) do |f| %>
11
+ <%= decidim_form_for(@form, url: proposals_import_path, local: true, html: { class: "form form-defaults import_proposals" }) do |f| %>
11
12
  <% if @form.origin_components.any? %>
12
13
  <div class="form__wrapper">
13
14
  <div class="card pt-4">
14
- <div class="card-section">
15
+ <div class="card-section"
16
+ data-controller="import-proposals"
17
+ data-import-proposals-states-url-value="<%= component_states_proposals_import_path %>">
15
18
  <div class="row column">
16
- <%= f.select :origin_component_id, @form.origin_components_collection, prompt: t(".select_component") %>
19
+ <%= f.select :origin_component_id, @form.origin_components_collection, { prompt: t(".select_component") }, { data: { import_proposals_target: "select", action: "change->import-proposals#onSelectChange" } } %>
17
20
  </div>
18
21
  <div class="row column">
19
22
  <label class="ml-4"><%= t(".select_states") %></label>
20
- <% if @form.available_states.any? %>
21
- <div class="row column">
22
- <%= f.collection_check_boxes :states, @form.available_states, :token, ->(a) { translated_attribute(a.title) } do |builder| %>
23
- <div>
24
- <%= builder.label { builder.check_box + builder.text } %>
25
- </div>
26
- <% end %>
27
- </div>
28
- <% end %>
23
+ <div id="states-container"
24
+ data-import-proposals-target="container"
25
+ data-import-proposals-selected-states-value="<%= @form.states.to_json %>"></div>
29
26
  </div>
30
27
  <div class="row column">
31
28
  <%= f.check_box :keep_authors %>
@@ -180,6 +180,9 @@ ar:
180
180
  admin:
181
181
  proposal_note_created:
182
182
  email_subject: ترك شخص ملاحظة على الاقتراح %{resource_title}.
183
+ coauthor_invited:
184
+ actions:
185
+ accept: قبول
183
186
  collaborative_draft_access_accepted:
184
187
  email_intro: 'تم قبول %{requester_name} لأن يكون مسجلاً كمساهم في المسودة التعاونية <a href="%{resource_url}">%{resource_title}</a>.'
185
188
  email_outro: لقد تلقيت هذا الإشعار لأنك مساهم مع <a href="%{resource_url}">%{resource_title}</a>.
@@ -431,7 +434,7 @@ ar:
431
434
  all: الكل
432
435
  amendment: تعديلات
433
436
  open: افتح
434
- published: نشرت
437
+ published: تم نشره
435
438
  related_to: متعلق ب
436
439
  search: بحث
437
440
  state: الحالة
@@ -489,7 +492,7 @@ ar:
489
492
  withdraw: سحب المشروع
490
493
  states:
491
494
  open: افتح
492
- published: نشرت
495
+ published: تم نشره
493
496
  withdrawn: سحب
494
497
  update:
495
498
  error: حدثت مشكلة في حفظ المسودة التعاونية.
@@ -592,6 +595,13 @@ ar:
592
595
  answer: إجابة
593
596
  changes_at_title: تعديل على "%{title}"
594
597
  estimated_cost: التكلفة التقديرية
598
+ hidden_likes_count:
599
+ zero: و %{count} المزيد من الناس
600
+ one: و %{count} شخص آخر
601
+ two: و %{count} المزيد من الناس
602
+ few: و %{count} المزيد من الناس
603
+ many: و %{count} المزيد من الناس
604
+ other: و %{count} المزيد من الناس
595
605
  link_to_collaborative_draft_help_text: هذا الاقتراح هو نتيجة لمشروع تعاوني. مراجعة التاريخ
596
606
  link_to_collaborative_draft_text: انظر المسودة التعاونية
597
607
  link_to_promoted_emendation_help_text: هذا الاقتراح عبارة عن تعديل مروج له
@@ -202,6 +202,9 @@ bg:
202
202
  admin:
203
203
  proposal_note_created:
204
204
  email_subject: Някой е направил бележка в предложението %{resource_title}.
205
+ coauthor_invited:
206
+ actions:
207
+ accept: Приеми
205
208
  collaborative_draft_access_accepted:
206
209
  email_intro: '%{requester_name} получи достъп като сътрудник в съвместната чернова <a href="%{resource_url}">%{resource_title}</a>.'
207
210
  email_outro: Получихте известие, защото сте сътрудник в <a href="%{resource_url}">%{resource_title}</a>.
@@ -689,6 +692,9 @@ bg:
689
692
  answer: Отговор
690
693
  changes_at_title: Изменение на „%{title}“
691
694
  estimated_cost: Предвидени разходи
695
+ hidden_likes_count:
696
+ one: и още %{count}
697
+ other: и още %{count} души
692
698
  link_to_collaborative_draft_help_text: Това предложение е резултат от съвместна чернова. Прегледайте хронологията
693
699
  link_to_collaborative_draft_text: Вижте съвместната чернова
694
700
  link_to_promoted_emendation_help_text: Това предложение е допринасяща поправка
@@ -370,9 +370,9 @@ ca-IT:
370
370
  notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
371
371
  follower:
372
372
  email_intro: 'La proposta "%{resource_title}" ha canviat d''estat a "%{state}". Pots llegir la resposta en aquesta pàgina:'
373
- email_outro: Has rebut aquesta notificació perquè estàs seguint "%{resource_title}". Pots deixar de seguir-ho des de l'enllaç anterior.
373
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{resource_title}". Pots deixar de seguir-ho des de l'enllaç anterior.
374
374
  email_subject: Una proposta que segueixes ha canviat el seu estat (%{state})
375
- notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
375
+ notification_title: La proposta <a href="%{resource_path}">%{resource_title}</a> ha canviat el seu estat a "%{state}".
376
376
  proposal_update_taxonomies:
377
377
  email_intro: 'Una administradora ha actualitzat les taxonomies de la teva proposta "%{resource_title}", fes-hi una ullada:'
378
378
  email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
@@ -690,7 +690,7 @@ ca-IT:
690
690
  success: El procés d'importació ha començat. T'avisarem quan hagi finalitzat.
691
691
  new:
692
692
  create: Importa propostes
693
- no_components: No hi ha cap altre component de propostes en aquest espai participatiu des d'on importar-les.
693
+ no_components: No hi ha cap altre component de propostes en aquest espai de participació des d'on importar-les.
694
694
  select_component: Escull un component
695
695
  select_states: Importa només les propostes amb aquests estats. Si no s'ha seleccionat cap estat, s'importaran totes les propostes.
696
696
  title: Importar projectes des d'un altre component
@@ -771,11 +771,11 @@ ca-IT:
771
771
  all: Tots
772
772
  amendment: Esmenes
773
773
  open: Obert
774
- published: Publicat
774
+ published: Publicades
775
775
  related_to: Relacionat amb
776
776
  search: Cerca
777
777
  state: Estat
778
- withdrawn: Retirat
778
+ withdrawn: Retirada
779
779
  filters_small_view:
780
780
  close_modal: Tanca la finestra
781
781
  filter: Filtre
@@ -805,7 +805,7 @@ ca-IT:
805
805
  error: No s'ha pogut completar la teva sol·licitud, si us plau torna-ho a provar més tard.
806
806
  success: La teva sol·licitud de contribució s'ha enviat correctament.
807
807
  collaboration_requests:
808
- accept_request: Accepta
808
+ accept_request: Acceptar
809
809
  reject_request: Rebutja
810
810
  title: Sol·licituds de col·laboració
811
811
  rejected_request:
@@ -827,10 +827,10 @@ ca-IT:
827
827
  withdraw: retira l'esborrany
828
828
  states:
829
829
  open: Obert
830
- published: Publicat
831
- withdrawn: Retirat
830
+ published: Publicades
831
+ withdrawn: Retirada
832
832
  update:
833
- error: S'ha produït un error en desar l'esborrany col·laboratiu.
833
+ error: Hi ha hagut un error en desar l'esborrany col·laboratiu.
834
834
  success: L'esborrany col·laboratiu s'ha actualitzat correctament.
835
835
  wizard_aside:
836
836
  back_from_collaborative_draft: Tornar a l'esborrany col·laboratiu
@@ -982,7 +982,7 @@ ca-IT:
982
982
  edit_proposal: Editar
983
983
  estimated_cost: Cost estimat
984
984
  hidden_likes_count:
985
- one: i %{count} persones més
985
+ one: i %{count} persona més
986
986
  other: i %{count} persones més
987
987
  link_to_collaborative_draft_help_text: Aquesta proposta és el resultat d'un esborrany col·laboratiu. Revisa l'historial
988
988
  link_to_collaborative_draft_text: Veure l'esborrany col·laboratiu
@@ -370,9 +370,9 @@ ca:
370
370
  notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
371
371
  follower:
372
372
  email_intro: 'La proposta "%{resource_title}" ha canviat d''estat a "%{state}". Pots llegir la resposta en aquesta pàgina:'
373
- email_outro: Has rebut aquesta notificació perquè estàs seguint "%{resource_title}". Pots deixar de seguir-ho des de l'enllaç anterior.
373
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{resource_title}". Pots deixar de seguir-ho des de l'enllaç anterior.
374
374
  email_subject: Una proposta que segueixes ha canviat el seu estat (%{state})
375
- notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
375
+ notification_title: La proposta <a href="%{resource_path}">%{resource_title}</a> ha canviat el seu estat a "%{state}".
376
376
  proposal_update_taxonomies:
377
377
  email_intro: 'Una administradora ha actualitzat les taxonomies de la teva proposta "%{resource_title}", fes-hi una ullada:'
378
378
  email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
@@ -690,7 +690,7 @@ ca:
690
690
  success: El procés d'importació ha començat. T'avisarem quan hagi finalitzat.
691
691
  new:
692
692
  create: Importa propostes
693
- no_components: No hi ha cap altre component de propostes en aquest espai participatiu des d'on importar-les.
693
+ no_components: No hi ha cap altre component de propostes en aquest espai de participació des d'on importar-les.
694
694
  select_component: Escull un component
695
695
  select_states: Importa només les propostes amb aquests estats. Si no s'ha seleccionat cap estat, s'importaran totes les propostes.
696
696
  title: Importar projectes des d'un altre component
@@ -771,11 +771,11 @@ ca:
771
771
  all: Tots
772
772
  amendment: Esmenes
773
773
  open: Obert
774
- published: Publicat
774
+ published: Publicades
775
775
  related_to: Relacionat amb
776
776
  search: Cerca
777
777
  state: Estat
778
- withdrawn: Retirat
778
+ withdrawn: Retirada
779
779
  filters_small_view:
780
780
  close_modal: Tanca la finestra
781
781
  filter: Filtre
@@ -805,7 +805,7 @@ ca:
805
805
  error: No s'ha pogut completar la teva sol·licitud, si us plau torna-ho a provar més tard.
806
806
  success: La teva sol·licitud de contribució s'ha enviat correctament.
807
807
  collaboration_requests:
808
- accept_request: Accepta
808
+ accept_request: Acceptar
809
809
  reject_request: Rebutja
810
810
  title: Sol·licituds de col·laboració
811
811
  rejected_request:
@@ -827,10 +827,10 @@ ca:
827
827
  withdraw: retira l'esborrany
828
828
  states:
829
829
  open: Obert
830
- published: Publicat
831
- withdrawn: Retirat
830
+ published: Publicades
831
+ withdrawn: Retirada
832
832
  update:
833
- error: S'ha produït un error en desar l'esborrany col·laboratiu.
833
+ error: Hi ha hagut un error en desar l'esborrany col·laboratiu.
834
834
  success: L'esborrany col·laboratiu s'ha actualitzat correctament.
835
835
  wizard_aside:
836
836
  back_from_collaborative_draft: Tornar a l'esborrany col·laboratiu
@@ -982,7 +982,7 @@ ca:
982
982
  edit_proposal: Editar
983
983
  estimated_cost: Cost estimat
984
984
  hidden_likes_count:
985
- one: i %{count} persones més
985
+ one: i %{count} persona més
986
986
  other: i %{count} persones més
987
987
  link_to_collaborative_draft_help_text: Aquesta proposta és el resultat d'un esborrany col·laboratiu. Revisa l'historial
988
988
  link_to_collaborative_draft_text: Veure l'esborrany col·laboratiu
@@ -94,6 +94,7 @@ cs:
94
94
  decidim:
95
95
  proposals:
96
96
  proposal:
97
+ budget_text: Návrh <span class="resource-link">%{link} byl vytvořen</span>
97
98
  import_from_proposal_text: 'Stal se z něj tento návrh: %{link}'
98
99
  merge_from_proposal_text: 'Stal se z něj tento návrh: %{link}'
99
100
  merge_to_proposal_text: 'Tento návrh byl vytvořen: %{link}'
@@ -807,7 +808,7 @@ cs:
807
808
  error: Vaše žádost nebyla dokončena, zkuste to znovu později.
808
809
  success: Vaše žádost o spolupráci byla úspěšně odeslána.
809
810
  collaboration_requests:
810
- accept_request: Akceptovat
811
+ accept_request: Přijmout
811
812
  reject_request: Odmítnout
812
813
  title: Žádosti o spolupráci
813
814
  rejected_request:
@@ -834,7 +835,7 @@ cs:
834
835
  published: Publikováno
835
836
  withdrawn: Staženo
836
837
  update:
837
- error: Při ukládání schématu spolupráce došlo k chybám.
838
+ error: Při ukládání konceptu návrhu došlo k chybám.
838
839
  success: Protokol o spolupráci byl úspěšně aktualizován.
839
840
  wizard_aside:
840
841
  back_from_collaborative_draft: Zpět na koncepty spolupráce
@@ -988,6 +989,11 @@ cs:
988
989
  changes_at_title: Pozměňovací návrh k "%{title}"
989
990
  edit_proposal: Upravit
990
991
  estimated_cost: Odhadované náklady
992
+ hidden_likes_count:
993
+ one: a %{count} další osoba
994
+ few: a %{count} dalších lidí
995
+ many: a %{count} dalších lidí
996
+ other: a %{count} dalších lidí
991
997
  link_to_collaborative_draft_help_text: Tento návrh je výsledkem společného návrhu. Zkontrolujte historii
992
998
  link_to_collaborative_draft_text: Viz schéma spolupráce
993
999
  link_to_promoted_emendation_help_text: Tento návrh je podporované vylepšení
@@ -767,8 +767,8 @@ de:
767
767
  amendment: Änderungsanträge
768
768
  open: Offen
769
769
  published: Veröffentlicht
770
- related_to: In Zusammenhang mit
771
- search: Suchen
770
+ related_to: Bezüglich
771
+ search: Suche
772
772
  state: Status
773
773
  withdrawn: Zurückgezogen
774
774
  filters_small_view:
@@ -825,7 +825,7 @@ de:
825
825
  published: Veröffentlicht
826
826
  withdrawn: Zurückgezogen
827
827
  update:
828
- error: Beim Speichern des gemeinsamen Entwurfs sind Fehler aufgetreten.
828
+ error: Beim Speichern des Vorschlagsentwurfs ist ein Fehler aufgetreten.
829
829
  success: Collaborative Draft wurde erfolgreich aktualisiert.
830
830
  wizard_aside:
831
831
  back_from_collaborative_draft: Zurück zu gemeinschaftlichen Entwürfen
@@ -169,6 +169,9 @@ el:
169
169
  admin:
170
170
  proposal_note_created:
171
171
  email_subject: Κάποιος άφησε μια σημείωση στην πρόταση %{resource_title}.
172
+ coauthor_invited:
173
+ actions:
174
+ accept: Αποδοχή
172
175
  collaborative_draft_access_accepted:
173
176
  email_intro: '%{requester_name} έχει γίνει δεκτή η πρόσβαση ως συνεισφέρων του <a href="%{resource_url}">%{resource_title}</a> συνεργατικού σχεδίου.'
174
177
  email_outro: Έχετε λάβει αυτήν την ειδοποίηση επειδή είστε συνεργάτης του <a href="%{resource_url}">%{resource_title}</a>.
@@ -582,6 +585,9 @@ el:
582
585
  answer: Απάντηση
583
586
  changes_at_title: Τροποποίηση σε «%{title}»
584
587
  estimated_cost: Εκτιμώμενο κόστος
588
+ hidden_likes_count:
589
+ one: και %{count} ακόμη άτομο
590
+ other: και %{count} ακόμη άτομα
585
591
  link_to_collaborative_draft_help_text: Αυτή η πρόταση είναι το αποτέλεσμα ενός προσχεδίου συνεργασίας. Δείτε το ιστορικό
586
592
  link_to_collaborative_draft_text: Δείτε το προσχέδιο συνεργασίας
587
593
  link_to_promoted_emendation_help_text: Αυτή η πρόταση είναι μια αναβαθμισμένη διόρθωση
@@ -191,7 +191,7 @@ es-MX:
191
191
  random: Aleatorio
192
192
  recent: Recientes
193
193
  with_more_authors: Con más autoras
194
- define_taxonomy_filters: Por favor, define algunos filtros para este espacio participativo antes de utilizar esta configuración.
194
+ define_taxonomy_filters: Por favor, define algunos filtros para este espacio de participación antes de utilizar esta configuración.
195
195
  edit_time: Las autoras pueden editar las propuestas antes de que pase este tiempo
196
196
  edit_time_units:
197
197
  days: Días
@@ -762,20 +762,20 @@ es-MX:
762
762
  success: Borrador colaborativo creado con éxito.
763
763
  edit:
764
764
  attachment_legend: Añadir un documento o una imagen
765
- back: Volver
765
+ back: Atrás
766
766
  send: Enviar
767
767
  title: Editar borrador colaborativo
768
768
  empty: Todavía no hay borradores colaborativos
769
769
  empty_filters: No hay ningún borrador colaborativo con este criterio
770
770
  filters:
771
- all: Todas
771
+ all: Todos
772
772
  amendment: Enmiendas
773
773
  open: Abierto
774
- published: Publicado
775
- related_to: Relacionado con
774
+ published: Publicadas
775
+ related_to: Relacionadas con
776
776
  search: Buscar
777
777
  state: Estado
778
- withdrawn: Retirado
778
+ withdrawn: Retirada
779
779
  filters_small_view:
780
780
  close_modal: Cerrar modal
781
781
  filter: Filtrar
@@ -827,10 +827,10 @@ es-MX:
827
827
  withdraw: retirar el borrador
828
828
  states:
829
829
  open: Abierto
830
- published: Publicado
831
- withdrawn: Retirado
830
+ published: Publicadas
831
+ withdrawn: Retirada
832
832
  update:
833
- error: Ha habido errores al guardar el borrador colaborativo.
833
+ error: Ha habido errores al guardar el borrador de la propuesta.
834
834
  success: Borrador colaborativo actualizado con éxito.
835
835
  wizard_aside:
836
836
  back_from_collaborative_draft: Volver al borrador colaborativo