diff --git a/.gitignore b/.gitignore
index 63213cf41..c4a59d9bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,3 +104,4 @@ Dockerfile
# coffeelint for editors (might be standardized eventually)
coffeelint.json
+gitSpy/*
diff --git a/app/assets/images/common/lang-nl/button-background-ideal-active-border.png b/app/assets/images/common/lang-nl/button-background-ideal-active-border.png
new file mode 100644
index 000000000..b05443243
Binary files /dev/null and b/app/assets/images/common/lang-nl/button-background-ideal-active-border.png differ
diff --git a/app/assets/images/pages/play/modal/lang-nl/buy-gems-background-NL.png b/app/assets/images/pages/play/modal/lang-nl/buy-gems-background-NL.png
new file mode 100644
index 000000000..a1a2576f9
Binary files /dev/null and b/app/assets/images/pages/play/modal/lang-nl/buy-gems-background-NL.png differ
diff --git a/app/collections/Payments.coffee b/app/collections/Payments.coffee
new file mode 100644
index 000000000..76884c652
--- /dev/null
+++ b/app/collections/Payments.coffee
@@ -0,0 +1,7 @@
+Payment = require 'models/Payment'
+CocoCollection = require 'collections/CocoCollection'
+
+module.exports = class Payments extends CocoCollection
+ model: Payment
+ url: '/db/payment'
+
diff --git a/app/lib/coursesHelper.coffee b/app/lib/coursesHelper.coffee
index cc7a56274..fd9a5b0e3 100644
--- a/app/lib/coursesHelper.coffee
+++ b/app/lib/coursesHelper.coffee
@@ -139,16 +139,21 @@ module.exports =
levels = classroom.getLevels({courseID: course.id, withoutLadderLevels: true})
for level in levels.models
levelID = level.get('original')
- progressData[classroom.id][course.id][levelID] = { completed: students.size() > 0, started: false }
+ progressData[classroom.id][course.id][levelID] = {
+ completed: students.size() > 0,
+ started: false
+ numStarted: 0
+ # numCompleted: 0
+ }
for user in students.models
userID = user.id
courseProgress = progressData[classroom.id][course.id]
- courseProgress[userID] ?= { completed: true, started: false } # Only set it the first time through a user
+ courseProgress[userID] ?= { completed: true, started: false, levelsCompleted: 0 } # Only set it the first time through a user
courseProgress[levelID][userID] = { completed: true, started: false } # These don't matter, will always be set
session = _.find classroom.sessions.models, (session) ->
session.get('creator') is userID and session.get('level').original is levelID
-
+
if not session # haven't gotten to this level yet, but might have completed others before
courseProgress.started ||= false #no-op
courseProgress.completed = false
@@ -158,21 +163,30 @@ module.exports =
courseProgress[levelID].completed = false
courseProgress[levelID][userID].started = false
courseProgress[levelID][userID].completed = false
+
if session # have gotten to the level and at least started it
courseProgress.started = true
courseProgress[userID].started = true
courseProgress[levelID].started = true
courseProgress[levelID][userID].started = true
+ courseProgress[levelID][userID].lastPlayed = new Date(session.get('changed'))
+ courseProgress[levelID].numStarted += 1
+
if session?.completed() # have finished this level
courseProgress.completed &&= true #no-op
- courseProgress[userID].completed = true
+ courseProgress[userID].completed &&= true #no-op
+ courseProgress[userID].levelsCompleted += 1
courseProgress[levelID].completed &&= true #no-op
+ # courseProgress[levelID].numCompleted += 1
courseProgress[levelID][userID].completed = true
+ courseProgress[levelID][userID].dateFirstCompleted = new Date(session.get('dateFirstCompleted') || session.get('changed'))
else # level started but not completed
courseProgress.completed = false
courseProgress[userID].completed = false
courseProgress[levelID].completed = false
courseProgress[levelID][userID].completed = false
+ courseProgress[levelID].dateFirstCompleted = null
+ courseProgress[levelID][userID].dateFirstCompleted = null
_.assign(progressData, progressMixin)
return progressData
diff --git a/app/locale/ar.coffee b/app/locale/ar.coffee
index f40570d6b..5b8e0cd84 100644
--- a/app/locale/ar.coffee
+++ b/app/locale/ar.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
blog: "مدوّنة"
forum: "منتدى"
account: "حساب"
+# my_account: "My Account"
profile: "ملف شخصي"
stats: "إحصاءات"
code: "رمز"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
campaign_old_multiplayer_description: "قطع اثرية من العصر أكثر تحضرا. يتم تشغيل أي محاكاة لهذه السن، الساحات متعددة البطل أقل."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
clojure_blurb: "لثغة حديثة."
lua_blurb: "لعبة لغة البرمجة."
io_blurb: "بسيطة ولكنها غامضة."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
weapons: "اسلحة"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/bg.coffee b/app/locale/bg.coffee
index 385878377..d148ff94d 100644
--- a/app/locale/bg.coffee
+++ b/app/locale/bg.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "български език", englishDescri
create_a_class: "Създай клас"
setup_a_class: "Задай клас"
have_an_account: "Вече имаш акаунт?"
- log_in: "Влез"
logged_in_as: "Влязъл си като"
view_my_classes: "Моите класове"
computer_science: "Курсове по компютърни науки за всички възрасти"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "български език", englishDescri
educator_wiki: "Wiki за учители"
view_profile: "Моя профил"
view_progress: "Прегледай прогреса"
- login_switch: "Вече имаш акаунт?"
check_out_wiki: "Разгледай новото ни Wiki за учители"
want_coco: "Искаш ли CodeCombat в училището си?"
form_select_role: "Избери основна роля"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "български език", englishDescri
blog: "Блог"
forum: "Форум"
account: "Акаунт"
+# my_account: "My Account"
profile: "Профил"
stats: "Статистики"
code: "Код"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "български език", englishDescri
campaign_old_multiplayer_description: "Остатъци от едни по-циливизовани вренмена. Тези стари арени са без симулации и без герои."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "български език", englishDescri
clojure_blurb: "Модерен Lisp."
lua_blurb: "Скриптен език за игри."
io_blurb: "Прост, но неизвестен."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Статус"
hero_type: "Тип"
weapons: "Оръжия"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "български език", englishDescri
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "български език", englishDescri
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "български език", englishDescri
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "български език", englishDescri
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "български език", englishDescri
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/ca.coffee b/app/locale/ca.coffee
index cdd68f6dc..f6f1645be 100644
--- a/app/locale/ca.coffee
+++ b/app/locale/ca.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
blog: "Bloc"
forum: "Fòrum"
account: "Compte"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estats"
code: "Codi"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
campaign_old_multiplayer_description: "Relíquies d'una era més civilitzada. No hi ha simulacions per aquestes arenes multijugador antigues."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
clojure_blurb: "Un Lisp modern."
lua_blurb: "Llenguatge script per a jocs."
io_blurb: "Senzill però obscur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Estat"
hero_type: "Tipus"
weapons: "Armes"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arximag"
diff --git a/app/locale/cs.coffee b/app/locale/cs.coffee
index aa996945a..5d298a9a3 100644
--- a/app/locale/cs.coffee
+++ b/app/locale/cs.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
blog: "Blog"
forum: "Fórum"
account: "Účet"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistiky"
code: "Kód"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
clojure_blurb: "Moderní Lisp."
lua_blurb: "Jazyk pro skriptování her."
io_blurb: "Jednoduchý ale nejasný."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Stav"
hero_type: "Typ"
weapons: "Zbraně"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arcikouzelník"
diff --git a/app/locale/da.coffee b/app/locale/da.coffee
index 5bab5fc28..a8d86ea7d 100644
--- a/app/locale/da.coffee
+++ b/app/locale/da.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
create_a_class: "Opret klasse"
setup_a_class: "Opsæt klasse"
have_an_account: "Har du allerede en konto?"
- log_in: "Log ind"
logged_in_as: "Du er i øjeblikket logget ind som"
view_my_classes: "Se mine klasser"
computer_science: "Datalogikurser for alle aldre"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
educator_wiki: "Underviser wiki"
view_profile: "Vis Min Profil"
# view_progress: "View Progress"
- login_switch: "Har du en konto?"
check_out_wiki: "Tjek vores nye pædagog Wiki"
want_coco: "Ønsker du CodeCombat på din skole?"
form_select_role: "Vælg primær rolle"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
blog: "Blog"
forum: "Forum"
account: "Konto"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistik"
code: "Kode"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
campaign_old_multiplayer_description: "Levn fra en mere civiliseret tid. Ingen simuleringer er kørt for disse ældre, helte-fattige multiplayer arenaer."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
clojure_blurb: "En moderne version af Lisp."
lua_blurb: "Spil scripting sprog."
io_blurb: "Simpelt men obskurt."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Type"
weapons: "Våben"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
main_description: "Hos CodeCombat er vores opgave at sikre, at du gør det med et smil på læben."
mission_link: "Mission"
team_link: "Hold"
- community_link: "Fællesskab"
story_link: "Baggrund"
- careers_link: "Karriere"
press_link: "Pressen"
mission_title: "Vores mission: At gøre programmering tilgængelig for alle elever på Jorden."
mission_description_1: "Programmering er magi. Det er evnen til at skabe ting fra ren fantasi. Vi startede CodeCombat for at give eleverne en fornemmelse af troldmandsmagt lige ved hånden ved hjælp af indtastet kode."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
length: "Varighed:"
title: "Titel" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Beskrivelse" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Ærkemager"
diff --git a/app/locale/de-AT.coffee b/app/locale/de-AT.coffee
index 592d21b74..dd5bec038 100644
--- a/app/locale/de-AT.coffee
+++ b/app/locale/de-AT.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
blog: "Blog"
forum: "Forum"
account: "Account"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistiken"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
clojure_blurb: "Ein modernes Lisp."
lua_blurb: "Skriptsprache für Spiele (KI)."
io_blurb: "Simpel aber obskur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
# hero_type: "Type"
weapons: "Waffen"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Erzmagier"
diff --git a/app/locale/de-CH.coffee b/app/locale/de-CH.coffee
index 16b763eaa..54dc8f539 100644
--- a/app/locale/de-CH.coffee
+++ b/app/locale/de-CH.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
blog: "Blog"
forum: "Forum"
account: "Account"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistike"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# clojure_blurb: "A modern Lisp."
lua_blurb: "D Sproch für Game Scripts."
io_blurb: "Eifach aber undurchsichtig."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
hero_type: "Typ"
weapons: "Waffene"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Dütsch (Schwiiz)", englishDescription: "Ge
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/de-DE.coffee b/app/locale/de-DE.coffee
index 01d304317..17d546aa2 100644
--- a/app/locale/de-DE.coffee
+++ b/app/locale/de-DE.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
create_a_class: "Erstellen Sie eine Klasse"
setup_a_class: "Eine Klasse erstellen"
have_an_account: "Haben Sie bereits einen Account?" # {change}
- log_in: "Einloggen"
logged_in_as: "Sie sind zurzeit eingeloggt als"
view_my_classes: "Zeige meine Klassen"
computer_science: "Informatikkurse für alle Altersgruppen"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
blog: "Blog"
forum: "Forum"
account: "Account"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistiken"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
campaign_old_multiplayer_description: "Relikte einer eher zivilisierten Zeit. Keine Simulationen laufen hier ab für diese älteren Multiplayerarenas ohne Helden."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
clojure_blurb: "Ein modernes Lisp."
lua_blurb: "Skriptsprache für Spiele."
io_blurb: "Simpel aber obskur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Typ"
weapons: "Waffen"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
main_description: "Bei CodeCombat ist es unser Job das du das mit einem Lächeln im Gesicht tust."
mission_link: "Mission"
team_link: "Team"
- community_link: "Community"
story_link: "Geschichte"
- careers_link: "Karrieren"
press_link: "Presse"
mission_title: "Unsere Mission: Programmieren jedem Schüler auf der Erde zugänglich zu machen."
mission_description_1: "Programmieren ist Magie. Es ist die Fähigkeit Dinge aus purer Vorstellungskraft zu erschaffen. Wir starteten CodeCombat um Lernen dieses Gefühl der Zauberkraft in ihren Fingerspitzen zu geben während sie getippten Code benutzen." # {change}
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
length: "Länge:"
title: "Titel" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Beschreibung" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Erzmagier"
diff --git a/app/locale/el.coffee b/app/locale/el.coffee
index c130c7c13..483a1d313 100644
--- a/app/locale/el.coffee
+++ b/app/locale/el.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
blog: "Ιστολόγιο"
forum: "Φόρουμ"
account: "Λογαριασμός"
+# my_account: "My Account"
profile: "Προφίλ"
stats: "Στατιστικά"
code: "Κώδικας"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
clojure_blurb: "Μοντέρνα Lisp."
lua_blurb: "Γλώσσα παιχνιδιών με σενάρια."
io_blurb: "Απλή αλλά ασαφής."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Κατάσταση"
hero_type: "Τύπος"
weapons: "Όπλα"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
length: "Μήκος:"
title: "Τίτλος" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Περιγραφή" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Αρχιμάγος"
diff --git a/app/locale/en-GB.coffee b/app/locale/en-GB.coffee
index e39911947..8a77f5581 100644
--- a/app/locale/en-GB.coffee
+++ b/app/locale/en-GB.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/en-US.coffee b/app/locale/en-US.coffee
index 639e3733c..b8b68b99c 100644
--- a/app/locale/en-US.coffee
+++ b/app/locale/en-US.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/en.coffee b/app/locale/en.coffee
index 8ca444a7b..c73e47493 100644
--- a/app/locale/en.coffee
+++ b/app/locale/en.coffee
@@ -188,7 +188,7 @@
campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
code:
- if: "if" # Keywords
+ if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
else: "else"
elif: "elif"
while: "while"
@@ -200,7 +200,7 @@
do: "do"
end: "end"
function: "function"
- def: "def"
+ def: "def" # (short for "define")
self: "self"
hero: "hero"
this: "this"
@@ -831,6 +831,7 @@
thanks_header: "Request Received!"
thanks_sub_header: "Thanks for expressing interest in CodeCombat for your school."
thanks_p: "We'll be in touch soon! If you need to get in contact, you can reach us at:"
+ back_to_classes: "Back to Classes"
finish_signup: "Finish creating your teacher account:"
finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
signup_with: "Sign up with:"
@@ -1246,7 +1247,7 @@
print_guide: "Print Guide (PDF)"
view_guide_online: "View Guide Online (PDF)"
last_updated: "Last updated:"
- grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+ grants_lifetime_access: "Grants access to all Courses."
enrollment_credits_available: "Enrollment Credits Available:"
description: "Description" # ClassroomSettingsModal
language_select: "Select a language"
@@ -1291,6 +1292,7 @@
view_class: "view class"
archive_class: "archive class"
unarchive_class: "unarchive class"
+ unarchive_this_class: "Unarchive this class"
no_students_yet: "This class has no students yet."
add_students: "Add Students"
create_new_class: "Create a New Class"
@@ -1312,6 +1314,10 @@
latest_completed: "Latest Completed"
sort_by: "Sort by"
progress: "Progress"
+ completed: "Completed"
+ started: "Started"
+ click_to_view_progress: "click to view progress"
+ no_progress: "No progress"
select_course: "Select course to view"
course_overview: "Course Overview"
copy_class_code: "Copy Class Code"
diff --git a/app/locale/eo.coffee b/app/locale/eo.coffee
index 21da71804..cf02eca16 100644
--- a/app/locale/eo.coffee
+++ b/app/locale/eo.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
blog: "Blogo"
forum: "Forumo"
account: "Konto"
+# my_account: "My Account"
profile: "Profilo"
stats: "Statistiko"
code: "Kodo"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Esperanto", englishDescription: "Esperanto"
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/es-419.coffee b/app/locale/es-419.coffee
index 881b1a165..bb48b2038 100644
--- a/app/locale/es-419.coffee
+++ b/app/locale/es-419.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
create_a_class: "Crear una Clase"
# setup_a_class: "Set Up a Class"
have_an_account: "¿Ya tenes una cuenta?" # {change}
- log_in: "Accesar"
logged_in_as: "Estás actualmente conectado como"
view_my_classes: "Ver mis clases"
computer_science: "Cursos de informática para todas las edades"
@@ -95,9 +94,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# educator_wiki: "Educator wiki"
view_profile: "Ver mi perfíl"
view_progress: "Ver mi progreso"
- login_switch: "¿Tienes una cuenta?"
check_out_wiki: "Check out our new educator Wiki"
-# want_coco: "¿Quiéres Code combat en tu escuela?"
+# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
form_select_range: "Seleccione el tamaño de la clase"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
blog: "Blog"
forum: "Foro"
account: "Cuenta"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estadísticas"
code: "Código"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
campaign_old_multiplayer_description: "Reliquias de una era más civilizada. Ninguna simulación es ejecutada para estas arenas multijugador antiguas y sin héroes."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
clojure_blurb: "Un Lisp moderno."
lua_blurb: "Lenguaje para Juegos."
io_blurb: "Simple pero oscuro."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Estado"
hero_type: "Tipo"
weapons: "Armas"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
main_description: "En CodeCombat, nuestro trabajo es asegurarnos que estás haciendo eso con una sonrisa en tu cara."
mission_link: "Misión"
team_link: "Equipo"
- community_link: "Comunidad"
story_link: "Historia"
- careers_link: "Carreras"
press_link: "Prensa"
mission_title: "Nuestra misión: hacer accesible la programación para cada estudiante en la Tierra."
mission_description_1: "La programación es mágica. Es la habilidad de crear cosas desde la pura imaginación. Empezamos CodeCombat para dar a los estudiantes la sensación de poder de la magia en la punta de sus dedos mediante el tipeo de código."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
length: "Duración:"
title: "Título" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Descripción" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Archimago"
diff --git a/app/locale/es-ES.coffee b/app/locale/es-ES.coffee
index 85a149f1b..fce27387a 100644
--- a/app/locale/es-ES.coffee
+++ b/app/locale/es-ES.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
blog: "Blog"
forum: "Foro"
account: "Cuenta"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estadisticas"
code: "Codigo"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
campaign_old_multiplayer_description: "Reliquias de una era más civilizada. Ninguna simulación es ejecutada para estas arenas multijugador antiguas y sin héroes."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
clojure_blurb: "Un Lisp moderno."
lua_blurb: "Lenguaje Script para Juegos."
io_blurb: "Simple pero oscuro."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Estado"
hero_type: "Tipo"
weapons: "Armas"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
mission_title: "Nuestra misión: lograr que la programación esté disponible para todos los alumnos de la Tierra."
mission_description_1: "Programar es hacer magia. Es la habilidad de crear cosas desde la imaginación. Iniciamos CodeCombat para que los alumnos experimenten en sus dedos la magia al escribir código.."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Archimago"
diff --git a/app/locale/et.coffee b/app/locale/et.coffee
index 3500b4231..f2c8eb465 100644
--- a/app/locale/et.coffee
+++ b/app/locale/et.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Eesti", englishDescription: "Estonian", tra
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/fa.coffee b/app/locale/fa.coffee
index 46b9a3fc2..33dde3d3a 100644
--- a/app/locale/fa.coffee
+++ b/app/locale/fa.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
blog: "بلاگ"
forum: "انجمن"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/fi.coffee b/app/locale/fi.coffee
index 9d970c082..462340fc5 100644
--- a/app/locale/fi.coffee
+++ b/app/locale/fi.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
blog: "Blogi"
forum: "Foorumi"
account: "Tili"
+# my_account: "My Account"
profile: "Profiili"
stats: "Tilastot"
code: "Koodi"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
clojure_blurb: "Moderni Lisp."
lua_blurb: "Pelien skriptauskieli."
io_blurb: "Yksinkertainen mutta hämärä."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Tila"
hero_type: "Tyyppi"
weapons: "Aseet"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arkkimaagi"
diff --git a/app/locale/fr.coffee b/app/locale/fr.coffee
index d4f090993..d4c17d20b 100644
--- a/app/locale/fr.coffee
+++ b/app/locale/fr.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
blog: "Blog"
forum: "Forum"
account: "Compte"
+# my_account: "My Account"
profile: "Profil"
stats: "Stats"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
campaign_old_multiplayer_description: "Reliques d'un âge plus civilisé. Il n'y a aucune simulation pour ces vielles arènes multijoueur vides de tout héros."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
clojure_blurb: "Un Lisp moderne."
lua_blurb: "Langage de script de jeu."
io_blurb: "Simple mais obscur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Statut"
hero_type: "Type"
weapons: "Arme"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
length: "Durée:"
title: "Titre" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Archimage"
diff --git a/app/locale/gl.coffee b/app/locale/gl.coffee
index 3b99c9455..8e28bcdbc 100644
--- a/app/locale/gl.coffee
+++ b/app/locale/gl.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
blog: "Blog"
forum: "Foro"
account: "Conta"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estatísticas"
code: "Código"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
clojure_blurb: "Un Lisp moderno."
lua_blurb: "Linguaxe Script para Xogos."
io_blurb: "Simple, pero oscuro."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Estado"
# hero_type: "Type"
weapons: "Armas"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Archimago"
diff --git a/app/locale/he.coffee b/app/locale/he.coffee
index ec4450079..5fa76dd78 100644
--- a/app/locale/he.coffee
+++ b/app/locale/he.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
blog: "בלוג"
forum: "פורום"
account: "חשבון"
+# my_account: "My Account"
profile: "פרופיל"
stats: "נתונים"
code: "קוד"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
clojure_blurb: ".עילגות מודרנית"
lua_blurb: ".שפה לכתיבת תסריטי משחק"
io_blurb: ".פשוטה אך מעורפלת"
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "סטטוס"
hero_type: "סוג"
weapons: "נשקים"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "כשף על"
diff --git a/app/locale/hi.coffee b/app/locale/hi.coffee
index e08af628a..8eddd110e 100644
--- a/app/locale/hi.coffee
+++ b/app/locale/hi.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
blog: "ब्लॉग"
forum: "मंच"
account: "खाता"
+# my_account: "My Account"
profile: "रूपरेखा"
stats: "आँकड़े"
code: "कोड"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/hu.coffee b/app/locale/hu.coffee
index ddb9cb35b..d4afe1f8c 100644
--- a/app/locale/hu.coffee
+++ b/app/locale/hu.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
have_an_account: "Van már fiókod?" # {change}
-# log_in: "Log In"
logged_in_as: "Jelenleg így vagy belépve"
# view_my_classes: "View my classes"
computer_science: "Programozás kurzusok minden korosztálynak"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
blog: "Blog"
forum: "Fórum"
account: "Fiók"
+# my_account: "My Account"
profile: "Profil"
stats: "Statisztika"
code: "Kód"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
clojure_blurb: "A modern Lisp."
lua_blurb: "Játék programozó nyelv"
io_blurb: "Egyszerű, de különleges."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Státusz"
hero_type: "Hős típus"
weapons: "Fegyverek"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Főmágus"
diff --git a/app/locale/id.coffee b/app/locale/id.coffee
index 45f4b23d9..567f89617 100644
--- a/app/locale/id.coffee
+++ b/app/locale/id.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
create_a_class: "Buat sebuah kelas"
# setup_a_class: "Set Up a Class"
have_an_account: "Sudah mempunyai akun?"
-# log_in: "Log In"
logged_in_as: "You are currently logged in as"
view_my_classes: "Lihat kelas-kelas saya"
computer_science: "kursus ilmu komputer untuk segala usia"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
blog: "Blog"
forum: "Forum"
account: "Akun"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistik"
code: "Kode"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
campaign_old_multiplayer_description: "Peninggalan zaman yang lebih beradab. Tidak ada simulasi yang dijalankan untuk arena multipemain lebih tua yang tak-berpahlawanan ini."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/it.coffee b/app/locale/it.coffee
index a6791cf26..cb168c59c 100644
--- a/app/locale/it.coffee
+++ b/app/locale/it.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
blog: "Blog"
forum: "Forum"
account: "Account"
+# my_account: "My Account"
profile: "Profilo"
stats: "Statistiche"
code: "Codice"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
campaign_old_multiplayer_description: "Reliquie di un'epoca più civilizzata. Nessuna simulazione viene eseguita per queste arene multi-giocatore più vecchie e senza eroi"
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
clojure_blurb: "Un Lisp moderno."
lua_blurb: "Linguaggio per la programmazione di giochi."
io_blurb: "Semplice ma poco amichevole."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Stato"
hero_type: "Tipo"
weapons: "Armi"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# length: "Length:"
title: "Titolo" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Descrizione" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arcimago"
diff --git a/app/locale/ja.coffee b/app/locale/ja.coffee
index afc16ac27..07180d596 100644
--- a/app/locale/ja.coffee
+++ b/app/locale/ja.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
blog: "ブログ"
forum: "掲示板"
account: "アカウント"
+# my_account: "My Account"
profile: "プロフィール"
stats: "ステータス"
code: "コード"
@@ -188,23 +187,23 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
campaign_old_multiplayer: "(非推奨)旧マルチプレイ・アリーナ"
campaign_old_multiplayer_description: "より文化的だった時代の遺跡。 シュミレーションは古いため実行されなく, ヒーローもいないマルチプレイ・アリーナです。"
- code:
- if: "if" # Keywords
- else: "else"
- elif: "elif"
- while: "while"
- loop: "loop"
- for: "for"
- break: "break"
- continue: "continue"
- then: "then"
- do: "do"
- end: "end"
- function: "function"
- def: "def"
- self: "self"
- hero: "hero"
- this: "this"
+# code:
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
+# else: "else"
+# elif: "elif"
+# while: "while"
+# loop: "loop"
+# for: "for"
+# break: "break"
+# continue: "continue"
+# then: "then"
+# do: "do"
+# end: "end"
+# function: "function"
+# def: "def"
+# self: "self"
+# hero: "hero"
+# this: "this"
share_progress_modal:
blurb: "あなたは進歩している! CodeCombatでどんなに学んだかについて、誰かに伝えてください。"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
clojure_blurb: "現代の Lisp。"
lua_blurb: "ゲーム専用のスクリプト言語。"
io_blurb: "シンプルだがあいまい。"
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "ステータス"
hero_type: "タイプ"
weapons: "武器"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
main_description: "CodeCombatでの私たちの仕事はあなたが笑顔でプレイするのを確かめることです。"
mission_link: "ミッション"
team_link: "チーム"
- community_link: "コミュニティ"
story_link: "ストーリー"
- careers_link: "経歴"
press_link: "記事"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "アークメイジ"
diff --git a/app/locale/ko.coffee b/app/locale/ko.coffee
index b0dedc1fd..e59900122 100644
--- a/app/locale/ko.coffee
+++ b/app/locale/ko.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
blog: "블로그"
forum: "포럼"
account: "계정"
+# my_account: "My Account"
profile: "프로필"
stats: "스탯"
code: "코드"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
campaign_old_multiplayer_description: "더 문명화 된 시대의 유물. 어떤 시뮬레이션은 이러한 이전, 영웅없는 멀티 경기장에 대해 실행되지 않습니다."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
clojure_blurb: "현대적인 Lisp."
lua_blurb: "게임 스크립팅 언어"
io_blurb: "간단하지만 아직 잘 알려지지 않은 언어."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "상태"
hero_type: "직업"
weapons: "무기"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "대마법사"
diff --git a/app/locale/lt.coffee b/app/locale/lt.coffee
index 91dac7f06..cbdbfbb37 100644
--- a/app/locale/lt.coffee
+++ b/app/locale/lt.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
blog: "Blog'as"
forum: "Forumas"
account: "Paskyra"
+# my_account: "My Account"
profile: "Profilis"
stats: "Statistika"
code: "Kodas"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
campaign_old_multiplayer_description: "Civilizuoto amžiaus reliktai. Šios senos, be herojų arenos nesimuliuojamos."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
clojure_blurb: "Šiolaikinis Lisp."
lua_blurb: "Žaidimų skriptų kalba."
io_blurb: "Paprasta bet paini."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Būsena"
hero_type: "Klasė"
weapons: "Ginklai"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arkimagas"
diff --git a/app/locale/mk-MK.coffee b/app/locale/mk-MK.coffee
index 31af92709..018de3551 100644
--- a/app/locale/mk-MK.coffee
+++ b/app/locale/mk-MK.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
blog: "Блог"
forum: "Форум"
account: "Сметка"
+# my_account: "My Account"
profile: "Профил"
stats: "Статистики"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
clojure_blurb: "Модерен Lisp."
lua_blurb: "Јазик за скриптирање на игри."
io_blurb: "Едноставен, но не така очигледен."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Статус"
# hero_type: "Type"
weapons: "Оружја"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Македонски", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/ms.coffee b/app/locale/ms.coffee
index c35923007..d1d2e310f 100644
--- a/app/locale/ms.coffee
+++ b/app/locale/ms.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/my.coffee b/app/locale/my.coffee
index 0058cd365..f1758a55e 100644
--- a/app/locale/my.coffee
+++ b/app/locale/my.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "မြန်မာစကား", englishDes
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/nb.coffee b/app/locale/nb.coffee
index 9f8669a38..3e570af05 100644
--- a/app/locale/nb.coffee
+++ b/app/locale/nb.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
blog: "Blogg"
forum: "Forum"
account: "Konto"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistikk"
code: "Kode"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
clojure_blurb: "En moderne Lisp."
lua_blurb: "Et skriptspråk for spill."
io_blurb: "Enkelt, men obskurt."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
# hero_type: "Type"
weapons: "Våpen"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Erketrollmann"
diff --git a/app/locale/nl-BE.coffee b/app/locale/nl-BE.coffee
index 98bc19a7f..eed07e1c3 100644
--- a/app/locale/nl-BE.coffee
+++ b/app/locale/nl-BE.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
blog: "Blog"
forum: "Forum"
account: "Lidmaatschap"
+# my_account: "My Account"
profile: "Profiel"
stats: "Statistieken"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
campaign_old_multiplayer_description: "Overblijfselen van een meer geciviliseerde tijd. Er zijn geen simulaties voor deze oudere, heldenloze multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
clojure_blurb: "Lisp, maar modern."
lua_blurb: "Game scripting taal."
io_blurb: "Simpel maar obscuur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Type"
weapons: "Wapens"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
length: "Lengte:"
title: "Titel" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "beschrijving" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Tovenaar"
diff --git a/app/locale/nl-NL.coffee b/app/locale/nl-NL.coffee
index 006556b9f..e36659aef 100644
--- a/app/locale/nl-NL.coffee
+++ b/app/locale/nl-NL.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
create_a_class: "Maak een klas aan"
setup_a_class: "Maak een klas aan"
have_an_account: "Heb je al een account?" # {change}
- log_in: "Log In"
logged_in_as: "Je bent ingelogd als"
view_my_classes: "Bekijk mijn klassen"
computer_science: "Informatica lessen voor alle leeftijden"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
educator_wiki: "Leraren wiki"
view_profile: "Mijn Profiel"
view_progress: "Bekijk voortgang"
- login_switch: "Heb je een account?"
check_out_wiki: "Bekijk onze nieuwe leraren Wiki"
want_coco: "Wil je CodeCombat op jouw school?"
form_select_role: "Selecteer je rol"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
blog: "Blog"
forum: "Forum"
account: "Lidmaatschap"
+# my_account: "My Account"
profile: "Profiel"
stats: "Statistieken"
code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
campaign_old_multiplayer_description: "Antieke overblijvselen van een beschaafder tijdperk. Deze oudere held-loze multiplayer arenas worden niet gesimuleert."
code:
- if: "als" # Keywords
+ if: "als" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
else: "anders"
elif: "anders als"
while: "wanneer"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
clojure_blurb: "Lisp, maar modern."
lua_blurb: "Game scripting taal."
io_blurb: "Simpel maar obscuur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Soort"
weapons: "Wapens"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
main_description: "Bij CodeCombat, is het ons doel om te zorgen dat je dat doet met een glimlach op je gezicht."
mission_link: "Missie"
team_link: "Team"
- community_link: "Gemeenschap"
story_link: "Verhaal"
- careers_link: "Carrières"
press_link: "Pers"
mission_title: "Onze missie: maak programmeren toegankelijk voor elke student op aarde."
mission_description_1: "Programmeren is magie. Het is het vermogen om dingen te maken vanuit pure fantasie. We zijn CodeCombat begonnen om leerlingen het gevoel the geven van een toverachtige kracht aan hun vingertoppen door het gebruik van getypte code." # {change}
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
length: "Lengte:"
title: "Titel" # Flat style redesign
subtitle: "Bekijk cursus richtlijnen, oplossingen, en levels"
+# changelog: "View latest changes to course levels."
select_language: "Selecteer taal"
select_level: "Selecteer level"
play_level: "Speel Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
print_guide: "Print Handleiding (PDF)"
view_guide_online: "Bekijk Handleiding Online (PDF)"
last_updated: "Laatst ge-update:"
- grants_lifetime_access: "Verschaft levenslange toegang tot alle cursusmodules." # New enrollment modal
+ grants_lifetime_access: "Verschaft levenslange toegang tot alle cursusmodules." # {change}
enrollment_credits_available: "Beschikbaar inschrijf-krediet:"
description: "beschrijving" # ClassroomSettingsModal
language_select: "Selecteer een taal"
@@ -1259,7 +1258,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
avg_student_exp_select: "Selecteer de beste optie"
avg_student_exp_none: "Geen ervaring - geen of weinig ervaring"
avg_student_exp_beginner: "Beginner - een beetje blootstelling aan code of ervaring met 'block-based' programmeren"
- avg_student_exp_intermediate:"Redelijk Ervaren - enige ervaring met getypte code"
+ avg_student_exp_intermediate: "Redelijk Ervaren - enige ervaring met getypte code"
avg_student_exp_advanced: "Ervaren - behoorlijke ervaring met getypte code"
avg_student_exp_varied: "Verschilt enorm per leerling"
student_age_range_label: "Leeftijdscategorie leerlingen"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
total_playtime: "Totale speeltijd"
avg_completed: "Gemiddeld aantaal levels voltooid"
total_completed: "Totaal levels voltooid"
+# created: "Created"
concepts_covered: "Concepten behandeld"
earliest_incomplete: "Vroegste onvoltooide level"
latest_complete: "Laatste voltooide level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
how_to_enroll_blurb_3: "Zodra een leerling is ingeschreven zal deze toegang hebben tot alle inhoud van de cursus."
bulk_pricing_blurb: "Aanschaffen voor meer dan 25 leerlingen? Neem contact met ons op."
total_unenrolled: "Totaal aantal niet ingeschreven"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Tovenaar"
diff --git a/app/locale/nn.coffee b/app/locale/nn.coffee
index f11e43005..6b0f03c18 100644
--- a/app/locale/nn.coffee
+++ b/app/locale/nn.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Norsk Nynorsk", englishDescription: "Norweg
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/pl.coffee b/app/locale/pl.coffee
index d58dc8731..ece6e1bb5 100644
--- a/app/locale/pl.coffee
+++ b/app/locale/pl.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
create_a_class: "Stwórz klasę"
# setup_a_class: "Set Up a Class"
have_an_account: "Posiadasz już konto?" # {change}
-# log_in: "Log In"
logged_in_as: "Jesteś zalogowany jako"
view_my_classes: "Pokaż moje klasy"
computer_science: "Lekcje informatyki dla osób w każdym wieku."
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
blog: "Blog"
forum: "Forum"
account: "Konto"
+# my_account: "My Account"
profile: "Profil"
stats: "Statystyki"
code: "Kod"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
campaign_old_multiplayer_description: "Relikt bardziej cywilizowanej epoki. Nie są już prowadzone żadne symulacje dla tych starych aren."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
clojure_blurb: "Nowoczesny Lisp."
lua_blurb: "Język skryptowy gier."
io_blurb: "Prosty lecz nieznany."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Typ"
weapons: "Bronie"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
main_description: "Naszym zadaniem jest dopilnowanie, żebyś robił to z uśmiechem na twarzy."
mission_link: "Misja"
team_link: "Zespół"
- community_link: "Społeczność"
story_link: "Historia"
- careers_link: "Kariera"
press_link: "Prasa"
mission_title: "Nasza misja: każdy na Ziemi powinien mieć dostęp do nauki programowania."
mission_description_1: "Programowanie jest jak magia. To możliwość tworzenia rzeczy na podstawie włąsnych fantazji. Stworzyliśmy CodeCombat, by nasi użytkownicy poczuli czarodziejskie moce podczas pisania prawdziwego, produkcyjnego kodu."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
length: "Długość:"
title: "Tytuł" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Opis" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arcymag"
diff --git a/app/locale/pt-BR.coffee b/app/locale/pt-BR.coffee
index 66c181526..bae08a5ab 100644
--- a/app/locale/pt-BR.coffee
+++ b/app/locale/pt-BR.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
have_an_account: "Tem uma conta?"
- log_in: "Entrar"
logged_in_as: "Você está logado como"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
blog: "Blog"
forum: "Fórum"
account: "Conta"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estatísticas"
code: "Código"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
campaign_old_multiplayer_description: "Reliquias de uma era mais civilizada.Nenhuma simulação roda nessa antiguidade ,arenas multijogador sem heróis."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
clojure_blurb: "Um Lisp moderno."
lua_blurb: "Linguagem de script para jogos."
io_blurb: "Simples mas obscura."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Tipo"
weapons: "Armas"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
main_description: "No CodeCombat, nosso trabalho é assegurar que você está fazendo isso com um sorriso no rosto."
mission_link: "Missão"
team_link: "Time"
- community_link: "Comunidade"
story_link: "História"
- careers_link: "Carreiras"
press_link: "Pressione"
mission_title: "Nossa missão: fazer programação acessível para todos os estudantes."
mission_description_1: "Programação é mágica. É a habilidade de criar coisas apartir da pura imaginação. Criamos o CodeCombat para dar aos alunos a sensação de poder de um mago na ponta de seus dedos enquanto digita códigos."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
length: "Comprimento:"
title: "Título" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Descrição" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arquimago"
diff --git a/app/locale/pt-PT.coffee b/app/locale/pt-PT.coffee
index 3a358f6d9..69599648c 100644
--- a/app/locale/pt-PT.coffee
+++ b/app/locale/pt-PT.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
have_an_account: "Tens uma conta?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
blog: "Blog"
forum: "Fórum"
account: "Conta"
+# my_account: "My Account"
profile: "Perfil"
stats: "Estatísticas"
code: "Código"
@@ -189,22 +188,22 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
campaign_old_multiplayer_description: "Relíquias de uma era mais civilizada. Não há simulações em curso para estas arenas multijogador, mais antigas e sem heróis."
code:
- if: "if" # Keywords
- else: "else"
- elif: "elif"
- while: "while"
- loop: "loop"
- for: "for"
- break: "break"
- continue: "continue"
- then: "then"
- do: "do"
- end: "end"
- function: "function"
+ if: "se" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
+ else: "senão"
+ elif: "senão se"
+ while: "enquanto"
+ loop: "circular"
+ for: "para"
+ break: "parar"
+ continue: "continuar"
+ then: "então"
+ do: "fazer"
+ end: "fim"
+ function: "função"
def: "def"
- self: "self"
- hero: "hero"
- this: "this"
+ self: "próprio"
+ hero: "herói"
+ this: "isto"
share_progress_modal:
blurb: "Estás a fazer grandes progressos! Conta ao teu educador o quanto aprendeste com o CodeCombat."
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
clojure_blurb: "Um Lisp moderno."
lua_blurb: "Linguagem para scripts de jogos."
io_blurb: "Simples mas obscuro."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Estado"
hero_type: "Tipo"
weapons: "Armas"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
main_description: "No CodeCombat, o nosso trabalho é certificarmo-nos de que estás a fazer isso com um sorriso na cara."
mission_link: "Missão"
team_link: "Equipa"
-# community_link: "Community"
story_link: "História"
-# careers_link: "Careers"
press_link: "Imprensa"
mission_title: "A nossa missão: tornar a programação acessível a todos os estudantes da Terra."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# length: "Length:"
title: "Título" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Descrição" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arcomago"
diff --git a/app/locale/ro.coffee b/app/locale/ro.coffee
index dafc491e0..6d33596ea 100644
--- a/app/locale/ro.coffee
+++ b/app/locale/ro.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
blog: "Blog"
forum: "Forum"
account: "Cont"
+# my_account: "My Account"
profile: "Profil"
stats: "Statistică"
code: "Cod"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
clojure_blurb: "Un Lisp modern."
lua_blurb: "Limbaj de scripting pentru jocuri."
io_blurb: "Simplu dar obscur."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Stare"
hero_type: "Tip"
weapons: "Armament"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Archmage"
diff --git a/app/locale/ru.coffee b/app/locale/ru.coffee
index 2a9f7cbdf..b6003c456 100644
--- a/app/locale/ru.coffee
+++ b/app/locale/ru.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
create_a_class: "Создать класс"
setup_a_class: "Настройка класса"
have_an_account: "Уже есть аккаунт?"
- log_in: "Войти"
logged_in_as: "Вы вошли как"
view_my_classes: "Посмотреть мои классы"
computer_science: "Курсы информатики для всех возрастов"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
educator_wiki: "wiki педагога"
view_profile: "Посмотреть Мой профиль"
view_progress: "Посмотреть прогресс"
- login_switch: "Уже есть аккаунт?"
check_out_wiki: "Посетите наш новый Wiki педагога"
want_coco: "Хотите CodeCombat в вашей школе?"
form_select_role: "Выберите главную роль"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
blog: "Блог"
forum: "Форум"
account: "Аккаунт"
+# my_account: "My Account"
profile: "Профиль"
stats: "Характеристики"
code: "Код"
@@ -188,23 +187,23 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
campaign_old_multiplayer: "(Устаревшее) Старые многопользовательские арены"
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
- code:
- if: "if" # Keywords
- else: "else"
- elif: "elif"
- while: "while"
- loop: "loop"
- for: "for"
- break: "break"
- continue: "continue"
- then: "then"
- do: "do"
- end: "end"
- function: "function"
- def: "def"
- self: "self"
- hero: "hero"
- this: "this"
+# code:
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
+# else: "else"
+# elif: "elif"
+# while: "while"
+# loop: "loop"
+# for: "for"
+# break: "break"
+# continue: "continue"
+# then: "then"
+# do: "do"
+# end: "end"
+# function: "function"
+# def: "def"
+# self: "self"
+# hero: "hero"
+# this: "this"
share_progress_modal:
blurb: "Вы отлично продвигаетесь! Расскажите своим родителям, как много вы уже выучили с CodeCombat."
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
clojure_blurb: "Современный Lisp."
lua_blurb: "Скриптовый язык для игр."
io_blurb: "Простой, но непонятный."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Статус"
hero_type: "Тип"
weapons: "Оружие"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
main_description: "Наша задача быть уверенными, что вы делаете это с улыбкой на лице."
mission_link: "Миссия"
team_link: "Команда"
- community_link: "Сообщество"
story_link: "История"
- careers_link: "Карьера"
press_link: "Нажать"
mission_title: "Наша задача: сделать доступным программирование для каждого учащегося на земле."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
length: "Длительность:"
title: "Тема" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Описание" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Архимаг"
diff --git a/app/locale/sk.coffee b/app/locale/sk.coffee
index e0724b0ed..1c0c3f11b 100644
--- a/app/locale/sk.coffee
+++ b/app/locale/sk.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
create_a_class: "Vytvor triedu"
setup_a_class: "Nastavenia triedy"
have_an_account: "Máš účet?"
- log_in: "Prihlásenie"
logged_in_as: "Si prihlásený ako"
view_my_classes: "Prehľa mojích tried"
computer_science: "Kurz programovania pre každý vek"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
blog: "Blog"
forum: "Fórum"
account: "Účet"
+# my_account: "My Account"
profile: "Profil"
stats: "Štatistiky"
code: "Kód"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
campaign_old_multiplayer_description: "Pozostatky starej kóvacej civilizácie. Nie je možná simulácia pre staré arény bez hrdinov. "
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
clojure_blurb: "Moderný Lisp"
lua_blurb: "Jazyk na skriptovanie hier."
io_blurb: "Jednoduchý ale nejasný."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Stav"
hero_type: "Typ"
weapons: "Zbrane"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Arcimág"
diff --git a/app/locale/sl.coffee b/app/locale/sl.coffee
index 4b945046a..701420245 100644
--- a/app/locale/sl.coffee
+++ b/app/locale/sl.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/sr.coffee b/app/locale/sr.coffee
index d6c1aa24a..d2aff6996 100644
--- a/app/locale/sr.coffee
+++ b/app/locale/sr.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
create_a_class: "Направи разред"
setup_a_class: "Подеси разред"
have_an_account: "Имаш налог?"
- log_in: "Улогуј се"
logged_in_as: "Тренутно си улогован као"
view_my_classes: "Види моје разреде"
computer_science: "Курсеви из компјутерских наука за свакога"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
educator_wiki: "Едукатор wiki"
view_profile: "Види мој профил"
view_progress: "Види напредак"
- login_switch: "Имаш налог?"
check_out_wiki: "Погледај нашу нову Wiki за едукаторе"
want_coco: "Желиш CodeCombat у својој школи?"
form_select_role: "Изабери примарну улогу"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
blog: "Блог"
forum: "Форум"
account: "Налог"
+# my_account: "My Account"
profile: "Профил"
stats: "Статистика"
code: "Код"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
campaign_old_multiplayer_description: "Остаци цивилизованијег времена. Симулације се не покрећу за ове старије мултиплејер арене без хероја."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Статус"
hero_type: "Врста"
weapons: "Оружја"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/sv.coffee b/app/locale/sv.coffee
index 1b3fc631c..d9e557fe4 100644
--- a/app/locale/sv.coffee
+++ b/app/locale/sv.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
blog: "Blogg"
forum: "Forum"
account: "Konto"
+# my_account: "My Account"
profile: "Profil"
stats: "Stats"
code: "Kod"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
clojure_blurb: "Ett modernt Lisp."
lua_blurb: "Språk för spelskript."
io_blurb: "Enkelt men obskyrt."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Status"
hero_type: "Typ"
weapons: "Vapen"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Ärkemagiker"
diff --git a/app/locale/th.coffee b/app/locale/th.coffee
index 7598a6412..f99b4cfbf 100644
--- a/app/locale/th.coffee
+++ b/app/locale/th.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
blog: "บล็อก"
forum: "กระดานสนทนา"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# clojure_blurb: "A modern Lisp."
lua_blurb: "ภาษาเขียนเกม"
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
weapons: "อาวุธ"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/tr.coffee b/app/locale/tr.coffee
index fed6b4436..8706c7a22 100644
--- a/app/locale/tr.coffee
+++ b/app/locale/tr.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
blog: "Blog"
forum: "Forum"
account: "Hesap"
+# my_account: "My Account"
profile: "Profil"
stats: "İstatistikler"
code: "Kod"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
clojure_blurb: "Modern bir Lisp."
lua_blurb: "Oyun betik dili."
io_blurb: "Basit fakat anlaşılması güç."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Durum"
# hero_type: "Type"
weapons: "Silahlar"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Büyük Büyücü"
diff --git a/app/locale/uk.coffee b/app/locale/uk.coffee
index 095e4326c..dc0ad1843 100644
--- a/app/locale/uk.coffee
+++ b/app/locale/uk.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Українська", englishDescription:
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Українська", englishDescription:
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
blog: "Блоґ"
forum: "Форум"
account: "Акаунт"
+# my_account: "My Account"
profile: "Профіль"
stats: "Статистика"
code: "Код"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
clojure_blurb: "Сучасний Lisp."
lua_blurb: "Мова ігрових сценаріїв."
io_blurb: "Проста, але дивна."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Статус"
hero_type: "Тип"
weapons: "Зброя"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
main_description: "Тут, на CodeCombat, наше завдання - переконатися, що ви це робитимете з усмішкою на обличчі."
# mission_link: "Mission"
team_link: "Команда"
- community_link: "Спільнота"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
# length: "Length:"
title: "Тема" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
print_guide: "Надрукувати Настанову (PDF)"
view_guide_online: "Переглянути Настанову в Режимі Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Опис" # ClassroomSettingsModal
language_select: "Оберіть Мову"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Українська", englishDescription:
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Архімаг"
diff --git a/app/locale/ur.coffee b/app/locale/ur.coffee
index 317490a24..f5d66504b 100644
--- a/app/locale/ur.coffee
+++ b/app/locale/ur.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/uz.coffee b/app/locale/uz.coffee
index 6d0085239..faf646679 100644
--- a/app/locale/uz.coffee
+++ b/app/locale/uz.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "O'zbekcha", englishDescription: "Uzbek", tr
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/vi.coffee b/app/locale/vi.coffee
index 7a7b3861b..a352329cc 100644
--- a/app/locale/vi.coffee
+++ b/app/locale/vi.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
create_a_class: "Tạo một Lớp học"
setup_a_class: "Xây dựng một Lớp học"
have_an_account: "Đã có tài khoản?"
- log_in: "Đăng Nhập"
logged_in_as: "Bạn đang đăng nhập với tên"
view_my_classes: "Xem các lớp học của tôi"
computer_science: "Khóa học công nghệ thông tin cho mọi lứa tuổi"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
educator_wiki: "Wiki cho Giáo viên"
view_profile: "Xem hồ sơ của tôi"
view_progress: "Xem tiến trình"
- login_switch: "Đã có tài khoản?"
check_out_wiki: "Hãy đọc Wiki dành cho Giáo viên"
want_coco: "Muốn đưa CodeCombat vào giảng dạy tại trường học của bạn?"
form_select_role: "Chọn vai trò chính"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
blog: "Blog"
forum: "Diễn đàn"
account: "Tài khoản"
+ my_account: "Quản lý tài khoản"
profile: "Cá nhân"
stats: "Chỉ số"
code: "Code"
@@ -118,8 +117,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
about: "Chúng tôi"
contact: "Liên hệ"
twitter_follow: "Theo dõi"
- students: "Dành cho học viên"
- teachers: "Dành cho giáo viên"
+ students: "Khu vực học viên"
+ teachers: "Khu vực giáo viên"
careers: "Cơ hội việc làm"
facebook: "Facebook"
twitter: "Twitter"
@@ -128,7 +127,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
learn_to_code: "Học Code!"
# toggle_nav: "Toggle navigation"
jobs: "Việc làm"
- schools: "Dành cho Trường Học"
+ schools: "Trường Học"
educator_wiki: "Wiki cho Giáo Viên"
get_involved: "Tham Gia"
open_source: "Mã nguồn mở (GitHub)"
@@ -156,7 +155,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
play_as: "Chơi là" # Ladder page
compete: "Hoàn thành!" # Course details page
spectate: "Quan sát" # Ladder page
- players: "Những người chơi" # Hover over a level on /play
+ players: "người chơi" # Hover over a level on /play
hours_played: "Thời gian chơi" # Hover over a level on /play
items: "Trang bị" # Tooltip on item shop button from /play
unlock: "Mua" # For purchasing items and heroes
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
code:
- if: "if" # Keywords
+ if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
else: "else"
elif: "elif"
while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
clojure_blurb: "Lisp thời đại mới."
lua_blurb: "Ngôn ngữ được ưa chuông để làm game."
io_blurb: "Đơn giản nhưng ít người biết đến."
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "Tình trạng"
hero_type: "Loại"
weapons: "Vũ khí"
@@ -702,13 +702,11 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
main_description: "Ở CodeCombat, việc của chúng tôi là truyền cảm hứng cho bạn."
mission_link: "Sứ mệnh"
team_link: "Đội ngũ"
- community_link: "Cộng đồng"
story_link: "Chúng tôi"
- careers_link: "Việc làm"
press_link: "Liên hệ"
mission_title: "Sứ mệnh của chúng tôi: đưa lập trình đến với mọi người trên Trái Đát này."
- mission_description_1: "Lập trình thật kì diệu. Bạn có thể sáng tạo ra một thứ gì đó từ trí tưởng tượng. Chúng tôi bắt đầu CodeCombat để cho học viên những trải nghiệm nhiệm màu khi viết code."
- mission_description_2: "Thực tế thì, điều này cũng giúp cho bạn học nhanh hơn. Nhanh hơn RẤT NHIỀU. Bạn được thực hành thay vì chỉ đọc lý thuyết. Chúng tôi muốn đưa môi trường thực hành này đến với trường học và đến tay mọi học viên, bởi vì mọi người đều cần có cơ hội biết đến sự nhiệm màu của lập trình."
+ mission_description_1: "Lập trình thật kì diệu. Bạn có thể tạo ra một thứ gì đó chỉ từ trí tưởng tượng. Chúng tôi bắt đầu CodeCombat để đem tới cho học viên những trải nghiệm nhiệm màu khi viết code thực tế."
+ mission_description_2: "Trên thực tế, việc này giúp cho bạn học nhanh hơn. Nhanh hơn RẤT NHIỀU. Bạn được thực hành thay vì chỉ đọc lý thuyết. Chúng tôi muốn đưa môi trường thực hành này đến với trường học và đến tay mọi học sinh, bởi vì mọi người đều cần có cơ hội biết đến sự nhiệm màu của lập trình."
team_title: "Đội ngũ của CodeCombat"
# team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team."
nick_title: "Đồng Sáng Lập, CEO" # {change}
@@ -722,11 +720,11 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
maka_blurb: "Người kể truyện"
rob_title: "Kĩ Sư Phần Mềm"
rob_blurb: "Code các thứ"
- josh_c_title: "Game Designer"
- josh_c_blurb: "Thiết kế game"
+ josh_c_title: "Thiết Kế Game"
+ josh_c_blurb: "Thiết kế trò chơi"
robin_title: "Thiết Kế UX & Nghiên Cứu"
# robin_blurb: "Scaffolding"
- josh_title: "Game Designer"
+ josh_title: "Thiết Kế Game"
josh_blurb: "Floor Is Lava"
phoenix_title: "Kĩ Sư Phần Mềm"
nolan_title: "Giám Đốc Khu Vực"
@@ -736,13 +734,13 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
jose_title: "Âm Nhạc"
jose_blurb: "Taking Off"
community_title: "...và cộng đồng mã nguồn mở của chúng tôi"
-# community_subtitle: "Over 450 contributors have helped build CodeCombat, with more joining every week!"
-# community_description_1: "CodeCombat is a community project, with hundreds of players volunteering to create levels, contribute to our code to add features, fix bugs, playtest, and even translate the game into 50 languages so far. Employees, contributors and the site gain by sharing ideas and pooling effort, as does the open source community in general. The site is built on numerous open source projects, and we are open sourced to give back to the community and provide code-curious players a familiar project to explore and experiment with. Anyone can join the CodeCombat community! Check out our"
-# community_description_link: "contribute page"
-# community_description_2: "for more info."
-# number_contributors: "Over 450 contributors have lent their support and time to this project."
+ community_subtitle: "Trên 450 người đã tham gia đóng góp cho CodeCombat, và con số này tiếp tục tăng lên hàng tuần!"
+ community_description_1: "CodeCombat là một dự án cộng đồng, với hàng trăm tình nguyện viên tham gia tạo các màn chơi, viết code để thêm tính năng mới, sửa lỗi, chơi thử, và thậm chí phiên dịch trò chơi sang 50 thứ tiếng khác nhau. Employees, contributors and the site gain by sharing ideas and pooling effort, as does the open source community in general. The site is built on numerous open source projects, and we are open sourced to give back to the community and provide code-curious players a familiar project to explore and experiment with. Bất cứ ai cũng có thể tham gia cộng đồng CodeCombat! Hãy ghé qua"
+ community_description_link: "trang dành cho người đóng góp"
+ community_description_2: "để biết thêm chi tiết."
+ number_contributors: "Hơn 450 người đã bỏ công sức và thời gian để đóng góp cho dự án này."
story_title: "Hãy nghe câu chuyện của chúng tôi"
- story_subtitle: "Từ năm 2013 cho đến nay, CodeCombat khởi nguồn chỉ là những phác thảo sơ khai đã được hiện thực hóa để trở thành một tựa game đầy lôi cuốn."
+ story_subtitle: "Kể từ năm 2013 đến nay, CodeCombat khởi nguồn chỉ là những phác thảo sơ khai đã được hiện thực hóa để trở thành một tựa game đầy lôi cuốn."
story_statistic_1a: "5,000,000+"
story_statistic_1b: "người chơi"
story_statistic_1c: "đã bắt đầu đặt chân vào thế giới lập trình cùng với CodeCombat"
@@ -750,13 +748,13 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
story_statistic_2b: "200+ quốc gia"
story_statistic_3a: "Cùng với nhau, họ đã viết"
story_statistic_3b: "hơn 1 tỷ dòng code"
- story_statistic_3c: "với rất nhiều ngôn ngữ lập trình khác nhau"
-# story_long_way_1: "Though we've come a long way..."
-# story_sketch_caption: "Nick's very first sketch depicting a programming game in action."
-# story_long_way_2: "we still have much to do before we complete our quest, so..."
-# jobs_title: "Come work with us and help write CodeCombat history!"
-# jobs_subtitle: "Don't see a good fit but interested in keeping in touch? See our \"Create Your Own\" listing."
-# jobs_benefits: "Employee Benefits"
+ story_statistic_3c: "bằng rất nhiều ngôn ngữ lập trình khác nhau"
+ story_long_way_1: "Mặc dù chúng tôi đã trải qua rất nhiều..."
+ story_sketch_caption: "Bản phác thảo đầu tiên của Nick mô tả một tựa game lập trình."
+ story_long_way_2: "chúng tôi vẫn còn rất nhiều điều phải làm để chinh phục sứ mệnh, vì thế..."
+ jobs_title: "Hãy tham gia cùng chúng tôi và viết nên lịch sử CodeCombat!"
+ jobs_subtitle: "Bạn muốn ứng tuyển nhưng không tìm thấy vị trí phù hợp? Hãy tham khảo mục \"Tự Ứng Tuyển\"."
+ jobs_benefits: "Quyền Lợi Nhân Viên"
# jobs_benefit_1: "Competitive salary and options"
# jobs_benefit_2: "15 day minimum vacation policy, excluding company holidays"
# jobs_benefit_3: "Flex time and flexible work-from-home"
@@ -768,23 +766,23 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# jobs_benefit_10: "Maternity leave: 10 weeks paid, next 6 @ 55% salary"
# jobs_benefit_11: "Paternity leave: 10 weeks paid"
learn_more: "Tìm hiểu thêm"
-# jobs_custom_title: "Create Your Own"
-# jobs_custom_description: "Are you passionate about CodeCombat but don't see a job listed that matches your qualifications? Write us and show how you think you can contribute to our team. We'd love to hear from you!"
-# jobs_custom_contact_1: "Send us a note at"
-# jobs_custom_contact_2: "introducing yourself and we might get in touch in the future!"
-# contact_title: "Press & Contact"
-# contact_subtitle: "Need more information? Get in touch with us at"
-# screenshots_title: "Game Screenshots"
-# screenshots_hint: "(click to view full size)"
-# downloads_title: "Download Assets & Information"
- about_codecombat: "Về CodeCombat"
- logo: "Logo"
+ jobs_custom_title: "Tự Ứng Tuyển"
+ jobs_custom_description: "Bạn hào hứng với CodeCombat nhưng không tìm thấy vị trí phù hợp? Hãy viết thư cho chúng tối và trình bày khả năng đóng góp của bạn cho đội ngũ của chúng tôi. Chúng tôi rất sẵn lòng nhận thông tin từ bạn!"
+ jobs_custom_contact_1: "Nhắn lại cho chúng tôi tại"
+ jobs_custom_contact_2: "và giới thiệu về bản thân bạn để chúng tôi có thể liên hệ lại trong tương lai!"
+ contact_title: "Báo Chí & Liên Hệ"
+ contact_subtitle: "Bạn cần thêm thông tin? Hãy liên lạc với chúng tôi tại"
+ screenshots_title: "Ảnh Chụp Màn Hình Game"
+ screenshots_hint: "(click để xem cỡ lớn)"
+ downloads_title: "Download Tài Liệu & Thông Tin"
+ about_codecombat: "Giới thiệu CodeCombat"
+ logo: "Ảnh logo"
screenshots: "Ảnh chụp màn hình"
-# character_art: "Character Art"
-# download_all: "Download All"
+ character_art: "Ảnh nhân vật"
+ download_all: "Tải Xuống Tất Cả"
previous: "Trước"
next: "Tiếp"
-# location_title: "We're located in downtown SF:"
+ location_title: "Chúng tôi đóng quân tại trung tâm thành phố SF:"
teachers:
who_for_title: "CodeCombat dành cho ai?"
@@ -857,7 +855,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
contact:
contact_us: "Liên hệ CodeCombat"
- welcome: "Rất vui vì được gặp bạn! Hãy điềm vào form dưới đây để gửi mail cho chúng tôi. "
+ welcome: "Chào bạn! Hãy điềm vào form dưới đây để gửi mail cho chúng tôi."
forum_prefix: "Để tìm hiểu thêm thông tin, hãy thử ghé qua "
forum_page: "diễn đàn của chúng tôi"
forum_suffix: "."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# length: "Length:"
title: "Tiêu đề" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Miêu tả" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "Pháp Sư"
@@ -1853,4 +1854,4 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
september: "Tháng Chín"
october: "Tháng Mười"
november: "Tháng Mười Một"
- december: "Tháng Mười Hai"
\ No newline at end of file
+ december: "Tháng Mười Hai"
diff --git a/app/locale/zh-HANS.coffee b/app/locale/zh-HANS.coffee
index b5223f477..788471a73 100644
--- a/app/locale/zh-HANS.coffee
+++ b/app/locale/zh-HANS.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
create_a_class: "创建班级"
setup_a_class: "配置班级"
have_an_account: "已有帐号?" # {change}
- log_in: "登陆"
logged_in_as: "您现在的登录身份:"
view_my_classes: "查看我的班级"
computer_science: "适合全年龄段的计算机科学课程"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
blog: "博客"
forum: "论坛"
account: "账号"
+# my_account: "My Account"
profile: "资料"
stats: "成就"
code: "代码"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
campaign_old_multiplayer_description: "多个文明时代的遗迹。但已经不再模拟运行这些陈旧、英雄芜绝的多人竞技场。"
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
clojure_blurb: "一种现代的列表处理语言。"
lua_blurb: "一种游戏脚本语言。"
io_blurb: "简单而晦涩。"
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "状态"
hero_type: "种类"
weapons: "武器"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
main_description: "在CodeCombat里,我们的职责就是为了让你面带微笑完成这项任务。"
mission_link: "任务"
team_link: "团队"
- community_link: "社区"
story_link: "历程"
- careers_link: "招聘"
press_link: "联系方式"
mission_title: "我们的任务:让世上每个学生都有机会接触编程。"
mission_description_1: "编程是一种魔法。这是一种从想象中创造万物的能力。我们开始了 CodeCombat 这个项目,是为了让学习者通过编写代码感受到他们感受到指尖上的魔力。"
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
length: "长度:"
title: "标题" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "描述" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
total_playtime: "总时长"
avg_completed: "平均完成关卡数"
total_completed: "完成总关卡数"
+# created: "Created"
concepts_covered: "覆盖语法概念"
earliest_incomplete: "最近未完成关卡"
latest_complete: "最近通关关卡"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
how_to_enroll_blurb_3: "当学生被注册之后,他们就能访问所有的课程关卡了。" # {change}
bulk_pricing_blurb: "如果需要购买超过15学生名额,请联系我们获取批量采购折扣!" # {change}
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "大法师"
diff --git a/app/locale/zh-HANT.coffee b/app/locale/zh-HANT.coffee
index 01f66e64c..6062f150f 100644
--- a/app/locale/zh-HANT.coffee
+++ b/app/locale/zh-HANT.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
blog: "官方部落格"
forum: "論壇"
account: "帳號"
+# my_account: "My Account"
profile: "帳號資料"
stats: "記錄"
code: "程式碼"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
campaign_old_multiplayer_description: "多個文明時代的遺跡。已沒有模擬運行這些陳舊、英雄蕪絕的多人競技場。"
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
clojure_blurb: "Lisp 進化版。"
lua_blurb: "許多遊戲引擎支援的程式語言。"
io_blurb: "簡單但不出名。"
+# java_blurb: "(Subscriber Only) Android and enterprise."
status: "狀態"
hero_type: "種類"
weapons: "武器"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# length: "Length:"
title: "標題" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "描述" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "大法師"
diff --git a/app/locale/zh-WUU-HANS.coffee b/app/locale/zh-WUU-HANS.coffee
index 366fa0f7a..51622d4ca 100644
--- a/app/locale/zh-WUU-HANS.coffee
+++ b/app/locale/zh-WUU-HANS.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# blog: "Blog"
# forum: "Forum"
# account: "Account"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
# classes:
# archmage_title: "Archmage"
diff --git a/app/locale/zh-WUU-HANT.coffee b/app/locale/zh-WUU-HANT.coffee
index 446f1f3f2..929a31700 100644
--- a/app/locale/zh-WUU-HANT.coffee
+++ b/app/locale/zh-WUU-HANT.coffee
@@ -68,7 +68,6 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# create_a_class: "Create a Class"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
-# log_in: "Log In"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
@@ -95,7 +94,6 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# educator_wiki: "Educator wiki"
# view_profile: "View My Profile"
# view_progress: "View Progress"
-# login_switch: "Have an account?"
# check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
@@ -109,6 +107,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
blog: "部落格"
forum: "論壇"
account: "賬號"
+# my_account: "My Account"
# profile: "Profile"
# stats: "Stats"
# code: "Code"
@@ -189,7 +188,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
# code:
-# if: "if" # Keywords
+# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "elif"
# while: "while"
@@ -622,6 +621,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# clojure_blurb: "A modern Lisp."
# lua_blurb: "Game scripting language."
# io_blurb: "Simple but obscure."
+# java_blurb: "(Subscriber Only) Android and enterprise."
# status: "Status"
# hero_type: "Type"
# weapons: "Weapons"
@@ -702,9 +702,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
-# community_link: "Community"
# story_link: "Story"
-# careers_link: "Careers"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "Programming is magic. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using typed code."
@@ -1240,6 +1238,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# length: "Length:"
# title: "Courses" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
+# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
@@ -1247,7 +1246,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
-# grants_lifetime_access: "Grants lifetime access to all Courses." # New enrollment modal
+# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
# description: "Description" # ClassroomSettingsModal
# language_select: "Select a language"
@@ -1300,6 +1299,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# total_playtime: "Total play time"
# avg_completed: "Average levels completed"
# total_completed: "Total levels completed"
+# created: "Created"
# concepts_covered: "Concepts covered"
# earliest_incomplete: "Earliest incomplete level"
# latest_complete: "Latest completed level"
@@ -1347,6 +1347,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# how_to_enroll_blurb_3: "Once a student is enrolled, they will have access to all of the course content."
# bulk_pricing_blurb: "Purchasing for more than 25 students? Contact us to discuss next steps."
# total_unenrolled: "Total unenrolled"
+# export_student_progress: "Export Student Progress (CSV)"
classes:
archmage_title: "大法師"
diff --git a/app/models/CourseInstance.coffee b/app/models/CourseInstance.coffee
index 74fb83b86..f072221d8 100644
--- a/app/models/CourseInstance.coffee
+++ b/app/models/CourseInstance.coffee
@@ -21,7 +21,7 @@ module.exports = class CourseInstance extends CocoModel
data: { userID: userID }
}
_.extend options, opts
- @fetch(options)
+ @fetch options
if userID is me.id
unless me.get('courseInstances')
me.set('courseInstances', [])
@@ -32,6 +32,8 @@ module.exports = class CourseInstance extends CocoModel
method: 'POST'
url: _.result(@, 'url') + '/members'
data: { userIDs }
+ success: =>
+ @trigger 'add-members', { userIDs }
}
_.extend options, opts
@fetch(options)
diff --git a/app/models/State.coffee b/app/models/State.coffee
new file mode 100644
index 000000000..c63a7d518
--- /dev/null
+++ b/app/models/State.coffee
@@ -0,0 +1,5 @@
+CocoModel = require './CocoModel'
+schema = require 'schemas/models/poll.schema'
+
+module.exports = class State extends CocoModel
+ @className: 'State'
diff --git a/app/schemas/models/level_session.coffee b/app/schemas/models/level_session.coffee
index 61bf5c594..c8b63902a 100644
--- a/app/schemas/models/level_session.coffee
+++ b/app/schemas/models/level_session.coffee
@@ -54,6 +54,10 @@ _.extend LevelSessionSchema.properties,
changed: c.date
title: 'Changed'
readOnly: true
+
+ dateFirstCompleted: c.stringDate
+ title: 'Completed'
+ readOnly: true
team: c.shortString()
level: LevelSessionLevelSchema
diff --git a/app/styles/about.sass b/app/styles/about.sass
index d08d2dcbc..16764e8de 100644
--- a/app/styles/about.sass
+++ b/app/styles/about.sass
@@ -1,6 +1,6 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
-@import "app/styles/style-flat"
+@import "app/styles/style-flat-variables"
#about-view
@@ -331,4 +331,4 @@
content: ""
display: block
height: 55px
- margin: -55px 0 0 0
\ No newline at end of file
+ margin: -55px 0 0 0
diff --git a/app/styles/courses/activate-licenses-modal.sass b/app/styles/courses/activate-licenses-modal.sass
index 625734dfe..a887f3b42 100644
--- a/app/styles/courses/activate-licenses-modal.sass
+++ b/app/styles/courses/activate-licenses-modal.sass
@@ -1,4 +1,13 @@
#activate-licenses-modal
+ select
+ min-width: 80%
+
+ .checkbox
+ margin: 0
+
+ input[type='checkbox']
+ margin-top: 8px
+
.modal-content
padding: 60px
width: 690px
diff --git a/app/styles/courses/teacher-class-view.sass b/app/styles/courses/teacher-class-view.sass
index ef61da089..4d83ab4c0 100644
--- a/app/styles/courses/teacher-class-view.sass
+++ b/app/styles/courses/teacher-class-view.sass
@@ -1,6 +1,9 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
-@import "app/styles/style-flat"
+@import "app/styles/style-flat-variables"
+
+.nowrap
+ white-space: nowrap
.alternating-background:nth-child(2n+1)
background-color: #ebebeb
@@ -187,6 +190,26 @@
.progress-dot
margin: 5px
+
+ .unassigned-students
+ margin-top: 75px
+ line-height: 45px
+ .student-name, .student-email, .latest-completed
+ white-space: nowrap
+ overflow: hidden
+ text-overflow: ellipsis
+
+ .small-details, .small
+ line-height: 45px
+ .latest-completed
+ white-space: nowrap
+ .level-name
+ display: inline
+
+ .btn
+ margin-top: 6.5px
+ margin-bottom: 6.5px
+
// Checkboxes
.checkbox-flat
@@ -255,4 +278,4 @@
float: right
.export-student-progress-btn
- margin-top: 10px
\ No newline at end of file
+ margin-top: 10px
diff --git a/app/styles/courses/teacher-classes-view.sass b/app/styles/courses/teacher-classes-view.sass
index 82ce88e39..7f439d895 100644
--- a/app/styles/courses/teacher-classes-view.sass
+++ b/app/styles/courses/teacher-classes-view.sass
@@ -1,6 +1,6 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
-@import "app/styles/style-flat"
+@import "app/styles/style-flat-variables"
#teacher-classes-view
diff --git a/app/styles/courses/teacher-dashboard-nav.sass b/app/styles/courses/teacher-dashboard-nav.sass
index 1fac6f297..44fa7bc7f 100644
--- a/app/styles/courses/teacher-dashboard-nav.sass
+++ b/app/styles/courses/teacher-dashboard-nav.sass
@@ -1,6 +1,6 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
-@import "app/styles/style-flat"
+@import "app/styles/style-flat-variables"
#teacher-dashboard-nav
vertical-align: middle
diff --git a/app/styles/new-home-view.sass b/app/styles/new-home-view.sass
index cad40f085..4342c3db5 100644
--- a/app/styles/new-home-view.sass
+++ b/app/styles/new-home-view.sass
@@ -1,6 +1,6 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
-@import "app/styles/style-flat"
+@import "app/styles/style-flat-variables"
#new-home-view
diff --git a/app/styles/play/modal/buy-gems-modal.sass b/app/styles/play/modal/buy-gems-modal.sass
index 6dcbbaa72..e038fc618 100644
--- a/app/styles/play/modal/buy-gems-modal.sass
+++ b/app/styles/play/modal/buy-gems-modal.sass
@@ -78,7 +78,8 @@
width: 80%
left: 10%
bottom: -30px
-
+
+
//- Errors
.alert
position: absolute
diff --git a/app/styles/play/modal/lang-nl/buy-gems-modal-nl.sass b/app/styles/play/modal/lang-nl/buy-gems-modal-nl.sass
new file mode 100644
index 000000000..b01b39cdf
--- /dev/null
+++ b/app/styles/play/modal/lang-nl/buy-gems-modal-nl.sass
@@ -0,0 +1,96 @@
+@import "app/styles/mixins"
+
+#buy-gems-modal-nl
+
+ //- Header
+
+ h1
+ position: absolute
+ left: 325px
+ top: -70px
+ margin: 0
+ width: 612px
+ text-align: center
+ color: rgb(254,188,68)
+ font-size: 38px
+ text-shadow: black 4px 4px 0, black -4px -4px 0, black 4px -4px 0, black -4px 4px 0, black 4px 0px 0, black 0px -4px 0, black -4px 0px 0, black 0px 4px 0
+
+ //- Clear modal defaults
+ .modal-dialog
+ margin: 150px auto 0 auto
+ padding: 0
+ width: 1300px
+ height: 460px
+ background: none
+
+ //- Background
+ #buy-gems-background
+ position: absolute
+ top: -157px
+ left: -2px
+
+ //- Close modal button
+
+ #close-modal
+ position: absolute
+ left: 1005px
+ top: -80px
+ width: 60px
+ height: 60px
+ color: white
+ text-align: center
+ font-size: 30px
+ padding-top: 15px
+ cursor: pointer
+ @include rotate(-3deg)
+
+ &:hover
+ color: yellow
+
+ //- Products
+
+ #products
+ position: absolute
+ left: 55px
+ top: 242px
+ width: 1300px
+ height: 140px
+
+ .product
+ width: 228px
+ height: 136px
+ float: left
+ text-align: center
+ margin-right: 12px
+ position: relative
+
+ h4
+ font-size: 20px
+ color: rgb(22,16,5)
+
+ h3
+ margin-top: 10px
+ text-transform: uppercase
+ color: rgb(22,16,5)
+
+ button
+ position: absolute
+ width: 80%
+ left: 10%
+ bottom: -30px
+
+ .btn-ideal
+ border-image: url(/images/common/lang-nl/button-background-ideal-active-border.png) 14 20 20 fill round
+ color: #f2f2f2
+
+ a
+ color: #f2f2f2
+ text-decoration: none
+
+ //- Errors
+ .alert
+ position: absolute
+ left: 10%
+ width: 80%
+ top: 20px
+ border: 5px solid gray
diff --git a/app/styles/style-flat-variables.sass b/app/styles/style-flat-variables.sass
new file mode 100644
index 000000000..340eeea72
--- /dev/null
+++ b/app/styles/style-flat-variables.sass
@@ -0,0 +1,7 @@
+$headline-font: 'Arvo', serif
+$body-font: 'Open Sans', sans-serif
+
+$burgandy: #7D0101
+$gold: #F2BE19
+$navy: #0E4C60
+$forest: #20572B
diff --git a/app/styles/style-flat.sass b/app/styles/style-flat.sass
index 1c9c6e080..376010aee 100644
--- a/app/styles/style-flat.sass
+++ b/app/styles/style-flat.sass
@@ -1,13 +1,9 @@
@import "app/styles/bootstrap/variables"
@import "app/styles/mixins"
+@import "app/styles/style-flat-variables"
// TODO: Move flat style into probably several files and Bootstrap variables
-// Variables
-
-$headline-font: 'Arvo', serif
-$body-font: 'Open Sans', sans-serif
-
body[lang='ru'], body[lang='uk'], body[lang='bg'], body[lang^='mk'], body[lang='sr']
// Google Fonts version of Arvo only has Latin glyphs, not Cyrillic
// TODO: figure out font fallbacks for other languages not covered by Arvo
@@ -15,11 +11,6 @@ body[lang='ru'], body[lang='uk'], body[lang='bg'], body[lang^='mk'], body[lang='
h1, .text-h1, h3, .text-h3, h5, .text-h5
font-family: 'Open Sans', serif
-$burgandy: #7D0101
-$gold: #F2BE19
-$navy: #0E4C60
-$forest: #20572B
-
.style-flat
background: white
color: black
@@ -194,6 +185,15 @@ $forest: #20572B
color: $gold
text-shadow: 1px 1px black, -1px -1px 0 black, 1px -1px 0 black, -1px 1px 0 black
+ // Wells
+
+ .well
+ padding: 8px
+ background-color: transparent
+ border: thin solid lightgray
+ border-radius: 0
+
+
// Buttons
.btn
@@ -272,6 +272,8 @@ $forest: #20572B
// TODO: Font size 18? Inconsistent with buttons on teacher-class-view bulk assign
// Tooltips
+ .tooltip.in
+ opacity: 1
.tooltip .tooltip-arrow::after
// Create a duplicate tooltip arrow which will cover the main arrow and make it seem like a line rather than filled
@@ -334,6 +336,7 @@ $forest: #20572B
background: white
border-radius: 20px
min-width: 150px
+ max-width: 600px
// Checkboxes
diff --git a/app/templates/account/payments-view.jade b/app/templates/account/payments-view.jade
index 532af43fb..fc625f656 100644
--- a/app/templates/account/payments-view.jade
+++ b/app/templates/account/payments-view.jade
@@ -10,7 +10,8 @@ block content
a(href="/account", data-i18n="nav.account")
li.active(data-i18n="account.payments")
- if view.payments.models.length
+ - console.log('render', view.payments.size())
+ if view.payments.size()
table.table.table-striped
tr
th(data-i18n="account.purchased")
@@ -21,7 +22,9 @@ block content
for payment in view.payments.models
- var service = payment.get('service')
tr
- if payment.get('productID')
+ if payment.get('productID') === 'custom'
+ td= payment.get('description')
+ else if payment.get('productID')
td(data-i18n='account.gems')
else
td(data-i18n='subscribe.stripe_description')
@@ -32,4 +35,4 @@ block content
else
td(data-i18n="account.service_web")
td $#{(payment.get('amount')/100).toFixed(2)}
- td= payment.get('gems')
+ td= payment.get('gems') || '-'
diff --git a/app/templates/courses/activate-licenses-modal.jade b/app/templates/courses/activate-licenses-modal.jade
index 591ef66f9..ed1ca6d12 100644
--- a/app/templates/courses/activate-licenses-modal.jade
+++ b/app/templates/courses/activate-licenses-modal.jade
@@ -5,49 +5,67 @@ block modal-header-content
.text-center
h1(data-i18n="teacher.enroll_students")
h2(data-i18n="courses.grants_lifetime_access")
- if view.classroom
- p= view.classroom.get('name')
block modal-body-content
+ - var numToEnroll = state.get('visibleSelectedUsers').length
+ - var unusedEnrollments = view.prepaids.totalMaxRedeemers() - view.prepaids.totalRedeemers()
+ - var tooManySelected = numToEnroll > unusedEnrollments
+ - var noneSelected = numToEnroll == 0
+
if view.classrooms.length > 1
- .text-center
- span(data-i18n='teacher.show_students_from')
- span.spr :
- select
- each classroom in view.classrooms.models
- option(selected=(classroom.id === view.classroom.id), value=classroom.id)
- = classroom.get('name')
- //- option(selected=!view.classroom, value='all-classrooms' data-i18n='teacher.all_students')
- form.form
+ .row
+ .col-sm-10.col-sm-offset-1
+ .text-center.m-b-3
+ .small.color-navy
+ span(data-i18n='teacher.show_students_from')
+ span.spr :
+ select.classroom-select
+ each classroom in view.classrooms.models
+ option(selected=(classroom.id === view.classroom.id), value=classroom.id)
+ = classroom.get('name')
+ option(selected=(view.classroom.id === 'all-students'), value='all-students' data-i18n='teacher.all_students')
+
+ form.form.m-t-3
span(data-i18n="teacher.enroll_the_following_students")
span :
.well.form-group
- for user in view.users.models
+ - var enrolledUsers = view.users.filter(function(user){ return Boolean(user.get('coursePrepaidID')) })
+ - var unenrolledUsers = view.users.filter(function(user){ return !Boolean(user.get('coursePrepaidID')) })
+ for user in unenrolledUsers
+ - var selected = Boolean(paid || state.get('selectedUsers').get(user.id))
.checkbox
label
- - var paid = user.get('coursePrepaidID')
- - var selected = (view.selectedUsers.get(user.id) ? true : false)
- input(type="checkbox", disabled=paid, checked=selected, data-user-id=user.id, name='user')
+ input.user-checkbox(type="checkbox", disabled=false, checked=selected, data-user-id=user.id, name='user')
+ span.spr= user.broadName()
+ if enrolledUsers.length > 0
+ .small-details.m-t-3
+ span(data-i18n='TODO')
+ | The following students are already enrolled:
+ for user in enrolledUsers
+ - var selected = Boolean(paid || state.get('selectedUsers').get(user.id))
+ .checkbox
+ label
+ input.user-checkbox(type="checkbox", disabled=true, checked=true, data-user-id=user.id, name='user')
span.spr= user.broadName()
- if paid
- span (
- span(data-i18n="courses.already_enrolled")
- span )
- #error-alert.alert.alert-danger.hide
+ if state.get('error')
+ .alert.alert-danger
+ = state.get('error')
#submit-form-area.text-center
+ p.small-details.not-enough-enrollments(class=(tooManySelected ? 'visible' : ''))
+ span(data-i18n='teacher.not_enough_enrollments')
+
p.small-details
span.spr(data-i18n="courses.enrollment_credits_available")
span#total-available= view.prepaids.totalAvailable()
- p.small-details.not-enough-enrollments
- span(data-i18n='teacher.not_enough_enrollments')
p
- button#activate-licenses-btn.btn.btn-lg.btn-primary(type="submit")
+ button#activate-licenses-btn.btn.btn-lg.btn-primary(type="submit" class=(tooManySelected || noneSelected ? 'disabled' : ''))
span.spr(data-i18n="courses.enroll")
| (
span#total-selected-span
+ = numToEnroll
| )
span.spl(data-i18n="courses.students1")
diff --git a/app/templates/courses/teacher-class-view.jade b/app/templates/courses/teacher-class-view.jade
index 5016833b3..cfd455d5f 100644
--- a/app/templates/courses/teacher-class-view.jade
+++ b/app/templates/courses/teacher-class-view.jade
@@ -18,6 +18,11 @@ block content
if classroom.loaded
.container
+breadcrumbs
+ if classroom.get('archived')
+ .row.center-block.text-center.m-t-3.m-b-3
+ .unarchive-btn.btn.btn-lg.btn-navy
+ span(data-i18n='teacher.unarchive_this_class')
+
h3.m-t-2= classroom.get('name')
a.label.edit-classroom(data-classroom-id=classroom.id)
span(data-i18n='teacher.edit_class_settings')
@@ -25,7 +30,7 @@ block content
.classroom-info-row.row.m-t-5
.classroom-details.col-md-3
- - var stats = view.classStats()
+ - var stats = state.get('classStats')
h4.m-b-2(data-i18n='teacher.class_overview')
.language.small-details
@@ -68,55 +73,57 @@ block content
span(data-i18n='teacher.export_student_progress')
//- .concepts.small-details
- //- if view.progressData
+ //- if state.get('progressData')
//- div
//- span(data-i18n='teacher.concepts_covered')
//- span :
//- - console.log('concepts', view.conceptData)
//- - concepts = view.conceptData
//- each state, name in view.conceptData[view.classroom.id]
- //- if state.started
- //- b.concept(class=state.completed ? 'forest' : 'gold')
+ //- if state.get('started')
+ //- b.concept(class=state.get('completed') ? 'forest' : 'gold')
//- span(data-i18n='concepts.'+name)
.completeness-info.col-md-4
h4.m-b-2
- if view.earliestIncompleteLevel
+ if state.get('earliestIncompleteLevel')
div.small-details
span(data-i18n='teacher.earliest_incomplete')
span :
- +longLevelName(view.earliestIncompleteLevel)
- +inlineUserList(view.earliestIncompleteLevel.users)
-
- if view.latestCompleteLevel
+ +longLevelName(state.get('earliestIncompleteLevel'))
+ +inlineUserList(state.get('earliestIncompleteLevel').users)
+
+ if state.get('latestCompleteLevel')
div.small-details.m-t-3
span(data-i18n='teacher.latest_complete')
span :
- +longLevelName(view.latestCompleteLevel)
- +inlineUserList(view.latestCompleteLevel.users)
-
+ +longLevelName(state.get('latestCompleteLevel'))
+ +inlineUserList(state.get('latestCompleteLevel').users)
+
.adding-students.col-md-5
h4.m-b-2
span(data-i18n='teacher.adding_students')
span :
+copyCodes
+addStudentsButton
-
- ul.nav.nav-tabs.m-t-5(role='tablist')
- li.active
- a(href='#students-tab' data-toggle='tab')
+
+ ul#student-info-tabs.nav.nav-tabs.m-t-5(role='tablist')
+ li(class=(state.get('activeTab')==="#students-tab" ? 'active' : ''))
+ a.students-tab-btn(href='#students-tab')
.small-details.text-center(data-i18n='teacher.students')
.tab-spacer
- li
- a(href='#course-progress-tab' data-toggle='tab')
+ li(class=(state.get('activeTab')==="#course-progress-tab" ? 'active' : ''))
+ a.course-progress-tab-btn(href='#course-progress-tab')
.small-details.text-center(data-i18n='teacher.course_progress')
.tab-filler
.tab-content
- +studentsTab
- +courseProgressTab
-
+ if state.get('activeTab')=='#students-tab'
+ +studentsTab
+ else
+ +courseProgressTab
+
mixin breadcrumbs
.breadcrumbs
a(data-i18n='teacher.my_classes' href='/teachers/classes')
@@ -153,7 +160,7 @@ mixin addStudentsButton
span(data-i18n='teacher.add_students_manually')
mixin studentsTab
- #students-tab.tab-pane.active
+ #students-tab
+bulkAssignControls
table.students-table
thead
@@ -165,7 +172,7 @@ mixin studentsTab
th
+sortButtons
tbody
- each student in view.students.models
+ each student in state.get('students').models
+studentRow(student)
mixin sortButtons
@@ -199,12 +206,15 @@ mixin studentRow(student)
div
+longLevelName(student.latestCompleteLevel)
td
- if view.progressData
- each course, index in view.courses.models
+ if state.get('progressData')
+ each trimCourse, index in view.classroom.get('courses')
+ - var course = view.courses.get(trimCourse._id);
- var instance = view.courseInstances.findWhere({ courseID: course.id, classroomID: classroom.id })
if instance && instance.hasMember(student)
- - var progress = view.progressData.get({ classroom: view.classroom, course: course, user: student })
- +progressDot(progress, 'CS' + (index+1))
+ - var progress = state.get('progressData').get({ classroom: view.classroom, course: course, user: student })
+ - var levelsTotal = trimCourse.levels.length
+ //- - var level = ???
+ +studentCourseProgressDot(progress, levelsTotal, level, 'CS' + (index+1))
unless student.isEnrolled()
+enrollStudentButton(student)
//- td
@@ -219,7 +229,7 @@ mixin enrollStudentButton(student)
span(data-i18n='teacher.enroll_student')
mixin courseProgressTab
- #course-progress-tab.tab-pane.m-t-3
+ #course-progress-tab.m-t-3
if view.courses
.text-center
span(data-i18n='teacher.select_course')
@@ -227,18 +237,50 @@ mixin courseProgressTab
select.course-select
each trimCourse in view.classroom.get('courses')
- var course = view.courses.get(trimCourse._id);
- option(value=course.id)
+ option(value=course.id selected=(course===state.get('selectedCourse')))
= course.get('name')
- if view.progressData
+ if state.get('progressData')
.render-on-course-sync
+courseOverview
.student-levels-table
+sortButtons
- each student in view.students.models
- +studentLevelsRow(student)
+ each student in state.get('students').models
+ if _.contains(state.get('selectedCourse').members, student.id)
+ +studentLevelsRow(student)
+ //- TODO: If any students aren't assigned the course
+ .unassigned-students.render-on-course-sync
+ if state.get('selectedCourse') && state.get('selectedCourse').members.length < state.get('students').length
+ h2
+ span(data-i18n='TODO')
+ | Students who have not been assigned
+ |
+ span= state.get('selectedCourse').get('name')
+ for student in state.get('students').models
+ unless _.contains(state.get('selectedCourse').members, student.id)
+ .row.unassigned-student-row.alternating-background
+ .student-name.col-sm-3
+ = student.broadName()
+ .student-email.small-details.col-sm-3
+ = student.get('email')
+ .col-sm-4
+ .latest-completed.truncate.small
+ i.m-r-1
+ span(data-i18n='TODO')
+ | Latest completed
+ | :
+ +longLevelName(student.latestCompleteLevel)
+ .col-sm-2
+ if student.isEnrolled()
+ .assign-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id data-course-id=state.get('selectedCourse').id)
+ span(data-i18n='TODO')
+ | Assign Course
+ else
+ .enroll-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id)
+ span(data-i18n='TODO')
+ | Enroll Student
mixin courseOverview
- - var course = view.selectedCourse
+ - var course = state.get('selectedCourse')
- var levels = view.classroom.getLevels({courseID: course.id, withoutLadderLevels: true}).models
.course-overview-row
.course-title.student-name
@@ -247,8 +289,8 @@ mixin courseOverview
span(data-i18n='teacher.course_overview')
.course-overview-progress
each level, index in levels
- - var progress = view.progressData.get({ classroom: view.classroom, course: course, level: level })
- +progressDot(progress, index+1)
+ - var progress = state.get('progressData').get({ classroom: view.classroom, course: course, level: level })
+ +allStudentsLevelProgressDot(progress, level, index+1)
mixin studentLevelsRow(student)
.student-levels-row.alternating-background
@@ -256,20 +298,35 @@ mixin studentLevelsRow(student)
div.student-name= student.broadName()
div.student-email.small-details= student.get('email')
div.student-levels-progress
- - var course = view.selectedCourse
+ - var course = state.get('selectedCourse')
- var levels = view.classroom.getLevels({courseID: course.id, withoutLadderLevels: true}).models
each level, index in levels
- - var progress = view.progressData.get({ classroom: view.classroom, course: course, level: level, user: student })
- +progressDot(progress, index+1)
-
-mixin progressDot(progress, label)
+ - var progress = state.get('progressData').get({ classroom: view.classroom, course: course, level: level, user: student })
+ +studentLevelProgressDot(progress, level, index+1)
+
+mixin studentCourseProgressDot(progress, levelsTotal, level, label)
//- TODO: Refactor with TeacherClassesView jade
//- TODO: Give classes abbreviations instead of using index?
- //- TODO: inefficient. Cache this in the view?
- dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : '');
- .progress-dot(class=dotClass, data-html='true', data-title=view.progressDotTemplate(progressDotContext) data-toggle='tooltip')
+ - _.assign(progress, { levelsTotal: levelsTotal })
+ .progress-dot(class=dotClass, data-html='true', data-title=view.singleStudentCourseProgressDotTemplate(progress))
+progressDotLabel(label)
+mixin allStudentsLevelProgressDot(progress, level, levelNumber)
+ - dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : '');
+ - levelName = level.get('name')
+ - context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber, numStudents: view.students.length })
+ .progress-dot.level-progress-dot(class=dotClass, data-html='true', data-title=view.allStudentsLevelProgressDotTemplate(context))
+ +progressDotLabel(levelNumber)
+
+mixin studentLevelProgressDot(progress, level, levelNumber)
+ //- TODO: Refactor with TeacherClassesView jade
+ - dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : '');
+ - levelName = level.get('name')
+ - context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber })
+ .progress-dot.level-progress-dot(class=dotClass, data-html='true', data-title=view.singleStudentLevelProgressDotTemplate(context))
+ +progressDotLabel(levelNumber)
+
mixin progressDotLabel(label)
.dot-label.text-center
.dot-label-inner
@@ -278,23 +335,23 @@ mixin progressDotLabel(label)
mixin copyCodes
div.copy-button-group.form-inline.m-b-3
.form-group
- input.text-h4.semibold#join-code-input(value=view.classCode)
+ input.text-h4.semibold#join-code-input(value=state.get('classCode'))
button#copy-code-btn.form-control.btn.btn-lg.btn-forest
span(data-i18n='teacher.copy_class_code')
div.text-center.small(data-i18n='teacher.class_code_blurb')
div.copy-button-group.form-inline.m-b-3
.form-group
- input.form-control.text-h4.semibold#join-url-input(value=view.joinURL)
+ input.form-control.text-h4.semibold#join-url-input(value=state.get('joinURL'))
button#copy-url-btn.form-control.btn.btn-lg.btn-forest
span(data-i18n='teacher.copy_class_url')
div.text-center.small(data-i18n='teacher.class_join_url_blurb')
mixin bulkAssignControls
.bulk-assign-controls.form-inline
- .no-students-selected.small-details(class=view.assigningToNobody ? 'visible' : '')
+ .no-students-selected.small-details(class=state.get('errors').assigningToNobody ? 'visible' : '')
span(data-i18n='teacher.no_students_selected')
- .cant-assign-to-unenrolled.small-details(class=view.assigningToUnenrolled ? 'visible' : '')
+ .cant-assign-to-unenrolled.small-details(class=state.get('errors').assigningToUnenrolled ? 'visible' : '')
span(data-i18n='teacher.cant_assign_to_unenrolled')
span.small
span(data-i18n='teacher.bulk_assign')
@@ -302,9 +359,9 @@ mixin bulkAssignControls
select.bulk-course-select.form-control
each trimCourse in _.rest(view.classroom.get('courses'))
- var course = view.courses.get(trimCourse._id)
- option(value=course.id)
+ option(value=course.id selected=(course===state.get('selectedCourse')))
= course.get('name')
button.btn.btn-primary-alt.assign-to-selected-students
span(data-i18n='teacher.assign_to_selected_students')
button.btn.btn-primary-alt.enroll-selected-students
- span(data-i18n='teacher.enroll_selected_students')
\ No newline at end of file
+ span(data-i18n='teacher.enroll_selected_students')
diff --git a/app/templates/play/modal/buy-gems-modal.jade b/app/templates/play/modal/buy-gems-modal.jade
index 261fa9e41..e5c603a28 100644
--- a/app/templates/play/modal/buy-gems-modal.jade
+++ b/app/templates/play/modal/buy-gems-modal.jade
@@ -1,16 +1,19 @@
.modal-dialog
- .modal-content
-
+ .modal-content
+
if view.state === 'purchasing'
.alert.alert-info(data-i18n="buy_gems.purchasing")
-
+
else if view.state === 'retrying'
#retrying-alert.alert.alert-danger(data-i18n="buy_gems.retrying")
else
- img(src="/images/pages/play/modal/buy-gems-background.png")#buy-gems-background
- h1(data-i18n="play.buy_gems")
-
+ if (me.get('preferredLanguage',true) || 'en-US').split('-')[0] == 'nl'
+ img(src="/images/pages/play/modal/lang-nl/buy-gems-background-NL.png")#buy-gems-background)
+ else
+ img(src="/images/pages/play/modal/buy-gems-background.png")#buy-gems-background
+ h1(data-i18n="play.buy_gems")
+
#products
for product in view.products.models
.product
@@ -19,6 +22,16 @@
button.btn.btn-illustrated.btn-lg(value=product.get('name'))
span= product.get('priceString')
+ if (me.get('preferredLanguage',true) || 'en-US').split('-')[0] == 'nl'
+ .product
+ h4.subscription-gem-amount x{{gems}} / mo
+ h3
+ | 1, 3, 6 OF 12
+ br
+ | MAANDEN
+ a(href="http://www.codecombat.nl/kopen", target="_blank")
+ button.btn.btn-ideal.btn-illustrated.btn-lg.btn-succes PREPAID CODES
+
.product
h4.subscription-gem-amount x{{gems}} / mo
h3(data-i18n="account.subscription")
diff --git a/app/templates/teachers/hovers/progress-dot-all-students-single-level.jade b/app/templates/teachers/hovers/progress-dot-all-students-single-level.jade
new file mode 100644
index 000000000..2a04ae2f5
--- /dev/null
+++ b/app/templates/teachers/hovers/progress-dot-all-students-single-level.jade
@@ -0,0 +1,21 @@
+if started
+ .small-details.nowrap
+ span= levelNumber
+ span.spr .
+ span= levelName
+ .small-details.nowrap
+ .fraction-students.small-details
+ = numStarted
+ | /
+ = numStudents
+ if completed
+ span.spl(data-i18n='teacher.completed')
+ | Completed
+ else
+ span.spl(data-i18n='teacher.started')
+ | Started
+ //- .small-details
+ //- i(data-i18n='teacher.click_to_view_progress')
+else
+ span.small-details.nowrap(data-i18n='teacher.no_progress')
+ | No progress
diff --git a/app/templates/teachers/hovers/progress-dot-single-student-course.jade b/app/templates/teachers/hovers/progress-dot-single-student-course.jade
new file mode 100644
index 000000000..9b289f225
--- /dev/null
+++ b/app/templates/teachers/hovers/progress-dot-single-student-course.jade
@@ -0,0 +1,18 @@
+if completed
+ span.small-details(data-i18n='teacher.complete')
+ | Complete
+else if started
+ .fraction-students.small-details
+ = levelsCompleted
+ | /
+ = levelsTotal
+ span.spl(data-i18n='teacher.levels')
+ | Levels
+ .percent-students.small-details
+ = Math.floor(levelsCompleted / levelsTotal * 100)
+ | %
+ span.spl(data-i18n='teacher.complete')
+ | Complete
+else
+ span.small-details(data-i18n='teacher.assigned')
+ | Assigned
diff --git a/app/templates/teachers/hovers/progress-dot-single-student-level.jade b/app/templates/teachers/hovers/progress-dot-single-student-level.jade
new file mode 100644
index 000000000..3922be2ed
--- /dev/null
+++ b/app/templates/teachers/hovers/progress-dot-single-student-level.jade
@@ -0,0 +1,27 @@
+if completed
+ .small-details.nowrap
+ span= levelNumber
+ span.spr .
+ span= levelName
+ .small-details.nowrap
+ span.spr(data-i18n='teacher.completed')
+ | Completed
+ span= new Date(dateFirstCompleted).toLocaleString()
+ //- .small-details
+ //- i(data-i18n='teacher.click_to_view_solution')
+ //- | click to view solution
+else if started
+ .small-details.nowrap
+ span= levelNumber
+ span.spr .
+ span= levelName
+ .small-details.nowrap
+ span.spr(data-i18n='teacher.last_played')
+ | Last played
+ span= new Date(lastPlayed).toLocaleString()
+ //- .small-details
+ //- i(data-i18n='teacher.click_to_view_progress')
+ //- | click to view progress
+else
+ span.small-details.nowrap(data-i18n='teacher.no_progress')
+ | No progress
diff --git a/app/templates/courses/progress-dot.jade b/app/templates/teachers/hovers/progress-dot-whole-course.jade
similarity index 100%
rename from app/templates/courses/progress-dot.jade
rename to app/templates/teachers/hovers/progress-dot-whole-course.jade
diff --git a/app/templates/teachers/request-quote-view.jade b/app/templates/teachers/request-quote-view.jade
index 255b67e67..f92a53fa3 100644
--- a/app/templates/teachers/request-quote-view.jade
+++ b/app/templates/teachers/request-quote-view.jade
@@ -219,6 +219,10 @@ block content
p
span.spr(data-i18n="teachers_quote.thanks_p")
a.spl(href="mailto:team@codecombat.com") team@codecombat.com
+
+ unless me.isAnonymous()
+ a.btn.btn-lg.btn-navy(href="/teachers/classes")
+ span(data-i18n='teachers_quote.back_to_classes')
if me.isAnonymous()
h5(data-i18n="teachers_quote.finish_signup")
diff --git a/app/views/account/PaymentsView.coffee b/app/views/account/PaymentsView.coffee
index b51d20e25..fae660e7b 100644
--- a/app/views/account/PaymentsView.coffee
+++ b/app/views/account/PaymentsView.coffee
@@ -1,13 +1,12 @@
RootView = require 'views/core/RootView'
template = require 'templates/account/payments-view'
CocoCollection = require 'collections/CocoCollection'
-Payment = require 'models/Payment'
+Payments = require 'collections/Payments'
module.exports = class PaymentsView extends RootView
id: "payments-view"
template: template
- constructor: (options) ->
- super(options)
- @payments = new CocoCollection([], { url: '/db/payment', model: Payment, comparator:'_id' })
- @supermodel.loadCollection(@payments, 'payments', {cache: false})
+ initialize: ->
+ @payments = new Payments()
+ @supermodel.trackRequest(@payments.fetch({cache: false}))
diff --git a/app/views/core/CocoView.coffee b/app/views/core/CocoView.coffee
index 6856acdb6..97eedca8a 100644
--- a/app/views/core/CocoView.coffee
+++ b/app/views/core/CocoView.coffee
@@ -137,6 +137,7 @@ module.exports = class CocoView extends Backbone.View
context._ = _
context.document = document
context.i18n = utils.i18n
+ context.state = @state
context
afterRender: ->
@@ -390,7 +391,7 @@ module.exports = class CocoView extends Backbone.View
setTimeout (=> $pointer.css transition: 'all 0.4s ease-in', transform: "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance}px)"), 800
endHighlight: ->
- @getPointer(false).css({'opacity': 0.0, 'transition': 'none', top: '-50px', right: '-50px'})
+ @getPointer(false).css({'opacity': 0.0, 'transition': 'none', top: '-50px', right: '-50px'})
clearInterval @pointerInterval
clearTimeout @pointerDelayTimeout
clearTimeout @pointerDurationTimeout
diff --git a/app/views/courses/ActivateLicensesModal.coffee b/app/views/courses/ActivateLicensesModal.coffee
index d847c4a32..709a1e2dc 100644
--- a/app/views/courses/ActivateLicensesModal.coffee
+++ b/app/views/courses/ActivateLicensesModal.coffee
@@ -1,7 +1,9 @@
ModalView = require 'views/core/ModalView'
+State = require 'models/State'
template = require 'templates/courses/activate-licenses-modal'
CocoCollection = require 'collections/CocoCollection'
Prepaids = require 'collections/Prepaids'
+Classroom = require 'models/Classroom'
Classrooms = require 'collections/Classrooms'
User = require 'models/User'
Users = require 'collections/Users'
@@ -11,14 +13,23 @@ module.exports = class ActivateLicensesModal extends ModalView
template: template
events:
- 'change input': 'updateSelectionSpans'
- 'change select': 'replaceStudentList'
+ 'change input[type="checkbox"][name="user"]': 'updateSelectedStudents'
+ 'change select.classroom-select': 'replaceStudentList'
'submit form': 'onSubmitForm'
+ getInitialState: (options) ->
+ selectedUserModels = _.filter(options.selectedUsers.models, (user) -> not user.isEnrolled())
+ {
+ selectedUsers: new Users(selectedUserModels)
+ visibleSelectedUsers: new Users(selectedUserModels)
+ error: null
+ }
+
initialize: (options) ->
+ @state = new State(@getInitialState(options))
@classroom = options.classroom
- @users = options.users
- @selectedUsers = options.selectedUsers
+ @users = options.users.clone()
+ @users.comparator = (user) -> user.broadName().toLowerCase()
@prepaids = new Prepaids()
@prepaids.comparator = '_id'
@prepaids.fetchByCreator(me.id)
@@ -33,68 +44,58 @@ module.exports = class ActivateLicensesModal extends ModalView
@supermodel.trackRequests(jqxhrs)
})
@supermodel.trackCollection(@classrooms)
+
+ @listenTo @state, 'change', @render
+ @listenTo @state.get('selectedUsers'), 'change add remove reset', ->
+ @state.set { visibleSelectedUsers: new Users(@state.get('selectedUsers').filter (u) => @users.get(u)) }
+ @render()
+ @listenTo @users, 'change add remove reset', ->
+ @state.set { visibleSelectedUsers: new Users(@state.get('selectedUsers').filter (u) => @users.get(u)) }
+ @render()
+ @listenTo @prepaids, 'sync add remove', ->
+ @state.set {
+ unusedEnrollments: @prepaids.totalMaxRedeemers() - @prepaids.totalRedeemers()
+ }
afterRender: ->
super()
- @updateSelectionSpans()
+ # @updateSelectedStudents() # TODO: refactor to event/state style
- updateSelectionSpans: ->
- targets = @$('input[name="targets"]:checked').val()
- if targets is 'given'
- numToActivate = 1
+ updateSelectedStudents: (e) ->
+ userID = $(e.currentTarget).data('user-id')
+ user = @users.get(userID)
+ if @state.get('selectedUsers').contains(user)
+ @state.get('selectedUsers').remove(user)
else
- numToActivate = @$('input[name="user"]:checked:not(:disabled)').length
- @$('#total-selected-span').text(numToActivate)
- remaining = @prepaids.totalMaxRedeemers() - @prepaids.totalRedeemers() - numToActivate
- depleted = remaining < 0
- @$('.not-enough-enrollments').toggleClass('visible', depleted)
- @$('#activate-licenses-btn').toggleClass('disabled', depleted).toggleClass('btn-success', not depleted).toggleClass('btn-default', depleted)
-
+ @state.get('selectedUsers').add(user)
+ # @render() # TODO: Have @state automatically listen to children's change events?
+
replaceStudentList: (e) ->
selectedClassroomID = $(e.currentTarget).val()
@classroom = @classrooms.get(selectedClassroomID)
- if selectedClassroomID == 'all-classrooms'
- @classroom = new Classroom({ id: 'all-students' }) # TODO: This is a horrible hack so the select shows the right option!
+ if selectedClassroomID is 'all-students'
+ @classroom = new Classroom({ _id: 'all-students', name: 'All Students' }) # TODO: This is a horrible hack so the select shows the right option!
users = _.uniq _.flatten @classrooms.map (classroom) -> classroom.users.models
@users.reset(users)
+ @users.sort()
else
@users.reset(@classrooms.get(selectedClassroomID).users.models)
- @trigger('users:change')
@render()
null
- showProgress: ->
- @$('#submit-form-area').addClass('hide')
- @$('#progress-area').removeClass('hide')
-
- hideProgress: ->
- @$('#submit-form-area').removeClass('hide')
- @$('#progress-area').addClass('hide')
-
onSubmitForm: (e) ->
e.preventDefault()
- @$('#error-alert').addClass('hide')
- @usersToRedeem = new CocoCollection([], {model: User})
- targets = @$('input[name="targets"]:checked').val()
- if targets is 'given'
- @usersToRedeem.add(@user)
- else
- checkedBoxes = @$('input[name="user"]:checked:not(:disabled)')
- _.each checkedBoxes, (el) =>
- $el = $(el)
- userID = $el.data('user-id')
- @usersToRedeem.add @users.get(userID)
- return unless @usersToRedeem.size()
- @usersToRedeem.originalSize = @usersToRedeem.size()
- @showProgress()
- @redeemUsers()
+ @state.set error: null
+ usersToRedeem = @state.get('visibleSelectedUsers')
+ @redeemUsers(usersToRedeem)
- redeemUsers: ->
- if not @usersToRedeem.size()
+ redeemUsers: (usersToRedeem) ->
+ if not usersToRedeem.size()
@finishRedeemUsers()
+ @hide()
return
- user = @usersToRedeem.first()
+ user = usersToRedeem.first()
prepaid = @prepaids.find((prepaid) -> prepaid.get('properties')?.endDate? and prepaid.openSpots() > 0)
prepaid = @prepaids.find((prepaid) -> prepaid.openSpots() > 0) unless prepaid
$.ajax({
@@ -102,19 +103,20 @@ module.exports = class ActivateLicensesModal extends ModalView
url: _.result(prepaid, 'url') + '/redeemers'
data: { userID: user.id }
context: @
- success: ->
- @usersToRedeem.remove(user)
- pct = 100 * (@usersToRedeem.originalSize - @usersToRedeem.size() / @usersToRedeem.originalSize)
- @$('#progress-area .progress-bar').css('width', "#{pct.toFixed(1)}%")
+ success: (prepaid) ->
+ user.set('coursePrepaidID', prepaid._id)
+ usersToRedeem.remove(user)
+ # pct = 100 * (usersToRedeem.originalSize - usersToRedeem.size() / usersToRedeem.originalSize)
+ # @$('#progress-area .progress-bar').css('width', "#{pct.toFixed(1)}%")
application.tracker?.trackEvent 'Enroll modal finished enroll student', category: 'Courses', userID: user.id
- @redeemUsers()
+ @redeemUsers(usersToRedeem)
error: (jqxhr, textStatus, errorThrown) ->
if jqxhr.status is 402
message = arguments[2]
else
message = "#{jqxhr.status}: #{jqxhr.responseText}"
- @$('#error-alert').text(message).removeClass('hide')
+ @state.set { error: message } # TODO: Test this! ("should" never happen. Only on server responding with an error.)
})
finishRedeemUsers: ->
- @trigger 'redeem-users'
+ @trigger 'redeem-users', @state.get('selectedUsers')
diff --git a/app/views/courses/TeacherClassView.coffee b/app/views/courses/TeacherClassView.coffee
index 071de926d..5302d0ee2 100644
--- a/app/views/courses/TeacherClassView.coffee
+++ b/app/views/courses/TeacherClassView.coffee
@@ -1,4 +1,5 @@
RootView = require 'views/core/RootView'
+State = require 'models/State'
template = require 'templates/courses/teacher-class-view'
helper = require 'lib/coursesHelper'
ClassroomSettingsModal = require 'views/courses/ClassroomSettingsModal'
@@ -12,6 +13,7 @@ Levels = require 'collections/Levels'
LevelSessions = require 'collections/LevelSessions'
User = require 'models/User'
Users = require 'collections/Users'
+Course = require 'models/Course'
Courses = require 'collections/Courses'
CourseInstance = require 'models/CourseInstance'
CourseInstances = require 'collections/CourseInstances'
@@ -21,6 +23,13 @@ module.exports = class TeacherClassView extends RootView
template: template
events:
+ 'click .students-tab-btn': (e) ->
+ e.preventDefault()
+ @trigger 'open-students-tab'
+ 'click .course-progress-tab-btn': (e) ->
+ e.preventDefault()
+ @trigger 'open-course-progress-tab'
+ 'click .unarchive-btn': 'onClickUnarchive'
'click .edit-classroom': 'onClickEditClassroom'
'click .add-students-btn': 'onClickAddStudents'
'click .sort-by-name': 'sortByName'
@@ -28,33 +37,59 @@ module.exports = class TeacherClassView extends RootView
'click #copy-url-btn': 'copyURL'
'click #copy-code-btn': 'copyCode'
'click .remove-student-link': 'onClickRemoveStudentLink'
+ 'click .assign-student-button': 'onClickAssign'
'click .enroll-student-button': 'onClickEnroll'
'click .assign-to-selected-students': 'onClickBulkAssign'
'click .enroll-selected-students': 'onClickBulkEnroll'
'click .export-student-progress-btn': 'onClickExportStudentProgress'
'click .select-all': 'onClickSelectAll'
'click .student-checkbox': 'onClickStudentCheckbox'
- 'change .course-select': 'onChangeCourseSelect'
+ 'change .course-select, .bulk-course-select': (e) ->
+ @trigger 'course-select:change', { selectedCourse: @courses.get($(e.currentTarget).val()) }
+
+ getInitialState: ->
+ if Backbone.history.getHash() in ['students-tab', 'course-progress-tab']
+ activeTab = '#' + Backbone.history.getHash()
+ else
+ activeTab = '#students-tab'
+ {
+ sortAttribute: 'name'
+ sortDirection: 1
+ activeTab
+ students: new Users()
+ classCode: ""
+ joinURL: ""
+ errors:
+ assigningToNobody: false
+ assigningToUnenrolled: false
+ selectedCourse: undefined
+ classStats:
+ averagePlaytime: ""
+ totalPlaytime: ""
+ averageLevelsComplete: ""
+ totalLevelsComplete: ""
+ enrolledUsers: ""
+ }
initialize: (options, classroomID) ->
super(options)
- @progressDotTemplate = require 'templates/courses/progress-dot'
-
- @sortAttribute = 'name'
- @sortDirection = 1
-
+ @singleStudentCourseProgressDotTemplate = require 'templates/teachers/hovers/progress-dot-single-student-course'
+ @singleStudentLevelProgressDotTemplate = require 'templates/teachers/hovers/progress-dot-single-student-level'
+ @allStudentsLevelProgressDotTemplate = require 'templates/teachers/hovers/progress-dot-all-students-single-level'
+
+ @state = new State(@getInitialState())
+ window.location.hash = @state.get('activeTab') # TODO: Don't push to URL history (maybe don't use url fragment for default tab)
+
@classroom = new Classroom({ _id: classroomID })
@classroom.fetch()
@supermodel.trackModel(@classroom)
-
+
+ @students = new Users()
@listenTo @classroom, 'sync', ->
- @students = new Users()
jqxhrs = @students.fetchForClassroom(@classroom, removeDeleted: true)
if jqxhrs.length > 0
@supermodel.trackCollection(@students)
- @listenTo @students, 'sync', @sortByName
- @listenTo @students, 'sort', @renderSelectors.bind(@, '.students-table', '.student-levels-table')
-
+
@classroom.sessions = new LevelSessions()
requests = @classroom.sessions.fetchForAllClassroomMembers(@classroom)
@supermodel.trackRequests(requests)
@@ -66,47 +101,119 @@ module.exports = class TeacherClassView extends RootView
@courseInstances = new CourseInstances()
@courseInstances.fetchForClassroom(classroomID)
@supermodel.trackCollection(@courseInstances)
-
+
@levels = new Levels()
@levels.fetchForClassroom(classroomID, {data: {project: 'original,concepts'}})
@supermodel.trackCollection(@levels)
+
+ @attachMediatorEvents()
+
+ attachMediatorEvents: () ->
+ @listenTo @state, 'sync change', @render
+ # Model/Collection events
+ @listenTo @classroom, 'sync change update', ->
+ @removeDeletedStudents()
+ classCode = @classroom.get('codeCamel') or @classroom.get('code')
+ @state.set {
+ classCode: classCode
+ joinURL: document.location.origin + "/courses?_cc=" + classCode
+ }
+ @listenTo @courses, 'sync change update', ->
+ @setCourseMembers() # Is this necessary?
+ @state.set selectedCourse: @courses.first() unless @state.get('selectedCourse')
+ @listenTo @courseInstances, 'sync change update', ->
+ @setCourseMembers()
+ @render() # TODO: use state
+ @listenTo @courseInstances, 'add-members', ->
+ noty text: $.i18n.t('teacher.assigned'), layout: 'center', type: 'information', killer: true, timeout: 5000
+ @listenToOnce @students, 'sync', # TODO: This seems like it's in the wrong place?
+ @sortByName
+ @listenTo @students, 'sync change update add remove reset', ->
+ # Set state/props of things that depend on students?
+ # Set specific parts of state based on the models, rather than just dumping the collection there?
+ @removeDeletedStudents()
+ @calculateProgressAndLevels()
+ classStats = @calculateClassStats()
+ @state.set classStats: classStats if classStats
+ @state.set students: @students
+ @listenTo @students, 'sort', ->
+ @state.set students: @students
+ @render()
+
+ # DOM events
+ @listenTo @, 'open-students-tab', ->
+ if window.location.hash isnt '#students-tab'
+ window.location.hash = '#students-tab'
+ @state.set activeTab: '#students-tab'
+ @listenTo @, 'open-course-progress-tab', ->
+ if window.location.hash isnt '#course-progress-tab'
+ window.location.hash = '#course-progress-tab'
+ @state.set activeTab: '#course-progress-tab'
+ @listenTo @, 'course-select:change', ({ selectedCourse }) ->
+ @state.set selectedCourse: selectedCourse
+ setCourseMembers: =>
+ for course in @courses.models
+ course.instance = @courseInstances.findWhere({ courseID: course.id, classroomID: @classroom.id })
+ course.members = course.instance?.get('members') or []
+ null
+
onLoaded: ->
- @removeDeletedStudents()
-
- @classCode = @classroom.get('codeCamel') or @classroom.get('code')
- @joinURL = document.location.origin + "/courses?_cc=" + @classCode
-
- @earliestIncompleteLevel = helper.calculateEarliestIncomplete(@classroom, @courses, @courseInstances, @students)
- @latestCompleteLevel = helper.calculateLatestComplete(@classroom, @courses, @courseInstances, @students)
+ @removeDeletedStudents() # TODO: Move this to mediator listeners? For both classroom and students?
+ @calculateProgressAndLevels()
+ super()
+
+ afterRender: ->
+ super(arguments...)
+ $('.progress-dot').each (i, el) ->
+ dot = $(el)
+ dot.tooltip({
+ html: true
+ container: dot
+ }).delegate '.tooltip', 'mousemove', ->
+ dot.tooltip('hide')
+
+ calculateProgressAndLevels: ->
+ return unless @supermodel.progress is 1
+ # TODO: How to structure this in @state?
for student in @students.models
# TODO: this is a weird hack
studentsStub = new Users([ student ])
student.latestCompleteLevel = helper.calculateLatestComplete(@classroom, @courses, @courseInstances, studentsStub)
-
+
+ earliestIncompleteLevel = helper.calculateEarliestIncomplete(@classroom, @courses, @courseInstances, @students)
+ latestCompleteLevel = helper.calculateLatestComplete(@classroom, @courses, @courseInstances, @students)
+
classroomsStub = new Classrooms([ @classroom ])
- @progressData = helper.calculateAllProgress(classroomsStub, @courses, @courseInstances, @students)
- # @conceptData = helper.calculateConceptsCovered(classroomsStub, @courses, @campaigns, @courseInstances, @students)
-
- @selectedCourse = @courses.first()
- super()
-
+ progressData = helper.calculateAllProgress(classroomsStub, @courses, @courseInstances, @students)
+ # conceptData: helper.calculateConceptsCovered(classroomsStub, @courses, @campaigns, @courseInstances, @students)
+
+ @state.set {
+ earliestIncompleteLevel
+ latestCompleteLevel
+ progressData
+ classStats: @calculateClassStats()
+ }
+
copyCode: ->
- @$('#join-code-input').val(@classCode).select()
+ @$('#join-code-input').val(@state.get('classCode')).select()
@tryCopy()
copyURL: ->
- @$('#join-url-input').val(@joinURL).select()
+ @$('#join-url-input').val(@state.get('joinURL')).select()
@tryCopy()
tryCopy: ->
try
document.execCommand('copy')
- application.tracker?.trackEvent 'Classroom copy URL', category: 'Courses', classroomID: @classroom.id, url: @joinURL
+ application.tracker?.trackEvent 'Classroom copy URL', category: 'Courses', classroomID: @classroom.id, url: @state.joinURL
catch err
message = 'Oops, unable to copy'
noty text: message, layout: 'topCenter', type: 'error', killer: false
-
+
+ onClickUnarchive: ->
+ @classroom.save { archived: false }
+
onClickEditClassroom: (e) ->
classroom = @classroom
modal = new ClassroomSettingsModal({ classroom: classroom })
@@ -125,7 +232,6 @@ module.exports = class TeacherClassView extends RootView
onStudentRemoved: (e) ->
@students.remove(e.user)
- @render()
application.tracker?.trackEvent 'Classroom removed student', category: 'Courses', classroomID: @classroom.id, userID: e.user.id
onClickAddStudents: (e) =>
@@ -134,32 +240,33 @@ module.exports = class TeacherClassView extends RootView
@listenToOnce modal, 'hide', @render
removeDeletedStudents: () ->
+ return unless @classroom.loaded and @students.loaded
_.remove(@classroom.get('members'), (memberID) =>
not @students.get(memberID) or @students.get(memberID)?.get('deleted')
)
true
sortByName: (e) ->
- if @sortValue is 'name'
- @sortDirection = -@sortDirection
+ if @state.get('sortValue') is 'name'
+ @state.set('sortDirection', -@state.get('sortDirection'))
else
- @sortValue = 'name'
- @sortDirection = 1
-
- dir = @sortDirection
+ @state.set('sortValue', 'name')
+ @state.set('sortDirection', 1)
+
+ dir = @state.get('sortDirection')
@students.comparator = (student1, student2) ->
return (if student1.broadName().toLowerCase() < student2.broadName().toLowerCase() then -dir else dir)
@students.sort()
sortByProgress: (e) ->
- if @sortValue is 'progress'
- @sortDirection = -@sortDirection
+ if @state.get('sortValue') is 'progress'
+ @state.set('sortDirection', -@state.get('sortDirection'))
else
- @sortValue = 'progress'
- @sortDirection = 1
-
- dir = @sortDirection
-
+ @state.set('sortValue', 'progress')
+ @state.set('sortDirection', 1)
+
+ dir = @state.get('sortDirection')
+
@students.comparator = (student) ->
#TODO: I would like for this to be in the Level model,
# but it doesn't know about its own courseNumber
@@ -179,19 +286,24 @@ module.exports = class TeacherClassView extends RootView
userID = $(e.currentTarget).data('user-id')
user = @students.get(userID)
selectedUsers = new Users([user])
- modal = new ActivateLicensesModal { @classroom, selectedUsers, users: @students }
- @openModalView(modal)
- modal.once 'redeem-users', -> document.location.reload()
- application.tracker?.trackEvent 'Classroom started enroll students', category: 'Courses'
-
+ @enrollStudents(selectedUsers)
+
onClickBulkEnroll: ->
courseID = @$('.bulk-course-select').val()
courseInstance = @courseInstances.findWhere({ courseID, classroomID: @classroom.id })
userIDs = @getSelectedStudentIDs().toArray()
selectedUsers = new Users(@students.get(userID) for userID in userIDs)
+ @enrollStudents(selectedUsers)
+
+ enrollStudents: (selectedUsers) ->
modal = new ActivateLicensesModal { @classroom, selectedUsers, users: @students }
@openModalView(modal)
- modal.once 'redeem-users', -> document.location.reload()
+ modal.once 'redeem-users', (enrolledUsers) =>
+ enrolledUsers.each (newUser) =>
+ user = @students.get(newUser.id)
+ if user
+ user.set(newUser.attributes)
+ null
application.tracker?.trackEvent 'Classroom started enroll students', category: 'Courses'
onClickExportStudentProgress: ->
@@ -201,10 +313,10 @@ module.exports = class TeacherClassView extends RootView
concepts = []
for course, index in @courses.models
instance = @courseInstances.findWhere({ courseID: course.id, classroomID: @classroom.id })
- if instance && instance.hasMember(student)
+ if instance and instance.hasMember(student)
# TODO: @levels collection is for the classroom, and not per-course
for level, index in @levels.models
- progress = @progressData.get({ classroom: @classroom, course: course, level: level, user: student })
+ progress = @state.get('progressData').get({ classroom: @classroom, course: course, level: level, user: student })
concepts.push(level.get('concepts') ? []) if progress?.completed
concepts = _.union(_.flatten(concepts))
conceptsString = _.map(concepts, (c) -> $.i18n.t("concepts." + c)).join(', ')
@@ -217,27 +329,37 @@ module.exports = class TeacherClassView extends RootView
encodedUri = encodeURI(csvContent)
window.open(encodedUri)
+
+ onClickAssign: (e) ->
+ userID = $(e.currentTarget).data('user-id')
+ user = @students.get(userID)
+ members = [userID]
+ courseID = $(e.currentTarget).data('course-id')
+
+ @assignCourse courseID, members
+
onClickBulkAssign: ->
courseID = @$('.bulk-course-select').val()
- courseInstance = @courseInstances.findWhere({ courseID, classroomID: @classroom.id })
selectedIDs = @getSelectedStudentIDs()
members = selectedIDs.filter((index, userID) =>
user = @students.get(userID)
user.isEnrolled()
).toArray()
-
- @assigningToUnenrolled = _.any selectedIDs, (userID) =>
+
+ assigningToUnenrolled = _.any selectedIDs, (userID) =>
not @students.get(userID).isEnrolled()
-
- @$('.cant-assign-to-unenrolled').toggleClass('visible', @assigningToUnenrolled)
-
- @assigningToNobody = selectedIDs.length is 0
- @$('.no-students-selected').toggleClass('visible', @assigningToNobody)
-
+
+ assigningToNobody = selectedIDs.length is 0
+
+ @state.set errors: { assigningToNobody, assigningToUnenrolled }
+
+ @assignCourse courseID, members
+
+ # TODO: Move this to the model. Use promises/callbacks?
+ assignCourse: (courseID, members) ->
+ courseInstance = @courseInstances.findWhere({ courseID, classroomID: @classroom.id })
if courseInstance
- courseInstance.addMembers members, {
- success: @onBulkAssignSuccess
- }
+ courseInstance.addMembers members
else
courseInstance = new CourseInstance {
courseID,
@@ -247,17 +369,11 @@ module.exports = class TeacherClassView extends RootView
}
@courseInstances.add(courseInstance)
courseInstance.save {}, {
- success: =>
- courseInstance.addMembers members, {
- success: @onBulkAssignSuccess
- }
+ success: ->
+ courseInstance.addMembers members
}
null
-
- onBulkAssignSuccess: =>
- @render() unless @destroyed
- noty text: $.i18n.t('teacher.assigned'), layout: 'center', type: 'information', killer: true, timeout: 5000
-
+
onClickSelectAll: (e) ->
e.preventDefault()
checkboxes = @$('.student-checkbox input')
@@ -278,11 +394,8 @@ module.exports = class TeacherClassView extends RootView
checkboxes = @$('.student-checkbox input')
@$('.select-all input').prop('checked', _.all(checkboxes, 'checked'))
- onChangeCourseSelect: (e) ->
- @selectedCourse = @courses.get($(e.currentTarget).val())
- @renderSelectors('.render-on-course-sync')
-
- classStats: ->
+ calculateClassStats: ->
+ return {} unless @classroom.sessions?.loaded and @students.loaded
stats = {}
playtime = 0
@@ -301,4 +414,5 @@ module.exports = class TeacherClassView extends RootView
enrolledUsers = @students.filter (user) -> user.get('coursePrepaidID')
stats.enrolledUsers = _.size(enrolledUsers)
+
return stats
diff --git a/app/views/courses/TeacherClassesView.coffee b/app/views/courses/TeacherClassesView.coffee
index e969d12e0..5a5f4e904 100644
--- a/app/views/courses/TeacherClassesView.coffee
+++ b/app/views/courses/TeacherClassesView.coffee
@@ -44,7 +44,7 @@ module.exports = class TeacherClassesView extends RootView
@courseInstances = new CourseInstances()
@courseInstances.fetchByOwner(me.id)
@supermodel.trackCollection(@courseInstances)
- @progressDotTemplate = require 'templates/courses/progress-dot'
+ @progressDotTemplate = require 'templates/teachers/hovers/progress-dot-whole-course'
# Level Sessions loaded after onLoaded to prevent race condition in calculateDots
diff --git a/app/views/play/modal/BuyGemsModal.coffee b/app/views/play/modal/BuyGemsModal.coffee
index 0f153a7f9..816715cce 100644
--- a/app/views/play/modal/BuyGemsModal.coffee
+++ b/app/views/play/modal/BuyGemsModal.coffee
@@ -6,7 +6,11 @@ SubscribeModal = require 'views/core/SubscribeModal'
Products = require 'collections/Products'
module.exports = class BuyGemsModal extends ModalView
- id: 'buy-gems-modal'
+ id:
+ if (me.get('preferredLanguage',true) || 'en-US').split('-')[0] == 'nl'
+ 'buy-gems-modal-nl'
+ else
+ 'buy-gems-modal'
template: template
plain: true
@@ -68,6 +72,9 @@ module.exports = class BuyGemsModal extends ModalView
onClickProductButton: (e) ->
@playSound 'menu-button-click'
productID = $(e.target).closest('button').val()
+ # Don't throw error when product is not found
+ if productID.length == 0
+ return
product = @products.findWhere { name: productID }
if application.isIPadApp
diff --git a/server/delighted.coffee b/server/delighted.coffee
index 78062f303..1e603b451 100644
--- a/server/delighted.coffee
+++ b/server/delighted.coffee
@@ -4,23 +4,23 @@ log = require 'winston'
DELIGHTED_EMAIL_DELAY = 1 * 86400 # in seconds
-module.exports.addDelightedUser = addDelightedUser = (user) ->
- return unless key = config.mail.delightedAPIKey
- #return unless user.isEmailSubscriptionEnabled 'generalNews' # Doesn't work? Just returns undefined...
- return if user.get('emails')?.generalNews?.enabled is false # Workaround.
- name = user.get('name')
- if first = user.get('firstName') and last = user.get('lastName')
- name = first + ' ' + last
+module.exports.addDelightedUser = addDelightedUser = (user, trialRequest) ->
+ props = trialRequest.get('properties')
+ name = props.firstName + ' ' + props.lastName
form =
- email: user.get('email')
+ email: props.email
name: name
delay: DELIGHTED_EMAIL_DELAY
properties:
- id: user.id
+ id: trialRequest.get('applicant')
locale: user.get('preferredLanguage')
testGroupNumber: user.get('testGroupNumber')
gender: user.get('gender')
lastLevel: user.get('lastLevel')
+ @postPeople(form)
+
+module.exports.postPeople = (form) ->
+ return unless key = config.mail.delightedAPIKey
request.post {uri: "https://#{key}:@api.delightedapp.com/v1/people.json", form: form}, (err, res, body) ->
return log.error 'Error sending Delighted request:', err or body if err or /error/i.test body
#log.info "Got DelightedApp response: #{body}"
diff --git a/server/middleware/classrooms.coffee b/server/middleware/classrooms.coffee
index 3e8980863..4f5a3f8c9 100644
--- a/server/middleware/classrooms.coffee
+++ b/server/middleware/classrooms.coffee
@@ -85,7 +85,7 @@ module.exports =
members = classroom.get('members') or []
members = members.slice(memberSkip, memberSkip + memberLimit)
dbqs = []
- select = 'state.complete level creator playtime'
+ select = 'state.complete level creator playtime changed dateFirstCompleted'
for member in members
dbqs.push(LevelSession.find({creator: member.toHexString()}).select(select).exec())
results = yield dbqs
diff --git a/server/middleware/trial-requests.coffee b/server/middleware/trial-requests.coffee
index ba8bbc11d..14b3fb1fb 100644
--- a/server/middleware/trial-requests.coffee
+++ b/server/middleware/trial-requests.coffee
@@ -6,6 +6,7 @@ database = require '../commons/database'
mongoose = require 'mongoose'
TrialRequest = require '../models/TrialRequest'
User = require '../models/User'
+delighted = require '../delighted'
module.exports =
post: wrap (req, res) ->
@@ -27,6 +28,7 @@ module.exports =
trialRequest.set 'type', attrs.type
database.validateDoc(trialRequest)
trialRequest = yield trialRequest.save()
+ delighted.addDelightedUser req.user, trialRequest
res.status(201).send(trialRequest.toObject({req: req}))
put: wrap (req, res) ->
diff --git a/server/models/LevelSession.coffee b/server/models/LevelSession.coffee
index 06846e3cc..29ecccda4 100644
--- a/server/models/LevelSession.coffee
+++ b/server/models/LevelSession.coffee
@@ -45,7 +45,8 @@ LevelSessionSchema.post 'init', (doc) ->
LevelSessionSchema.pre 'save', (next) ->
User = require './User' # Avoid mutual inclusion cycles
Level = require './Level'
- @set('changed', new Date())
+ now = new Date()
+ @set('changed', now)
id = @get('id')
initd = @previousStateInfo?
@@ -55,6 +56,7 @@ LevelSessionSchema.pre 'save', (next) ->
# Newly completed level
if not (initd and @previousStateInfo['state.complete']) and @get('state.complete')
+ @set('dateFirstCompleted', now)
Level.findOne({slug: levelID}).select('concepts -_id').lean().exec (err, level) ->
log.error err if err?
update = $inc: {'stats.gamesCompleted': 1}
diff --git a/server/models/Patch.coffee b/server/models/Patch.coffee
index 9aaabd981..d23c8dfe1 100644
--- a/server/models/Patch.coffee
+++ b/server/models/Patch.coffee
@@ -18,7 +18,14 @@ PatchSchema.pre 'save', (next) ->
return next(err)
collection = target.collection
- handler = require('../' + handlers[collection])
+ try
+ handler = require('../' + handlers[collection])
+ catch err
+ console.error 'Couldn\'t find handler for collection:', target.collection, 'from target', target
+ err = new Error('Server error.')
+ err.response = {message: '', property: 'target.id'}
+ err.code = 500
+ return next(err)
handler.getDocumentForIdOrSlug targetID, (err, document) =>
if err
err = new Error('Server error.')
diff --git a/server/models/User.coffee b/server/models/User.coffee
index b9aaaa71e..36ecaa9db 100644
--- a/server/models/User.coffee
+++ b/server/models/User.coffee
@@ -12,7 +12,6 @@ config = require '../../server_config'
stripe = require('stripe')(config.stripe.secretKey)
sendwithus = require '../sendwithus'
-delighted = require '../delighted'
UserSchema = new mongoose.Schema({
dateCreated:
@@ -238,7 +237,6 @@ UserSchema.methods.register = (done) ->
address: @get 'email'
sendwithus.api.send data, (err, result) ->
log.error "sendwithus post-save error: #{err}, result: #{result}" if err
- delighted.addDelightedUser @
@saveActiveUser 'register'
UserSchema.methods.hasSubscription = ->
diff --git a/server/queues/scoring/scoringUtils.coffee b/server/queues/scoring/scoringUtils.coffee
index 5eb2e52ec..2a8e0cd33 100644
--- a/server/queues/scoring/scoringUtils.coffee
+++ b/server/queues/scoring/scoringUtils.coffee
@@ -30,7 +30,7 @@ module.exports.sendResponseObject = (res, object) ->
module.exports.formatSessionInformation = (session) ->
heroID = if session.team is 'ogres' then 'hero-placeholder-1' else 'hero-placeholder'
submittedCode = {}
- submittedCode[heroID] = plan: LZString.compressToUTF16 session.submittedCode[heroID].plan
+ submittedCode[heroID] = plan: LZString.compressToUTF16(session.submittedCode[heroID]?.plan ? '')
_id: session._id
sessionID: session._id
diff --git a/spec/server/functional/trial_request.spec.coffee b/spec/server/functional/trial_request.spec.coffee
index 9e65c85fc..1020d22af 100644
--- a/spec/server/functional/trial_request.spec.coffee
+++ b/spec/server/functional/trial_request.spec.coffee
@@ -6,6 +6,7 @@ User = require '../../../server/models/User'
TrialRequest = require '../../../server/models/TrialRequest'
Prepaid = require '../../../server/models/Prepaid'
request = require '../request'
+delighted = require '../../../server/delighted'
fixture = {
type: 'subscription'
@@ -14,12 +15,18 @@ fixture = {
age: '14-17'
numStudents: 14
heardAbout: 'magical interwebs'
+ firstName: 'First'
+ lastName: 'Last'
}
describe 'POST /db/trial.request', ->
+
+ beforeEach utils.wrap (done) ->
+ yield utils.clearModels([User, TrialRequest])
+ spyOn(delighted, 'postPeople')
+ done()
it 'sets type and properties given', utils.wrap (done) ->
- yield utils.clearModels([User, TrialRequest])
@user = yield utils.initUser()
yield utils.loginUser(@user)
fixture.properties.email = @user.get('email')
@@ -32,7 +39,6 @@ describe 'POST /db/trial.request', ->
done()
it 'sets applicant to the user\'s id', utils.wrap (done) ->
- yield utils.clearModels([User, TrialRequest])
@user = yield utils.initUser()
yield utils.loginUser(@user)
fixture.properties.email = @user.get('email')
@@ -44,7 +50,6 @@ describe 'POST /db/trial.request', ->
done()
it 'creates trial request for anonymous user', utils.wrap (done) ->
- yield utils.clearModels([User, TrialRequest])
@user = yield utils.initUser({anonymous: true})
yield utils.loginUser(@user)
email = 'someone@test.com'
@@ -57,7 +62,6 @@ describe 'POST /db/trial.request', ->
done()
it 'prevents trial request for anonymous user with conflicting email', utils.wrap (done) ->
- yield utils.clearModels([User, TrialRequest])
@otherUser = yield utils.initUser()
@user = yield utils.initUser({anonymous: true})
yield utils.loginUser(@user)
@@ -66,7 +70,6 @@ describe 'POST /db/trial.request', ->
done()
it 'updates an existing TrialRequest if there is one', utils.wrap (done) ->
- yield utils.clearModels([User, TrialRequest])
@user = yield utils.initUser()
yield utils.loginUser(@user)
fixture.properties.email = @user.get('email')
@@ -87,6 +90,17 @@ describe 'POST /db/trial.request', ->
count = yield TrialRequest.count()
expect(count).toBe(1)
done()
+
+ it 'creates a delighted profile', utils.wrap (done) ->
+ @user = yield utils.initUser({gender: 'male', lastLevel: 'abcd', preferredLanguage: 'de', testGroupNumber: 1})
+ yield utils.loginUser(@user)
+ fixture.properties.email = @user.get('email')
+ [res, body] = yield request.postAsync(getURL('/db/trial.request'), { json: fixture })
+ expect(delighted.postPeople).toHaveBeenCalled()
+ args = delighted.postPeople.calls.argsFor(0)
+ expect(args[0].email).toBe(@user.get('email'))
+ expect(args[0].name).toBe('First Last')
+ done()
describe 'GET /db/trial.request', ->
diff --git a/test/app/factories.coffee b/test/app/factories.coffee
index 5165af654..50ad8a0c9 100644
--- a/test/app/factories.coffee
+++ b/test/app/factories.coffee
@@ -140,6 +140,13 @@ module.exports = {
name: _.string.humanize(_id)
}, attrs)
return new ThangType(attrs)
+
+ makePayment: (attrs, sources={}) ->
+ _id = _.uniqueId('payment_')
+ attrs = _.extend({}, {
+ _id
+ }, attrs)
+ return new ThangType(attrs)
}
diff --git a/test/app/views/account/PaymentsView.spec.coffee b/test/app/views/account/PaymentsView.spec.coffee
new file mode 100644
index 000000000..595bcbdef
--- /dev/null
+++ b/test/app/views/account/PaymentsView.spec.coffee
@@ -0,0 +1,16 @@
+PaymentsView = require 'views/account/PaymentsView'
+Payments = require 'collections/Payments'
+factories = require 'test/app/factories'
+
+describe 'PaymentsView', ->
+
+ it 'displays the payment "description" if the payment\'s productID is "custom"', ->
+ view = new PaymentsView()
+ payment = factories.makePayment({productID: 'custom', description: 'Custom Description' })
+ view.payments.fakeRequests[0].respondWith({
+ status: 200
+ responseText: new Payments([payment]).stringify()
+ })
+ view.render()
+ expect(_.contains(view.$el.text(), 'Custom Description')).toBe(true)
+ jasmine.demoEl(view.$('#site-content-area'))