Merge remote-tracking branch 'codecombat/master'

This commit is contained in:
Robin Yang 2016-01-22 14:12:43 -08:00
commit 750e22ae05
51 changed files with 812 additions and 1142 deletions

BIN
app/assets/docs/CodeCombatCoursesGettingStartedGuide.pdf Normal file → Executable file

Binary file not shown.

Binary file not shown.

View file

@ -47,6 +47,10 @@
(window,document,"script","51a79585ee207206390002a2"); (window,document,"script","51a79585ee207206390002a2");
</script> </script>
<!-- start Mixpanel --><script type="text/javascript">(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" ");
for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]);
mixpanel.init("e71a4e60db7e1dc5e685be96776280f9");</script><!-- end Mixpanel -->
<script src="https://checkout.stripe.com/checkout.js"></script> <script src="https://checkout.stripe.com/checkout.js"></script>
<!-- IE9 doesn't support defer attribute: https://github.com/h5bp/lazyweb-requests/issues/42 --> <!-- IE9 doesn't support defer attribute: https://github.com/h5bp/lazyweb-requests/issues/42 -->

View file

@ -64,7 +64,7 @@ module.exports = class Tracker
for userTrait in ['email', 'anonymous', 'dateCreated', 'name', 'testGroupNumber', 'gender', 'lastLevel', 'siteref', 'ageRange'] for userTrait in ['email', 'anonymous', 'dateCreated', 'name', 'testGroupNumber', 'gender', 'lastLevel', 'siteref', 'ageRange']
traits[userTrait] ?= me.get(userTrait) traits[userTrait] ?= me.get(userTrait)
console.log 'Would identify', traits if debugAnalytics console.log 'Would identify', me.id, traits if debugAnalytics
return unless @isProduction and not me.isAdmin() return unless @isProduction and not me.isAdmin()
# Errorception # Errorception
@ -76,19 +76,29 @@ module.exports = class Tracker
__insp?.push ['identify', me.id] __insp?.push ['identify', me.id]
__insp?.push ['tagSession', traits] __insp?.push ['tagSession', traits]
# Mixpanel
# https://mixpanel.com/help/reference/javascript
mixpanel.identify(me.id)
mixpanel.register(traits)
trackPageView: -> trackPageView: ->
name = Backbone.history.getFragment() name = Backbone.history.getFragment()
console.log "Would track analytics pageview: '/#{name}'" if debugAnalytics url = "/#{name}"
console.log "Would track analytics pageview: #{url}" 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()
# Google Analytics # Google Analytics
# https://developers.google.com/analytics/devguides/collection/analyticsjs/pages # https://developers.google.com/analytics/devguides/collection/analyticsjs/pages
ga? 'send', 'pageview', "/#{name}" ga? 'send', 'pageview', url
trackEvent: (action, properties={}) => # Mixpanel
mixpanelIncludes = ['courses', 'courses/purchase', 'courses/teachers', 'courses/students', 'schools', 'teachers', 'teachers/freetrial']
mixpanel.track('page viewed', 'page name' : name, url : url) if name in mixpanelIncludes
trackEvent: (action, properties={}, includeIntegrations=[]) =>
@trackEventInternal action, _.cloneDeep properties unless me?.isAdmin() and @isProduction @trackEventInternal action, _.cloneDeep properties unless me?.isAdmin() and @isProduction
console.log 'Tracking external analytics event:', action, properties if debugAnalytics console.log 'Tracking external analytics event:', action, properties, includeIntegrations if debugAnalytics
return unless me and @isProduction and not me.isAdmin() return unless me and @isProduction and not me.isAdmin()
# Google Analytics # Google Analytics
@ -105,6 +115,10 @@ module.exports = class Tracker
# http://www.inspectlet.com/docs#tagging # http://www.inspectlet.com/docs#tagging
__insp?.push ['tagSession', action: action, properies: properties] __insp?.push ['tagSession', action: action, properies: properties]
# Mixpanel
# Only log explicit events for now
mixpanel.track(action, properties) if 'Mixpanel' in includeIntegrations
trackEventInternal: (event, properties) => trackEventInternal: (event, properties) =>
# Skipping heavily logged actions we don't use internally # Skipping heavily logged actions we don't use internally
unless event in ['Simulator Result', 'Started Level Load', 'Finished Level Load'] unless event in ['Simulator Result', 'Started Level Load', 'Finished Level Load']

View file

@ -42,6 +42,7 @@ module.exports = FacebookHandler = class FacebookHandler extends CocoClass
FB.api('/me', {fields: 'email,last_name,first_name,gender'}, @onReceiveMeInfo) FB.api('/me', {fields: 'email,last_name,first_name,gender'}, @onReceiveMeInfo)
onReceiveMeInfo: (r) => onReceiveMeInfo: (r) =>
console.log "Got Facebook user info:", r
unless r.email unless r.email
console.error('could not get data, since no email provided') console.error('could not get data, since no email provided')
return return

View file

@ -15,7 +15,7 @@ module.exports = class Label extends CocoClass
@sprite = options.sprite @sprite = options.sprite
@camera = options.camera @camera = options.camera
@layer = options.layer @layer = options.layer
@style = options.style ? Label.STYLE_SAY @style = options.style ? (@sprite?.thang?.labelStyle || Label.STYLE_SAY)
console.error @toString(), 'needs a sprite.' unless @sprite console.error @toString(), 'needs a sprite.' unless @sprite
console.error @toString(), 'needs a camera.' unless @camera console.error @toString(), 'needs a camera.' unless @camera
console.error @toString(), 'needs a layer.' unless @layer console.error @toString(), 'needs a layer.' unless @layer

View file

@ -684,7 +684,10 @@ module.exports = Lank = class Lank extends CocoClass
return unless @thang return unless @thang
blurb = if @thang.health <= 0 then null else @thang.sayMessage # Dead men tell no tales blurb = if @thang.health <= 0 then null else @thang.sayMessage # Dead men tell no tales
blurb = null if blurb in ['For Thoktar!', 'Bones!', 'Behead!', 'Destroy!', 'Die, humans!'] # Let's just hear, not see, these ones. blurb = null if blurb in ['For Thoktar!', 'Bones!', 'Behead!', 'Destroy!', 'Die, humans!'] # Let's just hear, not see, these ones.
labelStyle = if /Hero Placeholder/.test(@thang.id) then Label.STYLE_DIALOGUE else Label.STYLE_SAY if /Hero Placeholder/.test(@thang.id)
labelStyle = Label.STYLE_DIALOGUE
else
labelStyle = @thang.labelStyle ? Label.STYLE_SAY
@addLabel 'say', labelStyle if blurb @addLabel 'say', labelStyle if blurb
if @labels.say?.setText blurb if @labels.say?.setText blurb
@notifySpeechUpdated blurb: blurb @notifySpeechUpdated blurb: blurb

View file

@ -990,8 +990,10 @@
getting_started_3: "You'll see student's progress below as they sign up and join your class." getting_started_3: "You'll see student's progress below as they sign up and join your class."
additional_resources: "Additional Resources" additional_resources: "Additional Resources"
additional_resources_1_pref: "Download/print our" additional_resources_1_pref: "Download/print our"
additional_resources_1_mid: "Course 1 Teacher's Guide" additional_resources_1_mid: "Course 1" # {change}
additional_resources_1_suff: "explanations and solutions to each level." additional_resources_1_mid2: "and"
additional_resources_1_mid3: "Course 2"
additional_resources_1_suff: "teacher's guides with solutions for each level." # {change}
additional_resources_2_pref: "Complete our" additional_resources_2_pref: "Complete our"
additional_resources_2_suff: "to get two free enrollments for the rest of our paid courses." additional_resources_2_suff: "to get two free enrollments for the rest of our paid courses."
additional_resources_3_pref: "Visit our" additional_resources_3_pref: "Visit our"
@ -1000,6 +1002,9 @@
additional_resources_4_pref: "Check out our" additional_resources_4_pref: "Check out our"
additional_resources_4_mid: "Schools Page" additional_resources_4_mid: "Schools Page"
additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings." additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings."
educator_wiki_pref: "Or check out our new"
educator_wiki_mid: "educator wiki"
educator_wiki_suff: "to browse the guide online."
your_classes: "Your Classes" your_classes: "Your Classes"
no_classes: "No classes yet!" no_classes: "No classes yet!"
create_new_class1: "create new class" create_new_class1: "create new class"
@ -1032,6 +1037,7 @@
ambassador_title: "Ambassador" ambassador_title: "Ambassador"
ambassador_title_description: "(Support)" ambassador_title_description: "(Support)"
ambassador_summary: "Tame our forum users and provide direction for those with questions. Our ambassadors represent CodeCombat to the world." ambassador_summary: "Tame our forum users and provide direction for those with questions. Our ambassadors represent CodeCombat to the world."
teacher_title: "Teacher"
editor: editor:
main_title: "CodeCombat Editors" main_title: "CodeCombat Editors"
@ -1188,6 +1194,7 @@
ambassador_join_note_strong: "Note" ambassador_join_note_strong: "Note"
ambassador_join_note_desc: "One of our top priorities is to build multiplayer where players having difficulty solving levels can summon higher level wizards to help them. This will be a great way for ambassadors to do their thing. We'll keep you posted!" ambassador_join_note_desc: "One of our top priorities is to build multiplayer where players having difficulty solving levels can summon higher level wizards to help them. This will be a great way for ambassadors to do their thing. We'll keep you posted!"
ambassador_subscribe_desc: "Get emails on support updates and multiplayer developments." ambassador_subscribe_desc: "Get emails on support updates and multiplayer developments."
teacher_subscribe_desc: "Get emails on updates and announcements for teachers."
changes_auto_save: "Changes are saved automatically when you toggle checkboxes." changes_auto_save: "Changes are saved automatically when you toggle checkboxes."
diligent_scribes: "Our Diligent Scribes:" diligent_scribes: "Our Diligent Scribes:"
powerful_archmages: "Our Powerful Archmages:" powerful_archmages: "Our Powerful Archmages:"

View file

@ -660,7 +660,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
password_tab: "Contraseña" password_tab: "Contraseña"
emails_tab: "Correos" emails_tab: "Correos"
admin: "Admin" admin: "Admin"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "Click aquí para administrar tu subscripción"
new_password: "Nueva Contraseña" new_password: "Nueva Contraseña"
new_password_verify: "Verificar" new_password_verify: "Verificar"
type_in_email: "Ingrese su correo electrónico para confirmar la eliminación de su cuenta." type_in_email: "Ingrese su correo electrónico para confirmar la eliminación de su cuenta."
@ -865,26 +865,26 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
topics: "Tópicos" topics: "Tópicos"
hours_content: "Horas de contenido:" hours_content: "Horas de contenido:"
get_free: "Obtenga curso GRATIS" get_free: "Obtenga curso GRATIS"
# enroll_paid: "Enroll Students in Paid Courses" enroll_paid: "Anotar estudiantes en cursos pagos."
you_have1: "Tiene" you_have1: "Tiene"
# you_have2: "unused paid enrollments" # you_have2: "unused paid enrollments"
# use_one: "Use 1 paid enrollment for" # use_one: "Use 1 paid enrollment for"
# use_multiple: "Use paid enrollments for the following students:" # use_multiple: "Use paid enrollments for the following students:"
# already_enrolled: "already enrolled" # already_enrolled: "already enrolled"
# licenses_remaining: "licenses remaining:" licenses_remaining: "licencias restantes:"
# insufficient_enrollments: "insufficient paid enrollments" # insufficient_enrollments: "insufficient paid enrollments"
# enroll_students: "Enroll Students" # enroll_students: "Enroll Students"
# get_enrollments: "Get More Enrollments" # get_enrollments: "Get More Enrollments"
# change_language: "Change Course Language" change_language: "Cambiar idioma del curso"
keep_using: "Seguir Usando" keep_using: "Seguir Usando"
switch_to: "Cambiar a" switch_to: "Cambiar a"
greetings: "Saludos!" greetings: "Saludos!"
learn_p: "Aprender Python" learn_p: "Aprender Python"
learn_j: "Aprender JavaScript" learn_j: "Aprender JavaScript"
# language_cannot_change: "Language cannot be changed once students join a class." language_cannot_change: "El lenguaje no puede ser cambiado una vez que el estudiante ingreso a la clase."
# back_classrooms: "Back to my classrooms" back_classrooms: "Volver a mis aulas"
# back_courses: "Back to my courses" back_courses: "Volver a mis cursos"
# edit_details: "Edit class details" edit_details: "Editar detallesde clase"
# enrolled_courses: "enrolled in paid courses:" # enrolled_courses: "enrolled in paid courses:"
# purchase_enrollments: "Purchase Enrollments" # purchase_enrollments: "Purchase Enrollments"
remove_student: "Quitar alumno" remove_student: "Quitar alumno"
@ -898,14 +898,14 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
play_campaign_description: "Estas listo para dar el siguiente paso! Explora cientos de desafiantes niveles, aprende habilidades avanzadas de programación, y compite en arenas multijugador!" play_campaign_description: "Estas listo para dar el siguiente paso! Explora cientos de desafiantes niveles, aprende habilidades avanzadas de programación, y compite en arenas multijugador!"
create_account_title: "Crea una Cuenta" create_account_title: "Crea una Cuenta"
create_account_description: "Registrate gratis con una cuenta CodeCombat y obten acceso a mas niveles, mas habilidades de programacion, y mas diversion!" create_account_description: "Registrate gratis con una cuenta CodeCombat y obten acceso a mas niveles, mas habilidades de programacion, y mas diversion!"
# preview_campaign_title: "Preview Campaign" preview_campaign_title: "Previsualizar campaña"
# preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account." # preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account."
arena: "Arena" arena: "Arena"
# arena_soon_title: "Arena Coming Soon" arena_soon_title: "Arena pronto disponible"
# arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of" # arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
not_enrolled1: "No inscrito" not_enrolled1: "No inscrito"
# not_enrolled2: "Ask your teacher to enroll you in the next course." not_enrolled2: "Preguntale a tu maestro para anotarte en el proximo curso."
# next_course: "Next Course" next_course: "Próximo curso"
coming_soon1: "Próximamente" coming_soon1: "Próximamente"
coming_soon2: "Estamos trabajando duro para hacer mas cursos para ti!" coming_soon2: "Estamos trabajando duro para hacer mas cursos para ti!"
available_levels: "Niveles Disponibles" available_levels: "Niveles Disponibles"
@ -917,62 +917,62 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# play_now_learn_2: "while loops to solve pesky puzzles" # play_now_learn_2: "while loops to solve pesky puzzles"
play_now_learn_3: "cadenas & variables para personalizar acciones" play_now_learn_3: "cadenas & variables para personalizar acciones"
play_now_learn_4: "como vencer a un ogro (habilidades importantes en la vida!)" play_now_learn_4: "como vencer a un ogro (habilidades importantes en la vida!)"
# welcome_to_page: "Welcome to your Courses page!" welcome_to_page: "¡Bienvenido a tu página de cursose!"
# completed_hoc: "Amazing! You've completed the Hour of Code course!" completed_hoc: "¡Asombroso! ¡Has completado el curso de la hora de código!"
ready_for_more_header: "Listo para mas? Juega el modo campaña!" ready_for_more_header: "Listo para mas? Juega el modo campaña!"
ready_for_more_1: "Usa las gemas para desbloquear nuevos objetos!" ready_for_more_1: "Usa las gemas para desbloquear nuevos objetos!"
# ready_for_more_2: "Play through brand new worlds and challenges" ready_for_more_2: "Juega atravez de nuevos mundos y desafios"
# ready_for_more_3: "Learn even more programming!" ready_for_more_3: "¡Aprendé todavía más programando!"
saved_games: "Juegos Guardados" saved_games: "Juegos Guardados"
# hoc: "Hour of Code" hoc: "Hora del código"
my_classes: "Mis Clases" my_classes: "Mis Clases"
# class_added: "Class successfully added!" class_added: "Clase añadida satisfactoriamente!"
# view_class: "view class" view_class: "ver clase"
view_levels: "ver niveles" view_levels: "ver niveles"
# join_class: "Join A Class" join_class: "Unirse a clase"
# ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:" ask_teacher_for_code: "Preguntalé a tu profesor si tu tienes un código de CodeCombat! Si lo tiene, ingresalo debajo:"
# enter_c_code: "<Enter Class Code>" # enter_c_code: "<Enter Class Code>"
# join: "Join" join: "Unirse"
# joining: "Joining class" joining: "Uniendose a claseJoining class"
# course_complete: "Course Complete" course_complete: "Curso completo"
# play_arena: "Play Arena" play_arena: "Jugar Arena"
start: "Iniciar" start: "Iniciar"
# last_level: "Last Level" last_level: "Último nivel"
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!" welcome_to_hoc: "Aventureros, bienvenidos a su Hora del Código!!"
# logged_in_as: "Logged in as:" logged_in_as: "Logeado como:"
# not_you: "Not you?" not_you: "No eres tú?"
# welcome_back: "Hi adventurer, welcome back!" welcome_back: "Hola aventurero, bienvenido nuevamente!"
# continue_playing: "Continue Playing" continue_playing: "Seguir jugando"
# more_options: "More options:" more_options: "Másopciones:"
# option1_header: "Option 1: Invite students via email" option1_header: "Opción 1: Invitar estudiantes vía email"
# option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password." # option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password."
# option2_header: "Option 2: Send URL to your students" option2_header: "Opción 2: Enviarles la URL a tus estudiantes"
# option2_body: "Students will be asked to enter an email address, username and password to create an account." # option2_body: "Students will be asked to enter an email address, username and password to create an account."
# option3_header: "Option 3: Direct students to codecombat.com/courses" option3_header: "Opción 3: Dirigir estudiantes a to codecombat.com/courses"
# option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account." # option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account."
# thank_you_pref: "Thank you for your purchase! You can now assign" thank_you_pref: "Gracias por tu compra! Ahora puedes asignar"
# thank_you_suff: "more students to paid courses." thank_you_suff: "más estudiantes a cursos pagos."
# return_to_class: "Return to classroom" # return_to_class: "Return to classroom"
# return_to_course_man: "Return to course management." # return_to_course_man: "Return to course management."
# students_not_enrolled: "students not enrolled" # students_not_enrolled: "students not enrolled"
# total_all_classes: "Total Across All Classes" # total_all_classes: "Total Across All Classes"
# how_many_enrollments: "How many additional paid enrollments do you need?" # how_many_enrollments: "How many additional paid enrollments do you need?"
# each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually." # each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually."
# purchase_now: "Purchase Now" purchase_now: "Comprar Ahora"
# enrollments: "enrollments" # enrollments: "enrollments"
remove_student1: "Quitar alumno" remove_student1: "Quitar alumno"
# are_you_sure: "Are you sure you want to remove this student from this class?" are_you_sure: "¿Estás seguro que quieres quitar este alumno de tu clase?"
# remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time." # remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time."
# remove_description2: "The activated paid license will not be returned." # remove_description2: "The activated paid license will not be returned."
keep_student: "Mantener alumno" keep_student: "Mantener alumno"
# removing_user: "Removing user" removing_user: "Removiendo usuario"
# to_join_ask: "To join a class, ask your teacher for an unlock code." to_join_ask: "Para ingresar a una clase, preguntale a tu maestro por un código de acceso."
# join_this_class: "Join Class" join_this_class: "Ingresar clase"
# enter_here: "<enter unlock code here>" enter_here: "<Ingresar el código aquí>"
# successfully_joined: "Successfully joined" # successfully_joined: "Successfully joined"
# click_to_start: "Click here to start taking" # click_to_start: "Click here to start taking"
# my_courses: "My Courses" my_courses: "Mis Cursos"
# classroom: "Classroom" classroom: "Aulas"
# use_school_email: "use your school email if you have one" # use_school_email: "use your school email if you have one"
# unique_name: "a unique name no one has chosen" # unique_name: "a unique name no one has chosen"
pick_something: "Escoge algo que recuerdes" pick_something: "Escoge algo que recuerdes"

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
no_ie: "המשחק לא עובד באקפלורר 8 וישן יותר. סליחה!" # Warning that only shows up in IE8 and older no_ie: "המשחק לא עובד באקפלורר 8 וישן יותר. סליחה!" # Warning that only shows up in IE8 and older
no_mobile: "המשחק לא עוצב לטלפונים ואולי לא יעבוד" # Warning that shows up on mobile devices no_mobile: "המשחק לא עוצב לטלפונים ואולי לא יעבוד" # Warning that shows up on mobile devices
play: "שחק" # The big play button that opens up the campaign view. play: "שחק" # 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: "שחק בגרסת המסע" # Shows up under big play button if you only play /courses
old_browser: "או או, נראה כי הדפדפן שלך יותר מידי ישן כדי להריץ את המשחק. סליחה!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "או או, נראה כי הדפדפן שלך יותר מידי ישן כדי להריץ את המשחק. סליחה!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "אתה יכול לנסות בכול מקרה אבל זה כנראה לא יעבוד." old_browser_suffix: "אתה יכול לנסות בכול מקרה אבל זה כנראה לא יעבוד."
ipad_browser: "חדשות רעות: CodeCombat לא עובד בדפדפן של הiPad-. חדשות טובות: גרסת הiPad של המשחק ממתינה לאישור מחברת Apple." ipad_browser: "חדשות רעות: CodeCombat לא עובד בדפדפן של הiPad-. חדשות טובות: גרסת הiPad של המשחק ממתינה לאישור מחברת Apple."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
nav: nav:
play: "שלבים" # The top nav bar entry where players choose which levels to play play: "שלבים" # The top nav bar entry where players choose which levels to play
community: "קהילה" community: "קהילה"
# courses: "Courses" courses: "מסלולים"
editor: "עורך" editor: "עורך"
blog: "בלוג" blog: "בלוג"
forum: "פורום" forum: "פורום"
@ -33,7 +33,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
contact: "צור קשר" contact: "צור קשר"
twitter_follow: "עקוב אחרינו בטוויטר" twitter_follow: "עקוב אחרינו בטוויטר"
teachers: "מורים" teachers: "מורים"
# careers: "Careers" careers: "קריירות"
modal: modal:
close: "סגור" close: "סגור"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
play: play:
play_as: "שחק בתור " # Ladder page play_as: "שחק בתור " # Ladder page
# compete: "Compete!" # Course details page compete: "הושלם!" # Course details page
spectate: "צופה" # Ladder page spectate: "צופה" # Ladder page
players: "שחקנים" # Hover over a level on /play players: "שחקנים" # Hover over a level on /play
hours_played: "שעות משחק" # Hover over a level on /play hours_played: "שעות משחק" # Hover over a level on /play
@ -75,7 +75,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
subscription_required: "יש צורך במנוי" subscription_required: "יש צורך במנוי"
anonymous: "משתמש אנונימי" anonymous: "משתמש אנונימי"
level_difficulty: "רמת קושי: " level_difficulty: "רמת קושי: "
# 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: "שיק בגרסה הכיתתית" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "מסע המתחילים" campaign_beginner: "מסע המתחילים"
awaiting_levels_adventurer_prefix: ".אנחנו מוסיפים חמישה שלבים בכל שבוע" # {change} awaiting_levels_adventurer_prefix: ".אנחנו מוסיפים חמישה שלבים בכל שבוע" # {change}
awaiting_levels_adventurer: "הירשם כהרפתקן" awaiting_levels_adventurer: "הירשם כהרפתקן"
@ -83,7 +83,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
adjust_volume: "שנה ווליום" adjust_volume: "שנה ווליום"
campaign_multiplayer: "זירות רב-המשתתפים" campaign_multiplayer: "זירות רב-המשתתפים"
campaign_multiplayer_description: "..." campaign_multiplayer_description: "..."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas" campaign_old_multiplayer: "(לא מומלץ) זירות מרובי משתתפים ישנות"
# 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: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
share_progress_modal: share_progress_modal:
@ -114,9 +114,9 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
log_in: "כנס עם סיסמה" log_in: "כנס עם סיסמה"
required: ".יש להתחבר על מנת לגשת לשלב זה" required: ".יש להתחבר על מנת לגשת לשלב זה"
login_switch: "? כבר יש לך משתמש" login_switch: "? כבר יש לך משתמש"
# school_name: "School Name and City" school_name: "שם בית ספר ועיר"
# optional: "optional" optional: "רשות"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "לדוגמה: תיכון עירוני X, תל אביב."
recover: recover:
recover_account_title: "שחזר סיסמה" recover_account_title: "שחזר סיסמה"
@ -157,15 +157,15 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
general: general:
and: "וגם" and: "וגם"
name: "שם" name: "שם"
date: "Date" date: "תאריך"
body: "גוף" body: "גוף"
version: "גרסה" version: "גרסה"
pending: "ממתין" pending: "ממתין"
accepted: "התקבל" accepted: "התקבל"
rejected: "נדחה" rejected: "נדחה"
withdrawn: "האוייב נסוג" withdrawn: "האוייב נסוג"
# accept: "Accept" accept: "מסכים"
# reject: "Reject" reject: "דחה"
# withdraw: "Withdraw" # withdraw: "Withdraw"
submitter: "מוסר" submitter: "מוסר"
submitted: "נמסר" submitted: "נמסר"
@ -221,12 +221,12 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
years: "שנים" years: "שנים"
play_level: play_level:
# completed_level: "Completed Level:" completed_level: "שלב שהושלם:"
# course: "Course:" course: "מסלול:"
done: "סיים" done: "סיים"
# next_level: "Next Level:" next_level: "השלב הבא:"
# next_game: "Next game" next_game: "המשחק הבא"
# show_menu: "Show game menu" show_menu: "הצג תפריט משחק"
home: "בית" # Not used any more, will be removed soon. home: "בית" # Not used any more, will be removed soon.
level: "שלב" # Like "Level: Dungeons of Kithgard" level: "שלב" # Like "Level: Dungeons of Kithgard"
skip: "דלג" skip: "דלג"
@ -256,13 +256,13 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
victory_saving_progress: "שומר התקדמות" victory_saving_progress: "שומר התקדמות"
victory_go_home: "חזור הביתה" victory_go_home: "חזור הביתה"
victory_review: "!ספר לנו עוד" victory_review: "!ספר לנו עוד"
# victory_review_placeholder: "How was the level?" victory_review_placeholder: "איך היה השלב?"
victory_hour_of_code_done: "?סיימת" victory_hour_of_code_done: "?סיימת"
victory_hour_of_code_done_yes: "שלי Hour of Code™! כן, סיימתי עם ה" victory_hour_of_code_done_yes: "שלי Hour of Code™! כן, סיימתי עם ה"
victory_experience_gained: "שנצבר XP" victory_experience_gained: "שנצבר XP"
victory_gems_gained: "אבני חן שנצברו" victory_gems_gained: "אבני חן שנצברו"
victory_new_item: "חפץ חדש" victory_new_item: "חפץ חדש"
# victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks." victory_viking_code_school: "אבוקדו קדוש, זה היה שלב קשה שסיימת! אם אתה עדיין לא מפתח תוכנה, אתה צריך להיות אחד. בדיוק עלית על הכביש המהיר בכדי להתקבל ל Viking Code School, שם תוכל לשאת את כישוריך לרמה הבאה ותוכל להפוך למפתח רשת מקצועי תוך 14 שבועות בלבד."
victory_become_a_viking: "הפוך לוויקינג" victory_become_a_viking: "הפוך לוויקינג"
guide_title: "מדריך" guide_title: "מדריך"
tome_cast_button_run: "הפעל" tome_cast_button_run: "הפעל"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
tip_scrub_shortcut: "Ctrl+[ ו Ctrl+] האץ אחורה וקדימה באמצעות" # {change} tip_scrub_shortcut: "Ctrl+[ ו Ctrl+] האץ אחורה וקדימה באמצעות" # {change}
tip_guide_exists: ".לחץ על המדריך, בתוך תפריט המשחק (למעלה בקצה העמוד), למידע שימושי" tip_guide_exists: ".לחץ על המדריך, בתוך תפריט המשחק (למעלה בקצה העמוד), למידע שימושי"
tip_open_source: "!הוא 100% קוד פתוח CodeCombat" tip_open_source: "!הוא 100% קוד פתוח CodeCombat"
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!" tip_tell_friends: "נהנה מCodeCombat? ספר לחבריךעלינו!"
tip_beta_launch: ".הפיץ את גרסת הבטא באוקטובר, 2013 CodeCombat" tip_beta_launch: ".הפיץ את גרסת הבטא באוקטובר, 2013 CodeCombat"
tip_think_solution: ".תחשוב על הפתרון, לא על הבעיה" tip_think_solution: ".תחשוב על הפתרון, לא על הבעיה"
tip_theory_practice: "תיאורטית, אין הבדל בין התאוריה לאימון. אבל באימון, יש. - יוגי ברה" tip_theory_practice: "תיאורטית, אין הבדל בין התאוריה לאימון. אבל באימון, יש. - יוגי ברה"
@ -307,7 +307,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
tip_baby_coders: ".בעתיד, אפילו תינוקות יהיו כשפי על" tip_baby_coders: ".בעתיד, אפילו תינוקות יהיו כשפי על"
tip_morale_improves: ".הטעינה תמשיך עד שהמורל ישתפר" tip_morale_improves: ".הטעינה תמשיך עד שהמורל ישתפר"
tip_all_species: ".אנחנו מאמינים בשוויון הזדמנויות לכל היצורים בלמידת תכנות" tip_all_species: ".אנחנו מאמינים בשוויון הזדמנויות לכל היצורים בלמידת תכנות"
# tip_reticulating: "Reticulating spines." tip_reticulating: "Reticulating spines."
tip_harry: " ,תה' מכשף" tip_harry: " ,תה' מכשף"
tip_great_responsibility: "עם כישרון גדול בתכנות באה גם אחריות דיבאגינג גדולה." tip_great_responsibility: "עם כישרון גדול בתכנות באה גם אחריות דיבאגינג גדולה."
tip_munchkin: "אם לא תאכל את הירקות, מאצ'קין יבוא אליך בלילה כשאתה ישן." tip_munchkin: "אם לא תאכל את הירקות, מאצ'קין יבוא אליך בלילה כשאתה ישן."
@ -410,7 +410,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
feature7: "פרטיים <strong>שבטים</strong>" feature7: "פרטיים <strong>שבטים</strong>"
free: "חינם" free: "חינם"
month: "חודש" month: "חודש"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." must_be_logged: "עליך להיות מחובר תחילה. אנא צור חשבון חדש או היכנס לחשבונך באמצעות התפריט למעלה."
subscribe_title: "רכוש מנוי" subscribe_title: "רכוש מנוי"
unsubscribe: "הסר מנוי" unsubscribe: "הסר מנוי"
confirm_unsubscribe: "אשר הסרת מנוי" confirm_unsubscribe: "אשר הסרת מנוי"
@ -484,10 +484,10 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
blocks: "הגנה" # As in "this shield blocks this much damage" blocks: "הגנה" # As in "this shield blocks this much damage"
backstab: "פגיעה בגב" # As in "this dagger does this much backstab damage" backstab: "פגיעה בגב" # As in "this dagger does this much backstab damage"
skills: "מיומנויות" skills: "מיומנויות"
# attack_1: "Deals" attack_1: "מבצעים"
# attack_2: "of listed" # attack_2: "of listed"
# attack_3: "weapon damage." # attack_3: "weapon damage."
# health_1: "Gains" health_1: "רווחים"
# health_2: "of listed" # health_2: "of listed"
# health_3: "armor health." # health_3: "armor health."
speed_1: "זז במהירות של" speed_1: "זז במהירות של"
@ -499,8 +499,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
skill_docs: skill_docs:
writable: "ניתן לכתיבה" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "ניתן לכתיבה" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "לקריאה בלבד" read_only: "לקריאה בלבד"
# action: "Action" action: "פעולה"
# spell: "Spell" spell: "כישוף"
action_name: "שם" action_name: "שם"
action_cooldown: "לוקח" action_cooldown: "לוקח"
action_specific_cooldown: ":זמן להתקררות" action_specific_cooldown: ":זמן להתקררות"

View file

@ -587,35 +587,35 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
more_info_3: "でCodeCombatを使っている教育者の仲間とつながりましょう。" more_info_3: "でCodeCombatを使っている教育者の仲間とつながりましょう。"
teachers_survey: teachers_survey:
# title: "Teacher Survey" title: "教師用アンケート"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." must_be_logged: "最初にログインしてください。アカウントを作成するか、上記のメニューからログインしてください。"
# retrieving: "Retrieving information..." retrieving: "情報を取得しています..."
# being_reviewed_1: "Your application for a free trial is being" being_reviewed_1: "無料トライアルの申し込みが"
# being_reviewed_2: "reviewed." being_reviewed_2: "レビューされています。"
# approved_1: "Your application for a free trial was" approved_1: "無料トライアルの申し込みが"
# approved_2: "approved!" approved_2: "承認されました!"
# approved_4: "You can now enroll your students on the" approved_4: "以下のページで生徒を入会させることができます:"
# approved_5: "courses" approved_5: "コース"
# approved_6: "page." approved_6: "ページ。"
# denied_1: "Your application for a free trial has been" denied_1: "無料トライアルの申し込みが"
# denied_2: "denied." denied_2: "拒否されました。"
# contact_1: "Please contact" contact_1: "お問い合わせください"
# contact_2: "if you have further questions." contact_2: "ご質問がある場合は"
# description_1: "We offer free trials to teachers. You will be given 2 free enrollments which can be used to enroll students in paid courses." description_1: "教師の方に無料トライアルを提供しています。有料コースで生徒さんを入会させるのに使用できる、2つの無料入会権が与えられます。"
# description_1b: "You can find more information on our" description_1b: "詳細は以下のページで参照してください:"
# description_2: "teachers" description_2: "教師用"
# description_3: "page." description_3: "ページ。"
# description_4: "Please fill out this quick survey and well email you setup instructions." description_4: "この簡易アンケートに記入をお願いします。設定手順をメールにてお送りします。"
# email: "Email Address" email: "電子メールアドレス"
school: "学校名" school: "学校名"
location: "市町村" location: "市町村"
# age_students: "How old are your students?" age_students: "生徒さんの年齢を教えてください。"
# under: "Under" under: "未満"
# other: "Other:" other: "その他:"
# amount_students: "How many students do you teach?" amount_students: "何人の生徒さんをお持ちですか?"
# hear_about: "How did you hear about CodeCombat?" hear_about: "CodeCombatをどのようにお知りなりましたか?"
# fill_fields: "Please fill out all fields." fill_fields: "全てのフィールドを記入してください。"
# thanks: "Thanks! We'll send you setup instructions shortly." thanks: "ありがとうございます。設定の手順を追ってお送りします。"
versions: versions:
save_version_title: "新しいバージョンをセーブ" save_version_title: "新しいバージョンをセーブ"
@ -623,9 +623,9 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
submitting_patch: "パッチを送信中..." submitting_patch: "パッチを送信中..."
cla_prefix: "変更を適用するには, 私達のCLAに同意する必要があります。" cla_prefix: "変更を適用するには, 私達のCLAに同意する必要があります。"
cla_url: "CLA" cla_url: "CLA"
# cla_suffix: "." cla_suffix: ""
cla_agree: "同意する" cla_agree: "同意する"
# owner_approve: "An owner will need to approve it before your changes will become visible." owner_approve: "ユーザーは変更が実際に表示される前に同意する必要があります。"
contact: contact:
contact_us: "お問い合わせ" contact_us: "お問い合わせ"
@ -660,23 +660,23 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
password_tab: "パスワード" password_tab: "パスワード"
emails_tab: "メール" emails_tab: "メール"
admin: "管理者" admin: "管理者"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "購読を管理するにはここをクリックしてください。"
new_password: "新パスワード" new_password: "新パスワード"
new_password_verify: "新パスワードを再入力" new_password_verify: "新パスワードを再入力"
type_in_email: "アカウントの削除を確認するために、メールアドレスを入力して下さい。" type_in_email: "アカウントの削除を確認するために、メールアドレスを入力して下さい。"
type_in_email_progress: "進捗を消すために、メールアドレスを入力してください。" type_in_email_progress: "進捗を消すために、メールアドレスを入力してください。"
type_in_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: "通知" 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: "こちらのページ"

View file

@ -4,20 +4,20 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
no_ie: "죄송하지만 코드컴뱃은 인터넷 익스플로러 8에서는 동작하지 않습니다." # Warning that only shows up in IE8 and older no_ie: "죄송하지만 코드컴뱃은 인터넷 익스플로러 8에서는 동작하지 않습니다." # Warning that only shows up in IE8 and older
no_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." # Warning that shows up on mobile devices no_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." # Warning that shows up on mobile devices
play: "시작" # The big play button that opens up the campaign view. play: "시작" # 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: "캠페인 버전 플레이" # Shows up under big play button if you only play /courses
old_browser: "브라우저가 너무 오래된 버전이라 코드 컴뱃을 실행할 수 없습니다." # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "브라우저가 너무 오래된 버전이라 코드 컴뱃을 실행할 수 없습니다." # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "시도해볼 수는 있겠지만..안될 수도 있습니다." old_browser_suffix: "시도해볼 수는 있겠지만..안될 수도 있습니다."
# ipad_browser: "Bad news: CodeCombat doesn't run on iPad in the browser. Good news: our native iPad app is awaiting Apple approval." ipad_browser: "슬픈 소식: 코드컴뱃은 아이패드의 브라우저에서 구동되지않습니다. 좋은 소식: 우리의 아이패드 앱은 애플의 승인을 기다리고있습니다 ."
campaign: "캠페인" campaign: "캠페인"
for_beginners: "초보자용" for_beginners: "초보자용"
multiplayer: "멀티플레이어" # Not currently shown on home page multiplayer: "멀티플레이어" # Not currently shown on home page
for_developers: "개발자용" # Not currently shown on home page. for_developers: "개발자용" # Not currently shown on home page.
# or_ipad: "Or download for iPad" or_ipad: "또는 아이패드의 다운로드"
nav: nav:
play: "레벨" # The top nav bar entry where players choose which levels to play play: "레벨" # The top nav bar entry where players choose which levels to play
community: "커뮤니티" community: "커뮤니티"
# courses: "Courses" courses: "코스"
editor: "에디터" editor: "에디터"
blog: "블로그" blog: "블로그"
forum: "포럼" forum: "포럼"
@ -33,7 +33,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
contact: "문의" contact: "문의"
twitter_follow: "팔로우" twitter_follow: "팔로우"
teachers: "선생님들" teachers: "선생님들"
# careers: "Careers" careers: "채용"
modal: modal:
close: "닫기" close: "닫기"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
play: play:
play_as: "Play As " # Ladder page play_as: "Play As " # Ladder page
# compete: "Compete!" # Course details page compete: "경쟁!" # Course details page
spectate: "관중모드" # Ladder page spectate: "관중모드" # Ladder page
players: "플레이어" # Hover over a level on /play players: "플레이어" # Hover over a level on /play
hours_played: "플레이한 시간" # Hover over a level on /play hours_played: "플레이한 시간" # Hover over a level on /play
@ -68,14 +68,14 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
achievements: "성취한 목표" # Tooltip on achievement list button from /play achievements: "성취한 목표" # Tooltip on achievement list button from /play
account: "계정" # Tooltip on account button from /play account: "계정" # Tooltip on account button from /play
settings: "설정" # Tooltip on settings button from /play settings: "설정" # Tooltip on settings button from /play
# poll: "Poll" # Tooltip on poll button from /play poll: "투표" # Tooltip on poll button from /play
next: "다음" # Go from choose hero to choose inventory before playing a level next: "다음" # Go from choose hero to choose inventory before playing a level
change_hero: "영웅 교체" # Go back from choose inventory to choose hero change_hero: "영웅 교체" # Go back from choose inventory to choose hero
buy_gems: "젬 구매" buy_gems: "젬 구매"
# subscription_required: "Subscription Required" subscription_required: "가입 필수"
anonymous: "이름없는 플레이어" anonymous: "이름없는 플레이어"
level_difficulty: "난이도: " level_difficulty: "난이도: "
# 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: "교실 버전 플레이" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "초보자 캠페인" campaign_beginner: "초보자 캠페인"
awaiting_levels_adventurer_prefix: "매주 마다 새로운 레벨이 생깁니다." awaiting_levels_adventurer_prefix: "매주 마다 새로운 레벨이 생깁니다."
awaiting_levels_adventurer: "모험자로 등록 하세요!" awaiting_levels_adventurer: "모험자로 등록 하세요!"
@ -83,16 +83,16 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
adjust_volume: "소리 조절" adjust_volume: "소리 조절"
campaign_multiplayer: "멀티 플레이어 전투장" campaign_multiplayer: "멀티 플레이어 전투장"
campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다." campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas" campaign_old_multiplayer: "(추천하지 않습니다) 숙련된 멀티플레이어 경쟁"
# 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: "더 문명화 된 시대의 유물. 어떤 시뮬레이션은 이러한 이전, 영웅없는 멀티 경기장에 대해 실행되지 않습니다."
share_progress_modal: share_progress_modal:
# blurb: "Youre making great progress! Tell your parent how much you've learned with CodeCombat." blurb: "당신은 큰 진전을 보이고있습니다! 당신이 코드컴뱃으로 얼마나 많이 배웠는지 부모님게 말하십시오."
email_invalid: "이메일 주소가 올바르지 않습니다." email_invalid: "이메일 주소가 올바르지 않습니다."
# form_blurb: "Enter your parent's email below and well show them!" form_blurb: "아래에 부모님의 이메일을 입력하고 우리는 그것들을 보여줍니다!"
form_label: "이메일" form_label: "이메일"
placeholder: "이메일" placeholder: "이메일"
# title: "Excellent Work, Apprentice" title: "우수한, 초심자"
login: login:
sign_up: "계정 생성" sign_up: "계정 생성"
@ -100,8 +100,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
logging_in: "로그인 중" logging_in: "로그인 중"
log_out: "로그아웃" log_out: "로그아웃"
forgot_password: "비밀번호를 잊으셨나요?" forgot_password: "비밀번호를 잊으셨나요?"
# authenticate_gplus: "Authenticate G+" authenticate_gplus: "G+ 인증"
# load_profile: "Load G+ Profile" load_profile: "G+ 프로필 불러오기"
finishing: "완료중.." finishing: "완료중.."
sign_in_with_facebook: "Facebook으로 로그인" sign_in_with_facebook: "Facebook으로 로그인"
sign_in_with_gplus: "G+로 로그인" sign_in_with_gplus: "G+로 로그인"
@ -114,9 +114,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
log_in: "비밀번호로 로그인" log_in: "비밀번호로 로그인"
required: "진행하기 전에 로그인이 필요합니다." required: "진행하기 전에 로그인이 필요합니다."
login_switch: "이미 계정이 있으신가요?" login_switch: "이미 계정이 있으신가요?"
# school_name: "School Name and City" school_name: "학교 이름과 도시"
# optional: "optional" optional: "옵션"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "예시 고등학교, 스프링필드, IL"
recover: recover:
recover_account_title: "계정 복구" recover_account_title: "계정 복구"
@ -142,7 +142,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
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: "행동"
@ -164,20 +164,20 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
accepted: "적용됨" accepted: "적용됨"
rejected: "거부됨" rejected: "거부됨"
withdrawn: "취소됨" withdrawn: "취소됨"
# accept: "Accept" accept: "승인"
# reject: "Reject" reject: "보류"
# withdraw: "Withdraw" withdraw: "철수"
submitter: "제출자" submitter: "제출자"
submitted: "제출됨" submitted: "제출됨"
commit_msg: "커밋 메세지" commit_msg: "커밋 메세지"
version_history: "버전 히스토리" version_history: "버전 히스토리"
version_history_for: "버전 히스토리 : " version_history_for: "버전 히스토리 : "
# select_changes: "Select two changes below to see the difference." select_changes: "차이를 보기위해 두 가지 사항을 변경하도록 선택합니다."
# undo_prefix: "Undo" undo_prefix: "되돌리기"
undo_shortcut: "(Ctrl+Z)" undo_shortcut: "(Ctrl+Z)"
# redo_prefix: "Redo" redo_prefix: "다시하기"
redo_shortcut: "(Ctrl+Shift+Z)" redo_shortcut: "(Ctrl+Shift+Z)"
# play_preview: "Play preview of current level" play_preview: "현재 수준의 미리보기 재생"
result: "결과" result: "결과"
results: "결과들" results: "결과들"
description: "설명" description: "설명"
@ -221,12 +221,12 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
years: "" years: ""
play_level: play_level:
# completed_level: "Completed Level:" completed_level: "완료된 레벨:"
# course: "Course:" course: "코스:"
done: "완료" done: "완료"
# next_level: "Next Level:" next_level: "다음 레벨:"
# next_game: "Next game" next_game: "다음 게임"
# show_menu: "Show game menu" show_menu: "게임 매뉴 보이기"
home: "" # Not used any more, will be removed soon. home: "" # Not used any more, will be removed soon.
level: "레벨" # Like "Level: Dungeons of Kithgard" level: "레벨" # Like "Level: Dungeons of Kithgard"
skip: "넘어가기" skip: "넘어가기"
@ -256,40 +256,40 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
victory_saving_progress: "저장하기" victory_saving_progress: "저장하기"
victory_go_home: "홈으로" victory_go_home: "홈으로"
victory_review: "리뷰를 남겨주세요" victory_review: "리뷰를 남겨주세요"
# victory_review_placeholder: "How was the level?" victory_review_placeholder: "어떤 레벨입니까?"
victory_hour_of_code_done: "정말 종료합니까?" victory_hour_of_code_done: "정말 종료합니까?"
victory_hour_of_code_done_yes: "네 내 Hour of Code™ 완료했습니다!" victory_hour_of_code_done_yes: "네 내 Hour of Code™ 완료했습니다!"
victory_experience_gained: "획득한 경험치" victory_experience_gained: "획득한 경험치"
victory_gems_gained: "획득한 젬" victory_gems_gained: "획득한 젬"
victory_new_item: "새로운 아이템" victory_new_item: "새로운 아이템"
# victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks." victory_viking_code_school: "놀랍습니다, 당신은 그냥 이길 힘든 수준이었습니다! 이미 소프트웨어 개발자가 아닌 경우, 당신은 비이킹 코드 학교에서 빠르게 이해할것입니다, 당신이 다음 레벨에서 자신의 능력을 14주 동안 전문 웹 개발자가 될 수있는 곳입니다."
victory_become_a_viking: "바이킹이 되세요" victory_become_a_viking: "바이킹이 되세요"
guide_title: "가이드" guide_title: "가이드"
# tome_cast_button_run: "Run" tome_cast_button_run: "실행"
# tome_cast_button_running: "Running" tome_cast_button_running: "실행중"
# tome_cast_button_ran: "Ran" tome_cast_button_ran: "실행됨"
# tome_submit_button: "Submit" tome_submit_button: "적용"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button. tome_reload_method: "이 방법에 대한 원래의 코드를 다시불러오기" # Title text for individual method reload button.
# tome_select_method: "Select a Method" tome_select_method: "방법 선택"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methods). tome_see_all_methods: "편집 할 수있는 모든 방법을 참조하십시오" # Title text for method list selector (shown when there are multiple programmable methods).
tome_select_a_thang: "누군가를 선택하세요. " tome_select_a_thang: "누군가를 선택하세요. "
tome_available_spells: "사용 가능한 마법" tome_available_spells: "사용 가능한 마법"
# tome_your_skills: "Your Skills" tome_your_skills: "당신의 스킬"
# tome_current_method: "Current Method" tome_current_method: "최근 방법"
# code_saved: "Code Saved" code_saved: "코드가 저장됨"
skip_tutorial: "넘기기 (esc)" skip_tutorial: "넘기기 (esc)"
keyboard_shortcuts: "단축키" keyboard_shortcuts: "단축키"
loading_ready: "준비!" loading_ready: "준비!"
# loading_start: "Start Level" loading_start: "레벨 시작"
problem_alert_title: "코드를 수정하세요" problem_alert_title: "코드를 수정하세요"
time_current: "현재:" time_current: "현재:"
time_total: "최대:" time_total: "최대:"
# time_goto: "Go to:" time_goto: "가기:"
# non_user_code_problem_title: "Unable to Load Level" non_user_code_problem_title: "레벨을 로드 할 수 없습니다"
# infinite_loop_title: "Infinite Loop Detected" infinite_loop_title: "무한 루프 감지"
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know." infinite_loop_description: "세계를 구축하는 초기 코드는 결코 실행이 완료되지 않습니다. 아마도 하나의 정말 느리거나 또는 무한 루프가 있습니다. 혹은 버그일수있습니다. 당신은 다시 이 코드를 실행하려고하거나 기본 상태로 코드를 재설정 할 수 있습니다. 그게 해결되지 않으면, 저희에게 알려 주시기 바랍니다."
# check_dev_console: "You can also open the developer console to see what might be going wrong." check_dev_console: "또한 잘못 갈 수를 알기 위해 개발자 콘솔을 열 수 있습니다."
# check_dev_console_link: "(instructions)" check_dev_console_link: "(명령어)"
infinite_loop_try_again: "다시 시도해보세요." infinite_loop_try_again: "다시 시도해보세요."
infinite_loop_reset_level: "레벨 리셋" infinite_loop_reset_level: "레벨 리셋"
infinite_loop_comment_out: "내 코드를 일시적 주석처리하기" infinite_loop_comment_out: "내 코드를 일시적 주석처리하기"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
tip_scrub_shortcut: "Ctrl+[, Ctrl+] 를 이용해 실행 속도를 빠르게 할 수 있어요" tip_scrub_shortcut: "Ctrl+[, Ctrl+] 를 이용해 실행 속도를 빠르게 할 수 있어요"
tip_guide_exists: "화면 상단의 가이드를 클릭해보세요. 유용한 정보를 얻을 수 있습니다." tip_guide_exists: "화면 상단의 가이드를 클릭해보세요. 유용한 정보를 얻을 수 있습니다."
tip_open_source: "코드 컴뱃은 100% 오픈 소스 기반입니다!" tip_open_source: "코드 컴뱃은 100% 오픈 소스 기반입니다!"
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!" tip_tell_friends: "코드 컴뱃을 즐기셨나요? 친구에게 알려주십시오"
tip_beta_launch: "코드 컴뱃은 2013년 10월에 베타 서비스를 출시했습니다." tip_beta_launch: "코드 컴뱃은 2013년 10월에 베타 서비스를 출시했습니다."
tip_think_solution: "해결 방법을 고민해보세요, 문제를 고민하지 말구요" tip_think_solution: "해결 방법을 고민해보세요, 문제를 고민하지 말구요"
# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" # tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra"
@ -326,7 +326,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# tip_extrapolation: "There are only two kinds of people: those that can extrapolate from incomplete data..." # tip_extrapolation: "There are only two kinds of people: those that can extrapolate from incomplete data..."
# tip_superpower: "Coding is the closest thing we have to a superpower." # tip_superpower: "Coding is the closest thing we have to a superpower."
# tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds" # tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds"
# tip_no_code: "No code is faster than no code." tip_no_code: "코드가 없는것보다 빠른것은 없습니다."
tip_code_never_lies: "코드는 절대로 거짓말을 하지 않는다. 주석은 가끔 하지만. — Ron Jeffries" tip_code_never_lies: "코드는 절대로 거짓말을 하지 않는다. 주석은 가끔 하지만. — Ron Jeffries"
# tip_reusable_software: "Before software can be reusable it first has to be usable." # tip_reusable_software: "Before software can be reusable it first has to be usable."
# tip_optimization_operator: "Every language has an optimization operator. In most languages that operator is //" # tip_optimization_operator: "Every language has an optimization operator. In most languages that operator is //"
@ -341,8 +341,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch" # tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch"
# tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus" # tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus"
# tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha" # tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha"
# tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen." tip_paper_and_pen: "코딩을 하기전에, 당신은 항상 종이와 펜으로 계획을 지니고 있어야합니다."
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson" tip_solve_then_write: "먼저, 문제를 해결하세요. 그러고, 코드를 쓰는겁니다. - John Johnson"
game_menu: game_menu:
inventory_tab: "인벤토리" inventory_tab: "인벤토리"
@ -355,24 +355,24 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
auth_tab: "가입하기" auth_tab: "가입하기"
inventory_caption: "장비 장착" inventory_caption: "장비 장착"
choose_hero_caption: "영웅 및 언어 선택 " choose_hero_caption: "영웅 및 언어 선택 "
# save_load_caption: "... and view history" save_load_caption: "... 그리고 기록보기"
options_caption: "설정들을 바꾸기" options_caption: "설정들을 바꾸기"
guide_caption: "문서들과 팁들" guide_caption: "문서들과 팁들"
multiplayer_caption: "친구들과 플레이 하세요!" multiplayer_caption: "친구들과 플레이 하세요!"
auth_caption: "진행사항을 저장하세요" auth_caption: "진행사항을 저장하세요"
leaderboard: leaderboard:
# view_other_solutions: "View Leaderboards" view_other_solutions: "리더보드 보기"
scores: "점수" scores: "점수"
top_players: "상위 플레이어" top_players: "상위 플레이어"
day: "오늘" day: "오늘"
week: "이번 주" week: "이번 주"
# all: "All-Time" all: "모든-시간"
# time: "Time" time: "시간"
# damage_taken: "Damage Taken" damage_taken: "데미지 정도"
# damage_dealt: "Damage Dealt" damage_dealt: "죽음을 맞은 데미지"
# difficulty: "Difficulty" difficulty: "난이도"
# gold_collected: "Gold Collected" gold_collected: "수집된 골드"
inventory: inventory:
equipped_item: "장착됨" equipped_item: "장착됨"
@ -391,33 +391,33 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
pile_gems: "gem 묶음" pile_gems: "gem 묶음"
chest_gems: "gem 상자" chest_gems: "gem 상자"
purchasing: "구매중..." purchasing: "구매중..."
declined: "Your card was declined" declined: "귀하의 카드가 거부되었습니다"
retrying: "서버에러, 다시 시도하세요." retrying: "서버에러, 다시 시도하세요."
prompt_title: "gem 부족" prompt_title: "gem 부족"
prompt_body: "gem이 더 필요하신가요?" prompt_body: "gem이 더 필요하신가요?"
prompt_button: "Enter Shop" prompt_button: "샵 앤터"
recovered: "gem 구매후 브라우져를 새로고침 하세요." recovered: "gem 구매후 브라우져를 새로고침 하세요."
price: "x{{gems}} / 한달" price: "x{{gems}} / 한달"
# subscribe: subscribe:
# comparison_blurb: "Sharpen your skills with a CodeCombat subscription!" # comparison_blurb: "Sharpen your skills with a CodeCombat subscription!"
# feature1: "110+ basic levels across 4 worlds" # feature1: "110+ basic levels across 4 worlds"
# feature2: "10 powerful <strong>new heroes</strong> with unique skills!" # feature2: "10 powerful <strong>new heroes</strong> with unique skills!"
# feature3: "80+ bonus levels" feature3: "80+ 보너스 레벨들"
# feature4: "<strong>{{gems}} bonus gems</strong> every month!" # feature4: "<strong>{{gems}} bonus gems</strong> every month!"
# feature5: "Video tutorials" feature5: "영상 튜토리얼"
# feature6: "Premium email support" feature6: "프리미엄 이메일 지원"
# feature7: "Private <strong>Clans</strong>" # feature7: "Private <strong>Clans</strong>"
# free: "Free" free: "프리"
# month: "month" month: ""
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." # must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# subscribe_title: "Subscribe" subscribe_title: "구독"
# unsubscribe: "Unsubscribe" unsubscribe: "구독 해제"
# confirm_unsubscribe: "Confirm Unsubscribe" confirm_unsubscribe: "구독 해제 확인"
# never_mind: "Never Mind, I Still Love You" # never_mind: "Never Mind, I Still Love You"
# thank_you_months_prefix: "Thank you for supporting us these last" # thank_you_months_prefix: "Thank you for supporting us these last"
# thank_you_months_suffix: "months." # thank_you_months_suffix: "months."
# thank_you: "Thank you for supporting CodeCombat." thank_you: "CodeCombat을 도와주셔서 감사합니다."
# sorry_to_see_you_go: "Sorry to see you go! Please let us know what we could have done better." # sorry_to_see_you_go: "Sorry to see you go! Please let us know what we could have done better."
# unsubscribe_feedback_placeholder: "O, what have we done?" # unsubscribe_feedback_placeholder: "O, what have we done?"
# parent_button: "Ask your parent" # parent_button: "Ask your parent"
@ -496,29 +496,29 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# level_to_unlock: "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: "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: "Only certain heroes can play this level." # restricted_to_certain_heroes: "Only certain heroes can play this level."
# skill_docs: skill_docs:
# 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: "Action"
# spell: "Spell" # spell: "Spell"
# action_name: "name" action_name: "이름"
# action_cooldown: "Takes" # action_cooldown: "Takes"
# action_specific_cooldown: "Cooldown" # action_specific_cooldown: "Cooldown"
# action_damage: "Damage" action_damage: "데미지"
# action_range: "Range" action_range: "사거리"
# action_radius: "Radius" # action_radius: "Radius"
# action_duration: "Duration" # action_duration: "Duration"
# example: "Example" example: "예제"
# ex: "ex" # Abbreviation of "example" ex: "예시" # Abbreviation of "example"
# current_value: "Current Value" # current_value: "Current Value"
# default_value: "Default value" # default_value: "Default value"
# parameters: "Parameters" # parameters: "Parameters"
# returns: "Returns" returns: "뒤로가기"
# granted_by: "Granted by" # granted_by: "Granted by"
# save_load: save_load:
# granularity_saved_games: "Saved" granularity_saved_games: "저장됨"
# granularity_change_history: "History" granularity_change_history: "기록"
options: options:
# general_options: "General Options" # Check out the Options tab in the Game Menu while playing a level # general_options: "General Options" # Check out the Options tab in the Game Menu while playing a level
@ -586,20 +586,20 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# more_info_2: "teachers forum" # more_info_2: "teachers forum"
# more_info_3: "is a good place to connect with fellow educators who are using CodeCombat." # more_info_3: "is a good place to connect with fellow educators who are using CodeCombat."
# teachers_survey: teachers_survey:
# title: "Teacher Survey" # title: "Teacher Survey"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." # must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# retrieving: "Retrieving information..." # retrieving: "Retrieving information..."
# being_reviewed_1: "Your application for a free trial is being" # being_reviewed_1: "Your application for a free trial is being"
# being_reviewed_2: "reviewed." being_reviewed_2: "검토됨."
# approved_1: "Your application for a free trial was" # approved_1: "Your application for a free trial was"
# approved_2: "approved!" # approved_2: "approved!"
# approved_4: "You can now enroll your students on the" # approved_4: "You can now enroll your students on the"
# approved_5: "courses" # approved_5: "courses"
# approved_6: "page." approved_6: "페이지."
# denied_1: "Your application for a free trial has been" # denied_1: "Your application for a free trial has been"
# denied_2: "denied." denied_2: "거절됨."
# contact_1: "Please contact" contact_1: "연락해주세요."
# contact_2: "if you have further questions." # contact_2: "if you have further questions."
# description_1: "We offer free trials to teachers. You will be given 2 free enrollments which can be used to enroll students in paid courses." # description_1: "We offer free trials to teachers. You will be given 2 free enrollments which can be used to enroll students in paid courses."
# description_1b: "You can find more information on our" # description_1b: "You can find more information on our"
@ -620,7 +620,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
versions: versions:
save_version_title: "새로운 버전을 저장합니다" save_version_title: "새로운 버전을 저장합니다"
new_major_version: "신규 버전" new_major_version: "신규 버전"
# submitting_patch: "Submitting Patch..." submitting_patch: "패치 적용중..."
cla_prefix: "변경사항을 저장하기 위해서는, 먼저 계약사항에 동의 하셔야 합니다." cla_prefix: "변경사항을 저장하기 위해서는, 먼저 계약사항에 동의 하셔야 합니다."
cla_url: "CLA" cla_url: "CLA"
cla_suffix: "." cla_suffix: "."

View file

@ -151,7 +151,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
watch: "Žiūrėti" watch: "Žiūrėti"
unwatch: "Nebežiūrėti" unwatch: "Nebežiūrėti"
submit_patch: "Pateikti pataisymą" submit_patch: "Pateikti pataisymą"
submit_changes: "Pateikti pakeitimus" submit_changes: "Išsaugoti pakeitimus"
save_changes: "Saugoti pakeitimus" save_changes: "Saugoti pakeitimus"
general: general:
@ -284,12 +284,12 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
problem_alert_title: "Taisyti kodą" problem_alert_title: "Taisyti kodą"
time_current: "Dabar:" time_current: "Dabar:"
time_total: "Max:" time_total: "Max:"
# time_goto: "Go to:" time_goto: "Eiti į:"
non_user_code_problem_title: "Nepavyko pakrauti lygio" non_user_code_problem_title: "Nepavyko pakrauti lygio"
infinite_loop_title: "Pastebėtas begalinis ciklas!" infinite_loop_title: "Pastebėtas begalinis ciklas!"
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know." # infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know."
# check_dev_console: "You can also open the developer console to see what might be going wrong." # check_dev_console: "You can also open the developer console to see what might be going wrong."
# check_dev_console_link: "(instructions)" check_dev_console_link: "(instrukcijos)"
infinite_loop_try_again: "Bandyk dar kartą" infinite_loop_try_again: "Bandyk dar kartą"
infinite_loop_reset_level: "Pradėti lygi išnaujo" infinite_loop_reset_level: "Pradėti lygi išnaujo"
infinite_loop_comment_out: "Užkomentuoti mano kodą" infinite_loop_comment_out: "Užkomentuoti mano kodą"
@ -308,7 +308,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# tip_morale_improves: "Loading will continue until morale improves." # tip_morale_improves: "Loading will continue until morale improves."
# tip_all_species: "We believe in equal opportunities to learn programming for all species." # tip_all_species: "We believe in equal opportunities to learn programming for all species."
# tip_reticulating: "Reticulating spines." # tip_reticulating: "Reticulating spines."
# tip_harry: "Yer a Wizard, " tip_harry: "Tu esi Burtininkas, "
# tip_great_responsibility: "With great coding skill comes great debug responsibility." # tip_great_responsibility: "With great coding skill comes great debug responsibility."
# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." # tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep."
# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." # tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't."
@ -577,115 +577,115 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# carlos_title: "Region Manager, Brazil" # carlos_title: "Region Manager, Brazil"
# carlos_blurb: "Celery Man" # carlos_blurb: "Celery Man"
# teachers: teachers:
# who_for_title: "Who is CodeCombat for?" who_for_title: "Kam skirtas CodeCombat?"
# who_for_1: "We recommend CodeCombat for students aged 9 and up. No prior programming experience is needed. We've designed CodeCombat to appeal to both boys and girls." who_for_1: "Mes rekomenduojame CodeCombat mokiniams nuo 9-erių metų. Nereikia turėti jokios programavimo patirties. Mes sukūrėme CodeCombat taip, kad patiktų ir berniukams ir mergaitėms."
# who_for_2: "Our Courses system allows teachers to set up classrooms, track progress and assign additional content to students through a dedicated interface." who_for_2: "Mūsų Kursų sistema, suteikia galimybę pasiruošti pamokų užduotims, stebėti mokinių pasiekimus ir priskirti papildomą turinį mokiniams, per patogią sąsają."
# more_info_title: "Where can I find more information?" more_info_title: "Kur galėčiau rasti daugiau informacijos?"
# more_info_1: "Our" more_info_1: "Mūsų"
# more_info_2: "teachers forum" more_info_2: "mokytojų forumas"
# more_info_3: "is a good place to connect with fellow educators who are using CodeCombat." more_info_3: "patogi vieta susisiekti su kolegomis mokytojais kurie naudoja CodeCombat."
# teachers_survey: teachers_survey:
# title: "Teacher Survey" title: "Mokytojo Apklausa"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." must_be_logged: "Turite būti prisijungę. Prašom susikurti paskyrą arba prisijungti viršutinėje meniu juostoje."
# retrieving: "Retrieving information..." retrieving: "Renkama informacija..."
# being_reviewed_1: "Your application for a free trial is being" being_reviewed_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
# being_reviewed_2: "reviewed." being_reviewed_2: "peržiūrimas."
# approved_1: "Your application for a free trial was" approved_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
# approved_2: "approved!" approved_2: "patvirtintas!"
# approved_4: "You can now enroll your students on the" approved_4: "Dabar galite nukreipti savo mokinius į"
# approved_5: "courses" approved_5: "kursų"
# approved_6: "page." approved_6: "puslapį."
# denied_1: "Your application for a free trial has been" denied_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
# denied_2: "denied." denied_2: "atmestas."
# contact_1: "Please contact" contact_1: "Prašome susisiekti"
# contact_2: "if you have further questions." contact_2: "jei turite daugiau klausimų."
# description_1: "We offer free trials to teachers. You will be given 2 free enrollments which can be used to enroll students in paid courses." description_1: "Mokytojams mes siūlome, nemokamai išbandyti bandomają versiją. Jūs gausite 2 nemokamus pakvietimus, kuriuos galite panaudoti savo mokiniams mokamuose kursuose."
# description_1b: "You can find more information on our" description_1b: "Daugiau informacijos rasite mūsų"
# description_2: "teachers" description_2: "mokytojų"
# description_3: "page." description_3: "puslapyje."
# description_4: "Please fill out this quick survey and well email you setup instructions." description_4: "Prašome užpildyti šią trumpą apklausos formą ir mes atsiųsime paruošimo instrukcijas el. paštu."
# email: "Email Address" email: "El. pašto adresas"
# school: "Name of School" school: "Mokyklos pavadinimas"
# location: "Name of City" location: "Miestas"
# age_students: "How old are your students?" age_students: "Kokio amžiaus jūsų mokiniai?"
# under: "Under" under: "Mažiau nei"
# other: "Other:" other: "Kita:"
# amount_students: "How many students do you teach?" amount_students: "Kiek mokinių mokote?"
# hear_about: "How did you hear about CodeCombat?" hear_about: "Iš kur sužinojote apie CodeCombat?"
# fill_fields: "Please fill out all fields." fill_fields: "Prašome užpildyti visus laukus."
# thanks: "Thanks! We'll send you setup instructions shortly." thanks: "Dėkojame! Netrukus atsiųsime paruošimo instrukcijas."
# versions: versions:
# save_version_title: "Save New Version" save_version_title: "Išsaugoti Naują Versiją"
# new_major_version: "New Major Version" new_major_version: "Nauja Pagrindinė Versija"
# submitting_patch: "Submitting Patch..." submitting_patch: "Pateikiamas Pataisymas..."
# cla_prefix: "To save changes, first you must agree to our" cla_prefix: "Kad išsaugoti pakeitimus, turite sutikti su mūsų"
# cla_url: "CLA" cla_url: "PLS" # In Lithuanian language full translation (Pagalbininko Licensinė Sutartis - PLS). If no translation needed here, just remove changes :)
# cla_suffix: "." cla_suffix: "."
# cla_agree: "I AGREE" cla_agree: "AŠ SUTINKU"
# owner_approve: "An owner will need to approve it before your changes will become visible." owner_approve: "Sąvininkas pirmiausiai turi patvirtinti, kad jūsų pakeitimai būtų matomi."
# contact: contact:
# contact_us: "Contact CodeCombat" contact_us: "Susisiekti su CodeCombat"
# welcome: "Good to hear from you! Use this form to send us email. " welcome: "Maloniai jus išklausysime! Naudokitės šia forma, kad išsiųstumėte mus elektroninį laišką."
# forum_prefix: "For anything public, please try " forum_prefix: "Norint pasisakyti viešai, naudokitės "
# forum_page: "our forum" forum_page: "mūsų forumu."
# forum_suffix: " instead." forum_suffix: ""
# faq_prefix: "There's also a" faq_prefix: "Taip pat turime vietą"
# faq: "FAQ" faq: "DUK"
# subscribe_prefix: "If you need help figuring out a level, please" subscribe_prefix: "Jei reikalinga pagalbos įveikiant lygį, prašome"
# subscribe: "buy a CodeCombat subscription" subscribe: "įsigyti CodeCombat abonementą"
# subscribe_suffix: "and we'll be happy to help you with your code." subscribe_suffix: "ir męs mielai jums padėsime."
# subscriber_support: "Since you're a CodeCombat subscriber, your email will get our priority support." subscriber_support: "Kadangi turite CodeCombat abonementą, jūsų elektroniniai laiškai mums tampa įpatingai svarbūs."
# screenshot_included: "Screenshot included." screenshot_included: "Ekrano kopija pridėta."
# where_reply: "Where should we reply?" where_reply: "Kur mums atsakyti?"
# send: "Send Feedback" send: "Siųsti užklausą"
# account_settings: account_settings:
# title: "Account Settings" title: "Paskyros Nustatymai"
# not_logged_in: "Log in or create an account to change your settings." not_logged_in: "Norint pakeisti paskyros nustatymus turite prisijungti arba susikurti paskyrą."
# autosave: "Changes Save Automatically" autosave: "Pakeitimai Išsaugomi Automatiškai"
# me_tab: "Me" me_tab: ""
# picture_tab: "Picture" picture_tab: "Nuotrauka"
# delete_account_tab: "Delete Your Account" delete_account_tab: "Pašalinti Mano Paskyrą"
# wrong_email: "Wrong Email" wrong_email: "Neteisingas el. pašto adresas"
# wrong_password: "Wrong Password" wrong_password: "Neteisingas slaptažodis"
# upload_picture: "Upload a picture" upload_picture: "Įkelti nuotrauką"
# delete_this_account: "Delete this account permanently" delete_this_account: "Tuoj pat pašalinti šią paskyrą"
# reset_progress_tab: "Reset All Progress" reset_progress_tab: "Atstatyti Viską Išnaujo"
# reset_your_progress: "Clear all your progress and start over" reset_your_progress: "Viską išvalyti ir pradėti išnaujo"
# god_mode: "God Mode" god_mode: "God Mode(Dievo Režimas)"
# password_tab: "Password" password_tab: "Slaptažodis"
# emails_tab: "Emails" emails_tab: "Pranešimai"
# admin: "Admin" admin: "Administratorius"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "Abonemento valdymas, spauskite čia."
# new_password: "New Password" new_password: "Naujas slaptažodis"
# new_password_verify: "Verify" new_password_verify: "Patvirtinimas"
# type_in_email: "Type in your email to confirm account deletion." type_in_email: "Paskyros pašalinimo patvirtinimui, įveskite el. pašto adresą."
# type_in_email_progress: "Type in your email to confirm deleting your progress." type_in_email_progress: "Norint pradėti išnaujo įveskite el. pašto adresą."
# type_in_password: "Also, type in your password." type_in_password: "Taip pat, įveskite slaptažodį."
# email_subscriptions: "Email Subscriptions" email_subscriptions: "El. pašto abonementai"
# email_subscriptions_none: "No Email Subscriptions." email_subscriptions_none: "Nėra el. pašto abonementų."
# email_announcements: "Announcements" email_announcements: "Skelbimai"
# email_announcements_description: "Get emails on the latest news and developments at CodeCombat." email_announcements_description: "Gauk svarbiausią informaciją apie naujienas ir projekto vystymo eigą tiesiai iš CodeCombat."
# email_notifications: "Notifications" email_notifications: "Pranešimai"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity." email_notifications_summary: "Automatinių pranešimų, susijusių su CodeCombat veikla, valdymas."
# email_any_notes: "Any Notifications" email_any_notes: "Visi pranešimai"
# email_any_notes_description: "Disable to stop all activity notification emails." email_any_notes_description: "Nuimkite varnelę, kad nebegautumėte jokių pranešimų."
# email_news: "News" email_news: "Naujienos"
# email_recruit_notes: "Job Opportunities" email_recruit_notes: "Darbo Pasiūlymai"
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job." email_recruit_notes_description: "Jei viską atliksite tikrai gerai, mes galime pasiūlyti (geresnį) darbą."
# contributor_emails: "Contributor Class Emails" contributor_emails: "Pranešimai Pagalbininkų Kategorijai"
# contribute_prefix: "We're looking for people to join our party! Check out the " contribute_prefix: "Mes ieškome norinčių prisijungti prie mūsų grupės! Ieškantiems daugiau informacijos siūlome apsilankykti "
# contribute_page: "contribute page" contribute_page: "pagalbininkų puslapyje."
# contribute_suffix: " to find out more." contribute_suffix: ""
# email_toggle: "Toggle All" email_toggle: "Perjungti visus"
# error_saving: "Error Saving" error_saving: "Klaida Išsaugant"
# saved: "Changes Saved" saved: "Pakeitimai Išsaugoti"
# password_mismatch: "Password does not match." password_mismatch: "Slaptažodžiai nesutampa."
# password_repeat: "Please repeat your password." password_repeat: "Pakartokite slaptažodį."
keyboard_shortcuts: keyboard_shortcuts:
keyboard_shortcuts: "Mygtukai" keyboard_shortcuts: "Mygtukai"
@ -727,65 +727,65 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# social_hipchat: "Chat with us in the public CodeCombat Slack channel" # social_hipchat: "Chat with us in the public CodeCombat Slack channel"
# contribute_to_the_project: "Contribute to the project" # contribute_to_the_project: "Contribute to the project"
# clans: clans:
# clan: "Clan" clan: "Klanas"
# clans: "Clans" clans: "Klanai"
# new_name: "New clan name" new_name: "Klano pavadinimas"
# new_description: "New clan description" new_description: "Klano aprašymas"
# make_private: "Make clan private" make_private: "Privatus klanas"
# subs_only: "subscribers only" subs_only: "tik abonentams"
# create_clan: "Create New Clan" create_clan: "Sukurti Klaną"
# private_preview: "Preview" private_preview: "Peržiūra"
# private_clans: "Private Clans" private_clans: "Privatūs Klanai"
# public_clans: "Public Clans" public_clans: "Vieši Klanai"
# my_clans: "My Clans" my_clans: "Mano Klanai"
# clan_name: "Clan Name" clan_name: "Klano Pavadinimas"
# name: "Name" name: "Vardas"
# chieftain: "Chieftain" chieftain: "Vadas"
# type: "Type" type: "Tipas"
# edit_clan_name: "Edit Clan Name" edit_clan_name: "Keisti Klano Pavadinimą"
# edit_clan_description: "Edit Clan Description" edit_clan_description: "Keisti Klano Aprašymą"
# edit_name: "edit name" edit_name: "keisti pavadinimą"
# edit_description: "edit description" edit_description: "keisti aprašymą"
# private: "(private)" private: "(privatus)"
# summary: "Summary" summary: "Suvestinė"
# average_level: "Average Level" average_level: "Lygių vidurkis"
# average_achievements: "Average Achievements" average_achievements: "Pasiekimų vidurkis"
# delete_clan: "Delete Clan" delete_clan: "Pašalinti klaną"
# leave_clan: "Leave Clan" leave_clan: "Išeiti iš klano"
# join_clan: "Join Clan" join_clan: "Prisijungti prie klano"
# invite_1: "Invite:" invite_1: "Pakvietimas:"
# invite_2: "*Invite players to this Clan by sending them this link." invite_2: "*Kvieskite žaidėjus į klaną nusiųsdami šią nuorodą."
# members: "Members" members: "Nariai"
# progress: "Progress" progress: "Pažanga"
# not_started_1: "not started" not_started_1: "nepradėta"
# started_1: "started" started_1: "pradėta"
# complete_1: "complete" complete_1: "pabaigta"
# exp_levels: "Expand levels" exp_levels: "Išplėsti lygius"
# rem_hero: "Remove Hero" rem_hero: "Pašalinti Herojų"
# status: "Status" status: "Būsena"
# complete_2: "Complete" complete_2: "Pabaigta"
# started_2: "Started" started_2: "Pradėta"
# not_started_2: "Not Started" not_started_2: "Nepradėta"
# view_solution: "Click to view solution." view_solution: "Peržiūrėti sprendimą."
# view_attempt: "Click to view attempt." view_attempt: "Peržiūrėti bandymą."
# latest_achievement: "Latest Achievement" latest_achievement: "Naujausias Pasiekimas"
# playtime: "Playtime" playtime: "Viso žaista"
# last_played: "Last played" last_played: "Paskutinį kartą žaista"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances." leagues_explanation: "Pasirink lygą ir varžykis su kitų klanų nariais."
# track_concepts1: "Track concepts" track_concepts1: "Sekite "
# track_concepts2a: "learned by each student" track_concepts2a: "kitų mokinių idėjas"
# track_concepts2b: "learned by each member" track_concepts2b: "kitų narių idėjas"
# track_concepts3a: "Track levels completed for each student" track_concepts3a: "Stebėkite kitų mokinių įveiktus lygius"
# track_concepts3b: "Track levels completed for each member" track_concepts3b: "Stebėkite kitų narių įveiktus lygius"
# track_concepts4a: "See your students'" track_concepts4a: "Peržiūrėkite mokinių"
# track_concepts4b: "See your members'" track_concepts4b: "Peržiūrėkite narių"
# track_concepts5: "solutions" track_concepts5: "sprendimus"
# track_concepts6a: "Sort students by name or progress" track_concepts6a: "Išrikiuokite mokinius pagal vardą arba pažangą"
# track_concepts6b: "Sort members by name or progress" track_concepts6b: "Išrikiuokite narius pagal vardą arba pažangą"
# track_concepts7: "Requires invitation" track_concepts7: "Norint tapti nariu"
# track_concepts8: "to join" track_concepts8: "reikalingas kvietimas"
# private_require_sub: "Private clans require a subscription to create or join." private_require_sub: "Norint sukurti privatų ar prisijungti prie privataus klano, reikalingas abonementas."
# courses: # courses:
# course: "Course" # course: "Course"
@ -1120,9 +1120,9 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# 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: "Peržiūra"
# edit_article_title: "Edit Article" edit_article_title: "Redaguoti straipsnį"
polls: polls:
priority: "Prioritetas" priority: "Prioritetas"

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
no_ie: "CodeCombat не работает в IE8 или более старых версиях. Нам очень жаль!" # Warning that only shows up in IE8 and older no_ie: "CodeCombat не работает в IE8 или более старых версиях. Нам очень жаль!" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat не приспособлен для работы на мобильных устройствах и может не работать!" # Warning that shows up on mobile devices no_mobile: "CodeCombat не приспособлен для работы на мобильных устройствах и может не работать!" # Warning that shows up on mobile devices
play: "Играть" # The big play button that opens up the campaign view. play: "Играть" # 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: "Играть в кампанию" # Shows up under big play button if you only play /courses
old_browser: "Ой, ваш браузер слишком стар для запуска CodeCombat. Извините!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "Ой, ваш браузер слишком стар для запуска CodeCombat. Извините!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Вы всё равно можете попробовать, но, скорее всего, это не будет работать." old_browser_suffix: "Вы всё равно можете попробовать, но, скорее всего, это не будет работать."
ipad_browser: "Плохие новости: CodeCombat не запускается в браузере IPad. Хорошие новости: наше нативное приложение для IPad ожидает одобрения от Apple." ipad_browser: "Плохие новости: CodeCombat не запускается в браузере IPad. Хорошие новости: наше нативное приложение для IPad ожидает одобрения от Apple."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
nav: nav:
play: "Уровни" # The top nav bar entry where players choose which levels to play play: "Уровни" # The top nav bar entry where players choose which levels to play
community: "Сообщество" community: "Сообщество"
# courses: "Courses" courses: "Курсы"
editor: "Редактор" editor: "Редактор"
blog: "Блог" blog: "Блог"
forum: "Форум" forum: "Форум"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
play: play:
play_as: "Играть за " # Ladder page play_as: "Играть за " # Ladder page
# compete: "Compete!" # Course details page compete: "Соревноваться!" # Course details page
spectate: "Наблюдать" # Ladder page spectate: "Наблюдать" # Ladder page
players: "игроки" # Hover over a level on /play players: "игроки" # Hover over a level on /play
hours_played: "часов сыграно" # Hover over a level on /play hours_played: "часов сыграно" # Hover over a level on /play
@ -75,7 +75,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
subscription_required: "Требуется подписка" subscription_required: "Требуется подписка"
anonymous: "Неизвестный игрок" anonymous: "Неизвестный игрок"
level_difficulty: "Сложность: " level_difficulty: "Сложность: "
# 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: "Играть в версию для работы в классе" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "Кампания для новичков" campaign_beginner: "Кампания для новичков"
awaiting_levels_adventurer_prefix: "Мы выпускаем новые уровни каждую неделю." awaiting_levels_adventurer_prefix: "Мы выпускаем новые уровни каждую неделю."
awaiting_levels_adventurer: "Зарегистрируйтесь в качестве Искателя приключений" awaiting_levels_adventurer: "Зарегистрируйтесь в качестве Искателя приключений"
@ -83,7 +83,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
adjust_volume: "Регулировать громкость" adjust_volume: "Регулировать громкость"
campaign_multiplayer: "Арены для мультиплеера" campaign_multiplayer: "Арены для мультиплеера"
campaign_multiplayer_description: "... в которых вы соревнуетесь в программировании с другими игроками." campaign_multiplayer_description: "... в которых вы соревнуетесь в программировании с другими игроками."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas" campaign_old_multiplayer: "(Устаревшее) Старые многопользовательские арены"
# 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: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
share_progress_modal: share_progress_modal:
@ -114,9 +114,9 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
log_in: "вход с паролем" log_in: "вход с паролем"
required: "Войдите для того, чтобы продолжить." required: "Войдите для того, чтобы продолжить."
login_switch: "Уже есть аккаунт?" login_switch: "Уже есть аккаунт?"
# school_name: "School Name and City" school_name: "Название школы and город"
# optional: "optional" optional: "не обязательно"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "Школа № 2, город Электросталь, Московская область"
recover: recover:
recover_account_title: "Восстановить аккаунт" recover_account_title: "Восстановить аккаунт"
@ -166,7 +166,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
withdrawn: "Отозвано" withdrawn: "Отозвано"
accept: "Принять" accept: "Принять"
reject: "Отклонить" reject: "Отклонить"
# withdraw: "Withdraw" withdraw: "Изъять"
submitter: "Податель" submitter: "Податель"
submitted: "Представлено" submitted: "Представлено"
commit_msg: "Сопроводительное сообщение" commit_msg: "Сопроводительное сообщение"
@ -221,10 +221,10 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
years: "лет" years: "лет"
play_level: play_level:
# completed_level: "Completed Level:" completed_level: "Завершённый уровень:"
# course: "Course:" course: "Курс:"
done: "Готово" done: "Готово"
# next_level: "Next Level:" next_level: "Следующий уровень:"
next_game: "Следующая игра" next_game: "Следующая игра"
show_menu: "Показать меню игры" show_menu: "Показать меню игры"
home: "На главную" # Not used any more, will be removed soon. home: "На главную" # Not used any more, will be removed soon.
@ -342,7 +342,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
tip_free_your_mind: "Отвлекись от всего, Нео. Страх, неверие, сомнения отбрось — очисти свой разум. - Morpheus" tip_free_your_mind: "Отвлекись от всего, Нео. Страх, неверие, сомнения отбрось — очисти свой разум. - Morpheus"
tip_strong_opponents: "Даже сильнейший противник имеет слабость. - Itachi Uchiha" tip_strong_opponents: "Даже сильнейший противник имеет слабость. - Itachi Uchiha"
tip_paper_and_pen: "Прежде чем начать программировать, вы всегда можете попробовать с листом бумаги и ручкой." tip_paper_and_pen: "Прежде чем начать программировать, вы всегда можете попробовать с листом бумаги и ручкой."
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson" tip_solve_then_write: "Сперва реши задачу, затем пиши код. - Джон Джонсон"
game_menu: game_menu:
inventory_tab: "Инвентарь" inventory_tab: "Инвентарь"
@ -594,15 +594,15 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
being_reviewed_2: "на рассмотрении." # {change} being_reviewed_2: "на рассмотрении." # {change}
approved_1: "Ваша заявка на бесплатную пробную подписку была" # {change} approved_1: "Ваша заявка на бесплатную пробную подписку была" # {change}
approved_2: "утверждена." # {change} approved_2: "утверждена." # {change}
# approved_4: "You can now enroll your students on the" approved_4: "Теперь вы можете регистрировать ваших учеников на"
# approved_5: "courses" approved_5: "курсы"
# approved_6: "page." approved_6: "страница."
denied_1: "Ваша заявка на бесплатную пробную подписку была" # {change} denied_1: "Ваша заявка на бесплатную пробную подписку была" # {change}
denied_2: "отклонена." # {change} denied_2: "отклонена." # {change}
contact_1: "Пожалуйста, свяжитесь с" contact_1: "Пожалуйста, свяжитесь с"
contact_2: ", если у вас остались вопросы." contact_2: ", если у вас остались вопросы."
description_1: "Мы предлагаем бесплатные подписки учителям в целях ознакомления. Вы можете найти больше информации на нашей странице" description_1: "Мы предлагаем бесплатные подписки учителям в целях ознакомления. Вы можете найти больше информации на нашей странице"
# description_1b: "You can find more information on our" description_1b: "Вы можете найти больше информации на"
description_2: "учителей" description_2: "учителей"
description_3: "" description_3: ""
description_4: "Пожалуйста, заполните эту маленькую анкету и мы вышлем вам инструкции по установке на email." description_4: "Пожалуйста, заполните эту маленькую анкету и мы вышлем вам инструкции по установке на email."
@ -736,7 +736,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
subs_only: "только для подписчиков" subs_only: "только для подписчиков"
create_clan: "Создать новый клан" create_clan: "Создать новый клан"
private_preview: "Превью" private_preview: "Превью"
# private_clans: "Private Clans" private_clans: "Тайные кланы"
public_clans: "Публичные кланы" public_clans: "Публичные кланы"
my_clans: "Мои кланы" my_clans: "Мои кланы"
clan_name: "Имя клана" clan_name: "Имя клана"
@ -768,7 +768,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
started_2: "Начат" started_2: "Начат"
not_started_2: "Не начат" not_started_2: "Не начат"
view_solution: "Нажмите, чтобы увидеть решение." view_solution: "Нажмите, чтобы увидеть решение."
# view_attempt: "Click to view attempt." view_attempt: "Нажмите чтобы посмотреть попытку."
latest_achievement: "Последнее достижение" latest_achievement: "Последнее достижение"
playtime: "Время игры" playtime: "Время игры"
last_played: "Последняя игра" last_played: "Последняя игра"
@ -780,17 +780,17 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# track_concepts3b: "Track levels completed for each member" # track_concepts3b: "Track levels completed for each member"
# track_concepts4a: "See your students'" # track_concepts4a: "See your students'"
# track_concepts4b: "See your members'" # track_concepts4b: "See your members'"
# 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: "Курс"
courses: "Курсы" courses: "Курсы"
# create_new_class: "Create New Class" create_new_class: "Создать новый класс"
not_enrolled: "Вы не записаны на этот курс." not_enrolled: "Вы не записаны на этот курс."
visit_pref: "Пожалуйста, зайдите на" visit_pref: "Пожалуйста, зайдите на"
visit_suf: "страницу для записи." visit_suf: "страницу для записи."
@ -865,151 +865,151 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
topics: "Темы" topics: "Темы"
hours_content: "Много часов материала:" hours_content: "Много часов материала:"
get_free: "Получить бесплатный курс" get_free: "Получить бесплатный курс"
# enroll_paid: "Enroll Students in Paid Courses" enroll_paid: "Записать учеников на платные курсы"
# you_have1: "You have" you_have1: "У вас есть"
# you_have2: "unused paid enrollments" # you_have2: "unused paid enrollments"
# use_one: "Use 1 paid enrollment for" # use_one: "Use 1 paid enrollment for"
# use_multiple: "Use paid enrollments for the following students:" # use_multiple: "Use paid enrollments for the following students:"
# already_enrolled: "already enrolled" already_enrolled: "уже зачислен"
# licenses_remaining: "licenses remaining:" # licenses_remaining: "licenses remaining:"
# insufficient_enrollments: "insufficient paid enrollments" # insufficient_enrollments: "insufficient paid enrollments"
# enroll_students: "Enroll Students" # enroll_students: "Enroll Students"
# get_enrollments: "Get More Enrollments" # get_enrollments: "Get More Enrollments"
# change_language: "Change Course Language" change_language: "Изменить язык программирования курса"
# keep_using: "Keep Using" keep_using: "Продолжить использовать"
# switch_to: "Switch To" switch_to: "Переключить на"
# greetings: "Greetings!" greetings: "Поздравления!"
# learn_p: "Learn Python" learn_p: "Изучать Python"
# learn_j: "Learn JavaScript" learn_j: "Изучать JavaScript"
# language_cannot_change: "Language cannot be changed once students join a class." language_cannot_change: "Язык не может быть изменён после того как ученик присоединился к классу."
# back_classrooms: "Back to my classrooms" back_classrooms: "Назад к моим классам"
# back_courses: "Back to my courses" back_courses: "Назад к моим курсам"
# edit_details: "Edit class details" edit_details: "Редактировать описание класса"
# enrolled_courses: "enrolled in paid courses:" # enrolled_courses: "enrolled in paid courses:"
# purchase_enrollments: "Purchase Enrollments" # purchase_enrollments: "Purchase Enrollments"
# remove_student: "remove student" remove_student: "удалить ученика"
# assign: "Assign" # assign: "Assign"
# to_assign: "to assign paid courses." # to_assign: "to assign paid courses."
# teacher: "Teacher" teacher: "Учитель"
# complete: "Complete" complete: "Завершить"
# none: "None" # none: "None"
# save: "Save" save: "Сохранить"
# play_campaign_title: "Play the Campaign" play_campaign_title: "Играть в кампанию"
# play_campaign_description: "Youre ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!" # play_campaign_description: "Youre ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!"
# create_account_title: "Create an Account" create_account_title: "Создать учётную запись"
# create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!" # create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!"
# preview_campaign_title: "Preview Campaign" # preview_campaign_title: "Preview Campaign"
# preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account." # preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account."
# arena: "Arena" arena: "Арена"
# arena_soon_title: "Arena Coming Soon" arena_soon_title: "Арена скоро появится"
# arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of" # arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
# not_enrolled1: "Not enrolled" # not_enrolled1: "Not enrolled"
# not_enrolled2: "Ask your teacher to enroll you in the next course." not_enrolled2: "Попросите учителя зачислить вас на следующий курс."
# next_course: "Next Course" next_course: "Следующий курс"
# coming_soon1: "Coming soon" coming_soon1: "Скоро появится"
# coming_soon2: "We are hard at work making more courses for you!" # coming_soon2: "We are hard at work making more courses for you!"
# available_levels: "Available Levels" # available_levels: "Available Levels"
# welcome_to_courses: "Adventurers, welcome to Courses!" welcome_to_courses: "Искатели приключений, добро пожаловать на курсы!"
# ready_to_play: "Ready to play?" ready_to_play: "Готовы приступить к игре?"
# start_new_game: "Start New Game" start_new_game: "Начать новую игру"
# play_now_learn_header: "Play now to learn" play_now_learn_header: "Начать обучающую игру"
# play_now_learn_1: "basic syntax to control your character" play_now_learn_1: "базовый синтаксис управления персонажем"
# play_now_learn_2: "while loops to solve pesky puzzles" play_now_learn_2: "циклы while чтобы решать противные головоломки"
# play_now_learn_3: "strings & variables to customize actions" play_now_learn_3: "строки и переменные чтобы настраивать действия"
# play_now_learn_4: "how to defeat an ogre (important life skills!)" play_now_learn_4: "Как победить огра (важные жизненные навыки!)"
# welcome_to_page: "Welcome to your Courses page!" welcome_to_page: "Добро пожаловать на вашу страницу курсов!"
# completed_hoc: "Amazing! You've completed the Hour of Code course!" completed_hoc: "Изумительно! Вы прошли курс Час кода!"
# ready_for_more_header: "Ready for more? Play the campaign mode!" ready_for_more_header: "Хотите продолжить? Играйте в режиме кампании!"
# ready_for_more_1: "Use gems to unlock new items!" ready_for_more_1: "Используйте самоцветы чтобы разблокировать новые предметы!"
# ready_for_more_2: "Play through brand new worlds and challenges" # ready_for_more_2: "Play through brand new worlds and challenges"
# ready_for_more_3: "Learn even more programming!" ready_for_more_3: "Учитесь программировнию дальше!"
# saved_games: "Saved Games" saved_games: "Сохранённые игры"
# hoc: "Hour of Code" hoc: "Час кода"
# my_classes: "My Classes" my_classes: "Мои классы"
# class_added: "Class successfully added!" class_added: "Класс успешно добавлен!"
# view_class: "view class" view_class: "смотреть класс"
# view_levels: "view levels" view_levels: "смотреть уровни"
# join_class: "Join A Class" join_class: "Присоединиться к классу"
# ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:" # ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:"
# enter_c_code: "<Enter Class Code>" # enter_c_code: "<Enter Class Code>"
# join: "Join" # join: "Присоединиться"
# joining: "Joining class" # joining: "Joining class"
# course_complete: "Course Complete" course_complete: "Курс завершён"
# play_arena: "Play Arena" play_arena: "Играть Арену"
# start: "Start" # start: "Старт"
# last_level: "Last Level" # last_level: "Последний уровень"
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!" welcome_to_hoc: "Искатели приключений, добро пожаловать на Час кода!"
# logged_in_as: "Logged in as:" # logged_in_as: "Logged in as:"
# not_you: "Not you?" # not_you: "Не вы?"
# welcome_back: "Hi adventurer, welcome back!" # welcome_back: "Привет, искатель приключений, добро пожаловать!"
# continue_playing: "Continue Playing" # continue_playing: "Continue Playing"
# more_options: "More options:" more_options: "Другие варианты:"
# option1_header: "Option 1: Invite students via email" option1_header: "Вариант 1: Пригласить учеников по email"
# option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password." # option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password."
# option2_header: "Option 2: Send URL to your students" option2_header: "Вариант 2: Послать URL вашим ученикам"
# option2_body: "Students will be asked to enter an email address, username and password to create an account." # option2_body: "Students will be asked to enter an email address, username and password to create an account."
# option3_header: "Option 3: Direct students to codecombat.com/courses" option3_header: "Вариант 3: Направить учеников на codecombat.com/courses"
# option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account." # option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account."
# thank_you_pref: "Thank you for your purchase! You can now assign" # thank_you_pref: "Thank you for your purchase! You can now assign"
# thank_you_suff: "more students to paid courses." # thank_you_suff: "more students to paid courses."
# return_to_class: "Return to classroom" # return_to_class: "Return to classroom"
# return_to_course_man: "Return to course management." return_to_course_man: "Вернуться к управлению курсом."
# students_not_enrolled: "students not enrolled" # students_not_enrolled: "students not enrolled"
# total_all_classes: "Total Across All Classes" total_all_classes: "Общее по всем классам"
# how_many_enrollments: "How many additional paid enrollments do you need?" # how_many_enrollments: "How many additional paid enrollments do you need?"
# each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually." # each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually."
# purchase_now: "Purchase Now" # purchase_now: "Purchase Now"
# enrollments: "enrollments" # enrollments: "enrollments"
# remove_student1: "Remove Student" remove_student1: "Удалить ученика"
# are_you_sure: "Are you sure you want to remove this student from this class?" # are_you_sure: "Are you sure you want to remove this student from this class?"
# remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time." # remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time."
# remove_description2: "The activated paid license will not be returned." # remove_description2: "The activated paid license will not be returned."
# keep_student: "Keep Student" keep_student: "Оставить ученика"
# removing_user: "Removing user" # removing_user: "Removing user"
# to_join_ask: "To join a class, ask your teacher for an unlock code." # to_join_ask: "To join a class, ask your teacher for an unlock code."
# join_this_class: "Join Class" # join_this_class: "Join Class"
# enter_here: "<enter unlock code here>" # enter_here: "<Ввести здесь код разблокировки>"
# successfully_joined: "Successfully joined" # successfully_joined: "Successfully joined"
# click_to_start: "Click here to start taking" # click_to_start: "Click here to start taking"
# my_courses: "My Courses" my_courses: "Мои курсы"
# classroom: "Classroom" classroom: "Класс"
# use_school_email: "use your school email if you have one" # use_school_email: "use your school email if you have one"
# unique_name: "a unique name no one has chosen" # unique_name: "a unique name no one has chosen"
# pick_something: "pick something you can remember" # pick_something: "pick something you can remember"
# class_code: "Class Code" # class_code: "Class Code"
# optional_ask: "optional - ask your teacher to give you one!" optional_ask: "Как вариант - попросите учителя дать вам какой-нибудь!"
# optional_school: "optional - what school do you go to?" optional_school: "Не обязательное - в какую школу вы ходите?"
# start_playing: "Start Playing" start_playing: "Начать играть"
# skip_this: "Skip this, I'll create an account later!" skip_this: "Пропустить это, я создам учетную запись позже!"
# welcome: "Welcome" welcome: "Добро пожаловать"
# getting_started: "Getting Started with Courses" getting_started: "Начать проходить курсы"
# download_getting_started: "Download Getting Started Guide [PDF]" # download_getting_started: "Download Getting Started Guide [PDF]"
# getting_started_1: "Create a new class by clicking the green 'Create New Class' button below." # getting_started_1: "Create a new class by clicking the green 'Create New Class' button below."
# getting_started_2: "Once you've created a class, click the blue 'Add Students' button." # getting_started_2: "Once you've created a class, click the blue 'Add Students' button."
# getting_started_3: "You'll see student's progress below as they sign up and join your class." # getting_started_3: "You'll see student's progress below as they sign up and join your class."
# additional_resources: "Additional Resources" additional_resources: "Дополнительные ресурсы"
# additional_resources_1_pref: "Download/print our" additional_resources_1_pref: "Скачать/распечатать наш"
# additional_resources_1_mid: "Course 1 Teacher's Guide" # additional_resources_1_mid: "Course 1 Teacher's Guide"
# additional_resources_1_suff: "explanations and solutions to each level." # additional_resources_1_suff: "explanations and solutions to each level."
# additional_resources_2_pref: "Complete our" # additional_resources_2_pref: "Complete our"
# additional_resources_2_suff: "to get two free enrollments for the rest of our paid courses." # additional_resources_2_suff: "to get two free enrollments for the rest of our paid courses."
# additional_resources_3_pref: "Visit our" additional_resources_3_pref: "Посетить наш"
# additional_resources_3_mid: "Teacher Forums" # additional_resources_3_mid: "Teacher Forums"
# additional_resources_3_suff: "to connect to fellow educators who are using CodeCombat." # additional_resources_3_suff: "to connect to fellow educators who are using CodeCombat."
# additional_resources_4_pref: "Check out our" # additional_resources_4_pref: "Check out our"
# additional_resources_4_mid: "Schools Page" # additional_resources_4_mid: "Schools Page"
# additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings." # additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings."
# your_classes: "Your Classes" your_classes: "Ваши классы"
# no_classes: "No classes yet!" # no_classes: "No classes yet!"
# create_new_class1: "create new class" create_new_class1: "создать новый класс"
# available_courses: "Available Courses" # available_courses: "Available Courses"
# unused_enrollments: "Unused enrollments available:" # unused_enrollments: "Unused enrollments available:"
# students_access: "All students get access to Introduction to Computer Science for free. One enrollment per student is required to assign them to paid CodeCombat courses. A single student does not need multiple enrollments to access all paid courses." # students_access: "All students get access to Introduction to Computer Science for free. One enrollment per student is required to assign them to paid CodeCombat courses. A single student does not need multiple enrollments to access all paid courses."
# active_courses: "active courses" # active_courses: "active courses"
# no_students: "No students yet!" no_students: "Ещё нет учеников!"
# add_students1: "add students" add_students1: "добавить учеников"
# view_edit: "view/edit" view_edit: "смотреть/редактировать"
# students_enrolled: "students enrolled" students_enrolled: "учеников зачислено"
# length: "Length:" # length: "Length:"
classes: classes:
@ -1254,11 +1254,11 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
rules: "Правила" rules: "Правила"
winners: "Победители" winners: "Победители"
league: "Лига" league: "Лига"
# red_ai: "Red CPU" # "Red AI Wins", at end of multiplayer match playback red_ai: "CPU красного" # "Red AI Wins", at end of multiplayer match playback
# blue_ai: "Blue CPU" blue_ai: "CPU синего"
# wins: "Wins" # At end of multiplayer match playback wins: "Победы" # At end of multiplayer match playback
# humans: "Red" # Ladder page display team name humans: "Красный" # Ladder page display team name
# ogres: "Blue" ogres: "Синий"
user: user:
stats: "Характеристики" stats: "Характеристики"
@ -1406,16 +1406,16 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
campaigns: "Кампании" campaigns: "Кампании"
poll: "Опрос" poll: "Опрос"
user_polls_record: "История опросов" user_polls_record: "История опросов"
# course: "Course" course: "Курс"
# courses: "Courses" courses: "Курсы"
# course_instance: "Course Instance" course_instance: "Экземпляр курса"
# course_instances: "Course Instances" course_instances: "Экземпляры курса"
# classroom: "Classroom" classroom: "Класс"
# classrooms: "Classrooms" classrooms: "Классы"
# clan: "Clan" clan: "Клан"
# clans: "Clans" clans: "Кланы"
# members: "Members" members: "Члены"
# users: "Users" users: "пользователи"
concepts: concepts:
advanced_strings: "Продвинутые строки" advanced_strings: "Продвинутые строки"

View file

@ -19,11 +19,11 @@ module.exports = class User extends CocoModel
broadName: -> broadName: ->
name = @get('name') name = @get('name')
return name if name return name if name
name = _.filter([@get('firstName'), @get('lastName')]).join('') name = _.filter([@get('firstName'), @get('lastName')]).join(' ')
return name if name return name if name
email = @get('email') email = @get('email')
return email if email return email if email
return '' return 'Anoner'
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

View file

@ -79,6 +79,7 @@ _.extend UserSchema.properties,
archmageNews: {$ref: '#/definitions/emailSubscription'} archmageNews: {$ref: '#/definitions/emailSubscription'}
artisanNews: {$ref: '#/definitions/emailSubscription'} artisanNews: {$ref: '#/definitions/emailSubscription'}
diplomatNews: {$ref: '#/definitions/emailSubscription'} diplomatNews: {$ref: '#/definitions/emailSubscription'}
teacherNews: {$ref: '#/definitions/emailSubscription'}
scribeNews: {$ref: '#/definitions/emailSubscription'} scribeNews: {$ref: '#/definitions/emailSubscription'}
# notifications # notifications

View file

@ -1,344 +0,0 @@
@import "app/styles/bootstrap/variables"
#profile-view
$sideBackground: rgb(220, 220, 220)
#login-message
h1, h2, h3, h4
font-family: Arial, Helvetica, sans-serif
color: #333333
width: 100%
text-align: center
margin-top: 200px
.profile-control-bar
background-color: $sideBackground
width: 100%
text-align: center
.profile-completion-progress
width: 100%
height: 33px
margin-bottom: 0
border-radius: 0
background-color: darken($sideBackground, 15%)
.progress-bar
line-height: 33px
font-size: 16px
.progress-text
position: absolute
width: 100%
text-align: center
line-height: 33px
font-size: 16px
color: white
text-shadow: 0px 1px 0px black
button, a.btn
margin: 10px 2px 10px 2px
&:disabled
border-radius: 0
opacity: 1
i
margin-right: 5px
.sample-profile
position: absolute
right: 5px
.main-content-area
padding: 0
background-color: white
.flat-button
width: 100%
margin-bottom: 10px
background: rgb(78, 78, 78)
border: 0
border-radius: 0
padding: 10px
.public-profile-container
padding: 20px
img.profile-photo
width: 256px
border-radius: 6px
.job-profile-container
width: 100%
height: 100%
min-height: 600px
padding: 0
display: table
h1, h2, h3, h4, h5, h6
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif
color: #555
ul.links, ul.projects, ul.sessions
margin: 0
padding: 0
li
list-style: none
.job-profile-row
height: 100%
display: table-row
$side-width: 250px
$side-padding: 5px
$middle-width: 524px
$middle-padding: 20px
.full-height-column
height: 100%
padding: $side-padding
display: table-cell
vertical-align: top
h3:first-child
margin: 5px 0 5px 0
.left-column
width: $side-width - 2 * $side-padding
padding: $side-padding
background-color: $sideBackground
.sub-column
width: $side-width - 2 * $side-padding
overflow-wrap: break-word
#profile-photo-container
position: relative
margin-bottom: 10px
img.profile-photo
width: $side-width - 2 * $side-padding
border-radius: 6px
.profile-caption
background-color: rgba(0, 0, 0, 0.5)
color: white
border-bottom-right-radius: 6px
border-bottom-left-radius: 6px
position: absolute
width: 100%
bottom: 0px
text-align: center
ul.links
text-align: center
li.has-icon
display: inline-block
img
margin: 0 0 10px 0
li.has-icon:not(:nth-child(5))
img
margin: 0 5px 10px 5px
#contact-candidate
margin-top: 20px
background-color: rgb(177, 55, 25)
padding: 15px
font-size: 20px
.middle-column
width: $middle-width - 2 * $middle-padding
padding-left: $middle-padding
padding-right: $middle-padding
background-color: white
.sub-column
width: $middle-width - 2 * $middle-padding
overflow-wrap: break-word
&.double-column
width: $middle-width + $side-width + 2 * $side-padding - 2 * $middle-padding
$middle-padding-double: 30px
padding-left: $middle-padding-double
padding-right: $middle-padding-double
.sub-column
width: $middle-width + $side-width + 2 * $side-padding - 2 * $middle-padding - 2 * $middle-padding-double
overflow-wrap: break-word
code
background-color: $sideBackground
color: #555
margin: 2px 0
display: inline-block
text-transform: lowercase
.long-description
margin-top: 10px
img
max-width: 524px - 60px
max-height: 200px
.experience-header
margin-top: 25px
.header-icon
margin-right: 10px
width: 32px
height: 32px
.experience-entry
margin-bottom: 15px
.duration
margin-left: 10px
margin-bottom: 10px
#job-profile-notes
width: 100%
height: 100px
#remark-treema
background-color: white
border: 0
padding-top: 0
.right-column
width: $side-width
background-color: $sideBackground
.sub-column
width: $side-width - 2 * $side-padding
overflow-wrap: break-word
> h3:first-child
background-color: white
padding: 5px 5px
margin: 5px 2px 5px 2px
ul.projects
li
margin-bottom: 10px
padding: 5px 3px
border: 2px solid $sideBackground
transition: .5s ease-in-out
position: relative
background-color: white
&:hover
border-color: rgb(100, 130, 255)
a
position: relative
z-index: 2
> a
position: absolute
width: 100%
height: 100%
top: 0
left: 0
z-index: 1
.project-image
width: 230px
height: 115px
background-size: cover
background-repeat: no-repeat
background-position: center
-webkit-filter: grayscale(100%)
-webkit-transition: .5s ease-in-out
-moz-filter: grayscale(100%)
-moz-transition: .5s ease-in-out
-o-filter: grayscale(100%)
-o-transition: .5s ease-in-out
filter: grayscale(100%)
transition: .5s ease-in-out
ul.projects li:hover .project-image, .project-image:hover
-webkit-filter: grayscale(0%)
-moz-filter: grayscale(0%)
-o-filter: grayscale(0%)
filter: grayscale(0%)
.main-content-area
.job-profile-container
.editable-section
position: relative
transition: box-shadow 0.5s easeInOutQuad
min-height: 30px
&.just-saved
box-shadow: 0px 0px 20px 0px #080
z-index: 1
.editable-form
display: none
background-color: white
padding: 5px 5px 5px 5px
.skill-array-item
display: inline-block
input
width: 120px
margin: 5px
.project-image
width: 210px
height: 105px
cursor: pointer
.editable-icon
display: none
.job-profile-container.editable-profile
.full-height-column.deemphasized
background-color: $sideBackground
.saving
opacity: 0.75
.editable-thinner
padding-right: 30px
.editable-icon
display: block
position: absolute
right: 5px
top: 5px
font-size: 20px
color: $blue
opacity: 0.5
.edit-label
color: $blue
font-weight: 300
.edit-example-button
background-color: transparentize($blue, 0.25)
.edit-example-text
color: $blue
code.edit-example-tag
color: $blue
.emphasized
outline: 1px solid $green
.editable-section.deemphasized:not(.just-saved), .our-notes-section.deemphasized
opacity: 0.5
.editable-section:hover
cursor: pointer
outline: 1px solid $blue
.editable-icon
opacity: 1.0
cursor: pointer
.editable-form
cursor: default

View file

@ -1,74 +0,0 @@
#admin-candidates-view
h1, h2, h3
font: Arial
.see-candidates-header
margin: 30px
text-align: center
#see-candidates
cursor: pointer
.employer_icon
width: 125px
float: left
margin: 0px 15px 15px 0px
.information_row
height: 150px
padding-right: 15px
#leftside
width: 500px
float: left
#rightside
width: 500px
float: left
.tablesorter
//img
// display: none
.tablesorter-header
cursor: pointer
&:hover
color: black
&:first-child
// Make sure that "Developer #56" doesn't wrap onto second row
min-width: 110px
.tablesorter-headerAsc
background-color: #cfc
.tablesorter-headerDesc
background-color: #ccf
tr
cursor: pointer
tr.expired
opacity: 0.5
code
background-color: rgb(220, 220, 220)
color: #555
margin: 2px 0
display: inline-block
text-transform: lowercase
td:nth-child(3) select
min-width: 100px
td:nth-child(6) select
min-width: 50px
td:nth-child(7) select
min-width: 100px
#employers-view, #profile-view.viewed-by-employer
#outer-content-wrapper, #intermediate-content-wrapper, #inner-content-wrapper
background: #949494
.main-content-area
background-color: #EAEAEA

View file

@ -18,9 +18,20 @@
.name-row .name-row
@extend .body-row @extend .body-row
max-width: 300px max-width: 300px
.description-row
@extend .body-row
max-width: 520px
.small-name-row .small-name-row
@extend .body-row @extend .body-row
max-width: 200px max-width: 200px
.watch-row
@extend .body-row
max-width: 80px
text-align: center
&.watching
opacity: 1.0
&.not-watching
opacity: 0.5
tr.mine tr.mine
background-color: #f8ecaa background-color: #f8ecaa

View file

@ -1,7 +1,7 @@
@import "app/styles/mixins" @import "app/styles/mixins"
@import "app/styles/bootstrap/variables" @import "app/styles/bootstrap/variables"
#ladder-home-view #main-ladder-view
.level .level
width: 100% width: 100%
position: relative position: relative

View file

@ -1,52 +0,0 @@
@import "app/styles/mixins"
@import "app/styles/bootstrap/variables"
#employers-wrapper
background-color: #B4B4B4
height: 100%
#outer-content-wrapper, #intermediate-content-wrapper, #inner-content-wrapper
background: #B4B4B4
.navbar, #top-nav, .content.clearfix
background-color: #B4B4B4
.footer
border-top: none
background-color: #B4B4B4
padding-bottom: 50px
#employer-content-area
margin: auto
.employer-modal-background-wrapper
background-color: white
border: 2px #333333 solid
border-radius: 4px
h1, h2, h3, h4, h5
color: black
font-family: Arial, Helvetica, sans-serif
.input-large
font-size: 28px
height: 60px
border: 2px rgb(231,231,231) solid
box-shadow: none
width: 70%
margin-left: 15%
#create-account-button, #contract-agreement-button, #login-button
background: #fce232 /* Old browsers */
background: -moz-linear-gradient(top, #fce232 0%, #ea8e2b 100%)
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fce232), color-stop(100%,#ea8e2b))
background: -webkit-linear-gradient(top, #fce232 0%,#ea8e2b 100%)
background: -o-linear-gradient(top, #fce232 0%,#ea8e2b 100%)
background: -ms-linear-gradient(top, #fce232 0%,#ea8e2b 100%)
background: linear-gradient(to bottom, #fce232 0%,#ea8e2b 100%)
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fce232', endColorstr='#ea8e2b',GradientType=0 )
height: 60px
font-size: 24px
color: black
.login-link
text-decoration: underline
#login-button
margin-left: 40%
width: 20%

View file

@ -159,7 +159,7 @@ else
| (Translator) | (Translator)
input#email_diplomatNews(name="email_diplomatNews", type="checkbox", checked=subs.diplomatNews) input#email_diplomatNews(name="email_diplomatNews", type="checkbox", checked=subs.diplomatNews)
span(data-i18n="contribute.diplomat_subscribe_desc").help-block Get emails about i18n developments and, eventually, levels to translate. span(data-i18n="contribute.diplomat_subscribe_desc").help-block Get emails about i18n developments and, eventually, levels to translate.
.form-group.checkbox .form-group.checkbox
label.control-label(for="email_ambassadorNews") label.control-label(for="email_ambassadorNews")
span(data-i18n="classes.ambassador_title") span(data-i18n="classes.ambassador_title")
@ -169,7 +169,13 @@ else
| (Support) | (Support)
input#email_ambassadorNews(name="email_ambassadorNews", type="checkbox", checked=subs.ambassadorNews) input#email_ambassadorNews(name="email_ambassadorNews", type="checkbox", checked=subs.ambassadorNews)
span(data-i18n="contribute.ambassador_subscribe_desc").help-block Get emails on support updates and multiplayer developments. span(data-i18n="contribute.ambassador_subscribe_desc").help-block Get emails on support updates and multiplayer developments.
.form-group.checkbox
label.control-label(for="email_teacherNews")
span(data-i18n="classes.teacher_title")
input#email_teacherNews(name="email_teacherNews", type="checkbox", checked=subs.teacherNews)
span(data-i18n="contribute.teacher_subscribe_desc").help-block
button#toggle-all-btn.btn.btn-primary.form-control(data-i18n="account_settings.email_toggle") Toggle All button#toggle-all-btn.btn.btn-primary.form-control(data-i18n="account_settings.email_toggle") Toggle All
.panel.panel-default .panel.panel-default

View file

@ -55,7 +55,7 @@ block content
for user in view.users.models for user in view.users.models
.row .row
.col-md-6 .col-md-6
.student-name= user.broadName() || 'Anoner' .student-name= user.broadName()
.col-md-6 .col-md-6
if view.teacherMode if view.teacherMode
a.remove-student-link.pull-right.text-uppercase(data-user-id=user.id) a.remove-student-link.pull-right.text-uppercase(data-user-id=user.id)

View file

@ -34,7 +34,13 @@ block content
li li
span.spr(data-i18n="courses.additional_resources_1_pref") span.spr(data-i18n="courses.additional_resources_1_pref")
a(href='http://codecombat.com/docs/CodeCombatTeacherGuideCourse1.pdf', data-i18n="courses.additional_resources_1_mid") a(href='http://codecombat.com/docs/CodeCombatTeacherGuideCourse1.pdf', data-i18n="courses.additional_resources_1_mid")
span.spl(data-i18n="courses.additional_resources_1_suff") span.spl.spr(data-i18n="courses.additional_resources_1_mid2")
a(href='http://codecombat.com/docs/CodeCombatTeacherGuideCourse2.pdf', data-i18n="courses.additional_resources_1_mid3")
span.spl.spr(data-i18n="courses.additional_resources_1_suff")
li
span.spr(data-i18n="courses.educator_wiki_pref")
a(href='https://sites.google.com/a/codecombat.com/teacher-guides/', data-i18n="courses.educator_wiki_mid")
span.spl(data-i18n="courses.educator_wiki_suff")
li li
span.spr(data-i18n="courses.additional_resources_2_pref") span.spr(data-i18n="courses.additional_resources_2_pref")
a(href='/teachers/freetrial', data-i18n="teachers_survey.title") a(href='/teachers/freetrial', data-i18n="teachers_survey.title")

View file

@ -1 +1,35 @@
extends /templates/common/table extends /templates/common/table
block tableResultsHeader
tr
th(colspan=4)
span(data-i18n="general.results")
| Results
span
|: #{documents.length}
block tableHeader
tr
th(data-i18n="general.name") Name
th(data-i18n="general.description") Description
th(data-i18n="general.version") Version
th(data-i18n="common.watch") Watch
block tableBody
for document in documents
- var data = document.attributes;
tr(class=document.get('creator') == me.id ? 'mine' : '')
td(title=data.name).name-row
a(href="/editor/#{page}/#{data.slug || data._id}")
| #{data.name}
td(title=data.description).description-row
| #{data.description}
td #{data.version.major}.#{data.version.minor}
if document.watching()
td.watch-row.watching
span(aria-hidden="true").glyphicon.glyphicon-eye-open
span(data-i18n="common.watch").sr-only Watch
else
td.watch-row.not-watching
span(aria-hidden="true").glyphicon.glyphicon-eye-close
span(data-i18n="common.unwatch").sr-only Unwatch

View file

@ -1,21 +0,0 @@
body
#fb-root
#employers-wrapper
block header
.nav
.content.clearfix
.navbar-header
a.navbar-brand(href='/')
img(src="/images/pages/base/recruitment_logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
block outer_content
#outer-content-wrapper
#intermediate-content-wrapper
#inner-content-wrapper
.main-content-area#employer-content-area
block content
p If this is showing, you dun goofed
block footer
.footer

View file

@ -21,11 +21,11 @@ module.exports = class SalesView extends RootView
onClickLogin: (e) -> onClickLogin: (e) ->
@openModalView new AuthModal(mode: 'login') if me.get('anonymous') @openModalView new AuthModal(mode: 'login') if me.get('anonymous')
window.tracker?.trackEvent 'Started Login', category: 'Sales', label: 'Sales Login' window.tracker?.trackEvent 'Started Login', category: 'Sales', label: 'Sales Login', ['Mixpanel']
onClickSignup: (e) -> onClickSignup: (e) ->
@openModalView new AuthModal() if me.get('anonymous') @openModalView new AuthModal() if me.get('anonymous')
window.tracker?.trackEvent 'Started Signup', category: 'Sales', label: 'Sales Create' window.tracker?.trackEvent 'Started Signup', category: 'Sales', label: 'Sales Create', ['Mixpanel']
logoutRedirectURL: false logoutRedirectURL: false

View file

@ -82,3 +82,4 @@ module.exports = class TeachersFreeTrialView extends RootView
console.error 'Error saving trial request', response console.error 'Error saving trial request', response
success: (model, response, options) => success: (model, response, options) =>
@refreshData() @refreshData()
window.tracker?.trackEvent 'Submit Trial Request', category: 'Teachers', label: 'Trial Request', ['Mixpanel']

View file

@ -7,7 +7,7 @@ class PendingPatchesCollection extends CocoCollection
url: '/db/patch?view=pending' url: '/db/patch?view=pending'
model: Patch model: Patch
module.exports = class PatchesView extends RootView module.exports = class PendingPatchesView extends RootView
id: 'pending-patches-view' id: 'pending-patches-view'
template: template template: template

View file

@ -43,6 +43,7 @@ module.exports = class SubscribeModal extends ModalView
@setupPaymentMethodsInfoPopover() @setupPaymentMethodsInfoPopover()
if @basicProduct if @basicProduct
@$el.find('.gem-amount').html $.i18n.t('subscribe.feature4').replace('{{gems}}', @basicProduct.get('gems')) @$el.find('.gem-amount').html $.i18n.t('subscribe.feature4').replace('{{gems}}', @basicProduct.get('gems'))
@playSound 'game-menu-open'
setupParentButtonPopover: -> setupParentButtonPopover: ->
popoverTitle = $.i18n.t 'subscribe.parent_email_title' popoverTitle = $.i18n.t 'subscribe.parent_email_title'
@ -221,3 +222,7 @@ module.exports = class SubscribeModal extends ModalView
@state = 'unknown_error' @state = 'unknown_error'
@stateMessage = "#{xhr.status}: #{xhr.responseText}" @stateMessage = "#{xhr.status}: #{xhr.responseText}"
@render() @render()
onHidden: ->
super()
@playSound 'game-menu-close'

View file

@ -2,7 +2,7 @@ Classroom = require 'models/Classroom'
ModalView = require 'views/core/ModalView' ModalView = require 'views/core/ModalView'
template = require 'templates/courses/classroom-settings-modal' template = require 'templates/courses/classroom-settings-modal'
module.exports = class AddLevelSystemModal extends ModalView module.exports = class ClassroomSettingsModal extends ModalView
id: 'classroom-settings-modal' id: 'classroom-settings-modal'
template: template template: template

View file

@ -79,6 +79,7 @@ module.exports = class ClassroomView extends RootView
onLoaded: -> onLoaded: ->
@teacherMode = me.isAdmin() or @classroom.get('ownerID') is me.id @teacherMode = me.isAdmin() or @classroom.get('ownerID') is me.id
userSessions = @sessions.groupBy('creator') userSessions = @sessions.groupBy('creator')
@users.remove(@users.where({ deleted: true }))
for user in @users.models for user in @users.models
user.sessions = new CocoCollection(userSessions[user.id], { model: LevelSession }) user.sessions = new CocoCollection(userSessions[user.id], { model: LevelSession })
user.sessions.comparator = 'changed' user.sessions.comparator = 'changed'

View file

@ -4,7 +4,7 @@ auth = require 'core/auth'
forms = require 'core/forms' forms = require 'core/forms'
User = require 'models/User' User = require 'models/User'
module.exports = class StudentSignInModal extends ModalView module.exports = class StudentLogInModal extends ModalView
id: 'student-log-in-modal' id: 'student-log-in-modal'
template: template template: template

View file

@ -104,13 +104,11 @@ class SolutionsNode extends TreemaArrayNode
onClickFillDefaults: (e) => onClickFillDefaults: (e) =>
e.preventDefault() e.preventDefault()
sources = {}
if source = @parent.data.source
sources.javascript = source
sources = { javascript: @parent.data.source } sources = { javascript: @parent.data.source }
_.extend sources, @parent.data.languages or {} _.extend sources, @parent.data.languages or {}
solutions = _.clone(@data) solutions = _.clone(@data)
solutions = _.filter(solutions, (solution) -> not _.isEmpty(solution) )
for language in _.keys(sources) for language in _.keys(sources)
source = sources[language] source = sources[language]
solution = _.findWhere(solutions, {language: language}) solution = _.findWhere(solutions, {language: language})
@ -120,5 +118,5 @@ class SolutionsNode extends TreemaArrayNode
language: language language: language
passes: true passes: true
}) })
@set('/', solutions) @set('/', solutions)

View file

@ -6,6 +6,7 @@ module.exports = class LevelSearchView extends SearchView
model: require 'models/Level' model: require 'models/Level'
modelURL: '/db/level' modelURL: '/db/level'
tableTemplate: require 'templates/editor/level/table' tableTemplate: require 'templates/editor/level/table'
projection: ['slug', 'name', 'description', 'version', 'watchers', 'creator']
page: 'level' page: 'level'
getRenderData: -> getRenderData: ->

View file

@ -1,8 +1,8 @@
I18NEditModelView = require './I18NEditModelView' I18NEditModelView = require './I18NEditModelView'
ThangType = require 'models/ThangType' ThangType = require 'models/ThangType'
module.exports = class ThangTypeI18NView extends I18NEditModelView module.exports = class I18NEditThangTypeView extends I18NEditModelView
id: 'thang-type-i18n-view' id: 'i18n-thang-type-view'
modelClass: ThangType modelClass: ThangType
buildTranslationList: -> buildTranslationList: ->

View file

@ -11,8 +11,8 @@ class LevelSessionsCollection extends CocoCollection
super() super()
@url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID" @url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID"
module.exports = class LadderHomeView extends RootView module.exports = class MainLadderView extends RootView
id: 'ladder-home-view' id: 'main-ladder-view'
template: template template: template
constructor: (options) -> constructor: (options) ->

View file

@ -1,4 +0,0 @@
AuthModal = require 'views/core/AuthModal'
module.exports = class SignupModalView extends AuthModal
mode: 'signup'

View file

@ -2,7 +2,7 @@ ModalView = require 'views/core/ModalView'
template = require 'templates/play/modal/share-progress-modal' template = require 'templates/play/modal/share-progress-modal'
storage = require 'core/storage' storage = require 'core/storage'
module.exports = class SubscribeModal extends ModalView module.exports = class ShareProgressModal extends ModalView
id: 'share-progress-modal' id: 'share-progress-modal'
template: template template: template
plain: true plain: true

View file

@ -55,7 +55,7 @@
"aether": "~0.4.0", "aether": "~0.4.0",
"async": "0.2.x", "async": "0.2.x",
"aws-sdk": "~2.0.0", "aws-sdk": "~2.0.0",
"bayesian-battle": "0.0.x", "bayesian-battle": "0.0.7",
"coffee-script": "1.9.x", "coffee-script": "1.9.x",
"connect": "2.7.x", "connect": "2.7.x",
"express": "~3.0.6", "express": "~3.0.6",
@ -98,7 +98,7 @@
"css-brunch": "^1.7.0", "css-brunch": "^1.7.0",
"fs-extra": "^0.26.2", "fs-extra": "^0.26.2",
"jade-brunch": "1.7.5", "jade-brunch": "1.7.5",
"jasmine": "^2.3.2", "jasmine": "^2.4.1",
"javascript-brunch": "> 1.0 < 1.8", "javascript-brunch": "> 1.0 < 1.8",
"karma": "~0.13", "karma": "~0.13",
"karma-chrome-launcher": "~0.1.2", "karma-chrome-launcher": "~0.1.2",

View file

@ -1,17 +1,108 @@
// Latest teacher trial requests /* global ISODate */
// Latest approved teacher trial requests
// Usage: // Usage:
// mongo <address>:<port>/<database> <script file> -u <username> -p <password> // mongo <address>:<port>/<database> <script file> -u <username> -p <password>
var startDay = '2015-10-01'; var startDay = '2015-11-01';
var endDay = '2016-10-01'; var endDay = '2016-01-01';
print('Date range:', startDay, endDay); print('Date range:', startDay, 'up to', endDay);
var userIDs = getTrialRequestApplicants(startDay, endDay);
print('Trial request applicants found:', userIDs.length); var users = getUsers(startDay, endDay);
var userEmails = getUserEmails(userIDs); print('Teachers found:', users.length);
print('User emails found:', userEmails.length); print("User Id\tStudent Count\tTrial Type\tEmail\tName\tSchool");
for (var i = 0; i < userEmails.length; i++) { for (var i = 0; i < users.length; i++) {
print(userEmails[i]); if (users[i].schoolName) {
print(users[i].id, '\t', users[i].studentCount, '\t', users[i].type, '\t', users[i].email, '\t', users[i].name, '\t', users[i].schoolName);
}
}
function getUsers(startDay, endDay) {
var cursor, doc, userID;
// Find approved trial requests
var startObj = objectIdWithTimestamp(ISODate(startDay + "T00:00:00.000Z"));
var endObj = objectIdWithTimestamp(ISODate(endDay + "T00:00:00.000Z"))
cursor = db['trial.requests'].find(
{$and:
[
{_id: {$gte: startObj}},
{_id: {$lt: endObj}},
{status: 'approved'}
]
},
{applicant: 1, type: 1}
);
var userIDs = [];
var userTrialTypeMap = {};
var orphanedTrialRequests = [];
while (cursor.hasNext()) {
doc = cursor.next();
if (doc.applicant) {
userIDs.push(doc.applicant);
userID = doc.applicant.valueOf();
if (!userTrialTypeMap[userID] || userTrialTypeMap[userID] !== 'course') userTrialTypeMap[userID] = doc.type;
}
else {
orphanedTrialRequests.push(doc._id);
}
}
// May have orphaned trial requests due to previous external import of requests from Google form
if (orphanedTrialRequests.length > 0) {
cursor = db.prepaids.find({'properties.trialRequestID': {$in: orphanedTrialRequests}}, {creator: 1});
while (cursor.hasNext()) {
doc = cursor.next();
if (doc.creator) {
userIDs.push(doc.creator);
userID = doc.creator.valueOf();
if (!userTrialTypeMap[userID] || userTrialTypeMap[userID] !== 'course') userTrialTypeMap[userID] = doc.type;
}
else {
print('No creator!');
printjson(doc);
break;
}
}
}
// Find user class sizes
var userClassroomStudentsMap = {};
cursor = db.classrooms.find({ownerID: {$in: userIDs}}, {members: 1, ownerID: 1});
while (cursor.hasNext()) {
doc = cursor.next();
if (doc.members) {
userID = doc.ownerID.valueOf();
if (!userClassroomStudentsMap[userID]) userClassroomStudentsMap[userID] = 0;
userClassroomStudentsMap[userID] = doc.members.length;
}
}
// Build user data
var users = [];
cursor = db['users'].find({$and: [{_id: {$in: userIDs}}, {deleted: {$exists: false}}, {anonymous: false}]}, {emailLower: 1, name: 1, schoolName: 1});
while (cursor.hasNext()) {
doc = cursor.next();
userID = doc._id.valueOf();
var userData = {
id: userID,
email: doc.emailLower,
name: doc.name || "",
schoolName: doc.schoolName || "",
studentCount: userClassroomStudentsMap[userID] || 0,
type: userTrialTypeMap[userID]
};
users.push(userData);
}
users.sort(function(a, b) {
if (a.studentCount > b.studentCount) return -1;
else if (a.studentCount === b.studentCount) return a.email.localeCompare(b.email);
return 1;
});
return users;
} }
function objectIdWithTimestamp(timestamp) { function objectIdWithTimestamp(timestamp) {
@ -24,60 +115,3 @@ function objectIdWithTimestamp(timestamp) {
return constructedObjectId return constructedObjectId
} }
function getTrialRequestApplicants(startDay, endDay) {
var startObj = objectIdWithTimestamp(ISODate(startDay + "T00:00:00.000Z"));
var endObj = objectIdWithTimestamp(ISODate(endDay + "T00:00:00.000Z"))
var cursor = db['trial.requests'].find(
{$and:
[
{_id: {$gte: startObj}},
{_id: {$lt: endObj}}
]
},
{applicant: 1}
);
var applicantIDs = [];
var orphanedTrialRequests = [];
while (cursor.hasNext()) {
var myDoc = cursor.next();
if (myDoc.applicant) {
applicantIDs.push(myDoc.applicant);
}
else {
orphanedTrialRequests.push(myDoc._id);
}
}
// May have orphaned trial requests due to previous external import of requests from Google form
if (orphanedTrialRequests.length > 0) {
cursor = db.prepaids.find({'properties.trialRequestID': {$in: orphanedTrialRequests}}, {creator: 1});
while (cursor.hasNext()) {
var myDoc = cursor.next();
if (myDoc.creator) {
applicantIDs.push(myDoc.creator);
}
else {
print('No creator!');
printjson(myDoc);
break;
}
}
}
return applicantIDs;
}
function getUserEmails(userIDs) {
var cursor = db['users'].find({_id: {$in: userIDs}}, {emailLower: 1});
var userEmails = [];
while (cursor.hasNext()) {
var myDoc = cursor.next();
if (myDoc.emailLower) {
userEmails.push(myDoc.emailLower);
}
}
userEmails.sort()
return userEmails;
}

View file

@ -4,6 +4,7 @@ config = require '../../server_config'
plugins = require '../plugins/plugins' plugins = require '../plugins/plugins'
User = require '../users/User' User = require '../users/User'
jsonSchema = require '../../app/schemas/models/classroom.schema' jsonSchema = require '../../app/schemas/models/classroom.schema'
utils = require '../lib/utils'
ClassroomSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref} ClassroomSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref}
@ -18,12 +19,10 @@ ClassroomSchema.statics.editableProperties = [
'aceConfig' 'aceConfig'
] ]
# 250 words; will want to use 4 code words once we get past 10M classrooms.
words = 'angry apple arm army art baby back bad bag ball bath bean bear bed bell best big bird bite blue boat book box boy bread burn bus cake car cat chair city class clock cloud coat coin cold cook cool corn crash cup dark day deep desk dish dog door down draw dream drink drop dry duck dust east eat egg enemy eye face false farm fast fear fight find fire flag floor fly food foot fork fox free fruit full fun funny game gate gift glass goat gold good green hair half hand happy heart heavy help hide hill home horse house ice idea iron jelly job jump key king lamp large last late lazy leaf left leg life light lion lock long luck map mean milk mix moon more most mouth music name neck net new next nice night north nose old only open page paint pan paper park party path pig pin pink place plane plant plate play point pool power pull push queen rain ready red rest rice ride right ring road rock room run sad safe salt same sand sell shake shape share sharp sheep shelf ship shirt shoe shop short show sick side silly sing sink sit size sky sleep slow small snow sock soft soup south space speed spell spoon star start step stone stop sweet swim sword table team thick thin thing think today tooth top town tree true turn type under want warm watch water west wide win word yes zoo'.split(' ')
ClassroomSchema.statics.generateNewCode = (done) -> ClassroomSchema.statics.generateNewCode = (done) ->
tryCode = -> tryCode = ->
codeCamel = _.map(_.sample(words, 3), (s) -> s[0].toUpperCase() + s.slice(1)).join('') # Use 4 code words once we get past 10M classrooms
codeCamel = utils.getCodeCamel(3)
code = codeCamel.toLowerCase() code = codeCamel.toLowerCase()
Classroom.findOne code: code, (err, classroom) -> Classroom.findOne code: code, (err, classroom) ->
return done() if err return done() if err
@ -31,8 +30,6 @@ ClassroomSchema.statics.generateNewCode = (done) ->
tryCode() tryCode()
tryCode() tryCode()
#ClassroomSchema.plugin plugins.NamedPlugin
ClassroomSchema.pre('save', (next) -> ClassroomSchema.pre('save', (next) ->
return next() if @get('code') return next() if @get('code')
Classroom.generateNewCode (code, codeCamel) => Classroom.generateNewCode (code, codeCamel) =>

View file

@ -3,6 +3,6 @@ config = require '../../server_config'
module.exports.MAILCHIMP_LIST_ID = 'e9851239eb' module.exports.MAILCHIMP_LIST_ID = 'e9851239eb'
module.exports.MAILCHIMP_GROUP_ID = '4529' module.exports.MAILCHIMP_GROUP_ID = '4529'
# these two need to be parallel # These two need to be parallel
module.exports.MAILCHIMP_GROUPS = ['Announcements', 'Adventurers', 'Artisans', 'Archmages', 'Scribes', 'Diplomats', 'Ambassadors'] module.exports.MAILCHIMP_GROUPS = ['Announcements', 'Adventurers', 'Artisans', 'Archmages', 'Scribes', 'Diplomats', 'Ambassadors', 'Teachers']
module.exports.NEWS_GROUPS = ['generalNews', 'adventurerNews', 'artisanNews', 'archmageNews', 'scribeNews', 'diplomatNews', 'ambassadorNews'] module.exports.NEWS_GROUPS = ['generalNews', 'adventurerNews', 'artisanNews', 'archmageNews', 'scribeNews', 'diplomatNews', 'ambassadorNews', 'teacherNews']

View file

@ -6,6 +6,11 @@ config = require '../../server_config'
module.exports = module.exports =
isID: (id) -> _.isString(id) and id.length is 24 and id.match(/[a-f0-9]/gi)?.length is 24 isID: (id) -> _.isString(id) and id.length is 24 and id.match(/[a-f0-9]/gi)?.length is 24
getCodeCamel: (numWords=3) ->
# 250 words
words = 'angry apple arm army art baby back bad bag ball bath bean bear bed bell best big bird bite blue boat book box boy bread burn bus cake car cat chair city class clock cloud coat coin cold cook cool corn crash cup dark day deep desk dish dog door down draw dream drink drop dry duck dust east eat egg enemy eye face false farm fast fear fight find fire flag floor fly food foot fork fox free fruit full fun funny game gate gift glass goat gold good green hair half hand happy heart heavy help hide hill home horse house ice idea iron jelly job jump key king lamp large last late lazy leaf left leg life light lion lock long luck map mean milk mix moon more most mouth music name neck net new next nice night north nose old only open page paint pan paper park party path pig pin pink place plane plant plate play point pool power pull push queen rain ready red rest rice ride right ring road rock room run sad safe salt same sand sell shake shape share sharp sheep shelf ship shirt shoe shop short show sick side silly sing sink sit size sky sleep slow small snow sock soft soup south space speed spell spoon star start step stone stop sweet swim sword table team thick thin thing think today tooth top town tree true turn type under want warm watch water west wide win word yes zoo'.split(' ')
_.map(_.sample(words, numWords), (s) -> s[0].toUpperCase() + s.slice(1)).join('')
objectIdFromTimestamp: (timestamp) -> objectIdFromTimestamp: (timestamp) ->
# mongoDB ObjectId contains creation date in first 4 bytes # mongoDB ObjectId contains creation date in first 4 bytes
# So, it can be used instead of a redundant created field # So, it can be used instead of a redundant created field

View file

@ -41,16 +41,13 @@ module.exports.formatSessionInformation = (session) ->
shouldUpdateLastOpponentSubmitDateForLeague: session.shouldUpdateLastOpponentSubmitDateForLeague shouldUpdateLastOpponentSubmitDateForLeague: session.shouldUpdateLastOpponentSubmitDateForLeague
module.exports.calculateSessionScores = (callback) -> module.exports.calculateSessionScores = (callback) ->
sessionIDs = _.pluck @clientResponseObject.sessions, 'sessionID' sessionIDs = _.map @clientResponseObject.sessions, 'sessionID'
async.map sessionIDs, retrieveOldSessionData.bind(@), (err, oldScores) => async.map sessionIDs, retrieveOldSessionData.bind(@), (err, oldScores) =>
if err? then return callback err, {error: 'There was an error retrieving the old scores'} if err? then return callback err, {error: 'There was an error retrieving the old scores'}
try oldScoreArray = _.toArray putRankingFromMetricsIntoScoreObject @clientResponseObject, oldScores
oldScoreArray = _.toArray putRankingFromMetricsIntoScoreObject @clientResponseObject, oldScores newScoreArray = updatePlayerSkills oldScoreArray
newScoreArray = updatePlayerSkills oldScoreArray createSessionScoreUpdate.call @, scoreObject for scoreObject in newScoreArray
createSessionScoreUpdate.call @, scoreObject for scoreObject in newScoreArray callback null, newScoreArray
callback err, newScoreArray
catch e
callback e
retrieveOldSessionData = (sessionID, callback) -> retrieveOldSessionData = (sessionID, callback) ->
formatOldScoreObject = (session) => formatOldScoreObject = (session) =>
@ -151,7 +148,7 @@ module.exports.addMatchToSessionsAndUpdate = (newScoreObject, callback) ->
#log.info "Match object computed, result: #{JSON.stringify(matchObject, null, 2)}" #log.info "Match object computed, result: #{JSON.stringify(matchObject, null, 2)}"
#log.info 'Writing match object to database...' #log.info 'Writing match object to database...'
#use bind with async to do the writes #use bind with async to do the writes
sessionIDs = _.pluck @clientResponseObject.sessions, 'sessionID' sessionIDs = _.map @clientResponseObject.sessions, 'sessionID'
async.each sessionIDs, updateMatchesInSession.bind(@, matchObject), (err) -> async.each sessionIDs, updateMatchesInSession.bind(@, matchObject), (err) ->
callback err callback err

View file

@ -8,6 +8,7 @@ errors = require '../commons/errors'
languages = require '../routes/languages' languages = require '../routes/languages'
sendwithus = require '../sendwithus' sendwithus = require '../sendwithus'
log = require 'winston' log = require 'winston'
utils = require '../lib/utils'
module.exports.setup = (app) -> module.exports.setup = (app) ->
authentication.serializeUser((user, done) -> done(null, user._id)) authentication.serializeUser((user, done) -> done(null, user._id))
@ -101,7 +102,10 @@ module.exports.setup = (app) ->
if not user if not user
return errors.notFound(res, [{message: 'not found', property: 'email'}]) return errors.notFound(res, [{message: 'not found', property: 'email'}])
user.set('passwordReset', Math.random().toString(36).slice(2, 7).toUpperCase()) user.set('passwordReset', utils.getCodeCamel())
emailContent = "<h3>Your temporary password: <b>#{user.get('passwordReset')}</b></h3>"
emailContent += "<p>Reset your password at <a href=\"http://codecombat.com/account/settings\">http://codecombat.com/account/settings</a></p>"
emailContent += "<p>Your old password cannot be retrieved.</p>"
user.save (err) => user.save (err) =>
return errors.serverError(res) if err return errors.serverError(res) if err
unless config.unittest unless config.unittest
@ -111,8 +115,8 @@ module.exports.setup = (app) ->
address: req.body.email address: req.body.email
email_data: email_data:
subject: 'CodeCombat Recovery Password' subject: 'CodeCombat Recovery Password'
title: 'Recovery Password' title: ''
content: "<p>Your CodeCombat recovery password for email #{req.body.email} is: #{user.get('passwordReset')}</p><p>Log in at <a href=\"http://codecombat.com/account/settings\">http://codecombat.com/account/settings</a> and change it.</p><p>Hope this helps!</p>" content: emailContent
sendwithus.api.send context, (err, result) -> sendwithus.api.send context, (err, result) ->
if err if err
console.error "Error sending password reset email: #{err.message or err}" console.error "Error sending password reset email: #{err.message or err}"

View file

@ -5,6 +5,7 @@ hipchat = require '../hipchat'
sendwithus = require '../sendwithus' sendwithus = require '../sendwithus'
Prepaid = require '../prepaids/Prepaid' Prepaid = require '../prepaids/Prepaid'
jsonSchema = require '../../app/schemas/models/trial_request.schema' jsonSchema = require '../../app/schemas/models/trial_request.schema'
User = require '../users/User'
TrialRequestSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref} TrialRequestSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref}
@ -32,6 +33,19 @@ TrialRequestSchema.post 'save', (doc) ->
sendwithus.api.send emailParams, (err, result) => sendwithus.api.send emailParams, (err, result) =>
log.error "sendwithus trial request approved error: #{err}, result: #{result}" if err log.error "sendwithus trial request approved error: #{err}, result: #{result}" if err
# Subscribe to teacher news group
User.findById doc.get('applicant'), (err, user) =>
if err
log.error "Trial request user find error: #{err}"
return
emails = _.cloneDeep(user.get('emails') ? {})
emails.teacherNews ?= {}
emails.teacherNews.enabled = true
user.update {$set: {emails: emails}}, {}, (err) =>
if err
log.error "Trial request user update error: #{err}"
return
TrialRequestSchema.statics.privateProperties = [] TrialRequestSchema.statics.privateProperties = []
TrialRequestSchema.statics.editableProperties = [ TrialRequestSchema.statics.editableProperties = [
'created' 'created'

View file

@ -76,6 +76,7 @@ emailNameMap =
diplomatNews: 'translator' diplomatNews: 'translator'
ambassadorNews: 'support' ambassadorNews: 'support'
anyNotes: 'notification' anyNotes: 'notification'
teacherNews: 'teacher'
UserSchema.methods.setEmailSubscription = (newName, enabled) -> UserSchema.methods.setEmailSubscription = (newName, enabled) ->
oldSubs = _.clone @get('emailSubscriptions') oldSubs = _.clone @get('emailSubscriptions')

View file

@ -38,43 +38,58 @@ if (database.generateMongoConnectionString() !== dbString) {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 120; // for long Stripe tests jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 120; // for long Stripe tests
describe('Server Test Helper', function() { var initialized = false;
it('starts the test server', function(done) { beforeEach(function(done) {
var server = require('../../server'); if (initialized) {
server.startServer(done); return done();
}
var async = require('async');
async.series([
function(cb) {
// Start the server
var server = require('../../server');
server.startServer(cb);
},
function(cb) {
// 5. Check actual database
var User = require('../../server/users/User');
User.find({}).count(function(err, count) {
// For this to serve as a line of defense against testing with the
// production DB, tests must be run with
expect(err).toBeNull();
expect(count).toBeLessThan(100);
if(err || count >= 100) {
// the only way to be sure we don't keep going with the tests
process.exit(1);
}
GLOBAL.mc.lists.subscribe = _.noop;
cb()
});
},
function(cb) {
// Clear db
var mongoose = require('mongoose');
mongoose.connection.db.command({dropDatabase:1}, function(err, result) {
if (err) { console.log(err); }
cb(err);
});
},
function(cb) {
// Initialize products
var request = require('request');
request.get(getURL('/db/products'), function(err, res, body) {
expect(err).toBe(null);
expect(res.statusCode).toBe(200);
cb(err);
});
}
],
function(err) {
if (err) {
process.exit(1);
}
initialized = true;
done();
}); });
it('checks the db is fairly empty', function(done) {
// 5. Check actual database.
var User = require('../../server/users/User');
User.find({}).count(function(err, count) {
// For this to serve as a line of defense against testing with the
// production DB, tests must be run with
expect(err).toBeNull();
expect(count).toBeLessThan(100);
if(err || count >= 100) {
// the only way to be sure we don't keep going with the tests
process.exit(1);
}
GLOBAL.mc.lists.subscribe = _.noop;
done()
});
});
it('clears the db', function(done) {
var mongoose = require('mongoose');
mongoose.connection.db.command({dropDatabase:1}, function(err, result) {
if (err) { console.log(err); }
done();
});
});
it('initializes products', function(done) {
var request = require('request');
request.get(getURL('/db/products'), function(err, res, body) {
expect(err).toBe(null);
expect(res.statusCode).toBe(200);
done();
});
})
}); });

View file

@ -134,7 +134,11 @@ describe 'Trial Requests', ->
expect(prepaid.get('type')).toEqual('course') expect(prepaid.get('type')).toEqual('course')
expect(prepaid.get('creator')).toEqual(user.get('_id')) expect(prepaid.get('creator')).toEqual(user.get('_id'))
expect(prepaid.get('maxRedeemers')).toEqual(2) expect(prepaid.get('maxRedeemers')).toEqual(2)
done() User.findById user._id, (err, user) =>
expect(err).toBeNull()
return done(err) if err
expect(user.get('emails')?.teacherNews?.enabled).toEqual(true)
done()
it 'Deny trial request', (done) -> it 'Deny trial request', (done) ->
loginNewUser (user) -> loginNewUser (user) ->

View file

@ -8,6 +8,7 @@ describe 'LevelEditView', ->
view = new LevelEditView({}, 'something') view = new LevelEditView({}, 'something')
request = jasmine.Ajax.requests.first() request = jasmine.Ajax.requests.first()
request.respondWith {status: 200, responseText: JSON.stringify(emptyLevel)} request.respondWith {status: 200, responseText: JSON.stringify(emptyLevel)}
me.set('anonymous', false) # otherwise button may be disabled an not fire
view.render() view.render()
spyOn(view, 'openModalView') spyOn(view, 'openModalView')
view.$el.find('#revert-button').click() view.$el.find('#revert-button').click()