mumuki-laboratory 7.7.6 → 7.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +83 -3
- data/Rakefile +7 -1
- data/app/assets/javascripts/mumuki_laboratory/application/alias-modes.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +66 -57
- data/app/assets/javascripts/mumuki_laboratory/application/codemirror-builder.js +28 -25
- data/app/assets/javascripts/mumuki_laboratory/application/codemirror.js +8 -10
- data/app/assets/javascripts/mumuki_laboratory/application/confirmation.js +2 -2
- data/app/assets/javascripts/mumuki_laboratory/application/console.js +41 -43
- data/app/assets/javascripts/mumuki_laboratory/application/csrf-token.js +9 -12
- data/app/assets/javascripts/mumuki_laboratory/application/custom-editor.js +11 -15
- data/app/assets/javascripts/mumuki_laboratory/application/discussions.js +1 -3
- data/app/assets/javascripts/mumuki_laboratory/application/editors.js +104 -0
- data/app/assets/javascripts/mumuki_laboratory/application/elipsis.js +5 -4
- data/app/assets/javascripts/mumuki_laboratory/application/events.js +51 -0
- data/app/assets/javascripts/mumuki_laboratory/application/exercise.js +68 -0
- data/app/assets/javascripts/mumuki_laboratory/application/inputs.js +4 -2
- data/app/assets/javascripts/mumuki_laboratory/application/interval.js +2 -4
- data/app/assets/javascripts/mumuki_laboratory/application/kids.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/load-analytics.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/load-error-svg.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/messages.js +2 -2
- data/app/assets/javascripts/mumuki_laboratory/application/multiple-choice.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/multiple-scenarios.js +3 -6
- data/app/assets/javascripts/mumuki_laboratory/application/pin.js +3 -5
- data/app/assets/javascripts/mumuki_laboratory/application/profile.js +71 -0
- data/app/assets/javascripts/mumuki_laboratory/application/progress.js +24 -6
- data/app/assets/javascripts/mumuki_laboratory/application/results-renderer.js +20 -11
- data/app/assets/javascripts/mumuki_laboratory/application/speech-bubble-renderer.js +12 -5
- data/app/assets/javascripts/mumuki_laboratory/application/submission.js +19 -101
- data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +93 -0
- data/app/assets/javascripts/mumuki_laboratory/application/sync-mode.js +75 -0
- data/app/assets/javascripts/mumuki_laboratory/application/timer.js +5 -6
- data/app/assets/javascripts/mumuki_laboratory/application/tooltip.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/upload.js +1 -1
- data/app/assets/javascripts/mumuki_laboratory/application/user.js +1 -1
- data/app/assets/stylesheets/mumuki_laboratory/application.scss +1 -1
- data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +19 -17
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss +41 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_gs-board.scss +3 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/{guide-corollary.scss → _guide_corollary.scss} +0 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss +1 -2
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +2 -1
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/{popover.scss → _popover.scss} +0 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +36 -0
- data/app/controllers/application_controller.rb +2 -1
- data/app/controllers/users_controller.rb +5 -1
- data/app/helpers/application_helper.rb +6 -4
- data/app/helpers/avatar_helper.rb +9 -0
- data/app/helpers/discussions_helper.rb +2 -2
- data/app/helpers/{locale_helper.rb → globals_helper.rb} +6 -2
- data/app/helpers/profile_helper.rb +5 -0
- data/app/mailers/user_mailer.rb +24 -11
- data/app/views/book/show.html.erb +1 -1
- data/app/views/exercises/show.html.erb +3 -0
- data/app/views/layouts/_main.html.erb +1 -2
- data/app/views/layouts/_progress.html.erb +1 -1
- data/app/views/layouts/_progress_bar.html.erb +7 -1
- data/app/views/layouts/_runner_assets.html.erb +1 -2
- data/app/views/layouts/application.html.erb +2 -2
- data/app/views/layouts/modals/_avatar_picker.html.erb +16 -0
- data/app/views/users/_avatar_list.html.erb +11 -0
- data/app/views/users/_edit_user_form.html.erb +22 -0
- data/app/views/users/_user_form.html.erb +21 -8
- data/app/views/users/edit.html.erb +5 -0
- data/app/views/users/show.html.erb +0 -4
- data/config/routes.rb +1 -1
- data/lib/mumuki/laboratory/controllers.rb +1 -0
- data/lib/mumuki/laboratory/controllers/incognito_mode.rb +28 -0
- data/lib/mumuki/laboratory/locales/datetime.es.yml +14 -14
- data/lib/mumuki/laboratory/locales/en.yml +12 -4
- data/lib/mumuki/laboratory/locales/es.yml +12 -4
- data/lib/mumuki/laboratory/locales/pt.yml +10 -2
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/dummy/db/schema.rb +13 -1
- data/spec/features/chapter_spec.rb +17 -0
- data/spec/features/exercise_flow_spec.rb +54 -6
- data/spec/features/home_public_flow_spec.rb +16 -0
- data/spec/helpers/avatar_helper_spec.rb +26 -0
- data/spec/javascripts/editors-spec.js +54 -0
- data/spec/javascripts/events-spec.js +33 -0
- data/spec/javascripts/exercise-spec.js +41 -0
- data/spec/javascripts/global-spec.js +6 -0
- data/spec/javascripts/spec-helper.js +4 -0
- data/spec/javascripts/submissions-store-spec.js +44 -0
- data/spec/javascripts/sync-mode-spec.js +15 -0
- data/spec/mailers/user_mailer_spec.rb +23 -3
- data/spec/teaspoon_env.rb +8 -2
- data/vendor/assets/javascripts/codemirror-modes/gobstones.js +3 -3
- metadata +38 -11
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_follow_us.scss +0 -16
- data/app/helpers/version_helper.rb +0 -5
@@ -0,0 +1,9 @@
|
|
1
|
+
module AvatarHelper
|
2
|
+
def avatars_for(user)
|
3
|
+
(Avatar.with_current_audience_for(user) + [user.avatar]).compact.uniq
|
4
|
+
end
|
5
|
+
|
6
|
+
def show_avatar_item(item)
|
7
|
+
avatar_image(item.image_url, alt: item.description, 'mu-avatar-id': item.id, class: 'mu-avatar-item')
|
8
|
+
end
|
9
|
+
end
|
@@ -48,8 +48,8 @@ module DiscussionsHelper
|
|
48
48
|
{status: :solved, sort: :upvotes_count_desc}
|
49
49
|
end
|
50
50
|
|
51
|
-
def user_avatar(user, image_class
|
52
|
-
|
51
|
+
def user_avatar(user, image_class='')
|
52
|
+
profile_picture_for(user, class: image_class)
|
53
53
|
end
|
54
54
|
|
55
55
|
def discussions_link_with_teaser(item)
|
@@ -1,10 +1,14 @@
|
|
1
|
-
module
|
2
|
-
def
|
1
|
+
module GlobalsHelper
|
2
|
+
def globals_tags
|
3
3
|
%Q{
|
4
4
|
<script type="text/javascript">
|
5
5
|
window.mumukiLocale = #{raw Organization.current.locale_json};
|
6
6
|
mumuki.locale = '#{Organization.current.locale}';
|
7
7
|
moment.locale('#{Organization.current.locale}');
|
8
|
+
|
9
|
+
mumuki.incognitoUser = #{current_incognito_user?};
|
10
|
+
|
11
|
+
mumuki.version = '#{Mumuki::Laboratory::VERSION}';
|
8
12
|
</script>
|
9
13
|
}.html_safe
|
10
14
|
end
|
data/app/mailers/user_mailer.rb
CHANGED
@@ -1,24 +1,37 @@
|
|
1
1
|
class UserMailer < ApplicationMailer
|
2
|
+
def welcome_email(user, organization)
|
3
|
+
with_locale(user, organization) do
|
4
|
+
organization_name = organization.display_name || t(:your_new_organization)
|
5
|
+
build_email t(:welcome, name: organization_name), { inline: organization.welcome_email_template }, from: organization.welcome_email_sender
|
6
|
+
end
|
7
|
+
end
|
2
8
|
|
3
9
|
def we_miss_you_reminder(user, cycles)
|
4
|
-
|
10
|
+
with_locale(user) do
|
11
|
+
build_email t(:we_miss_you), "#{cycles.ordinalize}_reminder"
|
12
|
+
end
|
5
13
|
end
|
6
14
|
|
7
15
|
def no_submissions_reminder(user)
|
8
|
-
|
16
|
+
with_locale(user) do
|
17
|
+
build_email t(:start_using_mumuki), 'no_submissions_reminder'
|
18
|
+
end
|
9
19
|
end
|
10
20
|
|
11
|
-
|
12
|
-
|
13
|
-
def send_reminder!(user, subject, template_name)
|
21
|
+
def with_locale(user, organization = nil, &block)
|
14
22
|
@user = user
|
15
23
|
@unsubscribe_code = User.unsubscription_verifier.generate(user.id)
|
16
|
-
@organization = user.last_organization
|
24
|
+
@organization = organization || user.last_organization
|
17
25
|
|
18
|
-
I18n.with_locale(@organization.locale)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
26
|
+
I18n.with_locale(@organization.locale, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def build_email(subject, template, **options)
|
32
|
+
mail options.compact.merge(to: @user.email,
|
33
|
+
subject: subject,
|
34
|
+
content_type: 'text/html',
|
35
|
+
body: render(template))
|
23
36
|
end
|
24
37
|
end
|
@@ -36,7 +36,7 @@
|
|
36
36
|
<div class="chapter-container">
|
37
37
|
<div class="chapter <%= enabled ? '' : 'mu-locked' %>">
|
38
38
|
<h3><%= it.number %>. <%= link_to_path_element it, mode: :plain %></h3>
|
39
|
-
<div class="text-box" <%= 'aria-label=""' unless enabled
|
39
|
+
<div class="text-box" <%= 'aria-label=""' unless enabled %>>
|
40
40
|
<%= it.description_teaser_html %>
|
41
41
|
</div>
|
42
42
|
</div>
|
@@ -45,6 +45,9 @@
|
|
45
45
|
<%= render_exercise_input_layout(@exercise) %>
|
46
46
|
|
47
47
|
<%= hidden_field_tag default_content_tag_id(@exercise), @default_content %>
|
48
|
+
<%= hidden_field_tag "mu-exercise-id", @exercise.id %>
|
49
|
+
<%= hidden_field_tag "mu-exercise-layout", @exercise.layout %>
|
50
|
+
<%= hidden_field_tag "mu-exercise-settings", @exercise.settings.to_json %>
|
48
51
|
|
49
52
|
<div style="display: none" id="processing-template">
|
50
53
|
<div class="bs-callout bs-callout-info">
|
@@ -1 +1 @@
|
|
1
|
-
<% content.completion_percentage_for(current_user) %>
|
1
|
+
<% content.completion_percentage_for(current_user) if current_user? %>
|
@@ -1,6 +1,12 @@
|
|
1
1
|
<div class="progress-list-flex">
|
2
2
|
<% guide.exercises.each do |e| %>
|
3
|
-
<a
|
3
|
+
<a
|
4
|
+
<%= turbolinks_enable_for e %>
|
5
|
+
href="<%= exercise_path(e)%>"
|
6
|
+
aria-label="<%= e.navigable_name %>"
|
7
|
+
title="<%= e.navigable_name %>"
|
8
|
+
data-mu-exercise-id="<%= e.id %>"
|
9
|
+
class="<%= class_for_progress_list_item(e, e == actual)%>">
|
4
10
|
</a>
|
5
11
|
<% end %>
|
6
12
|
</div>
|
@@ -12,8 +12,7 @@
|
|
12
12
|
|
13
13
|
<% if !loads_more_assets && show_loading_for?(language, assets_kind) %>
|
14
14
|
<script id="<%= assets_kind %>-loading-script">
|
15
|
-
|
16
|
-
mumuki.load(() => mumuki.assetsLoaderFor(assetsKind));
|
15
|
+
mumuki.load(() => mumuki.assetsLoaderFor('<%= assets_kind %>'));
|
17
16
|
</script>
|
18
17
|
<% end %>
|
19
18
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<% end %>
|
18
18
|
</div>
|
19
19
|
<div class="mu-navbar-avatar">
|
20
|
-
<% if
|
20
|
+
<% if current_logged_user? %>
|
21
21
|
<div class="dropdown">
|
22
22
|
<span>
|
23
23
|
<a class="notifications-box <%= has_notifications? ? '' : 'notifications-box-empty' %>" href=<%= "#{user_notifications_path}" %>>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
</div>
|
29
29
|
<div class="dropdown">
|
30
30
|
<span id="profileDropdown" data-toggle="dropdown" aria-label="<%= t(:user) %>" role="menu" tabindex="0">
|
31
|
-
<%=
|
31
|
+
<%= profile_picture_for current_user %>
|
32
32
|
</span>
|
33
33
|
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="profileDropdown">
|
34
34
|
<%= menu_bar_list_items %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<div class="modal fade" id="mu-avatar-picker" tabindex="-1" role="dialog" aria-hidden="true">
|
2
|
+
<div class="modal-dialog">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
6
|
+
<span aria-hidden="true">×</span></button>
|
7
|
+
<div class="modal-title">
|
8
|
+
<h3 class="text-left" id="gridSystemModalLabel"><%= t :choose_your_avatar %> </h3>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<div class="modal-body">
|
12
|
+
<%= render partial: 'avatar_list' %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="mu-avatar-list">
|
3
|
+
<% avatars_for(@user).sort_by(&:id).each do |avatar| %>
|
4
|
+
<%= show_avatar_item(avatar) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% if @user.image_url %>
|
8
|
+
<%= avatar_image @user.image_url, class: 'mu-avatar-item', id: 'mu-user-image' %>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
</div>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= form_for :user, url: update_user_path, :html => { id: 'mu-user-form' }, method: :put do |f| %>
|
2
|
+
<div class="mu-user-header">
|
3
|
+
<h1><%= t(:edit_profile) %></h1>
|
4
|
+
<div class="mu-profile-actions">
|
5
|
+
<%= link_to t(:cancel), :back, class: 'btn btn-default' if @user.profile_completed? %>
|
6
|
+
<%= f.submit t(:save), disabled: true, class: 'btn btn-success', id: 'mu-edit-profile-btn' %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<div class="row mu-tab-body">
|
10
|
+
<div class="col-md-4 text-center">
|
11
|
+
<%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
|
12
|
+
<i class="fa fa-pencil fa-2x pointer mu-edit-avatar" id="mu-edit-avatar-icon"></i>
|
13
|
+
</div>
|
14
|
+
<div class="col-md-8">
|
15
|
+
<%= render partial: 'profile_fields', locals: {form: f} %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<%= content_for :no_container do %>
|
21
|
+
<%= render partial: 'layouts/modals/avatar_picker' %>
|
22
|
+
<% end %>
|
@@ -1,11 +1,24 @@
|
|
1
|
-
|
2
|
-
<
|
3
|
-
|
4
|
-
|
1
|
+
<div class="mu-user-header">
|
2
|
+
<h1><%= @user.name %></h1>
|
3
|
+
<div class="mu-profile-actions">
|
4
|
+
<%= edit_profile_button %>
|
5
|
+
</div>
|
6
|
+
</div>
|
7
|
+
<div class="row mu-tab-body">
|
8
|
+
<div class="col-md-4 text-center">
|
9
|
+
<%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
|
10
|
+
</div>
|
11
|
+
<div class="col-md-8 mu-profile-info">
|
12
|
+
<% if @user.age.present? %>
|
13
|
+
<div>
|
14
|
+
<span> <strong><%= t :age %>:</strong> <%= "#{@user.age} #{t :years}" %> </span>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
<div>
|
18
|
+
<span> <strong><%= t :email %>:</strong> <%= @user.email %> </span>
|
5
19
|
</div>
|
6
|
-
<div
|
7
|
-
|
8
|
-
<div><%= f.submit t(:save), class: 'btn btn-success btn-block' %></div>
|
20
|
+
<div>
|
21
|
+
<span> <strong><%= t :programming_since %>:</strong> <%= t(:time_since, time: time_ago_in_words(@user.created_at)) %> </span>
|
9
22
|
</div>
|
10
23
|
</div>
|
11
|
-
|
24
|
+
</div>
|
@@ -2,10 +2,6 @@
|
|
2
2
|
<%= breadcrumbs @user %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
<div>
|
6
|
-
<h1><%= @user.name %></h1>
|
7
|
-
</div>
|
8
|
-
|
9
5
|
<ul class="nav nav-tabs" role="tablist">
|
10
6
|
<li role="presentation" class="active">
|
11
7
|
<a data-target="#info" aria-controls="info" role="tab" data-toggle="tab"><%= t :profile %></a>
|
data/config/routes.rb
CHANGED
@@ -7,6 +7,7 @@ require_relative './controllers/current_organization'
|
|
7
7
|
require_relative './controllers/dynamic_errors'
|
8
8
|
require_relative './controllers/notifications'
|
9
9
|
require_relative './controllers/embedded_mode'
|
10
|
+
require_relative './controllers/incognito_mode'
|
10
11
|
require_relative './controllers/nested_in_exercise'
|
11
12
|
require_relative './controllers/results_rendering'
|
12
13
|
require_relative './controllers/exercise_seed'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Mumuki::Laboratory::Controllers::IncognitoMode
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
helper_method :current_incognito_user?,
|
6
|
+
:current_logged_user?
|
7
|
+
end
|
8
|
+
|
9
|
+
def current_user?
|
10
|
+
super || incognito_mode_enabled?
|
11
|
+
end
|
12
|
+
|
13
|
+
def current_user
|
14
|
+
@current_user ||= incognito_mode_enabled? ? (super rescue Mumuki::Domain::Incognito) : super
|
15
|
+
end
|
16
|
+
|
17
|
+
def current_incognito_user?
|
18
|
+
current_user? && current_user.incognito?
|
19
|
+
end
|
20
|
+
|
21
|
+
def current_logged_user?
|
22
|
+
current_user? && !current_user.incognito?
|
23
|
+
end
|
24
|
+
|
25
|
+
def incognito_mode_enabled?
|
26
|
+
!from_sessions? && Organization.current.incognito_mode_enabled?
|
27
|
+
end
|
28
|
+
end
|
@@ -3,23 +3,23 @@ es:
|
|
3
3
|
datetime:
|
4
4
|
distance_in_words:
|
5
5
|
about_x_hours:
|
6
|
-
one:
|
7
|
-
other:
|
6
|
+
one: aproximadamente una hora
|
7
|
+
other: aproximadamente %{count} horas
|
8
8
|
about_x_months:
|
9
|
-
one:
|
10
|
-
other:
|
9
|
+
one: aproximadamente un mes
|
10
|
+
other: aproximadamente %{count} meses
|
11
11
|
less_than_x_minutes:
|
12
|
-
one:
|
13
|
-
other:
|
12
|
+
one: menos de un minuto
|
13
|
+
other: menos de %{count} minutos
|
14
14
|
x_days:
|
15
|
-
one:
|
16
|
-
other:
|
15
|
+
one: un día
|
16
|
+
other: '%{count} días'
|
17
17
|
x_minutes:
|
18
|
-
one:
|
19
|
-
other:
|
18
|
+
one: un minuto
|
19
|
+
other: '%{count} minutos'
|
20
20
|
x_months:
|
21
|
-
one:
|
22
|
-
other:
|
21
|
+
one: un mes
|
22
|
+
other: '%{count} meses'
|
23
23
|
x_seconds:
|
24
|
-
one:
|
25
|
-
other:
|
24
|
+
one: un segundo
|
25
|
+
other: '%{count} segundos'
|
@@ -7,6 +7,7 @@ en:
|
|
7
7
|
actions: Actions
|
8
8
|
activity: Activity
|
9
9
|
actual_state: Obtained board
|
10
|
+
age: Age
|
10
11
|
all: All
|
11
12
|
appendix: "Appendix"
|
12
13
|
appendix_teaser: Do you want to learn more? <a href="%{link}">Check this chapter's appendix</a>"
|
@@ -28,11 +29,13 @@ en:
|
|
28
29
|
bibliotheca_ui: Bibliotheca
|
29
30
|
birthdate: Birthdate
|
30
31
|
blocked_forum_explanation: You are not allowed to see this content. <br> Are you in the middle of an exam right now?
|
32
|
+
cancel: Cancel
|
31
33
|
cancel_subscription: Cancel your subscription.
|
32
34
|
chapter: Chapter
|
33
35
|
chapters: Chapters
|
34
36
|
chapter_finished_html: You have finished %{chapter}!
|
35
37
|
chapter_number: Chapter %{number}
|
38
|
+
choose_your_avatar: Choose your avatar
|
36
39
|
classroom_ui: Classroom
|
37
40
|
clear_console: Clear console
|
38
41
|
closed: Closed
|
@@ -65,6 +68,7 @@ en:
|
|
65
68
|
dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
|
66
69
|
download: Download your solution
|
67
70
|
edit: Edit
|
71
|
+
edit_profile: Edit profile
|
68
72
|
editor_placeholder: "write your solution here..."
|
69
73
|
email: Email
|
70
74
|
error_description: This is known as a <span class="error-link">%{error}</span>.
|
@@ -93,7 +97,9 @@ en:
|
|
93
97
|
first_name: First Name
|
94
98
|
forbidden_explanation: You are not allowed to see this content.
|
95
99
|
format: Format
|
100
|
+
fullscreen: "Fullscreen"
|
96
101
|
gender: Gender
|
102
|
+
get_messages: "View messages"
|
97
103
|
go_to: 'Go to %{organization}'
|
98
104
|
gone_explanation: This content is no longer available.
|
99
105
|
guide: Guide
|
@@ -162,6 +168,7 @@ en:
|
|
162
168
|
not_in_any_organizations: It seems you aren't in any organizations yet!
|
163
169
|
notify_problem_with_exercise: Report a bug
|
164
170
|
office: Office
|
171
|
+
only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
|
165
172
|
opened: Open
|
166
173
|
opened_count: '%{count} opened'
|
167
174
|
other: Other
|
@@ -184,6 +191,7 @@ en:
|
|
184
191
|
processing_your_solution: We are processing you solution
|
185
192
|
profile: Profile
|
186
193
|
profile_of: Profile of %{username}
|
194
|
+
programming_since: Started programming
|
187
195
|
progress: Progresss
|
188
196
|
read: Read
|
189
197
|
refresh_or_wait: Please press F5 if results are not displayed after a few seconds
|
@@ -230,6 +238,7 @@ en:
|
|
230
238
|
submissions_for: Submissions for %{exercise}
|
231
239
|
subscribe: Subscribe
|
232
240
|
tag: Tags
|
241
|
+
task: Task
|
233
242
|
teacher_info: Information for teachers
|
234
243
|
tell_us_how: Please tell us how this happened!
|
235
244
|
tell_us_if_our_error: If you think this is our fault, %{issues}
|
@@ -260,11 +269,10 @@ en:
|
|
260
269
|
view_details: View details
|
261
270
|
want_permissions: The next user requires permissions
|
262
271
|
we_miss_you: We miss you!
|
272
|
+
welcome: Welcome to %{name}!
|
263
273
|
working: "Working"
|
264
274
|
wrong_answer: The answer is wrong
|
275
|
+
years: years old
|
265
276
|
you_must_sign_in_before_submitting: You must sign in before submitting your solutions
|
266
277
|
you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
|
267
|
-
|
268
|
-
get_messages: "View messages"
|
269
|
-
task: Task
|
270
|
-
only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
|
278
|
+
your_new_organization: your new organization
|
@@ -7,6 +7,7 @@ es:
|
|
7
7
|
actions: Acciones
|
8
8
|
activity: Actividad
|
9
9
|
actual_state: Tablero obtenido
|
10
|
+
age: Edad
|
10
11
|
all: Todos
|
11
12
|
and: y
|
12
13
|
appendix: "Apéndice"
|
@@ -29,11 +30,13 @@ es:
|
|
29
30
|
bibliotheca_ui: Biblioteca
|
30
31
|
birthdate: Fecha de nacimiento
|
31
32
|
blocked_forum_explanation: Es decir que no tenés autorización para ver este contenido. <br> ¿Puede que estés en medio de un examen?
|
33
|
+
cancel: Cancelar
|
32
34
|
cancel_subscription: Cancelá tu subscripción.
|
33
35
|
chapter: Capítulo
|
34
36
|
chapters: Capítulos
|
35
37
|
chapter_finished_html: ¡Terminaste %{chapter}! ¡Felicitaciones!
|
36
38
|
chapter_number: 'Capítulo %{number}'
|
39
|
+
choose_your_avatar: Elegí tu avatar
|
37
40
|
classroom_ui: Aula
|
38
41
|
clear_console: Reiniciar consola
|
39
42
|
closed: Cerrada
|
@@ -72,6 +75,7 @@ es:
|
|
72
75
|
dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
|
73
76
|
download: "Descargá lo que hiciste"
|
74
77
|
edit: Editar
|
78
|
+
edit_profile: Editar perfil
|
75
79
|
editor_placeholder: "...escribí tu solución acá..."
|
76
80
|
email: Email
|
77
81
|
error_description: ¡Ups! <br> Esto es lo que se conoce como <span class="error-link">%{error}</span>.
|
@@ -99,7 +103,9 @@ es:
|
|
99
103
|
first_name: Nombre
|
100
104
|
forbidden_explanation: Es decir que no tenés autorización para ver este contenido. <br> ¿Puede que hayas ingresado con una cuenta incorrecta?
|
101
105
|
format: Dar formato
|
106
|
+
fullscreen: "Pantalla completa"
|
102
107
|
gender: Género
|
108
|
+
get_messages: "Ver mensajes"
|
103
109
|
go_to: 'Ir a %{organization}'
|
104
110
|
gone_explanation: Este contenido ya no está disponible.
|
105
111
|
guide: Lección
|
@@ -176,6 +182,7 @@ es:
|
|
176
182
|
not_in_any_organizations: ¡Parece que no estás en ninguna organización todavía!
|
177
183
|
notify_problem_with_exercise: Reportá un bug
|
178
184
|
office: Secretaría
|
185
|
+
only_landscape_support: Por favor, rotá tu tablet o celular para realizar ejercicios
|
179
186
|
opened: Abierta
|
180
187
|
opened_count:
|
181
188
|
one: '1 abierta'
|
@@ -201,6 +208,7 @@ es:
|
|
201
208
|
processing_your_solution: Estamos procesando tu solución
|
202
209
|
profile: Perfil
|
203
210
|
profile_of: Perfil de %{username}
|
211
|
+
programming_since: Programando desde
|
204
212
|
progress: Progreso
|
205
213
|
read: Leido
|
206
214
|
read_messages: Ver mensajes
|
@@ -253,6 +261,7 @@ es:
|
|
253
261
|
submissions_count: Soluciones
|
254
262
|
submissions_for: Soluciones para %{exercise}
|
255
263
|
tag: Etiquetas
|
264
|
+
task: Consigna
|
256
265
|
teacher_info: Información para docentes
|
257
266
|
tell_us_how: ¡Contanos cómo te pasó esto!
|
258
267
|
tell_us_if_our_error: Si pensás que es un error nuestro, %{issues}
|
@@ -284,15 +293,14 @@ es:
|
|
284
293
|
view_details: Ver detalles
|
285
294
|
want_permissions: El siguiente usuario requiere permisos
|
286
295
|
we_miss_you: ¡Te extrañamos!
|
296
|
+
welcome: Te damos la bienvenida a %{name}!
|
287
297
|
will_paginate:
|
288
298
|
previous_label: "← Anterior"
|
289
299
|
next_label: "Siguiente →"
|
290
300
|
page_gap: "…"
|
291
301
|
working: "Procesando"
|
292
302
|
wrong_answer: La respuesta no es correcta
|
303
|
+
years: años
|
293
304
|
you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
|
294
305
|
you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
|
295
|
-
|
296
|
-
get_messages: "Ver mensajes"
|
297
|
-
task: Consigna
|
298
|
-
only_landscape_support: Por favor, rotá tu tablet o celular para realizar ejercicios
|
306
|
+
your_new_organization: tu nueva organización
|