mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-14 01:31:15 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
51f1de0131
13 changed files with 371 additions and 129 deletions
BIN
app/assets/docs/CodeCombatCoursesGettingStartedGuide.pdf
Normal file → Executable file
BIN
app/assets/docs/CodeCombatCoursesGettingStartedGuide.pdf
Normal file → Executable file
Binary file not shown.
BIN
app/assets/docs/CodeCombatTeacherGuideCourse2.pdf
Executable file
BIN
app/assets/docs/CodeCombatTeacherGuideCourse2.pdf
Executable file
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 164 KiB |
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 we’ll 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: "こちらのページ"
|
||||
|
|
|
@ -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,8 +164,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
accepted: "적용됨"
|
||||
rejected: "거부됨"
|
||||
withdrawn: "취소됨"
|
||||
# accept: "Accept"
|
||||
# reject: "Reject"
|
||||
accept: "승인"
|
||||
reject: "보류"
|
||||
# withdraw: "Withdraw"
|
||||
submitter: "제출자"
|
||||
submitted: "제출됨"
|
||||
|
@ -224,9 +224,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# completed_level: "Completed Level:"
|
||||
# course: "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: "넘어가기"
|
||||
|
@ -265,8 +265,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# 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_become_a_viking: "바이킹이 되세요"
|
||||
guide_title: "가이드"
|
||||
# tome_cast_button_run: "Run"
|
||||
# tome_cast_button_running: "Running"
|
||||
tome_cast_button_run: "실행"
|
||||
tome_cast_button_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.
|
||||
|
@ -274,13 +274,13 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# tome_see_all_methods: "See all methods you can edit" # 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_your_skills: "당신의 스킬"
|
||||
# tome_current_method: "Current Method"
|
||||
# code_saved: "Code Saved"
|
||||
code_saved: "코드가 저장됨"
|
||||
skip_tutorial: "넘기기 (esc)"
|
||||
keyboard_shortcuts: "단축키"
|
||||
loading_ready: "준비!"
|
||||
# loading_start: "Start Level"
|
||||
loading_start: "레벨 시작"
|
||||
problem_alert_title: "코드를 수정하세요"
|
||||
time_current: "현재:"
|
||||
time_total: "최대:"
|
||||
|
@ -368,11 +368,11 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
day: "오늘"
|
||||
week: "이번 주"
|
||||
# all: "All-Time"
|
||||
# time: "Time"
|
||||
time: "시간"
|
||||
# damage_taken: "Damage Taken"
|
||||
# damage_dealt: "Damage Dealt"
|
||||
# difficulty: "Difficulty"
|
||||
# gold_collected: "Gold Collected"
|
||||
difficulty: "난이도"
|
||||
gold_collected: "수집된 골드"
|
||||
|
||||
inventory:
|
||||
equipped_item: "장착됨"
|
||||
|
@ -399,7 +399,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
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!"
|
||||
|
@ -408,16 +408,16 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# feature5: "Video tutorials"
|
||||
# feature6: "Premium email support"
|
||||
# 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: "."
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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'
|
||||
|
|
43
scripts/analytics/mongodb/queries/schoolCounts.js
Normal file
43
scripts/analytics/mongodb/queries/schoolCounts.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
// Print out school user counts
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
|
||||
var scriptStartTime = new Date();
|
||||
|
||||
var cursor = db.users.find({
|
||||
$and: [
|
||||
{anonymous: false},
|
||||
{schoolName: {$exists: true}},
|
||||
{schoolName: {$ne: ''}}
|
||||
]
|
||||
}, {schoolName: 1});
|
||||
|
||||
var schoolCountMap = {};
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
if (!schoolCountMap[doc.schoolName]) schoolCountMap[doc.schoolName] = 0;
|
||||
schoolCountMap[doc.schoolName]++;
|
||||
}
|
||||
|
||||
var schoolCounts = [];
|
||||
for (var schoolName in schoolCountMap) {
|
||||
schoolCounts.push({schoolName: schoolName, count: schoolCountMap[schoolName]});
|
||||
}
|
||||
schoolCounts.sort(function(a, b) {
|
||||
if (a.count > b.count) return -1;
|
||||
else if (a.count === b.count) return 0;
|
||||
return 1;
|
||||
});
|
||||
|
||||
for (var i = 0; i < schoolCounts.length; i++) {
|
||||
if (schoolCounts[i].count >= 10)
|
||||
print(schoolCounts[i].count, schoolCounts[i].schoolName);
|
||||
}
|
||||
|
||||
log("Script runtime: " + (new Date() - scriptStartTime));
|
||||
|
||||
function log(str) {
|
||||
print(new Date().toISOString() + " " + str);
|
||||
}
|
182
scripts/analytics/mongodb/queries/userTypesBySchool.js
Normal file
182
scripts/analytics/mongodb/queries/userTypesBySchool.js
Normal file
|
@ -0,0 +1,182 @@
|
|||
/* global printjson */
|
||||
/* global db */
|
||||
// Find user type counts by school
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
// TODO: include data for users with unknown school
|
||||
|
||||
var scriptStartTime = new Date();
|
||||
|
||||
var toString = Object.prototype.toString;
|
||||
var _ = {
|
||||
isString: function (obj) {
|
||||
return toString.call(obj) == '[object String]';
|
||||
}
|
||||
};
|
||||
|
||||
var printLineMax = 40;
|
||||
|
||||
var schoolTypes = ['courses paid', 'courses trial', 'courses free', 'campaign paid', 'campaign trial', 'campaign free'];
|
||||
|
||||
var schoolTypeCounts = getSchoolTypeCounts();
|
||||
|
||||
schoolTypeCounts.sort(function(a, b) {
|
||||
if (a['courses paid'] > b['courses paid']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] > b['courses trial']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] == b['courses trial'] && a['courses free'] > b['courses free']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] == b['courses trial'] && a['courses free'] === b['courses free'] && a['campaign paid'] > b['campaign paid']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] == b['courses trial'] && a['courses free'] === b['courses free'] && a['campaign paid'] === b['campaign paid'] && a['campaign trial'] > b['campaign trial']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] == b['courses trial'] && a['courses free'] === b['courses free'] && a['campaign paid'] === b['campaign paid'] && a['campaign trial'] === b['campaign trial'] && a['campaign free'] > b['campaign free']) return -1;
|
||||
else if (a['courses paid'] === b['courses paid'] && a['courses trial'] == b['courses trial'] && a['courses free'] === b['courses free'] && a['campaign paid'] === b['campaign paid'] && a['campaign trial'] === b['campaign trial'] && a['campaign free'] === b['campaign free']) return 0;
|
||||
return 1;
|
||||
});
|
||||
|
||||
|
||||
print('total\tcourses paid\tcourses trial\tcourses free\tcampaign paid\tcampaign trial\tcampaign free\tschool');
|
||||
for (var i = 0; i < schoolTypeCounts.length; i++) {
|
||||
var schoolData = schoolTypeCounts[i];
|
||||
print(schoolData['total'], '\t', schoolData['courses paid'], '\t', schoolData['courses trial'], '\t', schoolData['courses free'], '\t', schoolData['campaign paid'], '\t', schoolData['campaign trial'], '\t', schoolData['campaign free'], '\t', schoolData.schoolName);
|
||||
if (i >= printLineMax - 1) break;
|
||||
}
|
||||
|
||||
schoolTypeCounts.sort(function(a, b) {
|
||||
if (a.total > b.total) return -1;
|
||||
else if (a.total === b.total) return 0;
|
||||
return 1;
|
||||
});
|
||||
|
||||
print('total\tcourses paid\tcourses trial\tcourses free\tcampaign paid\tcampaign trial\tcampaign free\tschool');
|
||||
for (var i = 0; i < schoolTypeCounts.length; i++) {
|
||||
var schoolData = schoolTypeCounts[i];
|
||||
print(schoolData['total'], '\t', schoolData['courses paid'], '\t', schoolData['courses trial'], '\t', schoolData['courses free'], '\t', schoolData['campaign paid'], '\t', schoolData['campaign trial'], '\t', schoolData['campaign free'], '\t', schoolData.schoolName);
|
||||
if (i >= printLineMax - 1) break;
|
||||
}
|
||||
|
||||
log("Script runtime: " + (new Date() - scriptStartTime));
|
||||
|
||||
|
||||
function getSchoolTypeCounts() {
|
||||
// Find users with school data
|
||||
log("Finding users with a school name..");
|
||||
var prepaidIDs = [];
|
||||
var userIDs = [];
|
||||
var prepaidUserMap = {};
|
||||
var userSchoolMap = {};
|
||||
var userSubscriptionMap = {};
|
||||
var cursor = db.users.find({
|
||||
$and: [
|
||||
{anonymous: false},
|
||||
{schoolName: {$exists: true}},
|
||||
{schoolName: {$ne: ''}}
|
||||
]
|
||||
}, {coursePrepaidID: 1, schoolName: 1, stripe: 1});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
var userID = doc._id.valueOf();
|
||||
if (doc.coursePrepaidID) {
|
||||
prepaidIDs.push(doc.coursePrepaidID);
|
||||
var prepaidID = doc.coursePrepaidID.valueOf();
|
||||
if (!prepaidUserMap[prepaidID]) prepaidUserMap[prepaidID] = [];
|
||||
prepaidUserMap[prepaidID].push(userID);
|
||||
}
|
||||
if (doc.stripe && (doc.stripe.sponsorID || doc.stripe.subscriptionID || _.isString(doc.stripe.free) && new Date() < new Date(doc.stripe.free))) {
|
||||
userSubscriptionMap[userID] = true;
|
||||
}
|
||||
userIDs.push(userID);
|
||||
userSchoolMap[userID] = doc.schoolName;
|
||||
}
|
||||
log("Users with schools: " + userIDs.length);
|
||||
// printjson(userSubscriptionMap);
|
||||
|
||||
// Find user types
|
||||
var userTypeMap = {};
|
||||
|
||||
// courses paid: coursePrepaidID set, prepaid not trial
|
||||
// courses trial: coursePrepaidID set, prepaid has trialRequestID set
|
||||
log("Finding courses prepaids..");
|
||||
var cursor = db.prepaids.find({_id: {$in: prepaidIDs}}, {properties: 1});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
var prepaidID = doc._id.valueOf();
|
||||
if (prepaidUserMap[prepaidID]) {
|
||||
var type = doc.properties && doc.properties.trialRequestID ? 'courses trial' : 'courses paid';
|
||||
for (var i = 0; i < prepaidUserMap[prepaidID].length; i++) {
|
||||
userTypeMap[prepaidUserMap[prepaidID][i]] = type;
|
||||
}
|
||||
}
|
||||
else {
|
||||
print("ERROR");
|
||||
printjson(doc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// printjson(userTypeMap);
|
||||
|
||||
// courses free: class member, no coursePrepaidID not set
|
||||
log("Finding classrooms..");
|
||||
var userClassroomMap = {};
|
||||
var cursor = db.classrooms.find({}, {members: 1});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
if (doc.members) {
|
||||
for (var i = 0; i < doc.members.length; i++) {
|
||||
userClassroomMap[doc.members[i].valueOf()] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < userIDs.length; i++) {
|
||||
if (!userTypeMap[userIDs[i]] && userClassroomMap[userIDs[i]]) {
|
||||
userTypeMap[userIDs[i]] = 'courses free';
|
||||
}
|
||||
}
|
||||
|
||||
// campaign trial: has subscription and trial request
|
||||
log("Finding trial requests..");
|
||||
var cursor = db.trial.requests.find({status: 'approved'}, {applicant: 1});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
if (doc.applicant) {
|
||||
var userID = doc.applicant.valueOf();
|
||||
if (!userTypeMap[userID] && userSubscriptionMap[userID]) userTypeMap[userID] = 'campaign trial';
|
||||
}
|
||||
}
|
||||
|
||||
// campaign paid: has subscription, no approved trial request
|
||||
// campaign free: no other matches
|
||||
log("Setting remaining user types to campaign paid or free..");
|
||||
for (var i = 0; i < userIDs.length; i++) {
|
||||
if (!userTypeMap[userIDs[i]]) userTypeMap[userIDs[i]] = userSubscriptionMap[userIDs[i]] ? 'campaign paid' : 'campaign free';
|
||||
}
|
||||
|
||||
// Tally user types per school
|
||||
var schoolTypeCountMap = {};
|
||||
for (var userID in userTypeMap) {
|
||||
var schoolName = userSchoolMap[userID];
|
||||
var type = userTypeMap[userID];
|
||||
if (!schoolTypeCountMap[schoolName]) schoolTypeCountMap[schoolName] = {};
|
||||
if (!schoolTypeCountMap[schoolName][type]) schoolTypeCountMap[schoolName][type] = 0;
|
||||
schoolTypeCountMap[schoolName][type]++;
|
||||
}
|
||||
|
||||
var schoolTypeCounts = [];
|
||||
for (var schoolName in schoolTypeCountMap) {
|
||||
var schoolData = {schoolName: schoolName, total: 0};
|
||||
for (var type in schoolTypeCountMap[schoolName]) {
|
||||
schoolData[type] = schoolTypeCountMap[schoolName][type];
|
||||
schoolData.total += schoolTypeCountMap[schoolName][type];
|
||||
}
|
||||
for (var i = 0; i < schoolTypes.length; i++) {
|
||||
if (!schoolData[schoolTypes[i]]) schoolData[schoolTypes[i]] = 0;
|
||||
}
|
||||
schoolTypeCounts.push(schoolData);
|
||||
}
|
||||
log("School count: " + schoolTypeCounts.length);
|
||||
|
||||
return schoolTypeCounts;
|
||||
}
|
||||
|
||||
function log(str) {
|
||||
print(new Date().toISOString() + " " + str);
|
||||
}
|
|
@ -12,10 +12,8 @@ var courses =
|
|||
name: "Introduction to Computer Science",
|
||||
slug: "introduction-to-computer-science",
|
||||
campaignID: ObjectId("55b29efd1cd6abe8ce07db0d"),
|
||||
concepts: ['basic_syntax', 'arguments', 'while_loops', 'strings', 'variables'],
|
||||
description: "Learn basic syntax, while loops, and the CodeCombat environment.",
|
||||
duration: NumberInt(1),
|
||||
pricePerSeat: NumberInt(0),
|
||||
free: true,
|
||||
screenshot: "/images/pages/courses/101_info.png"
|
||||
},
|
||||
|
@ -23,10 +21,8 @@ var courses =
|
|||
name: "Computer Science 2",
|
||||
slug: "computer-science-2",
|
||||
campaignID: ObjectId("562f88e84df18473073c74e2"),
|
||||
concepts: ['basic_syntax', 'arguments', 'while_loops', 'strings', 'variables', 'if_statements'],
|
||||
description: "Introduce Arguments, Variables, If Statements, and Arithmetic.",
|
||||
duration: NumberInt(5),
|
||||
pricePerSeat: NumberInt(400),
|
||||
free: false,
|
||||
screenshot: "/images/pages/courses/102_info.png"
|
||||
},
|
||||
|
@ -34,10 +30,8 @@ var courses =
|
|||
name: "Computer Science 3",
|
||||
slug: "computer-science-3",
|
||||
campaignID: ObjectId("56462ac4410c528505e1160a"),
|
||||
concepts: ['if_statements', 'arithmetic'],
|
||||
description: "Introduces arithmetic, counters, advanced while loops, break, continue, arrays.",
|
||||
duration: NumberInt(5),
|
||||
pricePerSeat: NumberInt(400),
|
||||
free: false,
|
||||
screenshot: "/images/pages/courses/103_info.png"
|
||||
},
|
||||
|
@ -45,12 +39,19 @@ var courses =
|
|||
name: "Computer Science 4",
|
||||
slug: "computer-science-4",
|
||||
campaignID: ObjectId("56462c1133f1478605ebd018"),
|
||||
concepts: ['if_statements', 'arithmetic'],
|
||||
description: "Introduces object literals, for loops, function definitions, drawing, and modulo.",
|
||||
duration: NumberInt(5),
|
||||
pricePerSeat: NumberInt(400),
|
||||
free: false,
|
||||
screenshot: "/images/pages/courses/104_info.png"
|
||||
},
|
||||
{
|
||||
name: "Computer Science 5",
|
||||
slug: "computer-science-5",
|
||||
campaignID: ObjectId("568ad069a6584820004437f2"),
|
||||
description: "Introduces function parameters, function return values and algorithms.",
|
||||
duration: NumberInt(5),
|
||||
free: false,
|
||||
screenshot: "/images/pages/courses/105_info.png"
|
||||
}
|
||||
];
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ describe 'lib/FacebookHandler.coffee', ->
|
|||
expect(FB.api).toHaveBeenCalled()
|
||||
apiArgs = FB.api.calls.argsFor(0)
|
||||
expect(apiArgs[0]).toBe('/me')
|
||||
apiArgs[1](mockMe) # sending the 'response'
|
||||
apiArgs[2](mockMe) # sending the 'response'
|
||||
request = jasmine.Ajax.requests.mostRecent()
|
||||
expect(request).toBeDefined()
|
||||
params = JSON.parse request.params
|
||||
|
|
Loading…
Reference in a new issue