decidim-accountability 0.8.4 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +5 -5
  2. data/app/assets/stylesheets/decidim/accountability/accountability/_cards.scss +8 -6
  3. data/app/assets/stylesheets/decidim/accountability/accountability/_categories.scss +33 -28
  4. data/app/assets/stylesheets/decidim/accountability/accountability/_lines_breadcrumb.scss +8 -8
  5. data/app/assets/stylesheets/decidim/accountability/accountability/_results.scss +51 -44
  6. data/app/assets/stylesheets/decidim/accountability/accountability/_versions.scss +5 -4
  7. data/app/commands/decidim/accountability/admin/create_result.rb +9 -0
  8. data/app/commands/decidim/accountability/admin/update_result.rb +9 -0
  9. data/app/forms/decidim/accountability/admin/result_form.rb +23 -7
  10. data/app/helpers/decidim/accountability/breadcrumb_helper.rb +1 -3
  11. data/app/services/decidim/accountability/result_search.rb +23 -0
  12. data/app/services/decidim/accountability/results_calculator.rb +9 -9
  13. data/app/views/decidim/accountability/admin/results/_form.html.erb +11 -1
  14. data/app/views/decidim/accountability/admin/results/index.html.erb +1 -1
  15. data/app/views/decidim/accountability/results/_nav_breadcrumb.html.erb +3 -3
  16. data/app/views/decidim/accountability/results/_scope_filters.html.erb +0 -1
  17. data/app/views/decidim/accountability/results/_show_parent.html.erb +0 -1
  18. data/app/views/decidim/accountability/results/_stats.html.erb +5 -1
  19. data/config/locales/ca.yml +3 -2
  20. data/config/locales/en.yml +3 -1
  21. data/config/locales/es.yml +4 -3
  22. data/config/locales/eu.yml +3 -1
  23. data/config/locales/fi.yml +39 -37
  24. data/config/locales/fr.yml +5 -3
  25. data/config/locales/gl.yml +176 -0
  26. data/config/locales/it.yml +3 -1
  27. data/config/locales/nl.yml +3 -1
  28. data/config/locales/pl.yml +3 -1
  29. data/config/locales/pt-BR.yml +176 -0
  30. data/config/locales/pt.yml +5 -3
  31. data/config/locales/ru.yml +20 -1
  32. data/config/locales/sv.yml +176 -0
  33. data/config/locales/uk.yml +11 -3
  34. data/lib/decidim/accountability/feature.rb +4 -0
  35. data/lib/decidim/accountability/version.rb +1 -1
  36. metadata +31 -29
  37. data/app/views/decidim/accountability/admin/shared/_extra.html.erb +0 -1
@@ -25,6 +25,7 @@ module Decidim
25
25
  update_result
26
26
  link_proposals
27
27
  link_meetings
28
+ link_projects
28
29
  end
29
30
 
30
31
  broadcast(:ok)
@@ -54,6 +55,10 @@ module Decidim
54
55
  @proposals ||= result.sibling_scope(:proposals).where(id: form.proposal_ids)
55
56
  end
56
57
 
58
+ def projects
59
+ @projects ||= result.sibling_scope(:projects).where(id: form.project_ids)
60
+ end
61
+
57
62
  def meeting_ids
58
63
  @meeting_ids ||= proposals.flat_map do |proposal|
59
64
  proposal.linked_resources(:meetings, "proposals_from_meeting").pluck(:id)
@@ -68,6 +73,10 @@ module Decidim
68
73
  result.link_resources(proposals, "included_proposals")
69
74
  end
70
75
 
76
+ def link_projects
77
+ result.link_resources(projects, "included_projects")
78
+ end
79
+
71
80
  def link_meetings
72
81
  result.link_resources(meetings, "meetings_through_proposals")
73
82
  end
@@ -14,6 +14,7 @@ module Decidim
14
14
  attribute :decidim_scope_id, Integer
15
15
  attribute :decidim_category_id, Integer
16
16
  attribute :proposal_ids, Array[Integer]
17
+ attribute :project_ids, Array[Integer]
17
18
  attribute :start_date, Date
18
19
  attribute :end_date, Date
19
20
  attribute :progress, Float
@@ -25,37 +26,52 @@ module Decidim
25
26
 
26
27
  validates :scope, presence: true, if: ->(form) { form.decidim_scope_id.present? }
27
28
  validates :category, presence: true, if: ->(form) { form.decidim_category_id.present? }
29
+ validate { errors.add(:decidim_scope_id, :invalid) if current_participatory_space&.scope && !current_participatory_space&.scope&.ancestor_of?(scope) }
28
30
 
29
31
  validates :parent, presence: true, if: ->(form) { form.parent_id.present? }
30
32
  validates :status, presence: true, if: ->(form) { form.decidim_accountability_status_id.present? }
31
33
 
34
+ delegate :categories, to: :current_feature
35
+
32
36
  def map_model(model)
33
37
  self.proposal_ids = model.linked_resources(:proposals, "included_proposals").pluck(:id)
38
+ self.project_ids = model.linked_resources(:projects, "included_projects").pluck(:id)
34
39
  self.decidim_category_id = model.category.try(:id)
35
40
  end
36
41
 
37
42
  def proposals
38
- @proposals ||= Decidim.find_resource_manifest(:proposals).try(:resource_scope, context.current_feature)&.order(title: :asc)&.pluck(:title, :id)
43
+ @proposals ||= Decidim.find_resource_manifest(:proposals).try(:resource_scope, current_feature)&.order(title: :asc)&.pluck(:title, :id)
39
44
  end
40
45
 
41
- def organization_scopes
42
- current_organization.scopes
46
+ def projects
47
+ @projects ||= Decidim.find_resource_manifest(:projects).try(:resource_scope, current_feature)&.order(title: :asc)
48
+ &.select(:title, :id)&.map { |a| [a.title[I18n.locale.to_s], a.id] }
43
49
  end
44
50
 
51
+ # Finds the Scope from the given decidim_scope_id, uses participatory space scope if missing.
52
+ #
53
+ # Returns a Decidim::Scope
45
54
  def scope
46
- @scope ||= organization_scopes.where(id: decidim_scope_id).first
55
+ @scope ||= @decidim_scope_id ? current_feature.scopes.find_by(id: @decidim_scope_id) : current_participatory_space&.scope
56
+ end
57
+
58
+ # Scope identifier
59
+ #
60
+ # Returns the scope identifier related to the result
61
+ def decidim_scope_id
62
+ @decidim_scope_id || scope&.id
47
63
  end
48
64
 
49
65
  def category
50
- @category ||= context.current_feature.categories.where(id: decidim_category_id).first
66
+ @category ||= categories.find_by(id: decidim_category_id)
51
67
  end
52
68
 
53
69
  def parent
54
- @parent ||= Decidim::Accountability::Result.where(feature: current_feature, id: parent_id).first
70
+ @parent ||= Decidim::Accountability::Result.find_by(feature: current_feature, id: parent_id)
55
71
  end
56
72
 
57
73
  def status
58
- @status ||= Decidim::Accountability::Status.where(feature: current_feature, id: decidim_accountability_status_id).first
74
+ @status ||= Decidim::Accountability::Status.find_by(feature: current_feature, id: decidim_accountability_status_id)
59
75
  end
60
76
  end
61
77
  end
@@ -18,9 +18,7 @@ module Decidim
18
18
  end
19
19
 
20
20
  def category
21
- if params[:filter] && params[:filter][:category_id].present?
22
- current_participatory_space.categories.find(params[:filter][:category_id])
23
- end
21
+ current_participatory_space.categories.find(params[:filter][:category_id]) if params[:filter] && params[:filter][:category_id].present?
24
22
  end
25
23
  end
26
24
  end
@@ -13,7 +13,14 @@ module Decidim
13
13
  # methods. (Default {})
14
14
  # * feature - A Decidim::Feature to get the results from.
15
15
  # * organization - A Decidim::Organization object.
16
+ # * parent_id - The parent ID of the result. The value is forced to false to force
17
+ # the filter execution when the value is nil
18
+ # * deep_search - Whether to perform the search on all children levels or just the
19
+ # first one. True by default.
16
20
  def initialize(options = {})
21
+ options = options.dup
22
+ options[:deep_search] = true if options[:deep_search].nil?
23
+ options[:parent_id] = "root" if options[:parent_id].nil?
17
24
  super(Result.all, options)
18
25
  end
19
26
 
@@ -24,8 +31,24 @@ module Decidim
24
31
  .or(query.where(localized_search_text_in(:description), text: "%#{search_text}%"))
25
32
  end
26
33
 
34
+ # Handle parent_id filter
35
+ def search_parent_id
36
+ parent_id = options[:parent_id]
37
+ parent_id = nil if parent_id == "root"
38
+
39
+ if options[:deep_search]
40
+ query.where(parent_id: [parent_id] + children_ids(parent_id))
41
+ else
42
+ query.where(parent_id: parent_id)
43
+ end
44
+ end
45
+
27
46
  private
28
47
 
48
+ def children_ids(parent_id)
49
+ Result.where(parent_id: parent_id).pluck(:id)
50
+ end
51
+
29
52
  # Internal: builds the needed query to search for a text in the organization's
30
53
  # available locales. Note that it is intended to be used as follows:
31
54
  #
@@ -11,15 +11,10 @@ module Decidim
11
11
  @category_id = category_id
12
12
  end
13
13
 
14
- def progress
15
- results.average(:progress)
16
- end
14
+ delegate :count, to: :results
17
15
 
18
- def count
19
- # if there are children return the total number of children results
20
- # if not return the count of results (they are leafs)
21
- children = results.sum(:children_count)
22
- children.positive? ? children : results.count
16
+ def progress
17
+ results.average("COALESCE(progress, 0)")
23
18
  end
24
19
 
25
20
  private
@@ -27,7 +22,12 @@ module Decidim
27
22
  attr_reader :feature, :scope_id, :category_id
28
23
 
29
24
  def results
30
- @results ||= ResultSearch.new(feature: feature, scope_id: scope_id, category_id: category_id, parent_id: nil).results
25
+ @results ||= ResultSearch.new(
26
+ feature: feature,
27
+ scope_id: scope_id,
28
+ category_id: category_id,
29
+ deep_search: false
30
+ ).results
31
31
  end
32
32
  end
33
33
  end
@@ -22,7 +22,7 @@
22
22
 
23
23
  <% if current_participatory_space.has_subscopes? %>
24
24
  <div class="row column">
25
- <%= form.scopes_select :decidim_scope_id, prompt: I18n.t("decidim.scopes.global"), remote_path: decidim.scopes_search_path(root: current_participatory_space.scope) %>
25
+ <%= scopes_picker_field form, :decidim_scope_id %>
26
26
  </div>
27
27
  <% end %>
28
28
 
@@ -62,5 +62,15 @@
62
62
  <% end %>
63
63
  </div>
64
64
 
65
+ <div class="row column">
66
+ <% if @form.projects %>
67
+ <%= form.select :project_ids,
68
+ @form.projects,
69
+ {},
70
+ { multiple: true, class: "chosen-select" }
71
+ %>
72
+ <% end %>
73
+ </div>
74
+
65
75
  </div>
66
76
  </div>
@@ -6,7 +6,7 @@
6
6
  <div class="button--title">
7
7
  <%= link_to t("actions.new", scope: "decidim.accountability", name: t("models.result.name", scope: "decidim.accountability.admin")), new_result_path(parent_id: parent_result), class: 'button tiny button--simple' if can? :manage, current_feature %>
8
8
  <%= render partial: "decidim/accountability/admin/shared/subnav" unless parent_result %>
9
- <%= render partial: "decidim/accountability/admin/shared/extra" %>
9
+ <%= export_dropdown %>
10
10
  </div>
11
11
  </h2>
12
12
  </div>
@@ -5,7 +5,7 @@
5
5
  <% if category.present? && category.parent.present? %>
6
6
  <span class="breadcrumb--separator">></span>
7
7
  <div>
8
- <%= link_to translated_attribute(category.parent.name), results_path(filter: { category_id: category.parent_id }) %>
8
+ <%= link_to translated_attribute(category.parent.name), results_path(filter: { category_id: category.parent_id, scope_id: current_scope }) %>
9
9
  <span class="percentage"><%= display_percentage progress_calculator(current_scope, category.parent_id) %></span>
10
10
  </div>
11
11
  <% end %>
@@ -13,7 +13,7 @@
13
13
  <% if category.present? %>
14
14
  <span class="breadcrumb--separator">></span>
15
15
  <div>
16
- <%= link_to translated_attribute(category.name), results_path(filter: { category_id: category.id }) %>
16
+ <%= link_to translated_attribute(category.name), results_path(filter: { category_id: category.id, scope_id: current_scope }) %>
17
17
  <span class="percentage"><%= display_percentage progress_calculator(current_scope, category.id) %></span>
18
18
  </div>
19
19
  <% end %>
@@ -21,7 +21,7 @@
21
21
  <% if result && result.parent.present? %>
22
22
  <span class="breadcrumb--separator">></span>
23
23
  <div>
24
- <%= link_to translated_attribute(result.parent.title), result_path(result.parent) %>
24
+ <%= link_to translated_attribute(result.parent.title), result_path(result.parent, filter: { scope_id: current_scope }) %>
25
25
  <span class="percentage"><%= display_percentage result.parent.progress %></span>
26
26
  </div>
27
27
  <% end %>
@@ -4,7 +4,6 @@
4
4
 
5
5
  <ul class="tags tags--action">
6
6
  <li <%= active_class_if_current(nil) %>><%= link_to t("results.filters.all", scope: "decidim.accountability"), url_for(filter: { category_id: category.try(:id) }) %></li>
7
- <li <%= active_class_if_current("global") %>><%= link_to t("results.filters.global", scope: "decidim.accountability"), url_for(filter: { scope_id: "global", category_id: category.try(:id) }) %></li>
8
7
 
9
8
  <% current_participatory_space.subscopes.each do |scope| %>
10
9
  <li <%= active_class_if_current(scope.id) %>><%= link_to translated_attribute(scope.name), url_for(filter: { scope_id: scope.id, category_id: category.try(:id) }) %></li>
@@ -15,7 +15,6 @@
15
15
  <%= render partial: "decidim/shared/tags", locals: { resource: result, tags_class_extra: "tags--result" } %>
16
16
  </div>
17
17
  </div>
18
-
19
18
  <%= render partial: "stats_box" %>
20
19
  </div>
21
20
 
@@ -1,9 +1,13 @@
1
1
  <div class="small-12 columns section">
2
2
  <div class="row">
3
- <div class="small-12 medium-9 columns section">
3
+ <div class="small-12 medium-9 columns">
4
4
  <%= linked_resources_for result, :proposals, "included_proposals" %>
5
5
  </div>
6
6
 
7
+ <div class="small-12 medium-9 columns">
8
+ <%= linked_resources_for result, :projects, "included_projects" %>
9
+ </div>
10
+
7
11
  <div class="small-12 medium-9 columns end">
8
12
  <%= linked_resources_for result, :meetings, "meetings_through_proposals" %>
9
13
  </div>
@@ -1,4 +1,3 @@
1
- ---
2
1
  ca:
3
2
  activemodel:
4
3
  attributes:
@@ -9,6 +8,7 @@ ca:
9
8
  description: Descripció
10
9
  end_date: Fi
11
10
  progress: Progrés
11
+ project_ids: Projectes inclosos
12
12
  proposal_ids: Propostes incloses
13
13
  start_date: Inici
14
14
  title: Títol
@@ -119,7 +119,6 @@ ca:
119
119
  other: "%{count} resultats"
120
120
  filters:
121
121
  all: Tots
122
- global: Global
123
122
  scopes: Àmbits
124
123
  home:
125
124
  categories_label: Categories
@@ -171,5 +170,7 @@ ca:
171
170
  step:
172
171
  comments_blocked: Comentaris bloquejats
173
172
  resource_links:
173
+ included_projects:
174
+ result_projects: Projectes inclosos en aquest resultat
174
175
  included_proposals:
175
176
  result_proposals: Propostes incloses en aquest resultat
@@ -9,6 +9,7 @@ en:
9
9
  description: Description
10
10
  end_date: End date
11
11
  progress: Progress
12
+ project_ids: Included projects
12
13
  proposal_ids: Included proposals
13
14
  start_date: Start date
14
15
  title: Title
@@ -119,7 +120,6 @@ en:
119
120
  other: "%{count} results"
120
121
  filters:
121
122
  all: All
122
- global: Global
123
123
  scopes: Scopes
124
124
  home:
125
125
  categories_label: Categories
@@ -171,5 +171,7 @@ en:
171
171
  step:
172
172
  comments_blocked: Comments blocked
173
173
  resource_links:
174
+ included_projects:
175
+ result_projects: Projects included in this result
174
176
  included_proposals:
175
177
  result_proposals: Proposals included in this result
@@ -1,4 +1,3 @@
1
- ---
2
1
  es:
3
2
  activemodel:
4
3
  attributes:
@@ -9,6 +8,7 @@ es:
9
8
  description: Descripción
10
9
  end_date: Fin
11
10
  progress: Progreso
11
+ project_ids: Proyectos incluidos
12
12
  proposal_ids: Propuestas incluidas
13
13
  start_date: Inicio
14
14
  title: Título
@@ -23,7 +23,7 @@ es:
23
23
  decidim:
24
24
  accountability:
25
25
  actions:
26
- confirm_destroy: "¿Está seguro de que quiere eliminar este %{name}?"
26
+ confirm_destroy: '¿Está seguro de que quiere eliminar este %{name}?'
27
27
  destroy: Borrar
28
28
  edit: Editar
29
29
  new: Nuevo/a %{name}
@@ -119,7 +119,6 @@ es:
119
119
  other: "%{count} resultados"
120
120
  filters:
121
121
  all: Todos
122
- global: Global
123
122
  scopes: Ámbitos
124
123
  home:
125
124
  categories_label: Categorías
@@ -171,5 +170,7 @@ es:
171
170
  step:
172
171
  comments_blocked: Comentarios bloqueados
173
172
  resource_links:
173
+ included_projects:
174
+ result_projects: Proyectos incluidos en este resultado
174
175
  included_proposals:
175
176
  result_proposals: Propuestas incluidas en este resultado
@@ -8,6 +8,7 @@ eu:
8
8
  description: Deskribapena
9
9
  end_date: Bukaera-data
10
10
  progress: ' Aurrerapena '
11
+ project_ids: Proiektu barne
11
12
  proposal_ids: Sartutako proposamenak
12
13
  start_date: Hasiera-data
13
14
  title: Izenburua
@@ -118,7 +119,6 @@ eu:
118
119
  other: "%{count} emaitza"
119
120
  filters:
120
121
  all: Guztiak
121
- global: Global
122
122
  scopes: Esparruak
123
123
  home:
124
124
  categories_label: Kategoriak
@@ -170,5 +170,7 @@ eu:
170
170
  step:
171
171
  comments_blocked: Iruzkinak blokeatuta
172
172
  resource_links:
173
+ included_projects:
174
+ result_projects: Emaitza honetan sartutako proiektuak
173
175
  included_proposals:
174
176
  result_proposals: Emaitza honetan jasotako proposamenak
@@ -2,18 +2,19 @@ fi:
2
2
  activemodel:
3
3
  attributes:
4
4
  result:
5
- decidim_accountability_status_id: status
5
+ decidim_accountability_status_id: tila
6
6
  decidim_category_id: Aihepiiri
7
7
  decidim_scope_id: Konteksti
8
8
  description: Kuvaus
9
9
  end_date: Päättymisaika
10
10
  progress: Edistyminen
11
+ project_ids: Liitetyt projektit
11
12
  proposal_ids: Sisällytetyt ehdotukset
12
13
  start_date: Aloitusaika
13
14
  title: Otsikko
14
15
  status:
15
16
  description: Kuvaus
16
- key: avain
17
+ key: Tunniste
17
18
  name: Nimi
18
19
  progress: Edistyminen
19
20
  timeline_entry:
@@ -27,7 +28,7 @@ fi:
27
28
  edit: Muokkaa
28
29
  new: Uusi %{name}
29
30
  preview: Esikatsele
30
- timeline_entries: Projektin kehitys
31
+ timeline_entries: Projektin edistyminen
31
32
  title: Toiminnot
32
33
  admin:
33
34
  exports:
@@ -36,7 +37,7 @@ fi:
36
37
  result:
37
38
  name: Tulos
38
39
  status:
39
- name: Status
40
+ name: Tila
40
41
  timeline_entry:
41
42
  name: Aikajanan merkintä
42
43
  results:
@@ -58,53 +59,53 @@ fi:
58
59
  success: Tulos päivitetty onnistuneesti
59
60
  shared:
60
61
  subnav:
61
- statuses: tilat
62
+ statuses: Tilat
62
63
  statuses:
63
64
  create:
64
- invalid: Ongelma tämän tilan luomisessa
65
- success: Tila onnistuneesti luotu
65
+ invalid: Tilan luomisessa tapahtui virhe
66
+ success: Tila luotu onnistuneesti
66
67
  destroy:
67
- success: Tilan poistaminen onnistui
68
+ success: Tilan poistettu onnistuneesti
68
69
  edit:
69
70
  title: Muokkaa tilaa
70
- update: Päivitä status
71
+ update: Päivitä tila
71
72
  index:
72
- title: tilat
73
+ title: Tilat
73
74
  new:
74
75
  create: Luo tila
75
76
  title: Uusi tila
76
77
  update:
77
- invalid: On ollut ongelma tämän tilan päivittämisessä
78
+ invalid: Tilan päivittämisessä tapahtui virhe
78
79
  success: Tilan päivitys onnistui
79
80
  timeline_entries:
80
81
  create:
81
- invalid: On tullut ongelma tämän merkinnän luomisesta
82
- success: Entry onnistuneesti luotu
82
+ invalid: Merkinnän luomisessa tapahtui virhe
83
+ success: Merkintä luotu onnistuneesti
83
84
  destroy:
84
- success: Merkintä poistettiin onnistuneesti
85
+ success: Merkintä poistettu onnistuneesti
85
86
  edit:
86
87
  title: Muokkaa merkintää
87
88
  update: Päivitä merkintä
88
89
  index:
89
- title: Projekti aikajanalla merkinnät
90
+ title: Projektin aikajanan merkinnät
90
91
  new:
91
92
  create: Luo merkintä
92
93
  title: Uusi merkintä
93
94
  update:
94
- invalid: On tapahtunut ongelma, joka päivitti tämän merkinnän
95
- success: Ilmoituksen päivitys onnistui
95
+ invalid: Merkinnän päivityksessä tapahtui virhe
96
+ success: Merkinnän päivitys onnistui
96
97
  models:
97
98
  result:
98
99
  fields:
99
100
  end_date: Päättymisaika
100
101
  progress: Edistyminen
101
102
  start_date: Aloitusaika
102
- status: Status
103
+ status: Tila
103
104
  title: Otsikko
104
105
  status:
105
106
  fields:
106
107
  description: Kuvaus
107
- key: avain
108
+ key: Tunniste
108
109
  name: Nimi
109
110
  progress: Edistyminen
110
111
  timeline_entry:
@@ -118,15 +119,14 @@ fi:
118
119
  other: "%{count} tulosta"
119
120
  filters:
120
121
  all: Kaikki
121
- global: maailmanlaajuinen
122
122
  scopes: Konteksti
123
123
  home:
124
124
  categories_label: Aihepiirit
125
- subcategories_label: alaluokat
125
+ subcategories_label: Ala-aihepiiri
126
126
  home_header:
127
- global_status: Globaalin toteutuksen tila
127
+ global_status: Yleisen toteutuksen tila
128
128
  nav_breadcrumb:
129
- global: Maailmanlaajuinen toteutus
129
+ global: Yleinen toteutus
130
130
  search:
131
131
  search: Hae toimintoja
132
132
  show:
@@ -134,26 +134,26 @@ fi:
134
134
  attendees: Osallistujat
135
135
  back_to_result: Palaa tulokseen
136
136
  comments: Kommentit
137
- contributions: Kontribuutiot
137
+ contributions: Osallistumiset
138
138
  last_edited_by: Viimeksi muokannut
139
139
  last_updated_at: Päivitetty viimeksi
140
140
  meetings: Tapaamiset
141
- number_of_versions: versiot
141
+ number_of_versions: Versiot
142
142
  proposals: Ehdotukset
143
143
  show_all_versions: Näytä kaikki versiot
144
- version_author: Versio kirjoittaja
145
- version_created_at: Versio luotu osoitteessa
146
- version_number: Versiomäärä
144
+ version_author: Versio luoja
145
+ version_created_at: Version luontihetki
146
+ version_number: Version numero
147
147
  version_number_out_of_total: "%{current_version} / %{total_count}"
148
148
  votes: Kannatukset
149
149
  timeline:
150
150
  title: Projektin kehitys
151
151
  versions:
152
152
  index:
153
- changes_at_title: Muutokset osoitteessa "%{title}"
154
- title: versiot
153
+ changes_at_title: Muutokset kohteessa "%{title}"
154
+ title: Versiot
155
155
  show:
156
- changes_at_title: Muutokset osoitteessa "%{title}"
156
+ changes_at_title: Muutokset kohteessa "%{title}"
157
157
  version:
158
158
  version_index: Versio %{index}
159
159
  features:
@@ -161,14 +161,16 @@ fi:
161
161
  name: Tulokset
162
162
  settings:
163
163
  global:
164
- categories_label: Nimi "Luokat"
164
+ categories_label: Nimi kohteelle "Luokat"
165
165
  comments_enabled: Kommentointi sallittu
166
- heading_leaf_level_results: Nimi "Projektit"
167
- heading_parent_level_results: Nimi "Tulokset"
168
- intro: intro
169
- subcategories_label: Nimi "Alaluokat"
166
+ heading_leaf_level_results: Nimi kohteelle "Projektit"
167
+ heading_parent_level_results: Nimi kohteelle "Tulokset"
168
+ intro: Esittelyteksti
169
+ subcategories_label: Nimi kohteelle "Ala-aihepiirit"
170
170
  step:
171
171
  comments_blocked: Kommentointi estetty
172
172
  resource_links:
173
+ included_projects:
174
+ result_projects: Tähän tulokseen liittyvät hankkeet
173
175
  included_proposals:
174
- result_proposals: Projektit, jotka sisältyvät tähän tulokseen
176
+ result_proposals: Tähän tulokseen liittyvät ehdotukset