decidim-meetings 0.27.5 → 0.27.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +2 -2
  3. data/app/cells/decidim/meetings/meeting_s_cell.rb +1 -1
  4. data/app/controllers/decidim/meetings/widgets_controller.rb +11 -1
  5. data/app/helpers/decidim/meetings/directory/application_helper.rb +1 -1
  6. data/app/packs/src/decidim/meetings/poll.component.js +27 -0
  7. data/app/permissions/decidim/meetings/permissions.rb +10 -0
  8. data/app/views/decidim/meetings/admin/agenda/_form.html.erb +1 -1
  9. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -1
  10. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  11. data/app/views/decidim/meetings/meetings/show.html.erb +3 -1
  12. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +13 -9
  13. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +8 -8
  14. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +2 -2
  15. data/config/locales/bg.yml +105 -0
  16. data/config/locales/ca.yml +4 -4
  17. data/config/locales/de.yml +1 -1
  18. data/config/locales/es.yml +4 -4
  19. data/config/locales/fi-plain.yml +2 -0
  20. data/config/locales/fi.yml +3 -1
  21. data/config/locales/fr-CA.yml +2 -0
  22. data/config/locales/fr.yml +2 -0
  23. data/config/locales/he-IL.yml +1 -0
  24. data/config/locales/hu.yml +4 -0
  25. data/config/locales/ja.yml +8 -1
  26. data/config/locales/pl.yml +46 -0
  27. data/config/locales/pt-BR.yml +50 -0
  28. data/config/locales/sv.yml +1 -0
  29. data/decidim-meetings.gemspec +36 -0
  30. data/lib/decidim/meetings/engine.rb +1 -1
  31. data/lib/decidim/meetings/test/factories.rb +68 -30
  32. data/lib/decidim/meetings/version.rb +1 -1
  33. metadata +22 -21
  34. data/config/environment.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a610ceae614ac794a5b7ea743fcbdcf71a0f2a70e8b559f6e57961afb5648db
4
- data.tar.gz: 40d10bb06adb06467f54953cae3c060e6388287b2e3191f9974cfa5dc4f9ee29
3
+ metadata.gz: ee616fce1b0a6eec4212c8fafcc567c73f610842f50698746ce2c521e35ff131
4
+ data.tar.gz: 5bfab791ea3903e692b2c5441cb6ec8f36bfbc5f9e8b6908f7703596629f8674
5
5
  SHA512:
6
- metadata.gz: a27d0127cf7915042f66df45b51d8cc8dcb76adac2956ea18eaf8ccfba26b14676746f89c2f06b1e2967fa11682398d817a3c145a7aed5061fd0cfb63f7f1647
7
- data.tar.gz: 5b0601806650088310ee24494e5217d2733fe06d558fc0cf088237f3c4775d249c5ba3b01e4da3ff7e3659a4bed20b6be003d334e0382d9b4fecbbe1877632ad
6
+ metadata.gz: 1746cf0192964b979b1ff383f47dc701cac3298ec5f5400cd650f71a0b01da9895f9feae0bb2c83b8ce294dccf8ba13d8f3a910fc4d4e19f115f74beca43e0d4
7
+ data.tar.gz: 3fc3d9659b9de30103dd076134314bbd40deac924d577f392646c387b933e1794b000b462152e473f819699d0b4044c16ad443f9929fd0a2996367702b19f72c
@@ -1,7 +1,7 @@
1
1
  <% if upcoming_meetings.any? %>
2
2
  <div class="section row collapse upcoming_meetings">
3
3
  <h3 class="section-heading">
4
- <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.upcoming_meetings") %>
4
+ <%= decidim_escape_translated(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.upcoming_meetings") %>
5
5
  <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: upcoming_meetings_count) %></a>
6
6
  </h3>
7
7
  <div class="card card--list">
@@ -18,7 +18,7 @@
18
18
  <% elsif past_meetings.any? %>
19
19
  <div class="section row collapse past_meetings">
20
20
  <h3 class="section-heading">
21
- <%= translated_attribute(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.past_meetings") %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: past_meetings_count) %></a>
21
+ <%= decidim_escape_translated(model.name) %> - <%= t("decidim.participatory_spaces.highlighted_meetings.past_meetings") %> <a href="<%= main_component_path(model) %>" class="text-small"><%= t("decidim.participatory_spaces.highlighted_meetings.see_all", count: past_meetings_count) %></a>
22
22
  </h3>
23
23
  <div class="card card--list">
24
24
  <% past_meetings.each do |meeting| %>
@@ -14,7 +14,7 @@ module Decidim
14
14
  end
15
15
 
16
16
  def participatory_space_title
17
- translated_attribute model.component.participatory_space.title
17
+ decidim_escape_translated model.component.participatory_space.title
18
18
  end
19
19
 
20
20
  def participatory_space_path
@@ -6,15 +6,25 @@ module Decidim
6
6
  helper MeetingsHelper
7
7
  helper Decidim::SanitizeHelper
8
8
 
9
+ def show
10
+ enforce_permission_to :embed, :meeting, meeting: model if model
11
+
12
+ super
13
+ end
14
+
9
15
  private
10
16
 
11
17
  def model
12
- @model ||= Meeting.where(component: params[:component_id]).find(params[:meeting_id])
18
+ @model ||= Meeting.except_withdrawn.published.not_hidden.where(component: current_component).find(params[:meeting_id])
13
19
  end
14
20
 
15
21
  def iframe_url
16
22
  @iframe_url ||= meeting_widget_url(model)
17
23
  end
24
+
25
+ def permission_class_chain
26
+ [Decidim::Meetings::Permissions]
27
+ end
18
28
  end
19
29
  end
20
30
  end
@@ -92,7 +92,7 @@ module Decidim
92
92
  key_point = current_participatory_space.class.name.gsub("::", "__") + current_participatory_space.id.to_s
93
93
 
94
94
  TreeNode.new(
95
- TreePoint.new(key_point, translated_attribute(current_participatory_space.title, current_organization)),
95
+ TreePoint.new(key_point, decidim_escape_translated(current_participatory_space.title)),
96
96
  categories_values
97
97
  )
98
98
  end
@@ -1,5 +1,8 @@
1
1
  /* eslint id-length: ["error", { "exceptions": ["$"] }] */
2
2
 
3
+ import createOptionAttachedInputs from "src/decidim/forms/option_attached_inputs.component"
4
+ import createMaxChoicesAlertComponent from "src/decidim/forms/max_choices_alert.component"
5
+
3
6
  /**
4
7
  * A plain Javascript component that handles questions from polls in meetings:
5
8
  * - fetches them via Ajax
@@ -75,6 +78,7 @@ export default class PollComponent {
75
78
  this._updateCounter();
76
79
  this._setQuestionsState(this.$element);
77
80
  this._pollQuestions();
81
+ this._addValidations();
78
82
  });
79
83
  }
80
84
 
@@ -163,4 +167,27 @@ export default class PollComponent {
163
167
  this.$counter.html(`(${questionsCount})`);
164
168
  }
165
169
  }
170
+
171
+ _addValidations() {
172
+ $(".js-radio-button-collection, .js-check-box-collection").each((idx, el) => {
173
+ createOptionAttachedInputs({
174
+ wrapperField: $(el),
175
+ controllerFieldSelector: "input[type=radio], input[type=checkbox]",
176
+ dependentInputSelector: "input[type=text], input[type=hidden]"
177
+ });
178
+ });
179
+
180
+ $.unique($(".js-check-box-collection").parents(".answer")).each((idx, el) => {
181
+ const maxChoices = $(el).data("max-choices");
182
+ if (maxChoices) {
183
+ createMaxChoicesAlertComponent({
184
+ wrapperField: $(el),
185
+ controllerFieldSelector: "input[type=checkbox]",
186
+ controllerCollectionSelector: ".js-check-box-collection",
187
+ alertElement: $(el).find(".max-choices-alert"),
188
+ maxChoices: maxChoices
189
+ });
190
+ }
191
+ });
192
+ }
166
193
  }
@@ -4,6 +4,7 @@ module Decidim
4
4
  module Meetings
5
5
  class Permissions < Decidim::DefaultPermissions
6
6
  def permissions
7
+ allow_embed_meeting?
7
8
  return permission_action unless user
8
9
 
9
10
  # Delegate the admin permission checks to the admin permissions class
@@ -57,6 +58,15 @@ module Decidim
57
58
  @question ||= context.fetch(:question, nil)
58
59
  end
59
60
 
61
+ # As this is a public action, we need to run this before other checks
62
+ def allow_embed_meeting?
63
+ return unless permission_action.action == :embed && permission_action.subject == :meeting && meeting
64
+ return disallow! if meeting.withdrawn?
65
+ return allow! if meeting.published?
66
+
67
+ disallow!
68
+ end
69
+
60
70
  def can_join_meeting?
61
71
  meeting.can_be_joined_by?(user) &&
62
72
  authorized?(:join, resource: meeting)
@@ -3,7 +3,7 @@
3
3
  <h2 class="card-title">
4
4
  <div class="flex--sbc">
5
5
  <div class="grid-x align-middle">
6
- <u> <%= present(@meeting).title %> </u> &nbsp;<%= icon "arrow-right" %>&nbsp;<%= title %>
6
+ <u> <%= present(@meeting).title(html_escape: true) %> </u> &nbsp;<%= icon "arrow-right" %>&nbsp;<%= title %>
7
7
  </div>
8
8
  </div>
9
9
  </h2>
@@ -24,7 +24,7 @@
24
24
  <% end %>
25
25
 
26
26
  <div>
27
- <strong class="text-secondary"><%= current_organization.name %></strong> / <strong><%= present(meeting).title(links: true) %></strong>
27
+ <strong class="text-secondary"><%= current_organization.name %></strong> / <strong><%= present(meeting).title(links: true, html_escape: true) %></strong>
28
28
  </div>
29
29
 
30
30
  <div class="flex--cc">
@@ -11,7 +11,7 @@
11
11
  <span class="text-small"><%= display_duration_agenda_items(agenda_item.id, index, agenda_items_times) %></span>
12
12
  </h5>
13
13
  <hr class="reset m-none mb-s">
14
- <p><%= translated_attribute(agenda_item.description).html_safe %></p>
14
+ <p><%= decidim_sanitize_translated(agenda_item.description).html_safe %></p>
15
15
 
16
16
  <% if agenda_item.agenda_item_children.presence %>
17
17
  <% parent_start_time = agenda_items_times[index][:start_time] %>
@@ -22,7 +22,7 @@
22
22
  <strong><%= translated_attribute(agenda_item_child.title) %></strong>&nbsp;
23
23
  <span class="text-small"><%= display_duration_agenda_items(agenda_item_child.id, index_child, agenda_item_children_times) %></span>
24
24
  </h6>
25
- <p><%= translated_attribute(agenda_item_child.description).html_safe %></p>
25
+ <p><%= decidim_sanitize_translated(agenda_item_child.description).html_safe %></p>
26
26
  <% end %>
27
27
  <% end %>
28
28
  <% end %>
@@ -105,7 +105,9 @@ edit_link(
105
105
  <%= resource_version(meeting, versions_path: meeting_versions_path(meeting)) %>
106
106
  <%= cell "decidim/meetings/cancel_registration_meeting_button", meeting %>
107
107
  <%= render partial: "decidim/shared/share_modal" %>
108
- <%= embed_modal_for meeting_widget_url(meeting, format: :js) %>
108
+ <% if allowed_to? :embed, :meeting, meeting: @meeting %>
109
+ <%= embed_modal_for meeting_widget_url(meeting, format: :js) %>
110
+ <% end %>
109
111
  <%= render partial: "calendar_modal", locals: { ics_url: calendar_meeting_url(meeting), google_url: google_calendar_event_url(meeting) } %>
110
112
  </div>
111
113
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
@@ -1,13 +1,17 @@
1
- <% question.answer_options.each_with_index do |answer_option, idx| %>
2
- <% choice = answer.choices.find { |choice| choice.decidim_answer_option_id == answer_option.id } if answer %>
1
+ <div class="answer-questionnaire__single-option js-check-box-collection">
2
+ <% question.answer_options.each_with_index do |answer_option, idx| %>
3
+ <% choice = answer.choices.find { |choice| choice.decidim_answer_option_id == answer_option.id } if answer %>
3
4
 
4
- <%= label_tag do %>
5
- <%= check_box_tag "answer[choices][#{idx}][body]",
6
- translated_attribute(answer_option.body),
7
- choice.present?, disabled: disabled %>
5
+ <div class="js-collection-input">
6
+ <%= label_tag do %>
7
+ <%= check_box_tag "answer[choices][#{idx}][body]",
8
+ translated_attribute(answer_option.body),
9
+ choice.present?, disabled: disabled %>
8
10
 
9
- <%= translated_attribute(answer_option.body) %>
11
+ <%= translated_attribute(answer_option.body) %>
10
12
 
11
- <%= hidden_field_tag "answer[choices][#{idx}][answer_option_id]", answer_option.id, disabled: disabled %>
13
+ <%= hidden_field_tag "answer[choices][#{idx}][answer_option_id]", answer_option.id, disabled: disabled %>
14
+ <% end %>
15
+ </div>
12
16
  <% end %>
13
- <% end %>
17
+ </div>
@@ -4,16 +4,16 @@
4
4
  <% choice_id = "#{field_id}_choices_#{idx}" %>
5
5
 
6
6
  <%= label_tag "#{choice_id}_body" do %>
7
- <%= radio_button_tag "answer[choices][#{idx}][body]",
8
- translated_attribute(answer_option.body),
9
- answer_option.id == choice.try(:decidim_answer_option_id),
10
- id: "#{choice_id}_body", disabled: disabled %>
7
+ <%= radio_button_tag "answer[choices][#{question.id}][body]",
8
+ translated_attribute(answer_option.body),
9
+ answer_option.id == choice.try(:decidim_answer_option_id),
10
+ id: "#{choice_id}_body", disabled: disabled %>
11
11
 
12
12
  <%= translated_attribute(answer_option.body) %>
13
13
 
14
- <%= hidden_field_tag "answer[choices][#{idx}][answer_option_id]",
15
- answer_option.id,
16
- id: "#{choice_id}_answer_option",
17
- disabled: disabled %>
14
+ <%= hidden_field_tag "answer[choices][#{question.id}][answer_option_id]",
15
+ answer_option.id,
16
+ id: "#{choice_id}_answer_option",
17
+ disabled: disabled %>
18
18
  <% end %>
19
19
  <% end %>
@@ -6,12 +6,12 @@
6
6
  <% @form = form || Decidim::Meetings::AnswerForm.new(question_id: question.id, current_user: current_user) %>
7
7
  <%= decidim_form_for(@form, url: meeting_polls_answers_path(meeting), method: :post, remote: true, html: { class: "form answer-questionnaire" }, data: { "safe-path" => meeting_live_event_path(meeting) }) do |form| %>
8
8
  <div class="row column answer question" data-max-choices="<%= question.max_choices %>">
9
+ <small class="form-error max-choices-alert"><%= t(".max_choices_alert") %></small>
10
+
9
11
  <%= render partial: "decidim/meetings/polls/answers/#{question.question_type}", locals: { answer: @form.answer, question: question, answer_form: form, disabled: question.answered_by?(current_user), field_id: question.id } %>
10
12
 
11
13
  <%= form.hidden_field :question_id %>
12
14
 
13
- <small class="form-error max-choices-alert"><%= t(".max_choices_alert") %></small>
14
-
15
15
  <% @form.errors.full_messages.each do |msg| %>
16
16
  <small class="form-error is-visible margin-top-1"><%= msg %></small>
17
17
  <% end %>
@@ -1,6 +1,34 @@
1
1
  ---
2
2
  bg:
3
+ activemodel:
4
+ errors:
5
+ models:
6
+ meeting:
7
+ attributes:
8
+ iframe_embed_type:
9
+ not_embeddable: Този URL адрес не може да бъде вграден в страница за среща или събитие на живо
10
+ meeting_agenda:
11
+ attributes:
12
+ base:
13
+ too_many_minutes: Продължителността на точките надвишава продължителността на срещата с(ъс) %{count} минути
14
+ too_many_minutes_child: Продължителността на подточките надвишава продължителността на точката от дневния ред „%{parent_title}“ с(ъс) %{count} минути
15
+ meeting_registration_invite:
16
+ attributes:
17
+ email:
18
+ already_invited: На този имейл вече е изпратена покана
3
19
  decidim:
20
+ admin:
21
+ meeting_copies:
22
+ new:
23
+ select: Изберете кои данни искате да дублирате
24
+ forms:
25
+ meetings:
26
+ attendees_count_help_text: Не забравяйте да включите общия брой присъстващи на вашата среща, независимо дали те присъстват лично, онлайн или хибридно.
27
+ gamification:
28
+ badges:
29
+ attended_meetings:
30
+ unearned_another: Този участник все още не е присъствал на нито една среща.
31
+ unearned_own: Все още не сте присъствали на нито една среща.
4
32
  meetings:
5
33
  actions:
6
34
  invalid_destroy:
@@ -8,9 +36,86 @@ bg:
8
36
  one: 'Срещата не може да бъде премахната, понеже има %{count} участник свързан с нея:'
9
37
  other: 'Срещата не може да бъде премахната, понеже има %{count} участника свързани с нея:'
10
38
  admin:
39
+ agenda:
40
+ create:
41
+ invalid: Възникна проблем при създаването на този дневен ред
42
+ success: Дневният ред беше създаден успешно
43
+ update:
44
+ invalid: Възникна проблем при актуализирането на този дневен ред
45
+ success: Дневният ред беше актуализиран успешно
46
+ invites:
47
+ index:
48
+ filter_by: Филтрирай по
49
+ registrations_disabled: Не можете да поканите присъстващи, защото регистрациите са изключени.
11
50
  meetings:
51
+ close:
52
+ invalid: Възникна проблем при закриването на тази среща
53
+ success: Срещата беше закрита успешно
54
+ create:
55
+ invalid: Възникна проблем при създаването на тази среща
12
56
  destroy:
13
57
  invalid:
14
58
  proposals_count:
15
59
  one: Срещата не може да бъде премахната, понеже има %{count} участник свързан с нея
16
60
  other: Срещата не може да бъде премахната, понеже има %{count} участника свързани с нея
61
+ form:
62
+ disclaimer: 'Отказ от отговорност: Използвайки външна система за регистрация, вие сте наясно, че организаторите на %{organization} не носят отговорност за данните, предоставени от потребителите на външната услуга.'
63
+ publish:
64
+ invalid: Възникна проблем при публикуването на тази среща
65
+ success: Срещата беше публикувана успешно
66
+ unpublish:
67
+ invalid: Възникна проблем при отмяната на публикуването на тази среща
68
+ success: Публикуването на срещата беше успешно отменено
69
+ update:
70
+ invalid: Възникна проблем при актуализирането на тази среща
71
+ success: Срещата беше актуализирана успешно
72
+ meetings_poll:
73
+ update:
74
+ invalid: Възникна проблем при актуализирането на тази анкета за среща
75
+ success: Анкетата за среща бе актуализирана успешно
76
+ registrations:
77
+ form:
78
+ reserved_slots_help: Оставете 0, ако не разполагате с резервирани места
79
+ calendar_modal:
80
+ close_window: Затвори прозореца
81
+ copy_calendar_url_explanation: Моля, обърнете внимание, че експортирате селекция от срещи, тъй като има активни филтри. Ако искате да ги експортирате всички, първо нулирайте всички филтри.
82
+ content_blocks:
83
+ upcoming_meetings:
84
+ view_all_meetings: Виж всички
85
+ last_activity:
86
+ meeting_updated_at_html: "<span>Срещата беше актуализирана на: %{link}</span>"
87
+ new_meeting_at_html: "<span>Нова среща на %{link}</span>"
88
+ meeting:
89
+ not_allowed: Нямате разрешение да разглеждате тази среща
90
+ meetings:
91
+ calendar_modal:
92
+ close_window: Затвори прозореца
93
+ filters_small_view:
94
+ close_modal: Затвори прозореца
95
+ filter: Филтър
96
+ filter_by: Филтрирай по
97
+ unfold: Разгъване
98
+ form:
99
+ disclaimer: 'Отказ от отговорност: Използвайки външна система за регистрация, вие сте наясно, че организаторите на %{organization} не носят отговорност за данните, предоставени от потребителите на външната услуга.'
100
+ meeting_minutes:
101
+ related_information: Свързана информация
102
+ meetings:
103
+ no_meetings_warning: Няма срещи, които да съответстват на критериите Ви за търсене, или няма насрочени срещи.
104
+ show:
105
+ back: Обратно към списъка
106
+ view: Преглед
107
+ meetings_map:
108
+ view_meeting: Преглед на срещата
109
+ public_participants_list:
110
+ attending_participants: Присъстващи участници
111
+ registrations:
112
+ create:
113
+ success: Присъединихте се успешно към срещата. Тъй като се регистрирахте за тази среща, ще бъдете уведомявани за всички нейни актуализации.
114
+ versions:
115
+ back_to_resource: Връщане назад към срещата
116
+ withdraw:
117
+ error: Възникна грешка при оттеглянето на срещата
118
+ success: Срещата е оттеглена успешно
119
+ participatory_spaces:
120
+ highlighted_meetings:
121
+ see_all: Виж всички срещи (%{count})
@@ -165,14 +165,14 @@ ca:
165
165
  meeting_created:
166
166
  button_text: Inscriu-te a la trobada
167
167
  email_intro: S'ha afegit la trobada "%{resource_title}" a l'espai "%{participatory_space_title}" que estàs seguint.
168
- email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
168
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
169
169
  email_subject: Nova trobada afegida a %{participatory_space_title}
170
170
  notification_title: S'ha afegit la trobada <a href="%{resource_path}">%{resource_title}</a> a %{participatory_space_title}
171
171
  meeting_registration_confirmed:
172
172
  notification_title: S'ha confirmat el teu registre per a la trobada <a href="%{resource_url}">%{resource_title}</a>. El teu codi de registre és %{registration_code}.
173
173
  meeting_registrations_over_percentage:
174
174
  email_intro: Les inscripcions per la trobada "%{resource_title}" superen el %{percentage}%.
175
- email_outro: Has rebut aquesta notificació perquè ets administradora de l'espai participatiu de la trobada.
175
+ email_outro: Has rebut aquesta notificació perquè administres l'espai participatiu de la trobada.
176
176
  email_subject: Les inscripcions per la trobada "%{resource_title}" superen el %{percentage}%
177
177
  notification_title: Les inscripcions per la trobada <a href="%{resource_path}">%{resource_title}</a> superen el %{percentage}%.
178
178
  meeting_updated:
@@ -419,7 +419,7 @@ ca:
419
419
  body: La trobada <a href="%{meeting_path}">"%{meeting_title}"</a> està pendent de tancar-se. Si us plau, afegiu un informe de la reunió fent servir el botó "Tancar trobada".
420
420
  greetings: Hola,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
421
421
  hello: Hola %{username},
422
- subject: Ara pots tancar la trobada amb un informe a la plataforma %{organization_name}
422
+ subject: Està pendent tancar la trobada amb un informe a la plataforma %{organization_name}
423
423
  conference_venues: Seus de les jornades
424
424
  content_blocks:
425
425
  upcoming_meetings:
@@ -663,7 +663,7 @@ ca:
663
663
  participatory_spaces:
664
664
  highlighted_meetings:
665
665
  past_meetings: Trobades anteriors
666
- see_all: Veure tots (%{count})
666
+ see_all: Veure totes (%{count})
667
667
  upcoming_meetings: Properes trobades
668
668
  upcoming_meeting_for_card:
669
669
  upcoming_meeting: Propera trobada
@@ -27,7 +27,7 @@ de:
27
27
  online_meeting_url: Online Meeting URL
28
28
  organizer_gid: Erstellt als
29
29
  organizer_id: Veranstalter
30
- private_meeting: Private Sitzung
30
+ private_meeting: Privates Treffen
31
31
  registration_email_custom_content: Angepasster Inhalt des Registrierungs-E-Mails
32
32
  registration_form_enabled: Anmeldeformular aktiviert
33
33
  registration_terms: Registrierungsbedingungen
@@ -154,7 +154,7 @@ es:
154
154
  meeting_closed:
155
155
  affected_user:
156
156
  email_intro: 'Tu encuentro "%{resource_title}" se ha cerrado. Puedes leer las conclusiones desde su página:'
157
- email_outro: Has recibido esta notificación porque has organizaco el encuentro "%{resource_title}".
157
+ email_outro: Has recibido esta notificación porque organizaste el encuentro "%{resource_title}".
158
158
  email_subject: Se ha cerrado el encuentro "%{resource_title}"
159
159
  notification_title: El encuentro <a href="%{resource_path}">%{resource_title}</a> ha sido cerrada.
160
160
  follower:
@@ -165,14 +165,14 @@ es:
165
165
  meeting_created:
166
166
  button_text: Inscribirse en el encuentro
167
167
  email_intro: Se ha añadido el encuentro "%{resource_title}" al espacio "%{participatory_space_title}" que estás siguiendo.
168
- email_outro: Has recibido esta notificación porque sigues "%{participatory_space_title}". Puedes dejar de seguirlo en el enlace anterior.
168
+ email_outro: Has recibido esta notificación porque sigues el espacio "%{participatory_space_title}". Puedes dejar de seguirlo en el enlace anterior.
169
169
  email_subject: Nuevo encuentro añadido en %{participatory_space_title}
170
170
  notification_title: Se ha añadido el encuentro <a href="%{resource_path}">%{resource_title}</a> en %{participatory_space_title}
171
171
  meeting_registration_confirmed:
172
172
  notification_title: Tu inscripción al encuentro <a href="%{resource_url}">%{resource_title}</a> ha sido confirmada. Tu código de registro es %{registration_code}.
173
173
  meeting_registrations_over_percentage:
174
174
  email_intro: Las inscripciones para el encuentro "%{resource_title}" superan el %{percentage}%.
175
- email_outro: Has recibido esta notificación porque eres administradora del espacio participativo del encuentro.
175
+ email_outro: Has recibido esta notificación porque administras el espacio participativo del encuentro.
176
176
  email_subject: Las inscripciones para el encuentro "%{resource_title}" superan el %{percentage}%
177
177
  notification_title: Las inscripciones para el encuentro <a href="%{resource_path}">%{resource_title}</a> superan el %{percentage}%.
178
178
  meeting_updated:
@@ -419,7 +419,7 @@ es:
419
419
  body: El encuentro <a href="%{meeting_path}">"%{meeting_title}"</a> está pendiente de cerrarse. Por favor, agrega un informe de la reunión usando el botón "Cerrar encuentro".
420
420
  greetings: Hola,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
421
421
  hello: Hola %{username},
422
- subject: Ahora puedes cerrar el encuentro con un informe en la plataforma %{organization_name}
422
+ subject: Está pendiente cerrar el encuentro con un informe en la plataforma %{organization_name}
423
423
  conference_venues: Sedes de las jornadas
424
424
  content_blocks:
425
425
  upcoming_meetings:
@@ -282,7 +282,9 @@ fi-pl:
282
282
  select_user: Valitse käyttäjä
283
283
  index:
284
284
  filter:
285
+ accepted: Hyväksytyt
285
286
  all: Kaikki
287
+ rejected: Hylätyt
286
288
  sent: Lähetetyt
287
289
  filter_by: Rajaa hakua
288
290
  invite_attendee: Kutsu osallistuja
@@ -282,7 +282,9 @@ fi:
282
282
  select_user: Valitse käyttäjä
283
283
  index:
284
284
  filter:
285
+ accepted: Hyväksytyt
285
286
  all: Kaikki
287
+ rejected: Hylätyt
286
288
  sent: Lähetetyt
287
289
  filter_by: Rajaa hakua
288
290
  invite_attendee: Kutsu osallistuja
@@ -405,7 +407,7 @@ fi:
405
407
  calendar_modal:
406
408
  calendar_url: Kalenterin URL
407
409
  close_window: Sulje ikkuna
408
- copy_calendar_url: Kopio
410
+ copy_calendar_url: Kopioi
409
411
  copy_calendar_url_clarification: Kopioi kalenterin URL-osoite leikepöydälle
410
412
  copy_calendar_url_copied: Kopioitu!
411
413
  copy_calendar_url_description: Näet kaikki julkaistut tapaamiset oman palveluntarjoajasi kalenteriohjelmassa. Kopioi ja liitä tämä URL-osoite kalenteriisi käyttämällä "Lisää uusi kalenteri URL-osoitteesta" -toimintoa.
@@ -282,7 +282,9 @@ fr-CA:
282
282
  select_user: Sélectionner un utilisateur
283
283
  index:
284
284
  filter:
285
+ accepted: Acceptée
285
286
  all: Toutes
287
+ rejected: Rejeté
286
288
  sent: Envoyé
287
289
  filter_by: Filtrer par
288
290
  invite_attendee: Inviter un participant
@@ -282,7 +282,9 @@ fr:
282
282
  select_user: Sélectionner un utilisateur
283
283
  index:
284
284
  filter:
285
+ accepted: Acceptée
285
286
  all: Toutes
287
+ rejected: Rejeté
286
288
  sent: Envoyé
287
289
  filter_by: Filtrer par
288
290
  invite_attendee: Inviter un participant
@@ -0,0 +1 @@
1
+ he:
@@ -482,11 +482,15 @@ hu:
482
482
  address_help: 'Cím: Geocoder használata a helymeghatározáshoz'
483
483
  available_slots_help: Hagyd "0" értéken, ha a jelentkezők száma korlátlan
484
484
  create_as: Ülés létrehozása mint
485
+ disclaimer: 'Jogi nyilatkozat: Egy külső regisztrációs rendszer használatával Ön tudatában van annak, hogy a %{organization} szervezői nem felelősek a felhasználók által a külső szolgáltatásnak megadott adatokért.'
485
486
  meeting_minutes:
486
487
  related_information: Kapcsolódó információ
487
488
  meetings:
488
489
  no_meetings_warning: Nincs, vagy nincs ütemezve olyan találkozó, amely megfelel a keresési feltételeknek.
489
490
  upcoming_meetings_warning: Jelenleg nincs ütemezett találkozó, de itt megtalálhatod az összes korábbi találkozó listáját.
491
+ new:
492
+ create: Létrehoz
493
+ title: Találkozó létrehozása
490
494
  registration_confirm:
491
495
  cancel: Mégse
492
496
  confirm: Megerősítés
@@ -278,7 +278,9 @@ ja:
278
278
  select_user: 参加者を選択
279
279
  index:
280
280
  filter:
281
+ accepted: 承認済み
281
282
  all: すべて
283
+ rejected: 却下済み
282
284
  sent: 送信済み
283
285
  filter_by: フィルター
284
286
  invite_attendee: 参加者を招待
@@ -314,6 +316,7 @@ ja:
314
316
  select_a_meeting_type: ミーティング種別を選択してください
315
317
  select_a_registration_type: 登録種別を選択してください
316
318
  select_an_iframe_access_level: Iframeアクセスレベルを選択してください
319
+ show_embedded_iframe_help: 'ミーティングまたは配信イベントに埋め込めるサービスは以下のドメインに限定されています: %{domains}'
317
320
  index:
318
321
  title: ミーティング
319
322
  new:
@@ -392,6 +395,9 @@ ja:
392
395
  all: すべて
393
396
  filter_scope_values:
394
397
  all: すべて
398
+ calendar:
399
+ meeting_to_event:
400
+ read_more: このミーティングについてもっと読む
395
401
  calendar_modal:
396
402
  calendar_url: カレンダー URL
397
403
  close_window: ウィンドウを閉じる
@@ -426,7 +432,7 @@ ja:
426
432
  iframe_embed_type:
427
433
  embed_in_meeting_page: ミーティングページに埋め込む
428
434
  none: なし
429
- open_in_live_event_page: ライブイベントページで開く (オプションの投票付き)
435
+ open_in_live_event_page: 配信イベントページで開く (オプションの投票付き)
430
436
  open_in_new_tab: URLを新しいタブで開く
431
437
  last_activity:
432
438
  meeting_updated_at_html: "<span>ミーティングが %{link} に更新されました</span>"
@@ -510,6 +516,7 @@ ja:
510
516
  select_a_meeting_type: ミーティング種別を選択してください
511
517
  select_a_registration_type: 登録種別を選択してください
512
518
  select_an_iframe_access_level: iframeアクセスレベルを選択してください
519
+ show_embedded_iframe_help: 'ミーティングまたは配信イベントに埋め込めるサービスは以下のドメインに限定されています: %{domains}'
513
520
  index:
514
521
  click_here: すべてのミーティングを見る
515
522
  new_meeting: 新しいミーティング