decidim-meetings 0.15.2 → 0.16.0
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/meetings/highlighted_meetings/show.erb +3 -0
- data/app/cells/decidim/meetings/highlighted_meetings_cell.rb +25 -0
- data/app/cells/decidim/meetings/highlighted_meetings_for_component/show.erb +33 -0
- data/app/cells/decidim/meetings/highlighted_meetings_for_component_cell.rb +37 -0
- data/app/cells/decidim/meetings/join_meeting_button/show.erb +19 -10
- data/app/commands/decidim/meetings/admin/close_meeting.rb +2 -1
- data/app/commands/decidim/meetings/admin/copy_meeting.rb +1 -1
- data/app/commands/decidim/meetings/admin/create_meeting.rb +3 -2
- data/app/commands/decidim/meetings/admin/update_meeting.rb +1 -1
- data/app/commands/decidim/meetings/admin/update_registrations.rb +2 -1
- data/app/commands/decidim/meetings/admin/validate_registration_code.rb +1 -1
- data/app/commands/decidim/meetings/join_meeting.rb +35 -6
- data/app/commands/decidim/meetings/leave_meeting.rb +10 -0
- data/app/controllers/decidim/meetings/admin/registration_form_controller.rb +30 -0
- data/app/controllers/decidim/meetings/calendars_controller.rb +23 -0
- data/app/controllers/decidim/meetings/directory/meetings_controller.rb +4 -0
- data/app/controllers/decidim/meetings/registrations_controller.rb +43 -0
- data/app/events/decidim/meetings/close_meeting_event.rb +7 -0
- data/app/events/decidim/meetings/create_meeting_event.rb +3 -0
- data/app/events/decidim/meetings/meeting_registration_notification_event.rb +22 -0
- data/app/events/decidim/meetings/meeting_registrations_enabled_event.rb +3 -0
- data/app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb +4 -0
- data/app/events/decidim/meetings/registration_code_validated_event.rb +4 -0
- data/app/events/decidim/meetings/upcoming_meeting_event.rb +3 -0
- data/app/events/decidim/meetings/update_meeting_event.rb +3 -0
- data/app/forms/decidim/meetings/admin/meeting_registrations_form.rb +1 -0
- data/app/helpers/decidim/meetings/meetings_helper.rb +18 -0
- data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +1 -1
- data/app/mailers/decidim/meetings/registration_mailer.rb +1 -9
- data/app/models/decidim/meetings/meeting.rb +18 -0
- data/app/permissions/decidim/meetings/admin/permissions.rb +14 -0
- data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
- data/app/presenters/decidim/meetings/meeting_presenter.rb +50 -22
- data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +31 -0
- data/app/serializers/decidim/meetings/registration_serializer.rb +19 -1
- data/app/services/decidim/meetings/calendar/base_calendar.rb +61 -0
- data/app/services/decidim/meetings/calendar/component_calendar.rb +41 -0
- data/app/services/decidim/meetings/calendar/meeting_to_event.rb +70 -0
- data/app/services/decidim/meetings/calendar/organization_calendar.rb +33 -0
- data/app/services/decidim/meetings/calendar_renderer.rb +16 -0
- data/app/views/decidim/meetings/_calendar_modal.html.erb +13 -0
- data/app/views/decidim/meetings/admin/meetings/_form.html.erb +2 -2
- data/app/views/decidim/meetings/admin/meetings/index.html.erb +4 -1
- data/app/views/decidim/meetings/admin/registrations/_form.html.erb +5 -0
- data/app/views/decidim/meetings/directory/meetings/_meetings.html.erb +9 -2
- data/app/views/decidim/meetings/meetings/_meetings.html.erb +8 -1
- data/app/views/decidim/meetings/meetings/show.html.erb +17 -4
- data/config/locales/ca.yml +31 -10
- data/config/locales/de.yml +30 -10
- data/config/locales/en.yml +30 -9
- data/config/locales/es-PY.yml +31 -10
- data/config/locales/es.yml +30 -9
- data/config/locales/eu.yml +31 -10
- data/config/locales/fi-pl.yml +31 -10
- data/config/locales/fi.yml +31 -10
- data/config/locales/fr.yml +30 -9
- data/config/locales/gl.yml +30 -9
- data/config/locales/hu.yml +31 -10
- data/config/locales/id-ID.yml +28 -7
- data/config/locales/it.yml +31 -10
- data/config/locales/nl.yml +30 -9
- data/config/locales/pl.yml +32 -11
- data/config/locales/pt-BR.yml +31 -10
- data/config/locales/pt.yml +31 -10
- data/config/locales/ru.yml +7 -12
- data/config/locales/sv.yml +30 -9
- data/config/locales/tr-TR.yml +30 -9
- data/config/locales/uk.yml +7 -12
- data/db/migrate/20180801150031_add_registration_form_enabled_to_decidim_meetings.rb +7 -0
- data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +15 -0
- data/lib/decidim/meetings.rb +1 -0
- data/lib/decidim/meetings/admin_engine.rb +1 -0
- data/lib/decidim/meetings/component.rb +26 -0
- data/lib/decidim/meetings/directory_engine.rb +1 -0
- data/lib/decidim/meetings/engine.rb +19 -30
- data/lib/decidim/meetings/meeting_serializer.rb +77 -0
- data/lib/decidim/meetings/test/factories.rb +3 -0
- data/lib/decidim/meetings/version.rb +1 -1
- metadata +44 -15
- data/app/views/decidim/participatory_spaces/_highlighted_meetings.html.erb +0 -19
- data/app/views/decidim/participatory_spaces/_meeting.html.erb +0 -1
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
module Calendar
|
6
|
+
# This class handles how to convert a component meetings to the ICalendar
|
7
|
+
# format. It caches its result until the component is updated again.
|
8
|
+
class ComponentCalendar < BaseCalendar
|
9
|
+
# Renders the meetings in an ICalendar format. It caches the results in
|
10
|
+
# Rails' cache.
|
11
|
+
#
|
12
|
+
# Returns a String.
|
13
|
+
def events
|
14
|
+
Rails.cache.fetch(cache_key) do
|
15
|
+
meetings.map do |meeting|
|
16
|
+
MeetingToEvent.new(meeting).to_ical
|
17
|
+
end.join
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
alias component resource
|
24
|
+
|
25
|
+
# Finds the component meetings.
|
26
|
+
#
|
27
|
+
# Returns a collection of Meetings.
|
28
|
+
def meetings
|
29
|
+
Decidim::Meetings::Meeting.where(component: component)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Defines the cache key for the given component.
|
33
|
+
#
|
34
|
+
# Returns a String.
|
35
|
+
def cache_key
|
36
|
+
"meetings-calendar-component-#{component.id}-#{component.updated_at.to_i}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
module Calendar
|
6
|
+
# This class converts the given meeting to an ICalendar event, using the
|
7
|
+
# `icalendar` gem.
|
8
|
+
#
|
9
|
+
# Examples:
|
10
|
+
# meeting = Decidim::Meetings::Meeting.find(params[:id])
|
11
|
+
# converter = MeetingToEvent.new(meeting)
|
12
|
+
# converter.event # => #<Icalendar::Event ...>
|
13
|
+
# converter.to_ical # => "BEGIN:VEVENT\n\r...END:VEVENT\n\r"
|
14
|
+
#
|
15
|
+
# Note that this event will not be bound to any calendar. If you need to
|
16
|
+
# attach it to a calendar, you can do it like this:
|
17
|
+
#
|
18
|
+
# calendar = Icalendar::Calendar.new
|
19
|
+
# event = MeetingToEvent.new(meeting).event
|
20
|
+
# calendar.add_event(event)
|
21
|
+
#
|
22
|
+
class MeetingToEvent
|
23
|
+
include ActionView::Helpers::SanitizeHelper
|
24
|
+
|
25
|
+
# Initializes the converteer for the given meeting.
|
26
|
+
#
|
27
|
+
# meeting - the Meeting to convert
|
28
|
+
def initialize(meeting)
|
29
|
+
@meeting = meeting
|
30
|
+
end
|
31
|
+
|
32
|
+
# Converts the given meeting to an ICalendar event object
|
33
|
+
#
|
34
|
+
# Returns an ICalendar::Event instance
|
35
|
+
def event
|
36
|
+
return @event if @event
|
37
|
+
|
38
|
+
@event = Icalendar::Event.new
|
39
|
+
@event.dtstart = Icalendar::Values::DateTime.new(meeting.start_time)
|
40
|
+
@event.dtend = Icalendar::Values::DateTime.new(meeting.end_time)
|
41
|
+
@event.summary = present(meeting).title
|
42
|
+
@event.description = strip_tags(present(meeting).description)
|
43
|
+
@event.location = meeting.address
|
44
|
+
@event.geo = [meeting.latitude, meeting.longitude]
|
45
|
+
@event.url = url_for(meeting)
|
46
|
+
|
47
|
+
@event
|
48
|
+
end
|
49
|
+
|
50
|
+
# Converts the given meeting to an ICalendar event representation that
|
51
|
+
# follows the specific format.
|
52
|
+
#
|
53
|
+
# Returns a String
|
54
|
+
delegate :to_ical, to: :event
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
attr_reader :meeting
|
59
|
+
|
60
|
+
def url_for(meeting)
|
61
|
+
Decidim::ResourceLocatorPresenter.new(meeting).url
|
62
|
+
end
|
63
|
+
|
64
|
+
def present(meeting)
|
65
|
+
Decidim::Meetings::MeetingPresenter.new(meeting)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
module Calendar
|
6
|
+
# This class handles how to convert an organization meetings to the
|
7
|
+
# ICalendar format. It finds the public meeting components for that
|
8
|
+
# organization and delegates the work to the `ComponentCalendar` class.
|
9
|
+
class OrganizationCalendar < BaseCalendar
|
10
|
+
# Renders the meetings in an ICalendar format. It caches the results in
|
11
|
+
# Rails' cache.
|
12
|
+
#
|
13
|
+
# Returns a String.
|
14
|
+
def events
|
15
|
+
@events ||= components.map do |component|
|
16
|
+
ComponentCalendar.new(component).events
|
17
|
+
end.compact.join
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
alias organization resource
|
23
|
+
|
24
|
+
# Finds the component meetings.
|
25
|
+
#
|
26
|
+
# Returns a collection of Meetings.
|
27
|
+
def components
|
28
|
+
Decidim::PublicComponents.for(organization, manifest_name: :meetings)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Meetings
|
5
|
+
class CalendarRenderer
|
6
|
+
def self.for(resource)
|
7
|
+
case resource
|
8
|
+
when Decidim::Organization
|
9
|
+
Calendar::OrganizationCalendar.for(resource)
|
10
|
+
when Decidim::Component
|
11
|
+
Calendar::ComponentCalendar.for(resource)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<button class="button button--title secondary light share-link text-center calendar" data-open="calendarShare">
|
2
|
+
<%= t(".export_calendar") %>
|
3
|
+
<%= icon "share", class: "icon--after" %>
|
4
|
+
</button>
|
5
|
+
<div class="reveal" id="calendarShare" data-reveal>
|
6
|
+
<div class="reveal__header">
|
7
|
+
<h3 class="reveal__title"><%= t(".calendar_url") %>:</h3>
|
8
|
+
<button class="close-button" data-close aria-label="<%= t(".close_window") %>" type="button">
|
9
|
+
<span aria-hidden="true">×</span>
|
10
|
+
</button>
|
11
|
+
</div>
|
12
|
+
<input type="text" value="<%= "#{path}" %>" readonly />
|
13
|
+
</div>
|
@@ -4,11 +4,11 @@
|
|
4
4
|
</div>
|
5
5
|
<div class="card-section">
|
6
6
|
<div class="row column hashtags__container">
|
7
|
-
<%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).
|
7
|
+
<%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).title(all_locales: true) : "" %>
|
8
8
|
</div>
|
9
9
|
|
10
10
|
<div class="row column hashtags__container">
|
11
|
-
<%= form.translated :editor, :description, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).
|
11
|
+
<%= form.translated :editor, :description, class: "js-hashtags", hashtaggable: true, value: @meeting.present? ? present(@meeting).description(all_locales: true) : "" %>
|
12
12
|
</div>
|
13
13
|
|
14
14
|
<div class="row column">
|
@@ -2,7 +2,10 @@
|
|
2
2
|
<div class="card-divider">
|
3
3
|
<h2 class="card-title">
|
4
4
|
<%= t(".title") %>
|
5
|
-
|
5
|
+
<div class="button--title">
|
6
|
+
<%= link_to t("actions.new", scope: "decidim.meetings", name: t("models.meeting.name", scope: "decidim.meetings.admin")), new_meeting_path, class: "button tiny button--simple" if allowed_to? :create, :meeting %>
|
7
|
+
<%= export_dropdown %>
|
8
|
+
</div>
|
6
9
|
</h2>
|
7
10
|
</div>
|
8
11
|
|
@@ -13,6 +13,7 @@
|
|
13
13
|
</ul>
|
14
14
|
</div>
|
15
15
|
<% end %>
|
16
|
+
<%= link_to t(".registration_form"), edit_meeting_registrations_form_path(meeting_id: meeting.id), class: "button tiny button--title" %>
|
16
17
|
</h2>
|
17
18
|
</div>
|
18
19
|
|
@@ -21,6 +22,10 @@
|
|
21
22
|
<%= form.check_box :registrations_enabled %>
|
22
23
|
</div>
|
23
24
|
|
25
|
+
<div class="row column">
|
26
|
+
<%= form.check_box :registration_form_enabled %>
|
27
|
+
</div>
|
28
|
+
|
24
29
|
<div class="row column">
|
25
30
|
<p><%= t(".registrations_count", count: meeting.registrations.count) %></p>
|
26
31
|
<%= form.number_field :available_slots %>
|
@@ -3,11 +3,18 @@
|
|
3
3
|
<%= t "decidim.meetings.meetings.meetings.no_meetings_warning" %>
|
4
4
|
</div>
|
5
5
|
<% else %>
|
6
|
-
|
6
|
+
<div class="row medium-up-2">
|
7
|
+
<div class="column">
|
8
|
+
<%= render partial: "decidim/shared/results_per_page" %>
|
9
|
+
</div>
|
10
|
+
<div class="column">
|
11
|
+
<%= render partial: "decidim/meetings/calendar_modal", locals: { path: calendar_url } %>
|
12
|
+
</div>
|
13
|
+
</div>
|
7
14
|
|
8
15
|
<div class="row small-up-1 medium-up-2 card-grid">
|
9
16
|
<% meetings.each do |meeting| %>
|
10
|
-
<%= card_for meeting %>
|
17
|
+
<%= card_for meeting, context: { show_space: true } %>
|
11
18
|
<% end %>
|
12
19
|
</div>
|
13
20
|
<%= decidim_paginate meetings, order_start_time: params[:order_start_time], scope_id: params[:scope_id] %>
|
@@ -8,7 +8,14 @@
|
|
8
8
|
</div>
|
9
9
|
<% end %>
|
10
10
|
|
11
|
-
|
11
|
+
<div class="row medium-up-2">
|
12
|
+
<div class="column">
|
13
|
+
<%= render partial: "decidim/shared/results_per_page" %>
|
14
|
+
</div>
|
15
|
+
<div class="column">
|
16
|
+
<%= render partial: "decidim/meetings/calendar_modal", locals: { path: calendar_url } %>
|
17
|
+
</div>
|
18
|
+
</div>
|
12
19
|
|
13
20
|
<div class="row small-up-1 medium-up-2 card-grid">
|
14
21
|
<% meetings.each do |meeting| %>
|
@@ -16,9 +16,9 @@ edit_link(
|
|
16
16
|
%>
|
17
17
|
|
18
18
|
<div class="row column view-header">
|
19
|
-
<h2 class="heading2"><%= present(meeting).
|
19
|
+
<h2 class="heading2"><%= present(meeting).title(links: true) %></h2>
|
20
20
|
<% if meeting.organizer.present? %>
|
21
|
-
<%=
|
21
|
+
<%= cell "decidim/author", present(meeting.organizer) %>
|
22
22
|
<% end %>
|
23
23
|
</div>
|
24
24
|
<div class="row">
|
@@ -33,7 +33,7 @@ edit_link(
|
|
33
33
|
<%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
|
34
34
|
</div>
|
35
35
|
<%= cell "decidim/meetings/join_meeting_button", meeting, big_button: true, show_remaining_slots: true %>
|
36
|
-
<%= render partial: "decidim/shared/follow_button", locals: { followable: meeting } %>
|
36
|
+
<%= render partial: "decidim/shared/follow_button", locals: { followable: meeting, large: false } %>
|
37
37
|
</div>
|
38
38
|
<% if meeting.closed? %>
|
39
39
|
<div class="card card--secondary extra definition-data">
|
@@ -60,6 +60,18 @@ edit_link(
|
|
60
60
|
<% end %>
|
61
61
|
</div>
|
62
62
|
|
63
|
+
<% if registration %>
|
64
|
+
<div class="card extra">
|
65
|
+
<div class="card__content">
|
66
|
+
<div class="registration_code">
|
67
|
+
<span><%= registration_code_help_text %></span>
|
68
|
+
<span><strong><%= registration.code %></strong></span>
|
69
|
+
<div class="text-small"><%= registration_validation_state %></div>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
</div>
|
73
|
+
<% end %>
|
74
|
+
|
63
75
|
<% if meeting.services.any? %>
|
64
76
|
<div class="card card--list">
|
65
77
|
<% meeting.services.each do |service| %>
|
@@ -92,7 +104,7 @@ edit_link(
|
|
92
104
|
<%= t("transparent", scope: "decidim.meetings.types") %>
|
93
105
|
</span>
|
94
106
|
<% end %>
|
95
|
-
<p><%= decidim_sanitize(present(meeting).
|
107
|
+
<p><%= decidim_sanitize(present(meeting).description(links: true)) %></p>
|
96
108
|
<%= render partial: "decidim/shared/static_map", locals: { icon_name: "meetings", geolocalizable: meeting } %>
|
97
109
|
<%= render partial: "decidim/shared/tags", locals: { resource: meeting, tags_class_extra: "tags--meeting" } %>
|
98
110
|
</div>
|
@@ -117,6 +129,7 @@ edit_link(
|
|
117
129
|
</div>
|
118
130
|
<%= attachments_for meeting %>
|
119
131
|
<%= comments_for meeting %>
|
132
|
+
<%= pad_iframe_for meeting %>
|
120
133
|
|
121
134
|
<%= javascript_include_tag "decidim/proposals/social_share" %>
|
122
135
|
<%= stylesheet_link_tag "decidim/proposals/social_share" %>
|
data/config/locales/ca.yml
CHANGED
@@ -22,6 +22,7 @@ ca:
|
|
22
22
|
location_hints: Detalls d'ubicació
|
23
23
|
organizer_id: Organitzador
|
24
24
|
private_meeting: Trobada privada
|
25
|
+
registration_form_enabled: S'han habilitat les inscripcions
|
25
26
|
registration_terms: Termes i condicions de l'inscripció
|
26
27
|
registrations_enabled: Inscripcions obertes
|
27
28
|
start_time: Hora d'inici
|
@@ -81,6 +82,7 @@ ca:
|
|
81
82
|
announcement: Anunci
|
82
83
|
comments_enabled: Comentaris habilitats
|
83
84
|
default_registration_terms: Termes de registre per defecte
|
85
|
+
enable_pads_creation: Activar la creació de pads
|
84
86
|
resources_permissions_enabled: Es poden establir permisos d'accions per a cada trobada
|
85
87
|
step:
|
86
88
|
announcement: Anunci
|
@@ -88,15 +90,23 @@ ca:
|
|
88
90
|
events:
|
89
91
|
meetings:
|
90
92
|
meeting_closed:
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
93
|
+
affected_user:
|
94
|
+
email_intro: 'S''ha tancat la vostra reunió "%{resource_title}". Podeu llegir les conclusions de la seva pàgina:'
|
95
|
+
email_outro: Heu rebut aquesta notificació perquè heu organitzat la reunió "%{resource_title}".
|
96
|
+
email_subject: S'ha tancat la trobada "%{resource_title}"
|
97
|
+
notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
|
98
|
+
follower:
|
99
|
+
email_intro: 'La trobada de "%{resource_title}" ha estat tancada. Pots llegir les conclusions a la seva pàgina:'
|
100
|
+
email_outro: Heu rebut aquesta notificació perquè esteu seguint la reunió "%{resource_title}". Podeu deixar de seguir-lo des de l'enllaç anterior.
|
101
|
+
email_subject: S'ha tancat la trobada "%{resource_title}"
|
102
|
+
notification_title: La trobada de <a href="%{resource_path}">%{resource_title}</a> s'ha tancat.
|
95
103
|
meeting_created:
|
96
104
|
email_intro: S'ha afegit la trobada "%{resource_title}" a l'espai "%{participatory_space_title}" que estàs seguint.
|
97
105
|
email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
|
98
106
|
email_subject: Nova trobada a %{participatory_space_title}
|
99
107
|
notification_title: S'ha afegit la trobada <a href="%{resource_path}">%{resource_title}</a> a %{participatory_space_title}
|
108
|
+
meeting_registration_confirmed:
|
109
|
+
notification_title: S'ha confirmat el vostre registre per a la reunió <a href="%{resource_url}">%{resource_title}</a> . El vostre codi de registre és %{registration_code}.
|
100
110
|
meeting_registrations_over_percentage:
|
101
111
|
email_intro: La disponibilitat d'espais a la trobada "%{resource_title}" està per sobre del %{percentage}%.
|
102
112
|
email_outro: Has rebut aquesta notificació perquè ets un administrador de l'espai participatiu d'aquesta trobada.
|
@@ -108,9 +118,9 @@ ca:
|
|
108
118
|
email_subject: La trobada "%{resource_title}" s'ha actualitzat
|
109
119
|
notification_title: La trobada <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzada.
|
110
120
|
registration_code_validated:
|
111
|
-
email_intro: S'ha validat el teu codi
|
121
|
+
email_intro: S'ha validat el teu codi d'inscripció "%{registration_code}" per a la trobada "%{resource_title}".
|
112
122
|
email_outro: Has rebut aquesta notificació perquè s'ha validat el teu codi de registre per a la trobada "%{resource_title}".
|
113
|
-
email_subject: S'ha validat el teu codi
|
123
|
+
email_subject: S'ha validat el teu codi d'inscripció "%{registration_code}" per a la trobada "%{resource_title}"
|
114
124
|
notification_title: S'ha validat el teu codi de registre "%{registration_code}" per a la trobada <a href="%{resource_path}">%{resource_title}</a>.
|
115
125
|
registrations_enabled:
|
116
126
|
email_intro: 'La trobada "%{resource_title}" ha activat inscripcions. Pots registrar-te a la seva pàgina:'
|
@@ -180,6 +190,7 @@ ca:
|
|
180
190
|
invalid: Hi ha hagut un problema en actualitzar aquesta agenda
|
181
191
|
success: L'agenda s'ha actualitzat correctament
|
182
192
|
exports:
|
193
|
+
meetings: Reunions
|
183
194
|
registrations: Inscripcions
|
184
195
|
invite_join_meeting_mailer:
|
185
196
|
invite:
|
@@ -269,8 +280,9 @@ ca:
|
|
269
280
|
form:
|
270
281
|
available_slots_help: Deixeu-lo a 0 si teniu espais il·limitats disponibles.
|
271
282
|
invites: Invitacions
|
283
|
+
registration_form: Formulari d'inscripció
|
272
284
|
registrations_count:
|
273
|
-
one: Hi ha hagut 1 inscripció.
|
285
|
+
one: Hi ha hagut %{count} 1 inscripció.
|
274
286
|
other: Hi ha hagut %{count} inscripcions.
|
275
287
|
reserved_slots_help: Deixa'l a 0 si no tens espais reservats
|
276
288
|
reserved_slots_less_than: Ha de ser inferior o igual que %{count}
|
@@ -297,6 +309,10 @@ ca:
|
|
297
309
|
minutes:
|
298
310
|
create: "%{user_name} ha creat l'acta de la reunió %{resource_name} a l'espai %{space_name}"
|
299
311
|
update: "%{user_name} va ha actualitzat l'acta de la reunió %{resource_name} a l'espai %{space_name}"
|
312
|
+
calendar_modal:
|
313
|
+
calendar_url: URL del calendari
|
314
|
+
close_window: Tanca la finestra
|
315
|
+
export_calendar: Exportar el calendari
|
300
316
|
conference_venues: Seus de les jornades
|
301
317
|
content_blocks:
|
302
318
|
upcoming_events:
|
@@ -338,7 +354,7 @@ ca:
|
|
338
354
|
filter_by: Filtra per
|
339
355
|
unfold: Desplegar
|
340
356
|
meeting_minutes:
|
341
|
-
meeting_minutes:
|
357
|
+
meeting_minutes: Minuts de trobada
|
342
358
|
related_information: Informació relacionada
|
343
359
|
meetings:
|
344
360
|
no_meetings_warning: No hi ha trobades que coincideixin amb el criteri de cerca o no hi ha cap trobada programada.
|
@@ -354,8 +370,12 @@ ca:
|
|
354
370
|
meeting_report: Informe de la trobada
|
355
371
|
no_slots_available: No hi ha lloc disponible
|
356
372
|
organizations: Llista d'organitzacions que han atès
|
373
|
+
registration_code_help_text: El vostre codi de registre
|
374
|
+
registration_state:
|
375
|
+
validated: VALIDAT
|
376
|
+
validation_pending: VALIDACIÓ PENDENT
|
357
377
|
remaining_slots:
|
358
|
-
one:
|
378
|
+
one: "%{count} plaça restant"
|
359
379
|
other: "%{count} places restants"
|
360
380
|
view: Veure
|
361
381
|
meetings_map:
|
@@ -399,6 +419,7 @@ ca:
|
|
399
419
|
transparent: Transparent
|
400
420
|
metrics:
|
401
421
|
meetings:
|
422
|
+
description: Nombre de trobades creades
|
402
423
|
object: trobades
|
403
424
|
title: Trobades
|
404
425
|
participatory_processes:
|
@@ -409,7 +430,7 @@ ca:
|
|
409
430
|
participatory_spaces:
|
410
431
|
highlighted_meetings:
|
411
432
|
past_meetings: Trobades anteriors
|
412
|
-
|
433
|
+
see_all: Veure tots (%{count})
|
413
434
|
upcoming_meetings: Properes trobades
|
414
435
|
upcoming_meeting_for_card:
|
415
436
|
upcoming_meeting: Propera reunió
|
data/config/locales/de.yml
CHANGED
@@ -22,6 +22,7 @@ de:
|
|
22
22
|
location_hints: Standorthinweise
|
23
23
|
organizer_id: Veranstalter
|
24
24
|
private_meeting: Privates Treffen
|
25
|
+
registration_form_enabled: Anmeldeformular aktiviert
|
25
26
|
registration_terms: Registrierungsbedingungen
|
26
27
|
registrations_enabled: Registrierungen aktiviert
|
27
28
|
start_time: Startzeit
|
@@ -81,6 +82,7 @@ de:
|
|
81
82
|
announcement: Ankündigung
|
82
83
|
comments_enabled: Kommentare aktiviert
|
83
84
|
default_registration_terms: Standard-Registrierungsbedingungen
|
85
|
+
enable_pads_creation: Aktivieren Sie die Pads-Erstellung
|
84
86
|
resources_permissions_enabled: Aktionsberechtigungen können für jedes Meeting festgelegt werden
|
85
87
|
step:
|
86
88
|
announcement: Ankündigung
|
@@ -88,15 +90,23 @@ de:
|
|
88
90
|
events:
|
89
91
|
meetings:
|
90
92
|
meeting_closed:
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
93
|
+
affected_user:
|
94
|
+
email_intro: 'Ihre Besprechung "%{resource_title}" wurde geschlossen. Sie können die Schlussfolgerungen von seiner Seite lesen:'
|
95
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie die Besprechung "%{resource_title}" organisiert haben.
|
96
|
+
email_subject: Das "%{resource_title}" Meeting wurde geschlossen
|
97
|
+
notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Treffen wurde geschlossen.
|
98
|
+
follower:
|
99
|
+
email_intro: 'Das "%{resource_title}" Meeting wurde geschlossen. Sie können die Schlussfolgerungen von seiner Seite lesen:'
|
100
|
+
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie die Besprechung "%{resource_title}" verfolgen. Sie können es aus dem vorherigen Link aufheben.
|
101
|
+
email_subject: Das "%{resource_title}" Meeting wurde geschlossen
|
102
|
+
notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Treffen wurde geschlossen.
|
95
103
|
meeting_created:
|
96
104
|
email_intro: Das Meeting "%{resource_title}" wurde zu "%{participatory_space_title}" hinzugefügt, dem Sie folgen.
|
97
105
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie "%{participatory_space_title}" folgen. Sie können es aus dem vorherigen Link aufheben.
|
98
106
|
email_subject: Neues Meeting wurde zu %{participatory_space_title}hinzugefügt
|
99
107
|
notification_title: Das Meeting <a href="%{resource_path}">%{resource_title}</a> wurde zu %{participatory_space_title}hinzugefügt
|
108
|
+
meeting_registration_confirmed:
|
109
|
+
notification_title: Ihre Anmeldung zum Meeting <a href="%{resource_url}">%{resource_title}</a> wurde bestätigt. Ihr Registrierungscode ist %{registration_code}.
|
100
110
|
meeting_registrations_over_percentage:
|
101
111
|
email_intro: Die "%{resource_title}" Sitzung belegte Slots sind über %{percentage}%.
|
102
112
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie ein Administrator des Teilnahmebereichs der Besprechung sind.
|
@@ -108,9 +118,9 @@ de:
|
|
108
118
|
email_subject: Das "%{resource_title}" Meeting wurde aktualisiert
|
109
119
|
notification_title: Das <a href="%{resource_path}">%{resource_title}</a> Meeting wurde aktualisiert.
|
110
120
|
registration_code_validated:
|
111
|
-
email_intro: Ihr Registrierungscode "%{registration_code}" wurde bestätigt.
|
121
|
+
email_intro: Ihr Registrierungscode "%{registration_code}" für das Meeting "%{resource_title}" wurde bestätigt.
|
112
122
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Ihr Registrierungscode für das Meeting "%{resource_title}" validiert wurde.
|
113
|
-
email_subject: Ihr Registrierungscode "%{registration_code}" wurde bestätigt
|
123
|
+
email_subject: Ihr Registrierungscode "%{registration_code}" für das Meeting "%{resource_title}" wurde bestätigt
|
114
124
|
notification_title: Ihr Registrierungscode "%{registration_code}" für das <a href="%{resource_path}">%{resource_title}</a> Meeting wurde bestätigt.
|
115
125
|
registrations_enabled:
|
116
126
|
email_intro: 'Das "%{resource_title}" Meeting hat Registrierungen ermöglicht. Sie können sich auf seiner Seite registrieren:'
|
@@ -180,6 +190,7 @@ de:
|
|
180
190
|
invalid: Beim Aktualisieren dieser Agenda ist ein Problem aufgetreten
|
181
191
|
success: Agenda erfolgreich aktualisiert
|
182
192
|
exports:
|
193
|
+
meetings: Treffen
|
183
194
|
registrations: Anmeldungen
|
184
195
|
invite_join_meeting_mailer:
|
185
196
|
invite:
|
@@ -269,9 +280,10 @@ de:
|
|
269
280
|
form:
|
270
281
|
available_slots_help: Belassen Sie es auf 0, wenn Sie unbegrenzte Plätze zur Verfügung haben.
|
271
282
|
invites: Lädt ein
|
283
|
+
registration_form: Anmeldeformular
|
272
284
|
registrations_count:
|
273
|
-
one: Es
|
274
|
-
other: Es
|
285
|
+
one: Es wurde %{count} registriert.
|
286
|
+
other: Es wurden %{count} Anmeldungen vorgenommen.
|
275
287
|
reserved_slots_help: Belassen Sie es auf 0, wenn Sie keine reservierten Slots haben
|
276
288
|
reserved_slots_less_than: Muss kleiner oder gleich %{count}
|
277
289
|
update:
|
@@ -297,6 +309,10 @@ de:
|
|
297
309
|
minutes:
|
298
310
|
create: "%{user_name} erstellt das Protokoll des Treffens %{resource_name} auf dem %{space_name} Feld"
|
299
311
|
update: "%{user_name} aktualisiert das Protokoll der Sitzung %{resource_name} auf den %{space_name} Feldern"
|
312
|
+
calendar_modal:
|
313
|
+
calendar_url: Kalender-URL
|
314
|
+
close_window: Fenster schließen
|
315
|
+
export_calendar: Kalender exportieren
|
300
316
|
conference_venues: Tagungsstätten
|
301
317
|
content_blocks:
|
302
318
|
upcoming_events:
|
@@ -354,8 +370,12 @@ de:
|
|
354
370
|
meeting_report: Gesprächsprotokoll
|
355
371
|
no_slots_available: Keine Steckplätze verfügbar
|
356
372
|
organizations: Teilnahme an Organisationen
|
373
|
+
registration_code_help_text: Ihr Registrierungscode
|
374
|
+
registration_state:
|
375
|
+
validated: GÜLTIG
|
376
|
+
validation_pending: Validierung ausstehend
|
357
377
|
remaining_slots:
|
358
|
-
one:
|
378
|
+
one: "%{count} Slot bleibt übrig"
|
359
379
|
other: "Noch %{count} Slots"
|
360
380
|
view: Aussicht
|
361
381
|
meetings_map:
|
@@ -399,6 +419,7 @@ de:
|
|
399
419
|
transparent: Transparent
|
400
420
|
metrics:
|
401
421
|
meetings:
|
422
|
+
description: Anzahl der erstellten Meetings
|
402
423
|
object: Treffen
|
403
424
|
title: Meetings
|
404
425
|
participatory_processes:
|
@@ -409,7 +430,6 @@ de:
|
|
409
430
|
participatory_spaces:
|
410
431
|
highlighted_meetings:
|
411
432
|
past_meetings: Vergangene Treffen
|
412
|
-
see_all_meetings: Alle Besprechungen anzeigen
|
413
433
|
upcoming_meetings: Bevorstehende Treffen
|
414
434
|
upcoming_meeting_for_card:
|
415
435
|
upcoming_meeting: Kommendes Treffen
|