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");
</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>
<!-- 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']
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()
# Errorception
@ -76,19 +76,29 @@ module.exports = class Tracker
__insp?.push ['identify', me.id]
__insp?.push ['tagSession', traits]
# Mixpanel
# https://mixpanel.com/help/reference/javascript
mixpanel.identify(me.id)
mixpanel.register(traits)
trackPageView: ->
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
return unless @isProduction and not me.isAdmin()
# Google Analytics
# 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
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()
# Google Analytics
@ -105,6 +115,10 @@ module.exports = class Tracker
# http://www.inspectlet.com/docs#tagging
__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) =>
# Skipping heavily logged actions we don't use internally
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)
onReceiveMeInfo: (r) =>
console.log "Got Facebook user info:", r
unless r.email
console.error('could not get data, since no email provided')
return

View file

@ -15,7 +15,7 @@ module.exports = class Label extends CocoClass
@sprite = options.sprite
@camera = options.camera
@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 camera.' unless @camera
console.error @toString(), 'needs a layer.' unless @layer

View file

@ -684,7 +684,10 @@ module.exports = Lank = class Lank extends CocoClass
return unless @thang
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.
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
if @labels.say?.setText 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."
additional_resources: "Additional Resources"
additional_resources_1_pref: "Download/print our"
additional_resources_1_mid: "Course 1 Teacher's Guide"
additional_resources_1_suff: "explanations and solutions to each level."
additional_resources_1_mid: "Course 1" # {change}
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_suff: "to get two free enrollments for the rest of our paid courses."
additional_resources_3_pref: "Visit our"
@ -1000,6 +1002,9 @@
additional_resources_4_pref: "Check out our"
additional_resources_4_mid: "Schools Page"
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"
no_classes: "No classes yet!"
create_new_class1: "create new class"
@ -1032,6 +1037,7 @@
ambassador_title: "Ambassador"
ambassador_title_description: "(Support)"
ambassador_summary: "Tame our forum users and provide direction for those with questions. Our ambassadors represent CodeCombat to the world."
teacher_title: "Teacher"
editor:
main_title: "CodeCombat Editors"
@ -1188,6 +1194,7 @@
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_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."
diligent_scribes: "Our Diligent Scribes:"
powerful_archmages: "Our Powerful Archmages:"

View file

@ -660,7 +660,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
password_tab: "Contraseña"
emails_tab: "Correos"
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_verify: "Verificar"
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"
hours_content: "Horas de contenido:"
get_free: "Obtenga curso GRATIS"
# enroll_paid: "Enroll Students in Paid Courses"
enroll_paid: "Anotar estudiantes en cursos pagos."
you_have1: "Tiene"
# you_have2: "unused paid enrollments"
# use_one: "Use 1 paid enrollment for"
# use_multiple: "Use paid enrollments for the following students:"
# already_enrolled: "already enrolled"
# licenses_remaining: "licenses remaining:"
licenses_remaining: "licencias restantes:"
# insufficient_enrollments: "insufficient paid enrollments"
# enroll_students: "Enroll Students"
# get_enrollments: "Get More Enrollments"
# change_language: "Change Course Language"
change_language: "Cambiar idioma del curso"
keep_using: "Seguir Usando"
switch_to: "Cambiar a"
greetings: "Saludos!"
learn_p: "Aprender Python"
learn_j: "Aprender JavaScript"
# language_cannot_change: "Language cannot be changed once students join a class."
# back_classrooms: "Back to my classrooms"
# back_courses: "Back to my courses"
# edit_details: "Edit class details"
language_cannot_change: "El lenguaje no puede ser cambiado una vez que el estudiante ingreso a la clase."
back_classrooms: "Volver a mis aulas"
back_courses: "Volver a mis cursos"
edit_details: "Editar detallesde clase"
# enrolled_courses: "enrolled in paid courses:"
# purchase_enrollments: "Purchase Enrollments"
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!"
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!"
# 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."
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"
not_enrolled1: "No inscrito"
# not_enrolled2: "Ask your teacher to enroll you in the next course."
# next_course: "Next Course"
not_enrolled2: "Preguntale a tu maestro para anotarte en el proximo curso."
next_course: "Próximo curso"
coming_soon1: "Próximamente"
coming_soon2: "Estamos trabajando duro para hacer mas cursos para ti!"
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_3: "cadenas & variables para personalizar acciones"
play_now_learn_4: "como vencer a un ogro (habilidades importantes en la vida!)"
# welcome_to_page: "Welcome to your Courses page!"
# completed_hoc: "Amazing! You've completed the Hour of Code course!"
welcome_to_page: "¡Bienvenido a tu página de cursose!"
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_1: "Usa las gemas para desbloquear nuevos objetos!"
# ready_for_more_2: "Play through brand new worlds and challenges"
# ready_for_more_3: "Learn even more programming!"
ready_for_more_2: "Juega atravez de nuevos mundos y desafios"
ready_for_more_3: "¡Aprendé todavía más programando!"
saved_games: "Juegos Guardados"
# hoc: "Hour of Code"
hoc: "Hora del código"
my_classes: "Mis Clases"
# class_added: "Class successfully added!"
# view_class: "view class"
class_added: "Clase añadida satisfactoriamente!"
view_class: "ver clase"
view_levels: "ver niveles"
# join_class: "Join A Class"
# ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:"
join_class: "Unirse a clase"
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>"
# join: "Join"
# joining: "Joining class"
# course_complete: "Course Complete"
# play_arena: "Play Arena"
join: "Unirse"
joining: "Uniendose a claseJoining class"
course_complete: "Curso completo"
play_arena: "Jugar Arena"
start: "Iniciar"
# last_level: "Last Level"
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!"
# logged_in_as: "Logged in as:"
# not_you: "Not you?"
# welcome_back: "Hi adventurer, welcome back!"
# continue_playing: "Continue Playing"
# more_options: "More options:"
# option1_header: "Option 1: Invite students via email"
last_level: "Último nivel"
welcome_to_hoc: "Aventureros, bienvenidos a su Hora del Código!!"
logged_in_as: "Logeado como:"
not_you: "No eres tú?"
welcome_back: "Hola aventurero, bienvenido nuevamente!"
continue_playing: "Seguir jugando"
more_options: "Másopciones:"
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."
# 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."
# 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."
# thank_you_pref: "Thank you for your purchase! You can now assign"
# thank_you_suff: "more students to paid courses."
thank_you_pref: "Gracias por tu compra! Ahora puedes asignar"
thank_you_suff: "más estudiantes a cursos pagos."
# return_to_class: "Return to classroom"
# return_to_course_man: "Return to course management."
# students_not_enrolled: "students not enrolled"
# total_all_classes: "Total Across All Classes"
# 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."
# purchase_now: "Purchase Now"
purchase_now: "Comprar Ahora"
# enrollments: "enrollments"
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_description2: "The activated paid license will not be returned."
keep_student: "Mantener alumno"
# removing_user: "Removing user"
# to_join_ask: "To join a class, ask your teacher for an unlock code."
# join_this_class: "Join Class"
# enter_here: "<enter unlock code here>"
removing_user: "Removiendo usuario"
to_join_ask: "Para ingresar a una clase, preguntale a tu maestro por un código de acceso."
join_this_class: "Ingresar clase"
enter_here: "<Ingresar el código aquí>"
# successfully_joined: "Successfully joined"
# click_to_start: "Click here to start taking"
# my_courses: "My Courses"
# classroom: "Classroom"
my_courses: "Mis Cursos"
classroom: "Aulas"
# use_school_email: "use your school email if you have one"
# unique_name: "a unique name no one has chosen"
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_mobile: "המשחק לא עוצב לטלפונים ואולי לא יעבוד" # Warning that shows up on mobile devices
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_suffix: "אתה יכול לנסות בכול מקרה אבל זה כנראה לא יעבוד."
ipad_browser: "חדשות רעות: CodeCombat לא עובד בדפדפן של הiPad-. חדשות טובות: גרסת הiPad של המשחק ממתינה לאישור מחברת Apple."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
nav:
play: "שלבים" # The top nav bar entry where players choose which levels to play
community: "קהילה"
# courses: "Courses"
courses: "מסלולים"
editor: "עורך"
blog: "בלוג"
forum: "פורום"
@ -33,7 +33,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
contact: "צור קשר"
twitter_follow: "עקוב אחרינו בטוויטר"
teachers: "מורים"
# careers: "Careers"
careers: "קריירות"
modal:
close: "סגור"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
play:
play_as: "שחק בתור " # Ladder page
# compete: "Compete!" # Course details page
compete: "הושלם!" # Course details page
spectate: "צופה" # Ladder page
players: "שחקנים" # 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: "יש צורך במנוי"
anonymous: "משתמש אנונימי"
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: "מסע המתחילים"
awaiting_levels_adventurer_prefix: ".אנחנו מוסיפים חמישה שלבים בכל שבוע" # {change}
awaiting_levels_adventurer: "הירשם כהרפתקן"
@ -83,7 +83,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
adjust_volume: "שנה ווליום"
campaign_multiplayer: "זירות רב-המשתתפים"
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."
share_progress_modal:
@ -114,9 +114,9 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
log_in: "כנס עם סיסמה"
required: ".יש להתחבר על מנת לגשת לשלב זה"
login_switch: "? כבר יש לך משתמש"
# school_name: "School Name and City"
# optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL"
school_name: "שם בית ספר ועיר"
optional: "רשות"
school_name_placeholder: "לדוגמה: תיכון עירוני X, תל אביב."
recover:
recover_account_title: "שחזר סיסמה"
@ -157,15 +157,15 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
general:
and: "וגם"
name: "שם"
date: "Date"
date: "תאריך"
body: "גוף"
version: "גרסה"
pending: "ממתין"
accepted: "התקבל"
rejected: "נדחה"
withdrawn: "האוייב נסוג"
# accept: "Accept"
# reject: "Reject"
accept: "מסכים"
reject: "דחה"
# withdraw: "Withdraw"
submitter: "מוסר"
submitted: "נמסר"
@ -221,12 +221,12 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
years: "שנים"
play_level:
# completed_level: "Completed Level:"
# course: "Course:"
completed_level: "שלב שהושלם:"
course: "מסלול:"
done: "סיים"
# next_level: "Next Level:"
# next_game: "Next game"
# show_menu: "Show game menu"
next_level: "השלב הבא:"
next_game: "המשחק הבא"
show_menu: "הצג תפריט משחק"
home: "בית" # Not used any more, will be removed soon.
level: "שלב" # Like "Level: Dungeons of Kithgard"
skip: "דלג"
@ -256,13 +256,13 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
victory_saving_progress: "שומר התקדמות"
victory_go_home: "חזור הביתה"
victory_review: "!ספר לנו עוד"
# victory_review_placeholder: "How was the level?"
victory_review_placeholder: "איך היה השלב?"
victory_hour_of_code_done: "?סיימת"
victory_hour_of_code_done_yes: "שלי Hour of Code™! כן, סיימתי עם ה"
victory_experience_gained: "שנצבר XP"
victory_gems_gained: "אבני חן שנצברו"
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: "הפוך לוויקינג"
guide_title: "מדריך"
tome_cast_button_run: "הפעל"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
tip_scrub_shortcut: "Ctrl+[ ו Ctrl+] האץ אחורה וקדימה באמצעות" # {change}
tip_guide_exists: ".לחץ על המדריך, בתוך תפריט המשחק (למעלה בקצה העמוד), למידע שימושי"
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_think_solution: ".תחשוב על הפתרון, לא על הבעיה"
tip_theory_practice: "תיאורטית, אין הבדל בין התאוריה לאימון. אבל באימון, יש. - יוגי ברה"
@ -307,7 +307,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
tip_baby_coders: ".בעתיד, אפילו תינוקות יהיו כשפי על"
tip_morale_improves: ".הטעינה תמשיך עד שהמורל ישתפר"
tip_all_species: ".אנחנו מאמינים בשוויון הזדמנויות לכל היצורים בלמידת תכנות"
# tip_reticulating: "Reticulating spines."
tip_reticulating: "Reticulating spines."
tip_harry: " ,תה' מכשף"
tip_great_responsibility: "עם כישרון גדול בתכנות באה גם אחריות דיבאגינג גדולה."
tip_munchkin: "אם לא תאכל את הירקות, מאצ'קין יבוא אליך בלילה כשאתה ישן."
@ -410,7 +410,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
feature7: "פרטיים <strong>שבטים</strong>"
free: "חינם"
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: "רכוש מנוי"
unsubscribe: "הסר מנוי"
confirm_unsubscribe: "אשר הסרת מנוי"
@ -484,10 +484,10 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
blocks: "הגנה" # As in "this shield blocks this much damage"
backstab: "פגיעה בגב" # As in "this dagger does this much backstab damage"
skills: "מיומנויות"
# attack_1: "Deals"
attack_1: "מבצעים"
# attack_2: "of listed"
# attack_3: "weapon damage."
# health_1: "Gains"
health_1: "רווחים"
# health_2: "of listed"
# health_3: "armor health."
speed_1: "זז במהירות של"
@ -499,8 +499,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
skill_docs:
writable: "ניתן לכתיבה" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "לקריאה בלבד"
# action: "Action"
# spell: "Spell"
action: "פעולה"
spell: "כישוף"
action_name: "שם"
action_cooldown: "לוקח"
action_specific_cooldown: ":זמן להתקררות"

View file

@ -587,35 +587,35 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
more_info_3: "でCodeCombatを使っている教育者の仲間とつながりましょう。"
teachers_survey:
# title: "Teacher Survey"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# retrieving: "Retrieving information..."
# being_reviewed_1: "Your application for a free trial is being"
# being_reviewed_2: "reviewed."
# approved_1: "Your application for a free trial was"
# approved_2: "approved!"
# approved_4: "You can now enroll your students on the"
# approved_5: "courses"
# approved_6: "page."
# denied_1: "Your application for a free trial has been"
# denied_2: "denied."
# contact_1: "Please contact"
# 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_1b: "You can find more information on our"
# description_2: "teachers"
# description_3: "page."
# description_4: "Please fill out this quick survey and well email you setup instructions."
# email: "Email Address"
title: "教師用アンケート"
must_be_logged: "最初にログインしてください。アカウントを作成するか、上記のメニューからログインしてください。"
retrieving: "情報を取得しています..."
being_reviewed_1: "無料トライアルの申し込みが"
being_reviewed_2: "レビューされています。"
approved_1: "無料トライアルの申し込みが"
approved_2: "承認されました!"
approved_4: "以下のページで生徒を入会させることができます:"
approved_5: "コース"
approved_6: "ページ。"
denied_1: "無料トライアルの申し込みが"
denied_2: "拒否されました。"
contact_1: "お問い合わせください"
contact_2: "ご質問がある場合は"
description_1: "教師の方に無料トライアルを提供しています。有料コースで生徒さんを入会させるのに使用できる、2つの無料入会権が与えられます。"
description_1b: "詳細は以下のページで参照してください:"
description_2: "教師用"
description_3: "ページ。"
description_4: "この簡易アンケートに記入をお願いします。設定手順をメールにてお送りします。"
email: "電子メールアドレス"
school: "学校名"
location: "市町村"
# age_students: "How old are your students?"
# under: "Under"
# other: "Other:"
# amount_students: "How many students do you teach?"
# hear_about: "How did you hear about CodeCombat?"
# fill_fields: "Please fill out all fields."
# thanks: "Thanks! We'll send you setup instructions shortly."
age_students: "生徒さんの年齢を教えてください。"
under: "未満"
other: "その他:"
amount_students: "何人の生徒さんをお持ちですか?"
hear_about: "CodeCombatをどのようにお知りなりましたか?"
fill_fields: "全てのフィールドを記入してください。"
thanks: "ありがとうございます。設定の手順を追ってお送りします。"
versions:
save_version_title: "新しいバージョンをセーブ"
@ -623,9 +623,9 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
submitting_patch: "パッチを送信中..."
cla_prefix: "変更を適用するには, 私達のCLAに同意する必要があります。"
cla_url: "CLA"
# cla_suffix: "."
cla_suffix: ""
cla_agree: "同意する"
# owner_approve: "An owner will need to approve it before your changes will become visible."
owner_approve: "ユーザーは変更が実際に表示される前に同意する必要があります。"
contact:
contact_us: "お問い合わせ"
@ -660,23 +660,23 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
password_tab: "パスワード"
emails_tab: "メール"
admin: "管理者"
# manage_subscription: "Click here to manage your subscription."
manage_subscription: "購読を管理するにはここをクリックしてください。"
new_password: "新パスワード"
new_password_verify: "新パスワードを再入力"
type_in_email: "アカウントの削除を確認するために、メールアドレスを入力して下さい。"
type_in_email_progress: "進捗を消すために、メールアドレスを入力してください。"
type_in_password: "そして、パスワードを入力してください。"
email_subscriptions: "ニュースレターの購読"
email_subscriptions_none: "No Email Subscriptions."
email_subscriptions_none: "ニュースレターの購読はありません。"
email_announcements: "お知らせ"
email_announcements_description: "CodeCombatの最新のニュースや進展をメールで受け取る"
email_notifications: "通知"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
# email_any_notes: "Any Notifications"
# email_any_notes_description: "Disable to stop all activity notification emails."
email_notifications_summary: "CodeCombatアクティビティに関する自動電子メール通知の管理。"
email_any_notes: "すべての通知"
email_any_notes_description: "アクティビティすべての通知メールを停止することを無効にします。"
email_news: "ニュース"
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: "開発を手伝ってくれる人向けのメール"
contribute_prefix: "私達は開発を手伝ってくれる人を探しています。 詳しくは "
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_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." # Warning that shows up on mobile devices
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_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: "캠페인"
for_beginners: "초보자용"
multiplayer: "멀티플레이어" # Not currently shown on home page
for_developers: "개발자용" # Not currently shown on home page.
# or_ipad: "Or download for iPad"
or_ipad: "또는 아이패드의 다운로드"
nav:
play: "레벨" # The top nav bar entry where players choose which levels to play
community: "커뮤니티"
# courses: "Courses"
courses: "코스"
editor: "에디터"
blog: "블로그"
forum: "포럼"
@ -33,7 +33,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
contact: "문의"
twitter_follow: "팔로우"
teachers: "선생님들"
# careers: "Careers"
careers: "채용"
modal:
close: "닫기"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
play:
play_as: "Play As " # Ladder page
# compete: "Compete!" # Course details page
compete: "경쟁!" # Course details page
spectate: "관중모드" # Ladder page
players: "플레이어" # 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
account: "계정" # Tooltip on account 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
change_hero: "영웅 교체" # Go back from choose inventory to choose hero
buy_gems: "젬 구매"
# subscription_required: "Subscription Required"
subscription_required: "가입 필수"
anonymous: "이름없는 플레이어"
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: "초보자 캠페인"
awaiting_levels_adventurer_prefix: "매주 마다 새로운 레벨이 생깁니다."
awaiting_levels_adventurer: "모험자로 등록 하세요!"
@ -83,16 +83,16 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
adjust_volume: "소리 조절"
campaign_multiplayer: "멀티 플레이어 전투장"
campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas"
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
campaign_old_multiplayer: "(추천하지 않습니다) 숙련된 멀티플레이어 경쟁"
campaign_old_multiplayer_description: "더 문명화 된 시대의 유물. 어떤 시뮬레이션은 이러한 이전, 영웅없는 멀티 경기장에 대해 실행되지 않습니다."
share_progress_modal:
# blurb: "Youre making great progress! Tell your parent how much you've learned with CodeCombat."
blurb: "당신은 큰 진전을 보이고있습니다! 당신이 코드컴뱃으로 얼마나 많이 배웠는지 부모님게 말하십시오."
email_invalid: "이메일 주소가 올바르지 않습니다."
# form_blurb: "Enter your parent's email below and well show them!"
form_blurb: "아래에 부모님의 이메일을 입력하고 우리는 그것들을 보여줍니다!"
form_label: "이메일"
placeholder: "이메일"
# title: "Excellent Work, Apprentice"
title: "우수한, 초심자"
login:
sign_up: "계정 생성"
@ -100,8 +100,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
logging_in: "로그인 중"
log_out: "로그아웃"
forgot_password: "비밀번호를 잊으셨나요?"
# authenticate_gplus: "Authenticate G+"
# load_profile: "Load G+ Profile"
authenticate_gplus: "G+ 인증"
load_profile: "G+ 프로필 불러오기"
finishing: "완료중.."
sign_in_with_facebook: "Facebook으로 로그인"
sign_in_with_gplus: "G+로 로그인"
@ -114,9 +114,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
log_in: "비밀번호로 로그인"
required: "진행하기 전에 로그인이 필요합니다."
login_switch: "이미 계정이 있으신가요?"
# school_name: "School Name and City"
# optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL"
school_name: "학교 이름과 도시"
optional: "옵션"
school_name_placeholder: "예시 고등학교, 스프링필드, IL"
recover:
recover_account_title: "계정 복구"
@ -142,7 +142,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
save: "저장"
publish: "내보내기"
create: "생성"
fork: "Fork"
fork: "포크"
play: "시작" # When used as an action verb, like "Play next level"
retry: "재시도"
actions: "행동"
@ -164,20 +164,20 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
accepted: "적용됨"
rejected: "거부됨"
withdrawn: "취소됨"
# accept: "Accept"
# reject: "Reject"
# withdraw: "Withdraw"
accept: "승인"
reject: "보류"
withdraw: "철수"
submitter: "제출자"
submitted: "제출됨"
commit_msg: "커밋 메세지"
version_history: "버전 히스토리"
version_history_for: "버전 히스토리 : "
# select_changes: "Select two changes below to see the difference."
# undo_prefix: "Undo"
select_changes: "차이를 보기위해 두 가지 사항을 변경하도록 선택합니다."
undo_prefix: "되돌리기"
undo_shortcut: "(Ctrl+Z)"
# redo_prefix: "Redo"
redo_prefix: "다시하기"
redo_shortcut: "(Ctrl+Shift+Z)"
# play_preview: "Play preview of current level"
play_preview: "현재 수준의 미리보기 재생"
result: "결과"
results: "결과들"
description: "설명"
@ -221,12 +221,12 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
years: ""
play_level:
# completed_level: "Completed Level:"
# course: "Course:"
completed_level: "완료된 레벨:"
course: "코스:"
done: "완료"
# next_level: "Next Level:"
# next_game: "Next game"
# show_menu: "Show game menu"
next_level: "다음 레벨:"
next_game: "다음 게임"
show_menu: "게임 매뉴 보이기"
home: "" # Not used any more, will be removed soon.
level: "레벨" # Like "Level: Dungeons of Kithgard"
skip: "넘어가기"
@ -256,40 +256,40 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
victory_saving_progress: "저장하기"
victory_go_home: "홈으로"
victory_review: "리뷰를 남겨주세요"
# victory_review_placeholder: "How was the level?"
victory_review_placeholder: "어떤 레벨입니까?"
victory_hour_of_code_done: "정말 종료합니까?"
victory_hour_of_code_done_yes: "네 내 Hour of Code™ 완료했습니다!"
victory_experience_gained: "획득한 경험치"
victory_gems_gained: "획득한 젬"
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: "바이킹이 되세요"
guide_title: "가이드"
# tome_cast_button_run: "Run"
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a 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_cast_button_run: "실행"
tome_cast_button_running: "실행중"
tome_cast_button_ran: "실행됨"
tome_submit_button: "적용"
tome_reload_method: "이 방법에 대한 원래의 코드를 다시불러오기" # Title text for individual method reload button.
tome_select_method: "방법 선택"
tome_see_all_methods: "편집 할 수있는 모든 방법을 참조하십시오" # Title text for method list selector (shown when there are multiple programmable methods).
tome_select_a_thang: "누군가를 선택하세요. "
tome_available_spells: "사용 가능한 마법"
# tome_your_skills: "Your Skills"
# tome_current_method: "Current Method"
# code_saved: "Code Saved"
tome_your_skills: "당신의 스킬"
tome_current_method: "최근 방법"
code_saved: "코드가 저장됨"
skip_tutorial: "넘기기 (esc)"
keyboard_shortcuts: "단축키"
loading_ready: "준비!"
# loading_start: "Start Level"
loading_start: "레벨 시작"
problem_alert_title: "코드를 수정하세요"
time_current: "현재:"
time_total: "최대:"
# time_goto: "Go to:"
# non_user_code_problem_title: "Unable to Load Level"
# infinite_loop_title: "Infinite Loop Detected"
# 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_link: "(instructions)"
time_goto: "가기:"
non_user_code_problem_title: "레벨을 로드 할 수 없습니다"
infinite_loop_title: "무한 루프 감지"
infinite_loop_description: "세계를 구축하는 초기 코드는 결코 실행이 완료되지 않습니다. 아마도 하나의 정말 느리거나 또는 무한 루프가 있습니다. 혹은 버그일수있습니다. 당신은 다시 이 코드를 실행하려고하거나 기본 상태로 코드를 재설정 할 수 있습니다. 그게 해결되지 않으면, 저희에게 알려 주시기 바랍니다."
check_dev_console: "또한 잘못 갈 수를 알기 위해 개발자 콘솔을 열 수 있습니다."
check_dev_console_link: "(명령어)"
infinite_loop_try_again: "다시 시도해보세요."
infinite_loop_reset_level: "레벨 리셋"
infinite_loop_comment_out: "내 코드를 일시적 주석처리하기"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
tip_scrub_shortcut: "Ctrl+[, Ctrl+] 를 이용해 실행 속도를 빠르게 할 수 있어요"
tip_guide_exists: "화면 상단의 가이드를 클릭해보세요. 유용한 정보를 얻을 수 있습니다."
tip_open_source: "코드 컴뱃은 100% 오픈 소스 기반입니다!"
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!"
tip_tell_friends: "코드 컴뱃을 즐기셨나요? 친구에게 알려주십시오"
tip_beta_launch: "코드 컴뱃은 2013년 10월에 베타 서비스를 출시했습니다."
tip_think_solution: "해결 방법을 고민해보세요, 문제를 고민하지 말구요"
# 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_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_no_code: "No code is faster than no code."
tip_no_code: "코드가 없는것보다 빠른것은 없습니다."
tip_code_never_lies: "코드는 절대로 거짓말을 하지 않는다. 주석은 가끔 하지만. — Ron Jeffries"
# 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 //"
@ -341,8 +341,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# 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_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_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson"
tip_paper_and_pen: "코딩을 하기전에, 당신은 항상 종이와 펜으로 계획을 지니고 있어야합니다."
tip_solve_then_write: "먼저, 문제를 해결하세요. 그러고, 코드를 쓰는겁니다. - John Johnson"
game_menu:
inventory_tab: "인벤토리"
@ -355,24 +355,24 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
auth_tab: "가입하기"
inventory_caption: "장비 장착"
choose_hero_caption: "영웅 및 언어 선택 "
# save_load_caption: "... and view history"
save_load_caption: "... 그리고 기록보기"
options_caption: "설정들을 바꾸기"
guide_caption: "문서들과 팁들"
multiplayer_caption: "친구들과 플레이 하세요!"
auth_caption: "진행사항을 저장하세요"
leaderboard:
# view_other_solutions: "View Leaderboards"
view_other_solutions: "리더보드 보기"
scores: "점수"
top_players: "상위 플레이어"
day: "오늘"
week: "이번 주"
# all: "All-Time"
# time: "Time"
# damage_taken: "Damage Taken"
# damage_dealt: "Damage Dealt"
# difficulty: "Difficulty"
# gold_collected: "Gold Collected"
all: "모든-시간"
time: "시간"
damage_taken: "데미지 정도"
damage_dealt: "죽음을 맞은 데미지"
difficulty: "난이도"
gold_collected: "수집된 골드"
inventory:
equipped_item: "장착됨"
@ -391,33 +391,33 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
pile_gems: "gem 묶음"
chest_gems: "gem 상자"
purchasing: "구매중..."
declined: "Your card was declined"
declined: "귀하의 카드가 거부되었습니다"
retrying: "서버에러, 다시 시도하세요."
prompt_title: "gem 부족"
prompt_body: "gem이 더 필요하신가요?"
prompt_button: "Enter Shop"
prompt_button: "샵 앤터"
recovered: "gem 구매후 브라우져를 새로고침 하세요."
price: "x{{gems}} / 한달"
# subscribe:
subscribe:
# comparison_blurb: "Sharpen your skills with a CodeCombat subscription!"
# feature1: "110+ basic levels across 4 worlds"
# feature2: "10 powerful <strong>new heroes</strong> with unique skills!"
# feature3: "80+ bonus levels"
feature3: "80+ 보너스 레벨들"
# feature4: "<strong>{{gems}} bonus gems</strong> every month!"
# feature5: "Video tutorials"
# feature6: "Premium email support"
feature5: "영상 튜토리얼"
feature6: "프리미엄 이메일 지원"
# feature7: "Private <strong>Clans</strong>"
# free: "Free"
# month: "month"
free: "프리"
month: ""
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# subscribe_title: "Subscribe"
# unsubscribe: "Unsubscribe"
# confirm_unsubscribe: "Confirm Unsubscribe"
subscribe_title: "구독"
unsubscribe: "구독 해제"
confirm_unsubscribe: "구독 해제 확인"
# never_mind: "Never Mind, I Still Love You"
# thank_you_months_prefix: "Thank you for supporting us these last"
# 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."
# unsubscribe_feedback_placeholder: "O, what have we done?"
# 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)
# 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
# read_only: "read-only"
# action: "Action"
# spell: "Spell"
# action_name: "name"
action_name: "이름"
# action_cooldown: "Takes"
# action_specific_cooldown: "Cooldown"
# action_damage: "Damage"
# action_range: "Range"
action_damage: "데미지"
action_range: "사거리"
# action_radius: "Radius"
# action_duration: "Duration"
# example: "Example"
# ex: "ex" # Abbreviation of "example"
example: "예제"
ex: "예시" # Abbreviation of "example"
# current_value: "Current Value"
# default_value: "Default value"
# parameters: "Parameters"
# returns: "Returns"
returns: "뒤로가기"
# granted_by: "Granted by"
# save_load:
# granularity_saved_games: "Saved"
# granularity_change_history: "History"
save_load:
granularity_saved_games: "저장됨"
granularity_change_history: "기록"
options:
# 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_3: "is a good place to connect with fellow educators who are using CodeCombat."
# teachers_survey:
teachers_survey:
# title: "Teacher Survey"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# retrieving: "Retrieving information..."
# 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_2: "approved!"
# approved_4: "You can now enroll your students on the"
# approved_5: "courses"
# approved_6: "page."
approved_6: "페이지."
# denied_1: "Your application for a free trial has been"
# denied_2: "denied."
# contact_1: "Please contact"
denied_2: "거절됨."
contact_1: "연락해주세요."
# 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_1b: "You can find more information on our"
@ -620,7 +620,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
versions:
save_version_title: "새로운 버전을 저장합니다"
new_major_version: "신규 버전"
# submitting_patch: "Submitting Patch..."
submitting_patch: "패치 적용중..."
cla_prefix: "변경사항을 저장하기 위해서는, 먼저 계약사항에 동의 하셔야 합니다."
cla_url: "CLA"
cla_suffix: "."

View file

@ -151,7 +151,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
watch: "Žiūrėti"
unwatch: "Nebežiūrėti"
submit_patch: "Pateikti pataisymą"
submit_changes: "Pateikti pakeitimus"
submit_changes: "Išsaugoti pakeitimus"
save_changes: "Saugoti pakeitimus"
general:
@ -284,12 +284,12 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
problem_alert_title: "Taisyti kodą"
time_current: "Dabar:"
time_total: "Max:"
# time_goto: "Go to:"
time_goto: "Eiti į:"
non_user_code_problem_title: "Nepavyko pakrauti lygio"
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."
# 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_reset_level: "Pradėti lygi išnaujo"
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_all_species: "We believe in equal opportunities to learn programming for all species."
# 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_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."
@ -577,115 +577,115 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# carlos_title: "Region Manager, Brazil"
# carlos_blurb: "Celery Man"
# teachers:
# who_for_title: "Who is CodeCombat for?"
# 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_2: "Our Courses system allows teachers to set up classrooms, track progress and assign additional content to students through a dedicated interface."
# more_info_title: "Where can I find more information?"
# more_info_1: "Our"
# more_info_2: "teachers forum"
# more_info_3: "is a good place to connect with fellow educators who are using CodeCombat."
teachers:
who_for_title: "Kam skirtas CodeCombat?"
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: "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: "Kur galėčiau rasti daugiau informacijos?"
more_info_1: "Mūsų"
more_info_2: "mokytojų forumas"
more_info_3: "patogi vieta susisiekti su kolegomis mokytojais kurie naudoja CodeCombat."
# teachers_survey:
# title: "Teacher Survey"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
# retrieving: "Retrieving information..."
# being_reviewed_1: "Your application for a free trial is being"
# being_reviewed_2: "reviewed."
# approved_1: "Your application for a free trial was"
# approved_2: "approved!"
# approved_4: "You can now enroll your students on the"
# approved_5: "courses"
# approved_6: "page."
# denied_1: "Your application for a free trial has been"
# denied_2: "denied."
# contact_1: "Please contact"
# 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_1b: "You can find more information on our"
# description_2: "teachers"
# description_3: "page."
# description_4: "Please fill out this quick survey and well email you setup instructions."
# email: "Email Address"
# school: "Name of School"
# location: "Name of City"
# age_students: "How old are your students?"
# under: "Under"
# other: "Other:"
# amount_students: "How many students do you teach?"
# hear_about: "How did you hear about CodeCombat?"
# fill_fields: "Please fill out all fields."
# thanks: "Thanks! We'll send you setup instructions shortly."
teachers_survey:
title: "Mokytojo Apklausa"
must_be_logged: "Turite būti prisijungę. Prašom susikurti paskyrą arba prisijungti viršutinėje meniu juostoje."
retrieving: "Renkama informacija..."
being_reviewed_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
being_reviewed_2: "peržiūrimas."
approved_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
approved_2: "patvirtintas!"
approved_4: "Dabar galite nukreipti savo mokinius į"
approved_5: "kursų"
approved_6: "puslapį."
denied_1: "Jūsų prašymas nemokamai bandomajai versijai gauti"
denied_2: "atmestas."
contact_1: "Prašome susisiekti"
contact_2: "jei turite daugiau klausimų."
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: "Daugiau informacijos rasite mūsų"
description_2: "mokytojų"
description_3: "puslapyje."
description_4: "Prašome užpildyti šią trumpą apklausos formą ir mes atsiųsime paruošimo instrukcijas el. paštu."
email: "El. pašto adresas"
school: "Mokyklos pavadinimas"
location: "Miestas"
age_students: "Kokio amžiaus jūsų mokiniai?"
under: "Mažiau nei"
other: "Kita:"
amount_students: "Kiek mokinių mokote?"
hear_about: "Iš kur sužinojote apie CodeCombat?"
fill_fields: "Prašome užpildyti visus laukus."
thanks: "Dėkojame! Netrukus atsiųsime paruošimo instrukcijas."
# versions:
# save_version_title: "Save New Version"
# new_major_version: "New Major Version"
# submitting_patch: "Submitting Patch..."
# cla_prefix: "To save changes, first you must agree to our"
# cla_url: "CLA"
# cla_suffix: "."
# cla_agree: "I AGREE"
# owner_approve: "An owner will need to approve it before your changes will become visible."
versions:
save_version_title: "Išsaugoti Naują Versiją"
new_major_version: "Nauja Pagrindinė Versija"
submitting_patch: "Pateikiamas Pataisymas..."
cla_prefix: "Kad išsaugoti pakeitimus, turite sutikti su mūsų"
cla_url: "PLS" # In Lithuanian language full translation (Pagalbininko Licensinė Sutartis - PLS). If no translation needed here, just remove changes :)
cla_suffix: "."
cla_agree: "AŠ SUTINKU"
owner_approve: "Sąvininkas pirmiausiai turi patvirtinti, kad jūsų pakeitimai būtų matomi."
# contact:
# contact_us: "Contact CodeCombat"
# welcome: "Good to hear from you! Use this form to send us email. "
# forum_prefix: "For anything public, please try "
# forum_page: "our forum"
# forum_suffix: " instead."
# faq_prefix: "There's also a"
# faq: "FAQ"
# subscribe_prefix: "If you need help figuring out a level, please"
# subscribe: "buy a CodeCombat subscription"
# subscribe_suffix: "and we'll be happy to help you with your code."
# subscriber_support: "Since you're a CodeCombat subscriber, your email will get our priority support."
# screenshot_included: "Screenshot included."
# where_reply: "Where should we reply?"
# send: "Send Feedback"
contact:
contact_us: "Susisiekti su CodeCombat"
welcome: "Maloniai jus išklausysime! Naudokitės šia forma, kad išsiųstumėte mus elektroninį laišką."
forum_prefix: "Norint pasisakyti viešai, naudokitės "
forum_page: "mūsų forumu."
forum_suffix: ""
faq_prefix: "Taip pat turime vietą"
faq: "DUK"
subscribe_prefix: "Jei reikalinga pagalbos įveikiant lygį, prašome"
subscribe: "įsigyti CodeCombat abonementą"
subscribe_suffix: "ir męs mielai jums padėsime."
subscriber_support: "Kadangi turite CodeCombat abonementą, jūsų elektroniniai laiškai mums tampa įpatingai svarbūs."
screenshot_included: "Ekrano kopija pridėta."
where_reply: "Kur mums atsakyti?"
send: "Siųsti užklausą"
# account_settings:
# title: "Account Settings"
# not_logged_in: "Log in or create an account to change your settings."
# autosave: "Changes Save Automatically"
# me_tab: "Me"
# picture_tab: "Picture"
# delete_account_tab: "Delete Your Account"
# wrong_email: "Wrong Email"
# wrong_password: "Wrong Password"
# upload_picture: "Upload a picture"
# delete_this_account: "Delete this account permanently"
# reset_progress_tab: "Reset All Progress"
# reset_your_progress: "Clear all your progress and start over"
# god_mode: "God Mode"
# password_tab: "Password"
# emails_tab: "Emails"
# admin: "Admin"
# manage_subscription: "Click here to manage your subscription."
# new_password: "New Password"
# new_password_verify: "Verify"
# type_in_email: "Type in your email to confirm account deletion."
# type_in_email_progress: "Type in your email to confirm deleting your progress."
# type_in_password: "Also, type in your password."
# email_subscriptions: "Email Subscriptions"
# email_subscriptions_none: "No Email Subscriptions."
# email_announcements: "Announcements"
# email_announcements_description: "Get emails on the latest news and developments at CodeCombat."
# email_notifications: "Notifications"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
# email_any_notes: "Any Notifications"
# email_any_notes_description: "Disable to stop all activity notification emails."
# email_news: "News"
# email_recruit_notes: "Job Opportunities"
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
# contributor_emails: "Contributor Class Emails"
# contribute_prefix: "We're looking for people to join our party! Check out the "
# contribute_page: "contribute page"
# contribute_suffix: " to find out more."
# email_toggle: "Toggle All"
# error_saving: "Error Saving"
# saved: "Changes Saved"
# password_mismatch: "Password does not match."
# password_repeat: "Please repeat your password."
account_settings:
title: "Paskyros Nustatymai"
not_logged_in: "Norint pakeisti paskyros nustatymus turite prisijungti arba susikurti paskyrą."
autosave: "Pakeitimai Išsaugomi Automatiškai"
me_tab: ""
picture_tab: "Nuotrauka"
delete_account_tab: "Pašalinti Mano Paskyrą"
wrong_email: "Neteisingas el. pašto adresas"
wrong_password: "Neteisingas slaptažodis"
upload_picture: "Įkelti nuotrauką"
delete_this_account: "Tuoj pat pašalinti šią paskyrą"
reset_progress_tab: "Atstatyti Viską Išnaujo"
reset_your_progress: "Viską išvalyti ir pradėti išnaujo"
god_mode: "God Mode(Dievo Režimas)"
password_tab: "Slaptažodis"
emails_tab: "Pranešimai"
admin: "Administratorius"
manage_subscription: "Abonemento valdymas, spauskite čia."
new_password: "Naujas slaptažodis"
new_password_verify: "Patvirtinimas"
type_in_email: "Paskyros pašalinimo patvirtinimui, įveskite el. pašto adresą."
type_in_email_progress: "Norint pradėti išnaujo įveskite el. pašto adresą."
type_in_password: "Taip pat, įveskite slaptažodį."
email_subscriptions: "El. pašto abonementai"
email_subscriptions_none: "Nėra el. pašto abonementų."
email_announcements: "Skelbimai"
email_announcements_description: "Gauk svarbiausią informaciją apie naujienas ir projekto vystymo eigą tiesiai iš CodeCombat."
email_notifications: "Pranešimai"
email_notifications_summary: "Automatinių pranešimų, susijusių su CodeCombat veikla, valdymas."
email_any_notes: "Visi pranešimai"
email_any_notes_description: "Nuimkite varnelę, kad nebegautumėte jokių pranešimų."
email_news: "Naujienos"
email_recruit_notes: "Darbo Pasiūlymai"
email_recruit_notes_description: "Jei viską atliksite tikrai gerai, mes galime pasiūlyti (geresnį) darbą."
contributor_emails: "Pranešimai Pagalbininkų Kategorijai"
contribute_prefix: "Mes ieškome norinčių prisijungti prie mūsų grupės! Ieškantiems daugiau informacijos siūlome apsilankykti "
contribute_page: "pagalbininkų puslapyje."
contribute_suffix: ""
email_toggle: "Perjungti visus"
error_saving: "Klaida Išsaugant"
saved: "Pakeitimai Išsaugoti"
password_mismatch: "Slaptažodžiai nesutampa."
password_repeat: "Pakartokite slaptažodį."
keyboard_shortcuts:
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"
# contribute_to_the_project: "Contribute to the project"
# clans:
# clan: "Clan"
# clans: "Clans"
# new_name: "New clan name"
# new_description: "New clan description"
# make_private: "Make clan private"
# subs_only: "subscribers only"
# create_clan: "Create New Clan"
# private_preview: "Preview"
# private_clans: "Private Clans"
# public_clans: "Public Clans"
# my_clans: "My Clans"
# clan_name: "Clan Name"
# name: "Name"
# chieftain: "Chieftain"
# type: "Type"
# edit_clan_name: "Edit Clan Name"
# edit_clan_description: "Edit Clan Description"
# edit_name: "edit name"
# edit_description: "edit description"
# private: "(private)"
# summary: "Summary"
# average_level: "Average Level"
# average_achievements: "Average Achievements"
# delete_clan: "Delete Clan"
# leave_clan: "Leave Clan"
# join_clan: "Join Clan"
# invite_1: "Invite:"
# invite_2: "*Invite players to this Clan by sending them this link."
# members: "Members"
# progress: "Progress"
# not_started_1: "not started"
# started_1: "started"
# complete_1: "complete"
# exp_levels: "Expand levels"
# rem_hero: "Remove Hero"
# status: "Status"
# complete_2: "Complete"
# started_2: "Started"
# not_started_2: "Not Started"
# view_solution: "Click to view solution."
# view_attempt: "Click to view attempt."
# latest_achievement: "Latest Achievement"
# playtime: "Playtime"
# last_played: "Last played"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances."
# track_concepts1: "Track concepts"
# track_concepts2a: "learned by each student"
# track_concepts2b: "learned by each member"
# track_concepts3a: "Track levels completed for each student"
# track_concepts3b: "Track levels completed for each member"
# track_concepts4a: "See your students'"
# track_concepts4b: "See your members'"
# track_concepts5: "solutions"
# track_concepts6a: "Sort students by name or progress"
# track_concepts6b: "Sort members by name or progress"
# track_concepts7: "Requires invitation"
# track_concepts8: "to join"
# private_require_sub: "Private clans require a subscription to create or join."
clans:
clan: "Klanas"
clans: "Klanai"
new_name: "Klano pavadinimas"
new_description: "Klano aprašymas"
make_private: "Privatus klanas"
subs_only: "tik abonentams"
create_clan: "Sukurti Klaną"
private_preview: "Peržiūra"
private_clans: "Privatūs Klanai"
public_clans: "Vieši Klanai"
my_clans: "Mano Klanai"
clan_name: "Klano Pavadinimas"
name: "Vardas"
chieftain: "Vadas"
type: "Tipas"
edit_clan_name: "Keisti Klano Pavadinimą"
edit_clan_description: "Keisti Klano Aprašymą"
edit_name: "keisti pavadinimą"
edit_description: "keisti aprašymą"
private: "(privatus)"
summary: "Suvestinė"
average_level: "Lygių vidurkis"
average_achievements: "Pasiekimų vidurkis"
delete_clan: "Pašalinti klaną"
leave_clan: "Išeiti iš klano"
join_clan: "Prisijungti prie klano"
invite_1: "Pakvietimas:"
invite_2: "*Kvieskite žaidėjus į klaną nusiųsdami šią nuorodą."
members: "Nariai"
progress: "Pažanga"
not_started_1: "nepradėta"
started_1: "pradėta"
complete_1: "pabaigta"
exp_levels: "Išplėsti lygius"
rem_hero: "Pašalinti Herojų"
status: "Būsena"
complete_2: "Pabaigta"
started_2: "Pradėta"
not_started_2: "Nepradėta"
view_solution: "Peržiūrėti sprendimą."
view_attempt: "Peržiūrėti bandymą."
latest_achievement: "Naujausias Pasiekimas"
playtime: "Viso žaista"
last_played: "Paskutinį kartą žaista"
leagues_explanation: "Pasirink lygą ir varžykis su kitų klanų nariais."
track_concepts1: "Sekite "
track_concepts2a: "kitų mokinių idėjas"
track_concepts2b: "kitų narių idėjas"
track_concepts3a: "Stebėkite kitų mokinių įveiktus lygius"
track_concepts3b: "Stebėkite kitų narių įveiktus lygius"
track_concepts4a: "Peržiūrėkite mokinių"
track_concepts4b: "Peržiūrėkite narių"
track_concepts5: "sprendimus"
track_concepts6a: "Išrikiuokite mokinius pagal vardą arba pažangą"
track_concepts6b: "Išrikiuokite narius pagal vardą arba pažangą"
track_concepts7: "Norint tapti nariu"
track_concepts8: "reikalingas kvietimas"
private_require_sub: "Norint sukurti privatų ar prisijungti prie privataus klano, reikalingas abonementas."
# courses:
# course: "Course"
@ -1120,9 +1120,9 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# add_system_title: "Add Systems to Level"
# done_adding: "Done Adding"
# article:
# edit_btn_preview: "Preview"
# edit_article_title: "Edit Article"
article:
edit_btn_preview: "Peržiūra"
edit_article_title: "Redaguoti straipsnį"
polls:
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_mobile: "CodeCombat не приспособлен для работы на мобильных устройствах и может не работать!" # Warning that shows up on mobile devices
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_suffix: "Вы всё равно можете попробовать, но, скорее всего, это не будет работать."
ipad_browser: "Плохие новости: CodeCombat не запускается в браузере IPad. Хорошие новости: наше нативное приложение для IPad ожидает одобрения от Apple."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
nav:
play: "Уровни" # The top nav bar entry where players choose which levels to play
community: "Сообщество"
# courses: "Courses"
courses: "Курсы"
editor: "Редактор"
blog: "Блог"
forum: "Форум"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
play:
play_as: "Играть за " # Ladder page
# compete: "Compete!" # Course details page
compete: "Соревноваться!" # Course details page
spectate: "Наблюдать" # Ladder page
players: "игроки" # 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: "Требуется подписка"
anonymous: "Неизвестный игрок"
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: "Кампания для новичков"
awaiting_levels_adventurer_prefix: "Мы выпускаем новые уровни каждую неделю."
awaiting_levels_adventurer: "Зарегистрируйтесь в качестве Искателя приключений"
@ -83,7 +83,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
adjust_volume: "Регулировать громкость"
campaign_multiplayer: "Арены для мультиплеера"
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."
share_progress_modal:
@ -114,9 +114,9 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
log_in: "вход с паролем"
required: "Войдите для того, чтобы продолжить."
login_switch: "Уже есть аккаунт?"
# school_name: "School Name and City"
# optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL"
school_name: "Название школы and город"
optional: "не обязательно"
school_name_placeholder: "Школа № 2, город Электросталь, Московская область"
recover:
recover_account_title: "Восстановить аккаунт"
@ -166,7 +166,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
withdrawn: "Отозвано"
accept: "Принять"
reject: "Отклонить"
# withdraw: "Withdraw"
withdraw: "Изъять"
submitter: "Податель"
submitted: "Представлено"
commit_msg: "Сопроводительное сообщение"
@ -221,10 +221,10 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
years: "лет"
play_level:
# completed_level: "Completed Level:"
# course: "Course:"
completed_level: "Завершённый уровень:"
course: "Курс:"
done: "Готово"
# next_level: "Next Level:"
next_level: "Следующий уровень:"
next_game: "Следующая игра"
show_menu: "Показать меню игры"
home: "На главную" # Not used any more, will be removed soon.
@ -342,7 +342,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
tip_free_your_mind: "Отвлекись от всего, Нео. Страх, неверие, сомнения отбрось — очисти свой разум. - Morpheus"
tip_strong_opponents: "Даже сильнейший противник имеет слабость. - Itachi Uchiha"
tip_paper_and_pen: "Прежде чем начать программировать, вы всегда можете попробовать с листом бумаги и ручкой."
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson"
tip_solve_then_write: "Сперва реши задачу, затем пиши код. - Джон Джонсон"
game_menu:
inventory_tab: "Инвентарь"
@ -594,15 +594,15 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
being_reviewed_2: "на рассмотрении." # {change}
approved_1: "Ваша заявка на бесплатную пробную подписку была" # {change}
approved_2: "утверждена." # {change}
# approved_4: "You can now enroll your students on the"
# approved_5: "courses"
# approved_6: "page."
approved_4: "Теперь вы можете регистрировать ваших учеников на"
approved_5: "курсы"
approved_6: "страница."
denied_1: "Ваша заявка на бесплатную пробную подписку была" # {change}
denied_2: "отклонена." # {change}
contact_1: "Пожалуйста, свяжитесь с"
contact_2: ", если у вас остались вопросы."
description_1: "Мы предлагаем бесплатные подписки учителям в целях ознакомления. Вы можете найти больше информации на нашей странице"
# description_1b: "You can find more information on our"
description_1b: "Вы можете найти больше информации на"
description_2: "учителей"
description_3: ""
description_4: "Пожалуйста, заполните эту маленькую анкету и мы вышлем вам инструкции по установке на email."
@ -736,7 +736,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
subs_only: "только для подписчиков"
create_clan: "Создать новый клан"
private_preview: "Превью"
# private_clans: "Private Clans"
private_clans: "Тайные кланы"
public_clans: "Публичные кланы"
my_clans: "Мои кланы"
clan_name: "Имя клана"
@ -768,7 +768,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
started_2: "Начат"
not_started_2: "Не начат"
view_solution: "Нажмите, чтобы увидеть решение."
# view_attempt: "Click to view attempt."
view_attempt: "Нажмите чтобы посмотреть попытку."
latest_achievement: "Последнее достижение"
playtime: "Время игры"
last_played: "Последняя игра"
@ -780,17 +780,17 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# track_concepts3b: "Track levels completed for each member"
# track_concepts4a: "See your students'"
# track_concepts4b: "See your members'"
# track_concepts5: "solutions"
# track_concepts6a: "Sort students by name or progress"
# track_concepts6b: "Sort members by name or progress"
# track_concepts7: "Requires invitation"
# track_concepts8: "to join"
# private_require_sub: "Private clans require a subscription to create or join."
track_concepts5: "решения"
track_concepts6a: "Сортировать студентов по имени или прогрессу"
track_concepts6b: "Сортировать членов по имени или прогрессу"
track_concepts7: "Требуется приглашение"
track_concepts8: "вступить"
private_require_sub: "Требуется подписка чтобы создать тайный клан или вступить в него."
courses:
course: "Курс"
courses: "Курсы"
# create_new_class: "Create New Class"
create_new_class: "Создать новый класс"
not_enrolled: "Вы не записаны на этот курс."
visit_pref: "Пожалуйста, зайдите на"
visit_suf: "страницу для записи."
@ -865,151 +865,151 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
topics: "Темы"
hours_content: "Много часов материала:"
get_free: "Получить бесплатный курс"
# enroll_paid: "Enroll Students in Paid Courses"
# you_have1: "You have"
enroll_paid: "Записать учеников на платные курсы"
you_have1: "У вас есть"
# you_have2: "unused paid enrollments"
# use_one: "Use 1 paid enrollment for"
# use_multiple: "Use paid enrollments for the following students:"
# already_enrolled: "already enrolled"
already_enrolled: "уже зачислен"
# licenses_remaining: "licenses remaining:"
# insufficient_enrollments: "insufficient paid enrollments"
# enroll_students: "Enroll Students"
# get_enrollments: "Get More Enrollments"
# change_language: "Change Course Language"
# keep_using: "Keep Using"
# switch_to: "Switch To"
# greetings: "Greetings!"
# learn_p: "Learn Python"
# learn_j: "Learn JavaScript"
# language_cannot_change: "Language cannot be changed once students join a class."
# back_classrooms: "Back to my classrooms"
# back_courses: "Back to my courses"
# edit_details: "Edit class details"
change_language: "Изменить язык программирования курса"
keep_using: "Продолжить использовать"
switch_to: "Переключить на"
greetings: "Поздравления!"
learn_p: "Изучать Python"
learn_j: "Изучать JavaScript"
language_cannot_change: "Язык не может быть изменён после того как ученик присоединился к классу."
back_classrooms: "Назад к моим классам"
back_courses: "Назад к моим курсам"
edit_details: "Редактировать описание класса"
# enrolled_courses: "enrolled in paid courses:"
# purchase_enrollments: "Purchase Enrollments"
# remove_student: "remove student"
remove_student: "удалить ученика"
# assign: "Assign"
# to_assign: "to assign paid courses."
# teacher: "Teacher"
# complete: "Complete"
teacher: "Учитель"
complete: "Завершить"
# none: "None"
# save: "Save"
# play_campaign_title: "Play the Campaign"
save: "Сохранить"
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!"
# 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!"
# 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."
# arena: "Arena"
# arena_soon_title: "Arena Coming Soon"
arena: "Арена"
arena_soon_title: "Арена скоро появится"
# arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
# not_enrolled1: "Not enrolled"
# not_enrolled2: "Ask your teacher to enroll you in the next course."
# next_course: "Next Course"
# coming_soon1: "Coming soon"
not_enrolled2: "Попросите учителя зачислить вас на следующий курс."
next_course: "Следующий курс"
coming_soon1: "Скоро появится"
# coming_soon2: "We are hard at work making more courses for you!"
# available_levels: "Available Levels"
# welcome_to_courses: "Adventurers, welcome to Courses!"
# ready_to_play: "Ready to play?"
# start_new_game: "Start New Game"
# play_now_learn_header: "Play now to learn"
# play_now_learn_1: "basic syntax to control your character"
# play_now_learn_2: "while loops to solve pesky puzzles"
# play_now_learn_3: "strings & variables to customize actions"
# play_now_learn_4: "how to defeat an ogre (important life skills!)"
# welcome_to_page: "Welcome to your Courses page!"
# completed_hoc: "Amazing! You've completed the Hour of Code course!"
# ready_for_more_header: "Ready for more? Play the campaign mode!"
# ready_for_more_1: "Use gems to unlock new items!"
welcome_to_courses: "Искатели приключений, добро пожаловать на курсы!"
ready_to_play: "Готовы приступить к игре?"
start_new_game: "Начать новую игру"
play_now_learn_header: "Начать обучающую игру"
play_now_learn_1: "базовый синтаксис управления персонажем"
play_now_learn_2: "циклы while чтобы решать противные головоломки"
play_now_learn_3: "строки и переменные чтобы настраивать действия"
play_now_learn_4: "Как победить огра (важные жизненные навыки!)"
welcome_to_page: "Добро пожаловать на вашу страницу курсов!"
completed_hoc: "Изумительно! Вы прошли курс Час кода!"
ready_for_more_header: "Хотите продолжить? Играйте в режиме кампании!"
ready_for_more_1: "Используйте самоцветы чтобы разблокировать новые предметы!"
# ready_for_more_2: "Play through brand new worlds and challenges"
# ready_for_more_3: "Learn even more programming!"
# saved_games: "Saved Games"
# hoc: "Hour of Code"
# my_classes: "My Classes"
# class_added: "Class successfully added!"
# view_class: "view class"
# view_levels: "view levels"
# join_class: "Join A Class"
ready_for_more_3: "Учитесь программировнию дальше!"
saved_games: "Сохранённые игры"
hoc: "Час кода"
my_classes: "Мои классы"
class_added: "Класс успешно добавлен!"
view_class: "смотреть класс"
view_levels: "смотреть уровни"
join_class: "Присоединиться к классу"
# 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>"
# join: "Join"
# join: "Присоединиться"
# joining: "Joining class"
# course_complete: "Course Complete"
# play_arena: "Play Arena"
# start: "Start"
# last_level: "Last Level"
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!"
course_complete: "Курс завершён"
play_arena: "Играть Арену"
# start: "Старт"
# last_level: "Последний уровень"
welcome_to_hoc: "Искатели приключений, добро пожаловать на Час кода!"
# logged_in_as: "Logged in as:"
# not_you: "Not you?"
# welcome_back: "Hi adventurer, welcome back!"
# not_you: "Не вы?"
# welcome_back: "Привет, искатель приключений, добро пожаловать!"
# continue_playing: "Continue Playing"
# more_options: "More options:"
# option1_header: "Option 1: Invite students via email"
more_options: "Другие варианты:"
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."
# 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."
# 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."
# thank_you_pref: "Thank you for your purchase! You can now assign"
# thank_you_suff: "more students to paid courses."
# return_to_class: "Return to classroom"
# return_to_course_man: "Return to course management."
return_to_course_man: "Вернуться к управлению курсом."
# 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?"
# 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"
# enrollments: "enrollments"
# remove_student1: "Remove Student"
remove_student1: "Удалить ученика"
# 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_description2: "The activated paid license will not be returned."
# keep_student: "Keep Student"
keep_student: "Оставить ученика"
# removing_user: "Removing user"
# to_join_ask: "To join a class, ask your teacher for an unlock code."
# join_this_class: "Join Class"
# enter_here: "<enter unlock code here>"
# enter_here: "<Ввести здесь код разблокировки>"
# successfully_joined: "Successfully joined"
# click_to_start: "Click here to start taking"
# my_courses: "My Courses"
# classroom: "Classroom"
my_courses: "Мои курсы"
classroom: "Класс"
# use_school_email: "use your school email if you have one"
# unique_name: "a unique name no one has chosen"
# pick_something: "pick something you can remember"
# class_code: "Class Code"
# optional_ask: "optional - ask your teacher to give you one!"
# optional_school: "optional - what school do you go to?"
# start_playing: "Start Playing"
# skip_this: "Skip this, I'll create an account later!"
# welcome: "Welcome"
# getting_started: "Getting Started with Courses"
optional_ask: "Как вариант - попросите учителя дать вам какой-нибудь!"
optional_school: "Не обязательное - в какую школу вы ходите?"
start_playing: "Начать играть"
skip_this: "Пропустить это, я создам учетную запись позже!"
welcome: "Добро пожаловать"
getting_started: "Начать проходить курсы"
# 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_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."
# additional_resources: "Additional Resources"
# additional_resources_1_pref: "Download/print our"
additional_resources: "Дополнительные ресурсы"
additional_resources_1_pref: "Скачать/распечатать наш"
# additional_resources_1_mid: "Course 1 Teacher's Guide"
# additional_resources_1_suff: "explanations and solutions to each level."
# additional_resources_2_pref: "Complete our"
# 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_suff: "to connect to fellow educators who are using CodeCombat."
# additional_resources_4_pref: "Check out our"
# additional_resources_4_mid: "Schools Page"
# additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings."
# your_classes: "Your Classes"
your_classes: "Ваши классы"
# no_classes: "No classes yet!"
# create_new_class1: "create new class"
create_new_class1: "создать новый класс"
# available_courses: "Available Courses"
# 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."
# active_courses: "active courses"
# no_students: "No students yet!"
# add_students1: "add students"
# view_edit: "view/edit"
# students_enrolled: "students enrolled"
no_students: "Ещё нет учеников!"
add_students1: "добавить учеников"
view_edit: "смотреть/редактировать"
students_enrolled: "учеников зачислено"
# length: "Length:"
classes:
@ -1254,11 +1254,11 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
rules: "Правила"
winners: "Победители"
league: "Лига"
# red_ai: "Red CPU" # "Red AI Wins", at end of multiplayer match playback
# blue_ai: "Blue CPU"
# wins: "Wins" # At end of multiplayer match playback
# humans: "Red" # Ladder page display team name
# ogres: "Blue"
red_ai: "CPU красного" # "Red AI Wins", at end of multiplayer match playback
blue_ai: "CPU синего"
wins: "Победы" # At end of multiplayer match playback
humans: "Красный" # Ladder page display team name
ogres: "Синий"
user:
stats: "Характеристики"
@ -1406,16 +1406,16 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
campaigns: "Кампании"
poll: "Опрос"
user_polls_record: "История опросов"
# course: "Course"
# courses: "Courses"
# course_instance: "Course Instance"
# course_instances: "Course Instances"
# classroom: "Classroom"
# classrooms: "Classrooms"
# clan: "Clan"
# clans: "Clans"
# members: "Members"
# users: "Users"
course: "Курс"
courses: "Курсы"
course_instance: "Экземпляр курса"
course_instances: "Экземпляры курса"
classroom: "Класс"
classrooms: "Классы"
clan: "Клан"
clans: "Кланы"
members: "Члены"
users: "пользователи"
concepts:
advanced_strings: "Продвинутые строки"

View file

@ -19,11 +19,11 @@ module.exports = class User extends CocoModel
broadName: ->
name = @get('name')
return name if name
name = _.filter([@get('firstName'), @get('lastName')]).join('')
name = _.filter([@get('firstName'), @get('lastName')]).join(' ')
return name if name
email = @get('email')
return email if email
return ''
return 'Anoner'
getPhotoURL: (size=80, useJobProfilePhoto=false, useEmployerPageAvatar=false) ->
photoURL = if useJobProfilePhoto then @get('jobProfile')?.photoURL else null

View file

@ -79,6 +79,7 @@ _.extend UserSchema.properties,
archmageNews: {$ref: '#/definitions/emailSubscription'}
artisanNews: {$ref: '#/definitions/emailSubscription'}
diplomatNews: {$ref: '#/definitions/emailSubscription'}
teacherNews: {$ref: '#/definitions/emailSubscription'}
scribeNews: {$ref: '#/definitions/emailSubscription'}
# 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
@extend .body-row
max-width: 300px
.description-row
@extend .body-row
max-width: 520px
.small-name-row
@extend .body-row
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
background-color: #f8ecaa

View file

@ -1,7 +1,7 @@
@import "app/styles/mixins"
@import "app/styles/bootstrap/variables"
#ladder-home-view
#main-ladder-view
.level
width: 100%
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)
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.
.form-group.checkbox
label.control-label(for="email_ambassadorNews")
span(data-i18n="classes.ambassador_title")
@ -169,7 +169,13 @@ else
| (Support)
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.
.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
.panel.panel-default

View file

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

View file

@ -34,7 +34,13 @@ block content
li
span.spr(data-i18n="courses.additional_resources_1_pref")
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
span.spr(data-i18n="courses.additional_resources_2_pref")
a(href='/teachers/freetrial', data-i18n="teachers_survey.title")

View file

@ -1 +1,35 @@
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) ->
@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) ->
@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

View file

@ -82,3 +82,4 @@ module.exports = class TeachersFreeTrialView extends RootView
console.error 'Error saving trial request', response
success: (model, response, options) =>
@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'
model: Patch
module.exports = class PatchesView extends RootView
module.exports = class PendingPatchesView extends RootView
id: 'pending-patches-view'
template: template

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -11,8 +11,8 @@ class LevelSessionsCollection extends CocoCollection
super()
@url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID"
module.exports = class LadderHomeView extends RootView
id: 'ladder-home-view'
module.exports = class MainLadderView extends RootView
id: 'main-ladder-view'
template: template
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'
storage = require 'core/storage'
module.exports = class SubscribeModal extends ModalView
module.exports = class ShareProgressModal extends ModalView
id: 'share-progress-modal'
template: template
plain: true

View file

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

View file

@ -1,17 +1,108 @@
// Latest teacher trial requests
/* global ISODate */
// Latest approved teacher trial requests
// Usage:
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
var startDay = '2015-10-01';
var endDay = '2016-10-01';
print('Date range:', startDay, endDay);
var userIDs = getTrialRequestApplicants(startDay, endDay);
print('Trial request applicants found:', userIDs.length);
var userEmails = getUserEmails(userIDs);
print('User emails found:', userEmails.length);
for (var i = 0; i < userEmails.length; i++) {
print(userEmails[i]);
var startDay = '2015-11-01';
var endDay = '2016-01-01';
print('Date range:', startDay, 'up to', endDay);
var users = getUsers(startDay, endDay);
print('Teachers found:', users.length);
print("User Id\tStudent Count\tTrial Type\tEmail\tName\tSchool");
for (var i = 0; i < users.length; 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) {
@ -24,60 +115,3 @@ function objectIdWithTimestamp(timestamp) {
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'
User = require '../users/User'
jsonSchema = require '../../app/schemas/models/classroom.schema'
utils = require '../lib/utils'
ClassroomSchema = new mongoose.Schema {}, {strict: false, minimize: false, read:config.mongo.readpref}
@ -18,12 +19,10 @@ ClassroomSchema.statics.editableProperties = [
'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) ->
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()
Classroom.findOne code: code, (err, classroom) ->
return done() if err
@ -31,8 +30,6 @@ ClassroomSchema.statics.generateNewCode = (done) ->
tryCode()
tryCode()
#ClassroomSchema.plugin plugins.NamedPlugin
ClassroomSchema.pre('save', (next) ->
return next() if @get('code')
Classroom.generateNewCode (code, codeCamel) =>

View file

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

View file

@ -6,6 +6,11 @@ config = require '../../server_config'
module.exports =
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) ->
# mongoDB ObjectId contains creation date in first 4 bytes
# So, it can be used instead of a redundant created field

View file

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

View file

@ -8,6 +8,7 @@ errors = require '../commons/errors'
languages = require '../routes/languages'
sendwithus = require '../sendwithus'
log = require 'winston'
utils = require '../lib/utils'
module.exports.setup = (app) ->
authentication.serializeUser((user, done) -> done(null, user._id))
@ -101,7 +102,10 @@ module.exports.setup = (app) ->
if not user
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) =>
return errors.serverError(res) if err
unless config.unittest
@ -111,8 +115,8 @@ module.exports.setup = (app) ->
address: req.body.email
email_data:
subject: 'CodeCombat Recovery Password'
title: 'Recovery Password'
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>"
title: ''
content: emailContent
sendwithus.api.send context, (err, result) ->
if err
console.error "Error sending password reset email: #{err.message or err}"

View file

@ -5,6 +5,7 @@ hipchat = require '../hipchat'
sendwithus = require '../sendwithus'
Prepaid = require '../prepaids/Prepaid'
jsonSchema = require '../../app/schemas/models/trial_request.schema'
User = require '../users/User'
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) =>
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.editableProperties = [
'created'

View file

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

View file

@ -38,43 +38,58 @@ if (database.generateMongoConnectionString() !== dbString) {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 120; // for long Stripe tests
describe('Server Test Helper', function() {
it('starts the test server', function(done) {
var server = require('../../server');
server.startServer(done);
var initialized = false;
beforeEach(function(done) {
if (initialized) {
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('creator')).toEqual(user.get('_id'))
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) ->
loginNewUser (user) ->

View file

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