Merge branch 'master' into production

This commit is contained in:
Matt Lott 2016-03-01 09:49:04 -08:00
commit a5630c97c0
16 changed files with 580 additions and 490 deletions

View file

@ -17,11 +17,10 @@ module.exports = class CocoRouter extends Backbone.Router
if window.serverConfig.picoCTF if window.serverConfig.picoCTF
return @routeDirectly 'play/CampaignView', ['picoctf'], {} return @routeDirectly 'play/CampaignView', ['picoctf'], {}
# Testing new home page # Testing new home page
group = me.getHomepageGroup() # group = me.getHomepageGroup()
return @routeDirectly('HomeView', [], { withTeacherNote: true }) if group is 'home-with-note' # return @routeDirectly('NewHomeView', [], { jumbotron: 'student' }) if group is 'new-home-student'
return @routeDirectly('NewHomeView', [], { jumbotron: 'student' }) if group is 'new-home-student' # return @routeDirectly('NewHomeView', [], { jumbotron: 'characters' }) if group is 'new-home-characters'
return @routeDirectly('NewHomeView', [], { jumbotron: 'characters' }) if group is 'new-home-characters' return @routeDirectly('NewHomeView', [])
return @routeDirectly('HomeView', [])
'about': go('AboutView') 'about': go('AboutView')

View file

@ -28,11 +28,17 @@ module.exports = class SpriteBuilder
anim.initialize(mode ? createjs.MovieClip.INDEPENDENT, startPosition ? 0, loops ? true, labels) anim.initialize(mode ? createjs.MovieClip.INDEPENDENT, startPosition ? 0, loops ? true, labels)
for tweenData in animData.tweens for tweenData in animData.tweens
tween = createjs.Tween tween = createjs.Tween
stopped = false
for func in tweenData for func in tweenData
args = _.cloneDeep(func.a) args = _.cloneDeep(func.a)
@dereferenceArgs(args, locals) @dereferenceArgs(args, locals)
tween = tween[func.n](args...) if tween[func.n]
anim.timeline.addTween(tween) tween = tween[func.n](args...)
else
# If we, say, skipped a shadow get(), then the wait() may not be present
stopped = true
break
anim.timeline.addTween(tween) unless stopped
anim.nominalBounds = new createjs.Rectangle(animData.bounds...) anim.nominalBounds = new createjs.Rectangle(animData.bounds...)
if animData.frameBounds if animData.frameBounds

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
no_ie: "CodeCombat läuft nicht im IE 8 oder älteren Browsern. Tut uns leid!" # Warning that only shows up in IE8 and older no_ie: "CodeCombat läuft nicht im IE 8 oder älteren Browsern. Tut uns leid!" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." # Warning that shows up on mobile devices no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." # Warning that shows up on mobile devices
play: "Spielen" # The big play button that opens up the campaign view. play: "Spielen" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses play_campaign_version: "Spiele die Kampagnen Version" # Shows up under big play button if you only play /courses
old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Tut uns leid!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Tut uns leid!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren." old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren."
ipad_browser: "Die schlechte Nachricht: CodeCombat läuft auf dem iPad nicht im Browser. Die gute Nachricht: Unsere iPad App wartet gerade auf die Zustimmung von Apple." ipad_browser: "Die schlechte Nachricht: CodeCombat läuft auf dem iPad nicht im Browser. Die gute Nachricht: Unsere iPad App wartet gerade auf die Zustimmung von Apple."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
nav: nav:
play: "Spielen" # The top nav bar entry where players choose which levels to play play: "Spielen" # The top nav bar entry where players choose which levels to play
community: "Community" community: "Community"
# courses: "Courses" courses: "Kurse"
editor: "Editor" editor: "Editor"
blog: "Blog" blog: "Blog"
forum: "Forum" forum: "Forum"
@ -75,7 +75,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
subscription_required: "Abonnement benötigt" subscription_required: "Abonnement benötigt"
anonymous: "Anonymer Spieler" anonymous: "Anonymer Spieler"
level_difficulty: "Schwierigkeit: " level_difficulty: "Schwierigkeit: "
# play_classroom_version: "Play Classroom Version" # Choose a level in campaign version that you also can play in one of your courses play_classroom_version: "Spiele die Klassenraum-Version" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "Anfängerkampagne" campaign_beginner: "Anfängerkampagne"
awaiting_levels_adventurer_prefix: "Wir veröffentlichen fünf Levels pro Woche." # {change} awaiting_levels_adventurer_prefix: "Wir veröffentlichen fünf Levels pro Woche." # {change}
awaiting_levels_adventurer: "Registriere dich als ein Abenteurer" awaiting_levels_adventurer: "Registriere dich als ein Abenteurer"
@ -114,9 +114,9 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
log_in: "mit Passwort einloggen" log_in: "mit Passwort einloggen"
required: "Du musst dich vorher einloggen diesen Dienst zu nutzen" required: "Du musst dich vorher einloggen diesen Dienst zu nutzen"
login_switch: "Hast du schon einen Account?" login_switch: "Hast du schon einen Account?"
# school_name: "School Name and City" school_name: "Schulname und Stadt"
# optional: "optional" optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "Beispiel Gymnasium, Musterdorf, DE"
recover: recover:
recover_account_title: "Account-Wiederherstellung" recover_account_title: "Account-Wiederherstellung"
@ -166,7 +166,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
withdrawn: "zurückgezogen" withdrawn: "zurückgezogen"
accept: "Akzeptieren" accept: "Akzeptieren"
reject: "Verwerfen" reject: "Verwerfen"
# withdraw: "Withdraw" withdraw: "Zurückziehen"
submitter: "Übermittler" submitter: "Übermittler"
submitted: "Übermittelt" submitted: "Übermittelt"
commit_msg: "Übertrage Nachricht" commit_msg: "Übertrage Nachricht"
@ -221,10 +221,10 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
years: "Jahre" years: "Jahre"
play_level: play_level:
# completed_level: "Completed Level:" completed_level: "Abgeschlossene Level:"
# course: "Course:" course: "Kurse:"
done: "Fertig" done: "Fertig"
# next_level: "Next Level:" next_level: "Nächster Level:"
next_game: "Nächstes Spiel" next_game: "Nächstes Spiel"
show_menu: "Menü anzeigen" show_menu: "Menü anzeigen"
home: "Startseite" # Not used any more, will be removed soon. home: "Startseite" # Not used any more, will be removed soon.
@ -287,9 +287,9 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
time_goto: "Gehe zu:" time_goto: "Gehe zu:"
non_user_code_problem_title: "Level konnte nicht geladen werden" non_user_code_problem_title: "Level konnte nicht geladen werden"
infinite_loop_title: "Unendliche Schleife entdeckt" infinite_loop_title: "Unendliche Schleife entdeckt"
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know." infinite_loop_description: "Der eingegebene Code für die Erschaffung dieser Welt findet kein Ende.Er ist entwerder sehr langsam oder hat eine unendliche Schleife. Oder es gibt einen Bug. Du kannst entweder versuchen den Code nochmal zu start oder den Code zum Ursprungscode zurücksetzen. Falls das nicht hilft, dann lass es uns bitte wissen."
# check_dev_console: "You can also open the developer console to see what might be going wrong." check_dev_console: "Du kannst auch die Entwicklerkonsole öffnen um zu sehen was schief lief."
# check_dev_console_link: "(instructions)" check_dev_console_link: "(Instruktionen)"
infinite_loop_try_again: "Erneut versuchen" infinite_loop_try_again: "Erneut versuchen"
infinite_loop_reset_level: "Level zurücksetzen" infinite_loop_reset_level: "Level zurücksetzen"
infinite_loop_comment_out: "Meinen Code auskommentieren" infinite_loop_comment_out: "Meinen Code auskommentieren"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
tip_scrub_shortcut: "Spule vor und zurück mit Strg+[ und Strg+]" # {change} tip_scrub_shortcut: "Spule vor und zurück mit Strg+[ und Strg+]" # {change}
tip_guide_exists: "Klicke auf die Anleitung am oberen Ende der Seite für nützliche Informationen." tip_guide_exists: "Klicke auf die Anleitung am oberen Ende der Seite für nützliche Informationen."
tip_open_source: "CodeCombat ist 100% quelloffen!" tip_open_source: "CodeCombat ist 100% quelloffen!"
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!" tip_tell_friends: "Gefällt dir CodeCombat? Dann erzähl es deinen Freunden!"
tip_beta_launch: "CodeCombat startete seine Beta im Oktober 2013." tip_beta_launch: "CodeCombat startete seine Beta im Oktober 2013."
tip_think_solution: "Denke über die Lösung nach, nicht über das Problem." tip_think_solution: "Denke über die Lösung nach, nicht über das Problem."
tip_theory_practice: "In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis schon. - Yogi Berra" tip_theory_practice: "In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis schon. - Yogi Berra"
@ -339,10 +339,10 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# tip_hate_computers: "That's the thing about people who think they hate computers. What they really hate is lousy programmers. - Larry Niven" # tip_hate_computers: "That's the thing about people who think they hate computers. What they really hate is lousy programmers. - Larry Niven"
tip_open_source_contribute: "Du kannst dabei helfen, CodeCombat zu verbessern." tip_open_source_contribute: "Du kannst dabei helfen, CodeCombat zu verbessern."
# tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch" # tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch"
# tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus" tip_free_your_mind: "Mach dich von allem frei, Neo. Angst, Zweifel, Misstrauen. Du musst deinen Geist befreien! - Morpheus"
# tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha" tip_strong_opponents: "Auch die stärksten Gegner haben immer ihre Schwächen. - Itachi Uchiha"
# tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen." # tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen."
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson" tip_solve_then_write: "Als Erstes, löse dass Problem. Dann, schreibe den Code. - John Johnson"
game_menu: game_menu:
inventory_tab: "Inventar" inventory_tab: "Inventar"
@ -407,10 +407,10 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
feature4: "<strong>{{gems}} Bonusedelsteine</strong> jeden Monat!" feature4: "<strong>{{gems}} Bonusedelsteine</strong> jeden Monat!"
feature5: "Videoanleitungen" feature5: "Videoanleitungen"
feature6: "Premium Emailsupport" feature6: "Premium Emailsupport"
# feature7: "Private <strong>Clans</strong>" feature7: "Private <strong>Klans</strong>"
free: "Kostenlos" free: "Kostenlos"
month: "Monat" month: "Monat"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." must_be_logged: "Du musst eingeloggt sein. Bitte kreiere einen Account oder logge dich oben im Menü ein."
subscribe_title: "Abonnieren" subscribe_title: "Abonnieren"
unsubscribe: "Abmelden" unsubscribe: "Abmelden"
confirm_unsubscribe: "Abmeldung bestätigen" confirm_unsubscribe: "Abmeldung bestätigen"
@ -429,7 +429,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
parent_email_sent: "Email gesendet!" parent_email_sent: "Email gesendet!"
parent_email_title: "Wie lautet die Emailadresse deiner Eltern?" parent_email_title: "Wie lautet die Emailadresse deiner Eltern?"
parents: "Für Eltern" parents: "Für Eltern"
parents_title: "Liebe Eltern: Ihr kind erlernt das Programmieren. Wollen Sie es nicht dabei unterstützen?" parents_title: "Liebe Eltern: Ihr Kind erlernt das Programmieren. Wollen Sie es nicht dabei unterstützen?"
parents_blurb1: "Ihr Kind hat __nLevels__ Level gemeistert und dabei Grundkenntnisse des Programmierens erlangt. Fördern Sie ihr Kind weiterhin, indem sie mit einem Abonnement weitere Herausforderungen freischalten." parents_blurb1: "Ihr Kind hat __nLevels__ Level gemeistert und dabei Grundkenntnisse des Programmierens erlangt. Fördern Sie ihr Kind weiterhin, indem sie mit einem Abonnement weitere Herausforderungen freischalten."
parents_blurb1a: "Das Programmieren entwickelt sich zunehmend zu einem Grundwerkzeug, dass in immer mehr Berufen benötigt wird und ohne Zweifel sich im Leben als eine sehr nützliche Fähigkeit erweisen wird." parents_blurb1a: "Das Programmieren entwickelt sich zunehmend zu einem Grundwerkzeug, dass in immer mehr Berufen benötigt wird und ohne Zweifel sich im Leben als eine sehr nützliche Fähigkeit erweisen wird."
parents_blurb2: "Für {{price}} im Monat, bekommt Ihr Kind jede Woche neue Herausforderungen sowie persönlichen Email Support von erfahrenen Programmierern." parents_blurb2: "Für {{price}} im Monat, bekommt Ihr Kind jede Woche neue Herausforderungen sowie persönlichen Email Support von erfahrenen Programmierern."
@ -499,8 +499,8 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
skill_docs: skill_docs:
writable: "beschreibbar" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "beschreibbar" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "schreibgeschützt" read_only: "schreibgeschützt"
# action: "Action" action: "Aktion"
# spell: "Spell" spell: "Zaubersprüche"
action_name: "Name" action_name: "Name"
action_cooldown: "Benötigt" action_cooldown: "Benötigt"
action_specific_cooldown: "Cooldown" action_specific_cooldown: "Cooldown"
@ -582,9 +582,9 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
who_for_1: "Wir empfehlen CodeCombat Schülern im Alter von 9 Jahren und älter. Es werden keine Vorkenntnisse vorausgesetzt." # {change} who_for_1: "Wir empfehlen CodeCombat Schülern im Alter von 9 Jahren und älter. Es werden keine Vorkenntnisse vorausgesetzt." # {change}
who_for_2: "Wir haben CodeCombat so gestalltet, dass es sowohl Jungen als auch Mädchen ansprechend finden." # {change} who_for_2: "Wir haben CodeCombat so gestalltet, dass es sowohl Jungen als auch Mädchen ansprechend finden." # {change}
more_info_title: "Wo kann ich mehr Information finden?" more_info_title: "Wo kann ich mehr Information finden?"
# more_info_1: "Our" more_info_1: "Unser"
# more_info_2: "teachers forum" more_info_2: "Lehrerforum"
# more_info_3: "is a good place to connect with fellow educators who are using CodeCombat." more_info_3: "ist eine gute Anlaufstelle, um mit anderen Lehrer in Kontakt zu treten, die CodeCombat benutzen."
teachers_survey: teachers_survey:
title: "Lehrerumfrage" title: "Lehrerumfrage"
@ -606,16 +606,16 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# description_2: "teachers" # description_2: "teachers"
# description_3: "page." # description_3: "page."
# description_4: "Please fill out this quick survey and well email you setup instructions." # description_4: "Please fill out this quick survey and well email you setup instructions."
# email: "Email Address" email: "Email Addresse"
# school: "Name of School" school: "Name der Schule"
# location: "Name of City" location: "Name der Stadt"
# age_students: "How old are your students?" age_students: "Wie alt sind ihre Schüler?"
# under: "Under" under: "Unter"
# other: "Other:" other: "Andere:"
# amount_students: "How many students do you teach?" amount_students: "Wieviele Schüler unterrichten Sie?"
# hear_about: "How did you hear about CodeCombat?" hear_about: "Wie sind Sie auf CodeCombat aufmerksam geworden?"
# fill_fields: "Please fill out all fields." fill_fields: "Bitte füllen Sie alle Felder aus."
# thanks: "Thanks! We'll send you setup instructions shortly." thanks: "Danke! Wir werden ihnen bald Setup-Instruktionen zuschicken."
versions: versions:
save_version_title: "Neue Version speichern" save_version_title: "Neue Version speichern"
@ -660,7 +660,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
password_tab: "Passwort" password_tab: "Passwort"
emails_tab: "Emails" emails_tab: "Emails"
admin: "Admin" admin: "Admin"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "Klicken Sie hier um ihr Abo zu verwalten."
new_password: "Neues Passwort" new_password: "Neues Passwort"
new_password_verify: "Passwort verifizieren" new_password_verify: "Passwort verifizieren"
type_in_email: "Email eingeben um das Löschen des Accounts zu bestätigen" type_in_email: "Email eingeben um das Löschen des Accounts zu bestätigen"
@ -691,7 +691,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
keyboard_shortcuts: "Tastaturkürzel" keyboard_shortcuts: "Tastaturkürzel"
space: "Leertaste" space: "Leertaste"
enter: "Eingabetaste" enter: "Eingabetaste"
# press_enter: "press enter" press_enter: "Drück die Eingabetaste"
escape: "Escape" escape: "Escape"
shift: "Umschalttaste" shift: "Umschalttaste"
run_code: "Starte aktuellen Code." run_code: "Starte aktuellen Code."
@ -718,7 +718,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
article_editor_prefix: "Hast du einen Fehler in unseren Dokus gefunden? Willst du Anleitungen für deine Kreationen erstellen? Schau dir den" article_editor_prefix: "Hast du einen Fehler in unseren Dokus gefunden? Willst du Anleitungen für deine Kreationen erstellen? Schau dir den"
article_editor_suffix: "und hilf CodeCombat Spielern, das meiste aus ihrer Spielzeit herauszuholen." article_editor_suffix: "und hilf CodeCombat Spielern, das meiste aus ihrer Spielzeit herauszuholen."
find_us: "Finde uns auf diesen Seiten" find_us: "Finde uns auf diesen Seiten"
# social_github: "Check out all our code on GitHub" social_github: "Schau dir all unseren Code auf GitHub an"
social_blog: "Lese den CodeCombat Blog auf Sett" social_blog: "Lese den CodeCombat Blog auf Sett"
social_discource: "Schließe dich den Diskussionen in unserem Discourse Forum an" social_discource: "Schließe dich den Diskussionen in unserem Discourse Forum an"
social_facebook: "Like CodeCombat auf Facebook" social_facebook: "Like CodeCombat auf Facebook"
@ -727,51 +727,51 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
social_hipchat: "Chatte mit uns in unserem öffentlichen CodeCombat Slack Raum" social_hipchat: "Chatte mit uns in unserem öffentlichen CodeCombat Slack Raum"
contribute_to_the_project: "Trage zu diesem Projekt bei" contribute_to_the_project: "Trage zu diesem Projekt bei"
# clans: clans:
# clan: "Clan" clan: "Clan"
# clans: "Clans" clans: "Clans"
# new_name: "New clan name" new_name: "Neuer Clanname"
# new_description: "New clan description" new_description: "Neue Clanbeschreibung"
# make_private: "Make clan private" make_private: "Mach deinen Clan private"
# subs_only: "subscribers only" subs_only: "Nur für Abonnenten"
# create_clan: "Create New Clan" create_clan: "Erstelle einen neuen Clan"
# private_preview: "Preview" private_preview: "Vorschau"
# private_clans: "Private Clans" private_clans: "Private Clans"
# public_clans: "Public Clans" public_clans: "Öffentliche Clans"
# my_clans: "My Clans" my_clans: "Meine Clans"
# clan_name: "Clan Name" clan_name: "Clanname"
# name: "Name" name: "Name"
# chieftain: "Chieftain" chieftain: "Häuptling"
# type: "Type" # type: "Type"
# edit_clan_name: "Edit Clan Name" edit_clan_name: "Clannamen bearbeiten"
# edit_clan_description: "Edit Clan Description" edit_clan_description: "Clanbeschreibung bearbeiten"
# edit_name: "edit name" edit_name: "Namen bearbeiten"
# edit_description: "edit description" edit_description: "Beschreibung bearbeiten"
# private: "(private)" private: "(privat)"
# summary: "Summary" summary: "Zusammenfassung"
# average_level: "Average Level" average_level: "Leveldurchschnitt"
# average_achievements: "Average Achievements" average_achievements: "Errungenschaftsdurchschnitt"
# delete_clan: "Delete Clan" delete_clan: "Clan löschen"
# leave_clan: "Leave Clan" leave_clan: "Clan verlassen"
# join_clan: "Join Clan" join_clan: "Clan beitreten"
# invite_1: "Invite:" invite_1: "Einladen:"
# invite_2: "*Invite players to this Clan by sending them this link." invite_2: "*Lade Spieler zu diesem Clan ein, indem du ihnen diesen Links sendest."
# members: "Members" members: "Mitglieder"
# progress: "Progress" progress: "Fortschritt"
# not_started_1: "not started" not_started_1: "nicht gestartet"
# started_1: "started" started_1: "gestartet"
# complete_1: "complete" complete_1: "abgeschlossen"
# exp_levels: "Expand levels" # exp_levels: "Expand levels"
# rem_hero: "Remove Hero" rem_hero: "Held entfernen"
# status: "Status" status: "Status"
# complete_2: "Complete" complete_2: "Abgeschlossen"
# started_2: "Started" started_2: "Gestartet"
# not_started_2: "Not Started" not_started_2: "Nicht gestartet"
# view_solution: "Click to view solution." view_solution: "Klicke um die Lösung zu sehen."
# view_attempt: "Click to view attempt." # view_attempt: "Click to view attempt."
# latest_achievement: "Latest Achievement" latest_achievement: "Letzte Errungenschaft"
# playtime: "Playtime" playtime: "Spielzeit"
# last_played: "Last played" last_played: "Zuletzt gespielt"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances." # leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances."
# track_concepts1: "Track concepts" # track_concepts1: "Track concepts"
# track_concepts2a: "learned by each student" # track_concepts2a: "learned by each student"
@ -1071,7 +1071,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
level_tab_thangs_all: "Alle" level_tab_thangs_all: "Alle"
level_tab_thangs_conditions: "Startbedingungen" level_tab_thangs_conditions: "Startbedingungen"
level_tab_thangs_add: "Thangs hinzufügen" level_tab_thangs_add: "Thangs hinzufügen"
# level_tab_thangs_search: "Search thangs" level_tab_thangs_search: "Thangs suchen"
add_components: "Kommentar hinzufügen" add_components: "Kommentar hinzufügen"
component_configs: "Komponenten Konfiguration" component_configs: "Komponenten Konfiguration"
config_thang: "Doppelklicke, um Thang zu konfigurieren" config_thang: "Doppelklicke, um Thang zu konfigurieren"
@ -1274,7 +1274,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
no_achievements: "Noch keine Erfolge verdient." no_achievements: "Noch keine Erfolge verdient."
favorite_prefix: "Lieblingssprache ist " favorite_prefix: "Lieblingssprache ist "
favorite_postfix: "." favorite_postfix: "."
# not_member_of_clans: "Not a member of any clans yet." not_member_of_clans: "Noch kein Mitglied eines Clans."
achievements: achievements:
last_earned: "Zuletzt erhalten" last_earned: "Zuletzt erhalten"
@ -1354,7 +1354,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
bad_input: "Falsche Eingabe." bad_input: "Falsche Eingabe."
server_error: "Server Fehler." server_error: "Server Fehler."
unknown: "Unbekannter Fehler." unknown: "Unbekannter Fehler."
# error: "ERROR" error: "FEHLER"
resources: resources:
sessions: "Sessions" sessions: "Sessions"
@ -1396,7 +1396,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
user_remarks: "Benutzerkommentare" user_remarks: "Benutzerkommentare"
versions: "Versionen" versions: "Versionen"
items: "Gegenstände" items: "Gegenstände"
# hero: "Hero" hero: "Held"
heroes: "Helden" heroes: "Helden"
achievement: "Achievement" achievement: "Achievement"
clas: "CLAs" clas: "CLAs"
@ -1406,46 +1406,46 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
campaigns: "Kampagne" campaigns: "Kampagne"
poll: "Umfrage" poll: "Umfrage"
user_polls_record: "Umfrageergebnisse" user_polls_record: "Umfrageergebnisse"
# course: "Course" course: "Kurs"
# courses: "Courses" courses: "Kurse"
# course_instance: "Course Instance" course_instance: "Kursinstanz"
# course_instances: "Course Instances" course_instances: "Kursinstanzen"
# classroom: "Classroom" classroom: "Klassenraum"
# classrooms: "Classrooms" classrooms: "Klassenräume"
# clan: "Clan" clan: "Clan"
# clans: "Clans" clans: "Clans"
# members: "Members" members: "Mitglieder"
# users: "Users" users: "Benutzer"
# concepts: concepts:
# advanced_strings: "Advanced Strings" advanced_strings: "Erweiterte Strings"
# algorithms: "Algorithms" algorithms: "Algorithmen"
# arguments: "Arguments" arguments: "Argumente"
# arithmetic: "Arithmetic" arithmetic: "Arithmetic"
# arrays: "Arrays" arrays: "Arrays"
# basic_syntax: "Basic Syntax" basic_syntax: "Grundlegende Syntax"
# boolean_logic: "Boolean Logic" boolean_logic: "Boole'sche Logik"
# break_statements: "Break Statements" break_statements: "Break Anweisungen"
# classes: "Classes" classes: "Klassen"
# continue_statements: "Continue Statements" continue_statements: "Continue Anweisungen"
# for_loops: "For Loops" for_loops: "For Schleifen"
# functions: "Functions" functions: "Funktionen"
# graphics: "Graphics" graphics: "Graphiken"
# if_statements: "If Statements" if_statements: "If Anweisungen"
# input_handling: "Input Handling" input_handling: "Eingabebehandlung"
# math_operations: "Math Operations" math_operations: "Mathematische Operationen"
# object_literals: "Object Literals" # object_literals: "Object Literals"
# parameters: "Parameters" parameters: "Parameter"
# strings: "Strings" strings: "Strings"
# variables: "Variables" variables: "Variablen"
# vectors: "Vectors" vectors: "Vektoren"
# while_loops: "Loops" while_loops: "while-Schleifen"
# recursion: "Recursion" recursion: "Rekursionen"
delta: delta:
added: "hinzugefügt" added: "hinzugefügt"
modified: "modifiziert" modified: "modifiziert"
# not_modified: "Not Modified" not_modified: "nicht modifiziert"
deleted: "gelöscht" deleted: "gelöscht"
moved_index: "Verschobener Index" moved_index: "Verschobener Index"
text_diff: "Text Diff" text_diff: "Text Diff"

View file

@ -14,6 +14,66 @@
for_developers: "For Developers" # Not currently shown on home page. for_developers: "For Developers" # Not currently shown on home page.
or_ipad: "Or download for iPad" or_ipad: "Or download for iPad"
new_home:
slogan: "The most engaging game for learning programming."
classroom_edition: "Classroom Edition:"
learn_to_code: "Learn to code:"
teacher: "Teacher"
student: "Student"
play_now: "Play Now"
im_a_teacher: "I'm a Teacher"
im_a_student: "I'm a Student"
learn_more: "Learn more"
classroom_in_a_box: "A classroom in-a-box for teaching computer science."
codecombat_is: "CodeCombat is a platform for students to learn computer science while playing through a real game."
our_courses: "Our courses have been specifically playtested to excel in a classroom setting, even by teachers with little to no prior programming experience."
designed_with: "Designed with teachers in mind"
real_code: "Real, typed code"
from_the_first_level: "from the first level"
getting_students: "Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure."
educator_resources: "Educator resources"
course_guides: "and course guides"
teaching_computer_science: "Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds."
accessible_to: "Accessible to"
everyone: "everyone"
democratizing: "Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code."
forgot_learning: "I think they actually forgot that they were actually learning something."
wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school."
why_games: "Why is learning through games important?"
games_reward: "Games reward the productive struggle."
encourage: "Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn."
excel: "Games excel at rewarding"
struggle: "productive struggle"
kind_of_struggle: "the kind of struggle that results in learning thats engaging and"
motivating: "motivating"
not_tedious: "not tedious."
gaming_is_good: "Studies suggest gaming is good for childrens brains. (its true!)"
game_based: "When game-based learning systems are"
compared: "compared"
conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and"
perform_at_higher_level: "perform at a higher level of achievement"
feedback: "Games also provide real-time feedback that allows students to adjust their solution path and understand concepts more holistically, instead of being limited to just “correct” or “incorrect” answers."
real_game: "A real game, played with real coding."
great_game: "A great game is more than just badges and achievements - its about a players journey, well-designed puzzles, and the ability to tackle challenges with agency and confidence."
agency: "CodeCombat is a game that gives players that agency and confidence with our robust typed code engine, which helps beginner and advanced students alike write proper, valid code."
curious: "Curious? Request a demo and we'll show you the ropes"
create_class: "Or create a class and see it for yourself!"
request_demo: "Request a Demo"
create_a_class: "Create a Class"
have_an_account: "Already have an account?"
logged_in_as: "You are currently logged in as"
view_my_classes: "View my classes"
computer_science: "Computer science courses for all ages"
show_me_lesson_time: "Show me lesson time estimates for:"
curriculum: "Total curriculum hours:"
ffa: "Free for all students"
lesson_time: "Lesson time:"
coming_soon: "Coming soon!"
courses_available_in: "Courses are available in JavaScript, Python, and Java (coming soon!)"
boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike."
winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable."
run_class:"Everything you need to run a computer science class in your school today, no CS background required."
nav: nav:
play: "Levels" # The top nav bar entry where players choose which levels to play play: "Levels" # The top nav bar entry where players choose which levels to play
community: "Community" community: "Community"
@ -348,7 +408,10 @@
tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha" tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha"
tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen." tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen."
tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson" tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson"
tip_compiler_ignores_comments: "Sometimes I think that the compiler ignores my comments."
tip_understand_recursion: "The only way to understand recursion is to understand recursion."
tip_life_and_polymorphism: "Open Source is like a totally polymorphic heterogeneous structure: All types are welcome."
game_menu: game_menu:
inventory_tab: "Inventory" inventory_tab: "Inventory"
save_load_tab: "Save/Load" save_load_tab: "Save/Load"
@ -554,8 +617,8 @@
careers_link: "Careers" careers_link: "Careers"
press_link: "Press" press_link: "Press"
mission_title: "Our mission: make programming accessible to every student on Earth." mission_title: "Our mission: make programming accessible to every student on Earth."
mission_description_1: "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." mission_description_1: "<strong>Programming is magic</strong>. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using <strong>typed code</strong>." # {change}
mission_description_2: "As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to every student, because everyone should have the chance to learn the magic of programming." mission_description_2: "As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming." # {change}
team_title: "Meet the CodeCombat team" team_title: "Meet the CodeCombat team"
team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team." team_values: "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: "Cofounder, CEO" nick_title: "Cofounder, CEO"

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
no_ie: "A CodeCombat nem támogatja az Internet Explorer 8, vagy korábbi verzióit. Bocsi!" # Warning that only shows up in IE8 and older no_ie: "A CodeCombat nem támogatja az Internet Explorer 8, vagy korábbi verzióit. Bocsi!" # Warning that only shows up in IE8 and older
no_mobile: "A CodeCombat nem mobil eszközökre lett tervezve. Valószínűleg nem működik helyesen." # Warning that shows up on mobile devices no_mobile: "A CodeCombat nem mobil eszközökre lett tervezve. Valószínűleg nem működik helyesen." # Warning that shows up on mobile devices
play: "Játssz!" # The big play button that opens up the campaign view. play: "Játssz!" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses play_campaign_version: "Játssz a kampányban!" # Shows up under big play button if you only play /courses
old_browser: "Hohó, a böngésződ már túl régi ahhoz, hogy a CodeCombat futhasson rajta. Bocsi!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "Hohó, a böngésződ már túl régi ahhoz, hogy a CodeCombat futhasson rajta. Bocsi!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Megpróbálhatod éppen, da valószínűleg nem fog működni.." old_browser_suffix: "Megpróbálhatod éppen, da valószínűleg nem fog működni.."
ipad_browser: "Rossz hír. CodeCombat nem fut iPadon böngészőben. Jó hír: a hivatalos iPad applikációnk csak az Apple jóváhagyására vár." ipad_browser: "Rossz hír. CodeCombat nem fut iPadon böngészőben. Jó hír: a hivatalos iPad applikációnk csak az Apple jóváhagyására vár."
@ -17,7 +17,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
nav: nav:
play: "Játék" # The top nav bar entry where players choose which levels to play play: "Játék" # The top nav bar entry where players choose which levels to play
community: "Közösség" community: "Közösség"
# courses: "Courses" courses: "Kurzusok"
editor: "Szerkesztő" editor: "Szerkesztő"
blog: "Blog" blog: "Blog"
forum: "Fórum" forum: "Fórum"
@ -33,11 +33,11 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
contact: "Kapcsolat" contact: "Kapcsolat"
twitter_follow: "Követés" twitter_follow: "Követés"
teachers: "Tanárok" teachers: "Tanárok"
# careers: "Careers" careers: "Karier"
modal: modal:
close: "Mégse" close: "Mégse"
okay: "OK" okay: "O"
not_found: not_found:
page_not_found: "Az oldal nem található" page_not_found: "Az oldal nem található"
@ -52,7 +52,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
play: play:
play_as: "Játssz mint" # Ladder page play_as: "Játssz mint" # Ladder page
# compete: "Compete!" # Course details page compete: "Mérkőzz!" # Course details page
spectate: "Néző" # Ladder page spectate: "Néző" # Ladder page
players: "Játékosok" # Hover over a level on /play players: "Játékosok" # Hover over a level on /play
hours_played: "Játékidő" # Hover over a level on /play hours_played: "Játékidő" # Hover over a level on /play
@ -68,14 +68,14 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
achievements: "Eredmények" # Tooltip on achievement list button from /play achievements: "Eredmények" # Tooltip on achievement list button from /play
account: "Fiók" # Tooltip on account button from /play account: "Fiók" # Tooltip on account button from /play
settings: "Beállítások" # Tooltip on settings button from /play settings: "Beállítások" # Tooltip on settings button from /play
# poll: "Poll" # Tooltip on poll button from /play poll: "Kérdőív" # Tooltip on poll button from /play
next: "Következő" # Go from choose hero to choose inventory before playing a level next: "Következő" # Go from choose hero to choose inventory before playing a level
change_hero: "Hős váltás" # Go back from choose inventory to choose hero change_hero: "Hős váltás" # Go back from choose inventory to choose hero
buy_gems: "Vásárolj Drágköveket" buy_gems: "Vásárolj Drágköveket"
subscription_required: "Előfizetést igényel" subscription_required: "Előfizetést igényel"
anonymous: "Anonímusz Játékos" anonymous: "Anonímusz Játékos"
level_difficulty: "Nehézség: " level_difficulty: "Nehézség: "
# play_classroom_version: "Play Classroom Version" # Choose a level in campaign version that you also can play in one of your courses play_classroom_version: "Osztálytermi változat" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "Kezdő Kampány" campaign_beginner: "Kezdő Kampány"
awaiting_levels_adventurer_prefix: "Minden héten öt új pályát teszünk elérhetővé." # {change} awaiting_levels_adventurer_prefix: "Minden héten öt új pályát teszünk elérhetővé." # {change}
awaiting_levels_adventurer: "Jelentkezz fel mint Kalandor" awaiting_levels_adventurer: "Jelentkezz fel mint Kalandor"
@ -114,9 +114,9 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
log_in: "Belépés meglévő fiókkal" log_in: "Belépés meglévő fiókkal"
required: "Csak akkor mehetsz arra, ha már bejelentkeztél." required: "Csak akkor mehetsz arra, ha már bejelentkeztél."
login_switch: "Már van fiókod?" login_switch: "Már van fiókod?"
# school_name: "School Name and City" school_name: "Iskolád neve és városa"
# optional: "optional" optional: "nem kötelező"
# school_name_placeholder: "Example High School, Springfield, IL" school_name_placeholder: "Példa Suli, Abaszentfűzikeresztkút"
recover: recover:
recover_account_title: "Meglévő fiók visszaállítása" recover_account_title: "Meglévő fiók visszaállítása"
@ -152,7 +152,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
unwatch: "Követés vége" unwatch: "Követés vége"
submit_patch: "Kiegészítés bemutatása" submit_patch: "Kiegészítés bemutatása"
submit_changes: "Változások véglegesítése" submit_changes: "Változások véglegesítése"
# save_changes: "Save Changes" save_changes: "Változások mentése"
general: general:
and: "és" and: "és"
@ -164,9 +164,9 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
accepted: "Elfogadva" accepted: "Elfogadva"
rejected: "Elutasítva" rejected: "Elutasítva"
withdrawn: "Visszavon" withdrawn: "Visszavon"
# accept: "Accept" accept: "Eldogad"
# reject: "Reject" reject: "Visszautasít"
# withdraw: "Withdraw" withdraw: "Vissazvon"
submitter: "Beküldő" submitter: "Beküldő"
submitted: "Beküldött" submitted: "Beküldött"
commit_msg: "Üzenet feladása" commit_msg: "Üzenet feladása"
@ -221,12 +221,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
years: "évek" years: "évek"
play_level: play_level:
# completed_level: "Completed Level:" completed_level: "Teljesített pálya:"
# course: "Course:" # course: "Course:"
done: "Kész" done: "Kész"
# next_level: "Next Level:" next_level: "Következő pálya:"
# next_game: "Next game" next_game: "Következő játék"
# show_menu: "Show game menu" show_menu: "Játék Menü"
home: "Kezdőlap" # Not used any more, will be removed soon. home: "Kezdőlap" # Not used any more, will be removed soon.
level: "Pálya" # Like "Level: Dungeons of Kithgard" level: "Pálya" # Like "Level: Dungeons of Kithgard"
skip: "Ugrás" skip: "Ugrás"
@ -256,14 +256,14 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
victory_saving_progress: "Folyamat mentése" victory_saving_progress: "Folyamat mentése"
victory_go_home: "Vissza a kezdőoldalra" victory_go_home: "Vissza a kezdőoldalra"
victory_review: "Mondd el a véleményedet!" victory_review: "Mondd el a véleményedet!"
# victory_review_placeholder: "How was the level?" victory_review_placeholder: "Milyen volt a pálya?"
victory_hour_of_code_done: "Készen vagy?" victory_hour_of_code_done: "Készen vagy?"
victory_hour_of_code_done_yes: "Igen, ez volt életem kódja!" victory_hour_of_code_done_yes: "Igen, ez volt életem kódja!"
victory_experience_gained: "Szerzett tapasztalat" victory_experience_gained: "Szerzett tapasztalat"
victory_gems_gained: "Szerzett Drágakövek" victory_gems_gained: "Szerzett Drágakövek"
# victory_new_item: "New Item" victory_new_item: "Új tárgy"
# victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks." # victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks."
# victory_become_a_viking: "Become a Viking" victory_become_a_viking: "Legyél Viking"
guide_title: "Útmutató" guide_title: "Útmutató"
tome_cast_button_run: "Futtatás" tome_cast_button_run: "Futtatás"
tome_cast_button_running: "Futás..." tome_cast_button_running: "Futás..."
@ -285,11 +285,11 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
time_current: "Most:" time_current: "Most:"
time_total: "Maximum:" time_total: "Maximum:"
time_goto: "Menj" time_goto: "Menj"
# non_user_code_problem_title: "Unable to Load Level" non_user_code_problem_title: "Nem sikerült betölteni a pályát"
# infinite_loop_title: "Infinite Loop Detected" infinite_loop_title: "Végtelen ciklust észleltünk"
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know." infinite_loop_description: "A kezdeti kód, ami a világot építi fel, nem fejeződött be. Valószínűleg vagy nagyon lassú, vagy végtelen ciklust tartalmaz. Esetleg hibát tartalmaz. Megpróbálkozhatsz a kód újrafuttatásával, vagy állítsd vissza a kódot a kezdő állapotba. Ha ez sem segít, kérlek tudasd velünk!"
# check_dev_console: "You can also open the developer console to see what might be going wrong." check_dev_console: "Továbbá megnyithatod a böngésző konzolját is (developer console), hogy lásd mi a hiba."
# check_dev_console_link: "(instructions)" check_dev_console_link: "(útmatató)"
infinite_loop_try_again: "Próbáld meg újra!" infinite_loop_try_again: "Próbáld meg újra!"
infinite_loop_reset_level: "Pálya újrakezdés" infinite_loop_reset_level: "Pálya újrakezdés"
infinite_loop_comment_out: "Tegye a kódom kommentárba" infinite_loop_comment_out: "Tegye a kódom kommentárba"
@ -297,7 +297,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
tip_scrub_shortcut: "Ctrl+[ és Ctrl+] visszatekerés és gyors-előre." # {change} tip_scrub_shortcut: "Ctrl+[ és Ctrl+] visszatekerés és gyors-előre." # {change}
tip_guide_exists: "Hasznos információkért kattints az oldal tetején az útmutatóra.." tip_guide_exists: "Hasznos információkért kattints az oldal tetején az útmutatóra.."
tip_open_source: "A CodeCombat 100%-osan nyitott forráskódú." tip_open_source: "A CodeCombat 100%-osan nyitott forráskódú."
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!" tip_tell_friends: "Élvezed a CodeCombat-ot? Mesélj rólunk a barátaidnak!"
tip_beta_launch: "CodeCombat Béta teszt 2013 Októberétől elérhető." tip_beta_launch: "CodeCombat Béta teszt 2013 Októberétől elérhető."
tip_think_solution: "A megoldásra gondolj, ne a problémára!" tip_think_solution: "A megoldásra gondolj, ne a problémára!"
tip_theory_practice: "Elméletben nincs különbség elmélet és gyakorlat között. A gyakorlatban viszont van. - Yogi Berra" tip_theory_practice: "Elméletben nincs különbség elmélet és gyakorlat között. A gyakorlatban viszont van. - Yogi Berra"
@ -326,7 +326,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
tip_extrapolation: "Csak két fajta ember létezik. Az egyik, aki extrapolál hiányos adatokból..." tip_extrapolation: "Csak két fajta ember létezik. Az egyik, aki extrapolál hiányos adatokból..."
tip_superpower: "A programozás képessége van legközelebb a szuperképességekhez." tip_superpower: "A programozás képessége van legközelebb a szuperképességekhez."
tip_control_destiny: "A valódi nyílt forráskódban, jogodban áll irányítani a sorsod. - Linus Torvalds" tip_control_destiny: "A valódi nyílt forráskódban, jogodban áll irányítani a sorsod. - Linus Torvalds"
# tip_no_code: "No code is faster than no code." tip_no_code: "Semmilyen kód nem gyorsabb a semmi-kódnál."
tip_code_never_lies: "A kód sosem hazudik, a kommentek néha. — Ron Jeffries" tip_code_never_lies: "A kód sosem hazudik, a kommentek néha. — Ron Jeffries"
tip_reusable_software: "Mielőtt a szoftware újrafelhasználható lesz, előbb használhatónak kell lennie." tip_reusable_software: "Mielőtt a szoftware újrafelhasználható lesz, előbb használhatónak kell lennie."
tip_optimization_operator: "Minden nyelvben van egy optimalizáló operátor. A legtöbb nyelvben ez a //" tip_optimization_operator: "Minden nyelvben van egy optimalizáló operátor. A legtöbb nyelvben ez a //"
@ -337,12 +337,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# tip_google: "Have a problem you can't solve? Google it!" # tip_google: "Have a problem you can't solve? Google it!"
# tip_adding_evil: "Adding a pinch of evil." # tip_adding_evil: "Adding a pinch of evil."
# tip_hate_computers: "That's the thing about people who think they hate computers. What they really hate is lousy programmers. - Larry Niven" # tip_hate_computers: "That's the thing about people who think they hate computers. What they really hate is lousy programmers. - Larry Niven"
# tip_open_source_contribute: "You can help CodeCombat improve!" tip_open_source_contribute: "Segíthetsz a CodeCombat fejlesztésében!"
# tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch" # tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch"
# tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus" # tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus"
# tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha" tip_strong_opponents: "A legerősebb ellenfélnek is van gyengéje. - Itachi Uchiha"
# tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen." tip_paper_and_pen: "Mielőtt nekiállsz kódolni, mindig segítségül hívhatsz a tervezéshez papírt és ceruzát."
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson" tip_solve_then_write: "Először, old meg a problémát, aztán állj neki kódolni! - John Johnson"
game_menu: game_menu:
inventory_tab: "Raktár" inventory_tab: "Raktár"
@ -407,10 +407,10 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
feature4: "<strong>{{gems}} bónusz drágakő</strong> minden hónapban!" feature4: "<strong>{{gems}} bónusz drágakő</strong> minden hónapban!"
feature5: "Videó oktatóanyagok" feature5: "Videó oktatóanyagok"
feature6: "Prémium email támogatás" feature6: "Prémium email támogatás"
# feature7: "Private <strong>Clans</strong>" feature7: "Privát <strong>Klánok</strong>"
free: "Ingyenes" free: "Ingyenes"
month: "hónap" month: "hónap"
# must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." must_be_logged: "Ehhez be kell jelentkezned. Kérlek regisztrálj, vagy lépj be a fenti menüben!"
subscribe_title: "Feliratkozás" subscribe_title: "Feliratkozás"
unsubscribe: "Leiratkozás" unsubscribe: "Leiratkozás"
confirm_unsubscribe: "Leiratkozás megerősítése" confirm_unsubscribe: "Leiratkozás megerősítése"
@ -499,8 +499,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
skill_docs: skill_docs:
writable: "írható" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "írható" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "csak olvasható" read_only: "csak olvasható"
# action: "Action" action: "Akció"
# spell: "Spell" spell: "Varázsige"
action_name: "név" action_name: "név"
action_cooldown: "Újratöltés" action_cooldown: "Újratöltés"
action_specific_cooldown: "Speciális újratöltés" action_specific_cooldown: "Speciális újratöltés"
@ -528,7 +528,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
editor_config_title: "Szerkesztő Beállítások" editor_config_title: "Szerkesztő Beállítások"
editor_config_keybindings_label: "Gyors-billentyűk" editor_config_keybindings_label: "Gyors-billentyűk"
# editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_default: "Default (Ace)"
# editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." editor_config_keybindings_description: "Ismert szerkesztők billyentyű kombinációit használhatod."
editor_config_livecompletion_label: "Automatikus kód-kitöltés" editor_config_livecompletion_label: "Automatikus kód-kitöltés"
editor_config_livecompletion_description: "Gépelés közben automatikus kód-kitöltés javaslatok megmutatása." editor_config_livecompletion_description: "Gépelés közben automatikus kód-kitöltés javaslatok megmutatása."
editor_config_invisibles_label: "Láthatatlan karakterek" editor_config_invisibles_label: "Láthatatlan karakterek"
@ -625,7 +625,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
cla_url: "CLA" cla_url: "CLA"
cla_suffix: "tartalmát." cla_suffix: "tartalmát."
cla_agree: "ELFOGADOM" cla_agree: "ELFOGADOM"
# owner_approve: "An owner will need to approve it before your changes will become visible." owner_approve: "Minden tulajdonosnak jóvá kell hagynia, mielőtt a változtatásaid láthatóvá válnak."
contact: contact:
contact_us: "Lépj kapcsolatba velünk" contact_us: "Lépj kapcsolatba velünk"
@ -633,7 +633,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
forum_prefix: "Ha publikus dologról van szó, megpróbálhatod a " forum_prefix: "Ha publikus dologról van szó, megpróbálhatod a "
forum_page: "fórumban" forum_page: "fórumban"
forum_suffix: " is." forum_suffix: " is."
# faq_prefix: "There's also a" faq_prefix: "Továbbá van egy"
faq: "GYIK" faq: "GYIK"
subscribe_prefix: "Ha segítségre van szükséged egy pályán, " subscribe_prefix: "Ha segítségre van szükséged egy pályán, "
subscribe: "vásárolj CodeCombat előfizetést" subscribe: "vásárolj CodeCombat előfizetést"
@ -651,21 +651,21 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
picture_tab: "Kép" picture_tab: "Kép"
delete_account_tab: "Fiók törlése" delete_account_tab: "Fiók törlése"
wrong_email: "Rossz email-cím" wrong_email: "Rossz email-cím"
# wrong_password: "Wrong Password" wrong_password: "Hibás jelszó"
upload_picture: "Tölts föl egy képet" upload_picture: "Tölts föl egy képet"
delete_this_account: "Fiók végleges törlése" delete_this_account: "Fiók végleges törlése"
# reset_progress_tab: "Reset All Progress" reset_progress_tab: "Eredmények törlése"
# reset_your_progress: "Clear all your progress and start over" reset_your_progress: "Törli az össze eredményed. Tiszta lappal kezdhetsz újra."
# god_mode: "God Mode" # god_mode: "God Mode"
password_tab: "Jelszó" password_tab: "Jelszó"
emails_tab: "Levelek" emails_tab: "Levelek"
admin: "Adminisztrátor" admin: "Adminisztrátor"
# manage_subscription: "Click here to manage your subscription." manage_subscription: "Kattints ide az előfizetések kezeléséhez."
new_password: "Új jelszó" new_password: "Új jelszó"
new_password_verify: "Új jelszó megismétlése" new_password_verify: "Új jelszó megismétlése"
type_in_email: "Írd be az email-címed a törlés megerősítéséhez" type_in_email: "Írd be az email-címed a törlés megerősítéséhez"
# type_in_email_progress: "Type in your email to confirm deleting your progress." type_in_email_progress: "Add meg az email címedet az eredmények törléséhez!"
# type_in_password: "Also, type in your password." type_in_password: "Továbbá add meg a jelszavad is!"
email_subscriptions: "Hírlevél feliratkozások" email_subscriptions: "Hírlevél feliratkozások"
email_subscriptions_none: "Nem kérek email értesítéseket." email_subscriptions_none: "Nem kérek email értesítéseket."
email_announcements: "Bejelentések" email_announcements: "Bejelentések"
@ -691,7 +691,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
keyboard_shortcuts: "Billentyűparancsok" keyboard_shortcuts: "Billentyűparancsok"
space: "Szünet" space: "Szünet"
enter: "Enter" enter: "Enter"
# press_enter: "press enter" press_enter: "Nyomj Entert"
escape: "Kilépés" escape: "Kilépés"
# shift: "Shift" # shift: "Shift"
run_code: "Aktuális kód futtatása." run_code: "Aktuális kód futtatása."
@ -705,7 +705,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# toggle_debug: "Toggle debug display." # toggle_debug: "Toggle debug display."
# toggle_grid: "Toggle grid overlay." # toggle_grid: "Toggle grid overlay."
# toggle_pathfinding: "Toggle pathfinding overlay." # toggle_pathfinding: "Toggle pathfinding overlay."
# beautify: "Beautify your code by standardizing its formatting." beautify: "A kód kicsinosítása és szabványos formátumra hozása."
maximize_editor: "Maximális/Minimális kód szerkesztő." maximize_editor: "Maximális/Minimális kód szerkesztő."
community: community:
@ -1047,8 +1047,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# indoor: "Indoor" # indoor: "Indoor"
desert: "Sivatag" desert: "Sivatag"
grassy: "Füves" grassy: "Füves"
# mountain: "Mountain" mountain: "Hegyes"
# glacier: "Glacier" glacier: "Gleccser"
small: "Kicsi" small: "Kicsi"
large: "Nagy" large: "Nagy"
fork_title: "Új Verzió villára vétele" fork_title: "Új Verzió villára vétele"
@ -1228,7 +1228,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
choose_opponent: "Válassz ellenfelet!" choose_opponent: "Válassz ellenfelet!"
select_your_language: "Válassz nyelvet!" select_your_language: "Válassz nyelvet!"
tutorial_play: "Gyakorlójáték" tutorial_play: "Gyakorlójáték"
# tutorial_recommended: "Recommended if you've never played before" tutorial_recommended: "Javasolt, ha még sohasem játszottál."
tutorial_skip: "Gyakorlójáték átugrása" tutorial_skip: "Gyakorlójáték átugrása"
tutorial_not_sure: "Nem érted mi folyik?" tutorial_not_sure: "Nem érted mi folyik?"
tutorial_play_first: "Játssz egy gyakorlójátékot először!" tutorial_play_first: "Játssz egy gyakorlójátékot először!"
@ -1269,12 +1269,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
status: "Státusz" status: "Státusz"
status_completed: "Befejezett" status_completed: "Befejezett"
status_unfinished: "Folyamatban lévő" status_unfinished: "Folyamatban lévő"
# no_singleplayer: "No Singleplayer games played yet." no_singleplayer: "Még nem játszott egyjátékos játékot."
# no_multiplayer: "No Multiplayer games played yet." no_multiplayer: "Még nem játszott többjátékos játékot."
# no_achievements: "No Achievements earned yet." # no_achievements: "No Achievements earned yet."
favorite_prefix: "A kedvenc nyelv " favorite_prefix: "A kedvenc nyelv "
favorite_postfix: "." favorite_postfix: "."
# not_member_of_clans: "Not a member of any clans yet." not_member_of_clans: "Még egy Klánnak sem tagja."
achievements: achievements:
last_earned: "Utolsónak megszerzett" last_earned: "Utolsónak megszerzett"
@ -1342,18 +1342,18 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# you_can2: "purchase a prepaid code" # you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others." # you_can3: "that can be applied to your own account or given to others."
# loading_error: loading_error:
# could_not_load: "Error loading from server" # could_not_load: "Error loading from server"
# connection_failure: "Connection failed." connection_failure: "Kapcsolat megszakadt."
# unauthorized: "You need to be signed in. Do you have cookies disabled?" # unauthorized: "You need to be signed in. Do you have cookies disabled?"
# forbidden: "You do not have the permissions." # forbidden: "You do not have the permissions."
# not_found: "Not found." not_found: "Nem található."
# not_allowed: "Method not allowed." # not_allowed: "Method not allowed."
# timeout: "Server timeout." # timeout: "Server timeout."
# conflict: "Resource conflict." # conflict: "Resource conflict."
# bad_input: "Bad input." bad_input: "Hibás bemenet."
# server_error: "Server error." server_error: "Szerver hiba."
# unknown: "Unknown error." unknown: "Ismeretlen hiba."
# error: "ERROR" # error: "ERROR"
# resources: # resources:
@ -1417,45 +1417,45 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# members: "Members" # members: "Members"
# users: "Users" # users: "Users"
# concepts: concepts:
# advanced_strings: "Advanced Strings" # advanced_strings: "Advanced Strings"
# algorithms: "Algorithms" algorithms: "Algoritmusok"
# arguments: "Arguments" arguments: "Argumentumok"
# arithmetic: "Arithmetic" # arithmetic: "Arithmetic"
# arrays: "Arrays" arrays: "Tömbök"
# basic_syntax: "Basic Syntax" basic_syntax: "Alap Szintaxis"
# boolean_logic: "Boolean Logic" # boolean_logic: "Boolean Logic"
# break_statements: "Break Statements" # break_statements: "Break Statements"
# classes: "Classes" # classes: "Classes"
# continue_statements: "Continue Statements" # continue_statements: "Continue Statements"
# for_loops: "For Loops" # for_loops: "For Loops"
# functions: "Functions" functions: "Függvények"
# graphics: "Graphics" graphics: "Grafika"
# if_statements: "If Statements" if_statements: "Feltételes elágazás"
# input_handling: "Input Handling" # input_handling: "Input Handling"
# math_operations: "Math Operations" math_operations: "Matematikai műveletek"
# object_literals: "Object Literals" # object_literals: "Object Literals"
# parameters: "Parameters" parameters: "Paraméterek"
# strings: "Strings" strings: "Szövegek"
# variables: "Variables" variables: "Változók"
# vectors: "Vectors" # vectors: "Vectors"
# while_loops: "Loops" # while_loops: "Loops"
# recursion: "Recursion" recursion: "Rekurzió"
# delta: delta:
# added: "Added" added: "Hozzáadott"
# modified: "Modified" modified: "Módosított"
# not_modified: "Not Modified" not_modified: "Nem Módosított"
# deleted: "Deleted" deleted: "Törölt"
# moved_index: "Moved Index" # moved_index: "Moved Index"
# text_diff: "Text Diff" text_diff: "Szöveg Különbség"
# merge_conflict_with: "MERGE CONFLICT WITH" # merge_conflict_with: "MERGE CONFLICT WITH"
# no_changes: "No Changes" no_changes: "Nincs Változás"
multiplayer: multiplayer:
multiplayer_title: "Többjátékos beállítások" # We'll be changing this around significantly soon. Until then, it's not important to translate. multiplayer_title: "Többjátékos beállítások" # We'll be changing this around significantly soon. Until then, it's not important to translate.
# multiplayer_toggle: "Enable multiplayer" multiplayer_toggle: "Többjátékos mód engedélyezése"
# multiplayer_toggle_description: "Allow others to join your game." multiplayer_toggle_description: "Megengeded másoknak, hogy a játékodhoz csatlakozzanak."
multiplayer_link_description: "Add oda ezt a linket bárkinek, és csatlakozhatnak hozzád." multiplayer_link_description: "Add oda ezt a linket bárkinek, és csatlakozhatnak hozzád."
multiplayer_hint_label: "Tipp:" multiplayer_hint_label: "Tipp:"
multiplayer_hint: " Kattints a linkre, és Ctrl+C-vel (vagy ⌘+C-vel) másold a vágólapra!" multiplayer_hint: " Kattints a linkre, és Ctrl+C-vel (vagy ⌘+C-vel) másold a vágólapra!"

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
no_ie: "CodeCombat non supporta Internet Explorer 8 o browser precedenti. Ci dispiace!" # Warning that only shows up in IE8 and older no_ie: "CodeCombat non supporta Internet Explorer 8 o browser precedenti. Ci dispiace!" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat non è stato progettato per dispositivi mobili e potrebbe non funzionare!" # Warning that shows up on mobile devices no_mobile: "CodeCombat non è stato progettato per dispositivi mobili e potrebbe non funzionare!" # Warning that shows up on mobile devices
play: "Gioca" # The big play button that opens up the campaign view. play: "Gioca" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses play_campaign_version: "Gioca la versione Campagna" # Shows up under big play button if you only play /courses
old_browser: "Accidenti, il tuo browser è troppo vecchio per giocare a CodeCombat. Ci spiace!" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "Accidenti, il tuo browser è troppo vecchio per giocare a CodeCombat. Ci spiace!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Puoi provare lo stesso, ma probabilmente non funzionerà." old_browser_suffix: "Puoi provare lo stesso, ma probabilmente non funzionerà."
ipad_browser: "Cattiva notizia: CodeCombat non funziona nel browser di iPad. Buona notizia: la nostra app nativa per iPad è in attesa di approvazione da Apple." ipad_browser: "Cattiva notizia: CodeCombat non funziona nel browser di iPad. Buona notizia: la nostra app nativa per iPad è in attesa di approvazione da Apple."
@ -114,7 +114,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
log_in: "Accedi con la password" log_in: "Accedi con la password"
required: "Effettua l'accesso per proseguire." required: "Effettua l'accesso per proseguire."
login_switch: "Hai già un account?" login_switch: "Hai già un account?"
# school_name: "School Name and City" school_name: "Nome scuola e città"
# optional: "optional" # optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL" # school_name_placeholder: "Example High School, Springfield, IL"
@ -736,7 +736,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
subs_only: "solo per abbonati" subs_only: "solo per abbonati"
create_clan: "Crea nuovo clan" create_clan: "Crea nuovo clan"
private_preview: "Anteprima" private_preview: "Anteprima"
# private_clans: "Private Clans" private_clans: "Clan privati"
public_clans: "Clan pubblici" public_clans: "Clan pubblici"
my_clans: "I miei clan" my_clans: "I miei clan"
clan_name: "Nome clan" clan_name: "Nome clan"
@ -790,7 +790,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
courses: courses:
course: "Corso" course: "Corso"
courses: "corsi" courses: "corsi"
# create_new_class: "Create New Class" create_new_class: "Crea una nuova classe"
not_enrolled: "Non fai parte di questo corso." not_enrolled: "Non fai parte di questo corso."
visit_pref: "Per favore, visita la pagina" visit_pref: "Per favore, visita la pagina"
visit_suf: "per iscriverti." visit_suf: "per iscriverti."
@ -879,8 +879,8 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# keep_using: "Keep Using" # keep_using: "Keep Using"
# switch_to: "Switch To" # switch_to: "Switch To"
# greetings: "Greetings!" # greetings: "Greetings!"
# learn_p: "Learn Python" learn_p: "Apprendi Python"
# learn_j: "Learn JavaScript" learn_j: "Apprendi JavaScript"
# language_cannot_change: "Language cannot be changed once students join a class." # language_cannot_change: "Language cannot be changed once students join a class."
# back_classrooms: "Back to my classrooms" # back_classrooms: "Back to my classrooms"
# back_courses: "Back to my courses" # back_courses: "Back to my courses"
@ -890,29 +890,27 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# remove_student: "remove student" # remove_student: "remove student"
# assign: "Assign" # assign: "Assign"
# to_assign: "to assign paid courses." # to_assign: "to assign paid courses."
# teacher: "Teacher" teacher: "Maestro"
# complete: "Complete" complete: "Completo"
# none: "None" play_campaign_title: "Gioca la Campagna"
# save: "Save" play_campaign_description: "Sei pronto per il passo successivo! Esplora centinaia di livelli impegnativi, impara abilità di programmazione avanzate, e competi nelle arene multigiocatore!"
# play_campaign_title: "Play the Campaign" create_account_title: "Crea un account"
# play_campaign_description: "Youre ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!"
# create_account_title: "Create an Account"
# create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!" # create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!"
# preview_campaign_title: "Preview Campaign" # preview_campaign_title: "Preview Campaign"
# preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account." # preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account."
# arena: "Arena" # arena: "Arena"
# arena_soon_title: "Arena Coming Soon" arena_soon_title: "L'arena è in arrivo"
# arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of" # arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
# not_enrolled1: "Not enrolled" # not_enrolled1: "Not enrolled"
# not_enrolled2: "Ask your teacher to enroll you in the next course." # not_enrolled2: "Ask your teacher to enroll you in the next course."
# next_course: "Next Course" next_course: "Prossimo corso"
# coming_soon1: "Coming soon" coming_soon1: "Prossimamente"
# coming_soon2: "We are hard at work making more courses for you!" # coming_soon2: "We are hard at work making more courses for you!"
# available_levels: "Available Levels" available_levels: "Livelli disponibili"
# welcome_to_courses: "Adventurers, welcome to Courses!" # welcome_to_courses: "Adventurers, welcome to Courses!"
# ready_to_play: "Ready to play?" ready_to_play: "Pronto a giocare?"
# start_new_game: "Start New Game" start_new_game: "Avvia un nuovo gioco"
# play_now_learn_header: "Play now to learn" play_now_learn_header: "Gioca ora per imparare"
# play_now_learn_1: "basic syntax to control your character" # play_now_learn_1: "basic syntax to control your character"
# play_now_learn_2: "while loops to solve pesky puzzles" # play_now_learn_2: "while loops to solve pesky puzzles"
# play_now_learn_3: "strings & variables to customize actions" # play_now_learn_3: "strings & variables to customize actions"
@ -925,7 +923,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# ready_for_more_3: "Learn even more programming!" # ready_for_more_3: "Learn even more programming!"
# saved_games: "Saved Games" # saved_games: "Saved Games"
# hoc: "Hour of Code" # hoc: "Hour of Code"
# my_classes: "My Classes" my_classes: "Le mie Classi"
# class_added: "Class successfully added!" # class_added: "Class successfully added!"
# view_class: "view class" # view_class: "view class"
# view_levels: "view levels" # view_levels: "view levels"
@ -934,15 +932,15 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# enter_c_code: "<Enter Class Code>" # enter_c_code: "<Enter Class Code>"
# join: "Join" # join: "Join"
# joining: "Joining class" # joining: "Joining class"
# course_complete: "Course Complete" course_complete: "Corso completato"
# play_arena: "Play Arena" # play_arena: "Play Arena"
# start: "Start" start: "Avvia"
# last_level: "Last Level" last_level: "Ultimo Livello"
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!" # welcome_to_hoc: "Adventurers, welcome to our Hour of Code!"
# logged_in_as: "Logged in as:" # logged_in_as: "Logged in as:"
# not_you: "Not you?" # not_you: "Not you?"
# welcome_back: "Hi adventurer, welcome back!" welcome_back: "Salve avventuriero, bentornato!"
# continue_playing: "Continue Playing" continue_playing: "Continua a giocare"
# more_options: "More options:" # more_options: "More options:"
# option1_header: "Option 1: Invite students via email" # option1_header: "Option 1: Invite students via email"
# option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password." # option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password."

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
no_ie: "大変申し訳ありませんが、ご利用のブラウザIE8以下はサポートされていません。(ChromeやFirefoxをご利用ください)" # Warning that only shows up in IE8 and older no_ie: "大変申し訳ありませんが、ご利用のブラウザIE8以下はサポートされていません。(ChromeやFirefoxをご利用ください)" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat は携帯端末向けに制作されていないため、動作しない可能性があります。" # Warning that shows up on mobile devices no_mobile: "CodeCombat は携帯端末向けに制作されていないため、動作しない可能性があります。" # Warning that shows up on mobile devices
play: "ゲーム<br>スタート" # The big play button that opens up the campaign view. play: "ゲーム<br>スタート" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses play_campaign_version: "キャンペーンバージョンをプレイ" # Shows up under big play button if you only play /courses
old_browser: "ご利用のブラウザはCodeCombatを動作させるには古すぎるようです" # Warning that shows up on really old Firefox/Chrome/Safari old_browser: "ご利用のブラウザはCodeCombatを動作させるには古すぎるようです" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "このまま進めることもできますが、正常動作は保証されません" old_browser_suffix: "このまま進めることもできますが、正常動作は保証されません"
ipad_browser: "CodeCombat は、iPad のブラウザでは動作しません。しかし、iPad アプリが現在 Apple の承認待ちとなっています。" ipad_browser: "CodeCombat は、iPad のブラウザでは動作しません。しかし、iPad アプリが現在 Apple の承認待ちとなっています。"
@ -33,7 +33,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
contact: "お問い合わせ" contact: "お問い合わせ"
twitter_follow: "フォロー" twitter_follow: "フォロー"
teachers: "教育関係者" teachers: "教育関係者"
# careers: "Careers" careers: "経歴"
modal: modal:
close: "閉じる" close: "閉じる"
@ -1091,17 +1091,17 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
level_component_config_schema: "スキーマの設定" level_component_config_schema: "スキーマの設定"
level_component_settings: "設定" level_component_settings: "設定"
level_system_edit_title: "システムの編集" level_system_edit_title: "システムの編集"
# create_system_title: "Create New System" create_system_title: "新しいシステムの作成"
# new_component_title: "Create New Component" new_component_title: "新しい部品の作成"
# new_component_field_system: "System" new_component_field_system: "システム"
# new_article_title: "Create a New Article" new_article_title: "新しい記事の作成"
# new_thang_title: "Create a New Thang Type" new_thang_title: "新しいサングの型の作成"
# new_level_title: "Create a New Level" new_level_title: "新しいレベルの作成"
# new_article_title_login: "Log In to Create a New Article" new_article_title_login: "ログインして新しい記事の作成"
# new_thang_title_login: "Log In to Create a New Thang Type" new_thang_title_login: "ログインして新しいサングの型の作成"
# new_level_title_login: "Log In to Create a New Level" new_level_title_login: "ログインして新しいレベルの作成"
# new_achievement_title: "Create a New Achievement" new_achievement_title: "新しい実績の作成"
# new_achievement_title_login: "Log In to Create a New Achievement" new_achievement_title_login: "ログインして新しい実績の作成"
# new_poll_title: "Create a New Poll" # new_poll_title: "Create a New Poll"
# new_poll_title_login: "Log In to Create a New Poll" # new_poll_title_login: "Log In to Create a New Poll"
# article_search_title: "Search Articles Here" # article_search_title: "Search Articles Here"
@ -1454,8 +1454,8 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
multiplayer: multiplayer:
multiplayer_title: "マルチプレイ設定" # We'll be changing this around significantly soon. Until then, it's not important to translate. multiplayer_title: "マルチプレイ設定" # We'll be changing this around significantly soon. Until then, it's not important to translate.
# multiplayer_toggle: "Enable multiplayer" multiplayer_toggle: "マルチプレーヤーを有効化"
# multiplayer_toggle_description: "Allow others to join your game." multiplayer_toggle_description: "他のユーザーがゲームに参加することを許可"
multiplayer_link_description: "このURLを一緒にプレイしたい人に教えてください。" multiplayer_link_description: "このURLを一緒にプレイしたい人に教えてください。"
multiplayer_hint_label: "ヒント:" multiplayer_hint_label: "ヒント:"
multiplayer_hint: " リンクを選択後、 ⌘-C(MacOS) or Ctrl-C(Windows) でリンクをコピーできます。" multiplayer_hint: " リンクを選択後、 ⌘-C(MacOS) or Ctrl-C(Windows) でリンクをコピーできます。"

View file

@ -135,11 +135,12 @@ module.exports = class User extends CocoModel
@announcesActionAudioGroup @announcesActionAudioGroup
getHomepageGroup: -> getHomepageGroup: ->
return 'home-with-note' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en') # Only testing on en-US so localization issues are not a factor
return 'new-home-student' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en')
return @homepageGroup if @homepageGroup return @homepageGroup if @homepageGroup
group = me.get('testGroupNumber') % 4 group = me.get('testGroupNumber') % 4
@homepageGroup = switch group @homepageGroup = switch group
when 0, 1 then 'home-with-note' when 0, 1 then 'new-home-characters'
when 2, 3 then 'new-home-student' when 2, 3 then 'new-home-student'
application.tracker.identify newHomepageGroup: @homepageGroup unless me.isAdmin() application.tracker.identify newHomepageGroup: @homepageGroup unless me.isAdmin()
return @homepageGroup return @homepageGroup

View file

@ -43,8 +43,8 @@ block content
#mission-graphic-filler #mission-graphic-filler
.col-sm-5.col-sm-offset-1 .col-sm-5.col-sm-offset-1
#mission-text.responsive-side-margins #mission-text.responsive-side-margins
p(data-i18n="about.mission_description_1") p(data-i18n="[html]about.mission_description_1")
p(data-i18n="about.mission_description_2") p(data-i18n="[html]about.mission_description_2")
#team.anchor #team.anchor
.text-center .text-center
@ -68,7 +68,7 @@ block content
h6.label.team-name h6.label.team-name
a(href="http://www.mattlott.com/" rel="external") Matt Lott a(href="http://www.mattlott.com/" rel="external") Matt Lott
small(data-i18n="about.matt_title") small(data-i18n="about.matt_title")
small(data-i18n="about.matt_blurb") br
li li
a(href="http://cat.zdh.com/" rel="external") a(href="http://cat.zdh.com/" rel="external")
@ -220,7 +220,7 @@ block content
#story-languages #story-languages
.text-center .text-center
.text-h5(data-i18n="about.story_statistic_3c") .text-h5(data-i18n="about.story_statistic_3c")
#language-icons.text-center #language-icons.text-center(title="Clojure, CoffeeScript, JavaScript, Python, Java, Lua")
img.hidden-xs(src="/images/pages/about/languages.png") img.hidden-xs(src="/images/pages/about/languages.png")
img.hidden-sm.hidden-md.hidden-lg(src="/images/pages/about/languages_group1.png") img.hidden-sm.hidden-md.hidden-lg(src="/images/pages/about/languages_group1.png")
img.hidden-sm.hidden-md.hidden-lg(src="/images/pages/about/languages_group2.png") img.hidden-sm.hidden-md.hidden-lg(src="/images/pages/about/languages_group2.png")
@ -246,20 +246,10 @@ block content
ul ul
li.small(data-i18n="about.jobs_benefit_1") li.small(data-i18n="about.jobs_benefit_1")
li.small(data-i18n="about.jobs_benefit_2") li.small(data-i18n="about.jobs_benefit_2")
li.small(data-i18n="about.jobs_benefit_3")
li.small(data-i18n="about.jobs_benefit_4") li.small(data-i18n="about.jobs_benefit_4")
li.small(data-i18n="about.jobs_benefit_5") li.small(data-i18n="about.jobs_benefit_5")
li.small(data-i18n="about.jobs_benefit_6") li.small(data-i18n="about.jobs_benefit_6")
.col-sm-6.col-md-5.col-lg-4 .col-sm-6.col-md-5.col-lg-4
.job-listing
h5 Software Engineer, iOS
.text-center
small.label
| San Francisco • Fulltime
p.small Want to write the first iPad app for CodeCombat? Were looking for a product-focused engineer to translate our core gameplay and educational tools into an experience that feels like it was born on the iPad.
a.job-link.btn.btn-lg.btn-navy(href="https://jobs.lever.co/codecombat/eb190007-7195-49ee-a322-893b0d1cdcb4" rel="external")
span(data-i18n="about.learn_more")
.col-sm-6.col-md-5.col-md-offset-1.col-lg-4.col-lg-offset-0
.job-listing .job-listing
h5 Head of Sales h5 Head of Sales
.text-center .text-center
@ -268,7 +258,7 @@ block content
p.small School districts are scrambling to offer computer science classes to all their students as a core subject. They have had no solution, because they can't afford to hire enough programming teachers until now. p.small School districts are scrambling to offer computer science classes to all their students as a core subject. They have had no solution, because they can't afford to hire enough programming teachers until now.
a.job-link.btn.btn-lg.btn-navy(href="https://jobs.lever.co/codecombat/2d0194ed-7c69-4aab-b1f9-363ca4b9f04b" rel="external") a.job-link.btn.btn-lg.btn-navy(href="https://jobs.lever.co/codecombat/2d0194ed-7c69-4aab-b1f9-363ca4b9f04b" rel="external")
span(data-i18n="about.learn_more") span(data-i18n="about.learn_more")
.col-sm-6.col-md-5.col-lg-4 .col-sm-6.col-md-5.col-md-offset-1.col-lg-4.col-lg-offset-0
.job-listing .job-listing
h5 Sales Representative h5 Sales Representative
.text-center .text-center
@ -277,7 +267,7 @@ block content
p.small School districts are scrambling to offer computer science classes to all their students as a core subject. They have had no solution, because they can't afford to hire enough programming teachers until now. p.small School districts are scrambling to offer computer science classes to all their students as a core subject. They have had no solution, because they can't afford to hire enough programming teachers until now.
a.job-link.btn.btn-lg.btn-navy(href="https://jobs.lever.co/codecombat/3f6ff123-16ce-4ecb-aba3-dcf4e8927c47" rel="external") a.job-link.btn.btn-lg.btn-navy(href="https://jobs.lever.co/codecombat/3f6ff123-16ce-4ecb-aba3-dcf4e8927c47" rel="external")
span(data-i18n="about.learn_more") span(data-i18n="about.learn_more")
.col-sm-6.col-md-5.col-md-offset-1.col-lg-4.col-lg-offset-0 .col-sm-6.col-md-5.col-lg-4
.job-listing .job-listing
h5(data-i18n="about.jobs_custom_title") h5(data-i18n="about.jobs_custom_title")
p.small(data-i18n="about.jobs_custom_description") p.small(data-i18n="about.jobs_custom_description")

View file

@ -67,7 +67,7 @@ block content
h3 Active Classes 365 days h3 Active Classes 365 days
.active-classes-chart-365.line-chart-container .active-classes-chart-365.line-chart-container
h1#active-classes-table Active Classes h1 Active Classes
table.table.table-striped.table-condensed table.table.table-striped.table-condensed
tr tr
th Day th Day
@ -93,7 +93,35 @@ block content
h3 Monthly Recurring Revenue 365 days h3 Monthly Recurring Revenue 365 days
.recurring-monthly-revenue-chart-365.line-chart-container .recurring-monthly-revenue-chart-365.line-chart-container
h1#recurring-revenue-table Recurring Revenue .school-sales
h3 School Sales
if view.schoolSales
table.table.table-striped.table-condensed
tr
th Amount
th(style='min-width:85px;') Created
th PaymentID
th PrepaidID
th Description
th Email
th School
each val, i in view.schoolSales
tr
td $#{val.amount / 100}
td= new Date(val.created).toISOString().substring(0, 10)
td= val._id
td= val.prepaidID
td= val.description
if val.user
td= val.user.emailLower
td= val.user.schoolName
else
td
td
else
div Loading ...
h1 Recurring Revenue
table.table.table-striped.table-condensed table.table.table-striped.table-condensed
tr tr
th(style='min-width:85px;') Day th(style='min-width:85px;') Day
@ -106,22 +134,22 @@ block content
td $#{(val / 100).toFixed(2)} td $#{(val / 100).toFixed(2)}
.tab-pane#tab_classroom .tab-pane#tab_classroom
h3#classroom-daus-graph Classroom Daily Active Users 90 days h3 Classroom Daily Active Users 90 days
.small Paid student: user.coursePrepaidID set and prepaid.properties.trialRequestID NOT set .small Paid student: user.coursePrepaidID set and prepaid.properties.trialRequestID NOT set
.small Trial student: user.coursePrepaidID set and prepaid.properties.trialRequestID set .small Trial student: user.coursePrepaidID set and prepaid.properties.trialRequestID set
.small Free student: not paid, not trial .small Free student: not paid, not trial
.classroom-daily-active-users-chart-90.line-chart-container .classroom-daily-active-users-chart-90.line-chart-container
h3#classroom-maus-graph Classroom Monthly Active Users 90 days h3 Classroom Monthly Active Users 90 days
.classroom-monthly-active-users-chart-90.line-chart-container .classroom-monthly-active-users-chart-90.line-chart-container
h3#classroom-daus-graph Classroom Daily Active Users 365 days h3 Classroom Daily Active Users 365 days
.classroom-daily-active-users-chart-365.line-chart-container .classroom-daily-active-users-chart-365.line-chart-container
h3#classroom-maus-graph Classroom Monthly Active Users 365 days h3 Classroom Monthly Active Users 365 days
.classroom-monthly-active-users-chart-365.line-chart-container .classroom-monthly-active-users-chart-365.line-chart-container
h3#enrollments-graph Enrollments Issued and Redeemed 90 days h3 Enrollments Issued and Redeemed 90 days
.paid-courses-chart.line-chart-container .paid-courses-chart.line-chart-container
#furthest-course #furthest-course
@ -191,7 +219,7 @@ block content
else else
div Loading ... div Loading ...
#school-sales .school-sales
h3 School Sales h3 School Sales
if view.schoolSales if view.schoolSales
table.table.table-striped.table-condensed table.table.table-striped.table-condensed
@ -205,7 +233,7 @@ block content
th School th School
each val, i in view.schoolSales each val, i in view.schoolSales
tr tr
td $#{Math.round(val.amount / 100, 2)} td $#{val.amount / 100}
td= new Date(val.created).toISOString().substring(0, 10) td= new Date(val.created).toISOString().substring(0, 10)
td= val._id td= val._id
td= val.prepaidID td= val.prepaidID
@ -236,7 +264,7 @@ block content
else else
div Loading ... div Loading ...
h1#active-users-table Active Users h1 Active Users
if activeUsers.length > 0 if activeUsers.length > 0
- var eventNames = []; - var eventNames = [];
each count, event in activeUsers[0].events each count, event in activeUsers[0].events
@ -296,7 +324,7 @@ block content
h3 Campaign Monthly Active Users 365 days h3 Campaign Monthly Active Users 365 days
.campaign-monthly-active-users-chart-365.line-chart-container .campaign-monthly-active-users-chart-365.line-chart-container
h1#active-users-table Active Users h1 Active Users
if activeUsers.length > 0 if activeUsers.length > 0
- var eventNames = []; - var eventNames = [];
each count, event in activeUsers[0].events each count, event in activeUsers[0].events
@ -321,13 +349,13 @@ block content
.tab-pane#tab_campaign_vs_classroom .tab-pane#tab_campaign_vs_classroom
h3#campaign-vs-classroom-paid-maus-recent-graph Campaign vs Classroom Paid Monthly Active Users 90 days h3 Campaign vs Classroom Paid Monthly Active Users 90 days
.campaign-vs-classroom-monthly-active-users-recent-chart.line-chart-container .campaign-vs-classroom-monthly-active-users-recent-chart.line-chart-container
h3#campaign-vs-classroom-paid-maus-graph Campaign vs Classroom Paid Monthly Active Users 365 days h3 Campaign vs Classroom Paid Monthly Active Users 365 days
.campaign-vs-classroom-monthly-active-users-chart.line-chart-container .campaign-vs-classroom-monthly-active-users-chart.line-chart-container
h1#active-users-table Active Users h1 Active Users
if activeUsers.length > 0 if activeUsers.length > 0
- var eventNames = []; - var eventNames = [];
each count, event in activeUsers[0].events each count, event in activeUsers[0].events

View file

@ -5,174 +5,177 @@ block content
.container .container
.row .row
.col-lg-7.col-md-8 .col-lg-7.col-md-8
h1 The most engaging game for learning programming. h1(data-i18n="new_home.slogan")
.col-lg-3.col-lg-offset-2.col-md-4 .col-lg-3.col-lg-offset-2.col-md-4
.well.text-center.hidden-md.hidden-lg .well.text-center.hidden-md.hidden-lg
.row .row
.col-xs-8 .col-xs-8
h6 Classroom Edition: h6(data-i18n="new_home.classroom_edition")
.col-xs-4 .col-xs-4
h6 Learn to code: h6(data-i18n="new_home.learn_to_code")
.row .row
.col-xs-4 .col-xs-4
button#teacher-btn.btn.btn-primary.btn-lg.btn-block Teacher button#teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.teacher")
.col-xs-4 .col-xs-4
a.btn.btn-forest.btn-lg.btn-block(href="/courses") Student a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.student")
.col-xs-4 .col-xs-4
a.btn.btn-gold.btn-lg.btn-block(href=view.playURL) Play Now a.btn.btn-gold.btn-lg.btn-block(href=view.playURL, data-i18n="new_home.play_now")
.well.text-center.hidden-xs.hidden-sm .well.text-center.hidden-xs.hidden-sm
h6#classroom-edition-header Classroom Edition: h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
div div
button#teacher-btn.btn.btn-primary.btn-lg.btn-block I'm a Teacher button#teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.im_a_teacher")
div div
a.btn.btn-forest.btn-lg.btn-block(href="/courses") I'm a Student a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.im_a_student")
h6#learn-to-code-header Learn to code: h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
a.btn.btn-gold.btn-lg.btn-block(href=view.playURL) Play Now a.btn.btn-gold.btn-lg.btn-block(href=view.playURL, data-i18n="new_home.play_now")
.row#learn-more-row .row#learn-more-row
.col-xs-12.text-center .col-xs-12.text-center
a#learn-more-link a#learn-more-link
h6 Learn more h6(data-i18n="new_home.learn_more")
h2 h2
span.glyphicon.glyphicon-chevron-down span.glyphicon.glyphicon-chevron-down
.container#classroom-in-box-container .container#classroom-in-box-container
#classroom-in-box-row.row #classroom-in-box-row.row
.col-sm-6 .col-sm-6
h2.text-navy A classroom in-a-box for teaching computer science. h2.text-navy(data-i18n="new_home.classroom_in_a_box")
.col-sm-6 .col-sm-6
p CodeCombat is a platform for students to learn computer science while playing through a real game. p(data-i18n="new_home.codecombat_is")
p Our courses have been specifically playtested to excel in a classroom setting, even by teachers with little to no prior programming experience. p(data-i18n="new_home.our_courses")
#feature-spread-row.row.text-center #feature-spread-row.row.text-center
h3 Designed with teachers in mind h3(data-i18n="new_home.designed_with")
.col-sm-4 .col-sm-4
img.img-circle(src="/images/pages/home/F1_typedcode.png") img.img-circle(src="/images/pages/home/F1_typedcode.png")
h4 h4
| Real, typed code span(data-i18n="new_home.real_code")
br br
| from the first level span(data-i18n="new_home.from_the_first_level")
p.small Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure. p.small(data-i18n="new_home.getting_students")
.col-sm-4 .col-sm-4
img.img-circle(src="/images/pages/home/F2_teacherguides.png") img.img-circle(src="/images/pages/home/F2_teacherguides.png")
h4 h4
| Educator resources span(data-i18n="new_home.educator_resources")
br br
| and course guides span(data-i18n="new_home.course_guides")
p.small Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds. p.small(data-i18n="new_home.teaching_computer_science")
.col-sm-4 .col-sm-4
img.img-circle(src="/images/pages/home/F3_accessible.png") img.img-circle(src="/images/pages/home/F3_accessible.png")
h4 h4
| Accessible to span(data-i18n="new_home.accessible_to")
br br
| everyone span(data-i18n="new_home.everyone")
p.small Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code. p.small(data-i18n="new_home.democratizing")
.testimonials-rows .testimonials-rows
.testimonials-filler-left .testimonials-filler-left
.testimonials-filler-right .testimonials-filler-right
.row .row
.col-lg-offset-2.col-lg-7.col-sm-8 .col-lg-offset-2.col-lg-7.col-sm-8
blockquote blockquote
h3 I think they actually forgot that they were actually learning something. h3(data-i18n="new_home.forgot_learning")
.col-lg-2.col-sm-3.text-center .col-lg-2.col-sm-3.text-center
img.img-circle(src="/images/pages/home/timmaki.png") img.img-circle(src="/images/pages/home/timmaki.png")
h6 Tim Maki h6 Tim Maki
.small Director of Technology, Tilton School .small Director of Technology, Tilton School
.row .row
.col-lg-7.col-sm-8.col-sm-push-4.col-lg-push-3 .col-lg-7.col-sm-8.col-sm-push-4.col-lg-push-3
blockquote blockquote
h3 Coding is something I've always wanted to do, and I never thought I would be able to learn it in school. h3(data-i18n="new_home.wanted_to_do")
.col-lg-2.col-sm-3.col-lg-offset-1.text-center.col-sm-pull-8.col-lg-pull-7 .col-lg-2.col-sm-3.col-lg-offset-1.text-center.col-sm-pull-8.col-lg-pull-7
img.img-circle(src="/images/pages/home/dylan.png") img.img-circle(src="/images/pages/home/dylan.png")
h6 Dylan h6 Dylan
.small 3rd Grader .small 3rd Grader
h3.text-center Why is learning through games important? h3.text-center(data-i18n="new_home.why_games")
#benefit-row-1.row #benefit-row-1.row
#benefit-graphic-1.col-sm-6.col-sm-offset-1.col-sm-push-6 #benefit-graphic-1.col-sm-6.col-sm-offset-1.col-sm-push-6
h2 Games reward the productive struggle. h2(data-i18n="new_home.games_reward")
img(src="/images/pages/home/G1_reward.png") img(src="/images/pages/home/G1_reward.png")
#benefit-graphic-1-filler #benefit-graphic-1-filler
.col-sm-5.col-sm-pull-6
p
| Gaming is a medium that encourages interaction, discovery, and trial-and-error.
| A good game challenges the player to master skills over time,
| which is the same critical process students go through as they learn.
p
| Games excel at rewarding “
a(href="http://blog.mindresearch.org/blog/game-based-learning-infographic-strong-math-practices" target="_blank") productive struggle
span.spr ” - the kind of struggle that results in learning thats engaging and
a(href="http://www.gamesandlearning.org/2014/06/09/teachers-on-using-games-in-class/" target="_blank") motivating
| , not tedious.
.col-sm-5.col-sm-pull-6
p(data-i18n="new_home.encourage")
p
span.spr(data-i18n="new_home.excel")
span “
a(href="http://blog.mindresearch.org/blog/game-based-learning-infographic-strong-math-practices" target="_blank", data-i18n="new_home.struggle")
span ” -
span.spl.spr(data-i18n="new_home.kind_of_struggle")
a(href="http://www.gamesandlearning.org/2014/06/09/teachers-on-using-games-in-class/" target="_blank", data-i18n="new_home.motivating")
span ,
span.spl(data-i18n="new_home.not_tedious")
#benefit-row-2.row #benefit-row-2.row
#benefit-graphic-2.col-sm-6 #benefit-graphic-2.col-sm-6
h2 Studies suggest gaming is good for childrens brains. (its true!) h2(data-i18n="new_home.gaming_is_good")
img(src="/images/pages/home/G2_brains.png") img(src="/images/pages/home/G2_brains.png")
#benefit-graphic-2-filler #benefit-graphic-2-filler
.col-sm-5.col-sm-offset-1 .col-sm-5.col-sm-offset-1
p p
span.spr When game-based learning systems are span.spr(data-i18n="new_home.game_based")
a(href="http://schoolsweek.co.uk/gaming-is-good-for-childrens-brains-study-suggests/" target="_blank") compared a(href="http://schoolsweek.co.uk/gaming-is-good-for-childrens-brains-study-suggests/" target="_blank", data-i18n="new_home.compared")
span.spl.spr against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and span.spl.spr(data-i18n="new_home.conventional")
a(href="http://dev.k-12techdecisions.com/article/game_based_learning_is_where_vygotsky_meets_dweck/P3" target="_blank") perform at a higher level of achievement a(href="http://dev.k-12techdecisions.com/article/game_based_learning_is_where_vygotsky_meets_dweck/P3" target="_blank", data-i18n="new_home.perform_at_higher_level")
| . span .
p p
| Games also provide real-time feedback that allows students to adjust their solution path and understand concepts more holistically, instead of being limited to just “correct” or “incorrect” answers. span(data-i18n="new_home.feedback")
#benefit-row-3.row #benefit-row-3.row
#benefit-graphic-3.col-sm-6.col-sm-offset-1.col-sm-push-6 #benefit-graphic-3.col-sm-6.col-sm-offset-1.col-sm-push-6
h2 A real game, played with real coding. h2(data-i18n="new_home.real_game")
img(src="/images/pages/home/G3_game.png") img(src="/images/pages/home/G3_game.png")
#benefit-graphic-3-filler #benefit-graphic-3-filler
.col-sm-5.col-sm-pull-6 .col-sm-5.col-sm-pull-6
p p
| A great game is more than just badges and achievements - its about a players journey, well-designed puzzles, and the ability to tackle challenges with agency and confidence. span(data-i18n="new_home.great_game")
p p
| CodeCombat is a game that gives players that agency and confidence with our robust typed code engine, which helps beginner and advanced students alike write proper, valid code. span(data-i18n="new_home.agency")
.request-demo-row.text-center .request-demo-row.text-center
h3 Curious? Request a demo and we'll show you the ropes h3(data-i18n="new_home.curious")
h4 Or create a class and see it for yourself! h4(data-i18n="new_home.create_class")
div div
a.btn.btn-primary.btn-lg(href="/teachers/freetrial") Request a Demo a.btn.btn-primary.btn-lg(href="/teachers/freetrial", data-i18n="new_home.request_demo")
a.btn.btn-primary-alt.btn-lg(href="/courses/teachers") Create a Class a.btn.btn-primary-alt.btn-lg(href="/courses/teachers", data-i18n="new_home.create_a_class")
div div
if me.isAnonymous() if me.isAnonymous()
span.spr Already have an account? span.spr(data-i18n="new_home.have_an_account")
a.login-button Login a.login-button Login
else else
span.spr You are currently logged in as #{me.broadName()}. span.spr(data-i18n="new_home.logged_in_as")
a(href="/courses/teachers") View my classes span= me.broadName()
span.spr.spl or span.spr .
a(href="/courses/teachers", data-i18n="new_home.view_my_classes")
span.spr.spl(data-i18n="general.or")
a#logout-button logout a#logout-button logout
h3.text-center Computer science courses for all ages h3.text-center(data-i18n="new_home.computer_science")
h4.text-center h4.text-center
span#school-level-label Show me lesson time estimates for: span#school-level-label(data-i18n="new_home.show_me_lesson_time")
select#school-level-dropdown.form-control.text-navy select#school-level-dropdown.form-control.text-navy
option(value='elementary') Elementary School option(value='elementary', data-i18n="teachers_quote.elementary_school")
option(value='middle', selected=true) Middle School option(value='middle', selected=true, data-i18n="teachers_quote.middle_school")
option(value='high') High School option(value='high', data-i18n="teachers_quote.high_school")
h5.text-center#total-hours-header h5.text-center#total-hours-header
span.spr Total curriculum hours: span.spr(data-i18n="new_home.curriculum")
span#semester-duration span#semester-duration
#courses-row.row #courses-row.row
- var conceptsSeen = {}; - var conceptsSeen = {};
@ -182,7 +185,7 @@ block content
.media.course-details(data-course-slug=course.get('slug')) .media.course-details(data-course-slug=course.get('slug'))
if courseIndex === 0 if courseIndex === 0
.free-course .free-course
h6 Free for all students h6(data-i18n="new_home.ffa")
.media-body(title=course.get('description')) .media-body(title=course.get('description'))
h6.course-name= course.get('name') + ':' h6.course-name= course.get('name') + ':'
p.small p.small
@ -203,7 +206,7 @@ block content
img.media-object(src="/images/pages/home/course"+(courseIndex+1)+".png") img.media-object(src="/images/pages/home/course"+(courseIndex+1)+".png")
- lastScreenshot = course.get('screenshot'); - lastScreenshot = course.get('screenshot');
h6.course-duration h6.course-duration
span.spr Lesson time: span.spr(data-i18n="new_home.lesson_time")
span.course-hours= course.get('duration') || 0 span.course-hours= course.get('duration') || 0
span.spl.unit(data-i18n="units.hours") span.spl.unit(data-i18n="units.hours")
for upcomingCourse in ['Computer Science 6', 'Computer Science 7', 'Computer Science 8'] for upcomingCourse in ['Computer Science 6', 'Computer Science 7', 'Computer Science 8']
@ -211,22 +214,22 @@ block content
.media.disabled .media.disabled
.media-body .media-body
h6.course-name= upcomingCourse + ':' h6.course-name= upcomingCourse + ':'
p.small Coming soon! p.small(data-i18n="new_home.coming_soon")
img.media-object(src="/images/pages/home/inprogress.png") img.media-object(src="/images/pages/home/inprogress.png")
.clearfix .clearfix
.text-center .text-center
h4 h4
img(src="/images/pages/home/course_languages.png") img(src="/images/pages/home/course_languages.png")
div Courses are available in JavaScript, Python, and Java (coming soon!) div(data-i18n="new_home.courses_available_in")
.testimonials-rows .testimonials-rows
.testimonials-filler-left .testimonials-filler-left
.testimonials-filler-right .testimonials-filler-right
.row .row
.col-lg-offset-2.col-lg-7.col-sm-8 .col-lg-offset-2.col-lg-7.col-sm-8
blockquote blockquote
h3 Boasts riddles that are complex enough to fascinate gamers and coders alike. h3(data-i18n="new_home.boast")
.col-lg-2.col-sm-3.text-center .col-lg-2.col-sm-3.text-center
img.img-circle(src="/images/pages/home/opensource.png") img.img-circle(src="/images/pages/home/opensource.png")
@ -236,18 +239,16 @@ block content
.row .row
.col-lg-7.col-sm-8.col-sm-push-4.col-lg-push-3 .col-lg-7.col-sm-8.col-sm-push-4.col-lg-push-3
blockquote blockquote
h3 A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable. h3(data-i18n="new_home.winning")
.col-lg-2.col-sm-3.col-lg-offset-1.text-center.col-sm-pull-8.col-lg-pull-7 .col-lg-2.col-sm-3.col-lg-offset-1.text-center.col-sm-pull-8.col-lg-pull-7
img.img-circle(src="/images/pages/home/pcmag.png") img.img-circle(src="/images/pages/home/pcmag.png")
h6 PC Mag h6 PC Mag
.small pcmag.com .small pcmag.com
.request-demo-row.text-center .request-demo-row.text-center
h3 Everything you need to run a computer science class in your school today, no CS background required. h3(data-i18n="new_home.run_class")
p p
a.btn.btn-primary.btn-lg(href="/teachers/freetrial") Request a Demo a.btn.btn-primary.btn-lg(href="/teachers/freetrial", data-i18n="new_home.request_demo")
a.btn.btn-primary-alt.btn-lg(href="/courses/teachers") Create a Class a.btn.btn-primary-alt.btn-lg(href="/courses/teachers", data-i18n="new_home.create_a_class")

View file

@ -88,3 +88,6 @@
strong.tip.rare(data-i18n='play_level.tip_free_your_mind') You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus strong.tip.rare(data-i18n='play_level.tip_free_your_mind') You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus
strong.tip.rare(data-i18n='play_level.tip_strong_opponents') Even the strongest of opponents always has a weakness. - Itachi Uchiha strong.tip.rare(data-i18n='play_level.tip_strong_opponents') Even the strongest of opponents always has a weakness. - Itachi Uchiha
strong.tip.rare(data-i18n='play_level.tip_paper_and_pen') Before you start coding, you can always plan with a sheet of paper and a pen. strong.tip.rare(data-i18n='play_level.tip_paper_and_pen') Before you start coding, you can always plan with a sheet of paper and a pen.
strong.tip.rare(data-i18n='play_level.tip_compiler_ignores_comments') Sometimes I think that the compiler ignores my comments.
strong.tip.rare(data-i18n='play_level.tip_understand_recursion') The only way to understand recursion is to understand recursion.
strong.tip.rare(data-i18n='play_level.tip_open_source_and_polymorphism') Open Source projects are like totally polymorphic heterogeneous structures: All types are welcome.

View file

@ -18,7 +18,7 @@ module.exports = class NewHomeView extends RootView
'click #learn-more-link': 'onClickLearnMoreLink' 'click #learn-more-link': 'onClickLearnMoreLink'
initialize: (options) -> initialize: (options) ->
@jumbotron = options.jumbotron or utils.getQueryVariable('jumbotron') or 'student' # or 'characters' @jumbotron = options.jumbotron or utils.getQueryVariable('jumbotron') or 'student'
@courses = new CocoCollection [], {url: "/db/course", model: Course} @courses = new CocoCollection [], {url: "/db/course", model: Course}
@supermodel.loadCollection(@courses, 'courses') @supermodel.loadCollection(@courses, 'courses')

View file

@ -158,7 +158,7 @@ module.exports = class AnalyticsView extends RootView
return -1 if a.created > b.created return -1 if a.created > b.created
return 0 if a.created is b.created return 0 if a.created is b.created
1 1
@renderSelectors?('#school-sales') @renderSelectors?('.school-sales')
}, 0).load() }, 0).load()
@supermodel.addRequestResource({ @supermodel.addRequestResource({
@ -449,26 +449,11 @@ module.exports = class AnalyticsView extends RootView
eventDayDataMap['MAU classroom'][day] += count eventDayDataMap['MAU classroom'][day] += count
campaignData = [] campaignData = []
classroomData = []
for event, entry of eventDayDataMap for event, entry of eventDayDataMap
if event is 'MAU campaign' continue unless event is 'MAU campaign'
for day, count of entry for day, count of entry
campaignData.push day: day, value: count / 1000 campaignData.push day: day, value: count / 1000
else
for day, count of entry
classroomData.push day: day, value: count / 1000
campaignData.reverse() campaignData.reverse()
classroomData.reverse()
points = @createLineChartPoints(days, classroomData)
chartLines.push
points: points
description: 'Classroom Monthly Active Users (in thousands)'
lineColor: 'red'
strokeWidth: 1
min: 0
max: _.max(points, 'y').y
showYScale: true
points = @createLineChartPoints(days, campaignData) points = @createLineChartPoints(days, campaignData)
chartLines.push chartLines.push

View file

@ -23,8 +23,8 @@ try {
var endDay = new Date(); var endDay = new Date();
endDay = endDay.toISOString().substr(0, 10); endDay = endDay.toISOString().substr(0, 10);
// startDay = '2015-03-01'; // startDay = '2015-06-01';
// endDay = '2015-06-01'; // endDay = '2015-08-01';
var activeUserEvents = ['Finished Signup', 'Started Level']; var activeUserEvents = ['Finished Signup', 'Started Level'];
@ -59,36 +59,57 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
// Counts active users per day // Counts active users per day
if (!startDay) return {}; if (!startDay) return {};
// Faster to request analytics db data in batches of days
var dayIncrement = 3;
var startDate = new Date(startDay + "T00:00:00.000Z");
var interimEndDate = new Date(startDay + "T00:00:00.000Z");
interimEndDate.setUTCDate(interimEndDate.getUTCDate() + dayIncrement);
var interimEndDay = interimEndDate.toISOString().substr(0, 10);
var cursor, doc; var cursor, doc;
log("Finding active user log events.."); log("Finding active user log events..");
var startObj = objectIdWithTimestamp(ISODate(startDay + "T00:00:00.000Z"));
var endObj = objectIdWithTimestamp(ISODate(endDay + "T00:00:00.000Z"));
var queryParams = {$and: [
{_id: {$gte: startObj}},
{_id: {$lt: endObj}},
{'event': {$in: activeUserEvents}}
]};
cursor = logDB['log'].find(queryParams);
var campaignUserMap = {}; var campaignUserMap = {};
var dayUserMap = {}; var days = {};
var dayUserActiveMap = {};
var userIDs = []; var userIDs = [];
while (cursor.hasNext()) { while (startDay < endDay) {
doc = cursor.next(); var startObj = objectIdWithTimestamp(ISODate(startDay + "T00:00:00.000Z"));
var created = doc._id.getTimestamp().toISOString(); var endObj = objectIdWithTimestamp(ISODate(interimEndDay + "T00:00:00.000Z"));
var day = created.substring(0, 10); var queryParams = {$and: [
var user = doc.user.valueOf(); {_id: {$gte: startObj}},
campaignUserMap[user] = true; {_id: {$lt: endObj}},
if (!dayUserMap[day]) dayUserMap[day] = {}; {'event': {$in: activeUserEvents}}
dayUserMap[day][user] = true; ]};
userIDs.push(ObjectId(user)); cursor = logDB['log'].find(queryParams);
// if (userIDs.length % 100000 === 0) {
// log('Users so far: ' + userIDs.length); while (cursor.hasNext()) {
// } doc = cursor.next();
var created = doc._id.getTimestamp().toISOString();
var day = created.substring(0, 10);
var user = doc.user.valueOf();
days[day] = true;
campaignUserMap[user] = true;
if (!dayUserActiveMap[day]) dayUserActiveMap[day] = {};
dayUserActiveMap[day][user] = true;
userIDs.push(ObjectId(user));
// if (userIDs.length % 100000 === 0) {
// log('Users so far: ' + userIDs.length);
// }
}
startDate.setUTCDate(startDate.getUTCDate() + dayIncrement);
startDay = startDate.toISOString().substr(0, 10);
interimEndDate.setUTCDate(interimEndDate.getUTCDate() + dayIncrement);
interimEndDay = interimEndDate.toISOString().substr(0, 10);
if (interimEndDay.localeCompare(endDay) > 0) {
interimEndDay = endDay;
}
} }
log('User count: ' + userIDs.length); log('User count: ' + userIDs.length);
days = Object.keys(days);
days.sort(function (a, b) {return a.localeCompare(b);});
log("Finding classroom members.."); log("Finding classroom members..");
var classroomUserObjectIds = []; var classroomUserObjectIds = [];
var batchSize = 100000; var batchSize = 100000;
@ -112,20 +133,20 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
// Trial user: prepaid.properties.trialRequestID means access was via trial // Trial user: prepaid.properties.trialRequestID means access was via trial
// Free: not paid, not trial // Free: not paid, not trial
log("Finding classroom users free/trial/paid status.."); log("Finding classroom users free/trial/paid status..");
var userEventMap = {}; var classroomUserEventMap = {};
var prepaidUsersMap = {}; var prepaidUsersMap = {};
var prepaidIDs = []; var prepaidIDs = [];
cursor = db.users.find({_id: {$in: classroomUserObjectIds}}, {coursePrepaidID: 1}); cursor = db.users.find({_id: {$in: classroomUserObjectIds}}, {coursePrepaidID: 1});
while (cursor.hasNext()) { while (cursor.hasNext()) {
doc = cursor.next(); doc = cursor.next();
if (doc.coursePrepaidID) { if (doc.coursePrepaidID) {
userEventMap[doc._id.valueOf()] = 'DAU classroom paid'; classroomUserEventMap[doc._id.valueOf()] = 'DAU classroom paid';
if (!prepaidUsersMap[doc.coursePrepaidID.valueOf()]) prepaidUsersMap[doc.coursePrepaidID.valueOf()] = []; if (!prepaidUsersMap[doc.coursePrepaidID.valueOf()]) prepaidUsersMap[doc.coursePrepaidID.valueOf()] = [];
prepaidUsersMap[doc.coursePrepaidID.valueOf()].push(doc._id.valueOf()); prepaidUsersMap[doc.coursePrepaidID.valueOf()].push(doc._id.valueOf());
prepaidIDs.push(doc.coursePrepaidID); prepaidIDs.push(doc.coursePrepaidID);
} }
else { else {
userEventMap[doc._id.valueOf()] = 'DAU classroom free'; classroomUserEventMap[doc._id.valueOf()] = 'DAU classroom free';
} }
} }
cursor = db.prepaids.find({_id: {$in: prepaidIDs}}, {properties: 1}); cursor = db.prepaids.find({_id: {$in: prepaidIDs}}, {properties: 1});
@ -133,7 +154,7 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
doc = cursor.next(); doc = cursor.next();
if (doc.properties && doc.properties.trialRequestID) { if (doc.properties && doc.properties.trialRequestID) {
for (var i = 0; i < prepaidUsersMap[doc._id.valueOf()].length; i++) { for (var i = 0; i < prepaidUsersMap[doc._id.valueOf()].length; i++) {
userEventMap[prepaidUsersMap[doc._id.valueOf()][i]] = 'DAU classroom trial'; classroomUserEventMap[prepaidUsersMap[doc._id.valueOf()][i]] = 'DAU classroom trial';
} }
} }
} }
@ -141,19 +162,20 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
// Campaign free/paid // Campaign free/paid
// Monthly sub: recipient for payment.stripe.subscriptionID == 'basic' // Monthly sub: recipient for payment.stripe.subscriptionID == 'basic'
// Yearly sub: recipient for paymen.stripe.gems == 42000 // Yearly sub: recipient for paymen.stripe.gems == 42000
// NOTE: payment.stripe.subscriptionID === basic from 2014-12-03 to 2015-03-13
// TODO: missing a number of corner cases here (e.g. cancelled sub, purchased via admin) // TODO: missing a number of corner cases here (e.g. cancelled sub, purchased via admin)
var campaignUserIDs = []; var campaignUserIDs = [];
for (var userID in campaignUserMap) { for (var userID in campaignUserMap) {
if (campaignUserMap[userID]) campaignUserIDs.push(ObjectId(userID)); if (campaignUserMap[userID]) campaignUserIDs.push(ObjectId(userID));
} }
log("Finding campaign paid users.."); log("Finding campaign paid users..");
var dayUserPaidMap = {}; var dayCampaignUserPaidMap = {};
batchSize = 100000; batchSize = 100000;
for (var j = 0; j < campaignUserIDs.length / batchSize + 1; j++) { for (var j = 0; j < campaignUserIDs.length / batchSize + 1; j++) {
cursor = db.payments.find({$and: [ cursor = db.payments.find({$and: [
{recipient: {$in: campaignUserIDs.slice(j * batchSize, j * batchSize + batchSize)}}, {recipient: {$in: campaignUserIDs.slice(j * batchSize, j * batchSize + batchSize)}},
{$or: [ {$or: [
{'stripe.subscriptionID': 'basic'}, {$and: [{amount: {$gt: 0}}, {gems: 3500}, {'stripe.subscriptionID': {$exists: true}}]},
{gems: 42000} {gems: 42000}
]} ]}
]}, {created: 1, gems: 1, recipient: 1}); ]}, {created: 1, gems: 1, recipient: 1});
@ -164,8 +186,8 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
var numDays = doc.gems === 42000 ? 365 : 30; var numDays = doc.gems === 42000 ? 365 : 30;
for (var i = 0; i < numDays; i++) { for (var i = 0; i < numDays; i++) {
day = currentDate.toISOString().substring(0, 10); day = currentDate.toISOString().substring(0, 10);
if (!dayUserPaidMap[day]) dayUserPaidMap[day] = {}; if (!dayCampaignUserPaidMap[day]) dayCampaignUserPaidMap[day] = {};
dayUserPaidMap[day][userID] = true; dayCampaignUserPaidMap[day][userID] = true;
currentDate.setUTCDate(currentDate.getUTCDate() + 1); currentDate.setUTCDate(currentDate.getUTCDate() + 1);
} }
} }
@ -174,13 +196,16 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
log("Calculating DAUs.."); log("Calculating DAUs..");
var activeUsersCounts = {}; var activeUsersCounts = {};
var dailyEventNames = {}; var dailyEventNames = {};
for (day in dayUserMap) { var userDayEventMap = {}
for (var user in dayUserMap[day]) { for (day in dayUserActiveMap) {
var event = userEventMap[user] || (dayUserPaidMap[day] && dayUserPaidMap[day][user] ? 'DAU campaign paid' : 'DAU campaign free'); for (var user in dayUserActiveMap[day]) {
var event = classroomUserEventMap[user] || (dayCampaignUserPaidMap[day] && dayCampaignUserPaidMap[day][user] ? 'DAU campaign paid' : 'DAU campaign free');
dailyEventNames[event] = true; dailyEventNames[event] = true;
if (!activeUsersCounts[day]) activeUsersCounts[day] = {}; if (!activeUsersCounts[day]) activeUsersCounts[day] = {};
if (!activeUsersCounts[day][event]) activeUsersCounts[day][event] = 0; if (!activeUsersCounts[day][event]) activeUsersCounts[day][event] = 0;
activeUsersCounts[day][event]++; activeUsersCounts[day][event]++;
if (!userDayEventMap[user]) userDayEventMap[user] = {};
userDayEventMap[user][day] = event;
} }
} }
// printjson(dailyEventNames) // printjson(dailyEventNames)
@ -209,30 +234,27 @@ function getActiveUserCounts(startDay, endDay, activeUserEvents) {
} }
} }
// Calculate monthly actives for each day, starting when we have enough data
log("Calculating MAUs.."); log("Calculating MAUs..");
var days = []; // Calculate monthly actives for each day, starting when we have enough data
for (var day in activeUsersCounts) { // TODO: missing log data correction for MAUs
days.push(day); for (var user in campaignUserMap) {
} // For each day, starting when we have daysInMonth days of prior data
days.sort(function (a, b) {return a.localeCompare(b);}); for (var i = daysInMonth - 1; i < days.length; i++) {
// print('Num days', days.length); var targetMonthlyDay = days[i];
var eventActiveMap = {}
// For each day, starting when we have daysInMonth days of prior data // Find active events for the last daysInMonth days up to the current day
for (var i = daysInMonth - 1; i < days.length; i++) { for (var j = i - daysInMonth + 1; j <= i; j++) {
// For the last daysInMonth days up to the current day var targetDailyDay = days[j];
var targetMonthlyDay = days[i]; if (dayUserActiveMap[targetDailyDay][user]) {
for (var j = i - daysInMonth + 1; j <= i; j++) { event = userDayEventMap[user][targetDailyDay];
var targetDailyDay = days[j]; eventActiveMap[event] = true;
// For each daily event
for (var event in dailyEventNames) {
// print(day, event, activeUsersCounts[day][event]);
var mauEvent = event.replace('DAU', 'MAU');
if (!activeUsersCounts[targetMonthlyDay][mauEvent]) activeUsersCounts[targetMonthlyDay][mauEvent] = 0
if (activeUsersCounts[targetDailyDay][event]) {
activeUsersCounts[targetMonthlyDay][mauEvent] += activeUsersCounts[targetDailyDay][event];
} }
} }
for (var event in eventActiveMap) {
var mauEvent = event.replace('DAU', 'MAU');
if (!activeUsersCounts[targetMonthlyDay][mauEvent]) activeUsersCounts[targetMonthlyDay][mauEvent] = 0;
activeUsersCounts[targetMonthlyDay][mauEvent]++;
}
} }
} }

View file

@ -7,39 +7,33 @@
// TODO: Investigate school sales amount == zero. Manual input error? // TODO: Investigate school sales amount == zero. Manual input error?
try { var scriptStartTime = new Date();
var scriptStartTime = new Date(); var analyticsStringCache = {};
var analyticsStringCache = {};
var numDays = 40; var numDays = 40;
var daysInMonth = 30; var daysInMonth = 30;
var startDay = new Date(); var startDay = new Date();
today = startDay.toISOString().substr(0, 10); today = startDay.toISOString().substr(0, 10);
startDay.setUTCDate(startDay.getUTCDate() - numDays); startDay.setUTCDate(startDay.getUTCDate() - numDays);
startDay = startDay.toISOString().substr(0, 10); startDay = startDay.toISOString().substr(0, 10);
log("Today is " + today); log("Today is " + today);
log("Start day is " + startDay); log("Start day is " + startDay);
log("Getting recurring revenue counts..."); log("Getting recurring revenue counts...");
var recurringRevenueCounts = getRecurringRevenueCounts(startDay); var recurringRevenueCounts = getRecurringRevenueCounts(startDay);
// printjson(recurringRevenueCounts); // printjson(recurringRevenueCounts);
log("Inserting recurring revenue counts..."); log("Inserting recurring revenue counts...");
for (var event in recurringRevenueCounts) { for (var event in recurringRevenueCounts) {
for (var day in recurringRevenueCounts[event]) { for (var day in recurringRevenueCounts[event]) {
if (today === day) continue; // Never save data for today because it's incomplete if (today === day) continue; // Never save data for today because it's incomplete
// print(event, day, recurringRevenueCounts[event][day]); // print(event, day, recurringRevenueCounts[event][day]);
insertEventCount(event, day, recurringRevenueCounts[event][day]); insertEventCount(event, day, recurringRevenueCounts[event][day]);
}
} }
}
log("Script runtime: " + (new Date() - scriptStartTime)); log("Script runtime: " + (new Date() - scriptStartTime));
}
catch(err) {
log("ERROR: " + err);
printjson(err);
}
function getRecurringRevenueCounts(startDay) { function getRecurringRevenueCounts(startDay) {
if (!startDay) return {}; if (!startDay) return {};
@ -53,7 +47,7 @@ function getRecurringRevenueCounts(startDay) {
while (cursor.hasNext()) { while (cursor.hasNext()) {
var doc = cursor.next(); var doc = cursor.next();
if (doc.created) { if (doc.created) {
day = doc.created.substring(0, 10); day = new Date(doc.created).toISOString().substring(0, 10);
} }
else { else {
day = doc._id.getTimestamp().toISOString().substring(0, 10); day = doc._id.getTimestamp().toISOString().substring(0, 10);