decidim-meetings 0.26.2 → 0.26.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/commands/decidim/meetings/join_meeting.rb +11 -2
- data/app/controllers/decidim/meetings/directory/meetings_controller.rb +2 -1
- data/app/controllers/decidim/meetings/meetings_controller.rb +3 -2
- data/app/helpers/decidim/meetings/application_helper.rb +5 -7
- data/app/helpers/decidim/meetings/directory/application_helper.rb +5 -7
- data/app/models/decidim/meetings/agenda_item.rb +1 -1
- data/app/models/decidim/meetings/meeting.rb +5 -2
- data/app/views/decidim/meetings/directory/meetings/_filters.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/_filters.html.erb +1 -1
- data/app/views/decidim/meetings/meetings/index.js.erb +6 -0
- data/config/locales/cs.yml +4 -4
- data/config/locales/de.yml +56 -0
- data/config/locales/es-MX.yml +1 -1
- data/config/locales/es-PY.yml +1 -1
- data/config/locales/es.yml +1 -1
- data/config/locales/hu.yml +145 -0
- data/config/locales/lt.yml +674 -0
- data/config/locales/nl.yml +81 -48
- data/config/locales/oc-FR.yml +1 -0
- data/config/locales/pl.yml +3 -1
- data/config/locales/sv.yml +4 -0
- data/lib/decidim/meetings/component.rb +2 -2
- data/lib/decidim/meetings/version.rb +1 -1
- metadata +15 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b48196f783869c2445a9a77fb0165993387afdedc39f68810e2e283b0ac7b6ec
|
4
|
+
data.tar.gz: 6a1a0aa182b12070721adf374b69cd60bfd5bb26ee6b414f17091f99f079a145
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a29b8d8ab0101382536ac4c65b1d9e7c40723c5ba29c18a5817bfe60e394b5fc192ed1ce7e119414c67f04e77f4b5de62424e078282af0aa1c5aba04c5a5970
|
7
|
+
data.tar.gz: 66e260950f4d2c55964d424c93a97646d534fb12d135afceacefb5523a32718b7f471a145b2f8a2f56f0919ba8b45e5dd23e4333ca632e7fa0fa5dda2b0528d3
|
@@ -25,7 +25,8 @@ module Decidim
|
|
25
25
|
return broadcast(:invalid) unless can_join_meeting?
|
26
26
|
return broadcast(:invalid_form) unless registration_form.valid?
|
27
27
|
|
28
|
-
answer_questionnaire
|
28
|
+
return broadcast(:invalid) if answer_questionnaire == :invalid
|
29
|
+
|
29
30
|
create_registration
|
30
31
|
accept_invitation
|
31
32
|
send_email_confirmation
|
@@ -48,7 +49,15 @@ module Decidim
|
|
48
49
|
def answer_questionnaire
|
49
50
|
return unless questionnaire?
|
50
51
|
|
51
|
-
Decidim::Forms::AnswerQuestionnaire.call(registration_form, user, meeting.questionnaire)
|
52
|
+
Decidim::Forms::AnswerQuestionnaire.call(registration_form, user, meeting.questionnaire) do
|
53
|
+
on(:ok) do
|
54
|
+
return :valid
|
55
|
+
end
|
56
|
+
|
57
|
+
on(:invalid) do
|
58
|
+
return :invalid
|
59
|
+
end
|
60
|
+
end
|
52
61
|
end
|
53
62
|
|
54
63
|
def create_registration
|
@@ -25,7 +25,8 @@ module Decidim
|
|
25
25
|
private
|
26
26
|
|
27
27
|
def meetings
|
28
|
-
|
28
|
+
is_past_meetings = params.dig("filter", "date")&.include?("past")
|
29
|
+
@meetings ||= paginate(search.results.order(start_time: is_past_meetings ? :desc : :asc))
|
29
30
|
end
|
30
31
|
|
31
32
|
def search_klass
|
@@ -108,7 +108,8 @@ module Decidim
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def meetings
|
111
|
-
|
111
|
+
is_past_meetings = params.dig("filter", "date")&.include?("past")
|
112
|
+
@meetings ||= paginate(search.results.order(start_time: is_past_meetings ? :desc : :asc))
|
112
113
|
end
|
113
114
|
|
114
115
|
def registration
|
@@ -126,7 +127,7 @@ module Decidim
|
|
126
127
|
def default_filter_params
|
127
128
|
{
|
128
129
|
search_text: "",
|
129
|
-
date:
|
130
|
+
date: "upcoming",
|
130
131
|
activity: "all",
|
131
132
|
scope_id: default_filter_scope_params,
|
132
133
|
category_id: default_filter_category_params,
|
@@ -41,13 +41,11 @@ module Decidim
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def filter_date_values
|
44
|
-
|
45
|
-
|
46
|
-
[
|
47
|
-
|
48
|
-
|
49
|
-
]
|
50
|
-
)
|
44
|
+
[
|
45
|
+
["all", t("decidim.meetings.meetings.filters.date_values.all")],
|
46
|
+
["upcoming", t("decidim.meetings.meetings.filters.date_values.upcoming")],
|
47
|
+
["past", t("decidim.meetings.meetings.filters.date_values.past")]
|
48
|
+
]
|
51
49
|
end
|
52
50
|
|
53
51
|
# Options to filter meetings by activity.
|
@@ -27,13 +27,11 @@ module Decidim
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def filter_date_values
|
30
|
-
|
31
|
-
|
32
|
-
[
|
33
|
-
|
34
|
-
|
35
|
-
]
|
36
|
-
)
|
30
|
+
[
|
31
|
+
["all", t("decidim.meetings.meetings.filters.date_values.all")],
|
32
|
+
["upcoming", t("decidim.meetings.meetings.filters.date_values.upcoming")],
|
33
|
+
["past", t("decidim.meetings.meetings.filters.date_values.past")]
|
34
|
+
]
|
37
35
|
end
|
38
36
|
|
39
37
|
def directory_filter_scopes_values
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
|
12
12
|
translatable_fields :title, :description
|
13
13
|
|
14
|
-
belongs_to :agenda,
|
14
|
+
belongs_to :agenda, foreign_key: "decidim_agenda_id", class_name: "Decidim::Meetings::Agenda"
|
15
15
|
|
16
16
|
has_many :agenda_item_children, foreign_key: "parent_id", class_name: "Decidim::Meetings::AgendaItem", inverse_of: :parent, dependent: :destroy
|
17
17
|
belongs_to :parent, class_name: "Decidim::Meetings::AgendaItem", inverse_of: :agenda_item_children, optional: true
|
@@ -63,9 +63,12 @@ module Decidim
|
|
63
63
|
scope :visible_meeting_for, lambda { |user|
|
64
64
|
(all.distinct if user&.admin?) ||
|
65
65
|
if user.present?
|
66
|
-
spaces = Decidim.participatory_space_registry.manifests.
|
66
|
+
spaces = Decidim.participatory_space_registry.manifests.filter_map do |manifest|
|
67
|
+
table_name = manifest.model_class_name.constantize.try(:table_name)
|
68
|
+
next if table_name.blank?
|
69
|
+
|
67
70
|
{
|
68
|
-
name:
|
71
|
+
name: table_name.singularize,
|
69
72
|
class_name: manifest.model_class_name
|
70
73
|
}
|
71
74
|
end
|
@@ -15,7 +15,7 @@
|
|
15
15
|
</div>
|
16
16
|
|
17
17
|
<% unless @forced_past_meetings %>
|
18
|
-
<%= form.
|
18
|
+
<%= form.collection_radio_buttons :date, filter_date_values, :first, :last, legend_title: t("decidim.meetings.meetings.filters.date") %>
|
19
19
|
<% end %>
|
20
20
|
|
21
21
|
<%= form.check_boxes_tree :type, filter_type_values, legend_title: t("decidim.meetings.meetings.filters.type") %>
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<%= form.hidden_field "state", value: params.dig("filter", "state") %>
|
18
18
|
|
19
19
|
<% unless @forced_past_meetings %>
|
20
|
-
<%= form.
|
20
|
+
<%= form.collection_radio_buttons :date, filter_date_values, :first, :last, legend_title: t(".date") %>
|
21
21
|
<% end %>
|
22
22
|
|
23
23
|
<%= form.check_boxes_tree :type, filter_type_values, legend_title: t(".type") %>
|
@@ -1,12 +1,18 @@
|
|
1
1
|
var $meetings = $('#meetings');
|
2
2
|
var $meetingsCount = $('#meetings-count');
|
3
3
|
|
4
|
+
// make sure that calendar modal will use the updated filter values
|
5
|
+
var $calendarShare = $('#calendarShare');
|
6
|
+
$calendarShare.remove();
|
7
|
+
|
4
8
|
$meetings.html('<%= j(render partial: "meetings").strip.html_safe %>');
|
5
9
|
$meetingsCount.html('<%= j(render partial: "count").strip.html_safe %>');
|
6
10
|
|
7
11
|
var $dropdownMenu = $('.dropdown.menu', $meetings);
|
8
12
|
$dropdownMenu.foundation();
|
9
13
|
|
14
|
+
$("#calendarShare").foundation(); // initialize export calendar on the page
|
15
|
+
|
10
16
|
var markerData = JSON.parse('<%= escape_javascript meetings_data_for_map(search.results.select(&:geocoded_and_valid?)).to_json.html_safe %>');
|
11
17
|
|
12
18
|
var $map = $("#map");
|
data/config/locales/cs.yml
CHANGED
@@ -35,7 +35,7 @@ cs:
|
|
35
35
|
registration_terms: Podmínky registrace
|
36
36
|
registration_url: URL registrace
|
37
37
|
registrations_enabled: Registrace povoleny
|
38
|
-
show_embedded_iframe: Zobrazit
|
38
|
+
show_embedded_iframe: Zobrazit vložený iframe pro tuto URL
|
39
39
|
start_time: Čas zahájení
|
40
40
|
title: Název
|
41
41
|
transparent: Transparentní
|
@@ -164,7 +164,7 @@ cs:
|
|
164
164
|
meeting_registration_confirmed:
|
165
165
|
notification_title: Vaše registrace pro schůzku <a href="%{resource_url}">%{resource_title}</a> byla potvrzena. Váš registrační kód je %{registration_code}.
|
166
166
|
meeting_registrations_over_percentage:
|
167
|
-
email_intro:
|
167
|
+
email_intro: Přidělených míst pro schůzku "%{resource_title}" je více než %{percentage}%.
|
168
168
|
email_outro: Toto oznámení jste obdrželi, protože jste administrátor participačního prostoru schůzky.
|
169
169
|
email_subject: Schůzky obsazené schůzkou "%{resource_title}" jsou nad %{percentage}%
|
170
170
|
notification_title: Počet obsazených slotů <a href="%{resource_path}">%{resource_title}</a> je vyšší než %{percentage}%.
|
@@ -190,7 +190,7 @@ cs:
|
|
190
190
|
notification_title: Setkání <a href="%{resource_path}">%{resource_title}</a> bude zahájeno za méně než 48 hodin.
|
191
191
|
forms:
|
192
192
|
meetings:
|
193
|
-
attendees_count_help_text: Nezapomeňte uvést celkový počet účastníků na vaší schůzce, ať už osobn
|
193
|
+
attendees_count_help_text: Nezapomeňte uvést celkový počet účastníků na vaší schůzce, ať už osobní, online nebo smíšené.
|
194
194
|
gamification:
|
195
195
|
badges:
|
196
196
|
attended_meetings:
|
@@ -228,7 +228,7 @@ cs:
|
|
228
228
|
agenda_item:
|
229
229
|
add_agenda_item_child: Přidání položky agendy dítěte
|
230
230
|
agenda_item: Položka agendy
|
231
|
-
agenda_item_children:
|
231
|
+
agenda_item_children: Dílčí body programu
|
232
232
|
down: Dolů
|
233
233
|
remove: Odstranit
|
234
234
|
up: Nahoru
|
data/config/locales/de.yml
CHANGED
@@ -23,6 +23,7 @@ de:
|
|
23
23
|
decidim_user_group_id: Benutzergruppe
|
24
24
|
description: Beschreibung
|
25
25
|
end_time: Endzeit
|
26
|
+
id: ID
|
26
27
|
location: Ort
|
27
28
|
location_hints: Standorthinweise
|
28
29
|
online_meeting_url: Online Meeting URL
|
@@ -34,6 +35,7 @@ de:
|
|
34
35
|
registration_terms: Registrierungsbedingungen
|
35
36
|
registration_url: Registrierungs-URL
|
36
37
|
registrations_enabled: Registrierungen aktiviert
|
38
|
+
show_embedded_iframe: Eingebetteten Iframe für diese URL anzeigen
|
37
39
|
start_time: Startzeit
|
38
40
|
title: Titel
|
39
41
|
transparent: Transparent
|
@@ -71,6 +73,13 @@ de:
|
|
71
73
|
admin:
|
72
74
|
filters:
|
73
75
|
meetings:
|
76
|
+
category_id_eq:
|
77
|
+
label: Kategorie
|
78
|
+
closed_at_present:
|
79
|
+
label: Status
|
80
|
+
values:
|
81
|
+
'false': Offen
|
82
|
+
'true': Geschlossen
|
74
83
|
is_upcoming_true:
|
75
84
|
label: Datum
|
76
85
|
values:
|
@@ -87,6 +96,7 @@ de:
|
|
87
96
|
type_eq:
|
88
97
|
label: Art des Treffens
|
89
98
|
values:
|
99
|
+
hybrid: Hybrid
|
90
100
|
in_person: Persönlich
|
91
101
|
online: Online
|
92
102
|
meeting_copies:
|
@@ -100,6 +110,7 @@ de:
|
|
100
110
|
components:
|
101
111
|
meetings:
|
102
112
|
actions:
|
113
|
+
comment: Kommentar
|
103
114
|
join: Beitreten
|
104
115
|
name: Meetings
|
105
116
|
settings:
|
@@ -110,6 +121,7 @@ de:
|
|
110
121
|
creation_enabled_for_participants: Teilnehmer können Besprechungen erstellen
|
111
122
|
default_registration_terms: Standard-Registrierungsbedingungen
|
112
123
|
enable_pads_creation: Aktivieren Sie die Pads-Erstellung
|
124
|
+
maps_enabled: Karten aktiviert
|
113
125
|
registration_code_enabled: Registrierungscode aktiviert
|
114
126
|
resources_permissions_enabled: Aktionsberechtigungen können für jedes Meeting festgelegt werden
|
115
127
|
scope_id: Bereich
|
@@ -134,6 +146,7 @@ de:
|
|
134
146
|
email_subject: Die Sitzung "%{resource_title}" wurde geschlossen
|
135
147
|
notification_title: Die Sitzung <a href="%{resource_path}">%{resource_title}</a> wurde geschlossen.
|
136
148
|
meeting_created:
|
149
|
+
button_text: Für das Treffen anmelden
|
137
150
|
email_intro: Die Sitzung "%{resource_title}" wurde zu "%{participatory_space_title}" hinzugefügt, welchem Sie folgen.
|
138
151
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie "%{participatory_space_title}" folgen. Falls Sie keine solchen Benachrichtigungen mehr erhalten möchten, besuchen Sie den obigen Link.
|
139
152
|
email_subject: Neue Sitzung zu %{participatory_space_title} hinzugefügt
|
@@ -165,6 +178,9 @@ de:
|
|
165
178
|
email_outro: Sie haben diese Benachrichtigung erhalten, weil Sie der Sitzung "%{resource_title}" folgen. Falls Sie keine solchen Benachrichtigungen mehr erhalten möchten, besuchen Sie den obigen Link.
|
166
179
|
email_subject: Die Sitzung "%{resource_title}" beginnt in weniger als 48 Stunden.
|
167
180
|
notification_title: Die Sitzung <a href="%{resource_path}">%{resource_title}</a> beginnt in weniger als 48 Stunden.
|
181
|
+
forms:
|
182
|
+
meetings:
|
183
|
+
attendees_count_help_text: Vergessen Sie nicht, die Gesamtzahl der Teilnehmer an Ihrem Meeting anzugeben, egal ob dies persönlich, online oder hybrid stattgefunden hat.
|
168
184
|
gamification:
|
169
185
|
badges:
|
170
186
|
attended_meetings:
|
@@ -190,6 +206,7 @@ de:
|
|
190
206
|
proposals_count:
|
191
207
|
one: 'Die Besprechung kann nicht gelöscht werden, da %{count} Vorschlag mit dieser verbunden ist:'
|
192
208
|
other: 'Die Besprechung kann nicht gelöscht werden, da %{count} Vorschläge mit dieser verbunden sind:'
|
209
|
+
manage_poll: Umfrage verwalten
|
193
210
|
new: Neue Sitzung
|
194
211
|
preview: Vorschau
|
195
212
|
registrations: Anmeldungen
|
@@ -226,6 +243,7 @@ de:
|
|
226
243
|
invalid: Beim Aktualisieren dieser Agenda ist ein Problem aufgetreten
|
227
244
|
success: Agenda erfolgreich aktualisiert
|
228
245
|
exports:
|
246
|
+
answers: Antworten
|
229
247
|
meeting_comments: Kommentare
|
230
248
|
meetings: Treffen
|
231
249
|
registrations: Anmeldungen
|
@@ -260,6 +278,9 @@ de:
|
|
260
278
|
edit:
|
261
279
|
close: Schließen
|
262
280
|
title: Sitzung beenden
|
281
|
+
meeting_copies:
|
282
|
+
form:
|
283
|
+
select_a_meeting_type: Bitte eine Meeting-Typ auswählen
|
263
284
|
meetings:
|
264
285
|
close:
|
265
286
|
invalid: Beim Schließen dieses Meetings ist ein Problem aufgetreten
|
@@ -312,6 +333,9 @@ de:
|
|
312
333
|
update:
|
313
334
|
invalid: Beim Aktualisieren dieses Meetings ist ein Problem aufgetreten
|
314
335
|
success: Sitzung erfolgreich aktualisiert
|
336
|
+
meetings_poll:
|
337
|
+
form:
|
338
|
+
title: Fragebogen für %{questionnaire_for} bearbeiten
|
315
339
|
models:
|
316
340
|
meeting:
|
317
341
|
name: Treffen
|
@@ -410,6 +434,8 @@ de:
|
|
410
434
|
apple: Zu Apple Kalender hinzufügen
|
411
435
|
close_window: Fenster schließen
|
412
436
|
full_details_html: Für alle Details gehen Sie zu %{link}
|
437
|
+
google: Zum Google-Kalender hinzufügen
|
438
|
+
outlook: Zum Outlook-Kalender hinzufügen
|
413
439
|
count:
|
414
440
|
meetings_count:
|
415
441
|
one: "%{count} Besprechung"
|
@@ -442,6 +468,7 @@ de:
|
|
442
468
|
type: Art
|
443
469
|
type_values:
|
444
470
|
all: Alle
|
471
|
+
hybrid: Hybrid
|
445
472
|
in_person: Persönlich
|
446
473
|
online: Online
|
447
474
|
filters_small_view:
|
@@ -463,7 +490,10 @@ de:
|
|
463
490
|
select_a_registration_type: Bitte wählen Sie eine Registrierungsart aus
|
464
491
|
show_embedded_iframe_help: Nur wenige Dienste erlauben das Einbetten einer Veranstaltung oder eines Livestreams (Youtube, Twitch und Jitsi)
|
465
492
|
index:
|
493
|
+
click_here: Alle Treffen anzeigen
|
466
494
|
new_meeting: Neue Besprechung
|
495
|
+
see_all: Alle Treffen anzeigen
|
496
|
+
see_all_withdrawn: Alle zurückgezogenen Treffen ansehen
|
467
497
|
meeting_minutes:
|
468
498
|
related_information: Zugehörige Informationen
|
469
499
|
meetings:
|
@@ -487,6 +517,9 @@ de:
|
|
487
517
|
join: Tritt dem Treffen bei
|
488
518
|
leave: Registrierung stornieren
|
489
519
|
leave_confirmation: Sind Sie sicher dass Sie Ihre Registrierung für diese Sitzung stornieren möchten?
|
520
|
+
link_available_soon: Link in Kürze verfügbar
|
521
|
+
link_closed: Der Link, um an dem Treffen teilzunehmen, wird einige Minuten vor dem Start verfügbar sein
|
522
|
+
live_event: Dieses Meeting findet gerade statt
|
490
523
|
meeting_minutes: Sitzungsprotokolle
|
491
524
|
no_slots_available: Keine Steckplätze verfügbar
|
492
525
|
organizations: Teilnahme an Organisationen
|
@@ -498,6 +531,9 @@ de:
|
|
498
531
|
one: "%{count} Slot bleibt übrig"
|
499
532
|
other: "Noch %{count} Slots"
|
500
533
|
view: Anzeigen
|
534
|
+
visit_finished: Vergangene Treffen anzeigen
|
535
|
+
withdraw_btn_hint: Sie können Ihr Treffen zurückziehen, wenn Sie Ihre Meinung ändern. Das Meeting wird nicht gelöscht, es wird in der Liste der zurückgezogenen Meetings angezeigt.
|
536
|
+
withdraw_meeting: Treffen zurückziehen
|
501
537
|
update:
|
502
538
|
invalid: Beim Aktualisieren der Besprechung ist ein Fehler aufgetreten.
|
503
539
|
success: Sie haben die Sitzung erfolgreich aktualisiert.
|
@@ -518,15 +554,32 @@ de:
|
|
518
554
|
fields:
|
519
555
|
closed: Geschlossen
|
520
556
|
end_time: Endtermin
|
557
|
+
id: ID
|
521
558
|
map: Karte
|
522
559
|
official_meeting: Offizielle Besprechung
|
523
560
|
start_time: Anfangsdatum
|
524
561
|
title: Titel
|
525
562
|
polls:
|
526
563
|
questions:
|
564
|
+
index:
|
565
|
+
empty_questions: Während dieses Treffens werden einige Fragen gesendet und Sie werden sie beantworten können. Sie werden hier angezeigt.
|
566
|
+
index_admin:
|
567
|
+
admin_dashboard: Administrations-Dashboard
|
568
|
+
edit: Im Adminbereich bearbeiten
|
569
|
+
question: Frage
|
570
|
+
received_answer: Antwort erhalten
|
571
|
+
received_answers: erhaltene Antworten
|
572
|
+
results: Ergebnisse
|
573
|
+
send: Senden
|
574
|
+
sent: Gesendet
|
527
575
|
published_question:
|
576
|
+
max_choices_alert: Es wurden zu viele Auswahlmöglichkeiten ausgewählt
|
528
577
|
question: Frage
|
529
578
|
question_replied: Frage beantwortet
|
579
|
+
public_participants_list:
|
580
|
+
hidden_participants_count:
|
581
|
+
one: und %{count} weitere Person
|
582
|
+
other: und %{count} weitere Personen
|
530
583
|
read_more: "(Weiterlesen)"
|
531
584
|
registration_mailer:
|
532
585
|
confirmation:
|
@@ -548,14 +601,17 @@ de:
|
|
548
601
|
invalid: Beim Verlassen dieses Meetings ist ein Problem aufgetreten.
|
549
602
|
success: Sie haben das Meeting erfolgreich verlassen.
|
550
603
|
type_of_meeting:
|
604
|
+
hybrid: Hybrid
|
551
605
|
in_person: In Person
|
552
606
|
online: Online
|
553
607
|
types:
|
554
608
|
private_meeting: Private Sitzung
|
555
609
|
transparent: Transparent
|
610
|
+
withdraw: Zurückgezogen
|
556
611
|
versions:
|
557
612
|
back_to_resource: Zurück zur Besprechung
|
558
613
|
withdraw:
|
614
|
+
error: Beim Zurückziehen des Meetings ist ein Fehler aufgetreten
|
559
615
|
success: Das Meeting wurde erfolgreich zurückgezogen
|
560
616
|
metrics:
|
561
617
|
meetings:
|
data/config/locales/es-MX.yml
CHANGED
data/config/locales/es-PY.yml
CHANGED
data/config/locales/es.yml
CHANGED