mumuki-laboratory 8.6.0 → 9.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/certificate.js +17 -0
  3. data/app/assets/javascripts/mumuki_laboratory/application/faqs.js +90 -0
  4. data/app/assets/javascripts/mumuki_laboratory/application/upload.js +69 -14
  5. data/app/assets/javascripts/mumuki_laboratory/application/user.js +16 -5
  6. data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +3 -0
  7. data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +3 -0
  8. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_certificate.scss +33 -0
  9. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss +15 -2
  10. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +84 -0
  11. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +1 -1
  12. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_menu.scss +63 -0
  13. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +11 -0
  14. data/app/controllers/api/base_controller.rb +0 -1
  15. data/app/controllers/api/courses_controller.rb +1 -1
  16. data/app/controllers/api/organizations_controller.rb +5 -2
  17. data/app/controllers/api/roles_controller.rb +4 -0
  18. data/app/controllers/api/users_controller.rb +6 -1
  19. data/app/controllers/certificates_controller.rb +28 -0
  20. data/app/controllers/concerns/with_authorization.rb +1 -16
  21. data/app/controllers/concerns/with_certificate_render.rb +25 -0
  22. data/app/controllers/concerns/with_user_params.rb +4 -0
  23. data/app/controllers/discussions_messages_controller.rb +0 -1
  24. data/app/controllers/faqs_controller.rb +6 -0
  25. data/app/controllers/users_controller.rb +12 -5
  26. data/app/helpers/breadcrumbs_helper.rb +4 -0
  27. data/app/helpers/certificate_helper.rb +13 -0
  28. data/app/helpers/content_view_helper.rb +19 -0
  29. data/app/helpers/exercise_input_helper.rb +8 -17
  30. data/app/helpers/links_helper.rb +11 -3
  31. data/app/helpers/menu_bar_helper.rb +15 -11
  32. data/app/helpers/user_menu_helper.rb +36 -0
  33. data/app/mailers/application_mailer.rb +0 -1
  34. data/app/mailers/user_mailer.rb +9 -0
  35. data/app/views/certificates/_certificate.html.erb +44 -0
  36. data/app/views/certificates/_download.html.erb +20 -0
  37. data/app/views/certificates/verify.html.erb +40 -0
  38. data/app/views/chapters/show.html.erb +15 -14
  39. data/app/views/complements/show.html.erb +1 -1
  40. data/app/views/exams/show.html.erb +1 -1
  41. data/app/views/{layouts → exercises}/_exercise_skipped.html.erb +0 -0
  42. data/app/views/exercises/_exercise_title_icons.html.erb +4 -0
  43. data/app/views/exercises/show.html.erb +4 -7
  44. data/app/views/faqs/index.html.erb +20 -0
  45. data/app/views/{layouts → guides}/_guide.html.erb +0 -0
  46. data/app/views/guides/_guide_container.html.erb +24 -0
  47. data/app/views/{layouts → guides}/_guide_title_icons.html.erb +1 -3
  48. data/app/views/layouts/_progress_listing.html.erb +1 -1
  49. data/app/views/layouts/_user_menu.html.erb +17 -0
  50. data/app/views/layouts/application.html.erb +6 -1
  51. data/app/views/layouts/exercise_inputs/editors/_code.html.erb +2 -1
  52. data/app/views/layouts/exercise_inputs/editors/_upload.html.erb +11 -2
  53. data/app/views/lessons/show.html.erb +1 -1
  54. data/app/views/user_mailer/certificate.html.erb +339 -0
  55. data/app/views/user_mailer/certificate.text.erb +10 -0
  56. data/app/views/users/_user_form.html.erb +10 -8
  57. data/app/views/users/certificates.html.erb +32 -0
  58. data/app/views/users/discussions.html.erb +28 -0
  59. data/app/views/users/edit.html.erb +1 -1
  60. data/app/views/users/messages.html.erb +27 -0
  61. data/app/views/users/show.html.erb +4 -51
  62. data/app/views/users/terms.html.erb +2 -2
  63. data/config/routes.rb +9 -0
  64. data/lib/mumuki/laboratory/locales/en.yml +13 -3
  65. data/lib/mumuki/laboratory/locales/es-CL.yml +13 -3
  66. data/lib/mumuki/laboratory/locales/es.yml +12 -2
  67. data/lib/mumuki/laboratory/locales/pt.yml +12 -2
  68. data/lib/mumuki/laboratory/version.rb +1 -1
  69. data/spec/controllers/certificates_controller_spec.rb +15 -0
  70. data/spec/controllers/organizations_api_controller_spec.rb +16 -9
  71. data/spec/dummy/db/schema.rb +25 -1
  72. data/spec/features/certificate_programs_flow_spec.rb +17 -0
  73. data/spec/features/exercise_flow_spec.rb +3 -3
  74. data/spec/features/login_flow_spec.rb +1 -1
  75. data/spec/features/menu_bar_spec.rb +44 -24
  76. data/spec/features/profile_flow_spec.rb +18 -9
  77. data/spec/features/terms_flow_spec.rb +30 -0
  78. data/spec/helpers/application_helper_spec.rb +10 -0
  79. data/spec/helpers/certificate_helper_spec.rb +15 -0
  80. data/spec/javascripts/upload-spec.js +80 -0
  81. metadata +86 -14
  82. data/app/views/layouts/_guide_container.html.erb +0 -28
@@ -0,0 +1,10 @@
1
+ <%= t :new_certificate_mailer_title %>
2
+
3
+ <%= t :new_certificate_mailer_p1 %>
4
+ <%= t :new_certificate_mailer_p2 %>
5
+
6
+
7
+ © Copyright 2015-<%= DateTime.now.year %> Mumuki.
8
+
9
+ <%= t :stop_emails? %>
10
+ <%= t :cancel_subscription %>
@@ -1,11 +1,11 @@
1
1
  <div class="mu-user-header">
2
- <h1><%= @user.name %></h1>
2
+ <h1><%= t(:my_profile) %></h1>
3
3
  <div class="mu-profile-actions hidden-xs">
4
4
  <%= edit_profile_button %>
5
5
  </div>
6
6
  </div>
7
- <div class="row mu-tab-body">
8
- <div class="col-md-4 mu-profile-info-left">
7
+ <div class="mu-profile-info">
8
+ <div class="mu-profile-info-left">
9
9
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
10
10
  <% if in_gamified_context? %>
11
11
  <svg class="mu-level-progress" width="300" height="300" viewBox="0 0 100 100">
@@ -18,7 +18,10 @@
18
18
  </div>
19
19
  <% end %>
20
20
  </div>
21
- <div class="col-md-8 mu-profile-info-right">
21
+ <div class="mu-profile-info-right">
22
+ <div>
23
+ <span> <strong><%= t :name %>:</strong> <%= "#{@user.name}" %> </span>
24
+ </div>
22
25
  <% if @user.age.present? %>
23
26
  <div>
24
27
  <span> <strong><%= t :age %>:</strong> <%= "#{@user.age} #{t :years}" %> </span>
@@ -31,8 +34,7 @@
31
34
  <span> <strong><%= t :programming_since %>:</strong> <%= t(:time_since, time: time_ago_in_words(@user.created_at)) %> </span>
32
35
  </div>
33
36
  </div>
34
-
35
- <div class="mu-profile-actions mobile visible-xs">
36
- <%= edit_profile_button %>
37
- </div>
37
+ </div>
38
+ <div class="mu-profile-actions mobile visible-xs">
39
+ <%= edit_profile_button %>
38
40
  </div>
@@ -0,0 +1,32 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <%= render partial: 'layouts/user_menu' %>
6
+
7
+ <div class="col-md-9 mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:certificates) %></h1>
10
+ </div>
11
+ <% if @certificates.empty? %>
12
+ <div class="mu-tab-body">
13
+ <%= t :certificates_will_be_here %>
14
+ </div>
15
+ <% else %>
16
+ <div class="col-md-12">
17
+ <div class="mu-list-group">
18
+ <% @certificates.each do |certificate| %>
19
+ <span class="mu-list-group-item">
20
+ <a href="<%= download_certificate_path certificate.code %>" target="_blank"><i class="fas fa-fw fa-download"></i></a>
21
+ <span class="mu-divider-vertical"></span>
22
+ <a href="<%= linkedin_post_url certificate %>" target="_blank"><i class="fab fa-fw fa-linkedin"></i></a>
23
+ <span class="mu-divider-vertical"></span>
24
+ <a href="<%= verify_certificate_path certificate.code %>" target="_blank">
25
+ <span class="mu-text-capitalize"><%= certificate.title %> - <%= certificate.description %></span>
26
+ </a>
27
+ </span>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+ <% end %>
32
+ </div>
@@ -0,0 +1,28 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <%= render partial: 'layouts/user_menu' %>
6
+
7
+ <div class="col-md-9 mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:discussions) %></h1>
10
+ </div>
11
+ <% if @watched_discussions.empty? %>
12
+ <div class="mu-tab-body">
13
+ <%= t :discussions_will_be_here %>
14
+ </div>
15
+ <% else %>
16
+ <table class="table table-striped">
17
+ <% @watched_discussions.each do |discussion| %>
18
+ <tr>
19
+ <td>
20
+ <%= icon_for_read(discussion.read_by?(@user)) %>
21
+ </td>
22
+ <td><%= link_to discussion.item.name, item_discussion_path(discussion) %></td>
23
+ <td><%= time_ago_in_words discussion.last_message_date %></td>
24
+ </tr>
25
+ <% end %>
26
+ </table>
27
+ <% end %>
28
+ </div>
@@ -1,5 +1,5 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <%= breadcrumbs @user %>
2
+ <%= breadcrumbs_for_my_account %>
3
3
  <% end %>
4
4
 
5
5
  <%= render partial: 'edit_user_form' %>
@@ -0,0 +1,27 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <%= render partial: 'layouts/user_menu' %>
6
+
7
+ <div class="col-md-9 mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:messages) %></h1>
10
+ </div>
11
+ <% if @messages.empty? %>
12
+ <div class="mu-tab-body">
13
+ <%= t :no_messages %>
14
+ </div>
15
+ <% else %>
16
+ <table class="table table-striped">
17
+ <% @messages.each do |message| %>
18
+ <tr>
19
+ <td><%= icon_for_read(message.read?) %></td>
20
+ <td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
21
+ <td><%= mail_to message.sender %></td>
22
+ <td><%= time_ago_in_words message.created_at %></td>
23
+ </tr>
24
+ <% end %>
25
+ </table>
26
+ <% end %>
27
+ </div>
@@ -1,56 +1,9 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <%= breadcrumbs @user %>
2
+ <%= breadcrumbs_for_my_account %>
3
3
  <% end %>
4
4
 
5
- <ul class="nav nav-tabs" role="tablist">
6
- <li role="presentation" class="active">
7
- <a data-target="#info" aria-controls="info" role="tab" data-toggle="tab"><%= t :profile %></a>
8
- </li>
9
- <li role="presentation">
10
- <a data-target="#messages" aria-controls="messages" role="tab" data-toggle="tab"><%= t :messages %></a>
11
- </li>
12
- <% if @watched_discussions.present? %>
13
- <li role="presentation">
14
- <a data-target="#discussions" aria-controls="discussions" role="tab" data-toggle="tab"><%= t :discussions %></a>
15
- </li>
16
- <% end %>
17
- </ul>
5
+ <%= render partial: 'layouts/user_menu' %>
18
6
 
19
- <div class="tab-content">
20
- <div role="tabpanel" class="tab-pane active" id="info">
21
- <%= render partial: 'user_form' %>
22
- </div>
23
- <div role="tabpanel" class="tab-pane" id="messages">
24
- <% if @messages.empty? %>
25
- <div class="row mu-tab-body col-md-12">
26
- <%= t :no_messages %>
27
- </div>
28
- <% else %>
29
- <table class="table table-striped">
30
- <% @messages.each do |message| %>
31
- <tr>
32
- <td><%= icon_for_read(message.read?) %></td>
33
- <td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
34
- <td><%= mail_to message.sender %></td>
35
- <td><%= time_ago_in_words message.created_at %></td>
36
- </tr>
37
- <% end %>
38
- </table>
39
- <% end %>
40
- </div>
41
- <% if @watched_discussions.present? %>
42
- <div role="tabpanel" class="tab-pane" id="discussions">
43
- <table class="table table-striped">
44
- <% @watched_discussions.each do |discussion| %>
45
- <tr>
46
- <td>
47
- <%= icon_for_read(discussion.read_by?(@user)) %>
48
- </td>
49
- <td><%= link_to discussion.item.name, item_discussion_path(discussion) %></td>
50
- <td><%= time_ago_in_words discussion.last_message_date %></td>
51
- </tr>
52
- <% end %>
53
- </table>
54
- </div>
55
- <% end %>
7
+ <div class="col-md-9 mu-tab-body">
8
+ <%= render partial: 'user_form' %>
56
9
  </div>
@@ -1,6 +1,6 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <% if current_user? %>
3
- <%= breadcrumbs @user %>
2
+ <% if current_logged_user? %>
3
+ <%= breadcrumbs_for_my_account %>
4
4
  <% else %>
5
5
  <%= header_breadcrumbs %>
6
6
  <% end %>
data/config/routes.rb CHANGED
@@ -62,11 +62,20 @@ Rails.application.routes.draw do
62
62
 
63
63
  # Notification subscriptions
64
64
  get :unsubscribe
65
+
66
+ get :messages
67
+ get :discussions
68
+ get :certificates
65
69
  end
66
70
 
71
+ resources :faqs, only: [:index]
72
+
67
73
  resources :messages, only: [:index, :create]
68
74
  get '/messages/errors' => 'messages#errors'
69
75
 
76
+ get 'certificates/verify/:code', to: 'certificates#verify', as: :verify_certificate
77
+ get 'certificates/download/:code', to: 'certificates#download', as: :download_certificate
78
+
70
79
  # Routes by slug
71
80
  get '/guides/:organization/:repository' => 'guides#show_transparently', as: :transparent_guide
72
81
  get '/topics/:organization/:repository' => 'topics#show_transparently', as: :transparent_topic
@@ -33,6 +33,10 @@ en:
33
33
  blocked_forum_explanation: Are you in the middle of an exam right now?
34
34
  cancel: Cancel
35
35
  cancel_subscription: Cancel your subscription.
36
+ certificate: Certificate
37
+ certificates: Certificates
38
+ certificates_will_be_here: Your certificates in the organization will appear here.
39
+ certificate_verified_legend: "<strong>%{full_name}</strong>'s account is verified. Mumuki certifies their successful completion of <strong>%{description}</strong>."
36
40
  chapter: Chapter
37
41
  chapters: Chapters
38
42
  chapter_finished_html: You have finished %{chapter}!
@@ -45,6 +49,7 @@ en:
45
49
  created_at_asc: Oldest
46
50
  created_at_desc: Newest
47
51
  comment: Comment
52
+ completed_by: Completed by
48
53
  confirm: Confirm
49
54
  confirm_reset: You are about to restart your exercise. Do you want to proceed?
50
55
  confirm_restart: You are about to delete your progress for this guide. Do you want to proceed?
@@ -68,6 +73,7 @@ en:
68
73
  new_discussion_message: New message on %{title}
69
74
  discussion_updated: Discussion updated
70
75
  discussions: Discussions
76
+ discussions_will_be_here: Your posts in the forum will appear here.
71
77
  dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
72
78
  download: Download your solution
73
79
  edit: Edit
@@ -109,8 +115,10 @@ en:
109
115
  expected_state: Expected board
110
116
  explain_redirect: You have registered in another organization
111
117
  failed: Oops, something went wrong
118
+ faqs: FAQs
112
119
  feedback: Feedback
113
120
  female: Female
121
+ file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
114
122
  finish: Finish
115
123
  first_name: First Name
116
124
  forbidden_explanation: Please verify you have logged in with the right account
@@ -153,6 +161,7 @@ en:
153
161
  let_us_know: please let us know!
154
162
  level: Level
155
163
  level_up: Level up!
164
+ linkedin_profile_button_locale: en_US
156
165
  listen_statement: Listen to the statement
157
166
  loading: Loading
158
167
  load_solution_into_console: Load your solution into the console
@@ -169,7 +178,9 @@ en:
169
178
  moderation: Mentoring
170
179
  moderator: Mentor
171
180
  more_messages: More
181
+ my_account: My account
172
182
  my_doubts: My doubts
183
+ my_profile: My profile
173
184
  my_submissions: My Submissions
174
185
  name: Name
175
186
  navigation_continue: 'Next: %{sibling}'
@@ -216,7 +227,6 @@ en:
216
227
  previous_exercise: Previous
217
228
  problem_with_exercise: '[Mumuki] Problem with exercise: %{title}'
218
229
  processing_your_solution: We are processing you solution
219
- profile: Profile
220
230
  profile_of: Profile of %{username}
221
231
  programming_since: Started programming
222
232
  progress: Progresss
@@ -233,6 +243,7 @@ en:
233
243
  running: running
234
244
  save: Save
235
245
  see_context: Watch exercise introduction animation
246
+ select_file: Select file
236
247
  sending_solution: Sending solution
237
248
  show: Show
238
249
  sign_in: Sign in
@@ -289,13 +300,12 @@ en:
289
300
  unprepared_organization_explanation: This path hasn't started yet.
290
301
  unsubscribe: Unsubscribe
291
302
  unsubscribed_successfully: You have successfully unsubscribed from reminders.
292
- upload_solution: Upload Solution
293
303
  uploading_solution: "Uploading solution"
294
304
  upvote: Upvote
295
305
  upvotes_count_desc: Most voted
296
306
  upvotes_count_asc: Least voted
297
307
  user: User
298
- user_data_updated: Your data was updated successfuly
308
+ user_data_updated: Your data was updated successfully
299
309
  username: Username
300
310
  view_details: View details
301
311
  want_permissions: The next user requires permissions
@@ -29,6 +29,10 @@ es-CL:
29
29
  birthdate: Fecha de nacimiento
30
30
  blocked_forum_explanation: ¿Puede que estés en medio de un examen?
31
31
  cancel_subscription: Cancela tu subscripción.
32
+ certificate: Certificado
33
+ certificates: Certificados
34
+ certificates_will_be_here: Tus certificados en esta organización aparecerán aquí
35
+ certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> ha sido verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
32
36
  chapter: Capítulo
33
37
  chapters: Capítulos
34
38
  chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
@@ -42,6 +46,7 @@ es-CL:
42
46
  created_at_asc: Antiguas
43
47
  created_at_desc: Nuevas
44
48
  comment: Comentar
49
+ completed_by: Completado por
45
50
  confirm: Confirmar
46
51
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Quieres continuar?
47
52
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Quieres continuar?
@@ -68,6 +73,7 @@ es-CL:
68
73
  new_discussion_message: Mensaje nuevo en %{title}
69
74
  discussion_updated: Consulta actualizada
70
75
  discussions: Consultas
76
+ discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
71
77
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tienes que seguir practicando.
72
78
  download: "Descarga lo que hiciste"
73
79
  edit: Editar
@@ -107,8 +113,10 @@ es-CL:
107
113
  expected_state: Tablero esperado
108
114
  explain_redirect: Notamos que te registraste en otra organización.
109
115
  failed: Tu solución no pasó las pruebas
116
+ faqs: Preguntas Frecuentes
110
117
  feedback: Problemas que encontramos
111
118
  female: Mujer
119
+ file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor selecciona otro archivo."
112
120
  finish: Terminar
113
121
  first_name: Nombre
114
122
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
@@ -152,6 +160,7 @@ es-CL:
152
160
  let_us_know: ¡Por favor avísanos!
153
161
  level: Nivel
154
162
  level_up: ¡Subiste de nivel!
163
+ linkedin_profile_button_locale: es_ES
155
164
  listen_statement: Escucha la consigna
156
165
  loading: Cargando
157
166
  load_solution_into_console: Cargar la solución en la consola
@@ -167,10 +176,12 @@ es-CL:
167
176
  messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Vuelve a intentar más tarde!
168
177
  minute: minuto
169
178
  minutes: minutos
170
- moderation: Moderación
179
+ moderation: Mentoría
171
180
  moderator: Mentor
172
181
  more_messages: Ver mensajes anteriores
182
+ my_account: Mi cuenta
173
183
  my_doubts: Mis consultas
184
+ my_profile: Mi perfil
174
185
  name: Nombre
175
186
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
176
187
  navigation_next: Siguiente %{kind}
@@ -222,7 +233,6 @@ es-CL:
222
233
  previous_exercise: Anterior
223
234
  problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
224
235
  processing_your_solution: Estamos procesando tu solución
225
- profile: Perfil
226
236
  profile_of: Perfil de %{username}
227
237
  progress: Progreso
228
238
  read: Leído
@@ -236,6 +246,7 @@ es-CL:
236
246
  running: procesando
237
247
  save: Guardar
238
248
  see_context: Mira la animación del principio
249
+ select_file: Seleccionar archivo
239
250
  send: Enviar
240
251
  sending_solution: Enviando solución
241
252
  show: Mostrar
@@ -297,7 +308,6 @@ es-CL:
297
308
  unprepared_organization_explanation: ¡Este recorrido aún no ha comenzado!
298
309
  unsubscribe: Dejar de recibir notificaciones
299
310
  unsubscribed_successfully: Te desuscribiste exitosamente de los recordatorios.
300
- upload_solution: "Subir solución"
301
311
  uploading_solution: "Subiendo solución"
302
312
  upvote: Es útil
303
313
  upvotes_count_desc: Más útiles
@@ -34,6 +34,10 @@ es:
34
34
  blocked_forum_explanation: ¿Puede que estés en medio de un examen?
35
35
  cancel: Cancelar
36
36
  cancel_subscription: Cancelá tu subscripción.
37
+ certificate: Certificado
38
+ certificates: Certificados
39
+ certificates_will_be_here: Tus certificados en esta organización aparecerán acá
40
+ certificate_verified_legend: "La cuenta de <strong>%{full_name}</strong> está verificada. Mumuki certifica que completó el curso de <strong>%{description}.</strong>"
37
41
  chapter: Capítulo
38
42
  chapters: Capítulos
39
43
  chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
@@ -46,6 +50,7 @@ es:
46
50
  one: 1 cerrada
47
51
  other: '%{count} cerradas'
48
52
  comment: Comentar
53
+ completed_by: Completado por
49
54
  confirm: Confirmar
50
55
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
51
56
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Querés continuar?
@@ -75,6 +80,7 @@ es:
75
80
  discussion_updated: Consulta actualizada
76
81
  new_discussion_message: Mensaje nuevo en %{title}
77
82
  discussions: Consultas
83
+ discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
78
84
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
79
85
  download: "Descargá lo que hiciste"
80
86
  edit: Editar
@@ -115,8 +121,10 @@ es:
115
121
  expected_state: Tablero esperado
116
122
  explain_redirect: Notamos que te registraste en otra organización.
117
123
  failed: Tu solución no pasó las pruebas
124
+ faqs: Preguntas Frecuentes
118
125
  feedback: Problemas que encontramos
119
126
  female: Mujer
127
+ file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
120
128
  finish: Terminar
121
129
  first_name: Nombre
122
130
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
@@ -163,6 +171,7 @@ es:
163
171
  let_us_know: ¡Por favor avisanos!
164
172
  level: Nivel
165
173
  level_up: ¡Subiste de nivel!
174
+ linkedin_profile_button_locale: es_ES
166
175
  listen_statement: Escuchá la consigna
167
176
  loading: Cargando
168
177
  load_solution_into_console: Cargar la solución en la consola
@@ -181,7 +190,9 @@ es:
181
190
  moderation: Mentoría
182
191
  moderator: Mentor
183
192
  more_messages: Ver mensajes anteriores
193
+ my_account: Mi cuenta
184
194
  my_doubts: Mis consultas
195
+ my_profile: Mi perfil
185
196
  name: Nombre
186
197
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
187
198
  navigation_next: Siguiente %{kind}
@@ -233,7 +244,6 @@ es:
233
244
  previous_exercise: Anterior
234
245
  problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
235
246
  processing_your_solution: Estamos procesando tu solución
236
- profile: Perfil
237
247
  profile_of: Perfil de %{username}
238
248
  programming_since: Programando desde
239
249
  progress: Progreso
@@ -251,6 +261,7 @@ es:
251
261
  running: procesando
252
262
  save: Guardar
253
263
  see_context: Mirá la animación del principio
264
+ select_file: Seleccionar archivo
254
265
  send: Enviar
255
266
  sending_solution: Enviando solución
256
267
  show: Mostrar
@@ -313,7 +324,6 @@ es:
313
324
  unprepared_organization_explanation: Este recorrido aún no ha comenzado
314
325
  unsubscribe: Dejar de recibir notificaciones
315
326
  unsubscribed_successfully: Te desuscribiste exitosamente de los recordatorios.
316
- upload_solution: "Subir solución"
317
327
  uploading_solution: "Subiendo solución"
318
328
  upvote: Es útil
319
329
  upvotes_count_desc: Más útiles