mumuki-laboratory 7.4.2 → 7.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -18
  3. data/app/assets/javascripts/mumuki_laboratory/application/codemirror.js +19 -2
  4. data/app/assets/javascripts/mumuki_laboratory/application/elipsis.js +31 -0
  5. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +5 -16
  6. data/app/assets/javascripts/mumuki_laboratory/application/speech-bubble-renderer.js +99 -0
  7. data/app/assets/stylesheets/mumuki_laboratory/application.scss +1 -0
  8. data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +0 -4
  9. data/app/assets/stylesheets/mumuki_laboratory/application/_locked.scss +29 -0
  10. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss +0 -23
  11. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_results.scss +11 -0
  12. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss +1 -1
  13. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_overlap.scss +21 -2
  14. data/app/assets/stylesheets/mumuki_laboratory/application/modules/popover.scss +1 -1
  15. data/app/controllers/application_controller.rb +25 -2
  16. data/app/controllers/concerns/users_controller_template.rb +6 -1
  17. data/app/controllers/invitations_controller.rb +1 -0
  18. data/app/controllers/login_controller.rb +1 -0
  19. data/app/helpers/application_helper.rb +1 -5
  20. data/app/helpers/contextualization_result_helper.rb +7 -7
  21. data/app/helpers/discussions_helper.rb +1 -1
  22. data/app/helpers/exercise_input_helper.rb +1 -1
  23. data/app/helpers/links_helper.rb +1 -1
  24. data/app/helpers/overlapped_buttons_helper.rb +17 -0
  25. data/app/views/book/show.html.erb +14 -6
  26. data/app/views/errors/gone.html.erb +4 -1
  27. data/app/views/exercise_solutions/_expectations.html.erb +2 -2
  28. data/app/views/exercise_solutions/_kids_results_button.html.erb +1 -1
  29. data/app/views/exercises/_read_only.html.erb +1 -1
  30. data/app/views/exercises/show.html.erb +19 -15
  31. data/app/views/layouts/_exercise_skipped.html.erb +28 -0
  32. data/app/views/layouts/_kids.html.erb +1 -1
  33. data/app/views/layouts/_test_results.html.erb +11 -8
  34. data/app/views/layouts/exercise_inputs/editors/_code.html.erb +8 -7
  35. data/app/views/layouts/exercise_inputs/editors/_multiple_files.html.erb +8 -9
  36. data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +2 -2
  37. data/app/views/layouts/exercise_inputs/forms/_playground_form.html.erb +1 -1
  38. data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
  39. data/app/views/layouts/modals/_kids_results.html.erb +1 -1
  40. data/app/views/user_mailer/1st_reminder.html.erb +1 -1
  41. data/app/views/user_mailer/1st_reminder.text.erb +1 -1
  42. data/app/views/user_mailer/2nd_reminder.html.erb +1 -1
  43. data/app/views/user_mailer/2nd_reminder.text.erb +1 -1
  44. data/app/views/user_mailer/3rd_reminder.html.erb +1 -1
  45. data/app/views/user_mailer/3rd_reminder.text.erb +1 -1
  46. data/app/views/user_mailer/no_submissions_reminder.html.erb +1 -1
  47. data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -1
  48. data/app/views/users/_user_form.html.erb +1 -1
  49. data/config/initializers/session_store.rb +1 -1
  50. data/lib/mumuki/laboratory/controllers.rb +1 -0
  51. data/lib/mumuki/laboratory/controllers/authorization.rb +0 -4
  52. data/lib/mumuki/laboratory/controllers/disabling.rb +5 -0
  53. data/lib/mumuki/laboratory/controllers/dynamic_errors.rb +16 -1
  54. data/lib/mumuki/laboratory/controllers/results_rendering.rb +15 -17
  55. data/lib/mumuki/laboratory/locales/en.yml +12 -2
  56. data/lib/mumuki/laboratory/locales/es.yml +13 -2
  57. data/lib/mumuki/laboratory/locales/pt.yml +13 -2
  58. data/lib/mumuki/laboratory/version.rb +1 -1
  59. data/spec/controllers/exercise_solutions_controller_spec.rb +29 -14
  60. data/spec/controllers/users_api_controller_spec.rb +1 -0
  61. data/spec/controllers/users_controller_spec.rb +21 -0
  62. data/spec/dummy/db/schema.rb +10 -1
  63. data/spec/dummy/db/seeds.rb +8 -0
  64. data/spec/features/disable_user_flow_spec.rb +34 -0
  65. data/spec/features/disabled_organization_flow_spec.rb +69 -0
  66. data/spec/features/exercise_flow_spec.rb +20 -11
  67. data/spec/features/home_public_flow_spec.rb +34 -2
  68. data/spec/helpers/test_results_rendering_spec.rb +50 -28
  69. data/spec/login_helper.rb +1 -1
  70. data/spec/spec_helper.rb +2 -0
  71. metadata +32 -7
  72. data/app/helpers/reset_button_helper.rb +0 -10
@@ -28,7 +28,7 @@
28
28
  <a class="console-reset submission-reset"><%= restart_icon %></a>
29
29
  </div>
30
30
  </div>
31
- <div role="tabpanel" class="tab-pane mu-input-panel fade" id="visible-extra">
31
+ <div role="tabpanel" class="tab-pane mu-input-panel fade mu-elipsis" id="visible-extra">
32
32
  <%= @assignment.extra_preview_html %>
33
33
  </div>
34
34
  <div role="tabpanel" class="tab-pane mu-input-panel fade" id="messages">
@@ -40,7 +40,7 @@
40
40
  <% if current_user? %>
41
41
  <div class="row">
42
42
  <div class="col-md-12 submission-results">
43
- <% if @assignment.passed? %>
43
+ <% if @assignment.solved? %>
44
44
  <%= render partial: 'exercise_solutions/results',
45
45
  locals: {assignment: @assignment, guide_finished_by_solution: false} %>
46
46
  <% end %>
@@ -17,7 +17,7 @@
17
17
  <a class="console-reset submission-reset"><%= restart_icon %></a>
18
18
  </div>
19
19
  </div>
20
- <div role="tabpanel" class="tab-pane mu-input-panel fade" id="visible-extra">
20
+ <div role="tabpanel" class="tab-pane mu-input-panel fade mu-elipsis" id="visible-extra">
21
21
  <%= @assignment.extra_preview_html %>
22
22
  </div>
23
23
  </div>
@@ -51,7 +51,7 @@
51
51
  <label for="include_solution"><p><%= t(:load_solution_into_console) %></p></label>
52
52
  </div>
53
53
  </div>
54
- <div role="tabpanel" class="tab-pane mu-input-panel fade" id="visible-extra">
54
+ <div role="tabpanel" class="tab-pane mu-input-panel fade mu-elipsis" id="visible-extra">
55
55
  <%= @assignment.extra_preview_html %>
56
56
  </div>
57
57
  <div role="tabpanel" class="tab-pane mu-input-panel fade" id="messages">
@@ -9,7 +9,7 @@
9
9
  <div class="col-md-12">
10
10
  <div class="row">
11
11
  <div class="col-md-12 submission-results">
12
- <% if @assignment.passed? %>
12
+ <% if current_user? && @assignment.solved? %>
13
13
  <%= render partial: 'exercise_solutions/kids_results',
14
14
  locals: {assignment: @assignment, guide_finished_by_solution: false} %>
15
15
  <% end %>
@@ -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-2018&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</a><em>.</em><br>
316
+ © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</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-2018 Mumuki Project.
10
+ © Copyright 2015-<%= DateTime.now.year %> Mumuki Project.
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-2018&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</a><em>.</em><br>
316
+ © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</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-2018 Mumuki Project.
10
+ © Copyright 2015-<%= DateTime.now.year %> Mumuki Project.
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-2018&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</a><em>.</em><br>
316
+ © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</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-2018 Mumuki Project.
10
+ © Copyright 2015-<%= DateTime.now.year %> Mumuki Project.
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-2018&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</a><em>.</em><br>
316
+ © Copyright 2015-<%= DateTime.now.year %>&nbsp;<a href="https://mumuki.org/home/">Mumuki Project</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-2018 Mumuki Project.
10
+ © Copyright 2015-<%= DateTime.now.year %> Mumuki Project.
11
11
 
12
12
  <%= t :stop_emails? %>
13
13
  <%= t :cancel_subscription %>
@@ -1,7 +1,7 @@
1
1
  <%= form_for :user, url: update_user_path, method: :put do |f| %>
2
2
  <div class="row mu-tab-body">
3
3
  <div class="col-md-4 text-center">
4
- <%= image_tag @user.image_url, size: '250x250', class: 'img-circle' %>
4
+ <%= image_tag @user.profile_picture, size: '250x250', class: 'img-circle' %>
5
5
  </div>
6
6
  <div class="col-md-8">
7
7
  <%= render partial: 'profile_fields', locals: {form: f} %>
@@ -1 +1 @@
1
- Rails.application.config.session_store :cookie_store, key: '_mumuki_laboratory_session', same_site: Mumukit::Login::Mucookie.cookie_same_site
1
+ Rails.application.config.session_store Mumukit::Login::Mucookie::Store, key: '_mumuki_laboratory_session', same_site: :lax
@@ -2,6 +2,7 @@ module Mumuki::Laboratory::Controllers
2
2
  end
3
3
 
4
4
  require_relative './controllers/authorization'
5
+ require_relative './controllers/disabling'
5
6
  require_relative './controllers/current_organization'
6
7
  require_relative './controllers/dynamic_errors'
7
8
  require_relative './controllers/notifications'
@@ -1,8 +1,4 @@
1
1
  module Mumuki::Laboratory::Controllers::Authorization
2
- def from_sessions?
3
- params['controller'] == 'login'
4
- end
5
-
6
2
  def authorize_if_private!
7
3
  return if Organization.current.public? || from_sessions?
8
4
  authorize! :student
@@ -0,0 +1,5 @@
1
+ module Mumuki::Laboratory::Controllers::Disabling
2
+ def ensure_user_enabled!
3
+ current_user.ensure_enabled! unless from_sessions?
4
+ end
5
+ end
@@ -14,7 +14,10 @@ module Mumuki::Laboratory::Controllers::DynamicErrors
14
14
  rescue_from Mumuki::Domain::UnauthorizedError, with: :unauthorized
15
15
  rescue_from Mumuki::Domain::GoneError, with: :gone
16
16
  rescue_from Mumuki::Domain::BlockedForumError, with: :blocked_forum
17
+ rescue_from Mumuki::Domain::DisabledError, with: :disabled
17
18
  rescue_from ActiveRecord::RecordInvalid, with: :bad_record
19
+ rescue_from Mumuki::Domain::UnpreparedOrganizationError, with: :unprepared_organization
20
+ rescue_from Mumuki::Domain::DisabledOrganizationError, with: :disabled_organization
18
21
  end
19
22
 
20
23
  def bad_record(exception)
@@ -41,12 +44,24 @@ module Mumuki::Laboratory::Controllers::DynamicErrors
41
44
  render_error 'forbidden', 403, locals: { explanation: :forbidden_explanation }, error_message: message
42
45
  end
43
46
 
47
+ def disabled
48
+ render_error 'forbidden', 403, locals: { explanation: :disabled_explanation }
49
+ end
50
+
44
51
  def blocked_forum
45
52
  render_error 'forbidden', 403, locals: { explanation: :blocked_forum_explanation }
46
53
  end
47
54
 
48
55
  def gone
49
- render_error 'gone', 410
56
+ render_error 'gone', 410, locals: { explanation: :gone_explanation }
57
+ end
58
+
59
+ def unprepared_organization
60
+ render_error 'forbidden', 403, locals: { explanation: :unprepared_organization_explanation }
61
+ end
62
+
63
+ def disabled_organization
64
+ render_error 'gone', 410, locals: { explanation: :disabled_organization_explanation }
50
65
  end
51
66
 
52
67
  def render_error(template, status, options={})
@@ -10,22 +10,25 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
10
10
  def render_results_json(assignment, results = {})
11
11
  if assignment.input_kids?
12
12
  merge_kids_specific_renders(assignment, results)
13
- render_results = 'exercise_solutions/kids_results'
13
+ layout = 'exercise_solutions/kids_results'
14
14
  else
15
- render_results = 'exercise_solutions/results'
15
+ layout = 'exercise_solutions/results'
16
16
  end
17
17
 
18
- render json: results.merge(progress_json).merge(
19
- html: render_results_html(render_results, assignment),
20
- remaining_attempts_html: remaining_attempts_text(assignment))
18
+ render json: results
19
+ .merge(progress_json)
20
+ .merge(
21
+ html: render_results(layout, assignment),
22
+ remaining_attempts_html: remaining_attempts_text(assignment))
21
23
  end
22
24
 
23
25
  def merge_kids_specific_renders(assignment, results)
24
26
  results.merge!(
25
- button_html: render_results_button_html(assignment),
26
- title_html: render_results_title_html(assignment),
27
- expectations_html: render_results_expectations_html(assignment),
28
- test_results: assignment.test_results)
27
+ button_html: render_results_button(assignment),
28
+ title_html: render_results_title(assignment),
29
+ expectations: assignment.affable_expectation_results,
30
+ tips: assignment.affable_tips,
31
+ test_results: assignment.affable_test_results)
29
32
  end
30
33
 
31
34
  def progress_json
@@ -35,26 +38,21 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
35
38
  }
36
39
  end
37
40
 
38
- def render_results_html(results_partial, assignment)
41
+ def render_results(results_partial, assignment)
39
42
  render_to_string partial: results_partial,
40
43
  locals: {assignment: assignment}
41
44
  end
42
45
 
43
- def render_results_title_html(assignment)
46
+ def render_results_title(assignment)
44
47
  render_to_string partial: 'exercise_solutions/results_title',
45
48
  locals: {contextualization: assignment}
46
49
  end
47
50
 
48
- def render_results_button_html(assignment)
51
+ def render_results_button(assignment)
49
52
  render_to_string partial: 'exercise_solutions/kids_results_button',
50
53
  locals: {assignment: assignment}
51
54
  end
52
55
 
53
- def render_results_expectations_html(assignment)
54
- render_to_string partial: 'exercise_solutions/expectations',
55
- locals: {assignment: assignment}
56
- end
57
-
58
56
  def guide_finished_by_solution?
59
57
  !@guide_previously_done && @exercise.guide_done_for?(current_user)
60
58
  end
@@ -40,6 +40,7 @@ en:
40
40
  created_at_desc: Newest
41
41
  comment: Comment
42
42
  confirm: Confirm
43
+ confirm_reset: You are about to restart your exercise. Do you want to proceed?
43
44
  confirm_restart: You are about to delete your progress for this guide. Do you want to proceed?
44
45
  console: Console
45
46
  contact_administrator: 'If you think this is not supposed to happen, please contact the admin: %{link}'
@@ -53,8 +54,10 @@ en:
53
54
  created_at: Created at
54
55
  date: Date
55
56
  description: Description
56
- destroy: Destroy
57
57
  destroy_message: delete the message
58
+ destroy: Destroy
59
+ disabled_explanation: You are trying to visit a permamently disabled or deleted resource
60
+ disabled_organization_explanation: This path has already finished.
58
61
  discussion_updated: Discussion updated
59
62
  discussions: Discussions
60
63
  dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
@@ -87,6 +90,7 @@ en:
87
90
  finish: Finish
88
91
  first_name: First Name
89
92
  forbidden_explanation: You are not allowed to see this content.
93
+ format: Format
90
94
  gender: Gender
91
95
  go_to: 'Go to %{organization}'
92
96
  gone_explanation: This content is no longer available.
@@ -118,6 +122,7 @@ en:
118
122
  let_us_know: please let us know!
119
123
  loading: Loading
120
124
  load_solution_into_console: Load your solution into the console
125
+ locked_content: 'This content will be unlocked when you finish previous chapters'
121
126
  male: Male
122
127
  manual_evaluation_pending: Thanks for submitting your solution! It will be revised by the course teachers soon
123
128
  message_count:
@@ -192,6 +197,10 @@ en:
192
197
  sign_in_action: sign in
193
198
  sign_out: Sign Out
194
199
  sign_up_date: User since
200
+ skipped: You are doing very well, so you've passed this exercise.
201
+ skipped_congratulations: Well done!
202
+ skipped_description: You are doing very well, so you've passed this exercise.
203
+ skipped_solve_anyway: Solve anyway
195
204
  solution: Solution
196
205
  solved: Solved
197
206
  solved_count: '%{count} solved'
@@ -220,7 +229,6 @@ en:
220
229
  tell_us_if_our_error: If you think this is our fault, %{issues}
221
230
  terms_and_conditions: Terms and conditions
222
231
  test_results: Test results
223
- test_results: Tests results
224
232
  time_ago: "%{time} ago"
225
233
  time_left: You have
226
234
  title: Title
@@ -230,7 +238,9 @@ en:
230
238
  to_solved: Mark as solved
231
239
  unauthorized_explanation: You have no permissions for this content. Maybe you logged in with another account.
232
240
  undo_upvote: Undo upvote
241
+ unspecified: I'd rather not say
233
242
  unmeet_expectations: "Goals that weren't met"
243
+ unprepared_organization_explanation: This path hasn't started yet.
234
244
  unsubscribe: Unsubscribe
235
245
  unsubscribed_successfully: You have successfully unsubscribed from reminders.
236
246
  upload_solution: Upload Solution
@@ -43,6 +43,7 @@ es:
43
43
  created_at_desc: Nuevas
44
44
  comment: Comentar
45
45
  confirm: Confirmar
46
+ confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
46
47
  confirm_restart: Estás por borrar tu progreso en esta guía. ¿Querés continuar?
47
48
  console: Consola
48
49
  contact_administrator: 'Si pensás que es un error, comunicate con la persona que administra esta organización: %{link}'
@@ -59,9 +60,11 @@ es:
59
60
  day: Día
60
61
  days: Días
61
62
  description: Descripción
62
- destroy: Eliminar
63
63
  destroy_message: eliminar el mensaje
64
+ destroy: Eliminar
64
65
  details: Detalles
66
+ disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permamente
67
+ disabled_organization_explanation: ¡Este recorrido ha finalizado!
65
68
  discussion_updated: Consulta actualizada
66
69
  discussions: Consultas
67
70
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
@@ -93,9 +96,10 @@ es:
93
96
  finish: Terminar
94
97
  first_name: Nombre
95
98
  forbidden_explanation: Es decir que no tenés autorización para ver este contenido. <br> ¿Puede que hayas ingresado con una cuenta incorrecta?
99
+ format: Dar formato
96
100
  gender: Género
97
101
  go_to: 'Ir a %{organization}'
98
- gone_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que ya no podés ver este contenido.
102
+ gone_explanation: Este contenido ya no está disponible.
99
103
  guide: Lección
100
104
  guide_created: Guía creada exitosamente
101
105
  guide_finished: ¡Terminaste %{guide}!
@@ -128,6 +132,7 @@ es:
128
132
  let_us_know: ¡Por favor avisanos!
129
133
  loading: Cargando
130
134
  load_solution_into_console: Cargar la solución en la consola
135
+ locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
131
136
  male: Hombre
132
137
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
133
138
  message_count:
@@ -211,6 +216,10 @@ es:
211
216
  sign_in_action: iniciar sesión
212
217
  sign_out: Cerrar Sesión
213
218
  sign_up_date: Usuario desde
219
+ skipped: Venís aprendiendo muy bien, por lo que aprobaste este ejercicio.
220
+ skipped_congratulations: ¡Bien hecho!
221
+ skipped_description: Venís aprendiendo muy bien, por lo que aprobaste este ejercicio.
222
+ skipped_solve_anyway: Resolver de todos modos
214
223
  solution: Solución
215
224
  solved: Resuelta
216
225
  solved_count:
@@ -253,7 +262,9 @@ es:
253
262
  unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
254
263
  uncategorized: No categorizado
255
264
  undo_upvote: No es útil
265
+ unspecified: Prefiero no decirlo
256
266
  unmeet_expectations: Objetivos que no se cumplieron
267
+ unprepared_organization_explanation: ¡Este recorrido aún no ha comenzado!
257
268
  unsubscribe: Dejar de recibir notificaciones
258
269
  unsubscribed_successfully: Te desuscribiste exitosamente de los recordatorios.
259
270
  upload_solution: "Subir solución"
@@ -38,6 +38,7 @@ pt:
38
38
  closed_count: '%{count} fechado'
39
39
  comment: Comentar
40
40
  confirm: Confirme
41
+ confirm_reset: Você está prestes a reiniciar seu exercício. Você quer continuar?
41
42
  confirm_restart: Você está prestes a apagar o seu progresso neste guia. Você quer continuar?
42
43
  console: Consola
43
44
  contact_administrator: Se você acha que é um erro, entre em contato com a pessoa que gerencia essa organização %{link}
@@ -56,9 +57,11 @@ pt:
56
57
  day: Dia
57
58
  days: Dias
58
59
  description: Descrição
59
- destroy: Excluir
60
60
  destroy_message: excluir a mensagem
61
+ destroy: Excluir
61
62
  details: Detalhes
63
+ disabled_explanation: Você está tentando acessar um recurso que foi desativado ou removido permanentemente
64
+ disabled_organization_explanation: Este curso terminou!
62
65
  discussion_updated: Consulta actualizada
63
66
  discussions: Consultas
64
67
  download: Faça o download do que você fez
@@ -89,11 +92,12 @@ pt:
89
92
  finish: Terminar
90
93
  first_name: Nome
91
94
  forbidden_explanation: Isso significa que você não tem autorização para ver esse conteúdo. <br> Você poderia ter entrado com uma conta incorreta?
95
+ format: Formato
92
96
  fullscreen: Tela completa
93
97
  gender: Gênero
94
98
  get_messages: Ver mensagens
95
99
  go_to: Vá para %{organization}
96
- gone_explanation: Opa! Isto é o que é conhecido como %{error}, ou seja, você não pode mais ver esse conteúdo.
100
+ gone_explanation: Parece que você não pode mais acessar esse conteúdo.
97
101
  guide: Lição
98
102
  guide_created: Guia criado com sucesso
99
103
  guide_finished: Você terminou %{guide}!
@@ -124,6 +128,7 @@ pt:
124
128
  let_us_know: Por favor, avise-nos!
125
129
  loading: Carregando
126
130
  load_solution_into_console: Carregue a solução no console
131
+ locked_content: 'Este conteúdo será desbloqueado quando você terminar os capítulos anteriores'
127
132
  male: Masculino
128
133
  manual_evaluation_pending: Obrigado por enviar sua solução! Seus professores irão corrigi-lo em breve
129
134
  message_count:
@@ -204,6 +209,10 @@ pt:
204
209
  sign_in_action: iniciar sessão
205
210
  sign_out: Fechar Sessão
206
211
  sign_up_date: Usuário de
212
+ skipped: Você está aprendendo muito bem e passou neste exercício.
213
+ skipped_congratulations: Bem feito!
214
+ skipped_description: Você está aprendendo muito bem e passou neste exercício.
215
+ skipped_solve_anyway: Resolver mesmo assim
207
216
  solution: Solução
208
217
  solved: Resolvido
209
218
  solved_count: '%{count} resolvido'
@@ -241,7 +250,9 @@ pt:
241
250
  to_solved: Marcar como resolvida
242
251
  unauthorized_explanation: Opa! Isso é o que é conhecido como %{error}, ou seja, você não fez logon.
243
252
  uncategorized: Não classificado
253
+ unspecified: Eu preferiria não dizer
244
254
  unmeet_expectations: Objetivos que não foram atendidos
255
+ unprepared_organization_explanation: Este curso ainda não começou!
245
256
  unsubscribe: Cancelar subscrição
246
257
  upload_solution: Carregar solução
247
258
  uploading_solution: Uploading solution