decidim-proposals 0.29.1 → 0.29.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +11 -11
- data/app/cells/decidim/proposals/proposal_g_cell.rb +21 -0
- data/app/cells/decidim/proposals/proposal_l_cell.rb +17 -18
- data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +1 -1
- data/app/controllers/decidim/proposals/proposals_controller.rb +4 -8
- data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +3 -3
- data/app/forms/decidim/proposals/admin/proposal_form.rb +1 -1
- data/app/forms/decidim/proposals/admin/proposals_import_form.rb +6 -9
- data/app/forms/decidim/proposals/admin/valuation_assignment_form.rb +4 -1
- data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +1 -1
- data/app/helpers/decidim/proposals/map_helper.rb +1 -1
- data/app/models/decidim/proposals/proposal.rb +2 -6
- data/app/packs/stylesheets/decidim/proposals/proposals.scss +1 -5
- data/app/permissions/decidim/proposals/permissions.rb +4 -3
- data/app/services/decidim/proposals/collaborative_draft_diff_renderer.rb +22 -0
- data/app/services/decidim/proposals/diff_renderer.rb +2 -0
- data/app/services/decidim/proposals/proposal_builder.rb +1 -1
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +2 -2
- data/app/views/decidim/proposals/admin/proposals_imports/new.html.erb +2 -2
- data/app/views/decidim/proposals/proposals/index.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/index.js.erb +12 -0
- data/app/views/decidim/proposals/proposals/show.html.erb +1 -1
- data/config/locales/ar.yml +1 -3
- data/config/locales/bg.yml +5 -7
- data/config/locales/bn-BD.yml +1 -0
- data/config/locales/bs-BA.yml +100 -0
- data/config/locales/ca.yml +5 -5
- data/config/locales/cs.yml +19 -5
- data/config/locales/de.yml +7 -7
- data/config/locales/el.yml +3 -5
- data/config/locales/es-MX.yml +8 -8
- data/config/locales/es-PY.yml +3 -3
- data/config/locales/es.yml +8 -8
- data/config/locales/eu.yml +93 -86
- data/config/locales/fi-plain.yml +7 -7
- data/config/locales/fi.yml +24 -24
- data/config/locales/fr-CA.yml +4 -6
- data/config/locales/fr.yml +3 -5
- data/config/locales/gl.yml +3 -6
- data/config/locales/he-IL.yml +7 -0
- data/config/locales/hu.yml +2 -3
- data/config/locales/id-ID.yml +9 -4
- data/config/locales/is-IS.yml +0 -7
- data/config/locales/it.yml +7 -8
- data/config/locales/ja.yml +3 -5
- data/config/locales/lt.yml +1 -3
- data/config/locales/lv.yml +5 -2
- data/config/locales/nl.yml +7 -5
- data/config/locales/no.yml +1 -4
- data/config/locales/pl.yml +2 -4
- data/config/locales/pt-BR.yml +3 -5
- data/config/locales/pt.yml +2 -4
- data/config/locales/ro-RO.yml +7 -9
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +6 -3
- data/config/locales/sl.yml +0 -4
- data/config/locales/sv.yml +5 -4
- data/config/locales/tr-TR.yml +5 -7
- data/config/locales/uk.yml +1 -8
- data/config/locales/zh-CN.yml +1 -3
- data/config/locales/zh-TW.yml +3 -5
- data/db/migrate/20240110203504_create_default_proposal_states.rb +3 -2
- data/decidim-proposals.gemspec +1 -1
- data/lib/decidim/api/proposal_type.rb +13 -0
- data/lib/decidim/api/proposals_type.rb +1 -3
- data/lib/decidim/proposals/proposal_serializer.rb +7 -4
- data/lib/decidim/proposals/test/factories.rb +6 -5
- data/lib/decidim/proposals/version.rb +1 -1
- metadata +24 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f0a793e0fdf54677810a839a8e177a8d3077aee2e25ff1618751d76f03f6401
|
4
|
+
data.tar.gz: 90b7698d7c3560677628165a4ce38c5fdf78b3d1dc5cb00671967a83a9af0d72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd2a28b72d4d22a47f40a4ccbd000421d19c0e014f0788a6888ce36f6665660c5d2d3c862b034280cc4798da73d1137fe4815e773ac48113a89a1baeacee9d2e
|
7
|
+
data.tar.gz: 499ac55e1d39ae1b19c105f69187ef399ee5bb97d110ea7ab6f15cef2aaa08c30456c12dbb45a85ff72041aaf0d38df9fca5b202e895286a7e2731e450eca263
|
@@ -11,21 +11,21 @@
|
|
11
11
|
<% end %>
|
12
12
|
</div>
|
13
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>
|
14
25
|
<div class="flex items-start justify-between">
|
15
26
|
<div class="grow space-y-6">
|
16
|
-
<span class="content-block__span">
|
17
|
-
<%= t("decidim.participatory_spaces.highlighted_proposals.last") %>
|
18
|
-
</span>
|
19
|
-
|
20
27
|
<% proposals_to_render.each do |p| %>
|
21
28
|
<%= card_for p, link_whole_card: true, title_tag: :h3, **options.slice(:show_space) %>
|
22
29
|
<% end %>
|
23
30
|
</div>
|
24
|
-
|
25
|
-
<% if single_component? %>
|
26
|
-
<%= link_to decidim_proposals.new_proposal_path, class: "button button__sm md:button__lg button__secondary" do %>
|
27
|
-
<span><%= t("decidim.proposals.actions.new") %></span>
|
28
|
-
<%= icon "add-line" %>
|
29
|
-
<% end %>
|
30
|
-
<% end %>
|
31
31
|
</div>
|
@@ -34,6 +34,27 @@ module Decidim
|
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
+
def cache_hash
|
38
|
+
@cache_hash ||= begin
|
39
|
+
hash = []
|
40
|
+
hash << I18n.locale.to_s
|
41
|
+
hash << self.class.name.demodulize.underscore
|
42
|
+
hash << model.cache_key_with_version
|
43
|
+
hash << model.proposal_votes_count
|
44
|
+
hash << model.endorsements_count
|
45
|
+
hash << model.comments_count
|
46
|
+
hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
|
47
|
+
hash << Digest::MD5.hexdigest(resource_image_url) if resource_image_url
|
48
|
+
hash << 0 # render space
|
49
|
+
hash << model.follows_count
|
50
|
+
hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
|
51
|
+
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
52
|
+
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
53
|
+
|
54
|
+
hash.join(Decidim.cache_key_separator)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
37
58
|
def classes
|
38
59
|
super.merge(metadata: "card__list-metadata")
|
39
60
|
end
|
@@ -20,25 +20,24 @@ module Decidim
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def cache_hash
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
hash <<
|
34
|
-
hash <<
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
39
|
-
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
23
|
+
@cache_hash ||= begin
|
24
|
+
hash = []
|
25
|
+
hash << I18n.locale.to_s
|
26
|
+
hash << self.class.name.demodulize.underscore
|
27
|
+
hash << model.cache_key_with_version
|
28
|
+
hash << model.proposal_votes_count
|
29
|
+
hash << model.endorsements_count
|
30
|
+
hash << model.comments_count
|
31
|
+
hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
|
32
|
+
hash << Digest::MD5.hexdigest(resource_image_url) if resource_image_url
|
33
|
+
hash << render_space? ? 1 : 0
|
34
|
+
hash << model.follows_count
|
35
|
+
hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
|
36
|
+
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
37
|
+
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
40
38
|
|
41
|
-
|
39
|
+
hash.join(Decidim.cache_key_separator)
|
40
|
+
end
|
42
41
|
end
|
43
42
|
end
|
44
43
|
end
|
@@ -43,13 +43,11 @@ module Decidim
|
|
43
43
|
.order(position: :asc)
|
44
44
|
render "decidim/proposals/proposals/participatory_texts/participatory_text"
|
45
45
|
else
|
46
|
-
@
|
47
|
-
.result
|
48
|
-
.published
|
49
|
-
.not_hidden
|
46
|
+
@proposals = search.result
|
50
47
|
|
51
|
-
@proposals = @
|
52
|
-
@
|
48
|
+
@proposals = reorder(@proposals)
|
49
|
+
@proposals = paginate(@proposals)
|
50
|
+
@proposals = @proposals.includes(:component, :coauthorships, :attachments)
|
53
51
|
|
54
52
|
@voted_proposals = if current_user
|
55
53
|
ProposalVote.where(
|
@@ -59,8 +57,6 @@ module Decidim
|
|
59
57
|
else
|
60
58
|
[]
|
61
59
|
end
|
62
|
-
@proposals = reorder(@proposals)
|
63
|
-
@proposals = paginate(@proposals)
|
64
60
|
end
|
65
61
|
end
|
66
62
|
|
@@ -8,9 +8,9 @@ module Decidim
|
|
8
8
|
include TranslatableAttributes
|
9
9
|
mimic :proposal_answer
|
10
10
|
|
11
|
-
translatable_attribute :answer,
|
12
|
-
translatable_attribute :cost_report,
|
13
|
-
translatable_attribute :execution_period,
|
11
|
+
translatable_attribute :answer, Decidim::Attributes::RichText
|
12
|
+
translatable_attribute :cost_report, Decidim::Attributes::RichText
|
13
|
+
translatable_attribute :execution_period, Decidim::Attributes::RichText
|
14
14
|
attribute :cost, Float
|
15
15
|
attribute :internal_state, String
|
16
16
|
|
@@ -10,7 +10,7 @@ module Decidim
|
|
10
10
|
translatable_attribute :title, String do |field, _locale|
|
11
11
|
validates field, length: { in: 15..150 }, if: proc { |resource| resource.send(field).present? }
|
12
12
|
end
|
13
|
-
translatable_attribute :body,
|
13
|
+
translatable_attribute :body, Decidim::Attributes::RichText
|
14
14
|
|
15
15
|
validates :title, :body, translatable_presence: true
|
16
16
|
|
@@ -6,6 +6,7 @@ module Decidim
|
|
6
6
|
# A form object to be used when admin users want to import a collection of proposals
|
7
7
|
# from another component.
|
8
8
|
class ProposalsImportForm < Decidim::Form
|
9
|
+
include TranslatableAttributes
|
9
10
|
mimic :proposals_import
|
10
11
|
|
11
12
|
attribute :origin_component_id, Integer
|
@@ -19,15 +20,11 @@ module Decidim
|
|
19
20
|
validates :import_proposals, allow_nil: false, acceptance: true
|
20
21
|
validate :valid_states
|
21
22
|
|
22
|
-
VALID_STATES = %w(accepted not_answered evaluating rejected).freeze
|
23
|
-
|
24
23
|
def states_collection
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
)
|
30
|
-
end
|
24
|
+
@states_collection ||= ProposalState.where(component: current_component) + [ProposalState.new(token: "not_answered",
|
25
|
+
title: I18n.t(
|
26
|
+
:not_answered, scope: "decidim.proposals.answers"
|
27
|
+
))]
|
31
28
|
end
|
32
29
|
|
33
30
|
def states
|
@@ -56,7 +53,7 @@ module Decidim
|
|
56
53
|
|
57
54
|
def valid_states
|
58
55
|
return if states.all? do |state|
|
59
|
-
|
56
|
+
states_collection.pluck(:token).include?(state)
|
60
57
|
end
|
61
58
|
|
62
59
|
errors.add(:states, :invalid)
|
@@ -16,7 +16,10 @@ module Decidim
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def valuator_roles
|
19
|
-
@valuator_roles ||= current_component.participatory_space
|
19
|
+
@valuator_roles ||= current_component.participatory_space
|
20
|
+
.user_roles(:valuator)
|
21
|
+
.order_by_name
|
22
|
+
.where(id: valuator_role_ids)
|
20
23
|
end
|
21
24
|
|
22
25
|
def same_participatory_space
|
@@ -10,7 +10,7 @@ module Decidim
|
|
10
10
|
|
11
11
|
# find the valuators for the current space.
|
12
12
|
def find_valuators_for_select(participatory_space, current_user)
|
13
|
-
valuator_roles = participatory_space.user_roles(:valuator)
|
13
|
+
valuator_roles = participatory_space.user_roles(:valuator).order_by_name
|
14
14
|
valuators = Decidim::User.where(id: valuator_roles.pluck(:decidim_user_id)).to_a
|
15
15
|
|
16
16
|
filtered_valuator_roles = valuator_roles.filter do |role|
|
@@ -9,7 +9,7 @@ module Decidim
|
|
9
9
|
#
|
10
10
|
# geocoded_proposals - A collection of geocoded proposals
|
11
11
|
def proposals_data_for_map(geocoded_proposals)
|
12
|
-
geocoded_proposals.map do |proposal|
|
12
|
+
geocoded_proposals.select(&:geocoded_and_valid?).map do |proposal|
|
13
13
|
proposal_data_for_map(proposal)
|
14
14
|
end
|
15
15
|
end
|
@@ -402,12 +402,8 @@ module Decidim
|
|
402
402
|
where(query, value:)
|
403
403
|
end
|
404
404
|
|
405
|
-
def self.ransackable_scopes(
|
406
|
-
|
407
|
-
return base unless auth_object&.admin?
|
408
|
-
|
409
|
-
# Add extra scopes for admins for the admin panel searches
|
410
|
-
base + [:valuator_role_ids_has]
|
405
|
+
def self.ransackable_scopes(_auth_object = nil)
|
406
|
+
[:with_any_origin, :with_any_state, :state_eq, :voted_by, :coauthored_by, :related_to, :with_any_scope, :with_any_category, :valuator_role_ids_has]
|
411
407
|
end
|
412
408
|
|
413
409
|
# Create i18n ransackers for :title and :body.
|
@@ -103,11 +103,7 @@
|
|
103
103
|
}
|
104
104
|
|
105
105
|
&__grid-text-title {
|
106
|
-
@apply flex justify-between flex-row md:flex-col
|
107
|
-
|
108
|
-
.label {
|
109
|
-
@apply md:mt-2;
|
110
|
-
}
|
106
|
+
@apply flex justify-between flex-row md:flex-col items-start lg:flex-row;
|
111
107
|
}
|
112
108
|
|
113
109
|
&__list-metadata {
|
@@ -4,15 +4,16 @@ module Decidim
|
|
4
4
|
module Proposals
|
5
5
|
class Permissions < Decidim::DefaultPermissions
|
6
6
|
def permissions
|
7
|
-
return permission_action unless user
|
8
|
-
|
9
7
|
# Delegate the admin permission checks to the admin permissions class
|
10
8
|
return Decidim::Proposals::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
|
11
9
|
return permission_action if permission_action.scope != :public
|
12
10
|
|
11
|
+
toggle_allow(!proposal.hidden?) if permission_action.subject == :proposal && permission_action.action == :read
|
12
|
+
return permission_action unless user
|
13
|
+
|
13
14
|
case permission_action.subject
|
14
15
|
when :proposal
|
15
|
-
apply_proposal_permissions(permission_action)
|
16
|
+
apply_proposal_permissions(permission_action) unless permission_action.action == :read
|
16
17
|
when :collaborative_draft
|
17
18
|
apply_collaborative_draft_permissions(permission_action)
|
18
19
|
else
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
class CollaborativeDraftDiffRenderer < DiffRenderer
|
6
|
+
private
|
7
|
+
|
8
|
+
def attribute_types
|
9
|
+
{
|
10
|
+
title: :string,
|
11
|
+
body: :string,
|
12
|
+
decidim_category_id: :category,
|
13
|
+
decidim_scope_id: :scope,
|
14
|
+
address: :string,
|
15
|
+
latitude: :string,
|
16
|
+
longitude: :string,
|
17
|
+
decidim_proposals_proposal_state_id: :string
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -21,8 +21,10 @@ module Decidim
|
|
21
21
|
|
22
22
|
# Parses the values before parsing the changeset.
|
23
23
|
def parse_changeset(attribute, values, type, diff)
|
24
|
+
return parse_i18n_changeset(attribute, values, type, diff) if [:i18n, :i18n_html].include?(type)
|
24
25
|
return parse_scope_changeset(attribute, values, type, diff) if type == :scope
|
25
26
|
return parse_state_changeset(attribute, values, type, diff) if type == :state
|
27
|
+
return parse_user_group_changeset(attribute, values, type, diff) if type == :user_group
|
26
28
|
|
27
29
|
values = parse_values(attribute, values)
|
28
30
|
old_value = values[0]
|
@@ -117,7 +117,7 @@ module Decidim
|
|
117
117
|
if attachment.file.attached?
|
118
118
|
new_attachment.file = attachment.file.blob
|
119
119
|
else
|
120
|
-
new_attachment.attached_uploader(:file).remote_url = attachment.attached_uploader(:file).url
|
120
|
+
new_attachment.attached_uploader(:file).remote_url = attachment.attached_uploader(:file).url
|
121
121
|
end
|
122
122
|
|
123
123
|
new_attachment.save!
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<%= check_box_tag "proposals_bulk", "all", false, class: "js-check-all" %>
|
26
26
|
</th>
|
27
27
|
<th class="!text-left">
|
28
|
-
<%= sort_link(query, :
|
28
|
+
<%= sort_link(query, :translated_title, t("models.proposal.fields.title", scope: "decidim.proposals") ) %>
|
29
29
|
</th>
|
30
30
|
<th>
|
31
31
|
<%= sort_link(query, :published_at, t("models.proposal.fields.published_at", scope: "decidim.proposals") ) %>
|
@@ -58,7 +58,7 @@
|
|
58
58
|
</th>
|
59
59
|
|
60
60
|
<th>
|
61
|
-
<%=
|
61
|
+
<%= t("models.proposal.fields.state", scope: "decidim.proposals") %>
|
62
62
|
</th>
|
63
63
|
|
64
64
|
<th><%= t("actions.title", scope: "decidim.proposals") %></th>
|
@@ -17,9 +17,9 @@
|
|
17
17
|
</div>
|
18
18
|
<div class="row column">
|
19
19
|
<%= f.label t(".select_states") %>
|
20
|
-
<%= f.collection_check_boxes :states, @form.states_collection, :
|
20
|
+
<%= f.collection_check_boxes :states, @form.states_collection, :token, :title do |b| %>
|
21
21
|
<div>
|
22
|
-
<%= b.label { b.check_box + b.text } %>
|
22
|
+
<%= b.label { b.check_box + translated_attribute(b.text) } %>
|
23
23
|
</div>
|
24
24
|
<% end %>
|
25
25
|
</div>
|
@@ -31,7 +31,7 @@
|
|
31
31
|
|
32
32
|
<% if Decidim::Map.available?(:geocoding, :dynamic) && component_settings.geocoding_enabled? %>
|
33
33
|
<div class="proposal-list__map">
|
34
|
-
<%= dynamic_map_for proposals_data_for_map(@
|
34
|
+
<%= dynamic_map_for proposals_data_for_map(@proposals) do %>
|
35
35
|
<template id="marker-popup">
|
36
36
|
<div class="space-y-6">
|
37
37
|
<a href="${link}" class="card__list">
|
@@ -3,3 +3,15 @@ var $orderFilterInput = $('.order_filter');
|
|
3
3
|
|
4
4
|
$proposals.html('<%= j(render partial: "proposals").strip.html_safe %>');
|
5
5
|
$orderFilterInput.val('<%= order %>');
|
6
|
+
|
7
|
+
<% if Decidim::Map.available?(:geocoding, :dynamic) && component_settings.geocoding_enabled? %>
|
8
|
+
var $map = $("#map");
|
9
|
+
var controller = $map.data("map-controller");
|
10
|
+
if (controller) {
|
11
|
+
var markerData = JSON.parse('<%= escape_javascript proposals_data_for_map(@proposals).to_json.html_safe %>');
|
12
|
+
controller.clearMarkers();
|
13
|
+
if (markerData.length > 0 ) {
|
14
|
+
controller.addMarkers(markerData);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
<% end %>
|
@@ -77,7 +77,7 @@ extra_admin_link(
|
|
77
77
|
<% end %>
|
78
78
|
|
79
79
|
<% if component_settings.geocoding_enabled? && @proposal.geocoded? %>
|
80
|
-
<div class="static-map__container">
|
80
|
+
<div class="static-map__container py-6">
|
81
81
|
<%= render partial: "decidim/shared/static_map", locals: { icon_name: "proposals", geolocalizable: @proposal } %>
|
82
82
|
</div>
|
83
83
|
<% end %>
|
data/config/locales/ar.yml
CHANGED
@@ -262,12 +262,10 @@ ar:
|
|
262
262
|
email_subject: تمت إضافة اقتراح جديد "%{resource_title}" إلى %{participatory_space_title}
|
263
263
|
proposal_update_category:
|
264
264
|
email_intro: 'قام المشرف بتحديث فئة اقتراحك "%{resource_title}" ، تحقق من ذلك في هذه الصفحة:'
|
265
|
-
email_outro: لقد تلقيت هذا الإشعار لأنك مؤلف الاقتراح.
|
266
265
|
email_subject: تم تحديث فئة %{resource_title} اقتراح
|
267
266
|
notification_title: تم تحديث فئة اقتراح <a href="%{resource_path}">%{resource_title}</a> بواسطة مسؤول.
|
268
267
|
proposal_update_scope:
|
269
268
|
email_intro: 'قام مدير بتحديث نطاق اقتراحك "%{resource_title}" ، يرجى التحقق منه على هذه الصفحة:'
|
270
|
-
email_outro: لقد تلقيت هذا الإشعار لأنك مؤلف الاقتراح.
|
271
269
|
email_subject: تم تحديث نطاق الاقتراح %{resource_title}
|
272
270
|
notification_title: نطاق الاقتراح <a href="%{resource_path}">%{resource_title}</a> تم تحديثه من قبل مدير.
|
273
271
|
voting_enabled:
|
@@ -316,7 +314,7 @@ ar:
|
|
316
314
|
object: أصوات
|
317
315
|
participatory_spaces:
|
318
316
|
highlighted_proposals:
|
319
|
-
see_all: شاهد الكل
|
317
|
+
see_all: شاهد الكل
|
320
318
|
proposals:
|
321
319
|
actions:
|
322
320
|
answer_proposal: الرد على المُقتَرَح
|
data/config/locales/bg.yml
CHANGED
@@ -117,7 +117,7 @@ bg:
|
|
117
117
|
proposal_state_id_eq:
|
118
118
|
label: Състояние
|
119
119
|
scope_id_eq:
|
120
|
-
label:
|
120
|
+
label: Сфера
|
121
121
|
state_eq:
|
122
122
|
label: Състояние
|
123
123
|
values:
|
@@ -142,7 +142,7 @@ bg:
|
|
142
142
|
actions:
|
143
143
|
amend: Промяна
|
144
144
|
comment: Коментар
|
145
|
-
create:
|
145
|
+
create: Създаване
|
146
146
|
endorse: Одобри
|
147
147
|
vote: Глас
|
148
148
|
vote_comment: Оцени коментара
|
@@ -190,7 +190,7 @@ bg:
|
|
190
190
|
proposal_wizard_step_1_help_text: Текст на помощника за стъпка "Създай"
|
191
191
|
proposal_wizard_step_2_help_text: Помощен текст на стъпка "Публикуване" на съветника за предложения
|
192
192
|
resources_permissions_enabled: Позволените действия могат да се задават за всяко предложение
|
193
|
-
scope_id:
|
193
|
+
scope_id: Сфера
|
194
194
|
scopes_enabled: Обхватите са активирани
|
195
195
|
threshold_per_proposal: Праг за предложенията
|
196
196
|
vote_limit: Лимит за гласуване на участник
|
@@ -309,12 +309,10 @@ bg:
|
|
309
309
|
notification_title: Вашето предложение <a href="%{resource_path}">%{resource_title}</a> промени състоянието си на „%{state}“.
|
310
310
|
proposal_update_category:
|
311
311
|
email_intro: 'Администратор актуализира категорията на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
|
312
|
-
email_outro: Получавате това известие, защото сте авторът на предложението.
|
313
312
|
email_subject: Категорията на предложението %{resource_title} беше актуализирана
|
314
313
|
notification_title: Категорията на предложението <a href="%{resource_path}">%{resource_title}</a> беше актуализирана от администратор.
|
315
314
|
proposal_update_scope:
|
316
315
|
email_intro: 'Администратор актуализира обхвата на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
|
317
|
-
email_outro: Получавате това известие, защото сте авторът на предложението.
|
318
316
|
email_subject: Обхватът на предложението %{resource_title} беше актуализиран
|
319
317
|
notification_title: Обхватът на предложението <a href="%{resource_path}">%{resource_title}</a> беше актуализиран от администратор.
|
320
318
|
voting_enabled:
|
@@ -660,7 +658,7 @@ bg:
|
|
660
658
|
open: Отворен
|
661
659
|
published: Публикувано
|
662
660
|
related_to: Свързано с
|
663
|
-
scope:
|
661
|
+
scope: Сфера
|
664
662
|
search: Търсене
|
665
663
|
state: Статус
|
666
664
|
withdrawn: Оттеглено
|
@@ -746,7 +744,7 @@ bg:
|
|
746
744
|
official_proposal: Официално предложение
|
747
745
|
published_answer: Публикуван отговор
|
748
746
|
published_at: Публикувано на
|
749
|
-
scope:
|
747
|
+
scope: Сфера
|
750
748
|
state: Статус
|
751
749
|
title: Заглавие
|
752
750
|
valuator: Оценител
|
@@ -0,0 +1 @@
|
|
1
|
+
bn:
|
@@ -0,0 +1,100 @@
|
|
1
|
+
---
|
2
|
+
bs:
|
3
|
+
activemodel:
|
4
|
+
attributes:
|
5
|
+
valuation_assignment:
|
6
|
+
admin_log:
|
7
|
+
valuator_role_id: Ime procenjivača
|
8
|
+
errors:
|
9
|
+
models:
|
10
|
+
proposal:
|
11
|
+
attributes:
|
12
|
+
body:
|
13
|
+
cant_be_equal_to_template: ne može biti jednak šablonu
|
14
|
+
models:
|
15
|
+
decidim/proposals/admin/update_proposal_scope_event: Predlog opsega izmenjen
|
16
|
+
decidim:
|
17
|
+
admin:
|
18
|
+
filters:
|
19
|
+
proposals:
|
20
|
+
valuator_role_ids_has:
|
21
|
+
label: Dodeljeno procenjivaču
|
22
|
+
search_placeholder:
|
23
|
+
id_string_or_title_cont: Pretraži %{collection} prema identifikacionom broju ili nazivu.
|
24
|
+
components:
|
25
|
+
proposals:
|
26
|
+
settings:
|
27
|
+
global:
|
28
|
+
new_proposal_body_template: Novi predlog šablona glavnog teksta
|
29
|
+
new_proposal_body_template_help: Možete da definišete tekst koji će se pojavljivati pri kreiranju novog predloga
|
30
|
+
step:
|
31
|
+
amendments_visibility: Vidljivost izmena
|
32
|
+
amendments_visibility_choices:
|
33
|
+
all: Izmene su vidljive svima
|
34
|
+
participants: Izmene su vidljive samo svojim autorima
|
35
|
+
answers_with_costs: Omogući troškove za odgovore na predloge
|
36
|
+
publish_answers_immediately: Objavi odgovore na predloge odmah
|
37
|
+
events:
|
38
|
+
proposals:
|
39
|
+
admin:
|
40
|
+
proposal_note_created:
|
41
|
+
email_outro: Dobili ste ovo obaveštenje jer možete da procenite predlog.
|
42
|
+
email_subject: Neko je ostavio poruku na predlogu %{resource_title}.
|
43
|
+
proposal_update_scope:
|
44
|
+
email_intro: 'Administrator je ažurirao opseg vašeg predloga "%{resource_title}", pogledajte na ovoj strani:'
|
45
|
+
email_subject: Opseg predloga %{resource_title} je ažuriran
|
46
|
+
proposals:
|
47
|
+
actions:
|
48
|
+
answer_proposal: Odgovor na predlog
|
49
|
+
show: Prikaži predlog
|
50
|
+
admin:
|
51
|
+
proposals:
|
52
|
+
index:
|
53
|
+
assign_to_valuator: Dodeli procenjivaču
|
54
|
+
assign_to_valuator_button: Dodeli
|
55
|
+
change_scope: Promeni opseg
|
56
|
+
publish_answers: Objavi odgovore
|
57
|
+
unassign_from_valuator: Oduzmi od procenjivača
|
58
|
+
unassign_from_valuator_button: Od dodeli
|
59
|
+
update_scope_button: Ažuriraj opseg
|
60
|
+
show:
|
61
|
+
amendments_count: Broj izmena
|
62
|
+
assigned_valuators: Dodeljeni procenjivači
|
63
|
+
comments_count: Broj komentara
|
64
|
+
documents: Dokumenti
|
65
|
+
endorsements_count: Broj podržavanja
|
66
|
+
endorsers: Podržavaoci
|
67
|
+
n_more_endorsers:
|
68
|
+
one: i još 1
|
69
|
+
few: i još %{count}
|
70
|
+
other: i još %{count}
|
71
|
+
photos: Slike
|
72
|
+
ranking: "%{ranking} od %{total}"
|
73
|
+
related_meetings: Slični sastanci
|
74
|
+
remove_assignment: Ukloni zadatak
|
75
|
+
remove_assignment_confirmation: Da li ste sigurni da želite da uklonite procenjivača sa ovog predloga?
|
76
|
+
valuators: Procenjivači
|
77
|
+
update_category:
|
78
|
+
invalid: 'Ovi predlozi već imaju %{subject_name} kategoriju: %{proposals}.'
|
79
|
+
success: 'Predlozi uspešno dodati u kategoriju %{subject_name}: %{proposals}.'
|
80
|
+
update_scope:
|
81
|
+
invalid: 'Ovi predlozi već imaju %{subject_name} opseg: %{proposals}.'
|
82
|
+
success: 'Predlozi kojima je uspešno dodat opseg %{subject_name}: %{proposals}.'
|
83
|
+
admin_log:
|
84
|
+
proposal:
|
85
|
+
publish_answer: "%{user_name} je objavio odgovor na predlog %{resource_name} u prostoru %{space_name}"
|
86
|
+
valuation_assignment:
|
87
|
+
create: "%{user_name} je dodao predlog %{resource_name} procenjivaču"
|
88
|
+
models:
|
89
|
+
proposal:
|
90
|
+
fields:
|
91
|
+
published_answer: Objavljeni odgovor
|
92
|
+
valuator: Procenjivač
|
93
|
+
valuators: Procenjivači
|
94
|
+
proposals:
|
95
|
+
show:
|
96
|
+
estimated_cost: Procenjen trošak
|
97
|
+
proposals_picker:
|
98
|
+
choose_proposals: Izaberi predloge
|
99
|
+
publish_answers:
|
100
|
+
success: Odgovori na predloge uspešno objavljeni.
|
data/config/locales/ca.yml
CHANGED
@@ -143,7 +143,7 @@ ca:
|
|
143
143
|
actions:
|
144
144
|
amend: Esmena
|
145
145
|
comment: Comentar
|
146
|
-
create:
|
146
|
+
create: Crea
|
147
147
|
endorse: Adherir-se
|
148
148
|
vote: Donar suport
|
149
149
|
vote_comment: Votar el comentari
|
@@ -310,12 +310,12 @@ ca:
|
|
310
310
|
notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
|
311
311
|
proposal_update_category:
|
312
312
|
email_intro: 'Una administradora ha actualitzat la categoria de la teva proposta "%{resource_title}", fes-hi una ullada:'
|
313
|
-
email_outro: Has rebut aquesta notificació perquè
|
313
|
+
email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
|
314
314
|
email_subject: S'ha actualitzat la categoria de la proposta %{resource_title}
|
315
315
|
notification_title: La categoria de la proposta <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzada per una administradora.
|
316
316
|
proposal_update_scope:
|
317
317
|
email_intro: 'Una administradora ha actualitzat l''àmbit de la teva proposta "%{resource_title}", fes-hi una ullada:'
|
318
|
-
email_outro: Has rebut aquesta notificació perquè
|
318
|
+
email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
|
319
319
|
email_subject: S'ha actualitzat l'àmbit de la proposta %{resource_title}
|
320
320
|
notification_title: L'àmbit de la proposta <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzat per una administradora.
|
321
321
|
voting_enabled:
|
@@ -507,7 +507,7 @@ ca:
|
|
507
507
|
title: Actualitza la proposta
|
508
508
|
update: Actualizar
|
509
509
|
form:
|
510
|
-
attachment_legend: "(Opcional)
|
510
|
+
attachment_legend: "(Opcional) Afegeix un fitxer adjunt"
|
511
511
|
created_in_meeting: Aquesta proposta prové d'una trobada
|
512
512
|
delete_attachment: Suprimeix l'adjunt
|
513
513
|
select_a_category: Selecciona una categoria
|
@@ -842,7 +842,7 @@ ca:
|
|
842
842
|
show:
|
843
843
|
answer: Resposta
|
844
844
|
changes_at_title: Esmena a "%{title}"
|
845
|
-
edit_proposal: Edita proposta
|
845
|
+
edit_proposal: Edita la proposta
|
846
846
|
estimated_cost: Cost estimat
|
847
847
|
hidden_endorsers_count:
|
848
848
|
one: i %{count} persona més
|