decidim-proposals 0.29.2 → 0.29.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.
- checksums.yaml +4 -4
- data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +0 -12
- data/app/commands/decidim/proposals/admin/import_proposals.rb +7 -65
- data/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +7 -0
- data/app/controllers/decidim/proposals/admin/proposals_imports_controller.rb +2 -2
- data/app/controllers/decidim/proposals/versions_controller.rb +1 -1
- data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +0 -15
- data/app/helpers/decidim/proposals/application_helper.rb +1 -0
- data/app/helpers/decidim/proposals/proposals_helper.rb +1 -3
- data/app/jobs/decidim/proposals/admin/import_proposals_job.rb +91 -0
- data/app/mailers/decidim/proposals/admin/import_proposals_mailer.rb +30 -0
- data/app/models/decidim/proposals/collaborative_draft.rb +2 -3
- data/app/models/decidim/proposals/proposal.rb +0 -5
- data/app/services/decidim/proposals/proposal_builder.rb +1 -0
- data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_failure.html.erb +1 -0
- data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_success.html.erb +2 -0
- data/app/views/decidim/proposals/admin/proposals/_form.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/show.html.erb +4 -4
- data/app/views/decidim/proposals/proposals/_proposals.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/index.html.erb +8 -1
- data/config/locales/ar.yml +7 -3
- data/config/locales/bg.yml +0 -5
- data/config/locales/bs-BA.yml +0 -2
- data/config/locales/ca-IT.yml +945 -0
- data/config/locales/ca.yml +22 -7
- data/config/locales/cs.yml +14 -3
- data/config/locales/de.yml +20 -5
- data/config/locales/el.yml +2 -4
- data/config/locales/en.yml +18 -3
- data/config/locales/es-MX.yml +21 -6
- data/config/locales/es-PY.yml +21 -6
- data/config/locales/es.yml +24 -9
- data/config/locales/eu.yml +94 -79
- data/config/locales/fi-plain.yml +18 -3
- data/config/locales/fi.yml +18 -3
- data/config/locales/fr-CA.yml +16 -4
- data/config/locales/fr.yml +16 -4
- data/config/locales/ga-IE.yml +2 -1
- data/config/locales/gl.yml +2 -0
- data/config/locales/hu.yml +2 -6
- data/config/locales/id-ID.yml +3 -1
- data/config/locales/is-IS.yml +5 -0
- data/config/locales/it.yml +24 -3
- data/config/locales/ja.yml +19 -3
- data/config/locales/lt.yml +2 -5
- data/config/locales/lv.yml +2 -2
- data/config/locales/nl.yml +4 -4
- data/config/locales/no.yml +2 -2
- data/config/locales/pl.yml +0 -5
- data/config/locales/pt-BR.yml +0 -3
- data/config/locales/pt.yml +2 -2
- data/config/locales/ro-RO.yml +18 -2
- data/config/locales/ru.yml +5 -0
- data/config/locales/sk.yml +2 -2
- data/config/locales/sr-CS.yml +0 -2
- data/config/locales/sv.yml +7 -5
- data/config/locales/tr-TR.yml +2 -2
- data/config/locales/uk.yml +5 -0
- data/config/locales/zh-CN.yml +2 -2
- data/config/locales/zh-TW.yml +2 -4
- data/lib/decidim/proposals/version.rb +1 -1
- data/lib/tasks/proposals/upgrade/decidim_proposals_upgrade_tasks.rake +22 -0
- metadata +25 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f68f4460c5148fc90b2ff8d92c25b7c1c5afae4347c4ce8bdcdfe2eec7e533cb
|
4
|
+
data.tar.gz: 06c7f3d44d8534c22b816d9ba8e216d1fa854337ada6158056a06bcb70a46598
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e10e7ef879ce34a18a5b9e101ca6fef2cc8d4c7434b6f0599fa1d5cf830e34e00fbd8fd9cb571b280e2c2113fc375f8233d6bfa4b32fea9c864958c0ab62c342
|
7
|
+
data.tar.gz: 5363d5e2789296bb4f969919776c406a2ede64f6e1651a27c56c9fab3b55c82e35f00b60c4a8c564f5192ce7b4d03a581f557b217c2185810c37f237e961d740
|
@@ -10,18 +10,6 @@
|
|
10
10
|
<% end %>
|
11
11
|
<% end %>
|
12
12
|
</div>
|
13
|
-
|
14
|
-
<div class="flex items-center justify-between space-x-6">
|
15
|
-
<span class="content-block__span flex-shrink-0">
|
16
|
-
<%= t("decidim.participatory_spaces.highlighted_proposals.last") %>
|
17
|
-
</span>
|
18
|
-
<% if single_component? %>
|
19
|
-
<%= link_to decidim_proposals.new_proposal_path, class: "button button__xs md:button__lg button__secondary" do %>
|
20
|
-
<span class="text-center"><%= t("decidim.proposals.actions.new") %></span>
|
21
|
-
<%= icon "add-line" %>
|
22
|
-
<% end %>
|
23
|
-
<% end %>
|
24
|
-
</div>
|
25
13
|
<div class="flex items-start justify-between">
|
26
14
|
<div class="grow space-y-6">
|
27
15
|
<% proposals_to_render.each do |p| %>
|
@@ -22,7 +22,8 @@ module Decidim
|
|
22
22
|
def call
|
23
23
|
return broadcast(:invalid) unless form.valid?
|
24
24
|
|
25
|
-
|
25
|
+
import_proposals
|
26
|
+
broadcast(:ok)
|
26
27
|
end
|
27
28
|
|
28
29
|
private
|
@@ -30,70 +31,11 @@ module Decidim
|
|
30
31
|
attr_reader :form
|
31
32
|
|
32
33
|
def import_proposals
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
author: proposal_author,
|
39
|
-
action_user: form.current_user,
|
40
|
-
extra_attributes: {
|
41
|
-
"component" => target_component
|
42
|
-
}.merge(proposal_answer_attributes(original_proposal))
|
43
|
-
)
|
44
|
-
end.compact
|
45
|
-
end
|
46
|
-
|
47
|
-
def proposals
|
48
|
-
@proposals = Decidim::Proposals::Proposal
|
49
|
-
.where(component: origin_component)
|
50
|
-
@proposals = @proposals.where(scope: proposal_scopes) unless proposal_scopes.empty?
|
51
|
-
|
52
|
-
@proposals = if @form.states.include?("not_answered")
|
53
|
-
@proposals.not_answered.or(@proposals.where(id: @proposals.only_status(@form.states).pluck(:id)))
|
54
|
-
else
|
55
|
-
@proposals.only_status(@form.states)
|
56
|
-
end
|
57
|
-
|
58
|
-
@proposals
|
59
|
-
end
|
60
|
-
|
61
|
-
def proposal_scopes
|
62
|
-
@form.scopes
|
63
|
-
end
|
64
|
-
|
65
|
-
def origin_component
|
66
|
-
@form.origin_component
|
67
|
-
end
|
68
|
-
|
69
|
-
def target_component
|
70
|
-
@form.current_component
|
71
|
-
end
|
72
|
-
|
73
|
-
def proposal_already_copied?(original_proposal, target_component)
|
74
|
-
# Note: we are including also proposals from unpublished components
|
75
|
-
# because otherwise duplicates could be created until the component is
|
76
|
-
# published.
|
77
|
-
original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
|
78
|
-
proposal.component == target_component
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def proposal_author
|
83
|
-
form.keep_authors ? nil : @form.current_organization
|
84
|
-
end
|
85
|
-
|
86
|
-
def proposal_answer_attributes(original_proposal)
|
87
|
-
return {} unless form.keep_answers
|
88
|
-
|
89
|
-
state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.state).first
|
90
|
-
|
91
|
-
{
|
92
|
-
answer: original_proposal.answer,
|
93
|
-
answered_at: original_proposal.answered_at,
|
94
|
-
proposal_state: state,
|
95
|
-
state_published_at: original_proposal.state_published_at
|
96
|
-
}
|
34
|
+
ImportProposalsJob.perform_later(form.as_json.merge({
|
35
|
+
"current_user_id" => form.current_user.id,
|
36
|
+
"current_organization_id" => form.current_organization.id,
|
37
|
+
"current_component_id" => form.current_component.id
|
38
|
+
}))
|
97
39
|
end
|
98
40
|
end
|
99
41
|
end
|
@@ -5,6 +5,9 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# This controller allows admins to answer proposals in a participatory process.
|
7
7
|
class ProposalAnswersController < Admin::ApplicationController
|
8
|
+
include ActionView::Helpers::SanitizeHelper
|
9
|
+
include Decidim::Proposals::Admin::Filterable
|
10
|
+
|
8
11
|
helper_method :proposal
|
9
12
|
|
10
13
|
helper Proposals::ApplicationHelper
|
@@ -44,6 +47,10 @@ module Decidim
|
|
44
47
|
def proposal
|
45
48
|
@proposal ||= Proposal.where(component: current_component).find(params[:id])
|
46
49
|
end
|
50
|
+
|
51
|
+
def collection
|
52
|
+
@collection ||= Proposal.where(component: current_component).not_hidden.published
|
53
|
+
end
|
47
54
|
end
|
48
55
|
end
|
49
56
|
end
|
@@ -16,8 +16,8 @@ module Decidim
|
|
16
16
|
@form = form(Admin::ProposalsImportForm).from_params(params)
|
17
17
|
|
18
18
|
Admin::ImportProposals.call(@form) do
|
19
|
-
on(:ok) do
|
20
|
-
flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin"
|
19
|
+
on(:ok) do
|
20
|
+
flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin")
|
21
21
|
redirect_to EngineRouter.admin_proxy(current_component).root_path
|
22
22
|
end
|
23
23
|
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
def versioned_resource
|
12
12
|
@versioned_resource ||=
|
13
13
|
if params[:proposal_id]
|
14
|
-
present(Proposal.where(component: current_component).find(params[:proposal_id]))
|
14
|
+
present(Proposal.not_hidden.published.where(component: current_component).find(params[:proposal_id]))
|
15
15
|
else
|
16
16
|
CollaborativeDraft.where(component: current_component).find(params[:collaborative_draft_id])
|
17
17
|
end
|
@@ -15,20 +15,9 @@ module Decidim
|
|
15
15
|
attribute :internal_state, String
|
16
16
|
|
17
17
|
validates :internal_state, presence: true, inclusion: { in: :proposal_states }
|
18
|
-
validates :answer, translatable_presence: true, if: ->(form) { form.state == "rejected" }
|
19
|
-
|
20
|
-
with_options if: :costs_required? do
|
21
|
-
validates :cost, numericality: true, presence: true
|
22
|
-
validates :cost_report, translatable_presence: true
|
23
|
-
validates :execution_period, translatable_presence: true
|
24
|
-
end
|
25
18
|
|
26
19
|
alias state internal_state
|
27
20
|
|
28
|
-
def costs_required?
|
29
|
-
costs_enabled? && state == "accepted"
|
30
|
-
end
|
31
|
-
|
32
21
|
def publish_answer?
|
33
22
|
current_component.current_settings.publish_answers_immediately?
|
34
23
|
end
|
@@ -38,10 +27,6 @@ module Decidim
|
|
38
27
|
def proposal_states
|
39
28
|
Decidim::Proposals::ProposalState.where(component: current_component).pluck(:token).map(&:to_s) + ["not_answered"]
|
40
29
|
end
|
41
|
-
|
42
|
-
def costs_enabled?
|
43
|
-
current_component.current_settings.answers_with_costs?
|
44
|
-
end
|
45
30
|
end
|
46
31
|
end
|
47
32
|
end
|
@@ -12,9 +12,7 @@ module Decidim
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def proposal_has_costs?
|
15
|
-
@proposal.cost.present?
|
16
|
-
translated_attribute(@proposal.cost_report).present? &&
|
17
|
-
translated_attribute(@proposal.execution_period).present?
|
15
|
+
@proposal.cost.present?
|
18
16
|
end
|
19
17
|
|
20
18
|
def toggle_view_mode_link(current_mode, target_mode, title, params)
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
module Admin
|
6
|
+
class ImportProposalsJob < ApplicationJob
|
7
|
+
queue_as :default
|
8
|
+
|
9
|
+
def perform(form)
|
10
|
+
@form = form
|
11
|
+
ActiveRecord::Base.transaction do
|
12
|
+
proposals.map do |original_proposal|
|
13
|
+
next if proposal_already_copied?(original_proposal, target_component)
|
14
|
+
|
15
|
+
Decidim::Proposals::ProposalBuilder.copy(
|
16
|
+
original_proposal,
|
17
|
+
author: proposal_author,
|
18
|
+
action_user: current_user,
|
19
|
+
extra_attributes: {
|
20
|
+
"component" => target_component
|
21
|
+
}.merge(proposal_answer_attributes(original_proposal))
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
ImportProposalsMailer.notify_success(current_user, origin_component, target_component, proposals.count).deliver_later
|
26
|
+
rescue ActiveRecord::RecordNotFound, NoMethodError
|
27
|
+
ImportProposalsMailer.notify_failure(current_user, origin_component, target_component).deliver_later
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def proposals
|
33
|
+
proposals = Decidim::Proposals::Proposal.where(component: origin_component)
|
34
|
+
proposals = proposals.where(scope: proposal_scopes) unless proposal_scopes.empty?
|
35
|
+
|
36
|
+
if @form["states"].include?("not_answered")
|
37
|
+
proposals.not_answered.or(proposals.where(id: proposals.only_status(@form["states"]).pluck(:id)))
|
38
|
+
else
|
39
|
+
proposals.only_status(@form["states"])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def origin_component
|
44
|
+
@origin_component ||= Decidim::Component.find(@form["origin_component_id"])
|
45
|
+
end
|
46
|
+
|
47
|
+
def target_component
|
48
|
+
@target_component ||= Decidim::Component.find(@form["current_component_id"])
|
49
|
+
end
|
50
|
+
|
51
|
+
def current_user
|
52
|
+
@current_user ||= Decidim::User.find(@form["current_user_id"])
|
53
|
+
end
|
54
|
+
|
55
|
+
def current_organization
|
56
|
+
@current_organization ||= Decidim::Organization.find(@form["current_organization_id"])
|
57
|
+
end
|
58
|
+
|
59
|
+
def proposal_already_copied?(original_proposal, target_component)
|
60
|
+
# Note: we are including also proposals from unpublished components
|
61
|
+
# because otherwise duplicates could be created until the component is
|
62
|
+
# published.
|
63
|
+
original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
|
64
|
+
proposal.component == target_component
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def proposal_author
|
69
|
+
@form["keep_authors"] ? nil : current_organization
|
70
|
+
end
|
71
|
+
|
72
|
+
def proposal_scopes
|
73
|
+
@form["scopes"] || []
|
74
|
+
end
|
75
|
+
|
76
|
+
def proposal_answer_attributes(original_proposal)
|
77
|
+
return {} unless @form["keep_answers"]
|
78
|
+
|
79
|
+
state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.proposal_state&.token).first
|
80
|
+
|
81
|
+
{
|
82
|
+
answer: original_proposal.answer,
|
83
|
+
answered_at: original_proposal.answered_at,
|
84
|
+
proposal_state: state,
|
85
|
+
state_published_at: original_proposal.state_published_at
|
86
|
+
}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
module Admin
|
6
|
+
class ImportProposalsMailer < Decidim::ApplicationMailer
|
7
|
+
def notify_success(user, origin_component, target_component, count)
|
8
|
+
@organization = user.organization
|
9
|
+
@origin_component = origin_component
|
10
|
+
@target_component = target_component
|
11
|
+
@count = count
|
12
|
+
|
13
|
+
with_user(user) do
|
14
|
+
mail(to: user.email, subject: t(".subject"))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def notify_failure(user, origin_component, target_component)
|
19
|
+
@organization = user.organization
|
20
|
+
@origin_component = origin_component
|
21
|
+
@target_component = target_component
|
22
|
+
|
23
|
+
with_user(user) do
|
24
|
+
mail(to: user.email, subject: t(".subject"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -45,9 +45,8 @@ module Decidim
|
|
45
45
|
authored_by?(user)
|
46
46
|
end
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
ResourceLocatorPresenter.new(self).url
|
48
|
+
def presenter
|
49
|
+
Decidim::Proposals::CollaborativeDraftPresenter.new(self)
|
51
50
|
end
|
52
51
|
|
53
52
|
# Public: Overrides the `reported_attributes` Reportable concern method.
|
@@ -301,11 +301,6 @@ module Decidim
|
|
301
301
|
state == "evaluating"
|
302
302
|
end
|
303
303
|
|
304
|
-
# Public: Overrides the `reported_content_url` Reportable concern method.
|
305
|
-
def reported_content_url
|
306
|
-
ResourceLocatorPresenter.new(self).url
|
307
|
-
end
|
308
|
-
|
309
304
|
# Returns the presenter for this author, to be used in the views.
|
310
305
|
# Required by ResourceRenderer.
|
311
306
|
def presenter
|
@@ -0,0 +1 @@
|
|
1
|
+
<p><%= t(".body", origin_component_name: translated_attribute(@origin_component.name), target_component_name: translated_attribute(@target_component.name)) %></p>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
</div>
|
21
21
|
<% end %>
|
22
22
|
<% if @form.component_suggested_hashtags.any? %>
|
23
|
-
<div>
|
23
|
+
<div class="row column">
|
24
24
|
<%= form.label :suggested_hashtags %>
|
25
25
|
<div class="hashtags">
|
26
26
|
<%= form.collection_check_boxes :suggested_hashtags, @form.component_suggested_hashtags.map { |hashtag| [hashtag.downcase, "##{hashtag}"] }, :first, :last do |option|
|
@@ -53,20 +53,20 @@
|
|
53
53
|
|
54
54
|
<% presented_endorsers = endorsers_presenters_for(proposal) %>
|
55
55
|
<% if presented_endorsers.any? %>
|
56
|
-
<%= render partial: "endorsers", locals: { presented_endorsers:, proposal: } %>
|
56
|
+
<%= render partial: "decidim/proposals/admin/proposals/endorsers", locals: { presented_endorsers:, proposal: } %>
|
57
57
|
<% end %>
|
58
58
|
|
59
59
|
<% if proposal.documents.any? %>
|
60
|
-
<%= render partial: "documents", locals: { proposal: } %>
|
60
|
+
<%= render partial: "decidim/proposals/admin/proposals/documents", locals: { proposal: } %>
|
61
61
|
<% end %>
|
62
62
|
|
63
63
|
<% if proposal.photos.any? %>
|
64
|
-
<%= render partial: "photos", locals: { proposal: } %>
|
64
|
+
<%= render partial: "decidim/proposals/admin/proposals/photos", locals: { proposal: } %>
|
65
65
|
<% end %>
|
66
66
|
|
67
67
|
<% proposal_meetings = proposal.linked_resources(:meetings, "proposals_from_meeting") %>
|
68
68
|
<% if proposal_meetings.any? %>
|
69
|
-
<%= render partial: "meetings", locals: { proposal_meetings: } %>
|
69
|
+
<%= render partial: "decidim/proposals/admin/proposals/meetings", locals: { proposal_meetings: } %>
|
70
70
|
<% end %>
|
71
71
|
|
72
72
|
<% if allowed_to?(:create, :proposal_note, proposal: proposal) %>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<%= cell("decidim/announcement", params[:filter].present? ? t(".empty_filters") : t(".empty")) %>
|
9
9
|
<% else %>
|
10
10
|
<div class="flex items-center justify-between">
|
11
|
-
<h2 class="h5 md:h3 decorator"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
|
11
|
+
<h2 class="h5 md:h3 decorator" aria-live="polite" aria-atomic="true"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
|
12
12
|
<div class="view-layout__links flex view_mode__links">
|
13
13
|
<%= toggle_view_mode_link(@view_mode, "list", t("list_mode", scope: "decidim.proposals.proposals.index"), params) %>
|
14
14
|
<%= toggle_view_mode_link(@view_mode, "grid", t("grid_mode", scope: "decidim.proposals.proposals.index"), params) %>
|
@@ -1,4 +1,11 @@
|
|
1
|
-
<%
|
1
|
+
<% add_decidim_meta_tags(
|
2
|
+
description: translated_attribute(current_participatory_space.short_description),
|
3
|
+
title: t("decidim.components.pagination.page_title",
|
4
|
+
component_name:,
|
5
|
+
current_page: @proposals.current_page,
|
6
|
+
total_pages: @proposals.total_pages ),
|
7
|
+
url: proposals_url,
|
8
|
+
resource: current_component) %>
|
2
9
|
|
3
10
|
<% append_stylesheet_pack_tag "decidim_proposals", media: "all" %>
|
4
11
|
<% append_javascript_pack_tag "decidim_proposals" %>
|
data/config/locales/ar.yml
CHANGED
@@ -12,6 +12,8 @@ ar:
|
|
12
12
|
state: حالة
|
13
13
|
title: عنوان
|
14
14
|
user_group_id: إنشاء مسودة تعاونية كـ
|
15
|
+
import_participatory_text:
|
16
|
+
document: مستند
|
15
17
|
proposal:
|
16
18
|
address: عنوان
|
17
19
|
answer: إجابة
|
@@ -21,6 +23,8 @@ ar:
|
|
21
23
|
category_id: الفئة
|
22
24
|
decidim_scope_id: النطاق
|
23
25
|
has_address: لديه عنوان
|
26
|
+
latitude: خط العرض
|
27
|
+
longitude: خط الطول
|
24
28
|
scope_id: نطاق
|
25
29
|
state: حالة
|
26
30
|
suggested_hashtags: الهاشتاج المقترحة
|
@@ -33,6 +37,8 @@ ar:
|
|
33
37
|
execution_period: فترة التنفيذ
|
34
38
|
proposals_copy:
|
35
39
|
origin_component_id: مكون لنسخ المقترحات من
|
40
|
+
proposals_file_import:
|
41
|
+
file: ملف
|
36
42
|
proposals_import:
|
37
43
|
import_proposals: مقترحات الاستيراد
|
38
44
|
keep_answers: الاحتفاظ بالحالة والإجابات
|
@@ -312,6 +318,7 @@ ar:
|
|
312
318
|
title: اقتراحات
|
313
319
|
votes:
|
314
320
|
object: أصوات
|
321
|
+
title: الأصوات
|
315
322
|
participatory_spaces:
|
316
323
|
highlighted_proposals:
|
317
324
|
see_all: شاهد الكل
|
@@ -420,7 +427,6 @@ ar:
|
|
420
427
|
index:
|
421
428
|
actions: أفعال
|
422
429
|
assign_to_valuator: أسنِده إلى مُقيِّم
|
423
|
-
assign_to_valuator_button: تعيين
|
424
430
|
cancel: إلغاء
|
425
431
|
change_category: تغيير الفئة
|
426
432
|
change_scope: تغيير النطاق
|
@@ -434,7 +440,6 @@ ar:
|
|
434
440
|
split_button: انشق، مزق
|
435
441
|
title: اقتراحات
|
436
442
|
unassign_from_valuator: إلغاء الإسناد مِن المُقيِّم
|
437
|
-
unassign_from_valuator_button: إلغاء الإسناد
|
438
443
|
update: تحديث
|
439
444
|
update_scope_button: تحديث النطاق
|
440
445
|
new:
|
@@ -685,7 +690,6 @@ ar:
|
|
685
690
|
text_banner: أنت تتطلع على قائمة الاقتراحات المسحوبة من قبل مؤلفيها. %{go_back_link}.
|
686
691
|
new:
|
687
692
|
send: استمر
|
688
|
-
title: إنشاء اقتراحك
|
689
693
|
orders:
|
690
694
|
label: 'ترتيب المقترحات حسب:'
|
691
695
|
most_commented: الأكثر تعليقًا عليها
|
data/config/locales/bg.yml
CHANGED
@@ -374,7 +374,6 @@ bg:
|
|
374
374
|
title: Гласове
|
375
375
|
participatory_spaces:
|
376
376
|
highlighted_proposals:
|
377
|
-
last: Позледни предложения
|
378
377
|
see_all: Виж всички предложения
|
379
378
|
proposals:
|
380
379
|
actions:
|
@@ -512,7 +511,6 @@ bg:
|
|
512
511
|
index:
|
513
512
|
actions: Активности
|
514
513
|
assign_to_valuator: Възлагане на оценител
|
515
|
-
assign_to_valuator_button: Възлагане
|
516
514
|
cancel: Отказ
|
517
515
|
change_category: Промяна на категория
|
518
516
|
change_scope: Промяна на обхвата
|
@@ -528,7 +526,6 @@ bg:
|
|
528
526
|
statuses: Статуси
|
529
527
|
title: Предложения
|
530
528
|
unassign_from_valuator: Отнемане възложеното на оценителя
|
531
|
-
unassign_from_valuator_button: Отнемане на възложеното
|
532
529
|
update: Актуализация
|
533
530
|
update_scope_button: Актуализиране на обхвата
|
534
531
|
new:
|
@@ -569,7 +566,6 @@ bg:
|
|
569
566
|
proposals_imports:
|
570
567
|
create:
|
571
568
|
invalid: Възникна проблем при импортирането на предложенията.
|
572
|
-
success: "%{number} предложения бяха импортирани успешно."
|
573
569
|
new:
|
574
570
|
create: Импортиране на предложения
|
575
571
|
no_components: Няма други компоненти на предложения в това пространство за участие, от които да се импортират предложенията.
|
@@ -808,7 +804,6 @@ bg:
|
|
808
804
|
text_banner: Разглеждате списъка с предложения, оттеглени от своите автори. %{go_back_link}.
|
809
805
|
new:
|
810
806
|
send: Продължи
|
811
|
-
title: Създайте Ваше предложение
|
812
807
|
orders:
|
813
808
|
label: 'Подреждане на предложенията по:'
|
814
809
|
most_commented: Най-коментирани
|
data/config/locales/bs-BA.yml
CHANGED
@@ -51,11 +51,9 @@ bs:
|
|
51
51
|
proposals:
|
52
52
|
index:
|
53
53
|
assign_to_valuator: Dodeli procenjivaču
|
54
|
-
assign_to_valuator_button: Dodeli
|
55
54
|
change_scope: Promeni opseg
|
56
55
|
publish_answers: Objavi odgovore
|
57
56
|
unassign_from_valuator: Oduzmi od procenjivača
|
58
|
-
unassign_from_valuator_button: Od dodeli
|
59
57
|
update_scope_button: Ažuriraj opseg
|
60
58
|
show:
|
61
59
|
amendments_count: Broj izmena
|