mumuki-laboratory 9.8.1 → 9.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/messages.js +1 -30
  3. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +32 -34
  4. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss +11 -0
  5. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss +3 -0
  6. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +1 -1
  7. data/app/controllers/application_controller.rb +1 -1
  8. data/app/controllers/messages_controller.rb +2 -5
  9. data/app/controllers/users_controller.rb +38 -1
  10. data/app/helpers/application_helper.rb +6 -2
  11. data/app/helpers/discussions_helper.rb +11 -4
  12. data/app/helpers/exam_registration_helper.rb +0 -4
  13. data/app/helpers/icons_helper.rb +1 -1
  14. data/app/helpers/menu_bar_helper.rb +7 -3
  15. data/app/helpers/messages_helper.rb +4 -8
  16. data/app/helpers/notifications_helper.rb +13 -0
  17. data/app/helpers/profile_helper.rb +4 -0
  18. data/app/helpers/user_discussions_helper.rb +38 -0
  19. data/app/helpers/user_menu_helper.rb +4 -0
  20. data/app/mailers/user_mailer.rb +9 -1
  21. data/app/views/discussions/new.html.erb +1 -1
  22. data/app/views/layouts/_copyright.html.erb +1 -1
  23. data/app/views/layouts/_discussions.html.erb +1 -37
  24. data/app/views/layouts/_discussions_list.html.erb +38 -0
  25. data/app/views/layouts/_messages.html.erb +1 -7
  26. data/app/views/layouts/_user_menu.html.erb +1 -0
  27. data/app/views/layouts/application.html.erb +1 -1
  28. data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +1 -1
  29. data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
  30. data/app/views/layouts/exercise_inputs/read_only_editors/_code.html.erb +1 -1
  31. data/app/views/layouts/exercise_inputs/read_only_editors/_multiple_files.html.erb +4 -4
  32. data/app/views/layouts/mailer.html.erb +7 -1
  33. data/app/views/notifications/_custom.html.erb +1 -0
  34. data/app/views/notifications/_dropdown.html.erb +2 -2
  35. data/app/views/notifications/_exam_authorization_request_updated.html.erb +2 -0
  36. data/app/views/notifications/_exam_registration.html.erb +2 -1
  37. data/app/views/notifications/previews/_custom.html.erb +1 -0
  38. data/app/views/notifications/previews/_discussion.html.erb +2 -0
  39. data/app/views/notifications/previews/_exam_authorization_request_updated.html.erb +2 -0
  40. data/app/views/notifications/previews/_exam_registration.html.erb +2 -0
  41. data/app/views/notifications/previews/_message.html.erb +2 -0
  42. data/app/views/user_mailer/1st_reminder.html.erb +7 -349
  43. data/app/views/user_mailer/1st_reminder.text.erb +1 -5
  44. data/app/views/user_mailer/2nd_reminder.html.erb +7 -349
  45. data/app/views/user_mailer/2nd_reminder.text.erb +1 -5
  46. data/app/views/user_mailer/3rd_reminder.html.erb +7 -349
  47. data/app/views/user_mailer/3rd_reminder.text.erb +1 -5
  48. data/app/views/user_mailer/_mail_template.erb +336 -0
  49. data/app/views/user_mailer/certificate.html.erb +7 -335
  50. data/app/views/user_mailer/certificate.text.erb +1 -4
  51. data/app/views/user_mailer/no_submissions_reminder.html.erb +7 -349
  52. data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -5
  53. data/app/views/user_mailer/notification.html.erb +1 -0
  54. data/app/views/user_mailer/notification.text.erb +6 -0
  55. data/app/views/user_mailer/notifications/_custom.html.erb +11 -0
  56. data/app/views/user_mailer/notifications/_exam_authorization_request_updated.html.erb +1 -0
  57. data/app/views/user_mailer/notifications/_exam_registration.html.erb +7 -0
  58. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb +7 -0
  59. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb +7 -0
  60. data/app/views/users/_basic_profile_fields.html.erb +30 -0
  61. data/app/views/users/_profile_fields.html.erb +1 -20
  62. data/app/views/users/discussions.html.erb +19 -11
  63. data/app/views/users/manage_notifications.html.erb +26 -0
  64. data/app/views/users/messages.html.erb +1 -1
  65. data/app/views/users/notifications.html.erb +54 -0
  66. data/config/routes.rb +4 -1
  67. data/lib/mumuki/laboratory/controllers/notifications.rb +2 -2
  68. data/lib/mumuki/laboratory/locales/en.yml +46 -7
  69. data/lib/mumuki/laboratory/locales/es-CL.yml +47 -7
  70. data/lib/mumuki/laboratory/locales/es.yml +48 -9
  71. data/lib/mumuki/laboratory/locales/pt.yml +45 -6
  72. data/lib/mumuki/laboratory/version.rb +1 -1
  73. data/spec/controllers/organizations_api_controller_spec.rb +6 -1
  74. data/spec/controllers/students_api_controller_spec.rb +1 -1
  75. data/spec/controllers/users_controller_spec.rb +48 -0
  76. data/spec/dummy/db/schema.rb +9 -1
  77. data/spec/features/not_found_public_flow_spec.rb +1 -1
  78. data/spec/features/notifications_flow_spec.rb +2 -1
  79. data/spec/features/profile_flow_spec.rb +1 -1
  80. data/spec/mailers/previews/user_mailer_preview.rb +45 -1
  81. metadata +136 -119
  82. data/app/views/messages/errors.html.erb +0 -1
  83. data/app/views/notifications/_discussion.html.erb +0 -1
  84. data/app/views/notifications/_exam_authorization_request.html.erb +0 -1
  85. data/app/views/notifications/_message.html.erb +0 -1
@@ -1,20 +1 @@
1
- <fieldset>
2
- <div><%= form.label(t :first_name) %></div>
3
- <div><%= form.text_field :first_name, required: true, class: 'form-control' %></div>
4
- </fieldset>
5
- <fieldset>
6
- <div><%= form.label(t :last_name) %></div>
7
- <div><%= form.text_field :last_name, required: true, class: 'form-control' %></div>
8
- </fieldset>
9
- <fieldset>
10
- <div><%= form.label(t :gender) %></div>
11
- <div><%= form.select :gender, options_for_select(User.genders.map { |gender, _| [t(gender), gender] }, @user.gender), {}, required: true, class: 'form-control form-select' %></div>
12
- </fieldset>
13
- <fieldset>
14
- <div><%= form.label(t :birthdate) %></div>
15
- <div><%= form.date_field :birthdate, min: Date.new(1900), max: 3.years.ago.end_of_year, required: true, class: 'form-control' %></div>
16
- </fieldset>
17
- <fieldset>
18
- <div><%= form.label(t :email) %></div>
19
- <div><%= form.text_field :email, readonly: true, class: 'form-control' %></div>
20
- </fieldset>
1
+ <%= render partial: 'users/basic_profile_fields', locals: {form: form} %>
@@ -14,17 +14,25 @@
14
14
  <%= t :discussions_will_be_here %>
15
15
  </div>
16
16
  <% else %>
17
- <table class="table table-striped">
18
- <% @watched_discussions.each do |discussion| %>
19
- <tr>
20
- <td>
21
- <%= icon_for_read(discussion.read_by?(@user)) %>
22
- </td>
23
- <td><%= link_to discussion.item.name, item_discussion_path(discussion) %></td>
24
- <td><%= time_ago_in_words discussion.last_message_date %></td>
25
- </tr>
26
- <% end %>
27
- </table>
17
+ <div class="table-responsive mb-3">
18
+ <table class="table">
19
+ <% @watched_discussions.each do |discussion| %>
20
+ <% if discussion.read_by?(@user) != @last_read %>
21
+ <%= user_discussions_table_title(discussion, @user, @last_read) %>
22
+ <% @last_read = discussion.read_by?(@user) %>
23
+
24
+ <%= user_discussions_table_header %>
25
+ <% end %>
26
+
27
+ <%= user_discussions_table_item(discussion, @user) %>
28
+ <% end %>
29
+ </table>
30
+ </div>
31
+
32
+ <div class="discussion-pagination">
33
+ <%= paginate @watched_discussions, nav_class: 'pagination' %>
34
+ </div>
35
+
28
36
  <% end %>
29
37
  </div>
30
38
  </div>
@@ -0,0 +1,26 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <div class="row">
6
+ <%= form_for :notifications, html: {class: 'mu-form'} do |f| %>
7
+ <div class="mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:manage_notifications) %></h1>
10
+ <div class="mu-profile-actions d-none d-md-block">
11
+ <a class="btn btn-secondary" href="<%= notifications_user_path %>">Cancelar</a>
12
+ <button type="submit" class="btn btn-complementary"><%= t :submit %></button>
13
+ </div>
14
+ </div>
15
+
16
+ <p><%= t(:i_want_emails_of) %>:</p>
17
+ <% Notification.subjects.keys.each do |subject| %>
18
+ <div class="form-check">
19
+ <%= label_tag subject, t("notification_subject.#{subject}"), class: 'form-check-label' %>
20
+ <%= f.check_box subject, checked: !@user.ignored_notifications.include?(subject), class: 'form-check-input' %>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ <% end %>
25
+ </div>
26
+
@@ -16,7 +16,7 @@
16
16
  <% else %>
17
17
  <table class="table table-striped">
18
18
  <% @messages.each do |message| %>
19
- <tr>
19
+ <tr class="<%= staleness_class(message) %>" >
20
20
  <td><%= icon_for_read(message.read?) %></td>
21
21
  <td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
22
22
  <td><%= mail_to message.sender %></td>
@@ -0,0 +1,54 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <div class="row">
6
+ <%= render partial: 'layouts/user_menu' %>
7
+
8
+ <div class="col-md-9 mu-tab-body">
9
+ <div class="mu-user-header d-flex justify-content-between">
10
+ <span>
11
+ <h1><%= t(:notifications) %></h1>
12
+ </span>
13
+ <span>
14
+ <a href="notifications/manage" class="btn btn-complementary"><%= t(:manage_notifications) %></a>
15
+ </span>
16
+ </div>
17
+ <% if @notifications.empty? %>
18
+ <div class="mu-tab-body">
19
+ <%= t :notifications_will_be_here %>
20
+ </div>
21
+ <% else %>
22
+
23
+
24
+ <div class="table-responsive mb-3">
25
+ <table class="table">
26
+ <tr class="fw-bold">
27
+ <td></td>
28
+ <td><%= t(:content) %></td>
29
+ <td><%= t(:created_at) %></td>
30
+ </tr>
31
+
32
+ <% @notifications.each do |notification| %>
33
+ <tr class="<%= background_for_notification notification %>" >
34
+ <td class="col-md-1">
35
+ <%= link_to icon_for_read(notification.read?), "notifications/#{notification.id}/toggle_read", tooltip_options(:read).merge(method: :post, role: :button) %>
36
+ </td>
37
+ <td class="col-md-8 text-break">
38
+ <%= render partial: "notifications/#{notification.subject}", locals: { notification: notification } %>
39
+ </td>
40
+ <td class="col-md-3">
41
+ <%= t(:time_since, time: time_ago_in_words(notification.created_at)) %>
42
+ </td>
43
+ </tr>
44
+ <% end %>
45
+ </table>
46
+ </div>
47
+
48
+ <div class="notification-pagination">
49
+ <%= paginate @notifications, nav_class: 'pagination' %>
50
+ </div>
51
+ <% end %>
52
+ </div>
53
+ </div>
54
+
data/config/routes.rb CHANGED
@@ -72,12 +72,15 @@ Rails.application.routes.draw do
72
72
  get :certificates
73
73
  get :exam_authorizations
74
74
 
75
+ get :notifications
76
+ post 'notifications/:id/toggle_read', action: :toggle_read
77
+ get 'notifications/manage', action: :show_manage_notifications
78
+ post 'notifications/manage', action: :manage_notifications
75
79
  end
76
80
 
77
81
  resources :faqs, only: [:index]
78
82
 
79
83
  resources :messages, only: [:index, :create]
80
- get '/messages/errors' => 'messages#errors'
81
84
 
82
85
  get 'certificates/verify/:code', to: 'certificates#verify', as: :verify_certificate
83
86
  get 'certificates/download/:code', to: 'certificates#download', as: :download_certificate
@@ -4,10 +4,10 @@ module Mumuki::Laboratory::Controllers::Notifications
4
4
  end
5
5
 
6
6
  def notifications_count
7
- notifications.size
7
+ user_notifications.size
8
8
  end
9
9
 
10
- def notifications
10
+ def user_notifications
11
11
  current_user.try(:unread_notifications) || []
12
12
  end
13
13
  end
@@ -21,6 +21,7 @@ en:
21
21
  ask_community: Ask community for help
22
22
  ask_redirect: Do you want to go there?
23
23
  ask_the_first_question: Be the first one to ask!
24
+ asked_time_since: asked %{time} ago
24
25
  attempts_left:
25
26
  zero: "You've run out of attempts"
26
27
  one: "1 attempt remaining"
@@ -36,6 +37,8 @@ en:
36
37
  cancel: Cancel
37
38
  cancel_subscription: Cancel your subscription.
38
39
  certificate: Certificate
40
+ certificate_available: Your certificate is available!
41
+ certificate_download: You can find it attached to this email or in your Mumuki profile
39
42
  certificates: Certificates
40
43
  certificates_will_be_here: Your certificates in the organization will appear here.
41
44
  certificate_verified_legend: "<strong>%{full_name}</strong>'s account is verified. Mumuki certifies their successful completion of <strong>%{description}</strong>."
@@ -55,6 +58,7 @@ en:
55
58
  confirm: Confirm
56
59
  confirm_reset: You are about to restart your exercise. Do you want to proceed?
57
60
  confirm_restart: You are about to delete your progress for this guide. Do you want to proceed?
61
+ congratulations: Congratulations!
58
62
  console: Console
59
63
  contact_administrator: 'If you think this is not supposed to happen, please contact %{link}'
60
64
  content: Content
@@ -83,10 +87,13 @@ en:
83
87
  destroy_message: delete the message
84
88
  disabled_explanation: You are trying to visit a permamently disabled or deleted resource
85
89
  disabled_organization_explanation: This path has already finished.
90
+ discussion_created_by: Created by
86
91
  discussion_description_placeholder: You can add more information regarding your doubt.
87
- new_discussion_message: New message on %{title}
92
+ new_discussion_message: New reply on %{title}
88
93
  discussion_updated: Discussion updated
89
94
  discussions: Discussions
95
+ discussions_read: Read
96
+ discussions_unread: Unread
90
97
  discussions_will_be_here: Your posts in the forum will appear here.
91
98
  dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
92
99
  download: Download your solution
@@ -133,7 +140,8 @@ en:
133
140
  expected_state: Expected board
134
141
  explain_redirect: You have registered in another organization
135
142
  failed: Oops, something went wrong
136
- faqs: FAQs
143
+ faqs: Frequently Asked Questions
144
+ faqs_abbreviated: FAQs
137
145
  feedback: Feedback
138
146
  female: Female
139
147
  file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
@@ -157,6 +165,7 @@ en:
157
165
  hidden_done: 'Good!'
158
166
  history: History
159
167
  home: Home
168
+ i_want_emails_of: I want to receive emails of
160
169
  important_info: Important information
161
170
  initial_state: Initial board
162
171
  insert_file_name: Insert a file name
@@ -168,6 +177,7 @@ en:
168
177
  keep_learning: Keep learning!
169
178
  kids_default_success: You did it great!
170
179
  language: Language
180
+ last_message: Last message
171
181
  last_name: Last Name
172
182
  last_submission_date: Last submission
173
183
  latest_exercises: Latest exercises
@@ -183,13 +193,33 @@ en:
183
193
  loading: Loading
184
194
  load_solution_into_console: Load your solution into the console
185
195
  locked_content: 'This content will be unlocked when you finish previous chapters'
196
+ mailer:
197
+ title:
198
+ exam_authorization_request_updated: There are updates in your exam registration
199
+ exam_authorization_request_rejected: Exam registration rejected
200
+ exam_registration: Exam registrations open
201
+ custom: You have a new notification!
202
+ subtitle:
203
+ exam_authorization_request_approved: Your registration request to the exam has been approved.
204
+ exam_authorization_request_rejected: Your registration request to the exam has been rejected because the requirements weren't met.
205
+ exam_registration: ¡You can register for the exam!
206
+ text:
207
+ exam_authorization_request_approved: You can sit for the exam on %{exam_start_date} by going into the platform. ¡Good luck!
208
+ exam_authorization_request_rejected: ¡Don't be upset! You did a great job and we hope you'll keep learning programming.
209
+ exam_registration: You have until %{exam_registration_deadline} to sign up. In order to be approved, you must meet the requirements.
210
+ button:
211
+ exam_registration: Sign up for the exam
212
+ exam_authorization_request_approved: Go to the platform
213
+ exam_authorization_request_rejected: My exams
214
+ custom: My notifications
186
215
  male: Male
216
+ manage_notification_subscriptions: Manage your notification subscriptions
217
+ manage_notifications: Manage notifications
187
218
  manual_evaluation_pending: Thanks for submitting your solution! It will be revised by the course teachers soon
188
219
  medal: Medal
189
220
  message: Message
190
221
  message_deleted: This message was deleted because it %{motive}, which violates the %{forum_terms}.
191
222
  messages: Messages
192
- messages_error: Previous messages are unavailable. Please try again later.
193
223
  messages_pluralized:
194
224
  one: Message
195
225
  other: Messages
@@ -204,9 +234,9 @@ en:
204
234
  you_are: You're taking care of it
205
235
  you_will_confirmation: You'll take care of this discussion. If you change your mind, click the button again.
206
236
  you_wont_confirmation: You won't take care of this discussion.
207
- more_messages: More
208
237
  my_account: My account
209
238
  my_doubts: My doubts
239
+ my_notifications: My notifications
210
240
  my_profile: My profile
211
241
  my_submissions: My Submissions
212
242
  name: Name
@@ -234,7 +264,12 @@ en:
234
264
  no_useful_result: Didn't find what you were looking for?
235
265
  not_found_explanation: 'You may have mistyped the address or the page may have moved.'
236
266
  not_in_any_organizations: It seems you aren't in any organizations yet!
267
+ notification_subject:
268
+ custom: General announcements
269
+ exam_authorization_request_updated: Exam registrations updated
270
+ exam_registration: Exam registrations enabled
237
271
  notifications: Notifications
272
+ notifications_will_be_here: Notifications will be here
238
273
  notify_problem_with_exercise: Report a bug
239
274
  office: Office
240
275
  only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
@@ -254,6 +289,7 @@ en:
254
289
  permissions: Permissions
255
290
  please_fill_profile_data: Please complete your profile data to continue!
256
291
  please_validate: 'Please validate your data before continue:'
292
+ preferences_updated_successfully: Preferences updated successfully
257
293
  preview: Preview
258
294
  preview_error: The preview cannot be shown. Check your internet connection or try with a shorter message.
259
295
  previous_exercise: Previous
@@ -261,8 +297,8 @@ en:
261
297
  processing_your_solution: We are processing you solution
262
298
  profile_of: Profile of %{username}
263
299
  programming_since: Started programming
264
- progress: Progresss
265
- read: Read
300
+ progress: Progress
301
+ publish_discussion: Publish discussion
266
302
  refresh_or_wait: Please press F5 if results are not displayed after a few seconds
267
303
  reply_count:
268
304
  one: 1 reply
@@ -323,7 +359,7 @@ en:
323
359
  terms_and_conditions_continue_disclaimer: By continuing you agree to %{terms_link}
324
360
  terms_and_conditions_must_be_accepted: You must accept the terms and conditions
325
361
  test_results: Test results
326
- time_ago: "%{time} ago"
362
+ time_since: "%{time} ago"
327
363
  time_left: You have
328
364
  title: Title
329
365
  to_closed: Close
@@ -346,6 +382,8 @@ en:
346
382
  user: User
347
383
  user_data_updated: Your data was updated successfully
348
384
  username: Username
385
+ verified_full_name: Verified name
386
+ verified_full_name_notice: Your verified name was provided by %{organization}. If there's a mistake, please send an email to %{contact}.
349
387
  view_details: View details
350
388
  want_permissions: The following user requires permissions for the organization
351
389
  we_miss_you: We miss you!
@@ -355,6 +393,7 @@ en:
355
393
  wrong_answer: The answer is wrong
356
394
  years: years old
357
395
  you_earned: You earned
396
+ you_have_a_new_notification: You have a new notification!
358
397
  you_must_sign_in_before_submitting: You must sign in before submitting your solutions
359
398
  you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
360
399
  your_new_organization: your new organization
@@ -11,14 +11,16 @@ es-CL:
11
11
  and: y
12
12
  appendix: Apéndice
13
13
  appendix_teaser: ¿Quieres saber más? <a href="%{link}">Consulta el apéndice de este capítulo</a>
14
- are_you_sure: '¿Estás seguro que quieres %{action}?'
15
- ask_a_question: ¡Haz una pregunta!
14
+ approved_message: Validado por mentorías
16
15
  approved_messages:
17
16
  one: validado
18
17
  other: validados
18
+ are_you_sure: '¿Confirmas que quieres %{action}?'
19
+ ask_a_question: ¡Haz una pregunta!
19
20
  ask_community: Pregunta a la comunidad
20
21
  ask_redirect: ¿Quieres que te llevemos ahí?
21
22
  ask_the_first_question: ¡Haz la primera pregunta!
23
+ asked_time_since: "consultó hace %{time}"
22
24
  attempts_left:
23
25
  zero: 'Te quedaste sin intentos'
24
26
  one: '1 intento restante'
@@ -33,6 +35,8 @@ es-CL:
33
35
  blocked_forum_explanation: ¿Puede que estés en medio de un examen?
34
36
  cancel_subscription: Cancela tu subscripción.
35
37
  certificate: Certificado
38
+ certificate_available: Ya está disponible tu certificado
39
+ certificate_download: Descargalo desde el adjunto de este mail o visualizalo en tu perfil de Mumuki
36
40
  certificates: Certificados
37
41
  certificates_will_be_here: Tus certificados en esta organización aparecerán aquí
38
42
  certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> ha sido verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
@@ -53,6 +57,7 @@ es-CL:
53
57
  confirm: Confirmar
54
58
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Quieres continuar?
55
59
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Quieres continuar?
60
+ congratulations: ¡Felicitaciones!
56
61
  console: Consola
57
62
  contact_administrator: 'Si piensas que es un error, comunícate con %{link}'
58
63
  content: Contenido
@@ -85,9 +90,12 @@ es-CL:
85
90
  details: Detalles
86
91
  disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permanente
87
92
  disabled_organization_explanation: ¡Este recorrido ha finalizado!
88
- new_discussion_message: Mensaje nuevo en %{title}
93
+ new_discussion_message: Respuesta nueva en %{title}
94
+ discussion_created_by: Creada por
89
95
  discussion_updated: Consulta actualizada
90
96
  discussions: Consultas
97
+ discussions_read: Leídas
98
+ discussions_unread: No leídas
91
99
  discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
92
100
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tienes que seguir practicando.
93
101
  download: "Descarga lo que hiciste"
@@ -132,7 +140,8 @@ es-CL:
132
140
  expected_state: Tablero esperado
133
141
  explain_redirect: Notamos que te registraste en otra organización.
134
142
  failed: Tu solución no pasó las pruebas
135
- faqs: Preguntas Frecuentes
143
+ faqs: Información importante
144
+ faqs_abbreviated: Información
136
145
  feedback: Problemas que encontramos
137
146
  female: Mujer
138
147
  file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor selecciona otro archivo."
@@ -157,6 +166,7 @@ es-CL:
157
166
  home: Inicio
158
167
  hour: hora
159
168
  hours: horas
169
+ i_want_emails_of: Quiero recibir emails de
160
170
  important_info: Información importante
161
171
  initial_state: Tablero inicial
162
172
  insert_file_name: Ingresa un nombre de archivo
@@ -169,6 +179,7 @@ es-CL:
169
179
  kids_default_success: ¡Lo hiciste muy bien!
170
180
  language: Lenguaje
171
181
  languages: Lenguajes
182
+ last_message: Último mensaje
172
183
  last_name: Apellido
173
184
  last_submission_date: Última solución
174
185
  latest_exercises: Últimos ejercicios
@@ -184,13 +195,33 @@ es-CL:
184
195
  loading: Cargando
185
196
  load_solution_into_console: Cargar la solución en la consola
186
197
  locked_content: 'Éste contenido se desbloqueará cuando termines los capítulos anteriores'
198
+ mailer:
199
+ title:
200
+ exam_authorization_request_updated: Tenés cambios en tu inscripción al examen
201
+ exam_authorization_request_rejected: Inscripción rechazada
202
+ exam_registration: Apertura de inscripciones
203
+ custom: ¡Tenés una nueva notificación!
204
+ subtitle:
205
+ exam_authorization_request_approved: Tu solicitud de inscripción al examen fue aprobada.
206
+ exam_authorization_request_rejected: Tu solicitud de inscripción al examen fue rechazada ya que no se cumplieron los requisitos.
207
+ exam_registration: ¡Ya podés inscribirte al examen!
208
+ text:
209
+ exam_authorization_request_approved: Podrás rendir el examen el día %{exam_start_date} ingresando a la plataforma. ¡Éxitos!
210
+ exam_authorization_request_rejected: ¡No te desanimes! Hiciste un gran esfuerzo y esperamos que continúes aprendiendo programación.
211
+ exam_registration: Tenés tiempo de inscribirte hasta el %{exam_registration_deadline}. Para que tu inscripción sea aceptada debés cumplir con los requisitos.
212
+ button:
213
+ exam_registration: Inscribirme al Examen
214
+ exam_authorization_request_approved: Ir a la plataforma
215
+ exam_authorization_request_rejected: Mis exámenes
216
+ custom: Mis notificaciones
187
217
  male: Hombre
218
+ manage_notification_subscriptions: Administrá tus notificaciones
219
+ manage_notifications: Administrar notificaciones
188
220
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
189
221
  medal: Medalla
190
222
  message: Mensaje
191
223
  message_deleted: Este mensaje fue eliminado porque %{motive}, lo cual infringe las %{forum_terms}.
192
224
  messages: Mensajes
193
- messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Vuelve a intentar más tarde!
194
225
  messages_pluralized:
195
226
  one: Mensaje
196
227
  other: Mensajes
@@ -207,9 +238,9 @@ es-CL:
207
238
  you_are: Te estás ocupando
208
239
  you_will_confirmation: Te vas a ocupar de esta consulta. Si cambias de parecer, toca nuevamente el botón.
209
240
  you_wont_confirmation: No te vas a ocupar de esta consulta.
210
- more_messages: Ver mensajes anteriores
211
241
  my_account: Mi cuenta
212
242
  my_doubts: Mis consultas
243
+ my_notifications: Mis notificaciones
213
244
  my_profile: Mi perfil
214
245
  name: Nombre
215
246
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -239,7 +270,12 @@ es-CL:
239
270
  not_found: ¡La página que buscaste no existe!
240
271
  not_found_explanation: Fíjate si escribiste bien la dirección.
241
272
  not_in_any_organizations: ¡Parece que no estás en ninguna organización todavía!
273
+ notification_subject:
274
+ custom: Anuncios generales
275
+ exam_authorization_request_updated: Cambios sobre inscripciones a exámenes
276
+ exam_registration: Inscripciones a exámenes habilitadas
242
277
  notifications: Notificaciones
278
+ notifications_will_be_here: Tus notificaciones aparecerán aquí
243
279
  notify_problem_with_exercise: Reporta un bug
244
280
  office: Secretaría
245
281
  only_landscape_support: Por favor, rota tu tablet o celular para realizar ejercicios
@@ -262,6 +298,7 @@ es-CL:
262
298
  permissions: Permisos
263
299
  please_fill_profile_data: ¡Completa tus datos personales para continuar!
264
300
  please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor valida que tus datos a continuación sean reales y correctos.'
301
+ preferences_updated_successfully: Tus preferencias se actualizaron correctamente
265
302
  preview: Vista previa
266
303
  preview_error: No se puede mostrar la vista previa. Revisa tu conexión a internet o prueba con un mensaje más corto.
267
304
  previous_exercise: Anterior
@@ -269,7 +306,7 @@ es-CL:
269
306
  processing_your_solution: Estamos procesando tu solución
270
307
  profile_of: Perfil de %{username}
271
308
  progress: Progreso
272
- read: Leído
309
+ publish_discussion: Publicar consulta
273
310
  read_messages: Ver mensajes
274
311
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presiona F5
275
312
  reply_count:
@@ -358,6 +395,8 @@ es-CL:
358
395
  user_data_updated: Tus datos se actualizaron correctamente
359
396
  user: Usuario
360
397
  username: Nombre de usuario
398
+ verified_full_name: Nombre verificado
399
+ verified_full_name_notice: Tu nombre verificado fue provisto por %{organization}. Si hay algún error, por favor escribe a %{contact}.
361
400
  view_details: Ver detalles
362
401
  want_permissions: El siguiente usuario requiere permisos para la organización
363
402
  we_miss_you: ¡Te extrañamos!
@@ -369,5 +408,6 @@ es-CL:
369
408
  working: "Procesando"
370
409
  wrong_answer: La respuesta no es correcta
371
410
  you_earned: Ganaste
411
+ you_have_a_new_notification: ¡Tenés una nueva notificación!
372
412
  you_must_sign_in_before_submitting: Tienes que iniciar sesión antes de empezar a enviar tus soluciones
373
413
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.