radiant-event_calendar-extension 1.3.9 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/VERSION +1 -1
  2. data/app/controllers/events_controller.rb +19 -19
  3. data/app/models/event.rb +41 -30
  4. data/app/models/event_calendar_page.rb +5 -9
  5. data/app/views/admin/calendars/_form.html.haml +12 -12
  6. data/app/views/admin/calendars/edit.html.haml +2 -3
  7. data/app/views/admin/calendars/index.html.haml +9 -9
  8. data/app/views/admin/calendars/new.html.haml +3 -4
  9. data/app/views/admin/calendars/show.html.haml +6 -6
  10. data/app/views/admin/event_venues/_event_venue.html.haml +2 -2
  11. data/app/views/admin/event_venues/_form.html.haml +13 -13
  12. data/app/views/admin/event_venues/edit.html.haml +6 -6
  13. data/app/views/admin/event_venues/index.html.haml +9 -8
  14. data/app/views/admin/event_venues/new.html.haml +6 -6
  15. data/app/views/admin/event_venues/remove.html.haml +12 -11
  16. data/app/views/admin/events/_event.html.haml +1 -1
  17. data/app/views/admin/events/_form.html.haml +21 -20
  18. data/app/views/admin/events/edit.html.haml +2 -2
  19. data/app/views/admin/events/index.html.haml +12 -12
  20. data/app/views/admin/events/remove.html.haml +8 -9
  21. data/app/views/events/_event.html.haml +11 -8
  22. data/app/views/events/_faceting.html.haml +6 -13
  23. data/app/views/events/_minicalendar.html.haml +3 -3
  24. data/app/views/events/_views.html.haml +5 -4
  25. data/app/views/events/index.html.haml +9 -9
  26. data/config/locales/de.yml +213 -0
  27. data/config/locales/en.yml +212 -6
  28. data/event_calendar_extension.rb +12 -6
  29. data/lib/calendar_period.rb +23 -18
  30. data/lib/event_calendar_tags.rb +13 -7
  31. data/radiant-event_calendar-extension.gemspec +3 -2
  32. metadata +6 -5
@@ -2,26 +2,19 @@
2
2
  - if events.any? || continuing_events.any?
3
3
 
4
4
  %p.list_summary
5
- Showing
5
+ = t('event_page.showing')
6
6
  - if events.any?
7
7
  - paginated = true if events.respond_to? :total_entries
8
8
  - more_pages = true if paginated && events.total_pages >= 2
9
9
  - if paginated
10
10
  - if more_pages
11
- = events.offset + 1
12
- to
13
- = events.offset + events.length
14
- of
15
- = events.total_entries
16
- = pluralize(events.total_entries, "event")
11
+ = t('event_page.more_pages', :start => events.offset + 1,:end => events.offset + events.length )
12
+ = t('event_page.number_events',:count => events.total_entries)
17
13
  - else
18
- = events.count
19
- = pluralize(events.count, "event")
14
+ = t('event_page.number_events',:count => events.count)
20
15
 
21
16
  - elsif continuing_events.any?
22
- = continuing_events.count
23
- continuing
24
- = pluralize(continuing_events.count, "event")
25
-
17
+ = t('event_page.continuing_events',:count => continuing_events.count)
18
+
26
19
  = render :partial => 'events/defacet'
27
20
  = render :partial => 'events/views'
@@ -11,12 +11,12 @@
11
11
  %thead
12
12
  %tr
13
13
  %td.m
14
- = link_to '<', url_for_month(before), :title => "#{month_name(before.month)} #{before.year}", :class => 'previous'
14
+ = link_to '<', url_for_month(before), :title => (I18n.l before, :format => :calendar_period_minicalendar_title), :class => 'previous'
15
15
  %td{:colspan => 5}
16
16
  %h3
17
- = link_to_unless_current month_name(month), url_for_month(date)
17
+ = link_to_unless_current I18n.l(date, :format => :calendar_period_minicalendar_month), url_for_month(date)
18
18
  %td.m
19
- = link_to '>', url_for_month(after), :title => "#{month_name(after.month)} #{after.year}", :class => 'next'
19
+ = link_to '>', url_for_month(after), :title => (I18n.l after, :format => :calendar_period_minicalendar_title), :class => 'next'
20
20
  %tr
21
21
  - day_names.each do |d|
22
22
  %th.day_name{:scope => 'col'}
@@ -1,6 +1,7 @@
1
1
  %span.calendar_views
2
2
  %br
3
- Stay up to date with
4
- = link_to("RSS", calendar_url(calendar_parameters.merge(:format => :rss)))
5
- or
6
- = link_to("calendar feed", calendar_url(calendar_parameters.merge(:format => :ics, :protocol => 'webcal://', :only_path => false)))
3
+ = t('event_page.stay_up_to_date')
4
+ = link_to(t('event_page.rss'), calendar_url(calendar_parameters.merge(:format => :rss)))
5
+ = t('event_page.or')
6
+ = link_to(t('event_page.calendar_feed'), calendar_url(calendar_parameters.merge(:format => :ics, :protocol => 'webcal://', :only_path => false)))
7
+
@@ -6,23 +6,23 @@
6
6
  - if events.length < 5 && continuing_events.any?
7
7
  - if events.any?
8
8
  %h2.listheader
9
- = t('continuing_events')
9
+ = t('event_page.continuing_events_title')
10
10
  = render :partial => 'event', :collection => continuing_events
11
11
 
12
12
  - if events.empty? && continuing_events.empty?
13
13
  - if period
14
14
  %h2
15
- = t('sorry_no_events')
15
+ = t('event_page.sorry_no_events')
16
16
  = render :partial => 'events/defacet'
17
17
  - else
18
18
  %h2
19
- = t('sorry_no_events')
20
-
19
+ = t('event_page.sorry_no_upcoming_events')
20
+
21
21
  - content_for :continuing_events do
22
22
  - if continuing_events.any? && events.length >= 5
23
23
  #continuing
24
24
  %h3
25
- = t('continuing_events')
25
+ = t('event_page.continuing_events_title')
26
26
  %ul
27
27
  - continuing_events.each do |event|
28
28
  %li
@@ -31,13 +31,13 @@
31
31
  - else
32
32
  = event.title
33
33
  %span.detail
34
- = t('runs_until')
34
+ = t('event_page.runs_until')
35
35
  = event.last_day
36
36
  - if event.event_venue
37
- =t('at')
37
+ = t('event_page.at')
38
38
  = link_to event.event_venue.title, event.event_venue.url
39
39
  - elsif event.location
40
- = t('at')
40
+ = t('event_page.at')
41
41
  = event.location
42
42
 
43
43
  - content_for :calendar do
@@ -51,7 +51,7 @@
51
51
  = render :partial => 'faceting'
52
52
 
53
53
  - content_for :title do
54
- = t('pagetitle.calendar')
54
+ = t('event_page.calendar')
55
55
 
56
56
  - content_for :full_title do
57
57
  = t('events').titlecase
@@ -0,0 +1,213 @@
1
+ ---
2
+ de:
3
+ time:
4
+ formats:
5
+ calendar_period_description_week: "in der Kalenderwoche %U von %Y"
6
+ calendar_period_description_month: "im %B %Y"
7
+ calendar_period_description_year: "im Jahr %Y"
8
+ calendar_period_describe: "%d. %B"
9
+ calendar_period_describe_with_year: "%d. %B %Y"
10
+ calendar_period_describe_detailed: "%H:%M %d/%m/%Y"
11
+ calendar_period_minicalendar_title: "%B %Y"
12
+ calendar_period_minicalendar_month: "%B"
13
+ calendar_month: "%B"
14
+ calendar_short_month: "%b"
15
+ calendar_day_name: "%A"
16
+ calendar_day_of_month: "%d."
17
+ event_calendar_time_format: "%H:%M"
18
+ event_calendar_round_time_format: "%H"
19
+ date:
20
+ formats:
21
+ event_calendar_date_format: "%d. %B"
22
+ event_calendar_short_date_format: "%d/%m/%Y"
23
+ calendar_period_minicalendar_title: "%B %Y"
24
+ calendar_period_minicalendar_month: "%B"
25
+ calendar_month: "%B"
26
+ calendar_short_month: "%b"
27
+ calendar_day_name: "%A"
28
+ calendar_day_of_month: "%d."
29
+ refresh_calendar: "Kalender neu laden"
30
+ edit_calendar: "Kalender bearbeiten"
31
+ delete_calendar: "Kalender löschen"
32
+ really_delete_calendar: "Sind Sie sicher, dass Sie den Kalender %{name} löschen möchten?"
33
+ calendar: Kalender
34
+ calendars: Kalender
35
+ events: Ereignisse
36
+ locations: Orte
37
+ defaults:
38
+ cancel: Abbruch
39
+ or: oder
40
+ at: um
41
+ day: Tag
42
+ week: Woche
43
+ month: Monat
44
+ year: Jahr
45
+ forever: für immer
46
+ until: bis
47
+ for: Anzahl
48
+ calendar_admin:
49
+ defaults:
50
+ title: Kalender
51
+ index:
52
+ title: Kalender
53
+ new: Neuen Kalender anlegen
54
+ name: Name
55
+ url: URL (Kategorie/Slug)
56
+ last_refresh: Zuletzt neu geladen
57
+ auto_refresh: Automatisch neu laden?
58
+ yes: ja
59
+ no: nein
60
+ events: Ereignisse
61
+ new:
62
+ title: Neuer Kalender
63
+ header: Neuer Kalender
64
+ edit:
65
+ header: Kalender bearbeiten
66
+ show:
67
+ subscribe: diesen Kalender abonnieren
68
+ address: Adresse
69
+ username: Benutzername
70
+ password: Kennwort
71
+ detail_text: This may be part of a master calendar with several individual calendars. In that case there will be a different address that lets you access all the calendars at once. Wenn Sie unsicher sind, kontaktieren Sie bitte den Administrator.
72
+ no_events: Keine Ereignisse
73
+ actions:
74
+ refresh: Kalender neu laden
75
+ edit: Kalender bearbeiten
76
+ delete: Kalender löschen
77
+ confirm: Bitte bestätigen Sie das Löschen des Kalenders
78
+ form:
79
+ name: Name
80
+ subscription_url: Abonnement-URL (optional)
81
+ username: Benutzername
82
+ password: Kennwort
83
+ auto_refresh: Automatisch neu laden?
84
+ keywords: Stichwörter
85
+ more: mehr
86
+ description: Beschreibung
87
+ slug: Slug
88
+ category: Kategorie
89
+ event_admin:
90
+ defaults:
91
+ title: Ereignisse
92
+ index:
93
+ title: Ereignisse
94
+ new: Neues Ereignis anlegen
95
+ calendar: Kalender
96
+ time: Zeit
97
+ location: Ort
98
+ keywords: Stichwörter
99
+ modify: Bearbeiten
100
+ no_events: Keine Ereignisse gefunden
101
+ show_all: (alle anzeigen)
102
+ events: Ereignisse
103
+ new:
104
+ title: Neuer Kalender
105
+ header: Neuer Kalender
106
+ edit:
107
+ header: Ereignis bearbeiten
108
+ form:
109
+ new_location: neuen Ort hinzufügen
110
+ edit_location: Ort bearbeiten
111
+ choose_location: Einen Ort auswählen
112
+ description: Beschreibung
113
+ title: Bezeichnung
114
+ keywords: Stichwörter
115
+ calendar: Kalender
116
+ start: Beginn (Datum und Uhrzeit)
117
+ end: Ende (Datum und Uhrzeit)
118
+ event_url: Ereignis-URL
119
+ repeats: Wiederholt sich.
120
+ repeat_note: (Erzeugt mehrere, getrennte Ereignisse. Für Ereignisse, die sich über mehrere Tage erstrecken, brauchen nur das Start- und Endedatum entsprechend gesetzt werden.)
121
+ calendar_note: Kann benutzt werden, um die Ereignisse passend abzulegen. (optional)
122
+ all_day: Ganztagesereignis (ohne Uhrzeit)?
123
+ repeats_every: Wiederholt sich jede(n)
124
+ many_times: so oft
125
+ remove:
126
+ title: Ereignis löschen
127
+ message: Bitte bestätigen Sie das
128
+ submit: Löschen
129
+ warning: dauerhafte Löschen
130
+ event: des Ereignisses
131
+ event_venues_admin:
132
+ defaults:
133
+ title: Kalender
134
+ index:
135
+ title: Orte
136
+ place: Ort
137
+ address: Adresse
138
+ website: Webseite
139
+ modify: Ändern
140
+ no_places: Es gibt noch keine Orte im System. Bitte fügen Sie hier (oder beim Anlegen eines Ereignisses) einen neuen Ort hinzu.
141
+ new: Neuen Veranstaltungsort anlegen
142
+ event: Ereignis
143
+ remove: entfernen
144
+ edit:
145
+ title: Ort bearbeiten
146
+ description: Bitte beachten Sie, dass eine Änderung des Ortes die Anzeige jedes Ereignisses für diesen Ort beeinflusst
147
+ update: Ort aktualisieren
148
+ new:
149
+ title: Einen neuen Veranstaltungsort hinzufügen
150
+ text: Sie können auch bei Anlegen eines Ereignisses neue Orte eingeben.
151
+ create: Ort anlegen
152
+ form:
153
+ title: Ortsbezeichnung
154
+ choose: wählen Sie einen bestehenden Ort
155
+ choose_note: Änderungen an dieser Stelle beeinflussen alle Ereignisse an diesem Ort.
156
+ choose_list: aus der Liste auswählen
157
+ choose_before: Wenn Sie den Ort zuvor bereits verwendet haben, bitte
158
+ choose_after: um ihn überall zu aktualisieren.
159
+ keywords: Stichwörter
160
+ location_tag: Orts Angabe (wird für Google Maps verwendet!)
161
+ location_tag_note: Wird im Kalender-feed angezeigt. Kann eine Postleitzahl, geografische Position oder eine eindeutige Zeichenkette sein.
162
+ address: Adresse
163
+ postcode: Postleitzahl oder Koordinaten
164
+ postcode_note: Nur nötig, wenn die Adresse ungewöhnlich ist, oder sie das Ereignis an einer bestimmten Position in der Karte anzeigen wollen.
165
+ url: URL des Ortes
166
+ remove:
167
+ title: Entferne die Örtlichkeit
168
+ no_events: hat keine Ereignisse
169
+ event: Ereignis
170
+ confirm: Bitte bestätigen Sie das
171
+ warning: dauerhafte Entfernen
172
+ the_location: des Ortes
173
+ delete: Ort entfernen
174
+ associated: Es ist mit
175
+ remain: verknüpft, das im Kalender ohne Ort verbleibt.
176
+ event_page:
177
+ more_pages: "%{start}. bis %{end}. von"
178
+ events: Veranstaltungen
179
+ continuing_events_title: Wiederkehrende Veranstaltungen
180
+ runs_until: läuft bis
181
+ sorry_no_events: "Es gibt leider keine Veranstaltungen in diesem Zeitraum"
182
+ sorry_no_upcoming_events: "Es sind leider keine Veranstaltungen eingetragen"
183
+ stay_up_to_date: "am Laufenden bleiben mit"
184
+ rss: "RSS"
185
+ calendar_feed: "Kalender Feed"
186
+ or: or
187
+ at: "Ort: "
188
+ summarize_period_one_day: "den ganzen Tag, am %{date}"
189
+ summarize_period_all_day: "von %{from_date} bis %{to_date}"
190
+ summarize_period_within_day: "am %{date}, ab %{start_time} Uhr"
191
+ summarize_period_within_day_with_end_time: "am %{date}, von %{start_time} bis %{end_time} Uhr"
192
+ summarize_period_spanning_days: "vom %{date}, %{start_time} Uhr bis %{end_date} %{end_time} Uhr"
193
+ on_date: "am %{date}, um %{time} Uhr."
194
+ from_date: "ab dem %{date}."
195
+ all_day_on: "den ganzen Tag, am %{date}."
196
+ all_day: "den ganzen Tag."
197
+ coming_up: ""
198
+ showing: ""
199
+ in_calendars: "im %{calendars}"
200
+ description: "Anzeige für Kalender Daten"
201
+ number_events:
202
+ one: eine Veranstaltung
203
+ other: "%{count} Veranstaltungen"
204
+ continuing_events:
205
+ one: eine wiederkehrende Veranstaltung
206
+ other: "%{count} wiederkehrende Veranstaltungen"
207
+ calendar_period:
208
+ description_day: "am %{day}. %{monthname} %{year}"
209
+ onwards: "ab %{describe_start}"
210
+ until: "bis %{describe_finish}"
211
+ between: "zwischen %{describe_start} und %{describe_finish}"
212
+ inspect: "%{describe_start} bis %{describe_finish}"
213
+ to_s: "%{distance_of_time_in_words} seit %{start}"
@@ -1,11 +1,217 @@
1
+ ---
1
2
  en:
2
- at: "at"
3
- calendar: "calendar"
3
+ time:
4
+ formats:
5
+ calendar_period_description_week: "in week %U of %Y"
6
+ calendar_period_description_month: "in %B %Y"
7
+ calendar_period_description_year: "in %Y"
8
+ calendar_period_describe: "%d %B"
9
+ calendar_period_describe_with_year: "%d %B %Y"
10
+ calendar_period_describe_detailed: "%I:%M%p %d/%m/%Y"
11
+ calendar_period_minicalendar_title: "%B %Y"
12
+ calendar_period_minicalendar_month: "%B"
13
+ calendar_month: "%B"
14
+ calendar_short_month: "%b"
15
+ calendar_day_name: "%A"
16
+ calendar_day_of_month: "%d"
17
+ event_calendar_time_format: "%I:%M%p"
18
+ event_calendar_round_time_format: "%I%p"
19
+ date:
20
+ formats:
21
+ event_calendar_date_format: "%d %B"
22
+ event_calendar_short_date_format: "%d/%m/%Y"
23
+ calendar_period_minicalendar_title: "%B %Y"
24
+ calendar_period_minicalendar_month: "%B"
25
+ calendar_month: "%B"
26
+ calendar_short_month: "%b"
27
+ calendar_day_name: "%A"
28
+ calendar_day_of_month: "%d"
4
29
  refresh_calendar: "refresh calendar"
5
30
  edit_calendar: "edit calendar"
6
31
  delete_calendar: "delete calendar"
7
32
  really_delete_calendar: "Are you sure you want to delete the %{name} calendar?"
8
- sorry_no_events: "Sorry: there are no events to display"
9
- runs_until: "runs until"
10
- events: "events"
11
- pagetitle.calendar: "Calendar"
33
+ calendar: calendar
34
+ calendars: calendars
35
+ events: events
36
+ locations: locations
37
+ defaults:
38
+ cancel: Cancel
39
+ or: or
40
+ at: at
41
+ day: day
42
+ week: week
43
+ month: month
44
+ year: year
45
+ forever: forever
46
+ until: until
47
+ for: for
48
+ calendar_admin:
49
+ defaults:
50
+ title: Calendar
51
+ index:
52
+ title: Calendars
53
+ new: new calendar
54
+ name: Name
55
+ url: URL (category/slug)
56
+ last_refresh: Last Refresh
57
+ auto_refresh: Refresh automatically?
58
+ yes: yes
59
+ no: no
60
+ events: events
61
+ new:
62
+ title: New calendar
63
+ header: New Calendar
64
+ edit:
65
+ header: Edit Calendar
66
+ show:
67
+ subscribe: subscribe to this calendar
68
+ address: address
69
+ username: username
70
+ password: password
71
+ detail_text: This may be part of a master calendar with several individual calendars. In that case there will be a different address that lets you access all the calendars at once. Consult your site administrator if unsure.
72
+ no_events: No Events
73
+ actions:
74
+ refresh: Refresh calendar
75
+ edit: Edit calendar
76
+ delete: Delete calendar
77
+ confirm: Are you sure you want to delete the
78
+ form:
79
+ name: Name
80
+ subscription_url: Subscription url (optional)
81
+ username: Username
82
+ password: Password
83
+ auto_refresh: Refresh automatically?
84
+ keywords: Keywords
85
+ more: more
86
+ description: Description
87
+ slug: Slug
88
+ category: Category
89
+ event_admin:
90
+ defaults:
91
+ title: Calendar
92
+ index:
93
+ title: Events
94
+ new: new event
95
+ calendar: Calendar
96
+ time: Time
97
+ location: Location
98
+ keywords: Keywords
99
+ modify: Modify
100
+ no_events: No events to display
101
+ show_all: (show all)
102
+ events: Events
103
+ new:
104
+ title: New calendar
105
+ header: New Calendar
106
+ edit:
107
+ header: Edit Event
108
+ form:
109
+ new_location: add a new location
110
+ edit_location: edit this location
111
+ choose_location: Choose a location
112
+ description: Description
113
+ title: Title
114
+ keywords: Keywords
115
+ calendar: Calendar
116
+ start: Start date and time
117
+ end: end date and time
118
+ event_url: Event url
119
+ repeat_note: (this is for separate similar events. For events that span several days you only need to set the start and end.)
120
+ calendar_note: This is optional but can be used to file your events or to mix local events into a subscribed calendar.
121
+ all_day: All-day event?
122
+ repeats: Repeats
123
+ repeats_every: Repeats every
124
+ many_time: this many times
125
+ remove:
126
+ title: Delete event
127
+ message: Are you sure you want to
128
+ submit: Delete
129
+ warning: permanently remove
130
+ event: the event
131
+ event_venues_admin:
132
+ defaults:
133
+ title: Calendar
134
+ index:
135
+ title: Locations
136
+ place: Place
137
+ address: Address
138
+ website: Website
139
+ modify: Modify
140
+ no_places: No places in the system yet. You can create one here or when you add an event.
141
+ new: new venue
142
+ event: event
143
+ remove: remove
144
+ edit:
145
+ title: Edit Location
146
+ description: Remember that changes you make here will affect the display of every event in this location.
147
+ update: Update Venue
148
+ new:
149
+ title: Add an event location
150
+ text: You can also do this whenever you enter a new event.
151
+ create: Create Venue
152
+ form:
153
+ title: Venue or location title
154
+ choose: choose an existing place
155
+ choose_note: We remember these details for you, so changes here affect every event occurring in this place
156
+ choose_list: choose it from the list
157
+ choose_before: If you've used this place before, please
158
+ choose_after: so that you can update it globally
159
+ keywords: Keywords
160
+ location_tag: Location tag
161
+ location_tag_note: This is used to recognise the venue in a calendar feed. It can be postcode, grid reference or any distinctive string.
162
+ address: Address or directions
163
+ postcode: Postcode or grid reference
164
+ postcode_note: This is only required if your address is unusual or you want these events to show on a map in a particular place.
165
+ url: Location url
166
+ remove:
167
+ title: Remove location
168
+ no_events: It has no events.
169
+ event: event
170
+ confirm: Are you sure you want to
171
+ warning: permanently remove
172
+ the_location: the location
173
+ delete: Delete location
174
+ associated: It is associated with
175
+ remain: that will remain in the calendar without a location
176
+ event_page:
177
+ calendar: Calendar
178
+ more_pages: "%{start} to %{end} of"
179
+ more_pages_to:
180
+ events: Events
181
+ continuing_events_title: Continuing events
182
+ runs_until: runs until
183
+ sorry_no_events: "Sorry: there are no events"
184
+ sorry_no_upcoming_events: "Sorry: there are no events coming up"
185
+ stay_up_to_date: "stay up to date"
186
+ rss: "RSS"
187
+ calendar_feed: "calendar feed"
188
+ or: or
189
+ at: at
190
+ summarize_period_one_day: "all day on %{date}"
191
+ summarize_period_all_day: "from %{from_date} to %{to_date}"
192
+ summarize_period_within_day: "%{start_time} on %{date}"
193
+ summarize_period_within_day_with_end_time: "%{start_time} to %{end_time} on %{date}"
194
+ summarize_period_spanning_days: "%{start_time} on %{date} to %{end_time} on %{end_date}"
195
+ on_date: "%{time} on %{date}"
196
+ from_date: "from %{date}"
197
+ all_day_on: "all day on %{date}"
198
+ all_day: "all day"
199
+ coming_up: "coming up"
200
+ showing: Showing
201
+ in_calendars: "in %{calendars}"
202
+ description: "Create a viewer for calendar data. "
203
+ number_events:
204
+ one: 1 event
205
+ other: "%{count} events"
206
+ continuing_events:
207
+ one: 1 continuing event
208
+ other: "%{count} continuing events"
209
+ calendar_period:
210
+ description_day: "on %{day} %{monthname} %{year}"
211
+ onwards: "from %{describe_start} onwards"
212
+ until: "until %{describe_finish}"
213
+ between: "between %{describe_start} and %{describe_finish}"
214
+ inspect: "%{describe_start} to %{describe_finish}"
215
+ to_s: "%{distance_of_time_in_words} from %{start}"
216
+
217
+