mumuki-laboratory 9.8.0 → 9.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) 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/_editor.scss +3 -0
  5. data/app/controllers/messages_controller.rb +2 -5
  6. data/app/controllers/users_controller.rb +5 -1
  7. data/app/helpers/application_helper.rb +4 -0
  8. data/app/helpers/discussions_helper.rb +11 -4
  9. data/app/helpers/exam_registration_helper.rb +0 -4
  10. data/app/helpers/icons_helper.rb +1 -1
  11. data/app/helpers/menu_bar_helper.rb +1 -1
  12. data/app/helpers/messages_helper.rb +4 -8
  13. data/app/helpers/profile_helper.rb +4 -0
  14. data/app/helpers/user_discussions_helper.rb +38 -0
  15. data/app/views/discussions/new.html.erb +1 -1
  16. data/app/views/layouts/_copyright.html.erb +1 -1
  17. data/app/views/layouts/_discussions.html.erb +1 -37
  18. data/app/views/layouts/_discussions_list.html.erb +38 -0
  19. data/app/views/layouts/_messages.html.erb +1 -7
  20. data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +1 -1
  21. data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
  22. data/app/views/user_mailer/1st_reminder.html.erb +1 -1
  23. data/app/views/user_mailer/1st_reminder.text.erb +1 -1
  24. data/app/views/user_mailer/2nd_reminder.html.erb +1 -1
  25. data/app/views/user_mailer/2nd_reminder.text.erb +1 -1
  26. data/app/views/user_mailer/3rd_reminder.html.erb +1 -1
  27. data/app/views/user_mailer/3rd_reminder.text.erb +1 -1
  28. data/app/views/user_mailer/certificate.html.erb +1 -1
  29. data/app/views/user_mailer/certificate.text.erb +1 -1
  30. data/app/views/user_mailer/no_submissions_reminder.html.erb +1 -1
  31. data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -1
  32. data/app/views/users/_basic_profile_fields.html.erb +30 -0
  33. data/app/views/users/_profile_fields.html.erb +1 -20
  34. data/app/views/users/discussions.html.erb +19 -11
  35. data/app/views/users/messages.html.erb +1 -1
  36. data/config/routes.rb +0 -1
  37. data/lib/mumuki/laboratory/locales/en.yml +12 -6
  38. data/lib/mumuki/laboratory/locales/es-CL.yml +13 -6
  39. data/lib/mumuki/laboratory/locales/es.yml +13 -7
  40. data/lib/mumuki/laboratory/locales/pt.yml +11 -5
  41. data/lib/mumuki/laboratory/version.rb +1 -1
  42. data/spec/controllers/organizations_api_controller_spec.rb +6 -1
  43. data/spec/controllers/students_api_controller_spec.rb +1 -1
  44. data/spec/dummy/db/schema.rb +3 -1
  45. data/spec/features/not_found_public_flow_spec.rb +1 -1
  46. data/spec/features/profile_flow_spec.rb +1 -1
  47. metadata +116 -114
  48. data/app/views/messages/errors.html.erb +0 -1
@@ -1,14 +1,8 @@
1
1
  <div class="mu-view-messages">
2
2
  <div class="mu-messages">
3
3
  <ol class="mu-chat">
4
- <li>
5
- <a href="javascript:{}"
6
- onclick="mumuki.Chat.submitMessagesForm('<%= messages_url(@exercise) %>', '<%= read_messages_path(@exercise) %>', '<%= messages_errors_path %>')">
7
- <%= t :more_messages %>
8
- </a>
9
- </li>
10
4
  <% messages.each do |message| %>
11
- <li class="<%= sender_class(message) %>">
5
+ <li class="<%= sender_class(message) %> <%= staleness_class(message) %>">
12
6
  <div class="message">
13
7
  <p> <%= message.content_html %></p>
14
8
  <div class="sender"><%= message.sender unless message.sender == current_user_uid %></div>
@@ -15,7 +15,7 @@
15
15
  <% if @assignment.pending_messages? %>
16
16
  <span class="pending-messages-text"> <%= t :pending_messages_explanation %>
17
17
  <a href="javascript:{}"
18
- onclick="mumuki.Chat.submitMessagesForm('<%= messages_url(exercise) %>', '<%= read_messages_path(exercise) %>')"
18
+ onclick="mumuki.Chat.readMessages('<%= read_messages_path(exercise) %>')"
19
19
  class="<%= hidden_pending(@assignment) %>"
20
20
  data-waiting="<%= t(:sending_solution) %>">
21
21
  <%= t :get_messages %>
@@ -23,7 +23,7 @@
23
23
  <% if @assignment.pending_messages? %>
24
24
  <span class="pending-messages-text"> <%= t :pending_messages_explanation %>
25
25
  <a href="javascript:{}"
26
- onclick="mumuki.Chat.submitMessagesForm('<%= messages_url(exercise) %>', '<%= read_messages_path(exercise) %>')"
26
+ onclick="mumuki.Chat.readMessages('<%= read_messages_path(exercise) %>')"
27
27
  class="<%= hidden_pending(@assignment) %>"
28
28
  data-waiting="<%= t(:sending_solution) %>">
29
29
  <%= t :get_messages %>
@@ -313,7 +313,7 @@
313
313
 
314
314
  <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
315
315
 
316
- © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
316
+ © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
317
317
  <br>
318
318
  <%= t :stop_emails? %><br>
319
319
  <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
@@ -7,7 +7,7 @@
7
7
  <%= t :keep_learning %>
8
8
 
9
9
 
10
- © Copyright 2015-<%= DateTime.now.year %> Mumuki.
10
+ © Copyright 2015-<%= Time.current.year %> Mumuki.
11
11
 
12
12
  <%= t :stop_emails? %>
13
13
  <%= t :cancel_subscription %>
@@ -313,7 +313,7 @@
313
313
 
314
314
  <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
315
315
 
316
- © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
316
+ © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
317
317
  <br>
318
318
  <%= t :stop_emails? %><br>
319
319
  <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
@@ -7,7 +7,7 @@
7
7
  <%= t :keep_learning %>
8
8
 
9
9
 
10
- © Copyright 2015-<%= DateTime.now.year %> Mumuki.
10
+ © Copyright 2015-<%= Time.current.year %> Mumuki.
11
11
 
12
12
  <%= t :stop_emails? %>
13
13
  <%= t :cancel_subscription %>
@@ -313,7 +313,7 @@
313
313
 
314
314
  <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
315
315
 
316
- © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
316
+ © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
317
317
  <br>
318
318
  <%= t :stop_emails? %><br>
319
319
  <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
@@ -7,7 +7,7 @@
7
7
  <%= t :keep_learning %>
8
8
 
9
9
 
10
- © Copyright 2015-<%= DateTime.now.year %> Mumuki.
10
+ © Copyright 2015-<%= Time.current.year %> Mumuki.
11
11
 
12
12
  <%= t :stop_emails? %>
13
13
  <%= t :cancel_subscription %>
@@ -299,7 +299,7 @@
299
299
 
300
300
  <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
301
301
 
302
- © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
302
+ © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
303
303
  <br>
304
304
  <%= t :stop_emails? %><br>
305
305
  <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
@@ -4,7 +4,7 @@
4
4
  <%= t :new_certificate_mailer_p2 %>
5
5
 
6
6
 
7
- © Copyright 2015-<%= DateTime.now.year %> Mumuki.
7
+ © Copyright 2015-<%= Time.current.year %> Mumuki.
8
8
 
9
9
  <%= t :stop_emails? %>
10
10
  <%= t :cancel_subscription %>
@@ -313,7 +313,7 @@
313
313
 
314
314
  <td valign="top" class="muMailTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
315
315
 
316
- © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
316
+ © Copyright 2015-<%= Time.current.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki</a><em>.</em><br>
317
317
  <br>
318
318
  <%= t :stop_emails? %><br>
319
319
  <%= link_to t(:cancel_subscription), @organization.url_for("/user/unsubscribe?id=#{@unsubscribe_code}"), target: :_blank %>
@@ -7,7 +7,7 @@
7
7
  <%= t :keep_learning %>
8
8
 
9
9
 
10
- © Copyright 2015-<%= DateTime.now.year %> Mumuki.
10
+ © Copyright 2015-<%= Time.current.year %> Mumuki.
11
11
 
12
12
  <%= t :stop_emails? %>
13
13
  <%= t :cancel_subscription %>
@@ -0,0 +1,30 @@
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>
21
+
22
+ <% if show_verified_full_name_notice?(@user, Organization.current) %>
23
+ <label><%= (t :verified_full_name) %></label>
24
+ <input class="form-control" readonly="readonly" value="<%= @user.verified_full_name %>">
25
+ <p class="fs-7">
26
+ <%= fa_icon("question-circle", text: (t :verified_full_name_notice,
27
+ organization: Organization.current.display_name,
28
+ contact: Organization.current.contact_email)) %>
29
+ </p>
30
+ <% end %>
@@ -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>
@@ -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>
data/config/routes.rb CHANGED
@@ -77,7 +77,6 @@ Rails.application.routes.draw do
77
77
  resources :faqs, only: [:index]
78
78
 
79
79
  resources :messages, only: [:index, :create]
80
- get '/messages/errors' => 'messages#errors'
81
80
 
82
81
  get 'certificates/verify/:code', to: 'certificates#verify', as: :verify_certificate
83
82
  get 'certificates/download/:code', to: 'certificates#download', as: :download_certificate
@@ -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"
@@ -83,10 +84,13 @@ en:
83
84
  destroy_message: delete the message
84
85
  disabled_explanation: You are trying to visit a permamently disabled or deleted resource
85
86
  disabled_organization_explanation: This path has already finished.
87
+ discussion_created_by: Created by
86
88
  discussion_description_placeholder: You can add more information regarding your doubt.
87
89
  new_discussion_message: New message on %{title}
88
90
  discussion_updated: Discussion updated
89
91
  discussions: Discussions
92
+ discussions_read: Read
93
+ discussions_unread: Unread
90
94
  discussions_will_be_here: Your posts in the forum will appear here.
91
95
  dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
92
96
  download: Download your solution
@@ -133,7 +137,8 @@ en:
133
137
  expected_state: Expected board
134
138
  explain_redirect: You have registered in another organization
135
139
  failed: Oops, something went wrong
136
- faqs: FAQs
140
+ faqs: Frequently Asked Questions
141
+ faqs_abbreviated: FAQs
137
142
  feedback: Feedback
138
143
  female: Female
139
144
  file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
@@ -168,6 +173,7 @@ en:
168
173
  keep_learning: Keep learning!
169
174
  kids_default_success: You did it great!
170
175
  language: Language
176
+ last_message: Last message
171
177
  last_name: Last Name
172
178
  last_submission_date: Last submission
173
179
  latest_exercises: Latest exercises
@@ -189,7 +195,6 @@ en:
189
195
  message: Message
190
196
  message_deleted: This message was deleted because it %{motive}, which violates the %{forum_terms}.
191
197
  messages: Messages
192
- messages_error: Previous messages are unavailable. Please try again later.
193
198
  messages_pluralized:
194
199
  one: Message
195
200
  other: Messages
@@ -204,7 +209,6 @@ en:
204
209
  you_are: You're taking care of it
205
210
  you_will_confirmation: You'll take care of this discussion. If you change your mind, click the button again.
206
211
  you_wont_confirmation: You won't take care of this discussion.
207
- more_messages: More
208
212
  my_account: My account
209
213
  my_doubts: My doubts
210
214
  my_profile: My profile
@@ -261,8 +265,8 @@ en:
261
265
  processing_your_solution: We are processing you solution
262
266
  profile_of: Profile of %{username}
263
267
  programming_since: Started programming
264
- progress: Progresss
265
- read: Read
268
+ progress: Progress
269
+ publish_discussion: Publish discussion
266
270
  refresh_or_wait: Please press F5 if results are not displayed after a few seconds
267
271
  reply_count:
268
272
  one: 1 reply
@@ -323,7 +327,7 @@ en:
323
327
  terms_and_conditions_continue_disclaimer: By continuing you agree to %{terms_link}
324
328
  terms_and_conditions_must_be_accepted: You must accept the terms and conditions
325
329
  test_results: Test results
326
- time_ago: "%{time} ago"
330
+ time_since: "%{time} ago"
327
331
  time_left: You have
328
332
  title: Title
329
333
  to_closed: Close
@@ -346,6 +350,8 @@ en:
346
350
  user: User
347
351
  user_data_updated: Your data was updated successfully
348
352
  username: Username
353
+ verified_full_name: Verified name
354
+ verified_full_name_notice: Your verified name was provided by %{organization}. If there's a mistake, please send an email to %{contact}.
349
355
  view_details: View details
350
356
  want_permissions: The following user requires permissions for the organization
351
357
  we_miss_you: We miss you!
@@ -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'
@@ -86,8 +88,11 @@ es-CL:
86
88
  disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permanente
87
89
  disabled_organization_explanation: ¡Este recorrido ha finalizado!
88
90
  new_discussion_message: Mensaje nuevo en %{title}
91
+ discussion_created_by: Creada por
89
92
  discussion_updated: Consulta actualizada
90
93
  discussions: Consultas
94
+ discussions_read: Leídas
95
+ discussions_unread: No leídas
91
96
  discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
92
97
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tienes que seguir practicando.
93
98
  download: "Descarga lo que hiciste"
@@ -132,7 +137,8 @@ es-CL:
132
137
  expected_state: Tablero esperado
133
138
  explain_redirect: Notamos que te registraste en otra organización.
134
139
  failed: Tu solución no pasó las pruebas
135
- faqs: Preguntas Frecuentes
140
+ faqs: Información importante
141
+ faqs_abbreviated: Información
136
142
  feedback: Problemas que encontramos
137
143
  female: Mujer
138
144
  file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor selecciona otro archivo."
@@ -169,6 +175,7 @@ es-CL:
169
175
  kids_default_success: ¡Lo hiciste muy bien!
170
176
  language: Lenguaje
171
177
  languages: Lenguajes
178
+ last_message: Último mensaje
172
179
  last_name: Apellido
173
180
  last_submission_date: Última solución
174
181
  latest_exercises: Últimos ejercicios
@@ -190,7 +197,6 @@ es-CL:
190
197
  message: Mensaje
191
198
  message_deleted: Este mensaje fue eliminado porque %{motive}, lo cual infringe las %{forum_terms}.
192
199
  messages: Mensajes
193
- messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Vuelve a intentar más tarde!
194
200
  messages_pluralized:
195
201
  one: Mensaje
196
202
  other: Mensajes
@@ -207,7 +213,6 @@ es-CL:
207
213
  you_are: Te estás ocupando
208
214
  you_will_confirmation: Te vas a ocupar de esta consulta. Si cambias de parecer, toca nuevamente el botón.
209
215
  you_wont_confirmation: No te vas a ocupar de esta consulta.
210
- more_messages: Ver mensajes anteriores
211
216
  my_account: Mi cuenta
212
217
  my_doubts: Mis consultas
213
218
  my_profile: Mi perfil
@@ -269,7 +274,7 @@ es-CL:
269
274
  processing_your_solution: Estamos procesando tu solución
270
275
  profile_of: Perfil de %{username}
271
276
  progress: Progreso
272
- read: Leído
277
+ publish_discussion: Publicar consulta
273
278
  read_messages: Ver mensajes
274
279
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presiona F5
275
280
  reply_count:
@@ -358,6 +363,8 @@ es-CL:
358
363
  user_data_updated: Tus datos se actualizaron correctamente
359
364
  user: Usuario
360
365
  username: Nombre de usuario
366
+ verified_full_name: Nombre verificado
367
+ verified_full_name_notice: Tu nombre verificado fue provisto por %{organization}. Si hay algún error, por favor escribe a %{contact}.
361
368
  view_details: Ver detalles
362
369
  want_permissions: El siguiente usuario requiere permisos para la organización
363
370
  we_miss_you: ¡Te extrañamos!
@@ -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'
@@ -91,10 +92,13 @@ es:
91
92
  details: Detalles
92
93
  disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permamente
93
94
  disabled_organization_explanation: Este recorrido ha finalizado
95
+ discussion_created_by: Creada por
94
96
  discussion_description_placeholder: Podés agregar información para detallar más tu consulta
95
97
  discussion_updated: Consulta actualizada
96
98
  new_discussion_message: Mensaje nuevo en %{title}
97
99
  discussions: Consultas
100
+ discussions_read: Leídas
101
+ discussions_unread: No leídas
98
102
  discussions_will_be_here: Las preguntas que realices en el espacio de consultas aparecerán aquí.
99
103
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
100
104
  download: "Descargá lo que hiciste"
@@ -140,7 +144,8 @@ es:
140
144
  expected_state: Tablero esperado
141
145
  explain_redirect: Notamos que te registraste en otra organización.
142
146
  failed: Tu solución no pasó las pruebas
143
- faqs: Preguntas Frecuentes
147
+ faqs: Información importante
148
+ faqs_abbreviated: Información
144
149
  feedback: Problemas que encontramos
145
150
  female: Mujer
146
151
  file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
@@ -179,6 +184,7 @@ es:
179
184
  kids_default_success: ¡Lo hiciste muy bien!
180
185
  language: Lenguaje
181
186
  languages: Lenguajes
187
+ last_message: Último mensaje
182
188
  last_name: Apellido
183
189
  last_submission_date: Última solución
184
190
  latest_exercises: Últimos ejercicios
@@ -200,7 +206,6 @@ es:
200
206
  message: Mensaje
201
207
  message_deleted: Este mensaje fue eliminado porque %{motive}, lo cual infringe las %{forum_terms}.
202
208
  messages: Mensajes
203
- messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Volvé a intentar mas tarde!
204
209
  messages_pluralized:
205
210
  one: Mensaje
206
211
  other: Mensajes
@@ -217,7 +222,6 @@ es:
217
222
  you_are: Te estás ocupando
218
223
  you_will_confirmation: Te vas a ocupar de esta consulta. Si cambiás de parecer, tocá nuevamente el botón.
219
224
  you_wont_confirmation: No te vas a ocupar de esta consulta.
220
- more_messages: Ver mensajes anteriores
221
225
  my_account: Mi cuenta
222
226
  my_doubts: Mis consultas
223
227
  my_profile: Mi perfil
@@ -280,7 +284,7 @@ es:
280
284
  profile_of: Perfil de %{username}
281
285
  programming_since: Programando desde
282
286
  progress: Progreso
283
- read: Leido
287
+ publish_discussion: Publicar consulta
284
288
  read_messages: Ver mensajes
285
289
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presioná F5
286
290
  reply_count:
@@ -373,6 +377,8 @@ es:
373
377
  user_data_updated: Tus datos se actualizaron correctamente
374
378
  user: Usuario
375
379
  username: Nombre de usuario
380
+ verified_full_name: Nombre verificado
381
+ verified_full_name_notice: Tu nombre verificado fue provisto por %{organization}. Si hay algún error, por favor escribí a %{contact}.
376
382
  view_details: Ver detalles
377
383
  want_permissions: El siguiente usuario requiere permisos para la organización
378
384
  we_miss_you: ¡Te extrañamos!