decidim-proposals 0.29.2 → 0.29.4
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/models/decidim/proposals/proposal_state.rb +1 -1
- 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 -10
- data/config/locales/bg.yml +1 -9
- data/config/locales/bs-BA.yml +0 -6
- data/config/locales/ca-IT.yml +945 -0
- data/config/locales/ca.yml +22 -7
- data/config/locales/cs.yml +14 -8
- data/config/locales/de.yml +21 -9
- data/config/locales/el.yml +2 -7
- 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 +98 -83
- data/config/locales/fi-plain.yml +19 -7
- data/config/locales/fi.yml +19 -7
- data/config/locales/fr-CA.yml +17 -8
- data/config/locales/fr.yml +16 -7
- data/config/locales/ga-IE.yml +2 -1
- data/config/locales/gl.yml +2 -3
- data/config/locales/hu.yml +3 -10
- data/config/locales/id-ID.yml +3 -1
- data/config/locales/is-IS.yml +5 -0
- data/config/locales/it.yml +24 -6
- data/config/locales/ja.yml +19 -5
- data/config/locales/lt.yml +2 -10
- data/config/locales/lv.yml +2 -6
- data/config/locales/nl.yml +6 -9
- data/config/locales/no.yml +2 -5
- data/config/locales/pl.yml +2 -12
- data/config/locales/pt-BR.yml +0 -6
- data/config/locales/pt.yml +2 -5
- data/config/locales/ro-RO.yml +18 -6
- data/config/locales/ru.yml +5 -0
- data/config/locales/sk.yml +5 -10
- data/config/locales/sr-CS.yml +0 -6
- data/config/locales/sv.yml +11 -7
- data/config/locales/tr-TR.yml +3 -6
- data/config/locales/uk.yml +5 -0
- data/config/locales/zh-CN.yml +2 -4
- data/config/locales/zh-TW.yml +2 -6
- 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: 8f083ea9482b31e176975e170eafea966d8bbac7e84a54a0208e13a3e0206678
|
4
|
+
data.tar.gz: 8586468ff6a8b6054710736fedc2c011e698272034d4207c70f2d0d55fe24278
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd1334cc67b7b48abfde38396c4320496ce59f7edea987ddc67f26762585ebb043f4387f3ecbdb6ae4a76b30a85f41908624dcf92dc193c34a7faa4df30d28fa
|
7
|
+
data.tar.gz: be5c0c87019f16e7691ba3f1a8023f1b34bc7e53e7faf13650ab553ef7165a52c20f27254743af1677b2f47b9c92597ce04691d196fe334ecde2cfe3b332b6e3
|
@@ -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
|
@@ -38,7 +38,7 @@ module Decidim
|
|
38
38
|
protected
|
39
39
|
|
40
40
|
def generate_token
|
41
|
-
self.token = ensure_unique_token(translated_attribute(title).parameterize(separator: "_"))
|
41
|
+
self.token = ensure_unique_token(token.presence || translated_attribute(title).parameterize(separator: "_"))
|
42
42
|
end
|
43
43
|
|
44
44
|
def ensure_unique_token(token)
|
@@ -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:
|
@@ -448,13 +453,6 @@ ar:
|
|
448
453
|
documents: المستندات
|
449
454
|
endorsements_count: عد أصوات التأييدات
|
450
455
|
endorsers: المؤيدون
|
451
|
-
n_more_endorsers:
|
452
|
-
zero: و%{count} آخرين
|
453
|
-
one: وواحد آخر
|
454
|
-
two: و%{count} آخرين
|
455
|
-
few: و%{count} آخرين
|
456
|
-
many: و%{count} آخرين
|
457
|
-
other: و%{count} آخرين
|
458
456
|
photos: الصور
|
459
457
|
ranking: "%{ranking} مِن %{total}"
|
460
458
|
related_meetings: ملتقيات ذات صلة
|
@@ -685,7 +683,6 @@ ar:
|
|
685
683
|
text_banner: أنت تتطلع على قائمة الاقتراحات المسحوبة من قبل مؤلفيها. %{go_back_link}.
|
686
684
|
new:
|
687
685
|
send: استمر
|
688
|
-
title: إنشاء اقتراحك
|
689
686
|
orders:
|
690
687
|
label: 'ترتيب المقترحات حسب:'
|
691
688
|
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:
|
@@ -546,9 +543,6 @@ bg:
|
|
546
543
|
endorsements_count: Брой препоръки
|
547
544
|
endorsers: Препоръчали
|
548
545
|
link: Виж предложението
|
549
|
-
n_more_endorsers:
|
550
|
-
one: и още 1
|
551
|
-
other: и още %{count}
|
552
546
|
photos: Снимки
|
553
547
|
ranking: "%{ranking} от %{total}"
|
554
548
|
related_meetings: Свързани срещи
|
@@ -569,7 +563,6 @@ bg:
|
|
569
563
|
proposals_imports:
|
570
564
|
create:
|
571
565
|
invalid: Възникна проблем при импортирането на предложенията.
|
572
|
-
success: "%{number} предложения бяха импортирани успешно."
|
573
566
|
new:
|
574
567
|
create: Импортиране на предложения
|
575
568
|
no_components: Няма други компоненти на предложения в това пространство за участие, от които да се импортират предложенията.
|
@@ -808,7 +801,6 @@ bg:
|
|
808
801
|
text_banner: Разглеждате списъка с предложения, оттеглени от своите автори. %{go_back_link}.
|
809
802
|
new:
|
810
803
|
send: Продължи
|
811
|
-
title: Създайте Ваше предложение
|
812
804
|
orders:
|
813
805
|
label: 'Подреждане на предложенията по:'
|
814
806
|
most_commented: Най-коментирани
|
@@ -841,7 +833,7 @@ bg:
|
|
841
833
|
edit_proposal: Редактиране на предложение
|
842
834
|
estimated_cost: Предвидени разходи
|
843
835
|
hidden_endorsers_count:
|
844
|
-
one: и още %{count}
|
836
|
+
one: и още %{count}
|
845
837
|
other: и още %{count} души
|
846
838
|
link_to_collaborative_draft_help_text: Това предложение е резултат от съвместна чернова. Прегледайте хронологията
|
847
839
|
link_to_collaborative_draft_text: Вижте съвместната чернова
|
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
|
@@ -64,10 +62,6 @@ bs:
|
|
64
62
|
documents: Dokumenti
|
65
63
|
endorsements_count: Broj podržavanja
|
66
64
|
endorsers: Podržavaoci
|
67
|
-
n_more_endorsers:
|
68
|
-
one: i još 1
|
69
|
-
few: i još %{count}
|
70
|
-
other: i još %{count}
|
71
65
|
photos: Slike
|
72
66
|
ranking: "%{ranking} od %{total}"
|
73
67
|
related_meetings: Slični sastanci
|