mumuki-laboratory 9.9.0 → 9.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +15 -9
  3. data/app/assets/javascripts/mumuki_laboratory/application/confirmation.js +10 -8
  4. data/app/assets/javascripts/mumuki_laboratory/application/editors.js +5 -3
  5. data/app/assets/javascripts/mumuki_laboratory/application/progress.js +4 -4
  6. data/app/assets/javascripts/mumuki_laboratory/application/results-renderer.js +12 -1
  7. data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +8 -2
  8. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +32 -34
  9. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss +11 -0
  10. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +1 -1
  11. data/app/controllers/application_controller.rb +1 -1
  12. data/app/controllers/users_controller.rb +38 -1
  13. data/app/helpers/application_helper.rb +2 -2
  14. data/app/helpers/discussions_helper.rb +11 -4
  15. data/app/helpers/icons_helper.rb +1 -1
  16. data/app/helpers/menu_bar_helper.rb +7 -3
  17. data/app/helpers/notifications_helper.rb +13 -0
  18. data/app/helpers/time_zone_helper.rb +5 -0
  19. data/app/helpers/user_discussions_helper.rb +38 -0
  20. data/app/helpers/user_menu_helper.rb +4 -0
  21. data/app/mailers/user_mailer.rb +11 -1
  22. data/app/views/discussions/new.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/_user_menu.html.erb +1 -0
  26. data/app/views/layouts/exercise_inputs/read_only_editors/_code.html.erb +1 -1
  27. data/app/views/layouts/exercise_inputs/read_only_editors/_multiple_files.html.erb +4 -4
  28. data/app/views/layouts/mailer.html.erb +7 -1
  29. data/app/views/notifications/_custom.html.erb +1 -0
  30. data/app/views/notifications/_dropdown.html.erb +2 -2
  31. data/app/views/notifications/_exam_authorization_request_updated.html.erb +2 -0
  32. data/app/views/notifications/_exam_registration.html.erb +2 -1
  33. data/app/views/notifications/previews/_custom.html.erb +1 -0
  34. data/app/views/notifications/previews/_discussion.html.erb +2 -0
  35. data/app/views/notifications/previews/_exam_authorization_request_updated.html.erb +2 -0
  36. data/app/views/notifications/previews/_exam_registration.html.erb +2 -0
  37. data/app/views/notifications/previews/_message.html.erb +2 -0
  38. data/app/views/user_mailer/1st_reminder.html.erb +7 -349
  39. data/app/views/user_mailer/1st_reminder.text.erb +0 -4
  40. data/app/views/user_mailer/2nd_reminder.html.erb +7 -349
  41. data/app/views/user_mailer/2nd_reminder.text.erb +0 -4
  42. data/app/views/user_mailer/3rd_reminder.html.erb +7 -349
  43. data/app/views/user_mailer/3rd_reminder.text.erb +0 -4
  44. data/app/views/user_mailer/_mail_template.erb +336 -0
  45. data/app/views/user_mailer/certificate.html.erb +7 -335
  46. data/app/views/user_mailer/certificate.text.erb +0 -3
  47. data/app/views/user_mailer/no_submissions_reminder.html.erb +7 -349
  48. data/app/views/user_mailer/no_submissions_reminder.text.erb +0 -4
  49. data/app/views/user_mailer/notification.html.erb +1 -0
  50. data/app/views/user_mailer/notification.text.erb +6 -0
  51. data/app/views/user_mailer/notifications/_custom.html.erb +11 -0
  52. data/app/views/user_mailer/notifications/_exam_authorization_request_updated.html.erb +1 -0
  53. data/app/views/user_mailer/notifications/_exam_registration.html.erb +7 -0
  54. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_approved.html.erb +7 -0
  55. data/app/views/user_mailer/notifications/exam_authorization_request_updated/_rejected.html.erb +7 -0
  56. data/app/views/users/discussions.html.erb +19 -11
  57. data/app/views/users/manage_notifications.html.erb +26 -0
  58. data/app/views/users/notifications.html.erb +54 -0
  59. data/config/routes.rb +4 -0
  60. data/lib/mumuki/laboratory.rb +1 -0
  61. data/lib/mumuki/laboratory/controllers/notifications.rb +2 -2
  62. data/lib/mumuki/laboratory/locales/en.yml +45 -5
  63. data/lib/mumuki/laboratory/locales/es-CL.yml +46 -5
  64. data/lib/mumuki/laboratory/locales/es.yml +47 -7
  65. data/lib/mumuki/laboratory/locales/pt.yml +44 -4
  66. data/lib/mumuki/laboratory/mailers/message_delivery.rb +15 -0
  67. data/lib/mumuki/laboratory/version.rb +1 -1
  68. data/spec/controllers/users_controller_spec.rb +48 -0
  69. data/spec/dummy/db/schema.rb +7 -1
  70. data/spec/features/notifications_flow_spec.rb +2 -1
  71. data/spec/javascripts/editors-spec.js +21 -3
  72. data/spec/javascripts/submissions-store-spec.js +11 -0
  73. data/spec/mailers/previews/user_mailer_preview.rb +87 -1
  74. metadata +135 -116
  75. data/app/views/notifications/_discussion.html.erb +0 -1
  76. data/app/views/notifications/_exam_authorization_request.html.erb +0 -1
  77. data/app/views/notifications/_message.html.erb +0 -1
@@ -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 :save %></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
+
@@ -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(:toggle_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,6 +72,10 @@ 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]
@@ -59,3 +59,4 @@ require_relative './laboratory/version'
59
59
  require_relative './laboratory/extensions'
60
60
  require_relative './laboratory/controllers'
61
61
  require_relative './laboratory/engine'
62
+ require_relative './laboratory/mailers/message_delivery'
@@ -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,7 +193,28 @@ 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
@@ -205,6 +236,7 @@ en:
205
236
  you_wont_confirmation: You won't take care of this discussion.
206
237
  my_account: My account
207
238
  my_doubts: My doubts
239
+ my_notifications: My notifications
208
240
  my_profile: My profile
209
241
  my_submissions: My Submissions
210
242
  name: Name
@@ -232,7 +264,12 @@ en:
232
264
  no_useful_result: Didn't find what you were looking for?
233
265
  not_found_explanation: 'You may have mistyped the address or the page may have moved.'
234
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
235
271
  notifications: Notifications
272
+ notifications_will_be_here: Notifications will be here
236
273
  notify_problem_with_exercise: Report a bug
237
274
  office: Office
238
275
  only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
@@ -252,6 +289,7 @@ en:
252
289
  permissions: Permissions
253
290
  please_fill_profile_data: Please complete your profile data to continue!
254
291
  please_validate: 'Please validate your data before continue:'
292
+ preferences_updated_successfully: Preferences updated successfully
255
293
  preview: Preview
256
294
  preview_error: The preview cannot be shown. Check your internet connection or try with a shorter message.
257
295
  previous_exercise: Previous
@@ -259,8 +297,8 @@ en:
259
297
  processing_your_solution: We are processing you solution
260
298
  profile_of: Profile of %{username}
261
299
  programming_since: Started programming
262
- progress: Progresss
263
- read: Read
300
+ progress: Progress
301
+ publish_discussion: Publish discussion
264
302
  refresh_or_wait: Please press F5 if results are not displayed after a few seconds
265
303
  reply_count:
266
304
  one: 1 reply
@@ -321,13 +359,14 @@ en:
321
359
  terms_and_conditions_continue_disclaimer: By continuing you agree to %{terms_link}
322
360
  terms_and_conditions_must_be_accepted: You must accept the terms and conditions
323
361
  test_results: Test results
324
- time_ago: "%{time} ago"
362
+ time_since: "%{time} ago"
325
363
  time_left: You have
326
364
  title: Title
327
365
  to_closed: Close
328
366
  to_opened: Reopen
329
367
  to_pending_review: Mark as solved
330
368
  to_solved: Mark as solved
369
+ toggle_read: "Toggle read/unread"
331
370
  unauthorized_explanation: You have no permissions for this content. Maybe you logged in with another account.
332
371
  total: Total
333
372
  undo_upvote: Undo upvote
@@ -355,6 +394,7 @@ en:
355
394
  wrong_answer: The answer is wrong
356
395
  years: years old
357
396
  you_earned: You earned
397
+ you_have_a_new_notification: You have a new notification!
358
398
  you_must_sign_in_before_submitting: You must sign in before submitting your solutions
359
399
  you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
360
400
  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,7 +195,28 @@ 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
@@ -208,6 +240,7 @@ es-CL:
208
240
  you_wont_confirmation: No te vas a ocupar de esta consulta.
209
241
  my_account: Mi cuenta
210
242
  my_doubts: Mis consultas
243
+ my_notifications: Mis notificaciones
211
244
  my_profile: Mi perfil
212
245
  name: Nombre
213
246
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -237,7 +270,12 @@ es-CL:
237
270
  not_found: ¡La página que buscaste no existe!
238
271
  not_found_explanation: Fíjate si escribiste bien la dirección.
239
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
240
277
  notifications: Notificaciones
278
+ notifications_will_be_here: Tus notificaciones aparecerán aquí
241
279
  notify_problem_with_exercise: Reporta un bug
242
280
  office: Secretaría
243
281
  only_landscape_support: Por favor, rota tu tablet o celular para realizar ejercicios
@@ -260,6 +298,7 @@ es-CL:
260
298
  permissions: Permisos
261
299
  please_fill_profile_data: ¡Completa tus datos personales para continuar!
262
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
263
302
  preview: Vista previa
264
303
  preview_error: No se puede mostrar la vista previa. Revisa tu conexión a internet o prueba con un mensaje más corto.
265
304
  previous_exercise: Anterior
@@ -267,7 +306,7 @@ es-CL:
267
306
  processing_your_solution: Estamos procesando tu solución
268
307
  profile_of: Perfil de %{username}
269
308
  progress: Progreso
270
- read: Leído
309
+ publish_discussion: Publicar consulta
271
310
  read_messages: Ver mensajes
272
311
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presiona F5
273
312
  reply_count:
@@ -339,6 +378,7 @@ es-CL:
339
378
  to_opened: Reabrir
340
379
  to_pending_review: Resolver
341
380
  to_solved: Resolver
381
+ toggle_read: "Marcar como leído/no leído"
342
382
  unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
343
383
  total: Total
344
384
  uncategorized: No categorizado
@@ -369,5 +409,6 @@ es-CL:
369
409
  working: "Procesando"
370
410
  wrong_answer: La respuesta no es correcta
371
411
  you_earned: Ganaste
412
+ you_have_a_new_notification: ¡Tenés una nueva notificación!
372
413
  you_must_sign_in_before_submitting: Tienes que iniciar sesión antes de empezar a enviar tus soluciones
373
414
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
@@ -14,15 +14,16 @@ es:
14
14
  and: y
15
15
  appendix: Apéndice
16
16
  appendix_teaser: ¿Querés saber más? <a href="%{link}">Consultá el apéndice de este capítulo</a>
17
- approved_message: Validado por mentor
18
- are_you_sure: '¿Estás seguro que querés %{action}?'
19
- ask_a_question: ¡Hacé una pregunta!
17
+ approved_message: Validado por mentorías
20
18
  approved_messages:
21
19
  one: validado
22
20
  other: validados
21
+ are_you_sure: '¿Confirmás que querés %{action}?'
22
+ ask_a_question: ¡Hacé una pregunta!
23
23
  ask_community: Preguntá a la comunidad
24
24
  ask_redirect: ¿Querés que te llevemos ahí?
25
25
  ask_the_first_question: ¡Hacé la primera pregunta!
26
+ asked_time_since: "consultó hace %{time}"
26
27
  attempts_left:
27
28
  zero: 'Te quedaste sin intentos'
28
29
  one: '1 intento restante'
@@ -38,9 +39,11 @@ es:
38
39
  cancel: Cancelar
39
40
  cancel_subscription: Cancelá tu subscripción.
40
41
  certificate: Certificado
42
+ certificate_available: Ya está disponible tu certificado
43
+ certificate_download: Descargalo desde el adjunto de este mail o visualizalo en tu perfil de Mumuki
44
+ certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
41
45
  certificates: Certificados
42
46
  certificates_will_be_here: Tus certificados en esta organización aparecerán acá
43
- certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
44
47
  chapter: Capítulo
45
48
  chapters: Capítulos
46
49
  chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
@@ -57,6 +60,7 @@ es:
57
60
  confirm: Confirmar
58
61
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
59
62
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Querés continuar?
63
+ congratulations: ¡Felicitaciones!
60
64
  console: Consola
61
65
  contact_administrator: 'Si pensás que es un error, comunicate con %{link}'
62
66
  content: Contenido
@@ -91,10 +95,13 @@ es:
91
95
  details: Detalles
92
96
  disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permamente
93
97
  disabled_organization_explanation: Este recorrido ha finalizado
98
+ discussion_created_by: Creada por
94
99
  discussion_description_placeholder: Podés agregar información para detallar más tu consulta
95
100
  discussion_updated: Consulta actualizada
96
- new_discussion_message: Mensaje nuevo en %{title}
101
+ new_discussion_message: Respuesta nueva en %{title}
97
102
  discussions: Consultas
103
+ discussions_read: Leídas
104
+ discussions_unread: No leídas
98
105
  discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
99
106
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
100
107
  download: "Descargá lo que hiciste"
@@ -140,7 +147,8 @@ es:
140
147
  expected_state: Tablero esperado
141
148
  explain_redirect: Notamos que te registraste en otra organización.
142
149
  failed: Tu solución no pasó las pruebas
143
- faqs: Preguntas Frecuentes
150
+ faqs: Información importante
151
+ faqs_abbreviated: Información
144
152
  feedback: Problemas que encontramos
145
153
  female: Mujer
146
154
  file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
@@ -167,6 +175,7 @@ es:
167
175
  home: Inicio
168
176
  hour: hora
169
177
  hours: horas
178
+ i_want_emails_of: Quiero recibir emails de
170
179
  important_info: Información importante
171
180
  initial_state: Tablero inicial
172
181
  insert_file_name: Ingresa un nombre de archivo
@@ -179,6 +188,7 @@ es:
179
188
  kids_default_success: ¡Lo hiciste muy bien!
180
189
  language: Lenguaje
181
190
  languages: Lenguajes
191
+ last_message: Último mensaje
182
192
  last_name: Apellido
183
193
  last_submission_date: Última solución
184
194
  latest_exercises: Últimos ejercicios
@@ -194,7 +204,28 @@ es:
194
204
  loading: Cargando
195
205
  load_solution_into_console: Cargar la solución en la consola
196
206
  locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
207
+ mailer:
208
+ title:
209
+ exam_authorization_request_updated: Tenés cambios en tu inscripción al examen
210
+ exam_authorization_request_rejected: Inscripción rechazada
211
+ exam_registration: Apertura de inscripciones
212
+ custom: ¡Tenés una nueva notificación!
213
+ subtitle:
214
+ exam_authorization_request_approved: Tu solicitud de inscripción al examen fue aprobada.
215
+ exam_authorization_request_rejected: Tu solicitud de inscripción al examen fue rechazada ya que no se cumplieron los requisitos.
216
+ exam_registration: ¡Ya podés inscribirte al examen!
217
+ text:
218
+ exam_authorization_request_approved: Podrás rendir el examen el día %{exam_start_date} ingresando a la plataforma. ¡Éxitos!
219
+ exam_authorization_request_rejected: ¡No te desanimes! Hiciste un gran esfuerzo y esperamos que continúes aprendiendo programación.
220
+ 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.
221
+ button:
222
+ exam_registration: Inscribirme al Examen
223
+ exam_authorization_request_approved: Ir a la plataforma
224
+ exam_authorization_request_rejected: Mis exámenes
225
+ custom: Mis notificaciones
197
226
  male: Hombre
227
+ manage_notification_subscriptions: Administrá tus notificaciones
228
+ manage_notifications: Administrar notificaciones
198
229
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
199
230
  medal: Medalla
200
231
  message: Mensaje
@@ -218,6 +249,7 @@ es:
218
249
  you_wont_confirmation: No te vas a ocupar de esta consulta.
219
250
  my_account: Mi cuenta
220
251
  my_doubts: Mis consultas
252
+ my_notifications: Mis notificaciones
221
253
  my_profile: Mi perfil
222
254
  name: Nombre
223
255
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -247,7 +279,12 @@ es:
247
279
  not_found: ¡La página que buscaste no existe!
248
280
  not_found_explanation: Fijate si escribiste bien la dirección.
249
281
  not_in_any_organizations: ¡Parece que no estás en ninguna organización todavía!
282
+ notification_subject:
283
+ custom: Anuncios generales
284
+ exam_authorization_request_updated: Cambios sobre inscripciones a exámenes
285
+ exam_registration: Inscripciones a exámenes habilitadas
250
286
  notifications: Notificaciones
287
+ notifications_will_be_here: Tus notificaciones aparecerán aquí
251
288
  notify_problem_with_exercise: Reportá un bug
252
289
  office: Secretaría
253
290
  only_landscape_support: Por favor, rotá tu tablet o celular para realizar ejercicios
@@ -270,6 +307,7 @@ es:
270
307
  permissions: Permisos
271
308
  please_fill_profile_data: ¡Completá tus datos personales para continuar!
272
309
  please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor validá que tus datos a continuación sean reales y correctos.'
310
+ preferences_updated_successfully: Tus preferencias se actualizaron correctamente
273
311
  preview: Vista previa
274
312
  preview_error: No se puede mostrar la vista previa. Revisá tu conexión a internet o probá con un mensaje más corto.
275
313
  previous_exercise: Anterior
@@ -278,7 +316,7 @@ es:
278
316
  profile_of: Perfil de %{username}
279
317
  programming_since: Programando desde
280
318
  progress: Progreso
281
- read: Leido
319
+ publish_discussion: Publicar consulta
282
320
  read_messages: Ver mensajes
283
321
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presioná F5
284
322
  reply_count:
@@ -354,6 +392,7 @@ es:
354
392
  to_opened: Reabrir
355
393
  to_pending_review: Resolver
356
394
  to_solved: Resolver
395
+ toggle_read: "Marcar como leído/no leído"
357
396
  unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
358
397
  total: Total
359
398
  uncategorized: No categorizado
@@ -386,6 +425,7 @@ es:
386
425
  wrong_answer: La respuesta no es correcta
387
426
  years: años
388
427
  you_earned: Ganaste
428
+ you_have_a_new_notification: ¡Tenés una nueva notificación!
389
429
  you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
390
430
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
391
431
  your_new_organization: tu nueva organización