Merge remote-tracking branch 'codecombat/master'

This commit is contained in:
Cat Sync 2016-06-15 16:26:25 -07:00
commit eec7f6d697
213 changed files with 3506 additions and 2953 deletions

View file

@ -30,3 +30,14 @@ before_script:
script: script:
- "./node_modules/karma/bin/karma start --browsers Firefox --single-run --reporters progress" - "./node_modules/karma/bin/karma start --browsers Firefox --single-run --reporters progress"
- "npm run jasmine" - "npm run jasmine"
notifications:
slack:
rooms:
- secure: dv1zozcLo/gGb1i1OeKKLQgjLagW3jqhkEIiZrVbubfRMrrHouZwtlg1HDVc2GOzP1yCaUOYOLBqT3lTE9CKt4pE8k3p0gJ77j1rHxTyeYny2ETq4w5sXak8ju8M3EDnj+Au2NWWrGiD0YkIUnF5vxzKUc1pkS+vDSWR2ORkOrU=
template:
- Tests failed <%{build_url}|#%{build_number}> (<%{compare_url}|%{commit}>) of %{repository}@%{branch} by %{author} %{result} <!here>
on_success: never
on_failure: always
on_start: never
on_pull_requests: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -4,3 +4,8 @@ ThangType = require 'models/ThangType'
module.exports = class ThangTypeCollection extends CocoCollection module.exports = class ThangTypeCollection extends CocoCollection
url: '/db/thang.type' url: '/db/thang.type'
model: ThangType model: ThangType
fetchHeroes: ->
@fetch {
url: '/db/thang.type?view=heroes'
}

View file

@ -82,8 +82,8 @@ module.exports = ModuleLoader = class ModuleLoader extends CocoClass
# a module and its dependencies have loaded! # a module and its dependencies have loaded!
if @queue.progress is 1 if @queue.progress is 1
@recentPaths.sort() @recentPaths.sort()
console.debug @recentPaths.join('\n') # console.debug @recentPaths.join('\n')
console.debug 'loaded', @recentPaths.length, 'files,', parseInt(@recentLoadedBytes/1024), 'KB' # console.debug 'loaded', @recentPaths.length, 'files,', parseInt(@recentLoadedBytes/1024), 'KB'
@trigger 'load-complete' @trigger 'load-complete'
@trigger 'loaded', e.item @trigger 'loaded', e.item

View file

@ -239,6 +239,12 @@ particleKinds['level-dungeon-replayable'] = particleKinds['level-dungeon-replaya
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-dungeon-game-dev'] = particleKinds['level-dungeon-game-dev-premium'] = ext particleKinds['level-dungeon-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-dungeon-premium-item'] = ext particleKinds['level-dungeon-gate'], particleKinds['level-dungeon-premium-item'] = ext particleKinds['level-dungeon-gate'],
emitter: emitter:
particleCount: 2000 particleCount: 2000
@ -288,6 +294,12 @@ particleKinds['level-forest-replayable'] = particleKinds['level-forest-replayabl
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-forest-game-dev'] = particleKinds['level-forest-game-dev-premium'] = ext particleKinds['level-forest-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-forest-premium-item'] = ext particleKinds['level-forest-gate'], particleKinds['level-forest-premium-item'] = ext particleKinds['level-forest-gate'],
emitter: emitter:
particleCount: 2000 particleCount: 2000
@ -337,6 +349,12 @@ particleKinds['level-desert-replayable'] = particleKinds['level-desert-replayabl
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-desert-game-dev'] = particleKinds['level-desert-game-dev-premium'] = ext particleKinds['level-desert-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-mountain-premium-hero'] = ext particleKinds['level-mountain-premium'], particleKinds['level-mountain-premium-hero'] = ext particleKinds['level-mountain-premium'],
emitter: emitter:
particleCount: 200 particleCount: 200
@ -371,6 +389,12 @@ particleKinds['level-mountain-replayable'] = particleKinds['level-mountain-repla
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-mountain-game-dev'] = particleKinds['level-mountain-game-dev-premium'] = ext particleKinds['level-mountain-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-glacier-premium-hero'] = ext particleKinds['level-glacier-premium'], particleKinds['level-glacier-premium-hero'] = ext particleKinds['level-glacier-premium'],
emitter: emitter:
particleCount: 200 particleCount: 200
@ -405,6 +429,12 @@ particleKinds['level-glacier-replayable'] = particleKinds['level-glacier-replaya
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-glacier-game-dev'] = particleKinds['level-glacier-game-dev-premium'] = ext particleKinds['level-glacier-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-volcano-premium-hero'] = ext particleKinds['level-volcano-premium'], particleKinds['level-volcano-premium-hero'] = ext particleKinds['level-volcano-premium'],
emitter: emitter:
particleCount: 200 particleCount: 200
@ -438,3 +468,9 @@ particleKinds['level-volcano-replayable'] = particleKinds['level-volcano-replaya
colorStart: hsl 0.17, 0.75, 0.7 colorStart: hsl 0.17, 0.75, 0.7
colorMiddle: hsl 0.17, 0.75, 0.5 colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3 colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-volcano-game-dev'] = particleKinds['level-volcano-game-dev-premium'] = ext particleKinds['level-volcano-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3

View file

@ -69,15 +69,15 @@ module.exports = class CocoRouter extends Backbone.Router
'contribute/diplomat': go('contribute/DiplomatView') 'contribute/diplomat': go('contribute/DiplomatView')
'contribute/scribe': go('contribute/ScribeView') 'contribute/scribe': go('contribute/ScribeView')
'courses': go('courses/CoursesView') # , { studentsOnly: true }) # TODO: Enforce after session-less play for teachers 'courses': go('courses/CoursesView')
'Courses': go('courses/CoursesView') # , { studentsOnly: true }) 'Courses': go('courses/CoursesView')
'courses/students': redirect('/courses') 'courses/students': redirect('/courses')
'courses/teachers': redirect('/teachers/classes') 'courses/teachers': redirect('/teachers/classes')
'courses/purchase': redirect('/teachers/licenses') 'courses/purchase': redirect('/teachers/licenses')
'courses/enroll(/:courseID)': redirect('/teachers/licenses') 'courses/enroll(/:courseID)': redirect('/teachers/licenses')
'courses/update-account': go('courses/CoursesUpdateAccountView') 'courses/update-account': go('courses/CoursesUpdateAccountView')
'courses/:classroomID': go('courses/ClassroomView') #, { studentsOnly: true }) 'courses/:classroomID': go('courses/ClassroomView', { studentsOnly: true })
'courses/:courseID/:courseInstanceID': go('courses/CourseDetailsView') 'courses/:courseID/:courseInstanceID': go('courses/CourseDetailsView', { studentsOnly: true })
'db/*path': 'routeToServer' 'db/*path': 'routeToServer'
'demo(/*subpath)': go('DemoView') 'demo(/*subpath)': go('DemoView')
@ -142,14 +142,14 @@ module.exports = class CocoRouter extends Backbone.Router
'SEEN': go('NewHomeView') 'SEEN': go('NewHomeView')
'teachers': redirect('/teachers/classes') 'teachers': redirect('/teachers/classes')
'teachers/classes': go('courses/TeacherClassesView') #, { teachersOnly: true }) 'teachers/classes': go('courses/TeacherClassesView', { teachersOnly: true })
'teachers/classes/:classroomID': go('courses/TeacherClassView') #, { teachersOnly: true }) 'teachers/classes/:classroomID': go('courses/TeacherClassView', { teachersOnly: true })
'teachers/courses': go('courses/TeacherCoursesView') 'teachers/courses': go('courses/TeacherCoursesView')
'teachers/demo': go('teachers/RequestQuoteView') 'teachers/demo': go('teachers/RequestQuoteView')
'teachers/enrollments': redirect('/teachers/licenses') 'teachers/enrollments': redirect('/teachers/licenses')
'teachers/licenses': go('courses/EnrollmentsView') #, { teachersOnly: true }) 'teachers/licenses': go('courses/EnrollmentsView', { teachersOnly: true })
'teachers/freetrial': go('teachers/RequestQuoteView') 'teachers/freetrial': go('teachers/RequestQuoteView')
'teachers/quote': go('teachers/RequestQuoteView') 'teachers/quote': redirect('/teachers/demo')
'teachers/signup': -> 'teachers/signup': ->
return @routeDirectly('teachers/CreateTeacherAccountView', []) if me.isAnonymous() return @routeDirectly('teachers/CreateTeacherAccountView', []) if me.isAnonymous()
@navigate('/teachers/update-account', {trigger: true, replace: true}) @navigate('/teachers/update-account', {trigger: true, replace: true})
@ -172,9 +172,9 @@ module.exports = class CocoRouter extends Backbone.Router
@navigate e, {trigger: true} @navigate e, {trigger: true}
routeDirectly: (path, args=[], options={}) -> routeDirectly: (path, args=[], options={}) ->
if options.teachersOnly and not me.isTeacher() if options.teachersOnly and not (me.isTeacher() or me.isAdmin())
return @routeDirectly('teachers/RestrictedToTeachersView') return @routeDirectly('teachers/RestrictedToTeachersView')
if options.studentsOnly and me.isTeacher() if options.studentsOnly and not (me.isStudent() or me.isAdmin())
return @routeDirectly('courses/RestrictedToStudentsView') return @routeDirectly('courses/RestrictedToStudentsView')
leavingMessage = _.result(window.currentView, 'onLeaveMessage') leavingMessage = _.result(window.currentView, 'onLeaveMessage')
if leavingMessage if leavingMessage

View file

@ -95,9 +95,13 @@ module.exports = class Tracker extends CocoClass
analytics.identify me.id, traits analytics.identify me.id, traits
trackPageView: (includeIntegrations=[]) -> trackPageView: (includeIntegrations=[]) ->
includeMixpanel = (name) ->
mixpanelIncludes = ['', 'schools', 'play', 'play/level/dungeons-of-kithgard']
name in mixpanelIncludes or /courses|students|teachers/ig.test(name)
name = Backbone.history.getFragment() name = Backbone.history.getFragment()
url = "/#{name}" url = "/#{name}"
console.log "Would track analytics pageview: #{url}" if debugAnalytics console.log "Would track analytics pageview: #{url} Mixpanel=#{includeMixpanel(name)}" if debugAnalytics
@trackEventInternal 'Pageview', url: name unless me?.isAdmin() and @isProduction @trackEventInternal 'Pageview', url: name unless me?.isAdmin() and @isProduction
return unless @isProduction and not me.isAdmin() return unless @isProduction and not me.isAdmin()
@ -106,8 +110,7 @@ module.exports = class Tracker extends CocoClass
ga? 'send', 'pageview', url ga? 'send', 'pageview', url
# Mixpanel # Mixpanel
mixpanelIncludes = ['', 'courses', 'courses/purchase', 'courses/teachers', 'courses/students', 'schools', 'teachers', 'teachers/freetrial', 'teachers/quote', 'play', 'play/level/dungeons-of-kithgard'] mixpanel.track('page viewed', 'page name' : name, url : url) if includeMixpanel(name)
mixpanel.track('page viewed', 'page name' : name, url : url) if name in mixpanelIncludes
if me.isTeacher() and @segmentLoaded if me.isTeacher() and @segmentLoaded
options = {} options = {}
@ -162,16 +165,7 @@ module.exports = class Tracker extends CocoClass
properties[key] = value for key, value of @explicitTraits if @explicitTraits? properties[key] = value for key, value of @explicitTraits if @explicitTraits?
console.log 'Tracking internal analytics event:', event, properties if debugAnalytics console.log 'Tracking internal analytics event:', event, properties if debugAnalytics
if @isProduction
eventObject = {}
eventObject["event"] = event
eventObject["properties"] = properties unless _.isEmpty properties
eventObject["user"] = me.id
dataToSend = JSON.stringify eventObject
# console.log dataToSend if debugAnalytics
$.post("#{window.location.protocol or 'http:'}//analytics.codecombat.com/analytics", dataToSend).fail ->
console.error "Analytics post failed!"
else
request = @supermodel.addRequestResource { request = @supermodel.addRequestResource {
url: '/db/analytics.log.event/-/log_event' url: '/db/analytics.log.event/-/log_event'
data: {event: event, properties: properties} data: {event: event, properties: properties}

View file

@ -14,40 +14,6 @@ init = ->
Backbone.listenTo me, 'sync', -> Backbone.Mediator.publish('auth:me-synced', me: me) Backbone.listenTo me, 'sync', -> Backbone.Mediator.publish('auth:me-synced', me: me)
module.exports.createUser = (userObject, failure=backboneFailure, nextURL=null) ->
user = new User(userObject)
user.notyErrors = false
user.save({}, {
error: (model, jqxhr, options) ->
error = parseServerError(jqxhr.responseText)
property = error.property if error.property
if jqxhr.status is 409 and property is 'name'
anonUserObject = _.omit(userObject, 'name')
module.exports.createUser anonUserObject, failure, nextURL
else
genericFailure(jqxhr)
success: -> if nextURL then window.location.href = nextURL else window.location.reload()
})
module.exports.createUserWithoutReload = (userObject, failure=backboneFailure) ->
user = new User(userObject)
user.save({}, {
error: failure
success: ->
Backbone.Mediator.publish('created-user-without-reload')
})
module.exports.loginUser = (userObject, failure=genericFailure, nextURL=null) ->
console.log 'logging in as', userObject.email
jqxhr = $.post('/auth/login',
{
username: userObject.email,
password: userObject.password
},
(model) -> if nextURL then window.location.href = nextURL else window.location.reload()
)
jqxhr.fail(failure)
module.exports.logoutUser = -> module.exports.logoutUser = ->
# TODO: Refactor to use User.logout # TODO: Refactor to use User.logout
FB?.logout?() FB?.logout?()

View file

@ -259,8 +259,11 @@ module.exports.filterMarkdownCodeLanguages = (text, language) ->
return '' unless text return '' unless text
currentLanguage = language or me.get('aceConfig')?.language or 'python' currentLanguage = language or me.get('aceConfig')?.language or 'python'
excludedLanguages = _.without ['javascript', 'python', 'coffeescript', 'clojure', 'lua', 'java', 'io'], currentLanguage excludedLanguages = _.without ['javascript', 'python', 'coffeescript', 'clojure', 'lua', 'java', 'io'], currentLanguage
exclusionRegex = new RegExp "```(#{excludedLanguages.join('|')})\n[^`]+```\n?", 'gm' # Exclude language-specific code blocks like ```python (... code ...)``` for each non-target language.
text.replace exclusionRegex, '' codeBlockExclusionRegex = new RegExp "```(#{excludedLanguages.join('|')})\n[^`]+```\n?", 'gm'
# Exclude language-specific images like ![python - image description](image url) for each non-target language.
imageExclusionRegex = new RegExp "!\\[(#{excludedLanguages.join('|')}) - .+?\\]\\(.+?\\)\n?", 'gm'
return text.replace(codeBlockExclusionRegex, '').replace(imageExclusionRegex, '')
module.exports.aceEditModes = aceEditModes = module.exports.aceEditModes = aceEditModes =
'javascript': 'ace/mode/javascript' 'javascript': 'ace/mode/javascript'

View file

@ -40,6 +40,7 @@ module.exports = class LevelLoader extends CocoClass
@worldNecessities = [] @worldNecessities = []
@listenTo @supermodel, 'resource-loaded', @onWorldNecessityLoaded @listenTo @supermodel, 'resource-loaded', @onWorldNecessityLoaded
@listenTo @supermodel, 'failed', @onWorldNecessityLoadFailed
@loadLevel() @loadLevel()
@loadAudio() @loadAudio()
@playJingle() @playJingle()
@ -110,7 +111,7 @@ module.exports = class LevelLoader extends CocoClass
@loadDependenciesForSession @session @loadDependenciesForSession @session
loadSession: -> loadSession: ->
if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course']
@sessionDependenciesRegistered = {} @sessionDependenciesRegistered = {}
if @sessionID if @sessionID
@ -122,7 +123,7 @@ module.exports = class LevelLoader extends CocoClass
url += "?course=#{@courseID}" if @courseID url += "?course=#{@courseID}" if @courseID
session = new LevelSession().setURL url session = new LevelSession().setURL url
session.project = ['creator', 'team', 'heroConfig', 'codeLanguage', 'submittedCodeLanguage', 'state'] if @headless session.project = ['creator', 'team', 'heroConfig', 'codeLanguage', 'submittedCodeLanguage', 'state', 'submittedCode'] if @headless
@sessionResource = @supermodel.loadModel(session, 'level_session', {cache: false}) @sessionResource = @supermodel.loadModel(session, 'level_session', {cache: false})
@session = @sessionResource.model @session = @sessionResource.model
if @opponentSessionID if @opponentSessionID
@ -146,6 +147,7 @@ module.exports = class LevelLoader extends CocoClass
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession @listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
loadDependenciesForSession: (session) -> loadDependenciesForSession: (session) ->
console.log "Loading dependencies for session: ", session
if me.id isnt session.get 'creator' if me.id isnt session.get 'creator'
session.patch = session.save = -> console.error "Not saving session, since we didn't create it." session.patch = session.save = -> console.error "Not saving session, since we didn't create it."
else if codeLanguage = utils.getQueryVariable 'codeLanguage' else if codeLanguage = utils.getQueryVariable 'codeLanguage'
@ -168,6 +170,16 @@ module.exports = class LevelLoader extends CocoClass
@consolidateFlagHistory() if @opponentSession?.loaded @consolidateFlagHistory() if @opponentSession?.loaded
else if session is @opponentSession else if session is @opponentSession
@consolidateFlagHistory() if @session.loaded @consolidateFlagHistory() if @session.loaded
if @level.get('type', true) in ['course'] # course-ladder is hard to handle because there's 2 sessions
heroConfig = me.get('heroConfig')
console.log "Course mode, loading custom hero: ", heroConfig
return if not heroConfig
url = "/db/thang.type/#{heroConfig.thangType}/version"
if heroResource = @maybeLoadURL(url, ThangType, 'thang')
console.log "Pushing resource: ", heroResource
@worldNecessities.push heroResource
@sessionDependenciesRegistered[session.id] = true
return
return unless @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] return unless @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop']
heroConfig = session.get('heroConfig') heroConfig = session.get('heroConfig')
heroConfig ?= me.get('heroConfig') if session is @session and not @headless heroConfig ?= me.get('heroConfig') if session is @session and not @headless
@ -322,6 +334,9 @@ module.exports = class LevelLoader extends CocoClass
@worldNecessities = (r for r in @worldNecessities when r?) @worldNecessities = (r for r in @worldNecessities when r?)
@onWorldNecessitiesLoaded() if @checkAllWorldNecessitiesRegisteredAndLoaded() @onWorldNecessitiesLoaded() if @checkAllWorldNecessitiesRegisteredAndLoaded()
onWorldNecessityLoadFailed: (resource) ->
@trigger('world-necessity-load-failed', resource: resource)
checkAllWorldNecessitiesRegisteredAndLoaded: -> checkAllWorldNecessitiesRegisteredAndLoaded: ->
return false unless _.filter(@worldNecessities).length is 0 return false unless _.filter(@worldNecessities).length is 0
return false unless @thangNamesLoaded return false unless @thangNamesLoaded
@ -330,6 +345,7 @@ module.exports = class LevelLoader extends CocoClass
true true
onWorldNecessitiesLoaded: -> onWorldNecessitiesLoaded: ->
console.log "World necessities loaded."
@initWorld() @initWorld()
@supermodel.clearMaxProgress() @supermodel.clearMaxProgress()
@trigger 'world-necessities-loaded' @trigger 'world-necessities-loaded'

View file

@ -157,6 +157,8 @@ module.exports =
session = _.find classroom.sessions.models, (session) -> session = _.find classroom.sessions.models, (session) ->
session.get('creator') is userID and session.get('level').original is levelID session.get('creator') is userID and session.get('level').original is levelID
courseProgress[levelID][userID].session = session
if not session # haven't gotten to this level yet, but might have completed others before if not session # haven't gotten to this level yet, but might have completed others before
courseProgress.started ||= false #no-op courseProgress.started ||= false #no-op
courseProgress.completed = false courseProgress.completed = false

View file

@ -57,11 +57,11 @@ module.exports = class CountdownScreen extends CocoClass
else else
@endCountdown() @endCountdown()
hide: -> hide: (duration=500) ->
return unless @showing return unless @showing
@showing = false @showing = false
createjs.Tween.removeTweens @dimLayer createjs.Tween.removeTweens @dimLayer
createjs.Tween.get(@dimLayer).to({alpha: 0}, 500).call => @layer.removeChild @dimLayer unless @destroyed createjs.Tween.get(@dimLayer).to({alpha: 0}, duration).call => @layer.removeChild @dimLayer unless @destroyed
decrementCountdown: => decrementCountdown: =>
return if @destroyed return if @destroyed
@ -85,4 +85,4 @@ module.exports = class CountdownScreen extends CocoClass
onRealTimePlaybackEnded: (e) -> onRealTimePlaybackEnded: (e) ->
clearInterval @countdownInterval if @countdownInterval clearInterval @countdownInterval if @countdownInterval
@countdownInterval = null @countdownInterval = null
@hide() @hide Math.max(500, 1000 * (@secondsRemaining or 0))

View file

@ -74,16 +74,16 @@ module.exports = class Label extends CocoClass
o.marginY = {D: 6, S: 4, N: 3}[st] o.marginY = {D: 6, S: 4, N: 3}[st]
o.fontWeight = {D: 'bold', S: 'bold', N: 'bold'}[st] o.fontWeight = {D: 'bold', S: 'bold', N: 'bold'}[st]
o.shadow = {D: false, S: true, N: true}[st] o.shadow = {D: false, S: true, N: true}[st]
o.shadowColor = {D: '#FFF', S: '#000', N: '#FFF'}[st] o.shadowColor = {D: '#FFF', S: '#000', N: '#000'}[st]
o.fontSize = {D: 25, S: 12, N: 24}[st] o.fontSize = {D: 25, S: 12, N: 24}[st]
fontFamily = {D: 'Arial', S: 'Arial', N: 'Arial'}[st] fontFamily = {D: 'Arial', S: 'Arial', N: 'Arial'}[st]
o.fontDescriptor = "#{o.fontWeight} #{o.fontSize}px #{fontFamily}" o.fontDescriptor = "#{o.fontWeight} #{o.fontSize}px #{fontFamily}"
o.fontColor = {D: '#000', S: '#FFF', N: '#0a0'}[st] o.fontColor = {D: '#000', S: '#FFF', N: '#6c6'}[st]
if @style is 'name' and @sprite?.thang?.team is 'humans' if @style is 'name' and @sprite?.thang?.team is 'humans'
o.fontColor = '#a00' o.fontColor = '#c66'
else if @style is 'name' and @sprite?.thang?.team is 'ogres' else if @style is 'name' and @sprite?.thang?.team is 'ogres'
o.fontColor = '#00a' o.fontColor = '#66c'
o.backgroundFillColor = {D: 'white', S: 'rgba(0,0,0,0.4)', N: 'rgba(255,255,255,0.5)'}[st] o.backgroundFillColor = {D: 'white', S: 'rgba(0,0,0,0.4)', N: 'rgba(0,0,0,0.7)'}[st]
o.backgroundStrokeColor = {D: 'black', S: 'rgba(0,0,0,0.6)', N: 'rgba(0,0,0,0)'}[st] o.backgroundStrokeColor = {D: 'black', S: 'rgba(0,0,0,0.6)', N: 'rgba(0,0,0,0)'}[st]
o.backgroundStrokeStyle = {D: 2, S: 1, N: 1}[st] o.backgroundStrokeStyle = {D: 2, S: 1, N: 1}[st]
o.backgroundBorderRadius = {D: 10, S: 3, N: 3}[st] o.backgroundBorderRadius = {D: 10, S: 3, N: 3}[st]

View file

@ -3,6 +3,7 @@ module.exports.thangNames = thangNames =
# Female # Female
'Alali' 'Alali'
'Anabel' 'Anabel'
'Delma'
'Dosha' 'Dosha'
'Gurzunn' 'Gurzunn'
'Hoot' 'Hoot'
@ -22,6 +23,7 @@ module.exports.thangNames = thangNames =
# Male # Male
'Blob' 'Blob'
'Brack' 'Brack'
'Cragg'
'Dobo' 'Dobo'
'Draff' 'Draff'
'Eugen' 'Eugen'
@ -72,6 +74,7 @@ module.exports.thangNames = thangNames =
'Pinakin' 'Pinakin'
'Rakash' 'Rakash'
'Rasha' 'Rasha'
'Savatha'
'Vujii' 'Vujii'
'Wuda' 'Wuda'
'Yetu' 'Yetu'
@ -108,6 +111,7 @@ module.exports.thangNames = thangNames =
] ]
'Ogre Warlock': [ 'Ogre Warlock': [
# Male # Male
'Gronak'
'Sorgoth' 'Sorgoth'
'Vax' 'Vax'
'Vyrryx' 'Vyrryx'
@ -145,31 +149,14 @@ module.exports.thangNames = thangNames =
'Ofgar' 'Ofgar'
'Randall' 'Randall'
] ]
'Raven Pet': [ # Pets only have one name
# Animal 'Raven Pet': ['Nevermore']
'Nevermore' 'Cougar Pet': ['Kitty']
] 'Frog Pet': ['Hypnotoad']
'Cougar Pet': [ 'Griffin Pet': ['']
# Animal 'Pugicorn Pet': ['']
'Kitty' 'Polar Bear Pet': ['']
] 'Wolf Pet': ['']
'Frog Pet': [
# Animal
'Bighead'
'Bufo'
'Bunda'
'Dan\'l Webster'
'Freddy'
'Frogger'
'Froggy'
'Hypnotoad'
'Mr. Toad'
'Slippy'
'Toada'
'Trevor'
'Wart'
'Wei Qi'
]
'Horse': [ 'Horse': [
# Animal # Animal
'Abby' 'Abby'
@ -606,6 +593,7 @@ module.exports.thangNames = thangNames =
'Hugo' 'Hugo'
'Ieyasu' 'Ieyasu'
'Jack' 'Jack'
'Jackson'
'James' 'James'
'Jason' 'Jason'
'Jax' 'Jax'

View file

@ -108,7 +108,7 @@ module.exports = class ThangState
storage = @trackedPropertyValues[propIndex] storage = @trackedPropertyValues[propIndex]
value = @getStoredProp propIndex, type, storage value = @getStoredProp propIndex, type, storage
if prop is 'pos' if prop is 'pos'
if @thang.teleport and @thang.pos.distanceSquared(value) > 900 if (@thang.teleport and @thang.pos.distanceSquared(value) > 900) or (@thang.pos.x is 0 and @thang.pos.y is 0)
# Don't interpolate; it was probably a teleport. https://github.com/codecombat/codecombat/issues/738 # Don't interpolate; it was probably a teleport. https://github.com/codecombat/codecombat/issues/738
@thang.pos = value @thang.pos = value
else else

View file

@ -5,14 +5,14 @@ class Vector
for name in ['add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate'] for name in ['add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate']
do (name) -> do (name) ->
Vector[name] = (a, b, useZ) -> Vector[name] = (a, b, useZ) ->
a.copy()["#{name}Self"](b, useZ) a.copy()[name](b, useZ)
for name in ['magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared'] for name in ['magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared']
do (name) -> do (name) ->
Vector[name] = (a, b, useZ) -> Vector[name] = (a, b, useZ) ->
a[name](b, useZ) a[name](b, useZ)
isVector: true isVector: true
apiProperties: ['x', 'y', 'z', 'magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared', 'rotate', 'add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate'] apiProperties: ['x', 'y', 'z', 'magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared', 'add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate']
constructor: (x=0, y=0, z=0) -> constructor: (x=0, y=0, z=0) ->
return new Vector x, y, z unless @ instanceof Vector return new Vector x, y, z unless @ instanceof Vector
@ -24,68 +24,67 @@ class Vector
# Mutating methods: # Mutating methods:
normalizeSelf: (useZ) -> normalize: (useZ) ->
m = @magnitude useZ m = @magnitude useZ
@divideSelf m, useZ if m > 0 @divide m, useZ if m > 0
@ @
normalize: (useZ) -> esper_normalize: (useZ) ->
# Hack to detect when we are in player code so we can avoid mutation @copy().normalize(useZ)
(if @__aetherAPIValue? then @copy() else @).normalizeSelf(useZ)
limitSelf: (max) -> limit: (max) ->
if @magnitude() > max if @magnitude() > max
@normalizeSelf() @normalize()
@multiplySelf(max) @multiply(max)
else else
@ @
limit: (useZ) -> esper_limit: (max) ->
(if @__aetherAPIValue? then @copy() else @).limitSelf(useZ) @copy().limit(max)
subtractSelf: (other, useZ) -> subtract: (other, useZ) ->
@x -= other.x @x -= other.x
@y -= other.y @y -= other.y
@z -= other.z if useZ @z -= other.z if useZ
@ @
subtract: (other, useZ) -> esper_subtract: (other, useZ) ->
(if @__aetherAPIValue? then @copy() else @).subtractSelf(other, useZ) @copy().subtract(other, useZ)
addSelf: (other, useZ) -> add: (other, useZ) ->
@x += other.x @x += other.x
@y += other.y @y += other.y
@z += other.z if useZ @z += other.z if useZ
@ @
add: (other, useZ) -> esper_add: (other, useZ) ->
(if @__aetherAPIValue? then @copy() else @).addSelf(other, useZ) @copy().add(other, useZ)
divideSelf: (n, useZ) -> divide: (n, useZ) ->
[@x, @y] = [@x / n, @y / n] [@x, @y] = [@x / n, @y / n]
@z = @z / n if useZ @z = @z / n if useZ
@ @
divide: (n, useZ) -> esper_divide: (n, useZ) ->
(if @__aetherAPIValue? then @copy() else @).divideSelf(n, useZ) @copy().divide(n, useZ)
multiplySelf: (n, useZ) -> multiply: (n, useZ) ->
[@x, @y] = [@x * n, @y * n] [@x, @y] = [@x * n, @y * n]
@z = @z * n if useZ @z = @z * n if useZ
@ @
multiply: (n, useZ) -> esper_multiply: (n, useZ) ->
(if @__aetherAPIValue? then @copy() else @).multiplySelf(n, useZ) @copy().multiply(n, useZ)
# Rotate it around the origin # Rotate it around the origin
# If we ever want to make this also use z: https://en.wikipedia.org/wiki/Axes_conventions # If we ever want to make this also use z: https://en.wikipedia.org/wiki/Axes_conventions
rotateSelf: (theta) -> rotate: (theta) ->
return @ unless theta return @ unless theta
[@x, @y] = [Math.cos(theta) * @x - Math.sin(theta) * @y, Math.sin(theta) * @x + Math.cos(theta) * @y] [@x, @y] = [Math.cos(theta) * @x - Math.sin(theta) * @y, Math.sin(theta) * @x + Math.cos(theta) * @y]
@ @
rotate: (theta) -> esper_rotate: (theta) ->
(if @__aetherAPIValue? then @copy() else @).rotateSelf(theta) @copy().rotate(theta)
# Non-mutating methods: # Non-mutating methods:
@ -127,7 +126,7 @@ class Vector
# Not the strict projection, the other isn't converted to a unit vector first. # Not the strict projection, the other isn't converted to a unit vector first.
projectOnto: (other, useZ) -> projectOnto: (other, useZ) ->
other.copy().multiplySelf(@dot(other, useZ), useZ) other.copy().multiply(@dot(other, useZ), useZ)
isZero: (useZ) -> isZero: (useZ) ->
result = @x is 0 and @y is 0 result = @x is 0 and @y is 0

View file

@ -364,8 +364,8 @@ module.exports = class World
endFrame = @frames.length endFrame = @frames.length
#console.log "... world serializing frames from", startFrame, "to", endFrame, "of", @totalFrames #console.log "... world serializing frames from", startFrame, "to", endFrame, "of", @totalFrames
[transferableObjects, nontransferableObjects] = [0, 0] [transferableObjects, nontransferableObjects] = [0, 0]
delete flag.processed for flag in @flagHistory serializedFlagHistory = (_.omit(_.clone(flag), 'processed') for flag in @flagHistory)
o = {totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}, trackedProperties: {}, flagHistory: @flagHistory, difficulty: @difficulty, scores: @getScores(), randomSeed: @randomSeed, picoCTFFlag: @picoCTFFlag} o = {totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}, trackedProperties: {}, flagHistory: serializedFlagHistory, difficulty: @difficulty, scores: @getScores(), randomSeed: @randomSeed, picoCTFFlag: @picoCTFFlag}
o.trackedProperties[prop] = @[prop] for prop in @trackedProperties or [] o.trackedProperties[prop] = @[prop] for prop in @trackedProperties or []
for thangID, methods of @userCodeMap for thangID, methods of @userCodeMap

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
no_ie: "CodeCombat läuft nicht im IE8 oder älteren Browsern. Tut uns Leid!" # Warning that only shows up in IE8 and older no_ie: "CodeCombat läuft nicht im IE8 oder älteren Browsern. Tut uns Leid!" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." # Warning that shows up on mobile devices no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." # Warning that shows up on mobile devices
play: "Spielen" # The big play button that opens up the campaign view. play: "Spielen" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses play_campaign_version: "Spiele Kampagnen Version" # Shows up under big play button if you only play /courses
old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren." old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren."
ipad_browser: "Schlechte Nachricht: CodeCombat funktioniert im iPad-Browser nicht. Gute Nachricht: Unsere iPad App wartet auf das OK von Apple." ipad_browser: "Schlechte Nachricht: CodeCombat funktioniert im iPad-Browser nicht. Gute Nachricht: Unsere iPad App wartet auf das OK von Apple."
@ -97,12 +97,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
nav: nav:
play: "Spielen" # The top nav bar entry where players choose which levels to play play: "Spielen" # The top nav bar entry where players choose which levels to play
community: "Community" community: "Community"
# courses: "Courses" courses: "Kurse"
editor: "Editor" editor: "Editor"
blog: "Blog" blog: "Blog"
forum: "Forum" forum: "Forum"
account: "Account" account: "Account"
# my_account: "My Account" my_account: "Mein Account"
profile: "Profil" profile: "Profil"
stats: "Statistiken" stats: "Statistiken"
code: "Code" code: "Code"
@ -112,24 +112,24 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
about: "Über" about: "Über"
contact: "Kontakt" contact: "Kontakt"
twitter_follow: "Twitter" twitter_follow: "Twitter"
# students: "Students" students: "Studenten"
teachers: "Lehrer" teachers: "Lehrer"
# careers: "Careers" careers: "Berufe"
# facebook: "Facebook" facebook: "Facebook"
# twitter: "Twitter" twitter: "Twitter"
# create_a_class: "Create a Class" create_a_class: "Erstelle eine Klasse"
# other: "Other" other: "Andere"
# learn_to_code: "Learn to Code!" learn_to_code: "Lerne zu programmieren!"
# toggle_nav: "Toggle navigation" toggle_nav: "Navigation umschalten"
# jobs: "Jobs" jobs: "Jobs"
# schools: "Schools" schools: "Schule"
# educator_wiki: "Educator Wiki" educator_wiki: "Educator Wiki"
# get_involved: "Get Involved" get_involved: "Werde eingebunden"
# open_source: "Open source (GitHub)" open_source: "Open source (GitHub)"
# support: "Support" support: "Support"
# faqs: "FAQs" faqs: "FAQs"
# help_pref: "Need help? Email" help_pref: "Brauchst du Hilfe? Email"
# help_suff: "and we'll get in touch!" help_suff: "und wir treten in Kontakt!"
modal: modal:
close: "Schließen" close: "Schließen"
@ -148,18 +148,18 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
play: play:
play_as: "Spiele als " # Ladder page play_as: "Spiele als " # Ladder page
# compete: "Compete!" # Course details page compete: "Abgeschlossen!" # Course details page
spectate: "Zuschauen" # Ladder page spectate: "Zuschauen" # Ladder page
players: "Spieler" # Hover over a level on /play players: "Spieler" # Hover over a level on /play
hours_played: "Stunden gespielt" # Hover over a level on /play hours_played: "Stunden gespielt" # Hover over a level on /play
items: "Gegenstände" # Tooltip on item shop button from /play items: "Gegenstände" # Tooltip on item shop button from /play
# unlock: "Unlock" # For purchasing items and heroes unlock: "Kaufen" # For purchasing items and heroes
confirm: "Bestätigen" confirm: "Bestätigen"
# owned: "Owned" # For items you own owned: "bereits im Besitz" # For items you own
locked: "Gesperrt" locked: "Gesperrt"
# purchasable: "Purchasable" # For a hero you unlocked but haven't purchased purchasable: "Erhältlich" # For a hero you unlocked but haven't purchased
available: "Verfügbar" available: "Verfügbar"
# skills_granted: "Skills Granted" # Property documentation details skills_granted: "Freischaltbare Fähigkeiten" # Property documentation details
heroes: "Helden" # Tooltip on hero shop button from /play heroes: "Helden" # Tooltip on hero shop button from /play
achievements: "Erfolge" # Tooltip on achievement list button from /play achievements: "Erfolge" # Tooltip on achievement list button from /play
account: "Account" # Tooltip on account button from /play account: "Account" # Tooltip on account button from /play
@ -168,69 +168,69 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
next: "Weiter" # Go from choose hero to choose inventory before playing a level next: "Weiter" # Go from choose hero to choose inventory before playing a level
change_hero: "Held wechseln" # Go back from choose inventory to choose hero change_hero: "Held wechseln" # Go back from choose inventory to choose hero
buy_gems: "Juwelen kaufen" buy_gems: "Juwelen kaufen"
# subscription_required: "Subscription Required" subscription_required: "Abonnement benötigt"
anonymous: "Anonymer Spieler" anonymous: "Anonymer Spieler"
level_difficulty: "Schwierigkeit: " level_difficulty: "Schwierigkeit: "
# play_classroom_version: "Play Classroom Version" # Choose a level in campaign version that you also can play in one of your courses play_classroom_version: "Spiele Kurs Version" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "Anfängerkampagne" campaign_beginner: "Anfängerkampagne"
# awaiting_levels_adventurer_prefix: "We release new levels every week." awaiting_levels_adventurer_prefix: "Wir veröffentlichen wöchentlichen neu Levels."
# awaiting_levels_adventurer: "Sign up as an Adventurer" awaiting_levels_adventurer: "Melde dich als Abenteuerer an"
# awaiting_levels_adventurer_suffix: "to be the first to play new levels." awaiting_levels_adventurer_suffix: "um der erste zu sein der neue Levels spielt."
# adjust_volume: "Adjust volume" adjust_volume: "Lautstärke anpassen"
campaign_multiplayer: "Multiplayerarena" campaign_multiplayer: "Multiplayerarena"
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst." campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas" campaign_old_multiplayer: "(Veraltet) Alte Multiplayer Arenen"
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas." campaign_old_multiplayer_description: "Relikte eines zivilisierteren Zeitalters. Es werden keine Simulationen für diese älteren, heldenlosen Mehrspieler Arenen durchgeführt."
# code: code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.) if: "wenn" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else" else: "sonst"
# elif: "else if" elif: "sonst wenn"
# while: "while" while: "so lange"
# loop: "loop" loop: "schleife"
# for: "for" for: "r"
# break: "break" break: "pause"
# continue: "continue" continue: "fortsetzen"
# pass: "pass" pass: "bestehen"
# return: "return" return: "zurückgeben"
# then: "then" then: "dann"
# do: "do" do: "mache"
# end: "end" end: "ende"
# function: "function" function: "funktion"
# def: "define" def: "definiere"
# var: "variable" var: "variable"
# self: "self" self: "selbst"
# hero: "hero" hero: "held"
# this: "this" this: "dies"
# or: "or" or: "oder"
# "||": "or" "||": "oder"
# and: "and" and: "und"
# "&&": "and" "&&": "und"
# not: "not" not: "nicht"
# "!": "not" "!": "nicht"
# "=": "assign" "=": "zuweisen"
# "==": "equals" "==": "entspricht"
# "===": "strictly equals" "===": "entspricht strikt"
# "!=": "does not equal" "!=": "entspricht nicht"
# "!==": "does not strictly equal" "!==": "entspricht strikt nicht"
# ">": "is greater than" ">": "ist größer als"
# ">=": "is greater than or equal" ">=": "ist größer als oder gleich"
# "<": "is less than" "<": "ist kleiner als"
# "<=": "is less than or equal" "<=": "ist kleiner als oder gleich"
# "*": "multiplied by" "*": "multipliziert um"
# "/": "divided by" "/": "dividiert durch"
# "+": "plus" "+": "plus"
# "-": "minus" "-": "minus"
# "+=": "add and assign" "+=": "addieren und zuweisen"
# "-=": "subtract and assign" "-=": "subtrahieren und zuweisen"
# True: "True" True: "Wahr"
# true: "true" true: "wahr"
# False: "False" False: "Falsch"
# false: "false" false: "falsch"
# undefined: "undefined" undefined: "undefiniert"
# null: "null" null: "nichts"
# nil: "nil" nil: "nichts"
# None: "None" None: "Kein"
# share_progress_modal: # share_progress_modal:
# blurb: "Youre making great progress! Tell your parent how much you've learned with CodeCombat." # blurb: "Youre making great progress! Tell your parent how much you've learned with CodeCombat."
@ -260,18 +260,18 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
log_in: "mit Passwort einloggen" log_in: "mit Passwort einloggen"
required: "Du musst dich vorher einloggen um dort hin zu gehen." required: "Du musst dich vorher einloggen um dort hin zu gehen."
login_switch: "Du hast bereits einen Account?" login_switch: "Du hast bereits einen Account?"
# school_name: "School Name and City" school_name: "Schulname und Stadt"
# optional: "optional" optional: "Optional"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "Beispiel Schule, Springfield, IL"
# or_sign_up_with: "or sign up with" or_sign_up_with: "oder melde dich an mit"
# connected_gplus_header: "You've successfully connected with Google+!" connected_gplus_header: "Du hast dich erfolgreich über Google+ verbunden!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account." connected_gplus_p: "Vervollständige die Anmeldung um dich mit deinem Google+ Account anzumelden."
# gplus_exists: "You already have an account associated with Google+!" gplus_exists: "Du hast bereits einen verknüpften Google+ Account!"
# connected_facebook_header: "You've successfully connected with Facebook!" connected_facebook_header: "Du hast dich erfolgreich über Facebook verbunden!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account." connected_facebook_p: "Vervollständige die Anmeldung um dich mit deinem Facebook Account anzumelden."
# facebook_exists: "You already have an account associated with Facebook!" facebook_exists: "Du hast bereits einen verknüpften Facebook Account!"
# hey_students: "Students, enter the class code from your teacher." hey_students: "Schüler, gebt den Klassencode eures Lehrers ein."
# birthday: "Birthday" birthday: "Geburstag"
recover: recover:
recover_account_title: "Account Wiederherstellung" recover_account_title: "Account Wiederherstellung"
@ -316,23 +316,23 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
date: "Datum" date: "Datum"
body: "Inhalt" body: "Inhalt"
version: "Version" version: "Version"
# pending: "Pending" pending: "Ausstehend"
# accepted: "Accepted" accepted: "Akzeptiert"
# rejected: "Rejected" rejected: "Abgelehnt"
# withdrawn: "Withdrawn" withdrawn: "Zurückgezogen"
# accept: "Accept" accept: "Akzeptieren"
# reject: "Reject" reject: "Abgelehnen"
# withdraw: "Withdraw" withdraw: "Zurückziehen"
submitter: "Veröffentlicher" submitter: "Veröffentlicher"
submitted: "Veröffentlicht" submitted: "Veröffentlicht"
commit_msg: "Nachricht absenden" commit_msg: "Nachricht absenden"
version_history: "Versionshistorie" version_history: "Versionshistorie"
version_history_for: "Versionsgeschichte für: " version_history_for: "Versionsgeschichte für: "
# select_changes: "Select two changes below to see the difference." select_changes: "Wählen zwei Änderungen unterhalb um den Unterschied zu sehen."
# undo_prefix: "Undo" undo_prefix: "Rückgängig"
# undo_shortcut: "(Ctrl+Z)" undo_shortcut: "(Strg+Z)"
# redo_prefix: "Redo" redo_prefix: "Wiederherstellen"
# redo_shortcut: "(Ctrl+Shift+Z)" redo_shortcut: "(Strg+Umschalt+Z)"
play_preview: "Vorschau vom aktuellen Level spielen" play_preview: "Vorschau vom aktuellen Level spielen"
result: "Ergebnis" result: "Ergebnis"
results: "Ergebnisse" results: "Ergebnisse"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
subject: "Betreff" subject: "Betreff"
email: "Email" email: "Email"
password: "Passwort" password: "Passwort"
# confirm_password: "Confirm Password" confirm_password: "Passwort bestätigen"
message: "Nachricht" message: "Nachricht"
code: "Code" code: "Code"
ladder: "Rangliste" ladder: "Rangliste"
@ -357,12 +357,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
hard: "Schwer" hard: "Schwer"
player: "Spieler" player: "Spieler"
player_level: "Spielerlevel" # Like player level 5, not like level: Dungeons of Kithgard player_level: "Spielerlevel" # Like player level 5, not like level: Dungeons of Kithgard
# warrior: "Warrior" warrior: "Krieger"
# ranger: "Ranger" ranger: "ger"
# wizard: "Wizard" wizard: "Hexer"
# first_name: "First Name" first_name: "Vorname"
# last_name: "Last Name" last_name: "Nachname"
# username: "Username" username: "Benutzername"
units: units:
second: "Sekunde" second: "Sekunde"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
license: "Lizenz" license: "Lizenz"
oreilly: "Ebook deiner Wahl" oreilly: "Ebook deiner Wahl"
# calendar: calendar:
# year: "Year" year: "Jahr"
# day: "Day" day: "Tag"
# month: "Month" month: "Monat"
# january: "January" january: "Januar"
# february: "February" february: "Februar"
# march: "March" march: "März"
# april: "April" april: "April"
# may: "May" may: "Mai"
# june: "June" june: "Juni"
# july: "July" july: "Juli"
# august: "August" august: "August"
# september: "September" september: "September"
# october: "October" october: "Oktober"
# november: "November" november: "November"
# december: "December" december: "Dezember"

View file

@ -243,6 +243,7 @@
login: login:
sign_up: "Create Account" sign_up: "Create Account"
email_or_username: "Email or username"
log_in: "Log In" log_in: "Log In"
logging_in: "Logging In" logging_in: "Logging In"
log_out: "Log Out" log_out: "Log Out"
@ -439,6 +440,8 @@
tome_available_spells: "Available Spells" tome_available_spells: "Available Spells"
tome_your_skills: "Your Skills" tome_your_skills: "Your Skills"
tome_current_method: "Current Method" tome_current_method: "Current Method"
hints: "Hints"
hints_title: "Hint {{number}}"
code_saved: "Code Saved" code_saved: "Code Saved"
skip_tutorial: "Skip (esc)" skip_tutorial: "Skip (esc)"
keyboard_shortcuts: "Key Shortcuts" keyboard_shortcuts: "Key Shortcuts"
@ -711,9 +714,6 @@
music_label: "Music" music_label: "Music"
music_description: "Turn background music on/off." music_description: "Turn background music on/off."
editor_config_title: "Editor Configuration" editor_config_title: "Editor Configuration"
editor_config_keybindings_label: "Key Bindings"
editor_config_keybindings_default: "Default (Ace)"
editor_config_keybindings_description: "Adds additional shortcuts known from the common editors."
editor_config_livecompletion_label: "Live Autocompletion" editor_config_livecompletion_label: "Live Autocompletion"
editor_config_livecompletion_description: "Displays autocomplete suggestions while typing." editor_config_livecompletion_description: "Displays autocomplete suggestions while typing."
editor_config_invisibles_label: "Show Invisibles" editor_config_invisibles_label: "Show Invisibles"
@ -1279,7 +1279,8 @@
student_age_range_to: "to" student_age_range_to: "to"
create_class: "Create Class" create_class: "Create Class"
class_name: "Class Name" class_name: "Class Name"
teacher_account_restricted: "Your account is a teacher account, and so cannot access student content." teacher_account_restricted: "Your account is a teacher account and cannot access student content." # {change}
account_restricted: "A student account is required to access this page."
update_account_login_title: "Log in to update your account" update_account_login_title: "Log in to update your account"
update_account_title: "Your account needs attention!" update_account_title: "Your account needs attention!"
update_account_blurb: "Before you can access your classes, choose how you want to use this account." update_account_blurb: "Before you can access your classes, choose how you want to use this account."
@ -1316,6 +1317,9 @@
sent_verification: "We've sent a verification email to:" sent_verification: "We've sent a verification email to:"
you_can_edit: "You can edit your email address in " you_can_edit: "You can edit your email address in "
account_settings: "Account Settings" account_settings: "Account Settings"
select_your_hero: "Select Your Hero"
select_your_hero_description: "You can always change your hero by going to your Courses page and clicking \"Select Hero\""
select_this_hero: "Select this Hero"
teacher: teacher:
teacher_dashboard: "Teacher Dashboard" # Navbar teacher_dashboard: "Teacher Dashboard" # Navbar
@ -1341,6 +1345,7 @@
unarchive_class: "unarchive class" unarchive_class: "unarchive class"
unarchive_this_class: "Unarchive this class" unarchive_this_class: "Unarchive this class"
no_students_yet: "This class has no students yet." no_students_yet: "This class has no students yet."
try_refreshing: "(You may need to refresh the page)"
add_students: "Add Students" add_students: "Add Students"
create_new_class: "Create a New Class" create_new_class: "Create a New Class"
class_overview: "Class Overview" # View Class page class_overview: "Class Overview" # View Class page
@ -1423,6 +1428,7 @@
status_expired: "Expired on {{date}}" status_expired: "Expired on {{date}}"
status_not_enrolled: "Not Enrolled" status_not_enrolled: "Not Enrolled"
status_enrolled: "Expires on {{date}}" status_enrolled: "Expires on {{date}}"
select_all: "Select All"
classes: classes:
archmage_title: "Archmage" archmage_title: "Archmage"

View file

@ -27,7 +27,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
classroom_in_a_box: "Un aula prediseñada para enseñar informática." classroom_in_a_box: "Un aula prediseñada para enseñar informática."
codecombat_is: "CodeCombat es una plataforma para que los estudiantes aprendan informática mientras están jugando un juego de verdad." # {change} codecombat_is: "CodeCombat es una plataforma para que los estudiantes aprendan informática mientras están jugando un juego de verdad." # {change}
our_courses: "Nuestros cursos fueron probados especificamente para destacarse en el aula, incluso con maestros con poca o ninguna experiencia previa en programación." # {change} our_courses: "Nuestros cursos fueron probados especificamente para destacarse en el aula, incluso con maestros con poca o ninguna experiencia previa en programación." # {change}
# top_screenshots_hint: "Students write code and see their changes update in real-time" top_screenshots_hint: "Los estudiantes escriben código y ven sus cambios actualizarse en tiempo real"
designed_with: "Diseñado teniendo en cuenta a los maestros" designed_with: "Diseñado teniendo en cuenta a los maestros"
real_code: "Escritura real de código" real_code: "Escritura real de código"
from_the_first_level: "desde el primer nivel" from_the_first_level: "desde el primer nivel"
@ -57,12 +57,12 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
real_game: "Un juego de verdad, jugado con código auténtico." real_game: "Un juego de verdad, jugado con código auténtico."
great_game: "Un gran juego es más que solo medallas y logros - se trata sobre una travesía del jugador, acertijos bien diseñados, y la habilidad de abordar desafios con voluntad y confianza." great_game: "Un gran juego es más que solo medallas y logros - se trata sobre una travesía del jugador, acertijos bien diseñados, y la habilidad de abordar desafios con voluntad y confianza."
agency: "CodeCombat es un juego que ofrece a los jugadores esa voluntad y confianza mediante nuestro motor de código robusto, que ayuda tanto a principiantes como a estudiantes avanzados por igual a escribir código correcto y válido." agency: "CodeCombat es un juego que ofrece a los jugadores esa voluntad y confianza mediante nuestro motor de código robusto, que ayuda tanto a principiantes como a estudiantes avanzados por igual a escribir código correcto y válido."
# request_demo_title: "Get your students started today!" # request_demo_title: "Get your students started hoy!"
# request_demo_subtitle: "Request a demo and get your students started in less than an hour." # request_demo_subtitle: "Request a demo and get your students started in less than an hour."
# get_started_title: "Set up your class today" get_started_title: "Configure su clase hoy"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science." # get_started_subtitle: "Configure a class, add your students, and monitor their progress as they learn computer science."
request_demo: "Solicitar un Demo" request_demo: "Solicitar un Demo"
# setup_a_class: "Set Up a Class" setup_a_class: "Configurar una Clase"
have_an_account: "¿Ya tenes una cuenta?" # {change} have_an_account: "¿Ya tenes una cuenta?" # {change}
logged_in_as: "Estás actualmente conectado como" logged_in_as: "Estás actualmente conectado como"
view_my_classes: "Ver mis clases" view_my_classes: "Ver mis clases"
@ -79,10 +79,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
teachers: "Maestros!" teachers: "Maestros!"
teachers_and_educators: "Maestros y Educadores" teachers_and_educators: "Maestros y Educadores"
# class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum." # class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum."
# get_started: "Get Started" get_started: "Iniciarse"
students: "Estudiantes:" students: "Estudiantes:"
join_class: "Unirse a una clase" join_class: "Unirse a una clase"
# role: "Your role:" role: "Su rol:"
student_count: "Número de estudiantes:" student_count: "Número de estudiantes:"
start_playing_for_free: "Empieza a jugar gratis!" start_playing_for_free: "Empieza a jugar gratis!"
students_and_players: "Estudiantes y Jugadores" students_and_players: "Estudiantes y Jugadores"
@ -90,7 +90,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
view_profile: "Ver mi perfíl" view_profile: "Ver mi perfíl"
view_progress: "Ver mi progreso" view_progress: "Ver mi progreso"
check_out_wiki: "Check out our new educator Wiki" check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?" want_coco: "¿Quisiera CodeCombat en su escuela?"
# form_select_role: "Select primary role" # form_select_role: "Select primary role"
form_select_range: "Seleccione el tamaño de la clase" form_select_range: "Seleccione el tamaño de la clase"
@ -102,7 +102,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
blog: "Blog" blog: "Blog"
forum: "Foro" forum: "Foro"
account: "Cuenta" account: "Cuenta"
# my_account: "My Account" my_account: "Mi Cuenta"
profile: "Perfil" profile: "Perfil"
stats: "Estadísticas" stats: "Estadísticas"
code: "Código" code: "Código"
@ -112,7 +112,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
about: "Acerca" about: "Acerca"
contact: "Contacto" contact: "Contacto"
twitter_follow: "Seguir" twitter_follow: "Seguir"
# students: "Students" students: "Estudiantes"
teachers: "Maestros" teachers: "Maestros"
careers: "Carreras" careers: "Carreras"
facebook: "Facebook" facebook: "Facebook"
@ -125,9 +125,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
schools: "Escuelas" schools: "Escuelas"
# educator_wiki: "Educator Wiki" # educator_wiki: "Educator Wiki"
get_involved: "Participa" get_involved: "Participa"
# open_source: "Open source (GitHub)" open_source: "Código Libre (GitHub)"
# support: "Support" support: "Soporte"
# faqs: "FAQs" faqs: "FAQs"
help_pref: "¿Necesitas ayuda? Envianos un correó electronico!" help_pref: "¿Necesitas ayuda? Envianos un correó electronico!"
help_suff: "y te contactaremos pronto" help_suff: "y te contactaremos pronto"
@ -182,7 +182,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
campaign_old_multiplayer: "(Obsoleto) Antiguas Arenas Multijugador" campaign_old_multiplayer: "(Obsoleto) Antiguas Arenas Multijugador"
campaign_old_multiplayer_description: "Reliquias de una era más civilizada. Ninguna simulación es ejecutada para estas arenas multijugador antiguas y sin héroes." campaign_old_multiplayer_description: "Reliquias de una era más civilizada. Ninguna simulación es ejecutada para estas arenas multijugador antiguas y sin héroes."
# code: code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.) # if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else" # else: "else"
# elif: "else if" # elif: "else if"
@ -204,14 +204,14 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# this: "this" # this: "this"
# or: "or" # or: "or"
# "||": "or" # "||": "or"
# and: "and" and: "y"
# "&&": "and" "&&": "y"
# not: "not" not: "no"
# "!": "not" "!": "no"
# "=": "assign" # "=": "assign"
# "==": "equals" "==": "iguala"
# "===": "strictly equals" "===": "iguala estrictamente"
# "!=": "does not equal" "!=": "no iguala"
# "!==": "does not strictly equal" # "!==": "does not strictly equal"
# ">": "is greater than" # ">": "is greater than"
# ">=": "is greater than or equal" # ">=": "is greater than or equal"
@ -219,15 +219,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# "<=": "is less than or equal" # "<=": "is less than or equal"
# "*": "multiplied by" # "*": "multiplied by"
# "/": "divided by" # "/": "divided by"
# "+": "plus" "+": "mas"
# "-": "minus" "-": "menos"
# "+=": "add and assign" # "+=": "add and assign"
# "-=": "subtract and assign" # "-=": "subtract and assign"
# True: "True" True: "Verdadero"
# true: "true" true: "verdadero"
# False: "False" False: "Falso"
# false: "false" false: "falso"
# undefined: "undefined" undefined: "undefinido"
# null: "null" # null: "null"
# nil: "nil" # nil: "nil"
# None: "None" # None: "None"
@ -265,13 +265,13 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
school_name_placeholder: "Ejemplo: High School, Springfield, IL" school_name_placeholder: "Ejemplo: High School, Springfield, IL"
or_sign_up_with: "o conectate a travez de:" or_sign_up_with: "o conectate a travez de:"
connected_gplus_header: "Te haz conectado exitosamente a travez de Google+!" connected_gplus_header: "Te haz conectado exitosamente a travez de Google+!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account." connected_gplus_p: "Termina el registro para que inicies sesión con tu cuenta de Google+."
# gplus_exists: "You already have an account associated with Google+!" gplus_exists: "Ya tienes asociada una cuenta con Google+!"
connected_facebook_header: "Te haz conectado exitosamente a travez de Facebook!" connected_facebook_header: "Te haz conectado exitosamente a travez de Facebook!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account." connected_facebook_p: "Termina el registro para que inicies sesión con tu cuenta de Facebook."
# facebook_exists: "You already have an account associated with Facebook!" facebook_exists: "Ya tienes asociada una cuenta Facebook!"
# hey_students: "Students, enter the class code from your teacher." hey_students: "Estudiante, ingresa el coódigo de clase de tu maestro."
# birthday: "Birthday" birthday: "Cumpleaños"
recover: recover:
recover_account_title: "recuperar cuenta" recover_account_title: "recuperar cuenta"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
subject: "Asunto" subject: "Asunto"
email: "Email" email: "Email"
password: "Contraseña" password: "Contraseña"
# confirm_password: "Confirm Password" confirm_password: "Confirme Contraseña"
message: "Mensaje" message: "Mensaje"
code: "Código" code: "Código"
ladder: "Escalera" ladder: "Escalera"
@ -425,7 +425,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
victory_new_item: "Objeto Nuevo" victory_new_item: "Objeto Nuevo"
victory_viking_code_school: "¡Changos macacos!, el nivel que acabas de pasar era dificil! Si todavía no eres un desarrollador de software, deberías serlo. Acabas de conseguir una aceptación por vía rápida con la Escuela Vikinga de Có, donde tú puedes llevar tus habilidades al siguiente nivel y convertirteen un desarrollador web profesional en 14 semanas." victory_viking_code_school: "¡Changos macacos!, el nivel que acabas de pasar era dificil! Si todavía no eres un desarrollador de software, deberías serlo. Acabas de conseguir una aceptación por vía rápida con la Escuela Vikinga de Có, donde tú puedes llevar tus habilidades al siguiente nivel y convertirteen un desarrollador web profesional en 14 semanas."
victory_become_a_viking: "Conviértete en un Vikingo" victory_become_a_viking: "Conviértete en un Vikingo"
# victory_no_progress_for_teachers: "Progress is not saved for teachers. But, you can add a student account to your classroom for yourself." # victory_no_progress_for_teachers: "El progreso no es guardado para maestros. But, you can add a student account to your classroom for yourself."
guide_title: "Guía" guide_title: "Guía"
tome_cast_button_run: "Ejecutar" tome_cast_button_run: "Ejecutar"
tome_cast_button_running: "Ejecutando" tome_cast_button_running: "Ejecutando"
@ -509,17 +509,17 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
tip_understand_recursion: "La única manera de entender la recursividad es entender la recursividad." tip_understand_recursion: "La única manera de entender la recursividad es entender la recursividad."
tip_life_and_polymorphism: "El Open Source es como una estructura heterogénea totalmente polimórfica: Todos los tipos son bienvenidos." tip_life_and_polymorphism: "El Open Source es como una estructura heterogénea totalmente polimórfica: Todos los tipos son bienvenidos."
tip_mistakes_proof_of_trying: "Errores en tu código son solo evidencia de que estas intentando." tip_mistakes_proof_of_trying: "Errores en tu código son solo evidencia de que estas intentando."
# tip_adding_orgres: "Rounding up ogres." # tip_adding_orgres: "Rounding up ogros."
# tip_sharpening_swords: "Sharpening the swords." tip_sharpening_swords: "Afilando las espadas."
# tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille" # tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
# tip_nemo: "When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo" # tip_nemo: "Cuando la vida gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
# tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green" # tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
# tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green" # tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green"
# tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green" # tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green"
# tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood" # tip_luna_lovegood: "No te preocupes, you're just as sane as I am. - Luna Lovegood"
# tip_good_idea: "The best way to have a good idea is to have a lot of ideas. - Linus Pauling" # tip_good_idea: "The best way to have a good idea is to have a lot of ideas. - Linus Pauling"
# tip_programming_not_about_computers: "Computer Science is no more about computers than astronomy is about telescopes. - Edsger Dijkstra" # tip_programming_not_about_computers: "La ciencia cpomputacional is no more about computers than astronomy is about telescopes. - Edsger Dijkstra"
# tip_mulan: "Believe you can, then you will. - Mulan" tip_mulan: "Cree que puedes, y entonces lo harás. - Mulan"
game_menu: game_menu:
inventory_tab: "Inventario" inventory_tab: "Inventario"
@ -585,7 +585,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
feature5: "Video tutoriales" feature5: "Video tutoriales"
feature6: "Soporte Premium vía email" feature6: "Soporte Premium vía email"
feature7: "<strong>Clan</strong> Privado" feature7: "<strong>Clan</strong> Privado"
# feature8: "<strong>No ads!</strong>" feature8: "<strong>¡Sin publicidad!</strong>"
free: "Gratis" free: "Gratis"
month: "mes" month: "mes"
must_be_logged: "Debes iniciar sesión primero. Por favor crea una cuenta o inicia sesión desde el menú superior." must_be_logged: "Debes iniciar sesión primero. Por favor crea una cuenta o inicia sesión desde el menú superior."
@ -676,13 +676,13 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
restricted_to_certain_heroes: "Sólo ciertos héroes pueden jugar este nivel." restricted_to_certain_heroes: "Sólo ciertos héroes pueden jugar este nivel."
skill_docs: skill_docs:
# function: "function" # skill types function: "función" # skill types
# method: "method" method: "método"
# snippet: "snippet" # snippet: "snippet"
# number: "number" number: "número"
# array: "array" array: "arreglo"
# object: "object" object: "objeto"
# string: "string" string: "cadena"
writable: "escribible" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "escribible" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "Sólo Lectura" read_only: "Sólo Lectura"
action: "Acción" action: "Acción"
@ -753,9 +753,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
robin_blurb: "Scaffolding" robin_blurb: "Scaffolding"
josh_title: "Diseñador de Juegos" josh_title: "Diseñador de Juegos"
josh_blurb: "El piso es Lava" josh_blurb: "El piso es Lava"
# phoenix_title: "Software Engineer" phoenix_title: "Ingeniero de Software"
# nolan_title: "Territory Manager" nolan_title: "Administrador de territorio"
# elliot_title: "Partnership Manager" # elliot_title: "Administrador de Partnership"
retrostyle_title: "Ilustración" retrostyle_title: "Ilustración"
retrostyle_blurb: "Juegos con estilo Retro" retrostyle_blurb: "Juegos con estilo Retro"
jose_title: "Música" jose_title: "Música"
@ -785,10 +785,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
jobs_benefit_4: "Días personales/enfermo ilimitados" # {change} jobs_benefit_4: "Días personales/enfermo ilimitados" # {change}
jobs_benefit_5: "Desarrollo profesional y soporte de formación continua" # {change} jobs_benefit_5: "Desarrollo profesional y soporte de formación continua" # {change}
jobs_benefit_6: "Seguro médico/dental/vista" # {change} jobs_benefit_6: "Seguro médico/dental/vista" # {change}
# jobs_benefit_7: "Sit-stand desks for all" # jobs_benefit_7: "Sit-stand escritorios para todos"
# jobs_benefit_9: "10-year option exercise window" # jobs_benefit_9: "10-year option exercise window"
# jobs_benefit_10: "Maternity leave: 10 weeks paid, next 6 @ 55% salary" # jobs_benefit_10: "Maternity leave: 10 semanas pagadas, next 6 @ 55% salary"
# jobs_benefit_11: "Paternity leave: 10 weeks paid" # jobs_benefit_11: "Paternity leave: 10 semanas pagadas"
learn_more: "Aprender Más" learn_more: "Aprender Más"
jobs_custom_title: "Crear Tu Propio" jobs_custom_title: "Crear Tu Propio"
jobs_custom_description: "¿Te apasiona CodeCombat pero nos ves un puesto de trabajo que coincida con tus cualificaciones? Escríbenos y muestrenos como cree que puede contribuir a nuestro equipo. ¡Nos encantaría saber de vos!" jobs_custom_description: "¿Te apasiona CodeCombat pero nos ves un puesto de trabajo que coincida con tus cualificaciones? Escríbenos y muestrenos como cree que puede contribuir a nuestro equipo. ¡Nos encantaría saber de vos!"
@ -824,10 +824,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
email_exists: "Existe un usuario con este email." email_exists: "Existe un usuario con este email."
phone_number: "Teléfono" phone_number: "Teléfono"
phone_number_help: "¿Dónde podemos contactarte durante el horario de trabajo ?" phone_number_help: "¿Dónde podemos contactarte durante el horario de trabajo ?"
# primary_role_label: "Your Primary Role" primary_role_label: "Tu Rol Primario"
# role_default: "Select Role" role_default: "Seleccione Rol"
# primary_role_default: "Select Primary Role" primary_role_default: "Seleccione Rol Primario"
# purchaser_role_default: "Select Purchaser Role" # purchaser_role_default: "Seleccione Purchaser Role"
tech_coordinator: "Coordinador de tecnología" tech_coordinator: "Coordinador de tecnología"
advisor: "Tutor" advisor: "Tutor"
principal: "Director" principal: "Director"
@ -835,15 +835,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
parent: "Padre" parent: "Padre"
# purchaser_role_label: "Your Purchaser Role" # purchaser_role_label: "Your Purchaser Role"
# influence_advocate: "Influence/Advocate" # influence_advocate: "Influence/Advocate"
# evaluate_recommend: "Evaluate/Recommend" evaluate_recommend: "Evaluar/Recomendar"
# approve_funds: "Approve Funds" approve_funds: "Aprobar Fondos"
# no_purchaser_role: "No role in purchase decisions" # no_purchaser_role: "No role in purchase decisions"
organization_label: "Escuela / Distrito" organization_label: "Escuela / Distrito"
city: "Ciudad" city: "Ciudad"
state: "Estado" state: "Estado"
country: "País" country: "País"
num_students_help: "¿Cuántos prevees inscribir en CodeCombat?" num_students_help: "¿Cuántos prevees inscribir en CodeCombat?"
# num_students_default: "Select Range" num_students_default: "Seleccionar Rango"
education_level_label: "Nivel Educativo de los Estudiantes" education_level_label: "Nivel Educativo de los Estudiantes"
education_level_help: "Elegí todas las que correspondan." education_level_help: "Elegí todas las que correspondan."
elementary_school: "Escuela Primaria" elementary_school: "Escuela Primaria"
@ -853,19 +853,19 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
college_plus: "Universidad o superior" college_plus: "Universidad o superior"
anything_else: "¿Algo más que deberíamos saber?" anything_else: "¿Algo más que deberíamos saber?"
thanks_header: "¡Gracias por solicitar un presupuesto!" # {change} thanks_header: "¡Gracias por solicitar un presupuesto!" # {change}
# thanks_sub_header: "Thanks for expressing interest in CodeCombat for your school." thanks_sub_header: "Gracias por el interés de su institución en CodeCombat" #"Gracias por expressing interest in CodeCombat for your school."
thanks_p: "Estaremos en contacto pronto. ¿Preguntas? Escríbenos:" # {change} thanks_p: "Estaremos en contacto pronto. ¿Preguntas? Escríbenos:" # {change}
# back_to_classes: "Back to Classes" back_to_classes: "Volver a las clases"#"Back to Clases"
# finish_signup: "Finish creating your teacher account:" finish_signup: "Termine la creación de su cuenta de maestro:"
# finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science." finish_signup_p: "Crear una cuenta para configurar la clase, agregar estudiante y monitorear su progreso a medida que aprenden programacioón"#"Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
# signup_with: "Sign up with:" signup_with: "Registrarse con:"
# connect_with: "Connect with:" connect_with: "Conectar con:"
# conversion_warning: "WARNING: Your current account is a <em>Student Account</em>. Once you submit this form, your account will be updated to a Teacher Account." # conversion_warning: "WARNING: Your current account is a <em>Student Account</em>. Once you submit this form, your account will be updated to a Teacher Account."
# learn_more_modal: "Teacher accounts on CodeCombat have the ability to monitor student progress, assign enrollments and manage classrooms. Teacher accounts cannot be a part of a classroom - if you are currently enrolled in a class using this account, you will no longer be able to access it once you update to a Teacher Account." # learn_more_modal: "Teacher accounts on CodeCombat have the ability to monitor student progress, assign enrollments and manage classrooms. Teacher accounts cannot be a part of a classroom - if you are currently enrolled in a class using this account, you will no longer be able to access it once you update to a Teacher Account."
# create_account: "Create a Teacher Account" create_account: "Crear una Cuenta de maestro"
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!" # create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!"
# convert_account_title: "Update to Teacher Account" # convert_account_title: "Update to Teacher Account"
# not: "Not" not: "No"
# setup_a_class: "Set Up a Class" # setup_a_class: "Set Up a Class"
versions: versions:
@ -975,7 +975,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
social_facebook: "Me Gusta CodeCombat en Facebook" social_facebook: "Me Gusta CodeCombat en Facebook"
social_twitter: "Sigue a CodeCombat en Twitter" social_twitter: "Sigue a CodeCombat en Twitter"
social_gplus: "Únete a CodeCombat con Google+" social_gplus: "Únete a CodeCombat con Google+"
# social_slack: "Chat with us in the public CodeCombat Slack channel" # social_slack: "Chat con nosotros en el public CodeCombat Slack canal"
contribute_to_the_project: "Contribuir al proyecto" contribute_to_the_project: "Contribuir al proyecto"
clans: clans:
@ -1080,8 +1080,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
buy_course1: "Comprar este curso" buy_course1: "Comprar este curso"
select_all_courses: "Seleccione 'Todos los cursos' para un 50% de descuento!" select_all_courses: "Seleccione 'Todos los cursos' para un 50% de descuento!"
all_courses: "Todos los Cursos" all_courses: "Todos los Cursos"
# number_programming_students: "Number of Programming Students" # number_programming_students: "Número de Programming Students"
# number_total_students: "Total Students in School/District" # number_total_students: "Total Students en School/District"
enter_number_students: "Introducir el número de estudiantes que necesita para este grupo." enter_number_students: "Introducir el número de estudiantes que necesita para este grupo."
name_class: "Nombre de su grupo" name_class: "Nombre de su grupo"
displayed_course_page: "Se mostrará en la página de curso para usted y sus estudiantes. Puede cambiarse después." displayed_course_page: "Se mostrará en la página de curso para usted y sus estudiantes. Puede cambiarse después."
@ -1234,8 +1234,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
additional_resources: "Recursos Adicionales" additional_resources: "Recursos Adicionales"
additional_resources_1_pref: "Descargar/imprimir nuestra" additional_resources_1_pref: "Descargar/imprimir nuestra"
additional_resources_1_mid: "Guía para maestros: Curso 1" additional_resources_1_mid: "Guía para maestros: Curso 1"
# additional_resources_1_mid2: "and" additional_resources_1_mid2: "y"
# additional_resources_1_mid3: "Course 2" additional_resources_1_mid3: "Curso 2"
additional_resources_1_suff: "explicaciones y soluciones para cada nivel." # {change} additional_resources_1_suff: "explicaciones y soluciones para cada nivel." # {change}
additional_resources_2_pref: "Complete nuestro" additional_resources_2_pref: "Complete nuestro"
additional_resources_2_suff: "para obtener dos matrículas gratuitas para el resto de nuestros cursos pagos." additional_resources_2_suff: "para obtener dos matrículas gratuitas para el resto de nuestros cursos pagos."
@ -1264,9 +1264,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
title: "Título" # Flat style redesign title: "Título" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels" # subtitle: "Review course guidelines, solutions, and levels"
# changelog: "View latest changes to course levels." # changelog: "View latest changes to course levels."
# select_language: "Select language" select_language: "Seleccione lenguaje"
# select_level: "Select level" select_level: "Seleccione nivel"
# play_level: "Play Level" # play_level: "Play Nivel"
concepts_covered: "Conceptos Cubiertos" concepts_covered: "Conceptos Cubiertos"
# print_guide: "Print Guide (PDF)" # print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)" # view_guide_online: "View Guide Online (PDF)"
@ -1294,15 +1294,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# class_name: "Class Name" # class_name: "Class Name"
# teacher_account_restricted: "Your account is a teacher account, and so cannot access student content." # teacher_account_restricted: "Your account is a teacher account, and so cannot access student content."
# teacher: teacher:
# teacher_dashboard: "Teacher Dashboard" # Navbar # teacher_dashboard: "Teacher Dashboard" # Navbar
# my_classes: "My Classes" # my_classes: "My Classes"
# courses: "Courses" # courses: "Courses"
# enrollments: "Enrollments" # enrollments: "Enrollments"
# resources: "Resources" # resources: "Resources"
# help: "Help" help: "Ayuda"
# students: "Students" # Shared # students: "Students" # Shared
# language: "Language" language: "Lenguaje"
# edit_class_settings: "edit class settings" # edit_class_settings: "edit class settings"
# complete: "Complete" # complete: "Complete"
# access_restricted: "Account Update Required" # access_restricted: "Account Update Required"
@ -1368,8 +1368,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# total_enrolled_students: "Total Enrolled Students" # total_enrolled_students: "Total Enrolled Students"
# unenrolled_students: "Unenrolled Students" # unenrolled_students: "Unenrolled Students"
# add_enrollment_credits: "Add Enrollment Credits" # add_enrollment_credits: "Add Enrollment Credits"
# purchasing: "Purchasing..." purchasing: "Adquiriendo..."
# purchased: "Purchased!" purchased: "Adquirido!"
# purchase_now: "Purchase Now" # purchase_now: "Purchase Now"
# how_to_enroll: "How to Enroll Students" # how_to_enroll: "How to Enroll Students"
# how_to_enroll_blurb_1: "If a student is not enrolled yet, there will be an \"Enroll\" button next to their course progress in your class." # how_to_enroll_blurb_1: "If a student is not enrolled yet, there will be an \"Enroll\" button next to their course progress in your class."
@ -1398,7 +1398,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
ambassador_title: "Embajador" ambassador_title: "Embajador"
ambassador_title_description: "(Soporte)" ambassador_title_description: "(Soporte)"
ambassador_summary: "Ayuda a responder las preguntas de los usuarios del foro. Nuestros Embajadores representan CodeCombat en todo el mundo." ambassador_summary: "Ayuda a responder las preguntas de los usuarios del foro. Nuestros Embajadores representan CodeCombat en todo el mundo."
# teacher_title: "Teacher" teacher_title: "Maestro"
editor: editor:
main_title: "Editor de CodeCombat" main_title: "Editor de CodeCombat"
@ -1511,7 +1511,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
join_desc_3: ", o encuéntranos en " join_desc_3: ", o encuéntranos en "
join_desc_4: "y ahí empezaremos!" join_desc_4: "y ahí empezaremos!"
join_url_email: "Escríbenos" join_url_email: "Escríbenos"
# join_url_slack: "public Slack channel" # join_url_slack: "public Slack canal"
archmage_subscribe_desc: "Obten correos de nuevas oportunidades y anuncios." archmage_subscribe_desc: "Obten correos de nuevas oportunidades y anuncios."
artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente ruega por más contenido, y podemos hacer tanto por nosotros mismos. De momento tu estación de trabajo es nivel 1 ; Nuestro editor de niveles es apenas útil incluso para sus creadores, así que sea cauteloso. Si tuviera visiones de campañas apareciendo para ciclos for" artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente ruega por más contenido, y podemos hacer tanto por nosotros mismos. De momento tu estación de trabajo es nivel 1 ; Nuestro editor de niveles es apenas útil incluso para sus creadores, así que sea cauteloso. Si tuviera visiones de campañas apareciendo para ciclos for"
artisan_introduction_suf: ", entonces esta lase es ideal para ti." artisan_introduction_suf: ", entonces esta lase es ideal para ti."
@ -1555,7 +1555,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
ambassador_join_note_strong: "Nota" ambassador_join_note_strong: "Nota"
ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!" ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!"
ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador." ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador."
# teacher_subscribe_desc: "Get emails on updates and announcements for teachers." # teacher_subscribe_desc: "Get emails on updates and announcements para maestros."
changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación." changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación."
diligent_scribes: "Nuestros diligentes Escribas:" diligent_scribes: "Nuestros diligentes Escribas:"
powerful_archmages: "Nuestros poderosos Archimagos:" powerful_archmages: "Nuestros poderosos Archimagos:"
@ -1711,16 +1711,16 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
you_can2: "comprar un código prepagado" you_can2: "comprar un código prepagado"
you_can3: "que puede ser aplicado a tu propia cuenta o regalado a otros." you_can3: "que puede ser aplicado a tu propia cuenta o regalado a otros."
# coppa_deny: coppa_deny:
# text1: "Cant wait to learn programming?" text1: "¿No puedes esperar para aprender a programar?"
# text2: "Ask your parents to create an account for you!" # text2: "Ask your parents que creen una cuenta for you!"
# close: "Close Window" close: "Cerrar ventana"
loading_error: loading_error:
could_not_load: "Error cargando del servidor" could_not_load: "Error cargando del servidor"
connection_failure: "Fallo de conexión." connection_failure: "Fallo de conexión."
# connection_failure_desc: "It doesnt look like youre connected to the internet! Check your network connection and then reload this page." # connection_failure_desc: "It doesnt look like youre connected to the internet! Check your network connection and then reload this page."
# login_required: "Login Required" login_required: "Login Requerido"
# login_required_desc: "You need to be logged in to access this page." # login_required_desc: "You need to be logged in to access this page."
unauthorized: "Necesitas acceder. ¿Tienes desabilitadas las cookies?" unauthorized: "Necesitas acceder. ¿Tienes desabilitadas las cookies?"
forbidden: "No tienes los permisos." forbidden: "No tienes los permisos."
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
license: "licencia" license: "licencia"
oreilly: "ebook de su elección" oreilly: "ebook de su elección"
# calendar: calendar:
# year: "Year" year: "Año"
# day: "Day" day: "Día"
# month: "Month" month: "Mes"
# january: "January" # january: "January"
# february: "February" # february: "February"
# march: "March" # march: "March"
# april: "April" # april: "April"
# may: "May" # may: "May"
# june: "June" june: "Junio"
# july: "July" july: "Julio"
# august: "August" # august: "August"
# september: "September" # september: "September"
# october: "October" # october: "October"
# november: "November" # november: "November"
# december: "December" december: "Diciembre"

View file

@ -15,8 +15,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
or_ipad: "O descargalo para iPad" or_ipad: "O descargalo para iPad"
new_home: new_home:
# slogan: "The most engaging game for learning programming." slogan: "El juego más atractivo para aprender a programar."
# classroom_edition: "Classroom Edition:" classroom_edition: "Edición para aulas:"
learn_to_code: "Aprende a programar:" learn_to_code: "Aprende a programar:"
teacher: "Profesor" teacher: "Profesor"
student: "Alumno" student: "Alumno"
@ -31,24 +31,24 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
designed_with: "Diseñado pensando en los profesores" designed_with: "Diseñado pensando en los profesores"
real_code: "Real, escribe código" real_code: "Real, escribe código"
from_the_first_level: "desde el primer nivel" from_the_first_level: "desde el primer nivel"
# getting_students: "Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure." getting_students: "Involucrar a los alumnos en la programación por sentencias tan rápido como sea posible es fundamental para aprender la sintaxis de la programación con una estructura apropiada."
# educator_resources: "Educator resources" educator_resources: "Recursos para educadores"
# course_guides: "and course guides" course_guides: "y guías de cursos"
# teaching_computer_science: "Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds." teaching_computer_science: "Enseñar ciencias computación no requiere de un costoso título, porque nosotros proveemos las herramientas para apoyar educadores con cualquier nivel de conocimientos."
accessible_to: "Accesible para" accessible_to: "Accesible para"
everyone: "todo el mundo" everyone: "todo el mundo"
# democratizing: "Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code." democratizing: "La democratización del proceso de aprendizaje es el nucleo de nuestra filosofía. Todo mundo debe ser capaz de aprender a programar."
# forgot_learning: "I think they actually forgot that they were actually learning something." forgot_learning: "En realidad creo que que ellos olvidaron que en realidad están aprendiendo algo."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school." wanted_to_do: " Programar es algo que siempre he querido hacer, nunca pensé que sería capáz de aprenderlo en la escuela."
# why_games: "Why is learning through games important?" why_games: "¿Por qué aprender usando juegos es importante?"
# games_reward: "Games reward the productive struggle." games_reward: "Los juegos premian el esfuerzo productivo"
# encourage: "Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn." encourage: "Jugar es un excelente medio que promueve la interacción, descubrimiento, y aprendizaje a través de prueba-error. Un buen juego reta al jugador a dominar habilidades al pasar el tiempo, éste el el mismo proceso critico por el que pasan los estudiantes al aprender."
# excel: "Games excel at rewarding" excel: "Los juegos son excelentes premiando"
# struggle: "productive struggle" struggle: "el esfuerzo productivo"
# kind_of_struggle: "the kind of struggle that results in learning thats engaging and" kind_of_struggle: "el tipo de esfuerzo que resulta en aprendizaje learning que es atractivo y"
# motivating: "motivating" motivating: "motivante"
# not_tedious: "not tedious." not_tedious: "no tedioso."
# gaming_is_good: "Studies suggest gaming is good for childrens brains. (its true!)" gaming_is_good: "Estudios sugieren que el jugar es bueno para el cerebro de los niños. (¡Es verdad!)"
# game_based: "When game-based learning systems are" # game_based: "When game-based learning systems are"
# compared: "compared" # compared: "compared"
# conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and" # conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and"
@ -61,11 +61,11 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# request_demo_subtitle: "Request a demo and get your students started in less than an hour." # request_demo_subtitle: "Request a demo and get your students started in less than an hour."
# get_started_title: "Set up your class today" # get_started_title: "Set up your class today"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science." # get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science."
# request_demo: "Request a Demo" request_demo: "Pide una demostración"
# setup_a_class: "Set Up a Class" # setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?" have_an_account: "¿Tienes una cuenta?"
# logged_in_as: "You are currently logged in as" # logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes" view_my_classes: "Ver mis clases"
# computer_science: "Computer science courses for all ages" # computer_science: "Computer science courses for all ages"
# show_me_lesson_time: "Show me lesson time estimates for:" # show_me_lesson_time: "Show me lesson time estimates for:"
# curriculum: "Total curriculum hours:" # curriculum: "Total curriculum hours:"
@ -905,17 +905,17 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
wrong_password: "Contraseña incorrecta" wrong_password: "Contraseña incorrecta"
upload_picture: "Sube una imagen" upload_picture: "Sube una imagen"
delete_this_account: "Eliminar esta cuenta de forma permanente" delete_this_account: "Eliminar esta cuenta de forma permanente"
# reset_progress_tab: "Reset All Progress" reset_progress_tab: "Reestablecer progreso"
# reset_your_progress: "Clear all your progress and start over" reset_your_progress: "Elimina tu progreso y empieza de nuevo"
god_mode: "Modo Dios" god_mode: "Modo Dios"
password_tab: "Contraseña" password_tab: "Contraseña"
emails_tab: "Correos electrónicos" emails_tab: "Correos electrónicos"
admin: "Admin" admin: "Admin"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "Clic aquí para modificar tu suscripción."
new_password: "Nueva contraseña" new_password: "Nueva contraseña"
new_password_verify: "Verificar" new_password_verify: "Verificar"
type_in_email: "Introduce tu email para confirmar el borrado de esta cuenta" type_in_email: "Introduce tu correo para confirmar el borrado de esta cuenta"
# type_in_email_progress: "Type in your email to confirm deleting your progress." type_in_email_progress: "TypeIntroduce tu correo para confirmar el borrado de tu progreso."
type_in_password: "Además, introduce tu contraseña." type_in_password: "Además, introduce tu contraseña."
email_subscriptions: "Suscripciones de correo electrónico" email_subscriptions: "Suscripciones de correo electrónico"
email_subscriptions_none: "Sin suscripciones de correo electrónico." email_subscriptions_none: "Sin suscripciones de correo electrónico."
@ -1398,7 +1398,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
ambassador_title: "Embajador" ambassador_title: "Embajador"
ambassador_title_description: "(Soporte)" ambassador_title_description: "(Soporte)"
ambassador_summary: "Amansa a los usuarios de nuestro foro y guía a aquellos que tengan preguntas. Nuestros Embajadores representan a CodeCombat frente al mundo." ambassador_summary: "Amansa a los usuarios de nuestro foro y guía a aquellos que tengan preguntas. Nuestros Embajadores representan a CodeCombat frente al mundo."
# teacher_title: "Teacher" teacher_title: "Profesor"
editor: editor:
main_title: "Editores de CodeCombat" main_title: "Editores de CodeCombat"
@ -1406,7 +1406,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
thang_title: "Editor de Objetos" thang_title: "Editor de Objetos"
level_title: "Editor de Niveles" level_title: "Editor de Niveles"
achievement_title: "Editor de Logros" achievement_title: "Editor de Logros"
# poll_title: "Poll Editor" poll_title: "Editor de Encuestas"
back: "Volver" back: "Volver"
revert: "Revertir" revert: "Revertir"
revert_models: "Revertir Modelos" revert_models: "Revertir Modelos"
@ -1471,7 +1471,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
new_achievement_title: "Crea un nuevo Logro" new_achievement_title: "Crea un nuevo Logro"
new_achievement_title_login: "Inicia sesión para Crear un Nuevo Logro" new_achievement_title_login: "Inicia sesión para Crear un Nuevo Logro"
new_poll_title: "Crear una nueva Encuesta" new_poll_title: "Crear una nueva Encuesta"
# new_poll_title_login: "Log In to Create a New Poll" new_poll_title_login: "Inicia sesión para Crear una Nueva Encuesta"
article_search_title: "Buscar artículos aquí" article_search_title: "Buscar artículos aquí"
thang_search_title: "Busca tipos de objetos aquí" thang_search_title: "Busca tipos de objetos aquí"
level_search_title: "Buscar niveles aquí" level_search_title: "Buscar niveles aquí"
@ -1511,7 +1511,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
join_desc_3: ", o encuéntranos en nuestro " join_desc_3: ", o encuéntranos en nuestro "
join_desc_4: "¡y partiremos desde ese punto!" join_desc_4: "¡y partiremos desde ese punto!"
join_url_email: "Escríbenos un correo electrónico" join_url_email: "Escríbenos un correo electrónico"
# join_url_slack: "public Slack channel" join_url_slack: "canal público de Slack"
archmage_subscribe_desc: "Recibe correos sobre nuevos anuncios y oportunidades de codificar." archmage_subscribe_desc: "Recibe correos sobre nuevos anuncios y oportunidades de codificar."
artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente clama por más contenido y solo podemos crear unos cuantos. Ahora mismo tu estación de trabajo es el nivel uno; nuestro editor de niveles es apenas usable por sus creadores, así que ten cuidado. Si tienes visiones de campañas que alcanzan el infinito" artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente clama por más contenido y solo podemos crear unos cuantos. Ahora mismo tu estación de trabajo es el nivel uno; nuestro editor de niveles es apenas usable por sus creadores, así que ten cuidado. Si tienes visiones de campañas que alcanzan el infinito"
artisan_introduction_suf: ", entonces esta Clase es ideal para ti." artisan_introduction_suf: ", entonces esta Clase es ideal para ti."
@ -1554,8 +1554,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
ambassador_join_desc: "cuéntanos más sobre ti, que has hecho y qué estarías interesado en hacer. ¡Y continuaremos a partir de ahí!" ambassador_join_desc: "cuéntanos más sobre ti, que has hecho y qué estarías interesado en hacer. ¡Y continuaremos a partir de ahí!"
ambassador_join_note_strong: "Nota" ambassador_join_note_strong: "Nota"
ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!" ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!"
ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador." ambassador_subscribe_desc: "Recibe correos acerca de actualizaciones de soporte y desarrollo del multijugador."
# teacher_subscribe_desc: "Get emails on updates and announcements for teachers." teacher_subscribe_desc: "Recibe acerca de actualizaciones y anuncios para profesores."
changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación." changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación."
diligent_scribes: "Nuestros diligentes Escribas:" diligent_scribes: "Nuestros diligentes Escribas:"
powerful_archmages: "Nuestros poderosos Archimagos:" powerful_archmages: "Nuestros poderosos Archimagos:"
@ -1610,7 +1610,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
fight: "¡Pelea!" fight: "¡Pelea!"
watch_victory: "Ver tu victoria" watch_victory: "Ver tu victoria"
defeat_the: "Vence a" defeat_the: "Vence a"
# watch_battle: "Watch the battle" watch_battle: "Observa la batalla"
tournament_started: ", iniciado" tournament_started: ", iniciado"
tournament_ends: "El torneo termina" tournament_ends: "El torneo termina"
tournament_ended: "El torneo ha terminado" tournament_ended: "El torneo ha terminado"
@ -1659,7 +1659,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
account: account:
payments: "Pagos" payments: "Pagos"
# prepaid_codes: "Prepaid Codes" prepaid_codes: "Código prepagados"
purchased: "Adquirido" purchased: "Adquirido"
subscription: "Suscripción" subscription: "Suscripción"
invoices: "Facturas" invoices: "Facturas"
@ -1711,10 +1711,10 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# you_can2: "purchase a prepaid code" # you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others." # you_can3: "that can be applied to your own account or given to others."
# coppa_deny: coppa_deny:
# text1: "Cant wait to learn programming?" text1: "¿No puedes esperar para empezar a programar?"
# text2: "Ask your parents to create an account for you!" text2: "¡Pide a tus padres que hagan una cuenta para ti!"
# close: "Close Window" close: "Cerrar ventana"
loading_error: loading_error:
could_not_load: "Error al cargar desde el servidor." could_not_load: "Error al cargar desde el servidor."
@ -1860,7 +1860,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
prizes: "Premios" prizes: "Premios"
total_value: "Valor Total" total_value: "Valor Total"
in_cash: "en dinero" in_cash: "en dinero"
custom_wizard: "Personaliza tu Mago de CodeCombat" custom_wizard: "Personaliza tu Hechicero de CodeCombat"
custom_avatar: "Personaliza tu avatar de CoceCombat" custom_avatar: "Personaliza tu avatar de CoceCombat"
heap: "Por seis meses de acceso \"Startup\"" heap: "Por seis meses de acceso \"Startup\""
credits: "creditos" credits: "creditos"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
license: "licencia" license: "licencia"
oreilly: "ebook de tu eleccion" oreilly: "ebook de tu eleccion"
# calendar: calendar:
# year: "Year" year: "Año"
# day: "Day" day: "Día"
# month: "Month" month: "Mes"
# january: "January" january: "Enero"
# february: "February" february: "Febrero"
# march: "March" march: "Marzo"
# april: "April" april: "Abril"
# may: "May" may: "Mayo"
# june: "June" june: "Junio"
# july: "July" july: "Julio"
# august: "August" august: "Agosto"
# september: "September" september: "Septiembre"
# october: "October" october: "Octubre"
# november: "November" november: "Noviembre"
# december: "December" december: "Diciembre"

View file

@ -14,85 +14,85 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
for_developers: "Pour développeurs" # Not currently shown on home page. for_developers: "Pour développeurs" # Not currently shown on home page.
or_ipad: "Ou télécharger pour iPad" or_ipad: "Ou télécharger pour iPad"
# new_home: new_home:
# slogan: "The most engaging game for learning programming." slogan: "Le jeu le plus engageant pour apprendre la programmation."
# classroom_edition: "Classroom Edition:" classroom_edition: "Édition Classe:"
# learn_to_code: "Learn to code:" learn_to_code: "Apprend à programmer:"
# teacher: "Teacher" teacher: "Enseignant"
# student: "Student" student: "Étudiant"
# play_now: "Play Now" play_now: "Jouez Maintenant"
# im_a_teacher: "I'm a Teacher" im_a_teacher: "Je suis un enseignant"
# im_a_student: "I'm a Student" im_a_student: "Je suis un étudiant"
# learn_more: "Learn more" learn_more: "Pour en savoir plus"
# classroom_in_a_box: "A classroom in-a-box for teaching computer science." classroom_in_a_box: "Une classe tout-inclus pour enseigner l'informatique."
# codecombat_is: "CodeCombat is a platform <strong>for students</strong> to learn computer science while playing through a real game." codecombat_is: "CodeCombat est une plateforme <strong>pour les étudiants</strong> afin d'apprendre l'informatique tout en jouant."
# our_courses: "Our courses have been specifically playtested to <strong>excel in the classroom</strong>, even by teachers with little to no prior programming experience." our_courses: "Nos cours ont été testés spécifiquement pour <strong>excellé en classe</strong>, même si les enseignants ont peu ou pas d'expérience en programmation."
# top_screenshots_hint: "Students write code and see their changes update in real-time" top_screenshots_hint: "Les étudiants écrivent du code et voient leurs changements s'appliqués en temps-réel"
# designed_with: "Designed with teachers in mind" designed_with: "Concu en pensant aux enseignants"
# real_code: "Real, typed code" real_code: "Vrai code entré au clavier"
# from_the_first_level: "from the first level" from_the_first_level: "à partir du premier niveau"
# getting_students: "Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure." getting_students: "Encourager les étudiants à écrire du code aussi rapidement que possible est primordial afin qu'ils apprennent comment bien structurer et écrire un programme."
# educator_resources: "Educator resources" educator_resources: "Resources pour les enseignants"
# course_guides: "and course guides" course_guides: "et les guides de cours"
# teaching_computer_science: "Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds." teaching_computer_science: "Enseigner l'informatique ne nécessite pas un diplôme dispendieux, parce que nous fournissons des outils afin d'aider les enseignants, peu importe leurs curriculums."
# accessible_to: "Accessible to" accessible_to: "Accessible à"
# everyone: "everyone" everyone: "tout le monde"
# democratizing: "Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code." democratizing: "Démocratiser le processus d'apprendre à programmer est au coeur de notre philosophie. Tout le monde devrait être capable d'apprendre la programmation."
# forgot_learning: "I think they actually forgot that they were actually learning something." forgot_learning: "Je crois qu'ils ont oublié qu'ils étaient en train d'apprendre quelquechose."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school." wanted_to_do: " Programmer est quelquechose que j'ai toujours voulu faire, et je n'ai jamais pensé que je pourrais l'apprendre à l'école."
# why_games: "Why is learning through games important?" why_games: "Pourquoi est-ce qu'apprendre en jouant est important?"
# games_reward: "Games reward the productive struggle." games_reward: "Les jeux récompensent l'effort productif."
# encourage: "Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn." encourage: "Le jeu est une plateforme qui encourage l'interaction, la découverte et l'essaie et erreur. Un bon jeu défit le joeur d'apprendre à maîtriser de nouvelles habiletés au fil du temps, ce qui correspond au même processus critique que l'on retrouve au niveau de l'éducation."
# excel: "Games excel at rewarding" excel: "Les jeux sont excellents afin de récompenser"
# struggle: "productive struggle" struggle: "l'effort productif"
# kind_of_struggle: "the kind of struggle that results in learning thats engaging and" kind_of_struggle: "le type d'effort qui permet d'apprendre, qui nous engage et"
# motivating: "motivating" motivating: "qui nous motive"
# not_tedious: "not tedious." not_tedious: "non pas fastidieux."
# gaming_is_good: "Studies suggest gaming is good for childrens brains. (its true!)" gaming_is_good: "Des études suggèrent que jouer est bon pour le cerveau des enfants. (C'est vrai!)"
# game_based: "When game-based learning systems are" game_based: "Quand les systèmes d'apprentissage basés sur le jeu sont"
# compared: "compared" compared: "comparés"
# conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and" conventional: "aux méthodes d'évaluation conventionnelles, la différence est claire: les jeux sont meilleurs afin d'aider les enfants à retenir ce qu'ils apprennent, à se concentrer et"
# perform_at_higher_level: "perform at a higher level of achievement" perform_at_higher_level: "à performer à un niveau supérieur d'accomplissement"
# feedback: "Games also provide real-time feedback that allows students to adjust their solution path and understand concepts more holistically, instead of being limited to just “correct” or “incorrect” answers." feedback: "Les jeux procurent aussi des résultats en temps réel qui permettent aux étudiants d'ajuster leur solution et de comprendre des concepts de façon plus holistique, au lieu d'être limité aux simples réponses “correct” ou “incorrect”."
# real_game: "A real game, played with real coding." real_game: "Un vrai jeu, joué en programmant pour de vrai."
# great_game: "A great game is more than just badges and achievements - its about a players journey, well-designed puzzles, and the ability to tackle challenges with agency and confidence." great_game: "Un bon jeu c'est plus qu'une série d'insignes et d'accomplissements - c'est à propos de l'aventure d'un joueur, des énigmes bien conçues et la capacité d'entreprendre des défis avec confiance et détermination."
# agency: "CodeCombat is a game that gives players that agency and confidence with our robust typed code engine, which helps beginner and advanced students alike write proper, valid code." agency: "CodeCombat est un jeu qui donne aux joueurs cette confiance et détermination à l'aide de notre interpretteur de lignes de code, qui aide les étudiants débutants ainsi qu'avancés à concevoir des programmes bien écrits et valides."
# request_demo_title: "Get your students started today!" request_demo_title: "Débutez avec vos étudiants aujourd'hui!"
# request_demo_subtitle: "Request a demo and get your students started in less than an hour." request_demo_subtitle: "Demandez une démonstration et permettez à vos étudiants de démarrer en moins d'une heure."
# get_started_title: "Set up your class today" get_started_title: "Mettez en place votre classe aujourd'hui"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science." get_started_subtitle: "Mettez en place une classe, ajoutez vos étudiants et surveillez leurs progrès au fur et à mesure qu'ils apprennent l'informatique."
# request_demo: "Request a Demo" request_demo: "Demandez une Démonstration"
# setup_a_class: "Set Up a Class" setup_a_class: "Mettre en place une classe"
# have_an_account: "Have an account?" have_an_account: "Avez-vous un compte?"
# logged_in_as: "You are currently logged in as" logged_in_as: "Vous êtes présentement enregistré en tant que"
# view_my_classes: "View my classes" view_my_classes: "Voir Mes Classes"
# computer_science: "Computer science courses for all ages" computer_science: "Des cours d'informatique pour tous âges"
# show_me_lesson_time: "Show me lesson time estimates for:" show_me_lesson_time: "Montrez-moi des estimés de temps de cours pour:"
# curriculum: "Total curriculum hours:" curriculum: "Total des heures du curriculum:"
# ffa: "Free for all students" ffa: "Gratuis pour tous les étudiants"
# lesson_time: "Lesson time:" lesson_time: "Temps de cours:"
# coming_soon: "Coming soon!" coming_soon: "Bientôt disponible!"
# courses_available_in: "Courses are available in JavaScript, Python, and Java (coming soon!)" courses_available_in: "Les cours sont disponibles en JavaScript, Python et Java (bientôt disponible!)"
# boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike." boast: "Comprend des énigmes assez complexes pour fasciner autant les joueurs que les programmeurs."
# winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable." winning: "Une combinaison gagnante d'élément de jeux de rôles et programmation qui permet aux enfants d'apprendre de façon légitimement plaisante."
# run_class: "Everything you need to run a computer science class in your school today, no CS background required." run_class: "Tous ce dont vous avez besoin pour enseigner l'informaique dans votre classe aujourd'hui, sans expérience préalable en informatique."
# teachers: "Teachers!" teachers: "Enseignants!"
# teachers_and_educators: "Teachers & Educators" teachers_and_educators: "Enseignants et éducateurs"
# class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum." class_in_box: "Apprenez comment notre plateforme classe-tout-inclus s'adapte à votre curriculum."
# get_started: "Get Started" # get_started: "Get Started"
# students: "Students:" students: "Étudiants:"
# join_class: "Join Class" join_class: "Joindre une classe"
# role: "Your role:" role: "Votre rôle:"
# student_count: "Number of students:" student_count: "Nombre d'étudiants:"
# start_playing_for_free: "Start Playing for Free!" start_playing_for_free: "Commencez à jouer gratuitement!"
# students_and_players: "Students & Players" students_and_players: "Étudiants et joueurs"
# goto_classes: "Go to My Classes" goto_classes: "Aller à Mes Classes"
# view_profile: "View My Profile" view_profile: "Voir Mon Profil"
# view_progress: "View Progress" view_progress: "Voir Progrès"
# check_out_wiki: "Check out our new Educator Wiki" check_out_wiki: "Visionner notre nouveau Wiki pour Éducateurs"
# want_coco: "Want CodeCombat at your school?" want_coco: "Voulez-vous CodeCombat à votre école?"
# form_select_role: "Select primary role" form_select_role: "Sélectionnez votre rôle principale"
# form_select_range: "Select class size" form_select_range: "Sélectionnez la taille de votre classe"
nav: nav:
play: "Jouer" # The top nav bar entry where players choose which levels to play play: "Jouer" # The top nav bar entry where players choose which levels to play
@ -102,7 +102,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
blog: "Blog" blog: "Blog"
forum: "Forum" forum: "Forum"
account: "Compte" account: "Compte"
# my_account: "My Account" my_account: "Mon compte"
profile: "Profil" profile: "Profil"
stats: "Stats" stats: "Stats"
code: "Code" code: "Code"
@ -112,24 +112,24 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
about: "À propos" about: "À propos"
contact: "Contact" contact: "Contact"
twitter_follow: "Suivre" twitter_follow: "Suivre"
# students: "Students" students: "Étudiants"
teachers: "Enseignants" teachers: "Enseignants"
careers: "Emplois" careers: "Emplois"
# facebook: "Facebook" facebook: "Facebook"
# twitter: "Twitter" twitter: "Twitter"
# create_a_class: "Create a Class" create_a_class: "Créer une classe"
# other: "Other" other: "Autre"
# learn_to_code: "Learn to Code!" learn_to_code: "Apprenez à programmer!"
# toggle_nav: "Toggle navigation" toggle_nav: "Basculer la navigation"
# jobs: "Jobs" jobs: "Emplois"
# schools: "Schools" schools: "Écoles"
# educator_wiki: "Educator Wiki" educator_wiki: "Wiki pour les éducateurs"
# get_involved: "Get Involved" get_involved: "Devenez impliqué"
# open_source: "Open source (GitHub)" open_source: "Code libre (GitHub)"
# support: "Support" support: "Support"
# faqs: "FAQs" faqs: "FAQs"
# help_pref: "Need help? Email" help_pref: "Besoin d'aide? Email"
# help_suff: "and we'll get in touch!" help_suff: "et nous entrerons en contact!"
modal: modal:
close: "Fermer" close: "Fermer"
@ -182,55 +182,55 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
campaign_old_multiplayer: "(Obsolète) Ancienne arènes multijoueurs" campaign_old_multiplayer: "(Obsolète) Ancienne arènes multijoueurs"
campaign_old_multiplayer_description: "Reliques d'un âge plus civilisé. Il n'y a aucune simulation pour ces vielles arènes multijoueur vides de tout héros." campaign_old_multiplayer_description: "Reliques d'un âge plus civilisé. Il n'y a aucune simulation pour ces vielles arènes multijoueur vides de tout héros."
# code: code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.) # if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else" else: "Sinon"
# elif: "else if" elif: "et sinon"
# while: "while" while: "tant que"
# loop: "loop" loop: "boucle"
# for: "for" for: "pour"
# break: "break" break: "break"
# continue: "continue" continue: "continue"
# pass: "pass" pass: "passe"
# return: "return" return: "retourne"
# then: "then" then: "alors"
# do: "do" do: "fait"
# end: "end" end: "fin"
# function: "function" function: "fonction"
# def: "define" def: "definit"
# var: "variable" var: "variable"
# self: "self" self: "soi-même"
# hero: "hero" hero: "héros"
# this: "this" this: "ceci"
# or: "or" or: "or"
# "||": "or" "||": "ou"
# and: "and" and: "et"
# "&&": "and" "&&": "et"
# not: "not" not: "n'est pas"
# "!": "not" "!": "n'est pas"
# "=": "assign" "=": "assigner"
# "==": "equals" "==": "équivalent à"
# "===": "strictly equals" "===": "strictement équivalent à"
# "!=": "does not equal" "!=": "n'est pas équivalent à"
# "!==": "does not strictly equal" "!==": "n'est pas strictement équivalent à"
# ">": "is greater than" ">": "est plus grand que"
# ">=": "is greater than or equal" ">=": "est plus grand que ou équivalent à"
# "<": "is less than" "<": "is less than"
# "<=": "is less than or equal" "<=": "est plus petit ou équivalent à"
# "*": "multiplied by" "*": "multiplié par"
# "/": "divided by" "/": "divisé par"
# "+": "plus" "+": "plus"
# "-": "minus" "-": "moins"
# "+=": "add and assign" "+=": "ajoute et assigne"
# "-=": "subtract and assign" "-=": "soustrait et assigne"
# True: "True" True: "Vrai"
# true: "true" true: "vrai"
# False: "False" False: "Faux"
# false: "false" false: "faux"
# undefined: "undefined" undefined: "non défini"
# null: "null" null: "nul"
# nil: "nil" nil: "nil"
# None: "None" None: "Aucune valeur"
share_progress_modal: share_progress_modal:
blurb: "Vous faites beaucoup de progrès ! Partagez ce que vous avez appris grâce à CodeCombat avec vos amis !" # {change} blurb: "Vous faites beaucoup de progrès ! Partagez ce que vous avez appris grâce à CodeCombat avec vos amis !" # {change}
@ -263,15 +263,15 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
school_name: "Nom et ville de votre école" school_name: "Nom et ville de votre école"
optional: "facultatif" optional: "facultatif"
school_name_placeholder: "Exemple : Lycée Champollion, Figeac" school_name_placeholder: "Exemple : Lycée Champollion, Figeac"
# or_sign_up_with: "or sign up with" or_sign_up_with: "ou abonnez-vous avec"
# connected_gplus_header: "You've successfully connected with Google+!" connected_gplus_header: "Vous avez réussi à vous connecter avec votre compte Google+!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account." connected_gplus_p: "Finissez de vous abonnez pour pouvoir vous connecter avec votre compte Google+."
# gplus_exists: "You already have an account associated with Google+!" gplus_exists: "Vous avez déjà un compte associé à Google+!"
# connected_facebook_header: "You've successfully connected with Facebook!" connected_facebook_header: "Vous avez réussi à vous connecter avec votre compte Facebook!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account." connected_facebook_p: "Finissez de vous abonnez pour pouvoir vous connecter avec votre compte Facebook."
# facebook_exists: "You already have an account associated with Facebook!" facebook_exists: "Vous avez réussi à vous connecter avec votre compte Facebook!"
# hey_students: "Students, enter the class code from your teacher." hey_students: "Étudiants, entrez le code de cours de votre enseignant."
# birthday: "Birthday" birthday: "Anniversaire"
recover: recover:
recover_account_title: "Récupérer son compte" recover_account_title: "Récupérer son compte"
@ -308,7 +308,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
submit_patch: "Soumettre un correctif" submit_patch: "Soumettre un correctif"
submit_changes: "Soumettre des Changements" submit_changes: "Soumettre des Changements"
save_changes: "Sauvegarder les modifications" save_changes: "Sauvegarder les modifications"
# required_field: "Required field" required_field: "Champ requis"
general: general:
and: "et" and: "et"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
subject: "Sujet" subject: "Sujet"
email: "E-mail" email: "E-mail"
password: "Mot de passe" password: "Mot de passe"
# confirm_password: "Confirm Password" confirm_password: "Confirmez votre mot de passe"
message: "Message" message: "Message"
code: "Code" code: "Code"
ladder: "Companion" ladder: "Companion"
@ -360,9 +360,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
warrior: "Guerrier" warrior: "Guerrier"
ranger: "Ranger" ranger: "Ranger"
wizard: "Magicien" wizard: "Magicien"
# first_name: "First Name" first_name: "Prénom"
# last_name: "Last Name" last_name: "Nom de famille"
# username: "Username" username: "Nom d'utilisateur"
units: units:
second: "seconde" second: "seconde"
@ -381,7 +381,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
years: "années" years: "années"
play_level: play_level:
# level_complete: "Level Complete" level_complete: "Niveau complété"
completed_level: "Niveau terminé:" completed_level: "Niveau terminé:"
course: "Cours:" course: "Cours:"
done: "Fait" done: "Fait"
@ -425,7 +425,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
victory_new_item: "Nouvel item" victory_new_item: "Nouvel item"
victory_viking_code_school: "Par la barbe d'Odin, c'est un niveau difficile que tu viens de compléter! Si tu n'est pas un développeur de logiciel, tu devrais l'être ! Ceci vient de te propulser dans l'école de Code Vikings où tu pourras amener tes habilités au prochain niveau et devenir un développer web profesionnel en deux semaines." victory_viking_code_school: "Par la barbe d'Odin, c'est un niveau difficile que tu viens de compléter! Si tu n'est pas un développeur de logiciel, tu devrais l'être ! Ceci vient de te propulser dans l'école de Code Vikings où tu pourras amener tes habilités au prochain niveau et devenir un développer web profesionnel en deux semaines."
victory_become_a_viking: "Devenez un viking" victory_become_a_viking: "Devenez un viking"
# victory_no_progress_for_teachers: "Progress is not saved for teachers. But, you can add a student account to your classroom for yourself." victory_no_progress_for_teachers: "La progression n'est pas sauvegardé pour les enseignants. Mais vous pouvez ajouter un compte étudiant à votre salle de cours pour vous."
guide_title: "Guide" guide_title: "Guide"
tome_cast_button_run: "Exécuter" tome_cast_button_run: "Exécuter"
tome_cast_button_running: "En cours d'exécution" tome_cast_button_running: "En cours d'exécution"
@ -505,15 +505,15 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
tip_strong_opponents: "Même les ennemis les plus puissant ont une faiblesse. - Itachi Uchiha" tip_strong_opponents: "Même les ennemis les plus puissant ont une faiblesse. - Itachi Uchiha"
tip_paper_and_pen: "Avant de commencer à coder, vous pouvez plannifier les choses sur papier." tip_paper_and_pen: "Avant de commencer à coder, vous pouvez plannifier les choses sur papier."
tip_solve_then_write: "D'abord, résolvez le problème. Ensuite, écrivez le code. - John Johnson" tip_solve_then_write: "D'abord, résolvez le problème. Ensuite, écrivez le code. - John Johnson"
# tip_compiler_ignores_comments: "Sometimes I think that the compiler ignores my comments." tip_compiler_ignores_comments: "Des fois, je pense que le compilateur ignore mes commentaires."
# tip_understand_recursion: "The only way to understand recursion is to understand recursion." tip_understand_recursion: "La seule manière de comprendre la récursion est de comprendre la récursion."
# tip_life_and_polymorphism: "Open Source is like a totally polymorphic heterogeneous structure: All types are welcome." tip_life_and_polymorphism: "Le code libre est une structure hétérogène polymorphique. Tous les types sont les bienvenues."
# tip_mistakes_proof_of_trying: "Mistakes in your code are just proof that you are trying." tip_mistakes_proof_of_trying: "Les erreurs dans votre code sont la preuve que vous essayez."
# tip_adding_orgres: "Rounding up ogres." tip_adding_orgres: "Rassembler les ogres."
# tip_sharpening_swords: "Sharpening the swords." tip_sharpening_swords: "Aiguiser les épées."
# tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille" tip_ratatouille: "Tu ne dois laisser personne définir où se trouvent tes limites. La seule vraie limite est c'est ton âme. - Gusteau, Ratatouille"
# tip_nemo: "When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo" tip_nemo: "Quand la vie vous rabaisse, vous savez ce que vous devenez faire ? Juste continuer de nager, juste continuer de nager. - Dory, Finding Nemo"
# tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green" tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
# tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green" # tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green"
# tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green" # tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green"
# tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood" # tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood"
@ -1689,27 +1689,27 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
retrying: "Erreur interne, réessayez" retrying: "Erreur interne, réessayez"
success: "Paiement accepté, merci !" success: "Paiement accepté, merci !"
# account_prepaid: account_prepaid:
# purchase_code: "Purchase a Subscription Code" purchase_code: "Acheter un code d'abonnement"
# purchase_code1: "Subscription Codes can be redeemed to add premium subscription time to one or more CodeCombat accounts." purchase_code1: "Les codes d'abonnement peuvent seulement être racheter pour ajouter des comptes prenium à un ou plusieurs comptes de CodeCombat"
# purchase_code2: "Each CodeCombat account can only redeem a particular Subscription Code once." # purchase_code2: "Each CodeCombat account can only redeem a particular Subscription Code once."
# purchase_code3: "Subscription Code months will be added to the end of any existing subscription on the account." # purchase_code3: "Subscription Code months will be added to the end of any existing subscription on the account."
# users: "Users" users: "Utilisateurs"
# months: "Months" months: "Mois"
# purchase_total: "Total" purchase_total: "Total"
# purchase_button: "Submit Purchase" # purchase_button: "Submit Purchase"
# your_codes: "Your Codes" your_codes: "Vos codes"
# redeem_codes: "Redeem a Subscription Code" # redeem_codes: "Redeem a Subscription Code"
# prepaid_code: "Prepaid Code" # prepaid_code: "Prepaid Code"
# lookup_code: "Lookup prepaid code" # lookup_code: "Lookup prepaid code"
# apply_account: "Apply to your account" # apply_account: "Apply to your account"
# copy_link: "You can copy the code's link and send it to someone." # copy_link: "You can copy the code's link and send it to someone."
# quantity: "Quantity" quantity: "Quantité"
# redeemed: "Redeemed" # redeemed: "Redeemed"
# no_codes: "No codes yet!" no_codes: "Pas de code soumis"
# you_can1: "You can" you_can1: "Vous pouvez"
# you_can2: "purchase a prepaid code" you_can2: "achetez un code pré-payé"
# you_can3: "that can be applied to your own account or given to others." you_can3: "qui pourra être appliqué à votre compte ou donné à un autre."
# coppa_deny: # coppa_deny:
# text1: "Cant wait to learn programming?" # text1: "Cant wait to learn programming?"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
license: "Licence" license: "Licence"
oreilly: "ebook de votre choix" oreilly: "ebook de votre choix"
# calendar: calendar:
# year: "Year" year: "Année"
# day: "Day" day: "Jour"
# month: "Month" month: "Mois"
# january: "January" january: "Janvier"
# february: "February" february: "Février"
# march: "March" march: "Mars"
# april: "April" april: "Avril"
# may: "May" may: "Mai"
# june: "June" june: "Juin"
# july: "July" july: "Juillet"
# august: "August" august: "Août"
# september: "September" september: "Septembre"
# october: "October" october: "Octobre"
# november: "November" november: "Novembre"
# december: "December" december: "Décembre"

View file

@ -5,8 +5,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
no_mobile: "CodeCombat is niet gemaakt voor mobiele apparaten en werkt misschien niet!" # Warning that shows up on mobile devices no_mobile: "CodeCombat is niet gemaakt voor mobiele apparaten en werkt misschien niet!" # Warning that shows up on mobile devices
play: "Speel" # The big play button that opens up the campaign view. play: "Speel" # The big play button that opens up the campaign view.
play_campaign_version: "Speel de Verhaallijn" # Shows up under big play button if you only play /courses play_campaign_version: "Speel de Verhaallijn" # Shows up under big play button if you only play /courses
old_browser: "Oh oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "uh-oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!" old_browser_suffix: "Je kan alsnog proberen, maar het zal waarschijnlijk niet werken!"
ipad_browser: "Slecht nieuws: CodeCombat draait niet in je browser op de iPad. Goed nieuws: onze iPad-app wordt op het moment beoordeeld door Apple." ipad_browser: "Slecht nieuws: CodeCombat draait niet in je browser op de iPad. Goed nieuws: onze iPad-app wordt op het moment beoordeeld door Apple."
campaign: "Verhaallijn" campaign: "Verhaallijn"
for_beginners: "Voor Beginners" for_beginners: "Voor Beginners"
@ -24,25 +24,25 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
im_a_teacher: "Ik ben een leraar" im_a_teacher: "Ik ben een leraar"
im_a_student: "Ik ben een leerling" im_a_student: "Ik ben een leerling"
learn_more: "Lees verder" learn_more: "Lees verder"
classroom_in_a_box: "Een kant-en-klare digitale klas voor programmeerlessen." classroom_in_a_box: "Kant-en-klare programmeerlessen."
codecombat_is: "CodeCombat is een platform waarmee leerlingen leren programmeren door het spelen van een spel." # {change} codecombat_is: "CodeCombat is een platform waarmee leerlingen leren programmeren door het spelen van een spel." # {change}
our_courses: "Onze lessen zijn specifiek ontwikkeld voor een klasomgeving, zelfs voor leraren zonder programmeerervaring." # {change} our_courses: "Onze lessen zijn specifiek ontwikkeld voor een klasomgeving, zelfs voor leraren zonder programmeerervaring." # {change}
top_screenshots_hint: "Leerlingen schrijven code en zien direct het resultaat van de verandering." top_screenshots_hint: "Leerlingen schrijven code en zien direct resultaat."
designed_with: "Gemaakt voor leraren" designed_with: "Gemaakt voor leraren"
real_code: "Echte, getypte code" real_code: "Echte, getypte code"
from_the_first_level: "vanaf het eerste level" from_the_first_level: "vanaf het eerste level"
getting_students: "Leerlingen zo snel mogelijk echte code laten schrijven is noodzakelijk voor het leren van programmeer syntax en correcte structuur." getting_students: "Doordat leerlingen code schrijven in 'echte programmeertaal', leren ze niet alleen hoe computers denken, maar kunnen ze het ook echt toepassen."
educator_resources: "Lesbrieven voor docenten" educator_resources: "Lesbrieven voor docenten"
course_guides: "en ondersteuningsmateriaal" course_guides: "en ondersteuningsmateriaal"
teaching_computer_science: "Je hebt geen informatica diploma nodig om te kunnen programmeren, wij verschaffen de materialen waarmee elke docent programmeerles kan geven." teaching_computer_science: "Je hebt geen informatica diploma nodig om te kunnen programmeren, wij verschaffen de materialen waarmee elke docent programmeerles kan geven."
accessible_to: "Bereikbaar voor" accessible_to: "Toegankelijk voor"
everyone: "iedereen" everyone: "iedereen"
democratizing: "Programmeerles toegankelijk maken is onze filosofie. Iedereen moet de kans krijgen om te leren programmeren." democratizing: "Programmeerles toegankelijk maken is onze filosofie. Iedereen moet de kans krijgen om te leren programmeren."
forgot_learning: "Volgens mij hadden ze niet meer door dat ze eigenlijk bezig waren met leren." forgot_learning: "Volgens mij hadden ze niet meer door dat ze eigenlijk bezig waren met leren."
wanted_to_do: " Ik wilde altijd al leren programmeren, maar op school was hier nooit aandacht voor." wanted_to_do: " Ik wilde altijd al leren programmeren, maar op school was hier nooit aandacht voor."
why_games: "Waarom is spelenderwijs leren belangrijk?" why_games: "Waarom is spelenderwijs leren belangrijk?"
games_reward: "Games vergroten de productiviteit." games_reward: "Games vergroten de productiviteit."
encourage: "Gaming is een middel dat interactie, nieuwschierigheid, en trial-and-error aanmoedigt. Een goed spel daagt de speler uit zijn vaardigheden te perfectioneren, wat hetzelfde noodzakelijke proces is waar leerlingen doorheen gaan wanneer zij iets leren." encourage: "Iedereen wordt geboren als klein onderzoekertje dat de wereld ontdekt door vallen en opstaan. Deze intrinsieke motivatie om te leren ziet men ook terug in een spelomgeving. Voor de speler wordt 'leren' een middel om het spel te winnen, in plaats van een doel op zich."
excel: "Games helpen bij de" excel: "Games helpen bij de"
struggle: "productiviteit-strijd" struggle: "productiviteit-strijd"
kind_of_struggle: "het soort worsteling dat uitmondt in een leerproces dat uitdagend is en " kind_of_struggle: "het soort worsteling dat uitmondt in een leerproces dat uitdagend is en "
@ -58,7 +58,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
great_game: "Een goed spel is meer dan alleen medailles en prestaties - het gaat om een reis, nauwkeurig ontworpen puzzels, en de mogelijkheid om uitdagingen vol zelfvertrouwen aan te pakken." great_game: "Een goed spel is meer dan alleen medailles en prestaties - het gaat om een reis, nauwkeurig ontworpen puzzels, en de mogelijkheid om uitdagingen vol zelfvertrouwen aan te pakken."
agency: "CodeCombat is een game die de mogelijkheid en het zelfvertrouwen geeft om met echte code te werken, wat zowel beginners als gevorderde helpt bij het schrijven van goede, valide code." agency: "CodeCombat is een game die de mogelijkheid en het zelfvertrouwen geeft om met echte code te werken, wat zowel beginners als gevorderde helpt bij het schrijven van goede, valide code."
request_demo_title: "Laat je leerlingen vandaag nog starten!" request_demo_title: "Laat je leerlingen vandaag nog starten!"
request_demo_subtitle: "Vraag een demo aan en start binnen een uur met programmeerlessen." request_demo_subtitle: "Vraag een demo aan en start met programmeerlessen."
get_started_title: "Maak vandaag nog een klas aan!" get_started_title: "Maak vandaag nog een klas aan!"
get_started_subtitle: "Maak een klas aan, voeg je leerlingen toe, en monitor hun vooruitgang." get_started_subtitle: "Maak een klas aan, voeg je leerlingen toe, en monitor hun vooruitgang."
request_demo: "Vraag een demo aan" request_demo: "Vraag een demo aan"
@ -74,7 +74,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
coming_soon: "Binnenkort beschikbaar!" coming_soon: "Binnenkort beschikbaar!"
courses_available_in: "Lessen zijn beschikbaar in JavaScript, Python, en Java (Java is binnenkort beschikbaar!)" courses_available_in: "Lessen zijn beschikbaar in JavaScript, Python, en Java (Java is binnenkort beschikbaar!)"
boast: "Uitdagende raadsels die zowel gamers als fanatieke programmeurs weten te prikkelen." boast: "Uitdagende raadsels die zowel gamers als fanatieke programmeurs weten te prikkelen."
winning: "Een gouden combinatie van spel-elementen en programmeerhuiswerk, dat samen zorgt voor kind-vriendelijk en oprecht aangenaam onderwijs." winning: "Een gouden combinatie van spel-elementen en programmeerhuiswerk, dat samen zorgt voor kindvriendelijk en oprecht aangenaam onderwijs."
run_class: "Alles wat je nodig hebt om vandaag nog programmeerlessen in jouw klas te geven, geen voorkennis vereist." run_class: "Alles wat je nodig hebt om vandaag nog programmeerlessen in jouw klas te geven, geen voorkennis vereist."
teachers: "Docenten!" teachers: "Docenten!"
teachers_and_educators: "Docenten & Mentoren" teachers_and_educators: "Docenten & Mentoren"
@ -92,7 +92,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
check_out_wiki: "Bekijk onze nieuwe leraren Wiki" check_out_wiki: "Bekijk onze nieuwe leraren Wiki"
want_coco: "Wil je CodeCombat op jouw school?" want_coco: "Wil je CodeCombat op jouw school?"
form_select_role: "Selecteer je rol" form_select_role: "Selecteer je rol"
form_select_range: "Selecteer klassengrootte" form_select_range: "Selecteer klasomvang"
nav: nav:
play: "Levels" # The top nav bar entry where players choose which levels to play play: "Levels" # The top nav bar entry where players choose which levels to play
@ -221,19 +221,19 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
"/": "gedeeld door" "/": "gedeeld door"
"+": "plus" "+": "plus"
"-": "min" "-": "min"
# "+=": "add and assign" "+=": "tel op en wijs toe"
# "-=": "subtract and assign" "-=": "trek af en wijs toe"
True: "Waar" True: "Waar"
true: "waar" true: "waar"
False: "onwaar" False: "onwaar"
false: "onwaar" false: "onwaar"
undefined: "ongedefinieerd" undefined: "ongedefinieerd"
# null: "null" null: "nul"
# nil: "nil" nil: "nihil"
None: "Geen" None: "Geen"
share_progress_modal: share_progress_modal:
blurb: "Je gaat snel vooruit! Vertel aan je ouders hoeveel je geleerd hebt van CodeCombat." blurb: "Je gaat snel vooruit! Vertel je ouders hoeveel je geleerd hebt van CodeCombat."
email_invalid: "E-mailadres klopt niet." email_invalid: "E-mailadres klopt niet."
form_blurb: "Vul het e-mailadres van je ouders hieronder in en we zullen het ze laten zien!" form_blurb: "Vul het e-mailadres van je ouders hieronder in en we zullen het ze laten zien!"
form_label: "E-mailadres" form_label: "E-mailadres"
@ -472,19 +472,19 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
tip_reticulating: "Paden aan het verknopen." tip_reticulating: "Paden aan het verknopen."
tip_harry: "Je bent een tovenaar, " tip_harry: "Je bent een tovenaar, "
tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid." tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid."
tip_munchkin: "Als je je groentjes niet opeet zal een munchkin je ontvoeren terwijl je slaapt." tip_munchkin: "Als je je groenten niet opeet zal een munchkin je ontvoeren terwijl je slaapt."
tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen." tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen."
tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda" tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda"
tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda" tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda"
tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda" tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda"
tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma." tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma."
tip_impossible: "Het lijkt altijd onmogelijk tot het gedaan wordt. - Nelson Mandela" tip_impossible: "Het lijkt altijd onmogelijk totdat iemand het doet. - Nelson Mandela"
tip_talk_is_cheap: "Je kunt het goed uitleggen, maar toon me de code. - Linus Torvalds" tip_talk_is_cheap: "Je kunt het goed uitleggen, maar toon me de code. - Linus Torvalds"
tip_first_language: "Het ergste dat je kan leren is je eerste programmeertaal. - Alan Kay" tip_first_language: "Het ergste dat je kan leren is je eerste programmeertaal. - Alan Kay"
tip_hardware_problem: "Q: Hoeveel programmeurs heb je nodig om een lampje te vervangen? A: Nul, het is een a hardware probleem." tip_hardware_problem: "Q: Hoeveel programmeurs heb je nodig om een lampje te vervangen? A: Nul, het is een a hardware probleem."
tip_hofstadters_law: "De Wet van Hofstadter: Het duurt altijd langer dan je verwacht, zelfs wanneer je rekening houdt met de Wet van Hofstadter." tip_hofstadters_law: "De Wet van Hofstadter: Het duurt altijd langer dan je verwacht, zelfs wanneer je rekening houdt met de Wet van Hofstadter."
tip_premature_optimization: "vroegtijdig optimaliseren is de wortel van al het kwaad. - Donald Knuth" tip_premature_optimization: "vroegtijdig optimaliseren is de wortel van al het kwaad. - Donald Knuth"
tip_brute_force: "Wanneer je twijfelt, gebruik brute force. - Ken Thompson" tip_brute_force: "Wanneer je twijfelt, gebruik dan brute force. - Ken Thompson"
tip_extrapolation: "Er zijn twee soorten mensen: Zij die iets kunnen afleiden van onvolledige gegevens..." tip_extrapolation: "Er zijn twee soorten mensen: Zij die iets kunnen afleiden van onvolledige gegevens..."
tip_superpower: "Van alle dingen komt programmeren het dichtst in de buurt van een superkracht." tip_superpower: "Van alle dingen komt programmeren het dichtst in de buurt van een superkracht."
tip_control_destiny: "In echte open source, hebt je het recht om je eigen toekomst te bepalen. - Linus Torvalds" tip_control_destiny: "In echte open source, hebt je het recht om je eigen toekomst te bepalen. - Linus Torvalds"
@ -818,51 +818,51 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
more_info_3: "Het is een goede plek om contact te leggen met andere leerkrachten, die CodeCombat gebruiken." more_info_3: "Het is een goede plek om contact te leggen met andere leerkrachten, die CodeCombat gebruiken."
teachers_quote: teachers_quote:
name: "Offerte Formulier" # {change} name: "Demo Formulier"
title: "Offerte aanvragen" # {change} title: "Demo aanvragen"
subtitle: "Haal CodeCombat jouw klaslokaal, club, school of wijk in!" subtitle: "Gebruik CodeCombat voor jouw klas of programmeerclub!"
email_exists: "Er bestaat al een gebruiker met dit emailadres." email_exists: "Er bestaat al een gebruiker met dit emailadres."
phone_number: "Telefoonnummer" phone_number: "Telefoonnummer"
phone_number_help: "Waar kunnen we je bereiken tijdens de werkdag?" phone_number_help: "Waarop kunnen we je bereiken tijdens kantooruren?"
primary_role_label: "Uw Primaire Rol" primary_role_label: "Uw primaire rol"
role_default: "Selecteer Rol" role_default: "Selecteer primaire rol"
primary_role_default: "Selecteer Primaire Rol" primary_role_default: "Selecteer rol"
purchaser_role_default: "Selecteer Aanschaf Rol" purchaser_role_default: "Selecteer rol in besluitvorming"
tech_coordinator: "IT coördinator" tech_coordinator: "IT coördinator"
advisor: "Adviseur" advisor: "Adviseur"
principal: "Schoolhoofd" principal: "Schoolhoofd"
superintendent: "Leidinggevende" superintendent: "Leidinggevende"
parent: "Ouder/verzorger" parent: "Ouder/verzorger"
purchaser_role_label: "Uw aanschaf Rol" purchaser_role_label: "Uw rol in besluitvorming"
influence_advocate: "Promoten" influence_advocate: "Promoten"
evaluate_recommend: "Evalueren/Aanbevelen" evaluate_recommend: "Evalueren/Aanbevelen"
approve_funds: "Budget toewijzen" approve_funds: "Budget toewijzen"
no_purchaser_role: "Geen rol in aanschaf keuze" no_purchaser_role: "Geen rol in besluitvorming"
organization_label: "Schoolnaam" organization_label: "Schoolnaam"
city: "Stad" city: "Stad"
state: "Provincie" state: "Provincie"
country: "Land" country: "Land"
num_students_help: "Hoeveel leerlingen verwacht u in te schrijven voor CodeCombat?" num_students_help: "Voor hoeveel leerlingen zou je CodeCombat willen gebruiken?"
num_students_default: "Selecteer bereik" num_students_default: "Selecteer bereik"
education_level_label: "Opleidingsniveau van de leerlingen" education_level_label: "Opleidingsniveau van leerlingen"
education_level_help: "Kies hoeveel van toepassing is." education_level_help: "Selecteer toepasbare niveau(s)."
elementary_school: "Basisschool" elementary_school: "Basisschool"
high_school: "Middelbare school" high_school: "Middelbare school (bovenbouw)"
please_explain: "(licht a.u.b. toe)" please_explain: "(licht toe a.u.b.)"
middle_school: "Brugklas" middle_school: "Middelbare school (onderbouw)"
college_plus: "Hoger Onderwijs" college_plus: "Hoger Onderwijs"
anything_else: "Is er verder nog iets dat we moeten weten?" anything_else: "Is er verder nog iets dat we moeten weten?"
thanks_header: "Bedankt voor het aanvragen van een citaat!" # {change} thanks_header: "Bedankt voor je demo-aanvraag!"
thanks_sub_header: "Bedankt voor je interesse in CodeCombat voor jouw school." thanks_sub_header: "Bedankt voor je interesse in CodeCombat."
thanks_p: "Wij zullen spoedig contact met u opnemen. Vragen? Mail ons:" # {change} thanks_p: "Wij zullen spoedig contact met u opnemen. Vragen? Mail ons:" # {change}
# back_to_classes: "Back to Classes" back_to_classes: "Terug naar Klassen"
finish_signup: "Voltooi aanmaken van jouw docenten-account:" finish_signup: "Voltooi je docenten-account:"
finish_signup_p: "Maak een account om een klas op te zetten, voeg leerlingen toe en bekijk hun voortgang terwijl ze leren programmeren" finish_signup_p: "Maak een account om een klas op te zetten, voeg leerlingen toe en bekijk hun voortgang terwijl ze leren programmeren"
signup_with: "Schrijf je in met:" signup_with: "Schrijf je in met:"
connect_with: "Koppel met:" connect_with: "Koppel met:"
conversion_warning: "WAARSCHUWING: Je huidige account is een <em>Leerling Account</em>. Wanneer je dit formulier indient zal dit account gewijzigt worden naar een Docenten Account." conversion_warning: "WAARSCHUWING: Je huidige account is een <em>Leerling Account</em>. Wanneer je dit formulier indient zal dit account worden omgezet naar een Docenten Account."
learn_more_modal: "Docenten Accounts op CodeCombat hebben de mogelijkheid om de voortgang van studenten te bekijken, inschrijvingen regelen en klaslokalen beheren. Docenten Accounts kunnen niet in een klaslokaal ingeschreven staan - als je ingeschreven staat in een klas met dit account zul je niet langer toegang hebben tot die klas wanneer je jouw account veranderd in een Docenten Account." learn_more_modal: "Docenten Accounts kunnen de voortgang van leerlingen te zien, inschrijvingen regelen en klaslokalen beheren. Docenten Accounts kunnen niet in een klaslokaal ingeschreven staan - als je ingeschreven staat in een klas met dit account zul je niet langer als leerling toegang hebben tot die klas."
create_account: "Maak een docenten-account" create_account: "Maak een docenten-account aan"
create_account_subtitle: "Krijg toegang tot exclusieve hulpmiddelen voor docenten door CodeCombat in de klas te gebruiken. <strong>Maak een klas aan</strong>, voeg leerlingen toe, en <strong>bekijk hun vooruitgang</strong>!" create_account_subtitle: "Krijg toegang tot exclusieve hulpmiddelen voor docenten door CodeCombat in de klas te gebruiken. <strong>Maak een klas aan</strong>, voeg leerlingen toe, en <strong>bekijk hun vooruitgang</strong>!"
convert_account_title: "Verander in een docenten-account" convert_account_title: "Verander in een docenten-account"
not: "niet" not: "niet"
@ -871,7 +871,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
versions: versions:
save_version_title: "Nieuwe versie opslaan" save_version_title: "Nieuwe versie opslaan"
new_major_version: "Nieuwe hoofdversie" new_major_version: "Nieuwe hoofdversie"
submitting_patch: "Aanpassing wordt Ingediend..." submitting_patch: "Aanpassing wordt ingediend..."
cla_prefix: "Om bewerkingen op te slaan, moet je eerst akkoord gaan met onze" cla_prefix: "Om bewerkingen op te slaan, moet je eerst akkoord gaan met onze"
cla_url: "CLA" cla_url: "CLA"
cla_suffix: "." cla_suffix: "."
@ -1069,10 +1069,10 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
completed: "voltooid:" completed: "voltooid:"
invite_students: "Nodig leerlingen uit voor deze klas." invite_students: "Nodig leerlingen uit voor deze klas."
invite_link_header: "Link om aan cursus deel te nemen" invite_link_header: "Link om aan cursus deel te nemen"
invite_link_p_1: "Geef deze link aan leerlingen waarvan u wilt dat zij de cursus volgen." invite_link_p_1: "Geef deze link aan leerlingen waarvan je wil dat zij de cursus volgen."
invite_link_p_2: "Of laat ons hun direct een e-mail sturen:" invite_link_p_2: "Of laat ons hun direct een e-mail sturen:"
capacity_used: "Cursus stoelen gebruikt:" capacity_used: "Cursusplekken gebruikt:"
enter_emails: "Voer e-mailadressen van leerlingen in om uit te nodigen, één per regel" enter_emails: "Voer e-mailadressen van leerlingen in om hen uit te nodigen, één per regel"
send_invites: "Verstuur uitnodigingen" send_invites: "Verstuur uitnodigingen"
creating_class: "Aanmaken klas..." creating_class: "Aanmaken klas..."
purchasing_course: "Aanschaffen cursus..." purchasing_course: "Aanschaffen cursus..."
@ -1080,7 +1080,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
buy_course1: "Koop deze cursus" buy_course1: "Koop deze cursus"
select_all_courses: "Selecteer 'Alle cursussen' voor 50% korting!" select_all_courses: "Selecteer 'Alle cursussen' voor 50% korting!"
all_courses: "Alle cursussen" all_courses: "Alle cursussen"
number_programming_students: "Aantal informatica leerlingen" number_programming_students: "Aantal doelgroepleerlingen"
number_total_students: "Totaal aan leerlingen op school" number_total_students: "Totaal aan leerlingen op school"
enter_number_students: "Voer het aantal leerlingen in dat je voor de klas nodig hebt." enter_number_students: "Voer het aantal leerlingen in dat je voor de klas nodig hebt."
name_class: "Geef je klas een naam" name_class: "Geef je klas een naam"
@ -1089,25 +1089,25 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
purchasing_for: "U koopt een licentie voor" purchasing_for: "U koopt een licentie voor"
creating_for: "U maakt een klas voor" creating_for: "U maakt een klas voor"
for: "voor" # Like in 'for 30 students' for: "voor" # Like in 'for 30 students'
receive_code: "Naderhand ontvangt u een ontgrendelcode om uw leerlingen, waarmee zij zich kunnen inschrijven in uw klas." receive_code: "Naderhand ontvangt u een ontgrendelcode vooor uw leerlingen, waarmee zij zich kunnen inschrijven in uw klas."
free_trial: "Gratis uitproberen voor leerkrachten!" free_trial: "Gratis uitproberen voor leerkrachten!"
get_access: "Individueel toegang krijgen voor evaluatiedoeleinden." get_access: "Individueel toegang krijgen voor evaluatiedoeleinden."
questions: "Vragen?" questions: "Vragen?"
teachers_click: "Leerkrachten klik hier" teachers_click: "Leerkrachten klik hier"
students_click: "Leerlingen klik hier" students_click: "Leerlingen klik hier"
courses_on_coco: "Cursussen van CodeCombat" courses_on_coco: "Cursussen van CodeCombat"
designed_to: "Cursussen zijn ontwikkeld ter introductie van ICT-concepten met CodeCombats leuke en leerzame omgevingen. CodeCombat-levels zijn gesturctureerd rond belangrijke concepten om vooruitstrevend leren te bemoedigen, gedurende 5 uur." designed_to: "Cursussen zijn ontwikkeld ter introductie van ICT-concepten met CodeCombat's leuke en leerzame omgevingen. CodeCombat-levels zijn gesturctureerd rond belangrijke concepten om vooruitstrevend leren te stimuleren, gedurende 5 uur."
more_in_less: "Leer meer in minder tijd" more_in_less: "Leer meer in minder tijd"
no_experience: "Geen programmeerervaring nodig" no_experience: "Geen programmeerervaring nodig"
easy_monitor: "voortgang leerlingen gemakkelijk te bekijken" easy_monitor: "voortgang leerlingen gemakkelijk te bekijken"
purchase_for_class: "Koop een cursus voor de hele klas. Het is makkelijk je leerlingen in te schrijven!" purchase_for_class: "Koop een cursus voor de hele klas. Schrijf je leerlingen eenvoudig in!"
see_the: "Bekijk de" see_the: "Bekijk de"
more_info: "voor meer informatie." more_info: "voor meer informatie."
choose_course: "Kies uw cursus:" choose_course: "Kies uw cursus:"
enter_code: "voer een ontgrendelcode in" # {change} enter_code: "voer een ontgrendelcode in" # {change}
enter_code1: "Voer ontgrendelcode in" enter_code1: "Voer ontgrendelcode in"
enroll: "Inschrijven" enroll: "Inschrijven"
pick_from_classes: "Kies uit je huidige klas" pick_from_classes: "Kies uit je huidige klassen"
enter: "Treed toe" enter: "Treed toe"
or: "Of" or: "Of"
topics: "Onderwerpen" topics: "Onderwerpen"
@ -1233,10 +1233,10 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
getting_started_3: "Je ziet dan de voortgang van de leerlingen, wanneer ze zich inschrijven en aanmelden voor uw klas." getting_started_3: "Je ziet dan de voortgang van de leerlingen, wanneer ze zich inschrijven en aanmelden voor uw klas."
additional_resources: "Extra bronnen" additional_resources: "Extra bronnen"
additional_resources_1_pref: "Download/print onze" additional_resources_1_pref: "Download/print onze"
additional_resources_1_mid: "Cursus 1 Leerkrachtengids" # {change} additional_resources_1_mid: "Cursus 1 docentenhandleiding"
additional_resources_1_mid2: "en" additional_resources_1_mid2: "en"
additional_resources_1_mid3: "Cursus 2" additional_resources_1_mid3: "Cursus 2"
additional_resources_1_suff: "uitleg en oplossingen voor elke level." # {change} additional_resources_1_suff: "uitleg en oplossingen voor elk level."
additional_resources_2_pref: "Maak onze af" additional_resources_2_pref: "Maak onze af"
additional_resources_2_suff: "Om twee gratis inschrijvingen te krijgen voor onze overige betaalde cursussen." additional_resources_2_suff: "Om twee gratis inschrijvingen te krijgen voor onze overige betaalde cursussen."
additional_resources_3_pref: "Bezoek onze" additional_resources_3_pref: "Bezoek onze"
@ -1601,7 +1601,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
tutorial_skip: "Sla Tutorial over" tutorial_skip: "Sla Tutorial over"
tutorial_not_sure: "Niet zeker wat er aan de hand is?" tutorial_not_sure: "Niet zeker wat er aan de hand is?"
tutorial_play_first: "Speel eerst de Tutorial." tutorial_play_first: "Speel eerst de Tutorial."
simple_ai: "Simpele AI" # {change} simple_ai: "Simpele K.I."
warmup: "Opwarming" warmup: "Opwarming"
friends_playing: "Spelende Vrienden" friends_playing: "Spelende Vrienden"
log_in_for_friends: "Log in om met je vrienden te spelen!" log_in_for_friends: "Log in om met je vrienden te spelen!"
@ -1623,8 +1623,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
rules: "Regels" rules: "Regels"
winners: "Winnaars" winners: "Winnaars"
league: "Competitie" league: "Competitie"
red_ai: "KI rood" # "Red AI Wins", at end of multiplayer match playback red_ai: "K.I. rood" # "Red AI Wins", at end of multiplayer match playback
blue_ai: "KI blauw" # {change} blue_ai: "K.I. blauw"
wins: "Wint" # At end of multiplayer match playback wins: "Wint" # At end of multiplayer match playback
humans: "Rood" # Ladder page display team name humans: "Rood" # Ladder page display team name
ogres: "Blauw" ogres: "Blauw"
@ -1698,7 +1698,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
months: "Maanden" months: "Maanden"
purchase_total: "Totaal" purchase_total: "Totaal"
purchase_button: "Verzend betaling" purchase_button: "Verzend betaling"
your_codes: "Je codes:" # {change} your_codes: "Jouw codes:"
redeem_codes: "Prepaidcode inwisselen" redeem_codes: "Prepaidcode inwisselen"
prepaid_code: "Prepaidcode" prepaid_code: "Prepaidcode"
lookup_code: "Prepaidcode opzoeken" lookup_code: "Prepaidcode opzoeken"

View file

@ -182,55 +182,55 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
campaign_old_multiplayer: "(Depreciado) Velhas Arenas Multijogador" campaign_old_multiplayer: "(Depreciado) Velhas Arenas Multijogador"
campaign_old_multiplayer_description: "Reliquias de uma era mais civilizada.Nenhuma simulação roda nessa antiguidade ,arenas multijogador sem heróis." campaign_old_multiplayer_description: "Reliquias de uma era mais civilizada.Nenhuma simulação roda nessa antiguidade ,arenas multijogador sem heróis."
# code: code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.) if: "se" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else" else: "senão"
# elif: "else if" elif: "senão se"
# while: "while" while: "enquanto"
# loop: "loop" loop: "repetir"
# for: "for" for: "para"
# break: "break" break: "parar"
# continue: "continue" continue: "continuar"
# pass: "pass" pass: "passar"
# return: "return" return: "devolver"
# then: "then" then: "então"
# do: "do" do: "fazer"
# end: "end" end: "fim"
# function: "function" function: "função"
# def: "define" def: "definir"
# var: "variable" var: "variável"
# self: "self" self: "próprio"
# hero: "hero" hero: "herói"
# this: "this" this: "isto"
# or: "or" or: "ou"
# "||": "or" "||": "ou"
# and: "and" and: "e"
# "&&": "and" "&&": "e"
# not: "not" not: "não"
# "!": "not" "!": "não"
# "=": "assign" "=": "atribuir"
# "==": "equals" "==": "é igual a"
# "===": "strictly equals" "===": "é estritamente igual a"
# "!=": "does not equal" "!=": "não é igual a"
# "!==": "does not strictly equal" "!==": "não é estritamente igual a"
# ">": "is greater than" ">": "é maior do que"
# ">=": "is greater than or equal" ">=": "é maior do que ou igual a"
# "<": "is less than" "<": "é menor do que"
# "<=": "is less than or equal" "<=": "é menor do que ou igual a"
# "*": "multiplied by" "*": "multiplicado por"
# "/": "divided by" "/": "dividido por"
# "+": "plus" "+": "mais"
# "-": "minus" "-": "menos"
# "+=": "add and assign" "+=": "adicionar e atribuir"
# "-=": "subtract and assign" "-=": "subtrair e atribuir"
# True: "True" True: "Verdadeiro"
# true: "true" true: "verdadeiro"
# False: "False" False: "Falso"
# false: "false" false: "falso"
# undefined: "undefined" undefined: "não definido"
# null: "null" null: "nulo"
# nil: "nil" nil: "nada"
# None: "None" None: "Nenhum"
share_progress_modal: share_progress_modal:
blurb: "Você está fazendo bastante progresso! Compartilhe com alguém o quanto você já aprendeu com o CodeCombat!" # {change} blurb: "Você está fazendo bastante progresso! Compartilhe com alguém o quanto você já aprendeu com o CodeCombat!" # {change}

View file

@ -187,7 +187,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
else: "senão" else: "senão"
elif: "senão se" elif: "senão se"
while: "enquanto" while: "enquanto"
loop: "circular" loop: "repetir"
for: "para" for: "para"
break: "parar" break: "parar"
continue: "continuar" continue: "continuar"

View file

@ -37,9 +37,9 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
teaching_computer_science: "Подучавање компјутерских наука не захтева скупу димплому, јер ми пружамо алатке да подржимо едукаторе из свих позадина." teaching_computer_science: "Подучавање компјутерских наука не захтева скупу димплому, јер ми пружамо алатке да подржимо едукаторе из свих позадина."
accessible_to: "Доступно" accessible_to: "Доступно"
everyone: "свима" everyone: "свима"
democratizing: "Демократизација процеса учења кодирања је у средишту наше филозофије. Свако би требало да има прилику да научи кодирање" democratizing: "Демократизација процеса учења кодирања је у средишту наше филозофије. Свако би требало да има прилику да научи кодирање."
forgot_learning: "Мислим да су већ заборавили да су заправо учили нешто." forgot_learning: "Мислим да су већ заборавили да су заправо учили нешто."
wanted_to_do: " Кодирање је нешто што сам одувек желео да радим, и никад нисам мислио да ћу моћи да га научим у школи." wanted_to_do: " Кодирање је нешто што сам одувек желео да радим и никад нисам мислио да ћу моћи то да научим у школи."
why_games: "Зашто је учење кроз игре важно?" why_games: "Зашто је учење кроз игре важно?"
games_reward: "Игре награђују продуктивну борбу." games_reward: "Игре награђују продуктивну борбу."
encourage: "Гејминг је медиј који подстиче интеракцију, откривање и учење путем покушаја и грешке. Добра игра изазива играча да савлада вештине током времена, што је исти есенцијални процес кроз који ученици пролазе док уче." encourage: "Гејминг је медиј који подстиче интеракцију, откривање и учење путем покушаја и грешке. Добра игра изазива играча да савлада вештине током времена, што је исти есенцијални процес кроз који ученици пролазе док уче."
@ -297,7 +297,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
save: "Сачувај" save: "Сачувај"
publish: "Објави" publish: "Објави"
create: "Направи" create: "Направи"
# fork: "Fork" fork: "Форкуј"
play: "Играј" # When used as an action verb, like "Play next level" play: "Играј" # When used as an action verb, like "Play next level"
retry: "Покушај поново" retry: "Покушај поново"
actions: "Радње" actions: "Радње"
@ -675,32 +675,32 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
level_to_unlock: "Ниво који треба откључати:" # Label for which level you have to beat to unlock a particular hero (click a locked hero in the store to see) level_to_unlock: "Ниво који треба откључати:" # Label for which level you have to beat to unlock a particular hero (click a locked hero in the store to see)
restricted_to_certain_heroes: "Само одређени хероји могу да играју овај ниво." restricted_to_certain_heroes: "Само одређени хероји могу да играју овај ниво."
# skill_docs: skill_docs:
# function: "function" # skill types function: "функција" # skill types
# method: "method" method: "метод"
# snippet: "snippet" snippet: "исечак"
# number: "number" number: "број"
# array: "array" array: "низ"
# object: "object" object: "објекат"
# string: "string" string: "стринг"
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this # writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this
# read_only: "read-only" # read_only: "read-only"
# action: "Action" action: "Aкција"
# spell: "Spell" spell: "Магија"
# action_name: "name" action_name: "име"
# action_cooldown: "Takes" action_cooldown: "Потребно"
# action_specific_cooldown: "Cooldown" action_specific_cooldown: "Хлађење"
# action_damage: "Damage" action_damage: "Штета"
# action_range: "Range" action_range: "Домет"
# action_radius: "Radius" action_radius: "Опсег"
# action_duration: "Duration" action_duration: "Трајање"
# example: "Example" example: "Пример"
# ex: "ex" # Abbreviation of "example" ex: "нпр" # Abbreviation of "example"
# current_value: "Current Value" current_value: "Тренутна вредност"
# default_value: "Default value" default_value: "Подразумевана вредност"
# parameters: "Parameters" parameters: "Параметри"
# returns: "Returns" returns: "Враћа"
# granted_by: "Granted by" granted_by: "Додељено од"
save_load: save_load:
granularity_saved_games: "Сачувано" granularity_saved_games: "Сачувано"
@ -768,7 +768,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
number_contributors: "Преко 450 сарадника је дало своју подршку и време овом пројекту." number_contributors: "Преко 450 сарадника је дало своју подршку и време овом пројекту."
story_title: "Наша прича до сад" story_title: "Наша прича до сад"
story_subtitle: "Од 2013, CodeCombat је израстао из обичних скупова скица у праву успешну игру." story_subtitle: "Од 2013, CodeCombat је израстао из обичних скупова скица у праву успешну игру."
story_statistic_1a: "Више од 5 000 000" story_statistic_1a: "Више од 5.000.000"
story_statistic_1b: "играча укупно" story_statistic_1b: "играча укупно"
story_statistic_1c: "је започело њихово програмерско путовање кроз CodeCombat" story_statistic_1c: "је започело њихово програмерско путовање кроз CodeCombat"
story_statistic_2a: "Преведени смо на преко 50 језика — наши играчи долазе из" story_statistic_2a: "Преведени смо на преко 50 језика — наши играчи долазе из"
@ -784,7 +784,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
jobs_benefits: "Бенефиције за запослене" jobs_benefits: "Бенефиције за запослене"
jobs_benefit_4: "Неограничен одмор" jobs_benefit_4: "Неограничен одмор"
jobs_benefit_5: "Професионални развој и континуирана подршка образовања - бесплатне књиге и игре!" jobs_benefit_5: "Професионални развој и континуирана подршка образовања - бесплатне књиге и игре!"
# jobs_benefit_6: "Медицинско (gold), зубно, очно" jobs_benefit_6: "Медицинско (gold), дентално, очно осигурање"
jobs_benefit_7: "Sit-stand радни столови за свакога" jobs_benefit_7: "Sit-stand радни столови за свакога"
# jobs_benefit_9: "10-year option exercise window" # jobs_benefit_9: "10-year option exercise window"
jobs_benefit_10: "Породиљско одсуство: 10 плаћених недеља, наредних 6 недеља 55% плате" jobs_benefit_10: "Породиљско одсуство: 10 плаћених недеља, наредних 6 недеља 55% плате"
@ -860,12 +860,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
finish_signup_p: "Направи налог да оснујеш разред, додаш своје ученике и пратиш њихов напредак док уче компјутерске науке." finish_signup_p: "Направи налог да оснујеш разред, додаш своје ученике и пратиш њихов напредак док уче компјутерске науке."
signup_with: "Пријави се са:" signup_with: "Пријави се са:"
connect_with: "Повежи се са:" connect_with: "Повежи се са:"
# conversion_warning: "WARNING: Your current account is a <em>Student Account</em>. Once you submit this form, your account will be updated to a Teacher Account." conversion_warning: "УПОЗОРЕЊЕ: Твој тренутни налог је <em>Студентски Налог</em>. Након што пошаљеш овај формулар, твој налог ће бити надограђен у Учитељски Налог."
# learn_more_modal: "Teacher accounts on CodeCombat have the ability to monitor student progress, assign enrollments and manage classrooms. Teacher accounts cannot be a part of a classroom - if you are currently enrolled in a class using this account, you will no longer be able to access it once you update to a Teacher Account." learn_more_modal: "Учитељски налози на CodeCombat-у имају могућност посматрања напретка ученика, додељивања уписа и управљања учионицама. Учитељски налози не могу бити део учионице - ако си тренутно уписан у разред преко овог налога, нећеш више моћи да му приступиш кад ажурираш у Учитељски Налог."
create_account: "Направи учитељски налог" create_account: "Направи учитељски налог"
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!" create_account_subtitle: "Добиј приступ алатима само за учитеље за коришћење CodeCombat-а у учионици. <strong>Подеси разред</strong>, додај своје ученике, и <strong>посматрај њихов напредак</strong>!"
# convert_account_title: "Update to Teacher Account" convert_account_title: "Ажурирај у Учитељски Налог"
# not: "Not" not: "Није"
setup_a_class: "Подеси разред" setup_a_class: "Подеси разред"
versions: versions:
@ -880,18 +880,18 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
contact: contact:
contact_us: "Контактирај CodeCombat" contact_us: "Контактирај CodeCombat"
welcome: "Драго нам је што нас контактираш! Искористи ову форму да нам пошаљеш мејл. " welcome: "Драго нам је што нас контактираш! Искористи овај формулар да нам пошаљеш мејл. "
forum_prefix: "За било шта јавно, посети " forum_prefix: "За било шта јавно, посети "
forum_page: "наш форум." forum_page: "наш форум"
# forum_suffix: " instead." forum_suffix: " уместо тога."
# faq_prefix: "There's also a" faq_prefix: "Такође, ту је"
# faq: "FAQ" faq: "FAQ"
# subscribe_prefix: "If you need help figuring out a level, please" subscribe_prefix: "Ако ти треба помоћ да разумеш ниво, молимо да"
# subscribe: "buy a CodeCombat subscription" subscribe: "купиш CodeCombat претплату"
# subscribe_suffix: "and we'll be happy to help you with your code." subscribe_suffix: "и радо ћемо ти помоћи у твом коду."
# subscriber_support: "Since you're a CodeCombat subscriber, your email will get our priority support." subscriber_support: "Пошто си CodeCombat претплатник, твој мејл ће имати приоритет у нашој подршци."
# screenshot_included: "Screenshot included." screenshot_included: "Снимак екрана укључен."
# where_reply: "Where should we reply?" where_reply: "Где треба да одговоримо?"
send: "Пошаљи повратну информацију" send: "Пошаљи повратну информацију"
account_settings: account_settings:
@ -910,24 +910,24 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# god_mode: "God Mode" # god_mode: "God Mode"
password_tab: "Шифра" password_tab: "Шифра"
emails_tab: "Мејлови" emails_tab: "Мејлови"
# admin: "Admin" admin: "Администратор"
manage_subscription: "Кликни овде да би управљао својом претплатом." manage_subscription: "Кликни овде да би управљао својом претплатом."
new_password: "Нова Шифра" new_password: "Нова Шифра"
new_password_verify: "Потврди" new_password_verify: "Потврди"
# type_in_email: "Type in your email to confirm account deletion." type_in_email: "Упиши свој мејл да потврдиш брисање налога."
# type_in_email_progress: "Type in your email to confirm deleting your progress." type_in_email_progress: "Упиши свој мејл да потврдиш брисање свог напретка."
# type_in_password: "Also, type in your password." type_in_password: "Такође, упиши своју шифру."
email_subscriptions: "Мејл претплате" email_subscriptions: "Мејл претплате"
# email_subscriptions_none: "No Email Subscriptions." email_subscriptions_none: "Без мејл претплата."
email_announcements: "Обавештења" email_announcements: "Обавештења"
email_announcements_description: "Прими мејл за најновије вести и достигнућа на CodeCombat-у" email_announcements_description: "Прими мејл за најновије вести и достигнућа на CodeCombat-у"
# email_notifications: "Notifications" email_notifications: "Обавештења"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity." email_notifications_summary: "Контроле за персонализована, аутоматска мејл обавештења вазана за твоју CodeCombat активност."
# email_any_notes: "Any Notifications" email_any_notes: "Сва обавештења"
# email_any_notes_description: "Disable to stop all activity notification emails." email_any_notes_description: "Онемогући да би прекинуо сва мејл обавештења о активности."
email_news: "Вести" email_news: "Вести"
email_recruit_notes: "Пословне могућности" email_recruit_notes: "Пословне могућности"
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job." email_recruit_notes_description: "Ако играш јако добро, можда ћемо те контактирати о томе да добијеш (бољи) посао."
contributor_emails: "Мејлови реда сарадника" contributor_emails: "Мејлови реда сарадника"
contribute_prefix: "Тражимо људе који би нам се придружили! Погледај " contribute_prefix: "Тражимо људе који би нам се придружили! Погледај "
contribute_page: "страницу за сарадњу" contribute_page: "страницу за сарадњу"
@ -938,15 +938,15 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
password_mismatch: "Шифре се не слажу." password_mismatch: "Шифре се не слажу."
password_repeat: "Понови своју шифру." password_repeat: "Понови своју шифру."
# keyboard_shortcuts: keyboard_shortcuts:
# keyboard_shortcuts: "Keyboard Shortcuts" keyboard_shortcuts: "Пречице за тастатуру"
# space: "Space" space: "Space"
# enter: "Enter" enter: "Enter"
# press_enter: "press enter" press_enter: "притисни enter"
# escape: "Escape" escape: "Escape"
# shift: "Shift" shift: "Shift"
# run_code: "Run current code." run_code: "Покрени тренутни код."
# run_real_time: "Run in real time." run_real_time: "Покрени у реалном времену."
# continue_script: "Continue past current script." # continue_script: "Continue past current script."
# skip_scripts: "Skip past all skippable scripts." # skip_scripts: "Skip past all skippable scripts."
# toggle_playback: "Toggle play/pause." # toggle_playback: "Toggle play/pause."
@ -959,142 +959,142 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# beautify: "Beautify your code by standardizing its formatting." # beautify: "Beautify your code by standardizing its formatting."
# maximize_editor: "Maximize/minimize code editor." # maximize_editor: "Maximize/minimize code editor."
# community: community:
# main_title: "CodeCombat Community" main_title: "CodeCombat Заједница"
# introduction: "Check out the ways you can get involved below and decide what sounds the most fun. We look forward to working with you!" introduction: "Погледај испод како можеш да се укључиш и одлучи шта звучи најзанимљивије. Радујемо се прилици да радимо са тобом!"
# level_editor_prefix: "Use the CodeCombat" level_editor_prefix: "Користи CodeCombat"
# level_editor_suffix: "to create and edit levels. Users have created levels for their classes, friends, hackathons, students, and siblings. If create a new level sounds intimidating you can start by forking one of ours!" level_editor_suffix: "да правиш и уређујеш нивое. Корисници су направили нивое за њихове разреде, пријатеље, хакатоне, ученике и браћу и сестре. Ако прављење новог нивоа звучи застрашујуће, можеш да почнеш форковањем једног од наших!"
# thang_editor_prefix: "We call units within the game 'thangs'. Use the" thang_editor_prefix: "Ми зовемо јединице у игри 'thangs'. Користи"
# thang_editor_suffix: "to modify the CodeCombat source artwork. Allow units to throw projectiles, alter the direction of an animation, change a unit's hit points, or upload your own vector sprites." thang_editor_suffix: "да модификујеш CodeCombat изворне илустрације. Дозволи јединицама да бацају пројектиле, измени дирекцију анимације, промени хит поене јединице или отпреми сопствене векторске спрајтове."
# article_editor_prefix: "See a mistake in some of our docs? Want to make some instructions for your own creations? Check out the" article_editor_prefix: "Видиш грешку у неком од наших докумената? Желиш да направиш инструкције за сопствене креације? Погледај"
# article_editor_suffix: "and help CodeCombat players get the most out of their playtime." article_editor_suffix: "и помози CodeCombat играчима да добију највише од свог играња."
# find_us: "Find us on these sites" find_us: "Нађи нас на овим сајтовима"
# social_github: "Check out all our code on GitHub" social_github: "Погледај цео наш код на GitHub-у"
# social_blog: "Read the CodeCombat blog on Sett" social_blog: "Читај CodeCombat блог на Sett-у"
# social_discource: "Join the discussion on our Discourse forum" social_discource: "Придружи се дискусији на нашем Discourse форуму"
# social_facebook: "Like CodeCombat on Facebook" social_facebook: "Лајкуј CodeCombat на Фејсбуку"
# social_twitter: "Follow CodeCombat on Twitter" social_twitter: "Запрати CodeCombat на Твитеру"
# social_gplus: "Join CodeCombat on Google+" social_gplus: "Придружи се CodeCombat-у на Гугл+"
# social_slack: "Chat with us in the public CodeCombat Slack channel" social_slack: "Ћаскај са нама на јавном CodeCombat Slack каналу"
# contribute_to_the_project: "Contribute to the project" contribute_to_the_project: "Допринеси пројекту"
# clans: clans:
# clan: "Clan" clan: "Клан"
# clans: "Clans" clans: "Кланови"
# new_name: "New clan name" new_name: "Име новог клана"
# new_description: "New clan description" new_description: "Опис новог клана"
# make_private: "Make clan private" make_private: "Направи клан приватним"
# subs_only: "subscribers only" subs_only: "само за претплатнике"
# create_clan: "Create New Clan" create_clan: "Направи нови клан"
# private_preview: "Preview" private_preview: "Приказ"
# private_clans: "Private Clans" private_clans: "Приватни кланови"
# public_clans: "Public Clans" public_clans: "Јавни кланови"
# my_clans: "My Clans" my_clans: "Моји кланови"
# clan_name: "Clan Name" clan_name: "Име клана"
# name: "Name" name: "Име"
# chieftain: "Chieftain" chieftain: "Поглавица"
# type: "Type" type: "Врста"
# edit_clan_name: "Edit Clan Name" edit_clan_name: "Измени име клана"
# edit_clan_description: "Edit Clan Description" edit_clan_description: "Измени опис клана"
# edit_name: "edit name" edit_name: "измени име"
# edit_description: "edit description" edit_description: "измени опис"
# private: "(private)" private: "(приватан)"
# summary: "Summary" summary: "Преглед"
# average_level: "Average Level" average_level: "Просечни ниво"
# average_achievements: "Average Achievements" average_achievements: "Просечна достигнућа"
# delete_clan: "Delete Clan" delete_clan: "Избриши клан"
# leave_clan: "Leave Clan" leave_clan: "Напусти клан"
# join_clan: "Join Clan" join_clan: "Придружи се клану"
# invite_1: "Invite:" invite_1: "Позови:"
# invite_2: "*Invite players to this Clan by sending them this link." invite_2: "*Позови играче у овај Клан тако што ћеш им послати овај линк."
# members: "Members" members: "Чланови"
# progress: "Progress" progress: "Напредак"
# not_started_1: "not started" not_started_1: "није започето"
# started_1: "started" started_1: "започето"
# complete_1: "complete" complete_1: "заврши"
# exp_levels: "Expand levels" exp_levels: "Прошири нивое"
# rem_hero: "Remove Hero" rem_hero: "Уклони Хероја"
# status: "Status" status: "Статус"
# complete_2: "Complete" complete_2: "Заврши"
# started_2: "Started" started_2: "Започето"
# not_started_2: "Not Started" not_started_2: "Није започето"
# view_solution: "Click to view solution." view_solution: "Кликни да видиш решење."
# view_attempt: "Click to view attempt." view_attempt: "Кликни да видиш покушај."
# latest_achievement: "Latest Achievement" latest_achievement: "Последње достигнуће"
# playtime: "Playtime" playtime: "Време игања"
# last_played: "Last played" last_played: "Последњи пут играно"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances." leagues_explanation: "Играј у лиги против других чланова клана у овим мултиплејер инстанцама арене."
# track_concepts1: "Track concepts" track_concepts1: "Прати концепте"
# track_concepts2a: "learned by each student" track_concepts2a: "научене од сваког ученика"
# track_concepts2b: "learned by each member" track_concepts2b: "научене од сваког члана"
# track_concepts3a: "Track levels completed for each student" track_concepts3a: "Прати завршене нивое за сваког ученика"
# track_concepts3b: "Track levels completed for each member" track_concepts3b: "Прати завршене нивое за сваког члана"
# track_concepts4a: "See your students'" track_concepts4a: "Види од својих ученика"
# track_concepts4b: "See your members'" track_concepts4b: "Види од својих чланова"
# track_concepts5: "solutions" track_concepts5: "решења"
# track_concepts6a: "Sort students by name or progress" track_concepts6a: "Сортирај ученике према имену или напретку"
# track_concepts6b: "Sort members by name or progress" track_concepts6b: "Сортирај чланове према имену или напретку"
# track_concepts7: "Requires invitation" track_concepts7: "Захтева позив"
# track_concepts8: "to join" track_concepts8: "за придруживање"
# private_require_sub: "Private clans require a subscription to create or join." private_require_sub: "Приватни кланови захтевају претплату да би могао да их направиш или да им се придружиш."
# courses: courses:
# course: "Course" course: "Курс"
# courses: "courses" courses: "курсеви"
# create_new_class: "Create New Class" create_new_class: "Направи нови разред"
# not_enrolled: "You are not enrolled in this course." not_enrolled: "Ниси уписан на овај курс."
# visit_pref: "Please visit the" visit_pref: "Молимо да посетиш"
# visit_suf: "page to enroll." visit_suf: "страницу да би се уписао."
# select_class: "Select one of your classes" select_class: "Изабери један од својих разреда"
# unnamed: "*unnamed*" unnamed: "*неименован*"
# select: "Select" select: "Изабери"
# unnamed_class: "Unnamed Class" unnamed_class: "Неименован разред"
# edit_settings: "edit class settings" edit_settings: "измени подешавања разреда"
# edit_settings1: "Edit Class Settings" edit_settings1: "Измени подешавања разреда"
# progress: "Class Progress" progress: "Напредак разреда"
# add_students: "Add Students" add_students: "Додај ученике"
# stats: "Statistics" stats: "Статистика"
# total_students: "Total students:" total_students: "Укупно ученика:"
# average_time: "Average level play time:" average_time: "Просечно време играња нивоа:"
# total_time: "Total play time:" total_time: "Укупно време играња:"
# average_levels: "Average levels completed:" average_levels: "Просечан број завршених нивоа:"
# total_levels: "Total levels completed:" total_levels: "Укупно завршених нивоа:"
# furthest_level: "Furthest level completed:" furthest_level: "Најдаљи завршен ниво:"
# students: "Students" students: "Ученици"
# students1: "students" students1: "ученици"
# concepts: "Concepts" concepts: "Концепти"
# levels: "levels" levels: "нивои"
# played: "Played" played: "Одиграно"
# play_time: "Play time:" play_time: "Време играња:"
# completed: "Completed:" completed: "Завршено:"
# invite_students: "Invite students to join this class." invite_students: "Позови ученике да се придруже овом разреду."
# invite_link_header: "Link to join course" invite_link_header: "Линк за придруживање курсу"
# invite_link_p_1: "Give this link to students you would like to have join the course." invite_link_p_1: "Дај овај линк ученицима за које желиш да се придруже курсу."
# invite_link_p_2: "Or have us email them directly:" invite_link_p_2: "Или дај нама да им директно пошаљемо мејл:"
# capacity_used: "Course slots used:" # capacity_used: "Course slots used:"
# enter_emails: "Enter student emails to invite, one per line" enter_emails: "Упиши мејлове ученика, један по линији"
# send_invites: "Send Invites" send_invites: "Пошаљи позиве"
# creating_class: "Creating class..." creating_class: "Креирање разреда..."
# purchasing_course: "Purchasing course..." purchasing_course: "Куповина курса..."
# buy_course: "Buy Course" buy_course: "Купи курс"
# buy_course1: "Buy this course" buy_course1: "Купи овај курс"
# select_all_courses: "Select 'All Courses' for a 50% discount!" select_all_courses: "Изабери 'Сви курсеви' за 50% попуста!"
# all_courses: "All Courses" all_courses: "Сви курсеви"
# number_programming_students: "Number of Programming Students" number_programming_students: "Број ученика који програмирају"
# number_total_students: "Total Students in School/District" number_total_students: "Укупан број ученика у школи/округу"
# enter_number_students: "Enter the number of students you need for this class." enter_number_students: "Унеси број ученика који ти треба за овај разред."
# name_class: "Name your class" name_class: "Именуј свој разред"
# displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later." # displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later."
# buy: "Buy" buy: "Купи"
# purchasing_for: "You are purchasing a license for" purchasing_for: "Купујеш лиценцу за"
# creating_for: "You are creating a class for" creating_for: "Правиш разред за"
# for: "for" # Like in 'for 30 students' for: "за" # Like in 'for 30 students'
# receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class." # receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class."
# free_trial: "Free trial for teachers!" free_trial: "Бесплатна пробна верзија за учитеље!"
# get_access: "to get individual access to all courses for evalutaion purposes." # get_access: "to get individual access to all courses for evalutaion purposes."
# questions: "Questions?" questions: "Питања?"
# teachers_click: "Teachers Click Here" teachers_click: "Учитељи кликните овде"
# students_click: "Students Click Here" students_click: "Ученици кликните овде"
# courses_on_coco: "Courses on CodeCombat" # courses_on_coco: "Courses on CodeCombat"
# designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours." # designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours."
# more_in_less: "Learn more in less time" # more_in_less: "Learn more in less time"
@ -1488,12 +1488,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# add_system_title: "Add Systems to Level" # add_system_title: "Add Systems to Level"
# done_adding: "Done Adding" # done_adding: "Done Adding"
# article: article:
# edit_btn_preview: "Preview" edit_btn_preview: "Приказ"
# edit_article_title: "Edit Article" edit_article_title: "Измени Чланак"
# polls: polls:
# priority: "Priority" priority: "Приоритет"
# contribute: # contribute:
# page_title: "Contributing" # page_title: "Contributing"
@ -1629,33 +1629,33 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# humans: "Red" # Ladder page display team name # humans: "Red" # Ladder page display team name
# ogres: "Blue" # ogres: "Blue"
# user: user:
# stats: "Stats" stats: "Статистика"
# singleplayer_title: "Singleplayer Levels" singleplayer_title: "Нивои за једног играча"
# multiplayer_title: "Multiplayer Levels" multiplayer_title: "Нивои за више играча"
# achievements_title: "Achievements" achievements_title: "Достигнућа"
# last_played: "Last Played" last_played: "Последњи игран"
# status: "Status" status: "Статус"
# status_completed: "Completed" status_completed: "Завршен"
# status_unfinished: "Unfinished" status_unfinished: "Незавршен"
# no_singleplayer: "No Singleplayer games played yet." # no_singleplayer: "No Singleplayer games played yet."
# no_multiplayer: "No Multiplayer games played yet." # no_multiplayer: "No Multiplayer games played yet."
# no_achievements: "No Achievements earned yet." no_achievements: "Још увек нема стечених достигнућа."
# favorite_prefix: "Favorite language is " favorite_prefix: "Омиљени језик је "
# favorite_postfix: "." favorite_postfix: "."
# not_member_of_clans: "Not a member of any clans yet." not_member_of_clans: "Ниси члан ниједног клана још увек."
# achievements: achievements:
# last_earned: "Last Earned" last_earned: "Последње стечено"
# amount_achieved: "Amount" amount_achieved: "Количина"
# achievement: "Achievement" achievement: "Достигнуће"
# current_xp_prefix: "" current_xp_prefix: ""
# current_xp_postfix: " in total" current_xp_postfix: " укупно"
# new_xp_prefix: "" new_xp_prefix: ""
# new_xp_postfix: " earned" new_xp_postfix: " стечено"
# left_xp_prefix: "" left_xp_prefix: ""
# left_xp_infix: " until level " left_xp_infix: " до нивоа "
# left_xp_postfix: "" left_xp_postfix: ""
account: account:
payments: "Уплате" payments: "Уплате"
@ -1711,10 +1711,10 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# you_can2: "purchase a prepaid code" # you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others." # you_can3: "that can be applied to your own account or given to others."
# coppa_deny: coppa_deny:
# text1: "Cant wait to learn programming?" text1: "Не можеш да дочекаш да научиш програмирање?"
# text2: "Ask your parents to create an account for you!" text2: "Питај своје родитеље да направе налог за тебе!"
# close: "Close Window" close: "Затвори прозор"
# loading_error: # loading_error:
# could_not_load: "Error loading from server" # could_not_load: "Error loading from server"
@ -1747,50 +1747,50 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
hero: "Херој" hero: "Херој"
campaigns: "Кампање" campaigns: "Кампање"
# concepts: concepts:
# advanced_strings: "Advanced Strings" advanced_strings: "Напредни стрингови"
# algorithms: "Algorithms" algorithms: "Алгоритми"
# arguments: "Arguments" arguments: "Аргументи"
# arithmetic: "Arithmetic" arithmetic: "Аритметика"
# arrays: "Arrays" arrays: "Низови"
# basic_syntax: "Basic Syntax" basic_syntax: "Основна синтакса"
# boolean_logic: "Boolean Logic" boolean_logic: "Булова логика"
# break_statements: "Break Statements" break_statements: "Break искази"
# classes: "Classes" classes: "Класе"
# continue_statements: "Continue Statements" continue_statements: "Continue искази"
# for_loops: "For Loops" for_loops: "For петље"
# functions: "Functions" functions: "Функције"
# graphics: "Graphics" graphics: "Графика"
# if_statements: "If Statements" if_statements: "If искази"
# input_handling: "Input Handling" input_handling: "Руковање инпутом"
# math_operations: "Math Operations" math_operations: "Математичке операције"
# object_literals: "Object Literals" object_literals: "Објекат литерали"
# parameters: "Parameters" parameters: "Параметри"
# strings: "Strings" strings: "Стрингови"
# variables: "Variables" variables: "Променљиве"
# vectors: "Vectors" vectors: "Вектори"
# while_loops: "While Loops" while_loops: "While петље"
# recursion: "Recursion" recursion: "Рекурзије"
# delta: delta:
# added: "Added" added: "Додато"
# modified: "Modified" modified: "Измењено"
# not_modified: "Not Modified" not_modified: "Није измењено"
# deleted: "Deleted" deleted: "Избрисано"
# moved_index: "Moved Index" moved_index: "Померен индекс"
# text_diff: "Text Diff" # text_diff: "Text Diff"
# merge_conflict_with: "MERGE CONFLICT WITH" # merge_conflict_with: "MERGE CONFLICT WITH"
# no_changes: "No Changes" # no_changes: "No Changes"
multiplayer: multiplayer:
multiplayer_title: "Подешавање мода за више играча" # We'll be changing this around significantly soon. Until then, it's not important to translate. multiplayer_title: "Подешавање мода за више играча" # We'll be changing this around significantly soon. Until then, it's not important to translate.
# multiplayer_toggle: "Enable multiplayer" multiplayer_toggle: "Омогући мултиплејер"
# multiplayer_toggle_description: "Allow others to join your game." multiplayer_toggle_description: "Дозволи другима да се придруже твојој игри."
multiplayer_link_description: "Дај овај линк онима које желиш да ти се придруже." multiplayer_link_description: "Дај овај линк онима које желиш да ти се придруже."
multiplayer_hint_label: "Мала помоћ" multiplayer_hint_label: "Мала помоћ"
multiplayer_hint: " Кликни на линк да обележиш све, затим притисни Apple-C или Ctrl-C да копираш линк." multiplayer_hint: " Кликни на линк да обележиш све, затим притисни Apple-C или Ctrl-C да копираш линк."
multiplayer_coming_soon: "Стиже још нових карактеристика!" multiplayer_coming_soon: "Стиже још нових карактеристика!"
# multiplayer_sign_in_leaderboard: "Sign in or create an account and get your solution on the leaderboard." multiplayer_sign_in_leaderboard: "Пријави се или направи налог и стави своје решење на ранг листу."
# legal: # legal:
# page_title: "Legal" # page_title: "Legal"
@ -1873,15 +1873,15 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
year: "Година" year: "Година"
day: "Дан" day: "Дан"
month: "Месец" month: "Месец"
january: "Јануар" january: "јануар"
february: "Фебруар" february: "фебруар"
march: "Март" march: "март"
april: "Април" april: "април"
may: "Мај" may: "мај"
june: "Јун" june: "јун"
july: "Јул" july: "јул"
august: "Август" august: "август"
september: "Септембар" september: "септембар"
october: "Октобар" october: "октобар"
november: "Новембар" november: "новембар"
december: "Децембар" december: "децембар"

View file

@ -38,10 +38,10 @@ module.exports = nativeDescription: "Українська", englishDescription:
accessible_to: "Доступно" # Accessible to accessible_to: "Доступно" # Accessible to
everyone: "кожному" # everyone everyone: "кожному" # everyone
democratizing: "Навчання, доступне кожному, — наша головна мета. Кожен повинен мати можливість навчитись програмувати." # Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code. democratizing: "Навчання, доступне кожному, — наша головна мета. Кожен повинен мати можливість навчитись програмувати." # Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code.
# forgot_learning: "I think they actually forgot that they were actually learning something." forgot_learning: "Таке враження, що, граючи, вони забули, що це навчання."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school." wanted_to_do: " Програмування — те, чим я завжди хотів займатись, ніколи не думав, що буду вчити це в школі."
# why_games: "Why is learning through games important?" why_games: "Чому навчання через гру важливе?"
# games_reward: "Games reward the productive struggle." games_reward: "Гра — винагорода за зусилля."
encourage: "Гра заохочує спілкуватись, відкривати щось нове і вчитись на помилках. Хороша гра змушує гравця весь час покращувати власні навички, що подібно до процесу роботи учнів під час навчання." # Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn. encourage: "Гра заохочує спілкуватись, відкривати щось нове і вчитись на помилках. Хороша гра змушує гравця весь час покращувати власні навички, що подібно до процесу роботи учнів під час навчання." # Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn.
# excel: "Games excel at rewarding" # excel: "Games excel at rewarding"
# struggle: "productive struggle" # struggle: "productive struggle"

View file

@ -15,7 +15,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
or_ipad: "Hoặc tải phiên bản dành cho iPad" or_ipad: "Hoặc tải phiên bản dành cho iPad"
new_home: new_home:
slogan: "Tựa game hấp dẫn nhất để học lập trình." slogan: "Trò chơi hấp dẫn nhất để học lập trình."
classroom_edition: "Phiên bản Lớp học:" classroom_edition: "Phiên bản Lớp học:"
learn_to_code: "Học lập trình:" learn_to_code: "Học lập trình:"
teacher: "Giáo viên" teacher: "Giáo viên"
@ -24,28 +24,28 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
im_a_teacher: "Tôi là Giáo viên" im_a_teacher: "Tôi là Giáo viên"
im_a_student: "Tôi là Học viên" im_a_student: "Tôi là Học viên"
learn_more: "Tìm hiểu thêm" learn_more: "Tìm hiểu thêm"
classroom_in_a_box: "Một lớp học đặc biệt cho bộ môn công nghệ thông tin." classroom_in_a_box: "Một lớp học đặc biệt dành cho bộ môn công nghệ thông tin."
codecombat_is: "CodeCombat là nền tảng <strong>cho học sinh</strong> tiếp cận với bộ môn công nghệ thông tin bằng cách chơi game." codecombat_is: "CodeCombat là nền tảng <strong>giúp cho học sinh</strong> tiếp cận với bộ môn công nghệ thông tin bằng cách chơi game."
our_courses: "Các khóa học của chúng tôi đã được thử nghiệm để <strong>triển khai trong lớp học</strong>, thậm chí được yêu thích bởi các giáo viên có ít hoặc không có kinh nghiệm lập trình." our_courses: "Các khóa học của chúng tôi đã được thử nghiệm để <strong>triển khai trong các lớp học</strong>, thậm chí được sử dụng bởi các giáo viên có ít hoặc không có kinh nghiệm lập trình."
top_screenshots_hint: "Học viên viết code và có thể cập nhật kết quả ngay lập tức" top_screenshots_hint: "Học viên viết code và cập nhật kết quả ngay lập tức"
designed_with: "Được thiết kế để dạy học" designed_with: "Được thiết kế để dạy học"
real_code: "Thực tế, tự viết code" real_code: "Thực tế, tự viết code"
from_the_first_level: "ngay từ trình độ đầu tiên" from_the_first_level: "ngay từ trình độ đầu tiên"
getting_students: "Cho phép học viên viết code ngay từ đầu là vô cùng quan trọng trong việc làm quen cú pháp và học cấu trúc lập trình." getting_students: "Cho phép học viên viết code ngay từ đầu là vô cùng quan trọng trong việc làm quen cú pháp và học cấu trúc lập trình."
educator_resources: "Xây dựng bài giảng" educator_resources: "Xây dựng bài giảng"
course_guides: "và các khóa học" course_guides: "và các khóa học"
teaching_computer_science: "Việc dạy bộ môn công nghệ thông tin không nhất thiết yêu cầu một tấm bằng đắt tiền, bởi vì chúng tôi cung cấp sẵn công cụ dành cho người giảng dạy dù cho bạn là ai." teaching_computer_science: "Việc giảng dạy bộ môn công nghệ thông tin không nhất thiết yêu cầu một tấm bằng đắt tiền, bởi vì chúng tôi cung cấp sẵn công cụ dành cho các giảng viên."
accessible_to: "Tiếp cận dễ dàng" accessible_to: "Tiếp cận dễ dàng"
everyone: "cho mọi người" everyone: "cho mọi người"
democratizing: "Xã hội hóa quá trình học lập trình là tôn chỉ của chúng tôi. Mọi người đều có thể học code." democratizing: "Xã hội hóa quá trình học lập trình là tôn chỉ của chúng tôi. Mọi người đều có thể học code."
forgot_learning: "Tôi nghĩ học viên không để ý rằng họ thực sự đang học." forgot_learning: "Tôi nghĩ học viên không để ý rằng họ thực sự đang học."
wanted_to_do: "Lập trình là điều mà em luôn muốn làm, em không thể nghĩ rằng em có thể học nó ngay trường." wanted_to_do: "Lập trình là điều mà em luôn muốn làm, em không thể nghĩ rằng em có thể học nó ngay tại trường."
why_games: "Tại sao học thông qua chơi game lại quan trọng?" why_games: "Tại sao học thông qua chơi game lại quan trọng?"
games_reward: "Game cổ vũ một cách tích cực." games_reward: "Game cổ vũ một cách tích cực."
encourage: "Game là môi trường khuyến khích sự tương tác, khám phá, và tinh thần không sợ thất bại. Một tựa game hay sẽ thử thách người chơi giúp họ dần dần hoàn thiện kĩ năng, điều này cũng giống như quá trình học tập của một học viên trong lớp học vậy." encourage: "Game là môi trường khuyến khích sự tương tác, khám phá, và tinh thần không sợ thất bại. Một tựa game hay sẽ thử thách người chơi giúp họ dần dần hoàn thiện kĩ năng, điều này cũng giống như quá trình học tập của một học sinh trong lớp học vậy."
excel: "Game cổ vũ" excel: "Game cổ vũ"
struggle: "những cố gắng tích cục" struggle: "những cố gắng tích cục"
kind_of_struggle: "những sự cố gắng trong học tập mà thực sự dem lại sự cuốn hút" kind_of_struggle: "những sự cố gắng trong học tập mà thực sự dem lại sự cuốn hút, "
motivating: "tạo động lực" motivating: "tạo động lực"
not_tedious: "mà không hề buồn chán." not_tedious: "mà không hề buồn chán."
gaming_is_good: "Nghiên cứu chứng minh chơi game tốt cho não bộ của trẻ. (đúng vậy đấy!)" gaming_is_good: "Nghiên cứu chứng minh chơi game tốt cho não bộ của trẻ. (đúng vậy đấy!)"
@ -56,7 +56,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
feedback: "Việc chơi game cũng giúp học sinh tương tác để có thể phát triển tư duy một cách toàn diện hơn, thay vì chỉ biết đến đáp án “đúng” hoặc “sai”." feedback: "Việc chơi game cũng giúp học sinh tương tác để có thể phát triển tư duy một cách toàn diện hơn, thay vì chỉ biết đến đáp án “đúng” hoặc “sai”."
real_game: "Game thật, code thật." real_game: "Game thật, code thật."
great_game: "Một tựa game hay không chỉ cần những huy chương hay thành tích hào nhoáng - quan trọng hơn hết là trải nghiệm của người chơi, những thử thách tinh tế, đồng thời là khả năng đối đầu và vượt qua thử thách." great_game: "Một tựa game hay không chỉ cần những huy chương hay thành tích hào nhoáng - quan trọng hơn hết là trải nghiệm của người chơi, những thử thách tinh tế, đồng thời là khả năng đối đầu và vượt qua thử thách."
agency: "CodeCombat là game đưa ra cho người chơi những thử thách buộc họ phải vượt qua bằng cách viết code, điều này giúp cho cả những người mới bắt đầu và những học viên trình độ nâng cao luyện tập khả năng lập trình thành thạo." agency: "CodeCombat là trò chơi đưa ra cho người chơi những thử thách buộc họ phải vượt qua bằng cách viết code, điều này giúp cho cả những người mới bắt đầu và những học viên trình độ nâng cao luyện tập khả năng lập trình thành thạo."
request_demo_title: "Bắt đầu giảng dạy ngay hôm nay!" request_demo_title: "Bắt đầu giảng dạy ngay hôm nay!"
request_demo_subtitle: "Yêu cầu demo và chuẩn bị sẵn sàng cho học viên của bạn chỉ trong vòng một tiếng đồng hồ." request_demo_subtitle: "Yêu cầu demo và chuẩn bị sẵn sàng cho học viên của bạn chỉ trong vòng một tiếng đồng hồ."
get_started_title: "Xây dựng lớp học của bạn ngay hôm nay" get_started_title: "Xây dựng lớp học của bạn ngay hôm nay"
@ -73,7 +73,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
lesson_time: "Thời gian học:" lesson_time: "Thời gian học:"
coming_soon: "Sắp ra mắt!" coming_soon: "Sắp ra mắt!"
courses_available_in: "Các khóa học giảng dạy JavaScript, Python, và Java (sắp ra mắt!)" courses_available_in: "Các khóa học giảng dạy JavaScript, Python, và Java (sắp ra mắt!)"
boast: "Đưa ra những câu đố đủ khó để hấp dẫn cả game thủ và coder." boast: "Đưa ra những câu đố đủ khó để hấp dẫn cả các game thủ và coder."
winning: "Một sự kết hợp hoàn hảo giữa game RPG và bài tập lập trình, giúp việc giáo dục trẻ thú vị hơn bao giờ hết." winning: "Một sự kết hợp hoàn hảo giữa game RPG và bài tập lập trình, giúp việc giáo dục trẻ thú vị hơn bao giờ hết."
run_class: "Mọi thứ bạn cần để tổ chức một lớp học công nghệ thông tin ngay hôm nay, không yêu cầu kinh nghiệm lập trình." run_class: "Mọi thứ bạn cần để tổ chức một lớp học công nghệ thông tin ngay hôm nay, không yêu cầu kinh nghiệm lập trình."
teachers: "Giáo viên!" teachers: "Giáo viên!"
@ -84,7 +84,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
join_class: "Tham gia Lớp học" join_class: "Tham gia Lớp học"
role: "Vai trò của bạn:" role: "Vai trò của bạn:"
student_count: "Số học viên:" student_count: "Số học viên:"
start_playing_for_free: "Bắt đầu Chơi Miễn phí!" start_playing_for_free: "Bắt Đầu Chơi Miễn Phí!"
students_and_players: "Học viên và Người chơi" students_and_players: "Học viên và Người chơi"
goto_classes: "Tới Lớp học của tôi" # {change} goto_classes: "Tới Lớp học của tôi" # {change}
view_profile: "Xem hồ sơ của tôi" view_profile: "Xem hồ sơ của tôi"
@ -259,7 +259,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
sign_up: "Đăng Ký" sign_up: "Đăng Ký"
log_in: "đăng nhập với mật khẩu" log_in: "đăng nhập với mật khẩu"
required: "Bạn cần phải đăng nhập trước khi muốn tiếp tục." required: "Bạn cần phải đăng nhập trước khi muốn tiếp tục."
login_switch: "Bạn đã có tài khoản rồi?" login_switch: "Bạn đã có tài khoản?"
school_name: "Tên Trường và Thành phố" school_name: "Tên Trường và Thành phố"
optional: "không bắt buộc" optional: "không bắt buộc"
school_name_placeholder: "Ví dụ tên Trường, Thành phố, (Tiểu bang nếu đang ở Mỹ)" school_name_placeholder: "Ví dụ tên Trường, Thành phố, (Tiểu bang nếu đang ở Mỹ)"
@ -735,7 +735,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
mission_description_1: "<strong>Lập trình thật kì diệu</strong>. Bạn có thể tạo ra một thứ gì đó chỉ từ trí tưởng tượng. Chúng tôi bắt đầu CodeCombat để đem tới cho học viên những trải nghiệm nhiệm màu khi <strong>viết code</strong> thực tế." mission_description_1: "<strong>Lập trình thật kì diệu</strong>. Bạn có thể tạo ra một thứ gì đó chỉ từ trí tưởng tượng. Chúng tôi bắt đầu CodeCombat để đem tới cho học viên những trải nghiệm nhiệm màu khi <strong>viết code</strong> thực tế."
mission_description_2: "Trên thực tế, việc này giúp cho bạn học nhanh hơn. Nhanh hơn RẤT NHIỀU. Bạn được thực hành thay vì chỉ đọc lý thuyết. Chúng tôi muốn đưa môi trường thực hành này đến với trường học và đến tay <strong>mọi học sinh</strong>, bởi vì mọi người đều cần có cơ hội biết đến sự nhiệm màu của lập trình." mission_description_2: "Trên thực tế, việc này giúp cho bạn học nhanh hơn. Nhanh hơn RẤT NHIỀU. Bạn được thực hành thay vì chỉ đọc lý thuyết. Chúng tôi muốn đưa môi trường thực hành này đến với trường học và đến tay <strong>mọi học sinh</strong>, bởi vì mọi người đều cần có cơ hội biết đến sự nhiệm màu của lập trình."
team_title: "Đội ngũ của CodeCombat" team_title: "Đội ngũ của CodeCombat"
# team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team." team_values: "Chúng tôi chân trọng những cuộc đối thoại mở và có sự tôn trọng lẫn nhau, nơi mà những ý tưởng tốt nhất giành chiến thắng. Những quyết định của chúng tôi được đưa ra hoàn toàn dựa trên những báo cáo nghiên cứu ý kiến khách hàng và quy trình của chúng tôi chú trọng vào mục tiêu đưa đến những giá trị hữu hình cho cho khách hàng. Mọi người đều có vai trò của mình, từ CEO của chúng tôi cho đến những người tham gia công đồng trên Github, bởi vì chúng tôi chân trọng sự phát triển và học hỏi của từng thành viên trong nhóm."
nick_title: "Đồng Sáng Lập, CEO" # {change} nick_title: "Đồng Sáng Lập, CEO" # {change}
nick_blurb: "Người truyền cảm hứng" nick_blurb: "Người truyền cảm hứng"
matt_title: "Đồng Sáng Lập, CTO" # {change} matt_title: "Đồng Sáng Lập, CTO" # {change}
@ -853,10 +853,10 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
college_plus: "Cao đẳng/Đại học hoặc cao hơn" college_plus: "Cao đẳng/Đại học hoặc cao hơn"
anything_else: "Còn điều gì chúng tôi nên biết thêm nữa không?" anything_else: "Còn điều gì chúng tôi nên biết thêm nữa không?"
thanks_header: "Đã nhận yêu cầu!" thanks_header: "Đã nhận yêu cầu!"
# thanks_sub_header: "Thanks for expressing interest in CodeCombat for your school." thanks_sub_header: "Cảm ơn vì đã bày tỏ sự quan tâm của trường bạn với CodeCombat."
thanks_p: "Chúng tôi sẽ sớm trả lời lại! Nếu bạn cần liên hệ, hãy liên lạc với chúng tôi tại:" thanks_p: "Chúng tôi sẽ sớm trả lời lại! Nếu bạn cần liên hệ, hãy liên lạc với chúng tôi tại:"
# back_to_classes: "Back to Classes" back_to_classes: "Quay lại Lớp học"
# finish_signup: "Finish creating your teacher account:" finish_signup: "Hoàn thiện tài khoản giáo viên:"
# finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science." # finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
signup_with: "Đăng ký bằng:" signup_with: "Đăng ký bằng:"
connect_with: "Kết nối với:" connect_with: "Kết nối với:"
@ -866,7 +866,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!" # create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!"
convert_account_title: "Năng cấp lên tài khoản Giáo Viên" convert_account_title: "Năng cấp lên tài khoản Giáo Viên"
not: "Không phải" not: "Không phải"
# setup_a_class: "Set Up a Class" setup_a_class: "Thiết lập một Lớp học"
versions: versions:
save_version_title: "Lưu phiên bản mới" save_version_title: "Lưu phiên bản mới"
@ -922,10 +922,10 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
email_announcements: "Thông báo" email_announcements: "Thông báo"
email_announcements_description: "Nhận email về tin tức mới nhất và sự phát triển của Codecombat." email_announcements_description: "Nhận email về tin tức mới nhất và sự phát triển của Codecombat."
email_notifications: "Thông báo" email_notifications: "Thông báo"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity." email_notifications_summary: "Kiểm soát các thông báo cá nhân tự động liên quan đến các hoạt động của CodeCombat."
# email_any_notes: "Any Notifications" email_any_notes: "Bất kỳ thông báo nào"
# email_any_notes_description: "Disable to stop all activity notification emails." email_any_notes_description: "Vô hiệu hóa để ngừng mọi thông báo qua email."
# email_news: "News" email_news: "Tin tức"
email_recruit_notes: "Cơ hội việc làm" email_recruit_notes: "Cơ hội việc làm"
email_recruit_notes_description: "Nếu bạn chơi trò này rất giỏi, chúng tôi có thể sẽ liên lạc với bạn về cơ hội nghề nghiệp." email_recruit_notes_description: "Nếu bạn chơi trò này rất giỏi, chúng tôi có thể sẽ liên lạc với bạn về cơ hội nghề nghiệp."
contributor_emails: "Email tham gia đóng góp" contributor_emails: "Email tham gia đóng góp"
@ -957,7 +957,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# toggle_grid: "Toggle grid overlay." # toggle_grid: "Toggle grid overlay."
# toggle_pathfinding: "Toggle pathfinding overlay." # toggle_pathfinding: "Toggle pathfinding overlay."
# beautify: "Beautify your code by standardizing its formatting." # beautify: "Beautify your code by standardizing its formatting."
# maximize_editor: "Maximize/minimize code editor." maximize_editor: "Phong to/thu nhỏ trình soạn thảo code."
community: community:
main_title: "Cộng đồng CodeCombat" main_title: "Cộng đồng CodeCombat"
@ -1000,8 +1000,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
edit_description: "sửa mô tả" edit_description: "sửa mô tả"
private: "(kín)" private: "(kín)"
summary: "Tóm tắt" summary: "Tóm tắt"
average_level: "Cấp độ trng bình" average_level: "Cấp độ trung bình"
# average_achievements: "Average Achievements" average_achievements: "Thành tựu trung bình"
delete_clan: "Xóa Clan" delete_clan: "Xóa Clan"
leave_clan: "Rời Clan" leave_clan: "Rời Clan"
join_clan: "Tham gia Clan" join_clan: "Tham gia Clan"
@ -1013,29 +1013,29 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
started_1: "đã bắt đầu" started_1: "đã bắt đầu"
complete_1: "hoàn thành" complete_1: "hoàn thành"
# exp_levels: "Expand levels" # exp_levels: "Expand levels"
# rem_hero: "Remove Hero" rem_hero: "Xóa Tướng"
# status: "Status" status: "Trạng thái"
complete_2: "Hoàn thành" complete_2: "Hoàn thành"
started_2: "Đã bắt đầu" started_2: "Đã bắt đầu"
not_started_2: "Chưa bắt đầu" not_started_2: "Chưa bắt đầu"
view_solution: "Click để xem lời giải." view_solution: "Click để xem lời giải."
# view_attempt: "Click to view attempt." view_attempt: "Click để xem thử."
# latest_achievement: "Latest Achievement" latest_achievement: "Thành tựu mới nhất"
playtime: "Thời gian chơi" playtime: "Thời gian chơi"
last_played: "Lần chơi cuối" last_played: "Lần chơi cuối"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances." # leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances."
# track_concepts1: "Track concepts" # track_concepts1: "Track concepts"
# track_concepts2a: "learned by each student" # track_concepts2a: "learned by each student"
# track_concepts2b: "learned by each member" # track_concepts2b: "learned by each member"
# track_concepts3a: "Track levels completed for each student" track_concepts3a: "Theo dõi các màn chơi được hoàn thành bởi mỗi học viên"
# track_concepts3b: "Track levels completed for each member" track_concepts3b: "Theo dõi các màn chơi được hoàn thành bởi mỗi thành viên"
track_concepts4a: "Xem các học viên của bạn'" track_concepts4a: "Xem các học viên của bạn'"
track_concepts4b: "Xem các thành viên của bạn'" track_concepts4b: "Xem các thành viên của bạn'"
track_concepts5: "lời giải" track_concepts5: "lời giải"
track_concepts6a: "Sắp xếp học viên theo tên hoặc tiến trình" track_concepts6a: "Sắp xếp học viên theo tên hoặc tiến trình"
track_concepts6b: "Sắp xếp thành viên theo tên hoặc tiến trình" track_concepts6b: "Sắp xếp thành viên theo tên hoặc tiến trình"
# track_concepts7: "Requires invitation" track_concepts7: "Yêu cầu lời mời"
# track_concepts8: "to join" track_concepts8: "để tham gia"
private_require_sub: "Các Clan kín cần mua subscription để tạo hoặc tham gia." private_require_sub: "Các Clan kín cần mua subscription để tạo hoặc tham gia."
courses: courses:
@ -1047,7 +1047,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
visit_suf: "để tham gia." visit_suf: "để tham gia."
select_class: "Chọn một trong các lớp học của bạn" select_class: "Chọn một trong các lớp học của bạn"
unnamed: "*unnamed*" unnamed: "*unnamed*"
# select: "Select" select: "Lựa chọn"
unnamed_class: "Lớp học chưa đặt tên" unnamed_class: "Lớp học chưa đặt tên"
edit_settings: "thay đổi tùy chỉnh lớp học" edit_settings: "thay đổi tùy chỉnh lớp học"
edit_settings1: "Thay đổi tùy chỉnh lớp học" edit_settings1: "Thay đổi tùy chỉnh lớp học"
@ -1055,24 +1055,24 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
add_students: "Thêm học sinh" add_students: "Thêm học sinh"
stats: "Thống kê" stats: "Thống kê"
total_students: "Tổng số học sinh:" total_students: "Tổng số học sinh:"
# average_time: "Average level play time:" average_time: "Thời gian chơi trung bình:"
total_time: "Tổng thời gian chơi:" total_time: "Tổng thời gian chơi:"
average_levels: "Lượng cấp độ trung bình đã hoàn thành:" average_levels: "Lượng cấp độ trung bình đã hoàn thành:"
total_levels: "Tổng số cấp độ đã hoàn thành" total_levels: "Tổng số cấp độ đã hoàn thành"
# furthest_level: "Furthest level completed:" furthest_level: "Màn chơi xa nhất đã hoàn thành:"
# students: "Students" students: "Học viên"
# students1: "students" students1: "học viên"
# concepts: "Concepts" concepts: "Các khái niệm"
# levels: "levels" levels: "màn chơi"
# played: "Played" played: "Đã chơi"
# play_time: "Play time:" play_time: "Thời gian chơi:"
# completed: "Completed:" completed: "Đã hoàn thành:"
# invite_students: "Invite students to join this class." invite_students: "Mời các học viên tham gia lớp học này."
# invite_link_header: "Link to join course" invite_link_header: "Đường link để tham gia khóa học"
# invite_link_p_1: "Give this link to students you would like to have join the course." # invite_link_p_1: "Give this link to students you would like to have join the course."
# invite_link_p_2: "Or have us email them directly:" # invite_link_p_2: "Or have us email them directly:"
# capacity_used: "Course slots used:" capacity_used: "Số chỗ đã đăng ký:"
# enter_emails: "Enter student emails to invite, one per line" enter_emails: "Nhập email học viên để gửi lời mời, mỗi email một dòng"
send_invites: "Gửi lời mời" send_invites: "Gửi lời mời"
creating_class: "Đang tạo lớp..." creating_class: "Đang tạo lớp..."
purchasing_course: "Đang mua khóa học..." purchasing_course: "Đang mua khóa học..."
@ -1086,15 +1086,15 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
name_class: "Đặt tên lớp của bạn" name_class: "Đặt tên lớp của bạn"
# displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later." # displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later."
buy: "Mua" buy: "Mua"
# purchasing_for: "You are purchasing a license for" purchasing_for: "Bạn đang muc giấy phép cho"
# creating_for: "You are creating a class for" creating_for: "Bạn đang tạo một lớp cho"
# for: "for" # Like in 'for 30 students' for: "dành cho" # Like in 'for 30 students'
# receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class." # receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class."
# free_trial: "Free trial for teachers!" # free_trial: "Free trial for teachers!"
# get_access: "to get individual access to all courses for evalutaion purposes." # get_access: "to get individual access to all courses for evalutaion purposes."
# questions: "Questions?" questions: "Có câu hỏi?"
# teachers_click: "Teachers Click Here" teachers_click: "Giáo viên click vào đây"
# students_click: "Students Click Here" students_click: "Học viên click vào đây"
courses_on_coco: "Những khóa học trên CodeCombat" courses_on_coco: "Những khóa học trên CodeCombat"
# designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours." # designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours."
# more_in_less: "Learn more in less time" # more_in_less: "Learn more in less time"
@ -1261,16 +1261,16 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# students_enrolled: "students enrolled" # students_enrolled: "students enrolled"
# students_assigned: "students assigned" # students_assigned: "students assigned"
# length: "Length:" # length: "Length:"
title: "Tiêu đề" # Flat style redesign title: "Các khóa học" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels" subtitle: "Xem giáo án của các khóa học, lời giải và các màn chơi"
# changelog: "View latest changes to course levels." changelog: "Xem những thay đổi mới nhất về các khóa học."
# select_language: "Select language" select_language: "Chọn ngôn ngữ"
# select_level: "Select level" select_level: "Chọn màn chơi"
# play_level: "Play Level" play_level: "Chơi Màn Chơi"
# concepts_covered: "Concepts covered" concepts_covered: "Bao gồm các khái niệm"
# print_guide: "Print Guide (PDF)" print_guide: "In Hướng Dẫn (PDF)"
# view_guide_online: "View Guide Online (PDF)" view_guide_online: "Xem Hướng Dẫn Online (PDF)"
# last_updated: "Last updated:" last_updated: "Cập nhật lần cuối:"
# grants_lifetime_access: "Grants access to all Courses." # grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:" # enrollment_credits_available: "Enrollment Credits Available:"
description: "Mô tả" # ClassroomSettingsModal description: "Mô tả" # ClassroomSettingsModal
@ -1292,7 +1292,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
student_age_range_to: "tới" student_age_range_to: "tới"
create_class: "Tạo Lớp" create_class: "Tạo Lớp"
class_name: "Tên lớp" class_name: "Tên lớp"
# teacher_account_restricted: "Your account is a teacher account, and so cannot access student content." teacher_account_restricted: "Tài khoản của bạn là tài khoản Giáo Viên, vì thế bạn không thể truy cập nội dung dành cho học viên."
teacher: teacher:
teacher_dashboard: "Bảng Điều Khiển Giáo Viên" # Navbar teacher_dashboard: "Bảng Điều Khiển Giáo Viên" # Navbar
@ -1406,7 +1406,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# level_title: "Level Editor" # level_title: "Level Editor"
# achievement_title: "Achievement Editor" # achievement_title: "Achievement Editor"
# poll_title: "Poll Editor" # poll_title: "Poll Editor"
# back: "Back" back: "Quay lại"
# revert: "Revert" # revert: "Revert"
# revert_models: "Revert Models" # revert_models: "Revert Models"
pick_a_terrain: "Chọn Địa Hình" pick_a_terrain: "Chọn Địa Hình"
@ -1418,8 +1418,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
glacier: "Núi băng" glacier: "Núi băng"
small: "" small: ""
large: "Lớn" large: "Lớn"
# fork_title: "Fork New Version" fork_title: "Fork phiên bản mới"
# fork_creating: "Creating Fork..." fork_creating: "Đang tạo Fork..."
# generate_terrain: "Generate Terrain" # generate_terrain: "Generate Terrain"
more: "Thêm" more: "Thêm"
wiki: "Wiki" wiki: "Wiki"

View file

@ -279,8 +279,8 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
recovery_sent: "密碼重置的信件已寄出" recovery_sent: "密碼重置的信件已寄出"
items: items:
primary: "要武器" primary: "手裝備"
secondary: "次要武器" secondary: "副手裝備"
armor: "裝甲" armor: "裝甲"
accessories: "飾品" accessories: "飾品"
misc: "輔助" misc: "輔助"
@ -344,10 +344,10 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
confirm_password: "確認密碼" confirm_password: "確認密碼"
message: "訊息" message: "訊息"
code: "程式碼" code: "程式碼"
ladder: "升級比賽" ladder: "天梯"
when: "" when: "何時"
opponent: "對手" opponent: "對手"
rank: "階級" rank: "排名"
score: "分數" score: "分數"
win: "獲勝" win: "獲勝"
loss: "失敗" loss: "失敗"
@ -472,7 +472,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
tip_reticulating: "網格狀鋸齒(指卡頓現象)" tip_reticulating: "網格狀鋸齒(指卡頓現象)"
tip_harry: "巫師," tip_harry: "巫師,"
tip_great_responsibility: "隨著擁有強大的編程技巧,除錯的責任將越大。" tip_great_responsibility: "隨著擁有強大的編程技巧,除錯的責任將越大。"
tip_munchkin: "如果您不吃掉您的蔬菜,那小矮人將在您沉睡時找到您。" tip_munchkin: "如果您不吃掉您的蔬菜,那些矮人將在您睡覺時找到您。"
tip_binary: "只有2種人在這世上那些懂2進位的和那些不懂的。" tip_binary: "只有2種人在這世上那些懂2進位的和那些不懂的。"
tip_commitment_yoda: "一個程式員必須擁有強烈的責任感和一顆認真的心。 ~ Yoda《星際大戰》" tip_commitment_yoda: "一個程式員必須擁有強烈的責任感和一顆認真的心。 ~ Yoda《星際大戰》"
tip_no_try: "做,或者不做。這邊不存在嘗試的選項。 - Yoda《星際大戰》" tip_no_try: "做,或者不做。這邊不存在嘗試的選項。 - Yoda《星際大戰》"
@ -510,7 +510,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
tip_life_and_polymorphism: "開放源碼就像是一個完全多樣異質的結構:海納百川。"#"Open Source is like a totally polymorphic heterogeneous structure: All types are welcome." tip_life_and_polymorphism: "開放源碼就像是一個完全多樣異質的結構:海納百川。"#"Open Source is like a totally polymorphic heterogeneous structure: All types are welcome."
tip_mistakes_proof_of_trying: "程式碼中的錯誤證明了你曾經嘗試過。"#"Mistakes in your code are just proof that you are trying." tip_mistakes_proof_of_trying: "程式碼中的錯誤證明了你曾經嘗試過。"#"Mistakes in your code are just proof that you are trying."
tip_adding_orgres: "包圍敵人!"#"Rounding up ogres." tip_adding_orgres: "包圍敵人!"#"Rounding up ogres."
tip_sharpening_swords: "煉造就寶劍"#"Sharpening the swords." tip_sharpening_swords: "利劍鋒"#"Sharpening the swords."
tip_ratatouille: "你不需要讓任何人以你的出身決定你的極限你唯一的限制就是你的心靈。廚神Gusteau《料理鼠王》 "#"You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille" tip_ratatouille: "你不需要讓任何人以你的出身決定你的極限你唯一的限制就是你的心靈。廚神Gusteau《料理鼠王》 "#"You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
tip_nemo: "想知道當生活使你消沉時,你必須做甚麼嗎?一直游,一直游就對了。多莉《海底總動員》"#"When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo" tip_nemo: "想知道當生活使你消沉時,你必須做甚麼嗎?一直游,一直游就對了。多莉《海底總動員》"#"When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
tip_internet_weather: "搬來網路世界吧,這裡十分不錯。我們住的地方天氣總是很好。 - John Green"#"Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green" tip_internet_weather: "搬來網路世界吧,這裡十分不錯。我們住的地方天氣總是很好。 - John Green"#"Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
@ -725,37 +725,37 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
editor_config_behaviors_description: "自動填入小括號、大括號以及引號。" editor_config_behaviors_description: "自動填入小括號、大括號以及引號。"
about: about:
# main_title: "If you want to learn to program, you need to write (a lot of) code." main_title: "如果您想要學編程,你需要寫(一大堆)程式碼。"#"If you want to learn to program, you need to write (a lot of) code."
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face." main_description: "在CodeCombat中我們的職責是確保您笑著玩遊戲。" #"At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission" mission_link: "任務"#"Mission"
# team_link: "Team" team_link: "隊伍"#"Team"
# story_link: "Story" story_link: "故事"#"Story"
# press_link: "Press" press_link: ""#"Press"
# mission_title: "Our mission: make programming accessible to every student on Earth." mission_title: "我們的任務為:讓世上每個學生都有機會能學會編程。" #"Our mission: make programming accessible to every student on Earth."
# mission_description_1: "<strong>Programming is magic</strong>. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using <strong>typed code</strong>." mission_description_1: "<strong>編程是一種魔法</strong>。它是一種從純粹的想像中創造東西的能力。我們營運CodeCombat來讓學習者可以透過<strong>鍵入程式碼</strong>在指尖感覺到巫師般的力量。" #"<strong>Programming is magic</strong>. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using <strong>typed code</strong>."
# mission_description_2: "As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming." mission_description_2: "它的出現也讓使用者學得更快,就像是與它對話而不是閱讀手冊一般。我們想將這種對話帶給每一個學校以及<strong>每一位學生</strong>,因為每個人都應該要有機會體會編程的魔力。 " #"As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming."
# team_title: "Meet the CodeCombat team" team_title: "認識CodeCombat團隊。"#"Meet the CodeCombat team"
# team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team." team_values: "我們重視開放且互相尊重的對話好的想法才會勝出。我們的抉擇建立於客戶調查上且過程注重於將具體的結果交給客戶。從我們的CEO到我們的Github貢獻者每一個人都會動手參與因為我們傾向在團隊中學習成長。" #" We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team."
nick_title: "程式員" # {change} nick_title: "程式員" # {change}
nick_blurb: "亢奮的Guru" nick_blurb: "亢奮的咕嚕"
matt_title: "共同創辦人" # {change} matt_title: "共同創辦人" # {change}
cat_title: "首席開卡設計師" # {change} cat_title: "首席開卡設計師" # {change}
cat_blurb: "氣宗" cat_blurb: "氣宗"
scott_title: "共同創辦人" # {change} scott_title: "共同創辦人" # {change}
scott_blurb: "理性至上" scott_blurb: "理性至上"
# maka_title: "Customer Advocate" maka_title: "客戶代言人" #"Customer Advocate"
maka_blurb: "說書人" maka_blurb: "說書人"
rob_title: "編譯工程師" # {change} rob_title: "編譯工程師" # {change}
rob_blurb: "編寫一些的程式碼" rob_blurb: "編寫一些的程式碼"
josh_c_title: "遊戲設計師" josh_c_title: "遊戲設計師"
josh_c_blurb: "設計遊戲" josh_c_blurb: "設計遊戲"
# robin_title: "UX Design & Research" robin_title: "使用者體驗研究與設計"#"UX Design & Research"
# robin_blurb: "Scaffolding" robin_blurb: "鷹架"#"Scaffolding"
josh_title: "遊戲設計師" josh_title: "遊戲設計師"
josh_blurb: "地面是熔岩" josh_blurb: "地面是熔岩"
# phoenix_title: "Software Engineer" phoenix_title: "軟體工程師"#"Software Engineer"
# nolan_title: "Territory Manager" nolan_title: "區域經理"#"Territory Manager"
# elliot_title: "Partnership Manager" elliot_title: "合作經裡"#"Partnership Manager"
retrostyle_title: "插畫師" retrostyle_title: "插畫師"
retrostyle_blurb: "復古風格的遊戲" retrostyle_blurb: "復古風格的遊戲"
jose_title: "音樂" jose_title: "音樂"
@ -1566,41 +1566,41 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
ladder: ladder:
please_login: "在參與對戰前請先登入。" please_login: "在參與對戰前請先登入。"
my_matches: "我的對" my_matches: "我的對"
simulate: "模擬" simulate: "模擬"
simulation_explanation: "通過模擬遊戲,您可以使您的遊戲更快得到評" simulation_explanation: "通過模擬遊戲,您可以使您的遊戲更快得到評定排名"
simulation_explanation_leagues: "你主要會為你的部落或者課程的同伴幫忙模擬遊戲。" simulation_explanation_leagues: "你主要會為你的部落或者課程的同伴幫忙模擬遊戲。"
simulate_games: "模擬遊戲!" simulate_games: "模擬遊戲!"
games_simulated_by: "您模擬過的次數:" games_simulated_by: "您模擬過的次數:"
games_simulated_for: "替您模擬的次數:" games_simulated_for: "替您模擬的次數:"
games_in_queue: "遊戲正在列隊中:" games_in_queue: "遊戲正在列隊中:"
games_simulated: "遊戲模擬" games_simulated: "遊戲模擬次數"
games_played: "玩過的遊戲" games_played: "玩過的遊戲"
ratio: "通過" ratio: ""
leaderboard: "排行榜" leaderboard: "排行榜"
battle_as: "我要扮演 " battle_as: "我要扮演 "
summary_your: "您的 " summary_your: "您的 "
summary_matches: "對手 - " summary_matches: "對手 - "
summary_wins: " 勝利," summary_wins: " 勝利,"
summary_losses: " 失敗" summary_losses: " 失敗"
rank_no_code: "沒有新程式碼可評" rank_no_code: "沒有新程式碼可評定排名"
rank_my_game: "對我的遊戲評" rank_my_game: "對我的遊戲評定排名"
rank_submitting: "上傳中…" rank_submitting: "上傳中…"
rank_submitted: "已上傳以求評" rank_submitted: "已上傳以求評定排名"
rank_failed: "失敗" rank_failed: "失敗"
rank_being_ranked: "已評" rank_being_ranked: "已評"
rank_last_submitted: "已上傳 " rank_last_submitted: "已上傳 "
help_simulate: "幫我們模擬遊戲?" help_simulate: "幫我們模擬遊戲?"
code_being_simulated: "您的新程式碼正在被其他人模擬評中。分數將隨每次新的配對而更新。" code_being_simulated: "您的新程式碼正在被其他人模擬評中。分數將隨每次新的配對而更新。"
no_ranked_matches_pre: "對這個隊伍尚未有評分過的配對!" no_ranked_matches_pre: "對這個隊伍尚未有評分過的配對!"
no_ranked_matches_post: " 在別人的戰場上扮演對手並且回到這使您的程式碼接受評" no_ranked_matches_post: " 在別人的戰場上扮演對手並且回到這使您的程式碼接受評定排名"
choose_opponent: "選擇對手" choose_opponent: "選擇對手"
select_your_language: "選擇您的語言!" select_your_language: "選擇您的語言!"
tutorial_play: "教學" tutorial_play: "教學"
tutorial_recommended: "如果您尚未玩過,建議先嘗試教學" tutorial_recommended: "如果您尚未玩過,建議先嘗試教學"
tutorial_skip: "略過教學" tutorial_skip: "略過教學"
tutorial_not_sure: "不確定發生啥事?" tutorial_not_sure: "不確定發生啥事?"
tutorial_play_first: "試教學" tutorial_play_first: "試教學"
simple_ai: "簡單人工智慧" # {change} simple_ai: "簡單人工智慧" # {change}
warmup: "熱身" warmup: "熱身"
friends_playing: "與朋友連線" friends_playing: "與朋友連線"
@ -1609,7 +1609,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
invite_friends_to_battle: "邀請您的朋友加入此戰鬥!" invite_friends_to_battle: "邀請您的朋友加入此戰鬥!"
fight: "戰鬥!" fight: "戰鬥!"
watch_victory: "觀看您的勝利" watch_victory: "觀看您的勝利"
defeat_the: "" defeat_the: ""
watch_battle: "觀看戰役" watch_battle: "觀看戰役"
tournament_started: ",錦標賽已開始" tournament_started: ",錦標賽已開始"
tournament_ends: "錦標賽結束" tournament_ends: "錦標賽結束"

View file

@ -8,7 +8,6 @@ module.exports = class Campaign extends CocoModel
@className: 'Campaign' @className: 'Campaign'
@schema: schema @schema: schema
urlRoot: '/db/campaign' urlRoot: '/db/campaign'
saveBackups: true
@denormalizedLevelProperties: _.keys(_.omit(schema.properties.levels.additionalProperties.properties, ['unlocks', 'position', 'rewards'])) @denormalizedLevelProperties: _.keys(_.omit(schema.properties.levels.additionalProperties.properties, ['unlocks', 'position', 'rewards']))
@denormalizedCampaignProperties: ['name', 'i18n', 'slug'] @denormalizedCampaignProperties: ['name', 'i18n', 'slug']

View file

@ -121,3 +121,10 @@ module.exports = class Classroom extends CocoModel
url: _.result(courseInstance, 'url') + '/classroom' url: _.result(courseInstance, 'url') + '/classroom'
}) })
@fetch(options) @fetch(options)
inviteMembers: (emails, options={}) ->
options.data ?= {}
options.data.emails = emails
options.url = @url() + '/invite-members'
options.type = 'POST'
@fetch(options)

View file

@ -368,6 +368,7 @@ class CocoModel extends Backbone.Model
return if _.isString @url then @url else @url() return if _.isString @url then @url else @url()
@pollAchievements: -> @pollAchievements: ->
return if application.testing
CocoCollection = require 'collections/CocoCollection' CocoCollection = require 'collections/CocoCollection'
EarnedAchievement = require 'models/EarnedAchievement' EarnedAchievement = require 'models/EarnedAchievement'

View file

@ -58,12 +58,14 @@ module.exports = class Level extends CocoModel
denormalize: (supermodel, session, otherSession) -> denormalize: (supermodel, session, otherSession) ->
o = $.extend true, {}, @attributes o = $.extend true, {}, @attributes
if o.thangs and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder'] if o.thangs and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev']
thangTypesWithComponents = (tt for tt in supermodel.getModels(ThangType) when tt.get('components')?)
thangTypesByOriginal = _.indexBy thangTypesWithComponents, (tt) -> tt.get('original') # Optimization
for levelThang in o.thangs for levelThang in o.thangs
@denormalizeThang(levelThang, supermodel, session, otherSession) @denormalizeThang(levelThang, supermodel, session, otherSession, thangTypesByOriginal)
o o
denormalizeThang: (levelThang, supermodel, session, otherSession) -> denormalizeThang: (levelThang, supermodel, session, otherSession, thangTypesByOriginal) ->
levelThang.components ?= [] levelThang.components ?= []
isHero = /Hero Placeholder/.test(levelThang.id) and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] isHero = /Hero Placeholder/.test(levelThang.id) and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop']
if isHero and otherSession if isHero and otherSession
@ -79,7 +81,7 @@ module.exports = class Level extends CocoModel
if isHero if isHero
placeholders = {} placeholders = {}
placeholdersUsed = {} placeholdersUsed = {}
placeholderThangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType) placeholderThangType = thangTypesByOriginal[levelThang.thangType]
unless placeholderThangType unless placeholderThangType
console.error "Couldn't find placeholder ThangType for the hero!" console.error "Couldn't find placeholder ThangType for the hero!"
isHero = false isHero = false
@ -92,7 +94,7 @@ module.exports = class Level extends CocoModel
heroThangType = session?.get('heroConfig')?.thangType heroThangType = session?.get('heroConfig')?.thangType
levelThang.thangType = heroThangType if heroThangType levelThang.thangType = heroThangType if heroThangType
thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType, (m) -> m.get('components')?) thangType = thangTypesByOriginal[levelThang.thangType]
configs = {} configs = {}
for thangComponent in levelThang.components for thangComponent in levelThang.components
@ -143,6 +145,11 @@ module.exports = class Level extends CocoModel
for original, placeholderComponent of placeholders when not placeholdersUsed[original] for original, placeholderComponent of placeholders when not placeholdersUsed[original]
levelThang.components.push placeholderComponent levelThang.components.push placeholderComponent
# Load the user's chosen hero AFTER getting stats from default char
if /Hero Placeholder/.test(levelThang.id) and @get('type', true) in ['course']
heroThangType = me.get('heroConfig')?.thangType
levelThang.thangType = heroThangType if heroThangType
sortSystems: (levelSystems, systemModels) -> sortSystems: (levelSystems, systemModels) ->
[sorted, originalsSeen] = [[], {}] [sorted, originalsSeen] = [[], {}]
visit = (system) -> visit = (system) ->
@ -168,11 +175,16 @@ module.exports = class Level extends CocoModel
# Decision? Just special case the sort logic in here until we have more examples than these two and decide how best to handle most of the cases then, since we don't really know the whole of the problem yet. # Decision? Just special case the sort logic in here until we have more examples than these two and decide how best to handle most of the cases then, since we don't really know the whole of the problem yet.
# TODO: anything that depends on Programmable will break right now. # TODO: anything that depends on Programmable will break right now.
originalsToComponents = _.indexBy levelComponents, 'original' # Optimization for speed
alliedComponent = _.find levelComponents, name: 'Allied'
actsComponent = _.find levelComponents, name: 'Acts'
for thang in thangs ? [] for thang in thangs ? []
originalsToThangComponents = _.indexBy thang.components, 'original'
sorted = [] sorted = []
visit = (c, namesToIgnore) -> visit = (c, namesToIgnore) ->
return if c in sorted return if c in sorted
lc = _.find levelComponents, {original: c.original} lc = originalsToComponents[c.original]
console.error thang.id or thang.name, 'couldn\'t find lc for', c, 'of', levelComponents unless lc console.error thang.id or thang.name, 'couldn\'t find lc for', c, 'of', levelComponents unless lc
return unless lc return unless lc
return if namesToIgnore and lc.name in namesToIgnore return if namesToIgnore and lc.name in namesToIgnore
@ -184,20 +196,18 @@ module.exports = class Level extends CocoModel
visit c2, [lc.name] for c2 in thang.components visit c2, [lc.name] for c2 in thang.components
else else
for d in lc.dependencies or [] for d in lc.dependencies or []
c2 = _.find thang.components, {original: d.original} c2 = originalsToThangComponents[d.original]
unless c2 unless c2
dependent = _.find levelComponents, {original: d.original} dependent = originalsToComponents[d.original]
dependent = dependent?.name or d.original dependent = dependent?.name or d.original
console.error parentType, thang.id or thang.name, 'does not have dependent Component', dependent, 'from', lc.name console.error parentType, thang.id or thang.name, 'does not have dependent Component', dependent, 'from', lc.name
visit c2 if c2 visit c2 if c2
if lc.name is 'Collides' if lc.name is 'Collides' and alliedComponent
if allied = _.find levelComponents, {name: 'Allied'} if allied = originalsToThangComponents[alliedComponent.original]
allied = _.find(thang.components, {original: allied.original}) visit allied
visit allied if allied if lc.name is 'Moves' and actsComponent
if lc.name is 'Moves' if acts = originalsToThangComponents[actsComponent.original]
if acts = _.find levelComponents, {name: 'Acts'} visit acts
acts = _.find(thang.components, {original: acts.original})
visit acts if acts
#console.log thang.id, 'sorted comps adding', lc.name #console.log thang.id, 'sorted comps adding', lc.name
sorted.push c sorted.push c
for comp in thang.components for comp in thang.components
@ -258,3 +268,14 @@ module.exports = class Level extends CocoModel
else else
options.url = "/db/course/#{courseID}/levels/#{levelOriginalID}/next" options.url = "/db/course/#{courseID}/levels/#{levelOriginalID}/next"
@fetch(options) @fetch(options)
getSolutions: ->
return [] unless hero = _.find (@get("thangs") ? []), id: 'Hero Placeholder'
return [] unless config = _.find(hero.components ? [], (x) -> x.config?.programmableMethods?.plan)?.config
solutions = _.cloneDeep config.programmableMethods.plan.solutions ? []
for solution in solutions
try
solution.source = _.template(solution.source)(config?.programmableMethods?.plan.context)
catch e
console.error "Problem with template and solution comments for", @get('slug'), e
solutions

View file

@ -16,12 +16,12 @@ module.exports = class ThangType extends CocoModel
samurai: '53e12be0d042f23505c3023b' samurai: '53e12be0d042f23505c3023b'
raider: '55527eb0b8abf4ba1fe9a107' raider: '55527eb0b8abf4ba1fe9a107'
goliath: '55e1a6e876cb0948c96af9f8' goliath: '55e1a6e876cb0948c96af9f8'
guardian: '' guardian: '566a058620de41290036a745'
ninja: '52fc0ed77e01835453bd8f6c' ninja: '52fc0ed77e01835453bd8f6c'
'forest-archer': '5466d4f2417c8b48a9811e87' 'forest-archer': '5466d4f2417c8b48a9811e87'
trapper: '5466d449417c8b48a9811e83' trapper: '5466d449417c8b48a9811e83'
pixie: '' pixie: ''
assassin: '' assassin: '566a2202e132c81f00f38c81'
librarian: '52fbf74b7e01835453bd8d8e' librarian: '52fbf74b7e01835453bd8d8e'
'potion-master': '52e9adf7427172ae56002172' 'potion-master': '52e9adf7427172ae56002172'
sorcerer: '52fd1524c7e6cf99160e7bc9' sorcerer: '52fd1524c7e6cf99160e7bc9'
@ -239,6 +239,27 @@ module.exports = class ThangType extends CocoModel
portraitOnly = !!options.portraitOnly portraitOnly = !!options.portraitOnly
"#{@get('name')} - #{options.resolutionFactor} - #{colorConfigs} - #{portraitOnly}" "#{@get('name')} - #{options.resolutionFactor} - #{colorConfigs} - #{portraitOnly}"
getHeroShortName: ->
map = {
"Assassin": "Ritic"
"Captain": "Anya"
"Forest Archer": "Naria"
"Goliath": "Okar"
"Guardian": "Illia"
"Knight": "Tharin"
"Librarian": "Hushbaum"
"Necromancer": "Nalfar"
"Ninja": "Amara"
"Potion Master": "Omarn"
"Raider": "Arryn"
"Samurai": "Hattori"
"Sorcerer": "Pender"
"Trapper": "Senick"
"Champion": "Ida"
"Duelist": "Alejandro"
}
map[@get('name')]
getPortraitImage: (spriteOptionsOrKey, size=100) -> getPortraitImage: (spriteOptionsOrKey, size=100) ->
src = @getPortraitSource(spriteOptionsOrKey, size) src = @getPortraitSource(spriteOptionsOrKey, size)
return null unless src return null unless src

View file

@ -25,7 +25,7 @@ module.exports = class User extends CocoModel
return name if name return name if name
[emailName, emailDomain] = @get('email')?.split('@') or [] [emailName, emailDomain] = @get('email')?.split('@') or []
return emailName if emailName return emailName if emailName
return 'Anoner' return 'Anonymous'
getPhotoURL: (size=80, useJobProfilePhoto=false, useEmployerPageAvatar=false) -> getPhotoURL: (size=80, useJobProfilePhoto=false, useEmployerPageAvatar=false) ->
photoURL = if useJobProfilePhoto then @get('jobProfile')?.photoURL else null photoURL = if useJobProfilePhoto then @get('jobProfile')?.photoURL else null
@ -165,21 +165,6 @@ module.exports = class User extends CocoModel
application.tracker.identify campaignAdsGroup: @campaignAdsGroup unless me.isAdmin() application.tracker.identify campaignAdsGroup: @campaignAdsGroup unless me.isAdmin()
@campaignAdsGroup @campaignAdsGroup
getHomepageGroup: ->
# Only testing on en-US so localization issues are not a factor
return 'home-legacy' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en')
return @homepageGroup if @homepageGroup
group = parseInt(util.getQueryVariable('variation'))
group ?= me.get('testGroupNumber') % 5
@homepageGroup = switch group
when 0 then 'home-legacy'
when 1 then 'home-teachers'
when 2 then 'home-legacy-left'
when 3 then 'home-dropdowns'
when 4 then 'home-play-for-free'
application.tracker.identify homepageGroup: @homepageGroup unless me.isAdmin()
return @homepageGroup
# Signs and Portents was receiving updates after test started, and also had a big bug on March 4, so just look at test from March 5 on. # Signs and Portents was receiving updates after test started, and also had a big bug on March 4, so just look at test from March 5 on.
# ... and stopped working well until another update on March 10, so maybe March 11+... # ... and stopped working well until another update on March 10, so maybe March 11+...
# ... and another round, and then basically it just isn't completing well, so we pause the test until we can fix it. # ... and another round, and then basically it just isn't completing well, so we pause the test until we can fix it.
@ -194,6 +179,18 @@ module.exports = class User extends CocoModel
application.tracker.identify fourthLevelGroup: @fourthLevelGroup unless me.isAdmin() application.tracker.identify fourthLevelGroup: @fourthLevelGroup unless me.isAdmin()
@fourthLevelGroup @fourthLevelGroup
getHintsGroup: ->
# A/B testing two styles of hints
return @hintsGroup if @hintsGroup
group = me.get('testGroupNumber') % 3
@hintsGroup = switch group
when 0 then 'no-hints'
when 1 then 'hints'
when 2 then 'hintsB'
@hintsGroup = 'hints' if me.isAdmin()
application.tracker.identify hintsGroup: @hintsGroup unless me.isAdmin()
@hintsGroup
getVideoTutorialStylesIndex: (numVideos=0)-> getVideoTutorialStylesIndex: (numVideos=0)->
# A/B Testing video tutorial styles # A/B Testing video tutorial styles
# Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently) # Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently)
@ -290,6 +287,13 @@ module.exports = class User extends CocoModel
options.data.facebookAccessToken = application.facebookHandler.token() options.data.facebookAccessToken = application.facebookHandler.token()
@fetch(options) @fetch(options)
loginPasswordUser: (usernameOrEmail, password, options={}) ->
options.url = '/auth/login'
options.type = 'POST'
options.data ?= {}
_.extend(options.data, { username: usernameOrEmail, password })
@fetch(options)
makeCoursePrepaid: -> makeCoursePrepaid: ->
coursePrepaid = @get('coursePrepaid') coursePrepaid = @get('coursePrepaid')
return null unless coursePrepaid return null unless coursePrepaid

View file

@ -61,7 +61,7 @@ _.extend CampaignSchema.properties, {
i18n: { type: 'object', format: 'hidden' } i18n: { type: 'object', format: 'hidden' }
requiresSubscription: { type: 'boolean' } requiresSubscription: { type: 'boolean' }
replayable: { type: 'boolean' } replayable: { type: 'boolean' }
type: {'enum': ['ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder']} type: {'enum': ['ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev']}
slug: { type: 'string', format: 'hidden' } slug: { type: 'string', format: 'hidden' }
original: { type: 'string', format: 'hidden' } original: { type: 'string', format: 'hidden' }
adventurer: { type: 'boolean' } adventurer: { type: 'boolean' }

View file

@ -276,9 +276,23 @@ c.extendNamedProperties LevelSchema # let's have the name be the first property
_.extend LevelSchema.properties, _.extend LevelSchema.properties,
description: {title: 'Description', description: 'A short explanation of what this level is about.', type: 'string', maxLength: 65536, format: 'markdown'} description: {title: 'Description', description: 'A short explanation of what this level is about.', type: 'string', maxLength: 65536, format: 'markdown'}
loadingTip: { type: 'string', title: 'Loading Tip', description: 'What to show for this level while it\'s loading.' } loadingTip: { type: 'string', title: 'Loading Tip', description: 'What to show for this level while it\'s loading.' }
documentation: c.object {title: 'Documentation', description: 'Documentation articles relating to this level.', required: ['specificArticles', 'generalArticles'], 'default': {specificArticles: [], generalArticles: []}}, documentation: c.object {title: 'Documentation', description: 'Documentation articles relating to this level.', 'default': {specificArticles: [], generalArticles: []}},
specificArticles: c.array {title: 'Specific Articles', description: 'Specific documentation articles that live only in this level.', uniqueItems: true }, SpecificArticleSchema specificArticles: c.array {title: 'Specific Articles', description: 'Specific documentation articles that live only in this level.', uniqueItems: true }, SpecificArticleSchema
generalArticles: c.array {title: 'General Articles', description: 'General documentation articles that can be linked from multiple levels.', uniqueItems: true}, GeneralArticleSchema generalArticles: c.array {title: 'General Articles', description: 'General documentation articles that can be linked from multiple levels.', uniqueItems: true}, GeneralArticleSchema
hints: c.array {title: 'Hints', description: 'Tips and tricks to help unstick a player for the level.', uniqueItems: true }, {
type: 'object'
properties: {
body: {type: 'string', title: 'Content', description: 'The body content of the article, in Markdown.', format: 'markdown'}
i18n: {type: 'object', format: 'i18n', props: ['body'], description: 'Help translate this hint'}
}
}
hintsB: c.array {title: 'HintsB', description: '2nd style of hints for a/b testing significant variations', uniqueItems: true }, {
type: 'object'
properties: {
body: {type: 'string', title: 'Content', description: 'The body content of the article, in Markdown.', format: 'markdown'}
i18n: {type: 'object', format: 'i18n', props: ['body'], description: 'Help translate this hint'}
}
}
background: c.objectId({format: 'hidden'}) background: c.objectId({format: 'hidden'})
nextLevel: { nextLevel: {
type: 'object', type: 'object',
@ -299,7 +313,7 @@ _.extend LevelSchema.properties,
icon: {type: 'string', format: 'image-file', title: 'Icon'} icon: {type: 'string', format: 'image-file', title: 'Icon'}
banner: {type: 'string', format: 'image-file', title: 'Banner'} banner: {type: 'string', format: 'image-file', title: 'Banner'}
goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder']) type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev'])
terrain: c.terrainString terrain: c.terrainString
showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always']) showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always'])
requiresSubscription: {title: 'Requires Subscription', description: 'Whether this level is available to subscribers only.', type: 'boolean'} requiresSubscription: {title: 'Requires Subscription', description: 'Whether this level is available to subscribers only.', type: 'boolean'}

View file

@ -10,7 +10,7 @@ class AttacksSelf extends Component
systems = [ systems = [
'action', 'ai', 'alliance', 'collision', 'combat', 'display', 'event', 'existence', 'hearing', 'action', 'ai', 'alliance', 'collision', 'combat', 'display', 'event', 'existence', 'hearing',
'inventory', 'movement', 'programming', 'targeting', 'ui', 'vision', 'misc', 'physics', 'effect', 'inventory', 'movement', 'programming', 'targeting', 'ui', 'vision', 'misc', 'physics', 'effect',
'magic' 'magic', 'game'
] ]
PropertyDocumentationSchema = c.object { PropertyDocumentationSchema = c.object {

View file

@ -18,21 +18,6 @@ class Jitter extends System
return hash return hash
""" """
PropertyDocumentationSchema = c.object {
title: 'Property Documentation'
description: 'Documentation entry for a property this System will add to its Thang which other Systems might want to also use.'
default:
name: 'foo'
type: 'object'
description: 'This System provides a "foo" property to satisfy all one\'s foobar needs. Use it wisely.'
required: ['name', 'type', 'description']
},
name: {type: 'string', pattern: c.identifierPattern, title: 'Name', description: 'Name of the property.'}
# not actual JS types, just whatever they describe...
type: c.shortString(title: 'Type', description: 'Intended type of the property.')
description: {type: 'string', description: 'Description of the property.', maxLength: 1000}
args: c.array {title: 'Arguments', description: 'If this property has type "function", then provide documentation for any function arguments.'}, c.FunctionArgumentSchema
DependencySchema = c.object { DependencySchema = c.object {
title: 'System Dependency' title: 'System Dependency'
description: 'A System upon which this System depends.' description: 'A System upon which this System depends.'
@ -50,14 +35,14 @@ DependencySchema = c.object {
LevelSystemSchema = c.object { LevelSystemSchema = c.object {
title: 'System' title: 'System'
description: 'A System which can affect Level behavior.' description: 'A System which can affect Level behavior.'
required: ['name', 'description', 'code', 'dependencies', 'propertyDocumentation', 'codeLanguage'] required: ['name', 'code']
default: default:
name: 'JitterSystem' name: 'JitterSystem'
description: 'This System makes all idle, movable Thangs jitter around.' description: 'This System makes all idle, movable Thangs jitter around.'
code: jitterSystemCode code: jitterSystemCode
codeLanguage: 'coffeescript' codeLanguage: 'coffeescript'
dependencies: [] # TODO: should depend on something by default dependencies: [] # TODO: should depend on something by default
propertyDocumentation: [] configSchema: {}
} }
c.extendNamedProperties LevelSystemSchema # let's have the name be the first property c.extendNamedProperties LevelSystemSchema # let's have the name be the first property
LevelSystemSchema.properties.name.pattern = c.classNamePattern LevelSystemSchema.properties.name.pattern = c.classNamePattern
@ -83,7 +68,6 @@ _.extend LevelSystemSchema.properties,
type: 'string' type: 'string'
format: 'hidden' format: 'hidden'
dependencies: c.array {title: 'Dependencies', description: 'An array of Systems upon which this System depends.', uniqueItems: true}, DependencySchema dependencies: c.array {title: 'Dependencies', description: 'An array of Systems upon which this System depends.', uniqueItems: true}, DependencySchema
propertyDocumentation: c.array {title: 'Property Documentation', description: 'An array of documentation entries for each notable property this System will add to its Level which other Systems might want to also use.'}, PropertyDocumentationSchema
configSchema: _.extend metaschema, {title: 'Configuration Schema', description: 'A schema for validating the arguments that can be passed to this System as configuration.', default: {type: 'object', additionalProperties: false}} configSchema: _.extend metaschema, {title: 'Configuration Schema', description: 'A schema for validating the arguments that can be passed to this System as configuration.', default: {type: 'object', additionalProperties: false}}
official: official:
type: 'boolean' type: 'boolean'

View file

@ -6,7 +6,7 @@ UserSchema = c.object
default: default:
visa: 'Authorized to work in the US' visa: 'Authorized to work in the US'
music: true music: true
name: 'Anoner' name: 'Anonymous'
autocastDelay: 5000 autocastDelay: 5000
emails: {} emails: {}
permissions: [] permissions: []
@ -121,7 +121,7 @@ _.extend UserSchema.properties,
aceConfig: c.object { default: { language: 'python', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }}, aceConfig: c.object { default: { language: 'python', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }},
language: {type: 'string', 'enum': ['python', 'javascript', 'coffeescript', 'clojure', 'lua', 'java', 'io']} language: {type: 'string', 'enum': ['python', 'javascript', 'coffeescript', 'clojure', 'lua', 'java', 'io']}
keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']} keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']} # Deprecated 2016-05-30; now we just always give them 'default'.
invisibles: {type: 'boolean' } invisibles: {type: 'boolean' }
indentGuides: {type: 'boolean' } indentGuides: {type: 'boolean' }
behaviors: {type: 'boolean' } behaviors: {type: 'boolean' }

View file

@ -41,3 +41,22 @@
#join-class-form #join-class-form
.alert, .progress .alert, .progress
margin-top: 20px margin-top: 20px
// Hero display
.current-hero-container
display: flex
justify-content: center
.current-hero-text
font-size: 16pt
.hero-avatar
background-color: #f8f8f8
box-shadow: 0 0 0 1px gray
margin-right: 25px
.current-hero-right-col
display: flex
flex-direction: column
justify-content: space-between
align-items: flex-start

View file

@ -0,0 +1,40 @@
@import "app/styles/style-flat-variables"
#hero-select-modal
.modal-dialog
width: auto
max-width: 900px
.modal-header, .modal-body:not(.secret), .modal-footer
display: flex
flex-direction: column
align-items: center
.modal-footer
margin: 30px
h4
max-width: 500px
.hero-list
display: flex
flex-wrap: wrap
justify-content: center
margin-bottom: -50px
.hero-option
display: flex
flex-direction: column
align-items: center
margin: 0 50px 50px
.hero-avatar
margin: 6px
background-color: #f8f8f8
box-shadow: 0 0 0 1px gray
.current .hero-avatar
box-shadow: 0 0 0 6px gray
.selected .hero-avatar
box-shadow: 0 0 0 6px $gold

View file

@ -1,19 +0,0 @@
#hour-of-code-view
hr
border-top: 1px solid grey
margin: 30px 20px
#site-content-area
padding: 20px 300px
h1
margin-bottom: 40px
p
margin: 20px
h3
margin-top: 50px
ul
margin-bottom: 50px

View file

@ -1,7 +0,0 @@
#student-log-in-modal
#log-in-btn
min-width: 30%
margin-bottom: 10px
.form
margin: 0 25%

View file

@ -1,10 +0,0 @@
#student-sign-up-modal
#sign-up-btn
min-width: 30%
margin-bottom: 10px
.form
margin: 0 25%
.modal-dialog
margin-top: 0

View file

@ -105,6 +105,12 @@
td td
height: 66px height: 66px
.select-all
padding-top: 5px
.checkbox-flat
margin-top: 3px
.enroll-student-button .enroll-student-button
margin-left: 33% margin-left: 33%
margin-left: calc((100% - 120px - 36px) * 0.6) margin-left: calc((100% - 120px - 36px) * 0.6)

View file

@ -0,0 +1,21 @@
#verifier-view
.verifier-row
margin-top: 20px
.alert
padding: 5px
.campaign-mix, .code-language-mix
padding: 5px 20px 5px 5px
input
margin-right: 8px
.test-running
color: orange
.test-success
color: green
.test-failed
color: red

View file

@ -143,7 +143,7 @@
//- Primary auth button //- Primary auth button
#login-button #login-btn
position: absolute position: absolute
top: 186px top: 186px
height: 70px height: 70px

View file

@ -204,6 +204,7 @@ $gameControlMargin: 30px
.tooltip .tooltip
z-index: 2 z-index: 2
pointer-events: none
.tooltip-arrow .tooltip-arrow
display: none display: none

View file

@ -0,0 +1,41 @@
@import "app/styles/mixins"
.hints-view
position: relative
width: 500px // TODO: should be in sync with surface min-width
padding: 10px 20px
border-style: solid
border-image: url(/images/level/popover_border_background.png) 16 12 fill round
border-width: 16px 12px
@include box-shadow(0 0 0 #000)
.close-hint-btn
position: absolute
right: 5px
top: 5px
.glyphicon-remove
position: relative
top: 4px
h1
margin-bottom: 30px
.btn-area
margin-top: 20px
.hint-title
font-size: 18px
text-transform: uppercase
.hint-body
height: 390px
overflow-y: auto
img
width: 100%
.hint-pagination
font-size: 18px
margin-top: 0px
text-transform: uppercase

View file

@ -157,7 +157,7 @@ $UNVEIL_TIME: 1.2s
font-variant: small-caps font-variant: small-caps
text-transform: none text-transform: none
.subscription-required, .course-membership-required .subscription-required, .course-membership-required, .could-not-load
display: none display: none
margin-top: -160px margin-top: -160px
color: black color: black

View file

@ -78,9 +78,6 @@
@include flex-column() @include flex-column()
@include flex-align-content-start() @include flex-align-content-start()
&.no-help
margin-top: 3%
.property-entry-item-group .property-entry-item-group
display: inline-block display: inline-block
min-height: 38px min-height: 38px

View file

@ -29,7 +29,7 @@
span.code-background span.code-background
border-width: 124px 76px 64px 40px border-width: 124px 76px 64px 40px
border-image: url(/images/level/code_editor_background_border.png) 124 76 64 40 fill round border-image: url(/images/level/code_editor_background_border.png) 124 76 64 40 fill stretch
img.code-background img.code-background
display: none display: none

View file

@ -85,27 +85,18 @@
.glyphicon-fullscreen .glyphicon-fullscreen
display: none display: none
.hints-button
float: right
border-style: solid
border-image: url(/images/common/button-background-primary-active.png) 14 20 20 20 fill round
border-width: 7px 10px 10px 10px
color: white
&:hover, &:active
border-image: url(/images/common/button-background-primary-pressed.png) 14 20 20 20 fill round
.thang-avatar-wrapper .thang-avatar-wrapper
border-width: 0 border-width: 0
.method-name-area
margin-left: 10px
margin-top: 10px
text-transform: uppercase
display: inline-block
font-family: $headings-font-family
font-weight: bold
.method-label
font-size: 12px
color: rgb(243, 211, 59)
margin-bottom: -5px
.method-signature
color: white
font-size: 18px
padding: 0
.spell-list-entry-view:not(.spell-tab) .spell-list-entry-view:not(.spell-tab)
cursor: pointer cursor: pointer
@include opacity(0.90) @include opacity(0.90)

View file

@ -265,6 +265,13 @@ $level-resize-transition-time: 0.5s
height: 90px height: 90px
text-align: center text-align: center
.hints-view
position: absolute
top: 10px
bottom: 10px
right: 45%
z-index: 1000000
html.fullscreen-editor html.fullscreen-editor
#level-view #level-view
#fullscreen-editor-background-screen #fullscreen-editor-background-screen

View file

@ -444,7 +444,7 @@ body[lang='ru'], body[lang='uk'], body[lang='bg'], body[lang^='mk'], body[lang='
#footer #footer
background-image: url("/images/pages/home/footer_background.png") background-image: url("/images/pages/home/footer_background.png")
height: 229px height: 229px
margin: -22px auto 0 margin: 65px auto 0
color: white color: white
@media (max-width: $screen-sm-min) @media (max-width: $screen-sm-min)

View file

@ -7,3 +7,7 @@
font-family: Arial, Geneva, sans-serif font-family: Arial, Geneva, sans-serif
padding: 20px padding: 20px
font-weight: bold font-weight: bold
.alert-report
font-size: 20px

View file

@ -139,6 +139,13 @@ block content
small(data-i18n="about.elliot_title") small(data-i18n="about.elliot_title")
br br
li
img(src="/images/pages/about/lisa_small.png").img-thumbnail
.team-bio
h6.label.team-name Lisa Wu
small Marketing Development Rep
br
// Part time / contract // Part time / contract
li li
a(href="http://floor.is/lava/" rel="external") a(href="http://floor.is/lava/" rel="external")

View file

@ -18,7 +18,7 @@ mixin accountLinks
.style-flat .style-flat
block header block header
nav#main-nav.navbar.navbar-default nav#main-nav.navbar.navbar-default
.container-fluid .container-fluid.container
.row .row
.col-lg-12 .col-lg-12
.navbar-header .navbar-header
@ -81,8 +81,6 @@ mixin accountLinks
p If this is showing, you dun goofed p If this is showing, you dun goofed
block footer block footer
#character-lineup.text-center.m-t-3
img(src="/images/pages/home/character_lineup.png")
.container-fluid .container-fluid
#footer.small #footer.small
.container .container

View file

@ -123,7 +123,7 @@ block content
if memberLanguageMap && memberLanguageMap[member.id] if memberLanguageMap && memberLanguageMap[member.id]
span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id]) span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id])
div div
a(href="/user/#{member.id}")= member.get('name') || 'Anoner' a(href="/user/#{member.id}")= member.get('name') || 'Anonymous'
div Level #{member.level()} div Level #{member.level()}
if isOwner && member.id !== clan.get('ownerID') if isOwner && member.id !== clan.get('ownerID')
button.btn.btn-xs.btn-warning.remove-member-btn(data-id="#{member.id}", data-i18n="clans.rem_hero") Remove Hero button.btn.btn-xs.btn-warning.remove-member-btn(data-id="#{member.id}", data-i18n="clans.rem_hero") Remove Hero
@ -220,7 +220,7 @@ block content
if memberLanguageMap && memberLanguageMap[member.id] if memberLanguageMap && memberLanguageMap[member.id]
span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id]) span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id])
td.name-cell td.name-cell
a(href="/user/#{member.id}")= member.get('name') || 'Anoner' a(href="/user/#{member.id}")= member.get('name') || 'Anonymous'
td.level-cell= member.level() td.level-cell= member.level()
td.achievements-cell td.achievements-cell
if memberAchievementsMap && memberAchievementsMap[member.id] if memberAchievementsMap && memberAchievementsMap[member.id]

View file

@ -45,7 +45,7 @@ block content
if view.idNameMap && view.idNameMap[clan.get('ownerID')] if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')] a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else else
a(href="/user/#{clan.get('ownerID')}") Anoner a(href="/user/#{clan.get('ownerID')}") Anonymous
td td
if view.myClanIDs.indexOf(clan.id) < 0 if view.myClanIDs.indexOf(clan.id) < 0
button.btn.btn-success.join-clan-btn(data-id="#{clan.id}", data-i18n="clans.join_clan") Join Clan button.btn.btn-success.join-clan-btn(data-id="#{clan.id}", data-i18n="clans.join_clan") Join Clan
@ -75,7 +75,7 @@ block content
if view.idNameMap && view.idNameMap[clan.get('ownerID')] if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')] a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else else
a(href="/user/#{clan.get('ownerID')}") Anoner a(href="/user/#{clan.get('ownerID')}") Anonymous
td= clan.get('type') td= clan.get('type')
td td
if clan.get('ownerID') !== me.id if clan.get('ownerID') !== me.id

View file

@ -3,11 +3,11 @@ extends /templates/base
// User pages might have some user page specific header, if not remove this // User pages might have some user page specific header, if not remove this
block content block content
.clearfix .clearfix
if user && viewName if view.userData && view.viewName
ol.breadcrumb ol.breadcrumb
li li
a(href="/user/#{user.getSlugOrID()}") #{user.displayName()} a(href="/user/#{view.userData.getSlugOrID()}") #{view.userData.displayName()}
li.active li.active
| #{viewName} | #{view.viewName}
if !user || user.loading if !view.userData || view.userData.loading
| LOADING | LOADING

View file

@ -1,4 +1,5 @@
.row .row
if contributors
for contributor in contributors for contributor in contributors
.col-xs-6.col-md-3 .col-xs-6.col-md-3
.thumbnail .thumbnail

View file

@ -3,7 +3,7 @@
img(src="/images/pages/modal/auth/login-background.png", draggable="false").auth-modal-background img(src="/images/pages/modal/auth/login-background.png", draggable="false").auth-modal-background
h1(data-i18n="login.log_in") h1(data-i18n="login.log_in")
div#close-modal #close-modal
span.glyphicon.glyphicon-remove span.glyphicon.glyphicon-remove
.auth-form-content .auth-form-content
@ -12,23 +12,39 @@
.alert.alert-success .alert.alert-success
span(data-i18n="signup.required") span(data-i18n="signup.required")
#unknown-error-alert.alert.alert-danger.hide(data-i18n="loading_error.unknown")
form.form form.form
.form-group .form-group
label.control-label(for="email") label.control-label(for="username-or-email-input")
span(data-i18n="general.email") span(data-i18n="login.email_or_username")
| : | :
.input-border .input-border
input#email.input-large.form-control(name="email", type="email", value=formValues.email) input#username-or-email-input.input-large.form-control(
name="emailOrUsername"
value=view.previousFormInputs.email
)
.form-group .form-group
div#recover-account-wrapper #recover-account-wrapper
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password")#link-to-recover a#link-to-recover(
data-toggle="coco-modal"
data-target="core/RecoverModal"
data-i18n="login.forgot_password"
)
label.control-label(for="password") label.control-label(for="password")
span(data-i18n="general.password") span(data-i18n="general.password")
| : | :
.input-border .input-border
input#password.input-large.form-control(name="password", type="password", value=formValues.password) input#password-input.input-large.form-control(
name="password"
type="password"
value=view.previousFormInputs.password
)
input.btn.btn-lg.btn-illustrated.btn-block.btn-success#login-button(value=translate("login.log_in"), type="submit") input#login-btn.btn.btn-lg.btn-illustrated.btn-block.btn-success(
value=translate("login.log_in")
type="submit"
)
.wait.secret .wait.secret
h3(data-i18n="login.logging_in") h3(data-i18n="login.logging_in")
@ -39,10 +55,10 @@
// btn.btn.btn-sm.github-login-button#github-login-button // btn.btn.btn-sm.github-login-button#github-login-button
// img(src="/images/pages/modal/auth/github_icon.png") // img(src="/images/pages/modal/auth/github_icon.png")
// | GitHub // | GitHub
#facebook-login-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login button#facebook-login-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false") img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_facebook") span.sign-in-blurb(data-i18n="login.sign_in_with_facebook")
#gplus-login-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login button#gplus-login-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false") img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_gplus") span.sign-in-blurb(data-i18n="login.sign_in_with_gplus")
.gplus-login-wrapper .gplus-login-wrapper

View file

@ -33,10 +33,10 @@
.col-md-6 .col-md-6
.auth-network-logins.text-center .auth-network-logins.text-center
strong(data-i18n="signup.or_sign_up_with") strong(data-i18n="signup.or_sign_up_with")
#facebook-signup-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login button#facebook-signup-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false") img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_facebook") span.sign-in-blurb(data-i18n="login.sign_in_with_facebook")
#gplus-signup-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login button#gplus-signup-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false") img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_gplus") span.sign-in-blurb(data-i18n="login.sign_in_with_gplus")
.gplus-login-wrapper .gplus-login-wrapper

View file

@ -2,7 +2,7 @@ extends /templates/base
block content block content
if !me.isAnonymous() && (me.isTeacher() || view.ownedClassrooms.size()) if !me.isAnonymous() && me.isTeacher()
.alert.alert-danger.text-center .alert.alert-danger.text-center
// DNT: Temporary // DNT: Temporary
h3 ATTENTION TEACHERS: h3 ATTENTION TEACHERS:

View file

@ -2,7 +2,7 @@ extends /templates/base
block content block content
if me.isTeacher() || view.ownedClassrooms.size() if me.isTeacher()
.alert.alert-danger.text-center .alert.alert-danger.text-center
// DNT: Temporary // DNT: Temporary
h3 ATTENTION TEACHERS: h3 ATTENTION TEACHERS:

View file

@ -4,7 +4,7 @@ block content
.container .container
.row.m-y-3 .row.m-y-3
.col-xs-12 .col-xs-12
if me.isTeacher() || view.ownedClassrooms.size() if me.isTeacher()
.alert.alert-danger.text-center .alert.alert-danger.text-center
// DNT: Temporary // DNT: Temporary
h3 ATTENTION TEACHERS: h3 ATTENTION TEACHERS:
@ -40,6 +40,18 @@ block content
.text-center .text-center
h1(data-i18n="courses.welcome_to_page") Welcome to your Courses page! h1(data-i18n="courses.welcome_to_page") Welcome to your Courses page!
.current-hero-container.text-center.row
.hero-avatar
img(src=view.hero.getPortraitURL())
.current-hero-right-col
.semibold.current-hero-text
span.spr(data-i18n="TODO")
| Current Hero:
span.current-hero-name= view.hero.getHeroShortName()
button.change-hero-btn.btn.btn-lg.btn-forest
span(data-i18n="TODO")
| Change Hero
if view.classrooms.size() if view.classrooms.size()
h3.text-uppercase(data-i18n="courses.my_classes") h3.text-uppercase(data-i18n="courses.my_classes")
hr hr
@ -55,7 +67,7 @@ block content
h5 h5
span.spr= classroom.get('name') span.spr= classroom.get('name')
span.spr (#{(classroom.get('aceConfig') || {}).language === 'javascript' ? 'JavaScript' : 'Python'}) span.spr (#{(classroom.get('aceConfig') || {}).language === 'javascript' ? 'JavaScript' : 'Python'})
a(href="/courses/"+classroom.id, data-i18n="courses.view_class") a.view-class-btn(data-classroom-id=classroom.id, data-i18n="courses.view_class")
- var courseInstances = view.courseInstances.where({classroomID: classroom.id}); - var courseInstances = view.courseInstances.where({classroomID: classroom.id});
for courseInstance in courseInstances for courseInstance in courseInstances
@ -65,7 +77,7 @@ block content
h6 h6
span.spr= course.get('name') span.spr= course.get('name')
small small
a(href="/courses/"+courseInstance.get('courseID')+'/'+courseInstance.id, data-i18n="courses.view_levels") a.view-levels-btn(data-course-id=courseInstance.get('courseID'), data-courseinstance-id=courseInstance.id, data-i18n="courses.view_levels")
+course-instance-body(courseInstance, classroom) +course-instance-body(courseInstance, classroom)
.clearfix .clearfix
@ -100,19 +112,19 @@ mixin course-instance-body(courseInstance, classroom)
- var arenaLevel = stats.levels.arena; - var arenaLevel = stats.levels.arena;
if arenaLevel if arenaLevel
- var arenaURL = "/play/ladder/"+arenaLevel.get('slug')+"/course/"+courseInstance.id; - var arenaURL = "/play/ladder/"+arenaLevel.get('slug')+"/course/"+courseInstance.id;
a.btn.btn-burgandy.btn-lg.m-b-1(href=arenaURL) a.play-btn.btn.btn-burgandy.btn-lg.m-b-1(data-href=arenaURL, data-level-slug=arenaLevel.get('slug'), data-event-action="Students Play Arena")
span(data-i18n="courses.play_arena") span(data-i18n="courses.play_arena")
else else
a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete") a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete")
else if stats.levels.next != stats.levels.first else if stats.levels.next != stats.levels.first
- var next = stats.levels.next; - var next = stats.levels.next;
- var levelURL = "/play/level/"+next.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id; - var levelURL = "/play/level/"+next.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-forest.btn-lg.m-b-1(href=levelURL) a.play-btn.btn.btn-forest.btn-lg.m-b-1(data-href=levelURL, data-level-slug=next.get('slug'), data-event-action="Students Continue Course")
span(data-i18n="common.continue") span(data-i18n="common.continue")
else else
- var firstLevel = stats.levels.first; - var firstLevel = stats.levels.first;
- var levelURL = "/play/level/"+firstLevel.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id; - var levelURL = "/play/level/"+firstLevel.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-navy.btn-lg.m-b-1(href=levelURL) a.play-btn.btn.btn-navy.btn-lg.m-b-1(data-href=levelURL, data-level-slug=firstLevel.get('slug'), data-event-action="Students Start Course")
span(data-i18n="courses.start") span(data-i18n="courses.start")
div div

View file

@ -5,6 +5,7 @@ block page_nav
block content block content
if me.isAnonymous() || (!me.isTeacher() && !view.classrooms.size()) if me.isAnonymous() || (!me.isTeacher() && !view.classrooms.size())
.container
.access-restricted.container.text-center.m-y-3 .access-restricted.container.text-center.m-y-3
h5(data-i18n='teacher.access_restricted') h5(data-i18n='teacher.access_restricted')
p(data-i18n='teacher.teacher_account_required') p(data-i18n='teacher.teacher_account_required')
@ -15,6 +16,7 @@ block content
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title") a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out") button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3 .teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account') h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation') p(data-i18n='teacher.teacher_account_explanation')

View file

@ -0,0 +1,27 @@
extends /templates/core/modal-base-flat
block modal-header-content
.text-center
h3(data-i18n="courses.select_your_hero")
h4(data-i18n="courses.select_your_hero_description")
block modal-body-content
.hero-list
if view.heroes.loaded
each hero in view.heroes.models
if hero.get('heroClass') === 'Warrior'
+heroOption(hero)
mixin heroOption(hero)
- var heroID = hero.id
- var selectedState = (state.get('selectedHeroID') === heroID ? 'selected' : (state.get('currentHeroID') === heroID ? 'current' : ''))
.hero-option(data-hero-id=heroID class=selectedState)
.hero-avatar
img(src=hero.getPortraitURL())
.text-h5.hero-name
span= hero.getHeroShortName()
block modal-footer-content
.select-hero-btn.btn.btn-lg.btn-forest
span(data-i18n="courses.select_this_hero")

View file

@ -1,74 +0,0 @@
extends /templates/base
block content
.pull-right
if me.isAnonymous()
a(href="/teachers")
span(data-i18n="courses.teachers_click")
span !
else
a(href="/teachers/classes")
span(data-i18n="courses.teachers_click")
span !
br
h1.text-center(data-i18n="courses.welcome_to_hoc")
#main-content
.well.text-center
if !me.isAnonymous()
p
strong.spr(data-i18n="courses.logged_in_as")
strong= me.get('name') || me.get('email')
p
span.spr(data-i18n="courses.not_you")
a#log-out-link(data-i18n="login.logout")
hr
if !view.lastLevel
p
strong(data-i18n="courses.ready_to_play")
p
button#start-new-game-btn.btn.btn-success.btn-lg(data-i18n="courses.start_new_game")
else
p
strong(data-i18n="courses.welcome_back")
p
button#continue-playing-btn.btn.btn-success.btn-lg(data-i18n="courses.continue_playing")
p
em.spr
span(data-i18n="clans.last_played")
span.spr :
span= view.lastLevel.get('name').replace('Course :', '')
if me.isAnonymous()
p
strong(data-i18n="courses.more_options")
p
button#start-new-game-btn.btn.btn-default.btn-lg(data-i18n="courses.start_new_game")
if me.isAnonymous()
p
span.spr -
span.text-uppercase(data-i18n="general.or")
span.spl -
p
button#log-in-btn.btn.btn-default.btn-lg(data-i18n="login.log_in")
#begin-hoc-area.hide
h2.text-center(data-i18n="common.loading")
.progress.progress-striped.active
.progress-bar(style="width: 100%")
h3.text-center.text-uppercase(data-i18n="courses.play_now_learn_header")
ul
li(data-i18n="courses.play_now_learn_1")
li(data-i18n="courses.play_now_learn_2")
li(data-i18n="courses.play_now_learn_3")
li(data-i18n="courses.play_now_learn_4")

View file

@ -4,6 +4,7 @@ block modal-header-content
.text-center .text-center
h1.modal-title(data-i18n="courses.remove_student1") h1.modal-title(data-i18n="courses.remove_student1")
span.glyphicon.glyphicon-warning-sign.text-danger span.glyphicon.glyphicon-warning-sign.text-danger
p= view.user.get('name', true) + ' - ' + view.user.get('email')
h2(data-i18n="courses.are_you_sure") h2(data-i18n="courses.are_you_sure")
block modal-body-content block modal-body-content

View file

@ -3,10 +3,21 @@ extends /templates/base-flat
block content block content
.access-restricted.container.text-center.m-y-3 .access-restricted.container.text-center.m-y-3
h5(data-i18n='teacher.access_restricted') h5(data-i18n='teacher.access_restricted')
if me.isTeacher()
p(data-i18n='courses.teacher_account_restricted') p(data-i18n='courses.teacher_account_restricted')
a.btn.btn-lg.btn-primary(href="/teachers/classes" data-i18n="new_home.goto_classes") a.btn.btn-lg.btn-primary(href="/teachers/classes" data-i18n="new_home.goto_classes")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out") button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
else
p(data-i18n='courses.account_restricted')
if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
.signup-button.btn.btn-lg.btn-primary-alt(data-i18n="login.sign_up")
else
a.btn.btn-lg.btn-primary(href="/courses/update-account" data-i18n="courses.update_account_update_student")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
if me.isTeacher()
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3 .teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account') h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation') p(data-i18n='teacher.teacher_account_explanation')

View file

@ -1,30 +0,0 @@
extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="login.log_in")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
input#email.input-large.form-control(name="email", type="email")
.form-group
label.control-label(for="password")
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
#errors-alert.alert.alert-danger.hide
.text-center
input#log-in-btn.btn.btn-default(data-i18n="[value]login.log_in", type="submit")
p
a#create-new-account-link(data-i18n="login.signup_switch")
p
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password")
block modal-footer-content

View file

@ -1,46 +0,0 @@
extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="signup.sign_up")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
input#email.input-large.form-control(name="email", type="email")
.help-block(data-i18n="courses.use_school_email")
.form-group
label.control-label(for="name")
span(data-i18n="general.name")
if me.get('name')
input#name.input-large.form-control(name="name", type="text", value="#{me.get('name')}")
else
input#name.input-large.form-control(name="name", type="text", value="", placeholder="e.g. Alex W the Skater")
.help-block(data-i18n="courses.unique_name")
.form-group
label.control-label(for="password")
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
.help-block(data-i18n="courses.pick_something")
.form-group
label.control-label(for="class-code-input")
span(data-i18n="courses.class_code")
input#class-code-input.input-large.form-control(name="classCode", value=view.classCode)
.help-block(data-i18n="courses.optional_ask")
.form-group
label.control-label(for="school-input")
span(data-i18n="signup.school_name")
input#school-input.input-large.form-control(name="schoolName", data-i18n="[placeholder]signup.school_name_placeholder")
.help-block(data-i18n="courses.optional_school")
#errors-alert.alert.alert-danger.hide
.text-center
input#sign-up-btn.btn.btn-default(data-i18n="[value]signup.sign_up", type="submit")
block modal-footer-content

View file

@ -108,6 +108,7 @@ block content
+copyCodes +copyCodes
+addStudentsButton +addStudentsButton
if view.students.length > 0
ul.nav.nav-tabs.m-t-5(role='tablist') ul.nav.nav-tabs.m-t-5(role='tablist')
- var activeTab = state.get('activeTab'); - var activeTab = state.get('activeTab');
li(class=(activeTab === "#students-tab" ? 'active' : '')) li(class=(activeTab === "#students-tab" ? 'active' : ''))
@ -131,6 +132,13 @@ block content
else else
+enrollmentStatusTab +enrollmentStatusTab
else
.text-center.m-t-5.m-b-5
.text-h2
span(data-i18n="teacher.no_students_yet")
.text-h4
span(data-i18n="teacher.try_refreshing")
mixin breadcrumbs mixin breadcrumbs
.breadcrumbs .breadcrumbs
a(data-i18n='teacher.my_classes' href='/teachers/classes') a(data-i18n='teacher.my_classes' href='/teachers/classes')
@ -171,8 +179,8 @@ mixin studentsTab
+bulkAssignControls +bulkAssignControls
table.students-table table.students-table
thead thead
th.checkbox-col.select-all th.checkbox-col.select-all.small.text-center
span Select All span(data-i18n="teacher.select_all")
.checkbox-flat .checkbox-flat
input(type='checkbox' id='checkbox-all-students') input(type='checkbox' id='checkbox-all-students')
label.checkmark(for='checkbox-all-students') label.checkmark(for='checkbox-all-students')
@ -236,7 +244,7 @@ mixin studentRow(student)
div(data-i18n='teacher.remove') div(data-i18n='teacher.remove')
mixin enrollStudentButton(student) mixin enrollStudentButton(student)
a.enroll-student-button.btn.btn-lg.btn-primary(data-classroom-id=view.classroom.id data-user-id=student.id) a.enroll-student-button.btn.btn-lg.btn-primary(data-classroom-id=view.classroom.id data-user-id=student.id data-event-action="Teachers Class Students Enroll Student")
span(data-i18n='teacher.enroll_student') span(data-i18n='teacher.enroll_student')
mixin courseProgressTab mixin courseProgressTab
@ -286,7 +294,7 @@ mixin courseProgressTab
span(data-i18n='TODO') span(data-i18n='TODO')
| Assign Course | Assign Course
else else
.enroll-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id) .enroll-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id data-event-action="Teachers Class Course Enroll Student")
span(data-i18n='TODO') span(data-i18n='TODO')
| Enroll Student | Enroll Student
@ -313,7 +321,7 @@ mixin studentLevelsRow(student)
- var levels = view.classroom.getLevels({courseID: course.id, withoutLadderLevels: true}).models - var levels = view.classroom.getLevels({courseID: course.id, withoutLadderLevels: true}).models
each level, index in levels each level, index in levels
- var progress = state.get('progressData').get({ classroom: view.classroom, course: course, level: level, user: student }) - var progress = state.get('progressData').get({ classroom: view.classroom, course: course, level: level, user: student })
+studentLevelProgressDot(progress, level, index+1) +studentLevelProgressDot(progress, level, index+1, session)
mixin studentCourseProgressDot(progress, levelsTotal, level, label) mixin studentCourseProgressDot(progress, levelsTotal, level, label)
//- TODO: Refactor with TeacherClassesView jade //- TODO: Refactor with TeacherClassesView jade
@ -334,7 +342,7 @@ mixin studentLevelProgressDot(progress, level, levelNumber)
//- TODO: Refactor with TeacherClassesView jade //- TODO: Refactor with TeacherClassesView jade
- dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : ''); - dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : '');
- levelName = level.get('name') - levelName = level.get('name')
- context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber }) - context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber, moment: moment })
.progress-dot.level-progress-dot(class=dotClass, data-html='true', data-title=view.singleStudentLevelProgressDotTemplate(context)) .progress-dot.level-progress-dot(class=dotClass, data-html='true', data-title=view.singleStudentLevelProgressDotTemplate(context))
+progressDotLabel(levelNumber) +progressDotLabel(levelNumber)
@ -418,4 +426,4 @@ mixin enrollmentStatusTab
strong(class= status === 'expired' ? 'text-danger' : '')= view.studentStatusString(student) strong(class= status === 'expired' ? 'text-danger' : '')= view.studentStatusString(student)
td.enroll-col td.enroll-col
if status !== 'enrolled' if status !== 'enrolled'
button.enroll-student-button.btn.btn-navy(data-i18n="teacher.enroll_student", data-user-id=student.id) button.enroll-student-button.btn.btn-navy(data-i18n="teacher.enroll_student", data-user-id=student.id, data-event-action="Teachers Class Enrollment Enroll Student")

View file

@ -10,11 +10,12 @@ block content
p(data-i18n='teacher.teacher_account_required') p(data-i18n='teacher.teacher_account_required')
if me.isAnonymous() if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in') .login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
a.btn.btn-lg.btn-primary-alt(href="/teachers/signup" data-i18n='teacher.create_teacher_account') button.btn.btn-lg.btn-primary-alt.create-teacher-btn(data-event-action="Teachers Classes Create Teacher Account", data-i18n='teacher.create_teacher_account')
else else
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title") button.btn.btn-lg.btn-primary.update-teacher-btn(data-event-action="Teachers Classes Convert Teacher Account", data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out") button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3 .teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account') h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation') p(data-i18n='teacher.teacher_account_explanation')
@ -28,7 +29,7 @@ block content
p p
| We are transitioning to a new improved classroom management system for instructors. | We are transitioning to a new improved classroom management system for instructors.
| Please convert your account to ensure you retain access to your classrooms. | Please convert your account to ensure you retain access to your classrooms.
a.btn.btn-primary.btn-lg(href="/teachers/update-account") Upgrade to teacher account button.btn.btn-primary.btn-lg.update-teacher-btn(data-event-action="Teachers Classes Convert Teacher Account Temp") Upgrade to teacher account
.container .container
h3(data-i18n='teacher.current_classes') h3(data-i18n='teacher.current_classes')
@ -67,9 +68,9 @@ mixin classRow(classroom)
span span
= classroom.get('members').length = classroom.get('members').length
.class-links .class-links
a.text-h6(data-i18n='teacher.view_class' href=('/teachers/classes/' + classroom.id)) a.view-class-btn.text-h6(data-i18n='teacher.view_class' data-classroom-id=classroom.id data-event-action="Teachers Classes View Class Link")
a.edit-classroom.text-h6(data-i18n='teacher.edit_class_settings' data-classroom-id=classroom.id) a.edit-classroom.text-h6(data-i18n='teacher.edit_class_settings' data-classroom-id=classroom.id data-event-action="Teachers Classes Edit Class Started")
a.archive-classroom.text-h6(data-i18n='teacher.archive_class' data-classroom-id=classroom.id) a.archive-classroom.text-h6(data-i18n='teacher.archive_class' data-classroom-id=classroom.id data-event-action="Teachers Classes Archive Class")
.progress-col.col-xs-5 .progress-col.col-xs-5
if classroom.get('members').length == 0 if classroom.get('members').length == 0
@ -77,9 +78,10 @@ mixin classRow(classroom)
else else
each trimCourse, index in classroom.get('courses') || [] each trimCourse, index in classroom.get('courses') || []
- var course = view.courses.get(trimCourse._id); - var course = view.courses.get(trimCourse._id);
if view.courseInstances.findWhere({ classroomID: classroom.id, courseID: course.id })
+progressDot(classroom, course, index) +progressDot(classroom, course, index)
.view-class-arrow.col-xs-1 .view-class-arrow.col-xs-1
a.view-class-arrow-inner.glyphicon.glyphicon-chevron-right(data-classroom-id=classroom.id, href=('/teachers/classes/' + classroom.id)) a.view-class-arrow-inner.glyphicon.glyphicon-chevron-right.view-class-btn(data-classroom-id=classroom.id data-event-action="Teachers Classes View Class Chevron")
mixin addStudentsButton(classroom) mixin addStudentsButton(classroom)

View file

@ -63,7 +63,7 @@ block content
span.spr span.spr
| . | .
span span
= level.get('name') = level.get('name').replace('Course: ', '')
a.play-level-button.btn.btn-lg.btn-primary a.play-level-button.btn.btn-lg.btn-primary
span(data-i18n="courses.play_level") span(data-i18n="courses.play_level")
.clearfix .clearfix
@ -86,10 +86,10 @@ mixin course-info(course)
if view.guideLinks[course.id] if view.guideLinks[course.id]
//- a.btn.btn-primary(href=view.guideLinks[course.id] class=(me.isTeacher() ? '': 'disabled')) //- a.btn.btn-primary(href=view.guideLinks[course.id] class=(me.isTeacher() ? '': 'disabled'))
//- span(data-i18n="courses.print_guide") //- span(data-i18n="courses.print_guide")
a.btn.btn-primary(href=view.guideLinks[course.id].python class=(me.isTeacher() ? '': 'disabled')) a.guide-btn.btn.btn-primary(href=view.guideLinks[course.id].python data-course-id=course.id data-course-name=course.get('name') data-event-action="Classes Guides Guide Python" class=(me.isTeacher() ? '': 'disabled'))
span(data-i18n="courses.view_guide_online") span(data-i18n="courses.view_guide_online")
| &mdash; Python | &mdash; Python
a.btn.btn-primary(href=view.guideLinks[course.id].javascript class=(me.isTeacher() ? '': 'disabled')) a.guide-btn.btn.btn-primary(href=view.guideLinks[course.id].javascript data-course-id=course.id data-course-name=course.get('name') data-event-action="Classes Guides Guide JavaScript" class=(me.isTeacher() ? '': 'disabled'))
span(data-i18n="courses.view_guide_online") span(data-i18n="courses.view_guide_online")
| &mdash; JavaScript | &mdash; JavaScript
else else

View file

@ -11,7 +11,7 @@ ul.user-feedback-list.list-group
em= moment(new Date(feedback.created)).fromNow() em= moment(new Date(feedback.created)).fromNow()
span.spl.spr - span.spl.spr -
a(href="/user/#{feedback.creator}") a(href="/user/#{feedback.creator}")
strong= feedback.creatorName || 'Anoner' strong= feedback.creatorName || 'Anonymous'
if feedback.review if feedback.review
span.spr : span.spr :
span= feedback.review span= feedback.review

View file

@ -2,27 +2,48 @@ extends /templates/base-flat
block content block content
.container .container
div.row(style="margin-top: 20px") div.row.verifier-row
div.col-sm-3 div.col-sm-3
p.alert.alert-success(style="padding: 5px") p.alert.alert-success
| Passed: #{view.passed} | Passed: #{view.passed}
div.col-sm-3 div.col-sm-3
p.alert.alert-warning(style="padding: 5px") p.alert.alert-warning
| Test Problem: #{view.problem} | Test Problem: #{view.problem}
div.col-sm-3 div.col-sm-3
p.alert.alert-danger(style="padding: 5px") p.alert.alert-danger
| Failed: #{view.failed} | Failed: #{view.failed}
div.col-sm-3 div.col-sm-3
p.alert.alert-info(style="padding: 5px") p.alert.alert-info
| To Run: #{view.testCount - view.passed - view.problem - view.failed} | To Run: #{view.testCount - view.passed - view.problem - view.failed}
if view.levelsByCampaign
.form.form-inline
.row
each campaignInfo, campaign in view.levelsByCampaign
.form-group.campaign-mix
- var campaignID = "campaign-" + campaign + "-checkbox";
input(id=campaignID, type="checkbox", checked=campaignInfo.checked, disabled=!!view.tests)
label(for=campaignID)= campaign + ': ' + campaignInfo.levels.length
.row
each codeLanguage in view.codeLanguages
.form-group.code-language-mix
- var codeLanguageID = "code-language-" + codeLanguage.id + "-checkbox";
input(id=codeLanguageID, type="checkbox", checked=codeLanguage.checked, disabled=!!view.tests)
label(for=codeLanguageID)= codeLanguage.id
.pull-right
button.btn.btn-primary#go-button(disabled=!!view.tests) Start Tests
if view.levelsToLoad && !view.tests
.progress
.progress-bar.progress-bar-success(role="progressbar" style="width: #{100*(1 - view.levelsToLoad/view.initialLevelsToLoad)}%")
if view.tests
if view.levelIDs if view.levelIDs
.progress .progress
.progress-bar.progress-bar-success(role="progressbar" style="width: #{100*view.passed/view.testCount}%") .progress-bar.progress-bar-success(role="progressbar" style="width: #{100*view.passed/view.testCount}%")
.progress-bar.progress-bar-warning(role="progressbar" style="width: #{100*view.problem/view.testCount}%") .progress-bar.progress-bar-warning(role="progressbar" style="width: #{100*view.problem/view.testCount}%")
.progress-bar.progress-bar-danger(role="progressbar" style="width: #{100*view.failed/view.testCount}%") .progress-bar.progress-bar-danger(role="progressbar" style="width: #{100*view.failed/view.testCount}%")
each test, id in view.tests each test, id in view.tests
- if (test.state == 'no-solution') - if (test.state == 'no-solution')
- continue; - continue;
@ -35,13 +56,13 @@ block content
a.btn.btn-default(data-target='#verifier-test-' + id, data-toggle="collapse") Toggle a.btn.btn-default(data-target='#verifier-test-' + id, data-toggle="collapse") Toggle
if !test.goals if !test.goals
h2(style='color: orange')= test.level.get('name') h2.test-running= test.level.get('name')
small= ' in ' + test.language + '' small= ' in ' + test.language + ''
else if test.isSuccessful() else if test.isSuccessful()
h2(style='color: green')= test.level.get('name') h2.test-success= test.level.get('name')
small= ' in ' + test.language + '' small= ' in ' + test.language + ''
else else
h2(style='color: red')= test.level.get('name') h2.test-failed= test.level.get('name')
small= ' in ' + test.language + '' small= ' in ' + test.language + ''
div.row(class=(test.isSuccessful() && id > 1 ? 'collapse' : 'collapse in'), id='verifier-test-' + id) div.row(class=(test.isSuccessful() && id > 1 ? 'collapse' : 'collapse in'), id='verifier-test-' + id)
@ -54,26 +75,26 @@ block content
div.col-xs-4.well div.col-xs-4.well
if test.goals if test.goals
if test.frames == test.solution.frameCount if test.frames == test.solution.frameCount
div(style='color: green') ✓ Frames: #{test.frames} div.test-success ✓ Frames: #{test.frames}
else else
div(style='color: red') ✘ Frames: #{test.frames} vs #{test.solution.frameCount} div.test-failed ✘ Frames: #{test.frames} vs #{test.solution.frameCount}
each v,k in test.goals || [] each v,k in test.goals || []
if !test.solution.goals if !test.solution.goals
div(style='color: orange') ? #{k} (#{v.status}) div.test-running ? #{k} (#{v.status})
else if v.status == test.solution.goals[k] else if v.status == test.solution.goals[k]
div(style='color: green') ✓ #{k} (#{v.status}) div.test-success ✓ #{k} (#{v.status})
else else
div(style='color: red') ✘ #{k} (#{v.status} vs #{test.solution.goals[k]}) div.test-failed ✘ #{k} (#{v.status} vs #{test.solution.goals[k]})
else else
h3 Pending.... h3 Pending....
if test.error if test.error
pre(style="color: red") #{test.error} pre.test-faile #{test.error}
if test.userCodeProblems.length if test.userCodeProblems.length
h4(style="color: red") User Code Problems h4.test-failed User Code Problems
pre(style="color: red") #{JSON.stringify(test.userCodeProblems, null, 2)} pre.test-failed #{JSON.stringify(test.userCodeProblems, null, 2)}
else else
h1 Loading Level... h1 Loading Level...

View file

@ -3,98 +3,38 @@ extends /templates/base-flat
mixin box mixin box
.well.text-center .well.text-center
if me.isAnonymous() == true if me.isAnonymous() == true
if ['home-legacy','home-legacy-left'].indexOf(view.variation) != -1
h6#classroom-edition-header(data-i18n="new_home.classroom_edition") h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
div div
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.im_a_teacher") a.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-event-action="Homepage Click Teacher Button CTA", data-i18n="new_home.im_a_teacher")
div div
a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.im_a_student") a.student-btn.btn.btn-forest.btn-lg.btn-block(href="/courses", data-event-action="Homepage Click Student Button CTA", data-i18n="new_home.im_a_student")
h6#learn-to-code-header(data-i18n="new_home.learn_to_code") h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
a.btn.btn-gold.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now") a.btn.btn-gold.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Play Now CTA", data-i18n="new_home.play_now")
else if ['home-teachers','home-dropdowns'].indexOf(view.variation) != -1
h5#educator-header(data-i18n="new_home.teachers")
p.small(data-i18n="new_home.class_in_box")
if view.variation == 'home-dropdowns'
div.form-group
h6.control-label(data-i18n="new_home.role")
select.form-control#request-form-role
option(value="", data-i18n="new_home.form_select_role")
option(data-i18n="courses.teacher", value="Teacher")
option(data-i18n="teachers_quote.tech_coordinator", value="Technology coordinator")
option(data-i18n="teachers_quote.advisor", value="Advisor")
option(data-i18n="teachers_quote.principal", value="Principal")
option(data-i18n="teachers_quote.superintendent", value="Superintendent")
option(data-i18n="teachers_quote.parent", value="Parent")
div.form-group
h6.control-label(data-i18n="new_home.student_count")
select.form-control#request-form-range
option(value="", data-i18n="new_home.form_select_range")
option 1-10
option 11-50
option 51-100
option 101-200
option 201-500
option 501-1000
option 1000+
div
button.btn.btn-forest.btn-lg.btn-block.request-demo(href="#",data-i18n="new_home.get_started")
else
div
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.get_started")
if view.variation == 'home-teachers'
h5#students-header(data-i18n="new_home.students")
div
button.join-class.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
div
a.btn.btn-default.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
else
h6#students-header(data-i18n="new_home.students_and_players")
div
a.btn.btn-primary.btn-lg.play-btn.btn-block(href=view.playURL, data-i18n="new_home.play_now")
else
h5#educator-header(data-i18n="new_home.start_playing_for_free")
div
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
div
button.join-class.btn.btn-default.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
h6#classroom-edition-header(style="padding-top: 20px",data-i18n="new_home.teachers_and_educators")
p.small(data-i18n="new_home.class_in_box")
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.get_started")
if ['home-teachers','home-dropdowns','home-play-for-free'].indexOf(view.variation) != -1
p.small
span(data-i18n="new_home.have_an_account")
span &nbsp;
a.login-button(data-i18n="login.log_in", href="#")
else else
h6#classroom-edition-header(data-i18n="new_home.logged_in_as") h6#classroom-edition-header(data-i18n="new_home.logged_in_as")
p.small #{me.get("email")} p.small #{me.get("email")}
if me.isTeacher() if me.isTeacher()
div div
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.goto_classes") button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-event-action="Homepage Click My Classes CTA", data-i18n="new_home.goto_classes")
div div
if view.isTeacherWithDemo if view.isTeacherWithDemo
h6(data-i18n="new_home.check_out_wiki") h6(data-i18n="new_home.check_out_wiki")
a.btn.btn-primary.btn-lg.btn-block(href="https://sites.google.com/a/codecombat.com/teacher-guides/course-guides", data-i18n="nav.educator_wiki") button.wiki-btn.btn.btn-primary.btn-lg.btn-block(data-event-action="Homepage Click Educator Wiki CTA", data-i18n="nav.educator_wiki")
else else
h6(data-i18n="new_home.want_coco") h6(data-i18n="new_home.want_coco")
a.btn.btn-primary.btn-lg.btn-block(href=view.demoRequestURL, data-i18n="new_home.get_started") button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo CTA", data-i18n="new_home.request_demo")
else if me.justPlaysCourses() else if me.justPlaysCourses()
div div
a.btn.btn-forest.btn-lg.btn-block(href=view.playURL, data-i18n="courses.continue_playing") a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Classroom Continue Playing CTA", data-i18n="courses.continue_playing")
div div
a.btn.btn-primary.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.view_progress") a.btn.btn-primary.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage View Progress CTA", data-i18n="new_home.view_progress")
else else
div div
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="courses.continue_playing") a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Campaign Continue Playing CTA", data-i18n="courses.continue_playing")
div div
a.btn.btn-primary.btn-lg.btn-block(href="/user/#{me.getSlugOrID()}", data-i18n="new_home.view_profile") a.btn.btn-primary.btn-lg.btn-block.profile-btn(href=view.playURL, data-event-action="Homepage View Profile CTA", data-i18n="new_home.view_profile")
p.small p.small
@ -113,13 +53,6 @@ block content
.container .container
.row.hidden-xs.top-spacer(style="height: 160px") .row.hidden-xs.top-spacer(style="height: 160px")
.row.hidden-sm.hidden-xs .row.hidden-sm.hidden-xs
case view.variation
when 'home-legacy-left'
.col-lg-3.col-md-4
+box
.col-lg-7.col-lg-offset-2.col-md-8
h1(data-i18n="new_home.slogan")
default
.col-lg-7.col-md-8 .col-lg-7.col-md-8
h1(data-i18n="new_home.slogan") h1(data-i18n="new_home.slogan")
.col-lg-3.col-lg-offset-2.col-md-4 .col-lg-3.col-lg-offset-2.col-md-4
@ -130,7 +63,6 @@ block content
.col .col
div(style="margin: auto; max-width: 300px") div(style="margin: auto; max-width: 300px")
+box +box
.row#learn-more-row .row#learn-more-row
.col-xs-12.text-center .col-xs-12.text-center
a#learn-more-link a#learn-more-link
@ -281,11 +213,11 @@ block content
if view.isTeacherWithDemo if view.isTeacherWithDemo
h4(data-i18n="new_home.get_started_subtitle") h4(data-i18n="new_home.get_started_subtitle")
div div
a.btn.btn-primary.btn-lg(href="/teachers/classes", data-i18n="new_home.setup_a_class") button.btn.btn-primary.btn-lg.setup-class-btn(data-event-action="Homepage Setup Class", data-i18n="new_home.setup_a_class")
else else
h4(data-i18n="new_home.request_demo_subtitle") h4(data-i18n="new_home.request_demo_subtitle")
div div
a.btn.btn-primary.btn-lg(href=view.demoRequestURL, data-i18n="new_home.request_demo") button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo", data-i18n="new_home.request_demo")
if me.isAnonymous() if me.isAnonymous()
.have-an-account .have-an-account
span.spr(data-i18n="new_home.have_an_account") span.spr(data-i18n="new_home.have_an_account")
@ -374,10 +306,10 @@ block content
h3(data-i18n="new_home.run_class") h3(data-i18n="new_home.run_class")
if view.isTeacherWithDemo if view.isTeacherWithDemo
div div
a.btn.btn-primary.btn-lg(href="/teachers/classes", data-i18n="new_home.setup_a_class") button.btn.btn-primary.btn-lg.setup-class-btn(data-event-action="Homepage Setup Class Page Bottom", data-i18n="new_home.setup_a_class")
else else
div div
a.btn.btn-primary.btn-lg(href=view.demoRequestURL, data-i18n="new_home.request_demo") button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo Page Bottom", data-i18n="new_home.request_demo")
if me.isAnonymous() if me.isAnonymous()
.have-an-account .have-an-account
span.spr(data-i18n="new_home.have_an_account") span.spr(data-i18n="new_home.have_an_account")

View file

@ -1,16 +1,21 @@
- var league = view.options.league
.row .row
for team, teamIndex in teams for team, teamIndex in view.teams
div.column.col-md-6 div.column.col-md-6
div(id="histogram-display-#{team.name}", class="histogram-display", data-team-name=team.name) div(id="histogram-display-#{team.name}", class="histogram-display", data-team-name=team.name)
table.table.table-bordered.table-condensed.table-hover.ladder-table(data-team=team.id) table.table.table-bordered.table-condensed.table-hover.ladder-table(data-team=team.id)
- var levelType = view.level.get('type', true)
- var topSessions = team.leaderboard.topPlayers.models;
- var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous');
- if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10);
thead thead
tr tr
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2) th(colspan=levelType == 'hero-ladder' ? 3 : 2)
th(colspan=4, style="color: #{team.primaryColor}") th(colspan=4, style="color: #{team.primaryColor}")
span= team.displayName span= team.displayName
span.spl(data-i18n="ladder.leaderboard") Leaderboard span.spl(data-i18n="ladder.leaderboard") Leaderboard
tr tr
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2) th(colspan=levelType == 'hero-ladder' ? 3 : 2)
th(data-i18n="general.score") Score th(data-i18n="general.score") Score
th(data-i18n="general.name").name-col-cell Name th(data-i18n="general.name").name-col-cell Name
th(data-i18n="general.when") When th(data-i18n="general.when") When
@ -19,22 +24,19 @@
.glyphicon.glyphicon-eye-open .glyphicon.glyphicon-eye-open
tbody tbody
- var topSessions = team.leaderboard.topPlayers.models;
- var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous');
- if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10);
for session, rank in topSessions for session, rank in topSessions
- var myRow = session.get('creator') == me.id - var myRow = session.get('creator') == me.id
- var sessionStats = league ? (_.find(session.get('leagues') || [], {leagueID: league.id}) || {}).stats || {} : session.attributes; - var sessionStats = league ? (_.find(session.get('leagues') || [], {leagueID: league.id}) || {}).stats || {} : session.attributes;
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id) tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=capitalize(session.get('submittedCodeLanguage'))) td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=view.capitalize(session.get('submittedCodeLanguage')))
if level.get('type', true) == 'hero-ladder' if levelType == 'hero-ladder'
td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)") td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)")
td.rank-cell= rank + 1 td.rank-cell= rank + 1
td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100) td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100)
td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous" td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '') td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight! span(data-i18n="ladder.fight") Fight!
td.spectate-cell.iconic-cell td.spectate-cell.iconic-cell
.glyphicon.glyphicon-eye-open .glyphicon.glyphicon-eye-open
@ -47,14 +49,14 @@
- var sessionStats = league ? (_.find(session.get('leagues'), {leagueID: league.id}) || {}).stats || {} : session.attributes; - var sessionStats = league ? (_.find(session.get('leagues'), {leagueID: league.id}) || {}).stats || {} : session.attributes;
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id) tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)") td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)")
if level.get('type', true) == 'hero-ladder' if levelType == 'hero-ladder'
td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)") td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)")
td.rank-cell= session.rank td.rank-cell= session.rank
td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100) td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100)
td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous" td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '') td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight! span(data-i18n="ladder.fight") Fight!
td.spectate-cell.iconic-cell td.spectate-cell.iconic-cell
.glyphicon.glyphicon-eye-open .glyphicon.glyphicon-eye-open
@ -77,8 +79,8 @@
if !onGPlus if !onGPlus
button.btn.btn-sm.connect-google-plus(data-i18n="community.gplus") Google+ button.btn.btn-sm.connect-google-plus(data-i18n="community.gplus") Google+
if friends.length if view.friends
for friend in friends for friend in view.friends
p.friend-entry p.friend-entry
img(src=friend.imageSource).img-thumbnail img(src=friend.imageSource).img-thumbnail
span= friend.creatorName + ' (' + friend.name + ')' span= friend.creatorName + ' (' + friend.name + ')'
@ -87,7 +89,7 @@
span : span :
span= friend.team span= friend.team
br br
a(href="/play/level/#{level.get('slug') || level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.level.get('slug') || view.level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight! span(data-i18n="ladder.fight") Fight!
else if onFacebook || onGPlus else if onFacebook || onGPlus

View file

@ -4,10 +4,10 @@ block content
div#ladder-top div#ladder-top
if leagueType == 'course' && view.course.id if view.leagueType === 'course' && view.course
#course-header #course-header
#course-details-link #course-details-link
a(href="/courses/"+view.course.id+"/"+view.league.id) a(href="/courses/{#view.course.id}/{#view.league.id}")
span.glyphicon.glyphicon-arrow-left span.glyphicon.glyphicon-arrow-left
span.spl Levels span.spl Levels
@ -16,21 +16,20 @@ block content
span= view.course.get('name') span= view.course.get('name')
span.spl - Arena span.spl - Arena
div#level-column div#level-column
if levelDescription if view.levelDescription
div!= levelDescription div!= view.levelDescription
if leagueType === 'clan' if view.leagueType === 'clan'
h1.league-header h1.league-header
a(href="/clans/#{league.id}")= league.get('name') a(href="/clans/#{view.league.id}")= view.league.get('name')
span.spl(data-i18n="ladder.league") League span.spl(data-i18n="ladder.league") League
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
.tournament-blurb .tournament-blurb
h2 h2
span(data-i18n="ladder.tournament_ended") Tournament ended span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft} | #{view.tournamentTimeLeft}
p p
span(data-i18n="ladder.tournament_blurb") Write code, collect gold, build armies, crush foes, win prizes, and upgrade your career in our $40,000 Greed tournament! Check out the details span(data-i18n="ladder.tournament_blurb") Write code, collect gold, build armies, crush foes, win prizes, and upgrade your career in our $40,000 Greed tournament! Check out the details
| |
@ -63,11 +62,11 @@ block content
a(href="http://aws.amazon.com/") a(href="http://aws.amazon.com/")
img(src=base + "aws.png") img(src=base + "aws.png")
if level.get('name') == 'Criss-Cross' if view.level.get('name') == 'Criss-Cross'
.tournament-blurb .tournament-blurb
h2 h2
span(data-i18n="ladder.tournament_ended") Tournament ended span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft} | #{view.tournamentTimeLeft}
p p
span(data-i18n="ladder.tournament_blurb_criss_cross") Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details span(data-i18n="ladder.tournament_blurb_criss_cross") Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details
| |
@ -86,13 +85,13 @@ block content
a(href="http://discourse.codecombat.com/") the forum a(href="http://discourse.codecombat.com/") the forum
| and discuss your strategies, your triumphs, and your turmoils. | and discuss your strategies, your triumphs, and your turmoils.
if level.get('name') == 'Zero Sum' && !league if view.level.get('name') == 'Zero Sum' && !view.league
.tournament-blurb .tournament-blurb
h2 h2
span(data-i18n="ladder.tournament_ended") Tournament ended span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft} | #{view.tournamentTimeLeft}
//span(data-i18n="ladder.tournament_started") , started //span(data-i18n="ladder.tournament_started") , started
//| #{tournamentTimeElapsed} //| #{view.tournamentTimeElapsed}
p p
span(data-i18n="ladder.tournament_blurb_zero_sum") Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer. The tournament began on Friday, March 27 and will run until Monday, April 6 at 5PM PDT. Compete for fun and glory! Check out the details span(data-i18n="ladder.tournament_blurb_zero_sum") Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer. The tournament began on Friday, March 27 and will run until Monday, April 6 at 5PM PDT. Compete for fun and glory! Check out the details
| |
@ -109,14 +108,14 @@ block content
a(href="http://discourse.codecombat.com/") the forum a(href="http://discourse.codecombat.com/") the forum
| and discuss your strategies, your triumphs, and your turmoils. | and discuss your strategies, your triumphs, and your turmoils.
if level.get('name') == 'Ace of Coders' if view.level.get('name') == 'Ace of Coders'
.tournament-blurb .tournament-blurb
h2 h2
//span(data-i18n="ladder.tournament_ends") Tournament ends //span(data-i18n="ladder.tournament_ends") Tournament ends
span(data-i18n="ladder.tournament_ended") Tournament ended span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft} | #{view.tournamentTimeLeft}
span(data-i18n="ladder.tournament_started") , started span(data-i18n="ladder.tournament_started") , started
| #{tournamentTimeElapsed} | #{view.tournamentTimeElapsed}
p p
span(data-i18n="ladder.tournament_blurb_ace_of_coders") Battle it out in the frozen glacier in this domination-style mirror match! The tournament began on Wednesday, September 16 and will run until Wednesday, October 14 at 5PM PDT. Check out the details span(data-i18n="ladder.tournament_blurb_ace_of_coders") Battle it out in the frozen glacier in this domination-style mirror match! The tournament began on Wednesday, September 16 and will run until Wednesday, October 14 at 5PM PDT. Check out the details
| |
@ -135,7 +134,8 @@ block content
div#columns.row div#columns.row
div.column.col-md-2 div.column.col-md-2
for team in teams if view.teams
for team in view.teams
div.column.col-md-4 div.column.col-md-4
a(class="play-button btn btn-illustrated btn-block btn-lg " + (team.id == 'ogres' ? 'btn-primary' : 'btn-danger'), data-team=team.id) a(class="play-button btn btn-illustrated btn-block btn-lg " + (team.id == 'ogres' ? 'btn-primary' : 'btn-danger'), data-team=team.id)
span(data-i18n="play.play_as") Play As span(data-i18n="play.play_as") Play As
@ -143,9 +143,9 @@ block content
span= team.displayName span= team.displayName
div.column.col-md-2 div.column.col-md-2
if leagueType !== 'course' if view.leagueType !== 'course'
.spectate-button-container .spectate-button-container
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center a(href="/play/spectate/#{view.level.get('slug')}" + (view.league ? "?league=" + view.league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
span(data-i18n="play.spectate") Spectate span(data-i18n="play.spectate") Spectate
ul.nav.nav-pills ul.nav.nav-pills
@ -154,16 +154,16 @@ block content
if !me.get('anonymous') if !me.get('anonymous')
li li
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
if leagueType !== 'course' if view.leagueType !== 'course'
li li
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
li li
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
li li
a(href="#rules", data-toggle="tab", data-i18n="ladder.rules") Rules a(href="#rules", data-toggle="tab", data-i18n="ladder.rules") Rules
if level.get('name') == 'Greed' || level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' || level.get('name') == 'Ace of Coders' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum' || view.level.get('name') == 'Ace of Coders'
li li
a(href="#winners", data-toggle="tab", data-i18n="ladder.winners") Winners a(href="#winners", data-toggle="tab", data-i18n="ladder.winners") Winners
@ -174,7 +174,7 @@ block content
#my-matches-tab-view #my-matches-tab-view
.tab-pane.well#simulate .tab-pane.well#simulate
#simulate-tab-view #simulate-tab-view
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
.tab-pane.well#prizes .tab-pane.well#prizes
h1(data-i18n="ladder_prizes.title") Tournament Prizes h1(data-i18n="ladder_prizes.title") Tournament Prizes
p p
@ -740,7 +740,7 @@ block content
| - $50 | - $50
td $50 td $50
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
.tab-pane.well#rules .tab-pane.well#rules
h1(data-i18n="ladder.tournament_rules") Tournament Rules h1(data-i18n="ladder.tournament_rules") Tournament Rules
h2 General h2 General
@ -802,7 +802,7 @@ block content
a(href="http://discourse.codecombat.com/") Discourse forum a(href="http://discourse.codecombat.com/") Discourse forum
| . | .
if level.get('name') == 'Greed' || level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
.tab-pane.well#winners .tab-pane.well#winners
h1(data-i18n="ladder.winners") Winners h1(data-i18n="ladder.winners") Winners
@ -810,71 +810,71 @@ block content
thead thead
tr tr
th(data-i18n="ladder_prizes.rank") Rank th(data-i18n="ladder_prizes.rank") Rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
th th
th Human th Human
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
th Human wins/losses/ties th Human wins/losses/ties
else else
th Human score th Human score
if level.get('name') == 'Zero Sum' if view.level.get('name') == 'Zero Sum'
th th
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
th th
th Ogre th Ogre
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
th Ogre wins/losses/ties th Ogre wins/losses/ties
else else
th Ogre score th Ogre score
th(data-i18n="play.spectate") Spectate th(data-i18n="play.spectate") Spectate
tbody tbody
each human, index in winners.humans each human, index in view.winners.humans
- var ogre = winners.ogres[index] - var ogre = view.winners.ogres[index]
tr tr
td= human.rank td= human.rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + human.codeLanguage + "_icon.png)" title=_.string.capitalize(human.codeLanguage)) td.code-language-cell(style="background-image: url(/images/common/code_languages/" + human.codeLanguage + "_icon.png)" title=_.string.capitalize(human.codeLanguage))
td= human.name td= human.name
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
td td
span.win= human.wins span.win= human.wins
| - | -
span.loss= human.losses span.loss= human.losses
| - | -
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
span.tie= 377 - human.wins - human.losses span.tie= 377 - human.wins - human.losses
else if level.get('name') == 'Zero Sum' else if view.level.get('name') == 'Zero Sum'
span.tie= 108 - human.wins - human.losses span.tie= 108 - human.wins - human.losses
else else
td td
span= Math.round(100 * human.score) span= Math.round(100 * human.score)
if ogre if ogre
if level.get('name') == 'Zero Sum' if view.level.get('name') == 'Zero Sum'
td= ogre.rank td= ogre.rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + ogre.codeLanguage + "_icon.png)" title=_.string.capitalize(ogre.codeLanguage)) td.code-language-cell(style="background-image: url(/images/common/code_languages/" + ogre.codeLanguage + "_icon.png)" title=_.string.capitalize(ogre.codeLanguage))
td= ogre.name td= ogre.name
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum' if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
td td
span.win= ogre.wins span.win= ogre.wins
| - | -
span.loss= ogre.losses span.loss= ogre.losses
| - | -
if level.get('name') == 'Greed' if view.level.get('name') == 'Greed'
span.tie= 407 - ogre.wins - ogre.losses span.tie= 407 - ogre.wins - ogre.losses
else if level.get('name') == 'Zero Sum' else if view.level.get('name') == 'Zero Sum'
span.tie= Math.max(0, 163 - ogre.wins - ogre.losses) span.tie= Math.max(0, 163 - ogre.wins - ogre.losses)
else else
td td
span= Math.round(100 * ogre.score) span= Math.round(100 * ogre.score)
td td
a(href="/play/spectate/" + level.get('slug') + "?session-one=" + human.sessionID + "&session-two=" + ogre.sessionID, data-i18n="ladder.watch_battle") Watch the battle a(href="/play/spectate/" + view.level.get('slug') + "?session-one=" + human.sessionID + "&session-two=" + ogre.sessionID, data-i18n="ladder.watch_battle") Watch the battle
else else
td td
td td
td td
if level.get('name') == 'Ace of Coders' if view.level.get('name') == 'Ace of Coders'
.tab-pane.well#winners .tab-pane.well#winners
h1(data-i18n="ladder.winners") Winners h1(data-i18n="ladder.winners") Winners
@ -888,7 +888,7 @@ block content
th Losses th Losses
th(data-i18n="play.spectate") Spectate th(data-i18n="play.spectate") Spectate
tbody tbody
each player in winners.humans each player in view.winners.humans
tr tr
td= player.rank td= player.rank
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + player.codeLanguage + "_icon.png)" title=_.string.capitalize(player.codeLanguage)) td.code-language-cell(style="background-image: url(/images/common/code_languages/" + player.codeLanguage + "_icon.png)" title=_.string.capitalize(player.codeLanguage))
@ -899,6 +899,6 @@ block content
span.loss= player.losses span.loss= player.losses
td td
if player.team == "ogres" if player.team == "ogres"
a(href="/play/spectate/" + level.get('slug') + "?session-one=55df8c9207d920b7e4262f33" + "&session-two=" + player.sessionID, data-i18n="ladder.watch_battle") Watch the battle a(href="/play/spectate/" + view.level.get('slug') + "?session-one=55df8c9207d920b7e4262f33" + "&session-two=" + player.sessionID, data-i18n="ladder.watch_battle") Watch the battle
else else
a(href="/play/spectate/" + level.get('slug') + "?session-one=" + player.sessionID + "&session-two=55e1d23686c019bc47b640fe", data-i18n="ladder.watch_battle") Watch the battle a(href="/play/spectate/" + view.level.get('slug') + "?session-one=" + player.sessionID + "&session-two=55e1d23686c019bc47b640fe", data-i18n="ladder.watch_battle") Watch the battle

View file

@ -9,81 +9,81 @@ block modal-body-content
h4.language-selection(data-i18n="ladder.select_your_language") Select your language! h4.language-selection(data-i18n="ladder.select_your_language") Select your language!
.form-group.select-group .form-group.select-group
select#tome-language(name="language") select#tome-language(name="language")
for option in languages for option in view.languages
option(value=option.id selected=(language === option.id))= option.name option(value=option.id selected=(view.language === option.id))= option.name
div#noob-view.secret div#noob-view.secret
a(href="/play/level/#{levelID}-tutorial" + (league ? "?league=" + league.id : "")).btn.btn-success.btn-block.btn-lg a(href="/play/level/#{view.levelID}-tutorial" + (view.options.league ? "?league=" + view.options.league.id : "")).btn.btn-success.btn-block.btn-lg
p p
strong(data-i18n="ladder.tutorial_play") Play Tutorial strong(data-i18n="ladder.tutorial_play") Play Tutorial
span(data-i18n="ladder.tutorial_recommended") Recommended if you've never played before span(data-i18n="ladder.tutorial_recommended") Recommended if you've never played before
span.btn.btn-primary.btn-block.btn-lg#skip-tutorial-button(data-i18n="ladder.tutorial_skip") Skip Tutorial span.btn.btn-primary.btn-block.btn-lg#skip-tutorial-button(data-i18n="ladder.tutorial_skip") Skip Tutorial
div#normal-view div#normal-view
if tutorialLevelExists if view.tutorialLevelExists
p.tutorial-suggestion p.tutorial-suggestion
strong(data-i18n="ladder.tutorial_not_sure") Not sure what's going on? strong(data-i18n="ladder.tutorial_not_sure") Not sure what's going on?
| |
a(href="/play/level/#{levelID}-tutorial" + (league ? "?league=" + league.id : ""), data-i18n="ladder.tutorial_play_first") Play the tutorial first. a(href="/play/level/#{view.levelID}-tutorial" + (view.options.league ? "?league=" + view.options.league.id : ""), data-i18n="ladder.tutorial_play_first") Play the tutorial first.
a(href="/play/level/#{levelID}?team=#{teamID}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.levelID}?team=#{view.team}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option div.play-option
img(src=myPortrait).my-icon.only-one img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_tutorial.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one img(src="/images/pages/play/ladder/#{view.team}_ladder_tutorial.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=genericPortrait).opponent-icon img(src=view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_tutorial.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_tutorial.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one div.my-name.name-label.only-one
span= myName span= view.myName
div.opponent-name.name-label div.opponent-name.name-label
span(data-i18n="ladder.simple_ai") span(data-i18n="ladder.simple_ai")
//span.code-language(style="background-image: url(/images/common/code_languages/javascript_small.png)") //span.code-language(style="background-image: url(/images/common/code_languages/javascript_small.png)")
div.difficulty div.difficulty
span(data-i18n="ladder.warmup") Warmup span(data-i18n="ladder.warmup") Warmup
if challengers.easy if view.challengers && view.challengers.easy
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.easy.sessionID}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.easy.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.easy-option div.play-option.easy-option
img(src=myPortrait).my-icon.only-one img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_easy.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one img(src="/images/pages/play/ladder/#{view.team}_ladder_easy.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.easy.opponentImageSource||genericPortrait).opponent-icon img(src=view.challengers.easy.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_easy.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_easy.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one div.my-name.name-label.only-one
span= myName span= view.myName
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.easy.opponentName span= view.challengers.easy.opponentName
if challengers.easy.codeLanguage if view.challengers.easy.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.easy.codeLanguage + "_small.png)") span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.easy.codeLanguage}_small.png)")
div.difficulty div.difficulty
span(data-i18n="general.easy") Easy span(data-i18n="general.easy") Easy
if challengers.medium if view.challengers && view.challengers.medium
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.medium.sessionID}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.medium.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.medium-option div.play-option.medium-option
img(src=myPortrait).my-icon.only-one img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_medium.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one img(src="/images/pages/play/ladder/#{view.team}_ladder_medium.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.medium.opponentImageSource||genericPortrait).opponent-icon img(src=view.challengers.medium.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_medium.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_medium.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one div.my-name.name-label.only-one
span= myName span= view.myName
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.medium.opponentName span= view.challengers.medium.opponentName
if challengers.medium.codeLanguage if view.challengers.medium.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.medium.codeLanguage + "_small.png)") span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.medium.codeLanguage}_small.png)")
div.difficulty div.difficulty
span(data-i18n="general.medium") Medium span(data-i18n="general.medium") Medium
if challengers.hard if view.challengers && view.challengers.hard
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.hard.sessionID}" + (league ? "&league=" + league.id : "")) a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.hard.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.hard-option div.play-option.hard-option
img(src=myPortrait).my-icon.only-one img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_hard.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one img(src="/images/pages/play/ladder/#{view.team}_ladder_hard.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.hard.opponentImageSource||genericPortrait).opponent-icon img(src=view.challengers.hard.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_hard.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_hard.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one div.my-name.name-label.only-one
span= myName span= view.myName
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.hard.opponentName span= view.challengers.hard.opponentName
if challengers.hard.codeLanguage if view.challengers.hard.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.hard.codeLanguage + "_small.png)") span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.hard.codeLanguage}_small.png)")
div.difficulty div.difficulty
span(data-i18n="general.hard") Hard span(data-i18n="general.hard") Hard

View file

@ -12,7 +12,7 @@ for player in view.players
.player-gold .player-gold
.gold-icon .gold-icon
.gold-value .gold-value
.player-name= player.name || 'Anoner' .player-name= player.name || 'Anonymous'
.player-health .player-health
.health-icon .health-icon
.health-bar-container .health-bar-container

View file

@ -0,0 +1,21 @@
button.close-hint-btn.btn.btn-illustrated.btn-danger
span.glyphicon.glyphicon-remove
h1.text-center.hint-title
span= view.state.get('hintsTitle')
.hint-body
!= view.getProcessedHint()
.row.btn-area
.col-md-4
if view.state.get('hintIndex') > 0
button.previous-btn.btn.btn-illustrated.pull-left(data-i18n="about.previous")
.col-md-4
h2.text-center.hint-pagination #{view.state.get('hintIndex')+1} / #{view.hintsState.get('total')}
.col-md-4
if view.state.get('hintIndex') < view.hintsState.get('total') - 1
button.next-btn.btn.btn-illustrated.pull-right(data-i18n="about.next")
.clearfix

View file

@ -25,6 +25,9 @@
.progress-bar.progress-bar-success .progress-bar.progress-bar-success
.rim .rim
.could-not-load
span(data-i18n="loading_error.could_not_load") Error loading from server
.subscription-required .subscription-required
span(data-i18n="subscribe.subscription_required_to_play") You'll need a subscription to play this level. span(data-i18n="subscribe.subscription_required_to_play") You'll need a subscription to play this level.
button.start-subscription-button.btn.btn-lg.btn-warning(data-i18n="subscribe.subscribe") Subscribe button.start-subscription-button.btn.btn-lg.btn-warning(data-i18n="subscribe.subscribe") Subscribe

View file

@ -1,5 +1,5 @@
.modal-header .modal-header
#close-modal.well.well-sm.well-parchment(data-dismiss="modal") #close-modal.btn.well.well-sm.well-parchment(data-dismiss="modal")
span.glyphicon.glyphicon-remove span.glyphicon.glyphicon-remove
.well.well-sm.well-parchment .well.well-sm.well-parchment
h1(data-i18n="play_level.victory_new_item") h1(data-i18n="play_level.victory_new_item")

View file

@ -1,5 +1,5 @@
.modal-header .modal-header
#close-modal.well.well-sm.well-parchment(data-dismiss="modal") #close-modal.btn.well.well-sm.well-parchment(data-dismiss="modal")
span.glyphicon.glyphicon-remove span.glyphicon.glyphicon-remove
.well.well-sm.well-parchment .well.well-sm.well-parchment
h1(data-i18n='play_level.level_complete') h1(data-i18n='play_level.level_complete')
@ -36,9 +36,9 @@
h3.text-uppercase h3.text-uppercase
span(data-i18n='play_level.next_level') span(data-i18n='play_level.next_level')
span : span :
h2.text-uppercase= i18n(view.nextLevel.attributes, 'name') h2.text-uppercase= i18n(view.nextLevel.attributes, 'name').replace('Course: ', '')
p= i18n(view.nextLevel.attributes, 'description') div!= view.nextLevelDescription
.row .row
.col-sm-5.col-sm-offset-2 .col-sm-5.col-sm-offset-2

View file

@ -0,0 +1,36 @@
div
span.code-palette-background
if view.entryGroupSlugs
// Non-hero; group by entry groups, or maybe nothing.
ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : ''))
each slug, group in view.entryGroupSlugs
li(class=group == "this" || slug == "available-spells" ? "active" : "")
a(data-toggle="pill", data-target='#palette-tab-' + slug)
h4= view.entryGroupNames[group]
.tab-content
each slug, group in view.entryGroupSlugs
div(id="palette-tab-" + slug, class="tab-pane nano" + (group == "this" || slug == view.defaultGroupSlug ? " active" : ""))
div(class="properties properties-" + slug + " nano-content")
else if view.tabs
// Hero; group by items, but also include tabs
ul(class="nav nav-pills multiple-tabs")
li.active
a(data-toggle="pill", data-target="#palette-tab-this")
h4= view.thisName
each entries, tab in view.tabs
li
a(data-toggle="pill", data-target='#palette-tab-' + _.string.slugify(tab))
h4= tab
.tab-content
div#palette-tab-this.tab-pane.active
.properties.properties-this
each entries, tab in tabs
div(id="palette-tab-" + _.string.slugify(tab), class="tab-pane")
div(class="properties properties-" + _.string.slugify(tab))
else
// Hero; group by items, no tabs.
br
.properties.properties-this

View file

@ -9,10 +9,6 @@ if includeSpellList
.thang-avatar-placeholder .thang-avatar-placeholder
.method-name-area
.method-label(data-i18n="play_level.tome_current_method") Current Method
.method-signature #{methodSignature}
.spell-tool-buttons .spell-tool-buttons
.btn.btn-small.btn-illustrated.btn-warning.reload-code(data-i18n="[title]play_level.tome_reload_method", title="Reload original code for this method") .btn.btn-small.btn-illustrated.btn-warning.reload-code(data-i18n="[title]play_level.tome_reload_method", title="Reload original code for this method")
.glyphicon.glyphicon-repeat .glyphicon.glyphicon-repeat
@ -27,4 +23,8 @@ if includeSpellList
.btn.btn-small.btn-illustrated.beautify-code(title=beautifyShortcutVerbose) .btn.btn-small.btn-illustrated.beautify-code(title=beautifyShortcutVerbose)
.glyphicon.glyphicon-magnet .glyphicon.glyphicon-magnet
if view.hintsState && view.hintsState.get('total') > 0
.btn.btn-small.btn-illustrated.hints-button
span(data-i18n="play_level.hints")
.clearfix .clearfix

View file

@ -1,37 +0,0 @@
span.code-palette-background
if entryGroupSlugs
// Non-hero; group by entry groups, or maybe nothing.
ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : ''))
each slug, group in entryGroupSlugs
li(class=group == "this" || slug == "available-spells" ? "active" : "")
a(data-toggle="pill", data-target='#palette-tab-' + slug)
h4= entryGroupNames[group]
.tab-content
each slug, group in entryGroupSlugs
div(id="palette-tab-" + slug, class="tab-pane nano" + (group == "this" || slug == defaultGroupSlug ? " active" : ""))
div(class="properties properties-" + slug + " nano-content")
else if tabs
// Hero; group by items, but also include tabs
ul(class="nav nav-pills multiple-tabs")
li.active
a(data-toggle="pill", data-target="#palette-tab-this")
h4= thisName
each entries, tab in tabs
li
a(data-toggle="pill", data-target='#palette-tab-' + _.string.slugify(tab))
h4= tab
.tab-content
div#palette-tab-this.tab-pane.active
.properties.properties-this
each entries, tab in tabs
div(id="palette-tab-" + _.string.slugify(tab), class="tab-pane")
div(class="properties properties-" + _.string.slugify(tab))
else
// Hero; group by items, no tabs.
if showsHelp
button.btn.btn-sm.btn-info.banner#spell-palette-help-button(data-i18n="common.help")
.properties.properties-this
else
.properties.properties-this.no-help

View file

@ -26,14 +26,6 @@
h3(data-i18n="options.editor_config_title") Editor Configuration h3(data-i18n="options.editor_config_title") Editor Configuration
.form-group.select-group
label.control-label(for="option-key-bindings", data-i18n="options.editor_config_keybindings_label") Key Bindings
select#option-key-bindings.form-control(name="keyBindings")
option(value="default", selected=(aceConfig.keyBindings === "default"), data-i18n="options.editor_config_keybindings_default") Default (Ace)
option(value="vim", selected=(aceConfig.keyBindings === "vim")) Vim
option(value="emacs", selected=(aceConfig.keyBindings === "emacs")) Emacs
span.help-block(data-i18n="options.editor_config_keybindings_description") Adds additional shortcuts known from the common editors.
.form-group.checkbox .form-group.checkbox
label(for="option-live-completion") label(for="option-live-completion")
input#option-live-completion(name="liveCompletion", type="checkbox", checked=aceConfig.liveCompletion) input#option-live-completion(name="liveCompletion", type="checkbox", checked=aceConfig.liveCompletion)

View file

@ -49,6 +49,8 @@ if view.showAds()
button.btn.btn-lg.btn-warning.banner.header-font#stop-real-time-playback-button(title="Stop real-time playback", data-i18n="play_level.skip") Skip button.btn.btn-lg.btn-warning.banner.header-font#stop-real-time-playback-button(title="Stop real-time playback", data-i18n="play_level.skip") Skip
.hints-view.hide
#level-footer-shadow #level-footer-shadow
#level-footer-background #level-footer-background

View file

@ -1,3 +1,10 @@
mixin timePlayed()
if session.get('playtime') > 0
.small-details.nowrap
span.spr(data-i18n='teacher.time_played')
| Played for
span= moment.duration({ seconds: session.get('playtime') }).humanize()
if completed if completed
.small-details.nowrap .small-details.nowrap
span= levelNumber span= levelNumber
@ -7,6 +14,7 @@ if completed
span.spr(data-i18n='teacher.completed') span.spr(data-i18n='teacher.completed')
| Completed | Completed
span= new Date(dateFirstCompleted).toLocaleString() span= new Date(dateFirstCompleted).toLocaleString()
+timePlayed
//- .small-details //- .small-details
//- i(data-i18n='teacher.click_to_view_solution') //- i(data-i18n='teacher.click_to_view_solution')
//- | click to view solution //- | click to view solution
@ -19,6 +27,7 @@ else if started
span.spr(data-i18n='teacher.last_played') span.spr(data-i18n='teacher.last_played')
| Last played | Last played
span= new Date(lastPlayed).toLocaleString() span= new Date(lastPlayed).toLocaleString()
+timePlayed
//- .small-details //- .small-details
//- i(data-i18n='teacher.click_to_view_progress') //- i(data-i18n='teacher.click_to_view_progress')
//- | click to view progress //- | click to view progress

View file

@ -14,6 +14,7 @@ block content
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title") a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out") button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3 .teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account') h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation') p(data-i18n='teacher.teacher_account_explanation')

View file

@ -11,6 +11,20 @@ ol.breadcrumb
.container-fluid .container-fluid
.row .row
.col-md-8 .col-md-8
#failure-reports
for report in view.failureReports
.alert.alert-danger.alert-report
ul.suite-list
for description in report.suiteDescriptions
li= description
li
strong ... #{report.testDescription}
hr
ol.error-list
for message in report.failMessages
li
strong= message
#test-wrapper.well #test-wrapper.well
#testing-area #testing-area

View file

@ -9,24 +9,25 @@ block append content
a(href="/account", data-i18n="nav.account") a(href="/account", data-i18n="nav.account")
li.active(data-i18n="nav.profile") li.active(data-i18n="nav.profile")
if user if view.user
- var playerLevel = view.user.level()
- var emails = view.user.getEnabledEmails()
.vertical-buffer .vertical-buffer
.row .row
.left-column .left-column
.profile-wrapper .profile-wrapper
img.picture(src="#{user.getPhotoURL(150)}" alt="") img.picture(src="#{view.user.getPhotoURL(150)}" alt="")
div.profile-info div.profile-info
h3.name= user.get('name') h3.name= view.user.get('name')
if favoriteLanguage if view.favoriteLanguage
div.extra-info div.extra-info
span(data-i18n="user.favorite_prefix") Favorite language is span(data-i18n="user.favorite_prefix") Favorite language is
strong.favorite-language= favoriteLanguage strong.favorite-language= view.favoriteLanguage
span(data-i18n="user.favorite_postfix") . span(data-i18n="user.favorite_postfix") .
if playerLevel if playerLevel
div.extra-info div.extra-info
span.spr(data-i18n="general.player_level") Level span.spr(data-i18n="general.player_level") Level
strong= playerLevel strong= playerLevel
- var emails = user.getEnabledEmails()
// TODO: fix this, use some other method for finding contributor classes other than email settings, since they're private... Maybe achievements? // TODO: fix this, use some other method for finding contributor classes other than email settings, since they're private... Maybe achievements?
if emails if emails
ul.contributor-categories ul.contributor-categories
@ -64,24 +65,24 @@ block append content
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
h3.panel-title(data-i18n="clans.clans") Clans h3.panel-title(data-i18n="clans.clans") Clans
if (!clans) if (!view.clanModels)
.panel-body .panel-body
p(data-i18n="common.loading") p(data-i18n="common.loading")
else if (clans.length) else if (view.clanModels.length)
table.table table.table
tr tr
th.col-xs-4(data-i18n="clans.name") Name th.col-xs-4(data-i18n="clans.name") Name
th.col-xs-4(data-i18n="clans.chieftain") Chieftain th.col-xs-4(data-i18n="clans.chieftain") Chieftain
th.col-xs-4(data-i18n="play.heroes") Heroes th.col-xs-4(data-i18n="play.heroes") Heroes
each clan in clans each clan in view.clanModels
tr tr
td td
a(href="/clans/#{clan.id}")= clan.get('name') a(href="/clans/#{clan.id}")= clan.get('name')
td td
if idNameMap && idNameMap[clan.get('ownerID')] if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= idNameMap[clan.get('ownerID')] a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else else
a(href="/user/#{clan.get('ownerID')}") Anoner a(href="/user/#{clan.get('ownerID')}") Anonymous
td= clan.get('members').length td= clan.get('members').length
else else
.panel-body .panel-body
@ -90,17 +91,17 @@ block append content
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
h3.panel-title(data-i18n="user.singleplayer_title") Singleplayer Levels h3.panel-title(data-i18n="user.singleplayer_title") Singleplayer Levels
if (!singlePlayerSessions) if (!view.singlePlayerSessions)
.panel-body .panel-body
p(data-i18n="common.loading") Loading... p(data-i18n="common.loading") Loading...
else if (singlePlayerSessions.length) else if (view.singlePlayerSessions.length)
table.table table.table
tr tr
th.col-xs-4(data-i18n="resources.level") Level th.col-xs-4(data-i18n="resources.level") Level
th.col-xs-4(data-i18n="user.last_played") Last Played th.col-xs-4(data-i18n="user.last_played") Last Played
th.col-xs-4(data-i18n="user.status") Status th.col-xs-4(data-i18n="user.status") Status
- var count = 0 - var count = 0
each session, index in singlePlayerSessions each session, index in view.singlePlayerSessions
if session.get('levelName') if session.get('levelName')
tr(class=count > 4 ? 'hide' : '') tr(class=count > 4 ? 'hide' : '')
- count++; - count++;
@ -120,16 +121,16 @@ block append content
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
h3.panel-title(data-i18n="user.multiplayer_title") Multiplayer Levels h3.panel-title(data-i18n="user.multiplayer_title") Multiplayer Levels
if (!multiPlayerSessions) if (!view.multiPlayerSessions)
.panel-body .panel-body
p(data-i18n="common.loading") Loading... p(data-i18n="common.loading") Loading...
else if (multiPlayerSessions.length) else if (view.multiPlayerSessions.length)
table.table table.table
tr tr
th.col-xs-4(data-i18n="resources.level") Level th.col-xs-4(data-i18n="resources.level") Level
th.col-xs-4(data-i18n="user.last_played") Last Played th.col-xs-4(data-i18n="user.last_played") Last Played
th.col-xs-4(data-i18n="general.score") Score th.col-xs-4(data-i18n="general.score") Score
each session, index in multiPlayerSessions each session, index in view.multiPlayerSessions
tr(class=index > 4 ? 'hide' : '') tr(class=index > 4 ? 'hide' : '')
td td
- var posturl = '' - var posturl = ''
@ -140,7 +141,7 @@ block append content
td= parseInt(session.get('totalScore') * 100) td= parseInt(session.get('totalScore') * 100)
else else
td(data-i18n="user.status_unfinished") Unfinished td(data-i18n="user.status_unfinished") Unfinished
if multiPlayerSessions.length > 4 if view.multiPlayerSessions.length > 4
.panel-footer .panel-footer
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more") button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")
else else
@ -149,10 +150,10 @@ block append content
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
h3.panel-title(data-i18n="user.achievements_title") Achievements h3.panel-title(data-i18n="user.achievements_title") Achievements
if ! earnedAchievements if ! view.earnedAchievements
.panel-body .panel-body
p(data-i18n="common.loading") Loading... p(data-i18n="common.loading") Loading...
else if ! earnedAchievements.length else if ! view.earnedAchievements.length
.panel-body .panel-body
p(data-i18n="user.no_achievements") No achievements earned so far. p(data-i18n="user.no_achievements") No achievements earned so far.
else else
@ -161,7 +162,7 @@ block append content
th.col-xs-4(data-i18n="achievements.achievement") Achievement th.col-xs-4(data-i18n="achievements.achievement") Achievement
th.col-xs-4(data-i18n="achievements.last_earned") Last Earned th.col-xs-4(data-i18n="achievements.last_earned") Last Earned
th.col-xs-4(data-i18n="achievements.amount_achieved") Amount th.col-xs-4(data-i18n="achievements.amount_achieved") Amount
each achievement, index in earnedAchievements.models each achievement, index in view.earnedAchievements.models
tr(class=index > 4 ? 'hide' : '') tr(class=index > 4 ? 'hide' : '')
td= achievement.get('achievementName') td= achievement.get('achievementName')
td= moment(achievement.get('changed')).format("MMMM Do YYYY") td= moment(achievement.get('changed')).format("MMMM Do YYYY")
@ -169,6 +170,6 @@ block append content
td= achievement.get('achievedAmount') td= achievement.get('achievedAmount')
else else
td td
if earnedAchievements.length > 4 if view.earnedAchievements.length > 4
.panel-footer .panel-footer
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more") button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")

View file

@ -8,12 +8,7 @@ module.exports = class AboutView extends RootView
logoutRedirectURL: false logoutRedirectURL: false
events: events:
'click #mission-link': 'onClickMissionLink' 'click #fixed-nav a': 'onClickFixedNavLink'
'click #team-link': 'onClickTeamLink'
'click #community-link': 'onClickCommunityLink'
'click #story-link': 'onClickStoryLink'
'click #jobs-link': 'onClickJobsLink'
'click #contact-link': 'onClickContactLink'
'click .screen-thumbnail': 'onClickScreenThumbnail' 'click .screen-thumbnail': 'onClickScreenThumbnail'
'click #carousel-left': 'onLeftPressed' 'click #carousel-left': 'onLeftPressed'
'click #carousel-right': 'onRightPressed' 'click #carousel-right': 'onRightPressed'
@ -23,6 +18,8 @@ module.exports = class AboutView extends RootView
'left': 'onLeftPressed' 'left': 'onLeftPressed'
'esc': 'onEscapePressed' 'esc': 'onEscapePressed'
getTitle: -> return $.i18n.t('nav.about')
afterRender: -> afterRender: ->
super(arguments...) super(arguments...)
@$('#fixed-nav').affix({ @$('#fixed-nav').affix({
@ -42,29 +39,21 @@ module.exports = class AboutView extends RootView
keyboard: false keyboard: false
}) })
onClickMissionLink: (event) -> afterInsert: ->
event.preventDefault() # scroll to the current hash, once everything in the browser is set up
@scrollToLink('#mission') f = =>
return if @destroyed
link = $(document.location.hash)
if link.length
@scrollToLink(document.location.hash, 0)
_.delay(f, 100)
onClickTeamLink: (event) -> onClickFixedNavLink: (event) ->
event.preventDefault() event.preventDefault() # prevent default page scroll
@scrollToLink('#team') link = $(event.target).closest('a')
target = link.attr('href')
onClickCommunityLink: (event) -> history.replaceState(null, null, "about#{target}") # update hash without triggering page scroll
event.preventDefault() @scrollToLink(target)
@scrollToLink('#community')
onClickStoryLink: (event) ->
event.preventDefault()
@scrollToLink('#story')
onClickJobsLink: (event) ->
event.preventDefault()
@scrollToLink('#jobs')
onClickContactLink: (event) ->
event.preventDefault()
@scrollToLink('#contact')
onRightPressed: (event) -> onRightPressed: (event) ->
# Special handling, otherwise after you click the control, keyboard presses move the slide twice # Special handling, otherwise after you click the control, keyboard presses move the slide twice

Some files were not shown because too many files have changed in this diff Show more