Check if there is still a backgroundActivity and if its just return in silence

--- client/landing/app/CommonViews/comments/commentlistviewcontroller.coffee
+++ client/landing/app/CommonViews/comments/commentlistviewcontroller.coffee
@@ -1,6 +1,7 @@
 class CommentListViewController extends KDListViewController
   constructor:->
     super
+    @_hasBackgrounActivity = no
     @startListeners()

   instantiateListItems:(items, keepDeletedComments = no)->
@@ -36,6 +37,8 @@

     listView.on "AllCommentsLinkWasClicked", (commentHeader)=>

+      return if @_hasBackgrounActivity
+
       # some problems when logged out server doesnt responds
       @utils.wait 5000, -> listView.emit "BackgroundActivityFinished"

@@ -47,6 +50,7 @@

       stack.push (callback) =>
         listView.emit "BackgroundActivityStarted"
+        @_hasBackgrounActivity = yes
         callback()

       for xto in [repliesCount..0]
@@ -65,6 +69,7 @@
           listView.emit "AllCommentsWereAdded"
         else
           log "Failed to get comments..."
+        @_hasBackgrounActivity = no

     listView.registerListener
       KDEventTypes  : "CommentSubmitted"


formatting

formatting


improve error handling in update merger

improve error handling in update merger

--- services/web/app/coffee/Features/ThirdPartyDataStore/UpdateMerger.coffee
+++ services/web/app/coffee/Features/ThirdPartyDataStore/UpdateMerger.coffee
@@ -51,12 +51,13 @@
 					return callback(err)
 				logger.log docLines:docLines, doc_id:doc_id, project_id:project_id, "processing doc update from tpds"
 				if doc_id?
-					editorController.setDoc project_id, doc_id, user_id, docLines, source, (err)->
-						callback()
+					editorController.setDoc project_id, doc_id, user_id, docLines, source, callback
 				else
 					setupNewEntity project_id, path, (err, folder, fileName)->
-						editorController.addDoc project_id, folder._id, fileName, docLines, source, (err)->
-							callback()
+						if err?
+							logger.err err:err, project_id:project_id, doc_id:doc_id, path:path, "error processing file"
+							return callback(err)
+						editorController.addDoc project_id, folder._id, fileName, docLines, source, callback

 		processFile: (project_id, file_id, fsPath, path, source, callback)->
 			finish = (err)->
@@ -64,10 +65,13 @@
 				callback(err)
 			logger.log project_id:project_id, file_id:file_id, path:path, "processing file update from tpds"
 			setupNewEntity project_id, path, (err, folder, fileName) =>
-				if file_id?
+				if err?
+					logger.err err:err, project_id:project_id, file_id:file_id, path:path, "error processing file"
+					return callback(err)
+				else if file_id?
 					editorController.replaceFile project_id, file_id, fsPath, source, finish
 				else
-					editorController.addFile project_id, folder._id, fileName, fsPath, source, finish
+					editorController.addFile project_id, folder?._id, fileName, fsPath, source, finish

 		writeStreamToDisk: (project_id, file_id, stream, callback = (err, fsPath)->)->
 			if !file_id?


Fixes log headers

Fixes log headers

--- tasks/compile.coffee
+++ tasks/compile.coffee
@@ -38,10 +38,15 @@

   # Compile browser scripts
   gulp.task 'compile:' + dist + ':scripts:browser', ['clean:build:' + dist], ->
-    logHeader = [
-      "var log = require.main.require('./utils/logger').debugLogger(__filename);"
-      "var logError = require.main.require('./utils/logger').errorLogger(__filename, false);"
-      "var logFatal = require.main.require('./utils/logger').errorLogger(__filename, true);"
+    loggerHeader = [
+      "if (__filename.indexOf('logger.js') == -1)"
+      "{"
+      "var __LOGGER = require.main.require('./utils/logger');"
+      "var log = __LOGGER.debugLogger(__filename);"
+      "var logError = __LOGGER.errorLogger(__filename, false);"
+      "var logFatal = __LOGGER.errorLogger(__filename, true);"
+      "__LOGGER = undefined;"
+      "}"
     ].join ''

     gulp.src './src/scripts/browser/**/*.js'
@@ -58,16 +63,21 @@
         ]
       .pipe gif args.dev, sourcemaps.write {sourceRoot: 'src/scripts/browser'}
       .pipe gif args.dev, header "require('source-map-support').install();"
-      .pipe header logHeader
+      .pipe header loggerHeader
       .pipe plumber.stop()
       .pipe gulp.dest dir + '/scripts/browser'

   # Compile renderer scripts
   gulp.task 'compile:' + dist + ':scripts:renderer', ['clean:build:' + dist], ->
-    logHeader = [
-      "var log = require.main.require('./logger').debugLogger(__filename);"
-      "var logError = require.main.require('./logger').errorLogger(__filename, false);"
-      "var logFatal = require.main.require('./logger').errorLogger(__filename, true);"
+    loggerHeader = [
+      "if (__filename.indexOf('logger.js') == -1)"
+      "{"
+      "var __LOGGER = require.main.require('../scripts/renderer/logger');"
+      "var log = __LOGGER.debugLogger(__filename);"
+      "var logError = __LOGGER.errorLogger(__filename, false);"
+      "var logFatal = __LOGGER.errorLogger(__filename, true);"
+      "__LOGGER = undefined;"
+      "}"
     ].join ''

     gulp.src './src/scripts/renderer/**/*.js'
@@ -83,7 +93,7 @@
           'default-import-checker'
         ]
       .pipe gif args.dev, sourcemaps.write {sourceRoot: 'src/scripts/renderer'}
-      .pipe header logHeader
+      .pipe header loggerHeader
       .pipe plumber.stop()
       .pipe gulp.dest dir + '/scripts/renderer'
       .pipe livereload()


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

--- test/metered.coffee
+++ test/metered.coffee
@@ -9,7 +9,7 @@

 test "should set max<Attribute> if one doesn't exist", ->
   obj = GameObject
-
+    health:

   obj.include Metered


throttled at 10ms and automatic restarting

--- examples/audio/static/coffee/spectrogram.coffee
+++ examples/audio/static/coffee/spectrogram.coffee
@@ -32,7 +32,7 @@
     @last_render = new Date()

     @paused = false
-
+    @throttled_request_data = _.throttle((=> @request_data()), 10)
     # Set up image plot for the spectrogram
     @image_width = NGRAMS
     @image_height = 256
@@ -79,15 +79,16 @@
     type: 'GET'
     dataType: 'json'
     error: (jqXHR, textStatus, errorThrown) =>
+
       #console.log "AJAX Error: #{textStatus}"
     success: (data, textStatus, jqXHR) =>
       @on_data(data)
       if not @paused
         requestAnimationFrame(
-          => @request_data())
+          => @throttled_request_data())

     new_render = new Date()
-    console.log("render_time", new_render - @last_render)
+    #console.log("render_time", new_render - @last_render)
     @last_render = new_render

   on_data: (data) ->
@@ -406,5 +407,8 @@

 $(document).ready () ->
   spec = new Spectrogram()
-  spec.request_data()
-
+  setInterval((() ->
+    spec.request_data()),
+    400)
+
+


aller !

aller !

--- vendor/assets/javascripts/rails_admin_glyph_theme/src/glyph-theme.coffee
+++ vendor/assets/javascripts/rails_admin_glyph_theme/src/glyph-theme.coffee
@@ -1,4 +1,5 @@
 $ ->
+  # Hack for Ipad
   $("body").on "touchstart.dropdown", ".dropdown-menu", (e) ->
     e.stopPropagation()


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

--- test/animated.coffee
+++ test/animated.coffee
@@ -438,6 +438,19 @@
   equals animation.I.activeAnimation.frames.first(), 20, "The first frame of Idle2 should be the sprite with index 20 in the tileset"
   equals animation.I.currentFrameIndex, 0, "Should be on the first frame of Idle2"

+test "should be able to force transition to new state", ->
+  animation = GameObject
+    data: animationData
+    includedModules: ["Animated"]
+
+  animation.update()
+
+  animation.transition("Idle2", true)
+
+  equals animation.I.activeAnimation.name, "Idle2", "Animation should be in idle2 state after forced transition is called"
+  equals animation.I.activeAnimation.frames.first(), 20, "The first frame of Idle2 should be the sprite with index 20 in the tileset"
+  equals animation.I.currentFrameIndex, 0, "Should be on the first frame of Idle2"
+
 test "should fire Complete event after updating past the last frame", ->
   completeFired = false


Updated tests to reflect progress

Updated tests to reflect progress

--- test/app_test.coffee
+++ test/app_test.coffee
@@ -1,4 +1,7 @@
 request = require 'request'

 describe "iCalledIt Setup", ->
-  it "uses Mocha for tests", -> true    +  it "uses Mocha for tests", -> true
+  it "uses CoffeeScript for most of the things", -> true
+  it "uses requireJs for script loading", -> true
+  it "uses Backbone", -> true


namespaced unbind

namespaced unbind

--- test/bindable.coffee
+++ test/bindable.coffee
@@ -61,7 +61,7 @@
   o.trigger "test"

   o.unbind ".TestNamespace"
-  o.trigger ".TestNamespace"
+  o.trigger "test"

 test "#unbind namespaced", 1, ->
   o = Object.extend({}, Bindable())


more tests

more tests

--- test/celerity.coffee
+++ test/celerity.coffee
@@ -17,7 +17,7 @@
     'incrementAndRead returns increment initially': (test) ->
         config =
             redis: this.redis
-            timespanMs: 1000
+            timespanMs: 20
             bucketCount: 1

         celerity.incrementAndRead config, 'test', 5, (err, count) ->
@@ -25,3 +25,36 @@
             test.equals count, 5

             test.done()
+
+    'increment and then read returns increment initially': (test) ->
+        config =
+            redis: this.redis
+            timespanMs: 20
+            bucketCount: 1
+
+        celerity.increment config, 'test', 5, (err) ->
+            throw err if err?
+            next = ->
+                celerity.read config, 'test', (err, count) ->
+                    throw err if err?
+                    test.equals count, 5
+                    test.done()
+
+            setTimeout next, 10
+
+
+    'single bucket is cleared after timespan': (test) ->
+        config =
+            redis: this.redis
+            timespanMs: 20
+            bucketCount: 1
+
+        celerity.increment config, 'test', 5, (err, count) ->
+            throw err if err?
+            next = ->
+                celerity.read config, 'test', (err, count) ->
+                    throw err if err?
+                    test.equals count, 0
+                    test.done()
+
+            setTimeout next, 21


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

--- test/distance.coffee
+++ test/distance.coffee
@@ -1,27 +0,0 @@
-module "Distance"
-
-test 'it should be includable', ->
-  player = GameObject()
-
-  player.include Distance
-
-  ok player.distance
-
-test 'it should proxy to Point.distance', ->
-  player = GameObject
-    x: 50
-    y: 50
-    width: 10
-    height: 10
-
-  player.include Distance
-
-  enemy = GameObject
-    x: 110
-    y: 120
-    width: 7
-    height: 20
-
-  equals player.distance(enemy), Point.distance(player.position(), enemy.position())
-
-module()


fix for load path issues

fix for load path issues

--- testExamples.coffee
+++ testExamples.coffee
@@ -30,6 +30,7 @@
       # specify additional scripts to load relative to your project root. Note that
       # if a package named dist/#{package.json:name}.js exists, that is added automatically
       addScripts: []
+      verbose: false

@@ -45,18 +46,16 @@
     # their rendering
     html = """

-
-
     """
-    # console.log "WTF", html
-
     $('body').html(html)

-    #console.log "woohoo"
-
+    #console.log "woohoo", @_getSourceCode(exampleScriptFile) #$('#exampleScript').html()
+
     done()

@@ -80,13 +79,18 @@
     scripts = @options.addScripts.concat([])
     npmPackage = JSON.parse(fs.readFileSync('package.json'))
     userDist = "dist/#{npmPackage.name}.js"
-    scripts.push(userDist) if fs.existsSync(userDist)
+    scripts.push(userDist) if fs.existsSync(userDist) && userDist not in scripts

     scriptTags = for script in scripts
-      ""
+      console.log "adding script tag for #{script}" if @options.verbose
+      ""

     return scriptTags.join('\n')

-
+
+  _getSourceCode: (script) ->
+    src = fs.readFileSync(script).toString()
+    # use strict seems to mess with JSDOM (or our code isn't strict enough (fu u pedantic f's))
+    return src.replace('"use strict";', '')


fix setting of username to first name

fix setting of username to first name

--- src/app/users/partials/directives/user-modals.coffee
+++ src/app/users/partials/directives/user-modals.coffee
@@ -10,7 +10,6 @@

   $scope.saveUser = ->
     if $scope.isNew
-      $scope.user.username = $scope.user.first_name
       User.create( user: $scope.user ).$promise.then (
         (response) ->
           $modalInstance.close(response)


remove HTMLElement when removed from AIM tree

--- src/art/engine/forms/synchronized_dom_overlay.coffee
+++ src/art/engine/forms/synchronized_dom_overlay.coffee
@@ -37,6 +37,10 @@
   #################
   _rootElementChanged: (e) ->
     @onNextReady => @_attachDomElement()
+
+  _unregister: ->
+    super
+    @_detachDomElement()

   _queueUpdate: ->
     return if @_updateQueued || !@_attachedToCanvasElement
@@ -86,6 +90,7 @@
     @_attachedToCanvasElement = null

   _attachDomElement: ->
+    return unless @isRegistered
     canvasElement = @getCanvasElement()
     if @_attachedToCanvasElement
       return if canvasElement == @_attachedToCanvasElement


Update el.coffee

Update el.coffee

--- app/locale/el.coffee
+++ app/locale/el.coffee
@@ -1,17 +1,17 @@
 module.exports = nativeDescription: "Ελληνικά", englishDescription: "Greek", translation:
   home:
-    slogan: "Μάθε να Προγραμμάτιζεις Παίζοντας"
+    slogan: "Μάθε να Προγραμματίζεις Παίζοντας"
     no_ie: "Το CodeCombat δεν είναι συμβατό με το Internet Explorer 9 ή κάποια παλαιότερη έκδοση. Συγγνώμη!" # Warning that only shows up in IE8 and older
     no_mobile: "Το CodeCombat δεν σχεδιάστηκε για κινητά και μπορεί να μην λειτουργεί σωστά!" # Warning that shows up on mobile devices
     play: "Παίξε" # The big play button that opens up the campaign view.
-    old_browser: "Ωχ, ο περιηγητής σας είναι πολύ παλαιός για να τρέξει το CodeCombat. Συγγνώμη!" # Warning that shows up on really old Firefox/Chrome/Safari
-    old_browser_suffix: "Μπορείτε να δοκιμάσετε, αλλά πιθανότατα δεν θα λειτουργήσει."
+    old_browser: "Ωχ, ο περιηγητής σου είναι πολύ παλαιός για να τρέξει το CodeCombat. Συγγνώμη!" # Warning that shows up on really old Firefox/Chrome/Safari
+    old_browser_suffix: "Μπορείς να δοκιμάσεις, αλλά πιθανότατα δεν θα λειτουργήσει."
     ipad_browser: "Δυσάρεστα νέα: Το CodeCombat δεν τρέχει στο iPad μέσω περιηγητή. Ευχάριστα νέα: αναμένουμε την έγκριση της Apple για την εφαρμογή μας για iPad."
     campaign: "Εκστρατεία"
     for_beginners: "Για αρχάριους"
     multiplayer: "Πολλαπλοί Παίκτες" # Not currently shown on home page
     for_developers: "Για προγραμματιστές" # Not currently shown on home page.
-    or_ipad: "Ή κατεβάστε για iPad"
+    or_ipad: "Ή κατέβασε για iPad"

   nav:
     play: "Επίπεδα" # The top nav bar entry where players choose which levels to play
@@ -25,7 +25,7 @@
     code: "Κώδικας"
     admin: "Διαχειριστής" # Only shows up when you are an admin
     home: "Αρχική"
-    contribute: "Συνεισφέρω"
+    contribute: "Συνεισφορά"
     legal: "Νομικά"
     about: "Περί ημών"
     contact: "Επικοινωνία"
@@ -40,20 +40,20 @@
     page_not_found: "Η σελίδα δεν βρέθηκε"

   diplomat_suggestion:
-    title: "Συμβάλλετε στη μετάφραση του CodeCombat!" # This shows up when a player switches to a non-English language using the language selector.
-    sub_heading: "Χρειαζόμαστε τις γλωσσικές σας δεξιότητες."
-    pitch_body: "Αναπτύσσουμε το CodeCombat στα αγγλικά, αλλά ήδη έχουμε παίκτες από όλο τον κόσμο. Πολλοί από αυτούς θέλουν να παίξουν στα ελληνικά. Εάν έχετε ευχέρεια και στις δύο γλώσσες, αγγλική κι ελληνική, παρακαλούμε να εγγραφείτε ως Διπλωμάτης και να συμβάλλετε στην απόδοση της ιστοσελίδας CodeCombat και όλων των επιπέδων στην ελληνική γλώσσα."
-    missing_translations: "Μέχρι να να μεταφραστούν τα πάντα στην ελληνική γλώσσα, θα βλέπετε τα αγγλικά λεκτικά στα σημεία όπου τα ελληνικά δεν είναι διαθέσιμα."
-    learn_more: "Μάθετε πώς να γίνετε Διπλωμάτης"
+    title: "Σύμβαλλε στη μετάφραση του CodeCombat!" # This shows up when a player switches to a non-English language using the language selector.
+    sub_heading: "Χρειαζόμαστε τις γλωσσικές σου δεξιότητες."
+    pitch_body: "Αναπτύσσουμε το CodeCombat στα αγγλικά, αλλά ήδη έχουμε παίκτες από όλο τον κόσμο. Πολλοί από αυτούς θέλουν να παίξουν στα ελληνικά. Εάν έχεις ευχέρεια και στις δύο γλώσσες, αγγλική κι ελληνική, παρακαλούμε να εγγραφείς ως Διπλωμάτης και να συμβάλλεις στην απόδοση της ιστοσελίδας CodeCombat και όλων των επιπέδων στην ελληνική γλώσσα."
+    missing_translations: "Μέχρι να να μεταφραστούν τα πάντα στην ελληνική γλώσσα, θα βλέπεις αγγλικά λεκτικά στα σημεία όπου τα ελληνικά δεν είναι διαθέσιμα."
+    learn_more: "Μάθε πώς να γίνεις Διπλωμάτης"
     subscribe_as_diplomat: "Εγγραφή ως Διπλωμάτης"

   play:
-    play_as: "Παίξτε ως" # Ladder page
+    play_as: "Παίξε ως" # Ladder page
     spectate: "Θεατής" # Ladder page
     players: "παίκτες" # Hover over a level on /play
     hours_played: "ώρες παιχνιδιού" # Hover over a level on /play
     items: "Αντικείμενα" # Tooltip on item shop button from /play
-    unlock: "Ξεκλειδώστε" # For purchasing items and heroes
+    unlock: "Ξεκλείδωσε" # For purchasing items and heroes
     confirm: "Επιβεβαίωση"
 #    owned: "Owned" # For items you own
     locked: "Κλειδωμένο"
@@ -78,7 +78,7 @@
 #    awaiting_levels_adventurer: "Sign up as an Adventurer"
 #    awaiting_levels_adventurer_suffix: "to be the first to play new levels."
 #    adjust_volume: "Adjust volume"
-    choose_your_level: "Διάλεξε το επίπεδο σου" # The rest of this section is the old play view at /play-old and isn't very important.
+    choose_your_level: "Διάλεξε το επίπεδό σου" # The rest of this section is the old play view at /play-old and isn't very important.
     adventurer_prefix: "Μπορείτε να μεταβείτε σε οποιοδήποτε επίπεδο κάτω, ή να συζητήσετε για τις πίστες στο "
     adventurer_forum: "Φόρουμ του Adventurer"
     adventurer_suffix: "."
@@ -97,8 +97,8 @@
 #    blurb: "You’re making great progress! Tell someone how much you've learned with CodeCombat."
 #    email_invalid: "Email address invalid."
 #    form_blurb: "Enter their email below and we’ll show them!"
-    form_label: "Διεύθυνση ηλεκτρονικού ταχυδρομίου"
-    placeholder: "Διεύθυνση ηλεκτρονικού ταχυδρομίου"
+    form_label: "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
+    placeholder: "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
     title: "Εξαιρετική Δουλειά, Μαθητευόμενε"
     tell_friend: "Πες το στον φίλο/η σου"
 #    tell_parent: "Tell your Parent"
@@ -131,8 +131,8 @@
     recovery_sent: "Email ανάκτησης στάλθηκε."

   items:
-#    primary: "Primary"
-#    secondary: "Secondary"
+    primary: "Κύρια"
+    secondary: "Δευτερεύοντα"
     armor: "Πανοπλία"
     accessories: "Εξαρτήματα"
     misc: "Διάφορα"
@@ -205,7 +205,7 @@
     hard: "Δύσκολο"
     player: "Παίκτης"
 #    player_level: "Level" # Like player level 5, not like level: Dungeons of Kithgard
-#    warrior: "Warrior"
+    warrior: "Μαχητής"
 #    ranger: "Ranger"
     wizard: "Μάγος"

@@ -226,7 +226,7 @@
     years: "χρόνια"

   play_level:
-    done: "Έτοιμο"
+    done: "Εντάξει"
     home: "Αρχική" # Not used any more, will be removed soon.
     level: "Επίπεδο" # Like "Level: Dungeons of Kithgard"
     skip: "Παράλειψη"
@@ -650,21 +650,21 @@
     autosave: "Οι ρυθμίσεις αποθηκεύονται αυτόματα"
     me_tab: "Εγώ"
     picture_tab: "Φωτογραφία"
-#    delete_account_tab: "Delete Your Account"
-#    wrong_email: "Wrong Email"
+    delete_account_tab: "Διαγραφή λογαριασμού"
+    wrong_email: "Λανθασμένο email"
     upload_picture: "Ανέβασμα φωτογραφίας"
-#    delete_this_account: "Delete this account permanently"
+    delete_this_account: "Μόνιμη διαγραφή του λογαριασμού"
 #    god_mode: "God Mode"
     password_tab: "Κωδικός"
     emails_tab: "Emails"
     admin: "Διαχειριστής"
     new_password: "Καινούργιος Κωδικός"
-    new_password_verify: " Επαλήθευση  Κωδικού"
-#    type_in_email: "Type in your email to confirm the deletion"
+    new_password_verify: "Επαλήθευση Κωδικού"
+    type_in_email: "Γράψε το email σου για να επιβεβαιώσεις τη διαγραφή"
     email_subscriptions: "Συνδρομές Email"
 #    email_subscriptions_none: "No Email Subscriptions."
     email_announcements: "Ανακοινώσεις"
-    email_announcements_description: "Λάβετε emails για τα τελευταία νέα και τις εξελίξεις του CodeCombat."
+    email_announcements_description: "Λάβε emails για τα τελευταία νέα και τις εξελίξεις του CodeCombat."
     email_notifications: "Ειδοποιήσεις"
 #    email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
 #    email_any_notes: "Any Notifications"
@@ -673,14 +673,14 @@
 #    email_recruit_notes: "Job Opportunities"
 #    email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
     contributor_emails: "Contributor Class Emails"
-    contribute_prefix: "Αναζητούμε ανθρώπους που θέλουν να  "
-    contribute_page: "Σελίδα συνεισφοράς"
-    contribute_suffix: " μάθε περισσότερα"
-    email_toggle: "Επέλεξα όλα"
+    contribute_prefix: "Αναζητούμε ανθρώπους που θέλουν να συμμετέχουν! Δες τη "
+    contribute_page: "σελίδα συνεισφοράς"
+    contribute_suffix: " για περισσότερες πληροφορίες."
+    email_toggle: "Επιλογή όλων"
     error_saving: "Σφάλμα αποθήκευσης"
     saved: "Οι αλλαγές αποθηκεύτηκαν"
     password_mismatch: "Οι κωδικοί δεν ταιριάζουν"
-    password_repeat: "Παρακαλώ επαναλάβετε τον κωδικό σας."
+    password_repeat: "Παρακαλώ επανάλαβε τον κωδικό σου."
 #    job_profile: "Job Profile" # Rest of this section (the job profile stuff and wizard stuff) is deprecated
 #    job_profile_approved: "Your job profile has been approved by CodeCombat. Employers will be able to see it until you either mark it inactive or it has not been changed for four weeks."
 #    job_profile_explanation: "Hi! Fill this out, and we will get in touch about finding you a software developer job."


Update EN.coffee

Update EN.coffee

For new Teacher.jade

--- app/locale/en.coffee
+++ app/locale/en.coffee
@@ -546,8 +546,10 @@
     violent_2: "If you are comfortable having your students play Angry Birds, you will be comfortable with CodeCombat."
     for_girls_title: "Is it for girls?"
     for_girls_1: "There are three game modes in CodeCombat: building, puzzles, and combat. We have intentionally designed each to appeal to both boys and girls and think that the building and puzzle levels especially differentiate the game from violent triple A titles that repel female players."
+    age_requirement_title: "What age is it aimed at?"
+    age_requirement_1: "The recommend minimum age is 9, however children as young as 7 can play the first stages with the assistance of an adult."
     what_cover_title: "What do we cover?"
-    what_cover_1: "There are 20 levels in the Hour of Code tutorial that teach and reinforce 6 specific computer science concepts:"
+    what_cover_1: "There are 27 levels in the first stage of CodeCombat that teach and reinforce 6 specific computer science concepts:"
     what_cover_notation_1: "Formal notation"
     what_cover_notation_2: "- builds an understanding of the importance of syntax in programming."
     what_cover_methods_1: "Calling methods"
@@ -565,10 +567,12 @@
     what_cover_logic_2: "- when and how to use if/else to control in-game outcomes."
     what_cover_input_1: "Handling player input"
     what_cover_input_2: "- responding to input events to create a user interface."
+    what_cover_array_1: "Arrays"
+    what_cover_array_2: "- allows the player to create and loop through arrays."
     sys_requirements_title: "System Requirements"
-    sys_requirements_1: "Because CodeCombat is a game, it is more intensive for computers to run smoothly than video or written tutorials. We have optimized it to run quickly on all modern browsers and on older machines so that everyone can play. That said, here are our suggestions for getting the most out of your Hour of Code experience:"
+    sys_requirements_1: "Because CodeCombat is a game, it is more intensive for computers to run smoothly than video or written tutorials. We have optimized it to run quickly on all modern browsers and on older machines so that everyone can play. That said, here are our suggestions for getting the most out of the CodeCombat experience:"
     sys_requirements_2: "Use newer versions of Chrome or Firefox."
-    sys_requirements_3: "Although CodeCombat will work on browsers as old as IE9, the performance is not as good. Chrome is best."
+    sys_requirements_3: "Although CodeCombat will work on browsers as old as Internet Explorer 9, the performance is not as good. Chrome is best."
     sys_requirements_4: "Use newer computers."
     sys_requirements_5: "Older computers, Chromebooks, and netbooks tend to have very few system resources, which makes for a less enjoyable experience. At least 2GB of RAM is required."
     sys_requirements_6: "Allow players to wear headphones/earbuds to hear the audio."


A few tip translations

A few tip translations

--- app/locale/fi.coffee
+++ app/locale/fi.coffee
@@ -299,11 +299,11 @@
     tip_tell_friends: "Pidätkö CodeCombatista? Kerro meistä myös ystävillesi!"
     tip_beta_launch: "CodeCombat avattiin betatestaukseen lokakuussa 2013."
     tip_think_solution: "Mieti ratkaisua, älä ongelmaa."
-#    tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra"
-#    tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis"
-#    tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra"
-#    tip_forums: "Head over to the forums and tell us what you think!"
-#    tip_baby_coders: "In the future, even babies will be Archmages."
+    tip_theory_practice: "Teoriassa teoria ja käytäntö ovat sama asia. Käytännössä näin ei ole. - Yogi Berra"
+    tip_error_free: "Virheettömiä ohjelmia voi kirjoittaa kahdella eri tavalla. Ikävä kyllä kolmas tapa on ainoa toimiva. - Alan Perlis"
+    tip_debugging_program: "Jos debuggaus tarkoittaa virheiden poistamista ohjelmasta, niin ohjelmoinnin on tarkoitettava niiden lisäämistä. - Edsger W. Dijkstra"
+    tip_forums: "Tulepa keskustelupalstalle kertomaan mielipiteesi!"
+    tip_baby_coders: "Tulevaisuudessa jopa vauvoista tulee Arkkimaageja."
 #    tip_morale_improves: "Loading will continue until morale improves."
 #    tip_all_species: "We believe in equal opportunities to learn programming for all species."
 #    tip_reticulating: "Reticulating spines."


add more translations #5

add more translations #5

--- app/locale/fr.coffee
+++ app/locale/fr.coffee
@@ -965,29 +965,27 @@
     jobs_benefit_4: "Vacances illimitées"
     jobs_benefit_5: "dévelopement Professionel  et support constant dans la formation professionnelle – livres gratuits et jeux!"
     jobs_benefit_6: "Couverture Medical (or), dentaire, ophtalmologie"
-#    jobs_benefit_7: "Sit-stand desks for all"
-#    jobs_benefit_9: "10-year option exercise window"
-#    jobs_benefit_10: "Maternity leave: 10 weeks paid, next 6 @ 55% salary"
-#    jobs_benefit_11: "Paternity leave: 10 weeks paid"
-#    jobs_custom_title: "Create Your Own"
-#    jobs_custom_description: "Are you passionate about CodeCombat but don't see a job listed that matches your qualifications? Write us and show how you think you can contribute to our team. We'd love to hear from you!"
-#    jobs_custom_contact_1: "Send us a note at"
-#    jobs_custom_contact_2: "introducing yourself and we might get in touch in the future!"
-#    contact_title: "Press & Contact"
-#    contact_subtitle: "Need more information? Get in touch with us at"
-#    screenshots_title: "Game Screenshots"
-#    screenshots_hint: "(click to view full size)"
-#    downloads_title: "Download Assets & Information"
-#    about_codecombat: "About CodeCombat"
+    jobs_benefit_7: "bureaux réglables pour tous"
+    jobs_benefit_9: "une fenêtre d'option d'exercice de 10 ans"
+    jobs_benefit_10: "Congé maternité : 10 semaines payées, les 6 suivantes à 55% du salaire"
+    jobs_benefit_11: "Congé paternité: 10 semaines payées"
+    jobs_custom_title: "Créer ta propre"
+    jobs_custom_description: "Es-tu passionné de CodeCombat mais ne voit pas un travail listé correspondant à tes qualifications? Écris-nous et montres-nous comment tu penses pouvoir contribuer à notre équipe. Nous aimerions t'entendre !"
+    contact_title: "Presse & Contact"
+    contact_subtitle: "Besoin de plus d'informations? Restez en contact avec nous à"
+    screenshots_title: "Captures d'écran de Jeu"
+    screenshots_hint: "(clique pour voir en plein écran)"
+    downloads_title: "Télécharge les Actifs & Information"
+    about_codecombat: "À propose de CodeCombat"
     logo: "Logo"
-#    screenshots: "Screenshots"
-#    character_art: "Character Art"
-#    download_all: "Download All"
-#    previous: "Previous"
-#    location_title: "We're located in downtown SF:"
-
-#  teachers:
-#    licenses_needed: "Licenses needed"
+    screenshots: "Captures d'écran"
+    character_art: "Visuel des Personnages"
+    download_all: "Télécharge-les tous"
+    previous: "Précédent"
+    location_title: "Nous sommes situés dans le centre de San Francisco:"
+
+  teachers:
+    licenses_needed: "Licences requises"

   special_offer:
 #    special_offer: "Special Offer"


Update it.coffee

Update it.coffee

--- app/locale/it.coffee
+++ app/locale/it.coffee
@@ -59,19 +59,19 @@
     locked: "Bloccato"
     purchasable: "Acquistabile" # For a hero you unlocked but haven't purchased
     available: "Disponibile"
-    skills_granted: "Abilità Fornite" # Property documentation details
+    skills_granted: "Abilità fornite" # Property documentation details
     heroes: "Eroi" # Tooltip on hero shop button from /play
     achievements: "Imprese" # Tooltip on achievement list button from /play
     account: "Account" # Tooltip on account button from /play
     settings: "Impostazioni" # Tooltip on settings button from /play
-#    poll: "Poll" # Tooltip on poll button from /play
+    poll: "Sondaggio" # Tooltip on poll button from /play
     next: "Procedi" # Go from choose hero to choose inventory before playing a level
     change_hero: "Cambia eroe" # Go back from choose inventory to choose hero
     choose_inventory: "Dotazioni"
     buy_gems: "Compra gemme"
     subscription_required: "E' richiesta l'iscrizione"
     older_campaigns: "Campagne precedenti"
-    anonymous: "Giocatore Anonimo"
+    anonymous: "Giocatore anonimo"
     level_difficulty: "Difficoltà: "
     campaign_beginner: "Campagne per principianti"
     awaiting_levels_adventurer_prefix: "Pubblichiamo 5 livelli alla settimana." # {change}
@@ -79,11 +79,11 @@
     awaiting_levels_adventurer_suffix: "per essere tra i primi a provare i nuovi livelli."
     adjust_volume: "Regola il volume"
     choose_your_level: "Scegli il tuo livello" # The rest of this section is the old play view at /play-old and isn't very important.
-    adventurer_prefix: "Puoi entrare in qualunque livello qui sotto, o scambiare opinioni su questi livelli sul"
+    adventurer_prefix: "Puoi entrare in qualunque livello qui sotto, o scambiare opinioni su questi livelli sul "
     adventurer_forum: "forum degli Avventurieri"
     adventurer_suffix: "."
     campaign_old_beginner: "Vecchia campagna principianti"
-    campaign_old_beginner_description: "... nelle quali imparerai i trucchi della programmazione."
+    campaign_old_beginner_description: "... nella quale imparerai i trucchi della programmazione."
     campaign_dev: "Livelli difficili casuali"
     campaign_dev_description: "... nei quali imparerai a usare l'interfaccia facendo qualcosa di un po' più difficile."
     campaign_multiplayer: "Arene multigiocatore"
@@ -94,11 +94,11 @@
     campaign_classic_algorithms_description: "... in cui impari i più comuni algoritmi dell'informatica."

   share_progress_modal:
-#    blurb: "You’re making great progress! Tell your parent how much you've learned with CodeCombat."
+    blurb: "Stai facendo grandi progressi! Dì ai tuoi genitori quanto hai imparato con CodeCombat."
     email_invalid: "Indirizzo email non valido."
     form_blurb: "Inserisci l'indirizzo email di un genitore qui sotto e glielo mostreremo!"
     form_label: "Indirizzo email"
-#    placeholder: "email address"
+    placeholder: "indirizzo email"
     title: "Ottimo lavoro, apprendista"

   login:
@@ -137,8 +137,8 @@
     books: "Libri"

   common:
-    back: "Ritorna" # When used as an action verb, like "Navigate backward"
-    continue: "Continuare" # When used as an action verb, like "Continue forward"
+    back: "Indietro" # When used as an action verb, like "Navigate backward"
+    continue: "Continua" # When used as an action verb, like "Continue forward"
     loading: "Caricamento in corso..."
     saving: "Salvataggio in corso..."
     sending: "Invio in corso..."
@@ -158,7 +158,7 @@
     unwatch: "Non seguire"
     submit_patch: "Invia patch"
     submit_changes: "Invia modifiche"
-#    save_changes: "Save Changes"
+    save_changes: "Salva modifiche"

   general:
     and: "e"
@@ -253,7 +253,7 @@
     victory_sign_up: "Registrati per gli aggiornamenti"
     victory_sign_up_poke: "Vuoi ricevere le ultime novità per email? Crea un account gratuito e ti terremo aggiornato!"
     victory_rate_the_level: "Vota il livello: " # Only in old-style levels.
-  #  victory_return_to_ladder: "Ritorna to Ladder"
+    victory_return_to_ladder: "Ritorna alla classifica"
     victory_play_continue: "Continua"
     victory_saving_progress: "Salvataggio progressi"
     victory_go_home: "Torna alla pagina iniziale" # Only in old-style levels.
@@ -262,9 +262,9 @@
     victory_hour_of_code_done_yes: "Si, ho finito la mia ora di programmazione!"
     victory_experience_gained: "Punti XP guadagnati"
     victory_gems_gained: "Gemme guadagnate"
-#    victory_new_item: "New Item"
+    victory_new_item: "Nuovo oggetto"
 #    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: "Diventa un Vichingo"
     guide_title: "Guida"
     tome_minion_spells: "Incantesimi dei tuoi seguaci" # Only in old-style levels.
     tome_read_only_spells: "Incantesimi in sola lettura" # Only in old-style levels.
@@ -272,19 +272,19 @@
     tome_cast_button_run: "Vai"
     tome_cast_button_running: "In esecuzione"
     tome_cast_button_ran: "Esegui"
-    tome_submit_button: "Entra"
+    tome_submit_button: "Invia codice"
     tome_reload_method: "Ricarica codice originale per questo metodo" # Title text for individual method reload button.
     tome_select_method: "Scegli un metodo"
     tome_see_all_methods: "Vedi tutti i metodi che puoi modificare" # Title text for method list selector (shown when there are multiple programmable methods).
     tome_select_a_thang: "Seleziona qualcuno per "
     tome_available_spells: "Incantesimi disponibili"
-    tome_your_skills: "Le tue Abilità"
+    tome_your_skills: "Le tue abilità"
     tome_help: "Aiuto"
-    tome_current_method: "Metodo Attuale"
+    tome_current_method: "Metodo attuale"
     hud_continue_short: "Continua"
     code_saved: "Codice salvato"
     skip_tutorial: "Salta (esc)"
-#    keyboard_shortcuts: "Key Shortcuts"
+    keyboard_shortcuts: "Scorciatoie da tastiera"
     loading_ready: "Pronto!"
     loading_start: "Inizia livello"
     problem_alert_title: "Sistema il codice"
@@ -295,58 +295,58 @@
     non_user_code_problem_title: "Impossibile caricare livello"
     infinite_loop_title: "Ciclo infinito rilevato"
 #    infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know."
-#    check_dev_console: "You can also open the developer console to see what might be going wrong."
-#    check_dev_console_link: "(instructions)"
+    check_dev_console: "Puoi anche aprire la console sviluppatore per vedere cosa potrebbe non funzionare."
+    check_dev_console_link: "(istruzioni)"
     infinite_loop_try_again: "Riprova"
     infinite_loop_reset_level: "Riavvia livello"
     infinite_loop_comment_out: "Commenta il codice"
-    tip_toggle_play: "Scambia play/paused con Ctrl+P."
+    tip_toggle_play: "Scambia play/pausa con Ctrl+P."
 #    tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward."
-    tip_guide_exists: "Clicca sulla Guida, nel menu di gioco (in alto nella pagina), per informazioni utili."
+    tip_guide_exists: "Clicca sulla Guida, nel menù di gioco (in alto nella pagina), per informazioni utili."
     tip_open_source: "CodeCombat è 100% open source!"
     tip_beta_launch: "CodeCombat è stato lanciato in beta nell'ottobre 2013."
     tip_think_solution: "Pensa alla soluzione, non al problema."
-#    tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra"
-#    tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis"
+    tip_theory_practice: "In teoria, non c'è alcuna differenza tra teoria e pratica. Ma in pratica, c'è. - Yogi Berra"
+    tip_error_free: "Ci sono due modi di scrivere programmi senza errori; solo il terzo funziona. - Alan Perlis"
 #    tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra"
-#    tip_forums: "Head over to the forums and tell us what you think!"
-#    tip_baby_coders: "In the future, even babies will be Archmages."
+    tip_forums: "Visita i nostri forum e facci sapere cosa pensi!"
+    tip_baby_coders: "Nel futuro, persino i neonati saranno Arcimaghi."
 #    tip_morale_improves: "Loading will continue until morale improves."
     tip_all_species: "Crediamo che chiunque debba avere le stesse opportunità di imparare a programmare."
 #    tip_reticulating: "Reticulating spines."
 #    tip_harry: "Yer a Wizard, "
 #    tip_great_responsibility: "With great coding skill comes great debug responsibility."
-    tip_munchkin: "Se non mangi la tua verdura, un munchkin verrà a cercarti quando dormirai."
+    tip_munchkin: "Se non mangi la tua verdura, un munchkin verrà a cercarti mentre dormi."
 #    tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't."
 #    tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda"
 #    tip_no_try: "Do. Or do not. There is no try. - Yoda"
-#    tip_patience: "Patience you must have, young Padawan. - Yoda"
+    tip_patience: "Pazienza devi avere, giovane Padawan. - Yoda"
     tip_documented_bug: "Un bug documentato non è bug; è una feature."
-#    tip_impossible: "It always seems impossible until it's done. - Nelson Mandela"
-    tip_talk_is_cheap: "Parlare è cheap. Mostrami il codice. - Linus Torvalds"
+    tip_impossible: "Sembra sempre impossibile fino a quando non ci si riesce. - Nelson Mandela"
+    tip_talk_is_cheap: "A parlare sono bravi tutti. Mostrami il codice. - Linus Torvalds"
 #    tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay"
-    tip_hardware_problem: "D: Quanti programmatori servono per cambiare una lampadina?  A: Nessuno, è un problema di hardware."
-#    tip_hofstadters_law: "Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law."
-#    tip_premature_optimization: "Premature optimization is the root of all evil. - Donald Knuth"
+    tip_hardware_problem: "Quanti programmatori servono per cambiare una lampadina?  Nessuno, è un problema di hardware."
+    tip_hofstadters_law: "Legge di Hofstadter: Ci vuole sempre più del previsto, anche quando tieni conto della legge di Hofstadter."
+    tip_premature_optimization: "L'ottimizzazione prematura è l'origine di tutti i mali. - Donald Knuth"
     tip_brute_force: "Quando sei in dubbio, usa la forza bruta. - Ken Thompson"
     tip_extrapolation: "Ci sono soltanto due tipi di persone: quelli che possono estrapolare da dati incompleti..."
-#    tip_superpower: "Coding is the closest thing we have to a superpower."
+    tip_superpower: "La programmazione è la cosa che più si avvicina a un superpotere."
 #    tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds"
-#    tip_no_code: "No code is faster than no code."
-#    tip_code_never_lies: "Code never lies, comments sometimes do. — Ron Jeffries"
+    tip_no_code: "Nessun codice è più veloce di nessun codice."
+    tip_code_never_lies: "Il codice non mente mai, ma i commenti a volte lo fanno. — Ron Jeffries"
 #    tip_reusable_software: "Before software can be reusable it first has to be usable."
-#    tip_optimization_operator: "Every language has an optimization operator. In most languages that operator is ‘//’"
+    tip_optimization_operator: "Ogni linguaggio ha un operatore di ottimizzazione. Nella maggior parte dei casi questo operatore è ‘//’"
 #    tip_lines_of_code: "Measuring programming progress by lines of code is like measuring aircraft building progress by weight. — Bill Gates"
-#    tip_source_code: "I want to change the world but they would not give me the source code."
-#    tip_javascript_java: "Java is to JavaScript what Car is to Carpet. - Chris Heilmann"
+    tip_source_code: "Vorrei cambiare il mondo, ma non mi danno il codice sorgente."
+    tip_javascript_java: "Java sta a JavaScript come Cane sta a Canestro. - Chris Heilmann"
 #    tip_move_forward: "Whatever you do, keep moving forward. - Martin Luther King Jr."
-#    tip_google: "Have a problem you can't solve? Google it!"
-#    tip_adding_evil: "Adding a pinch of evil."
+    tip_google: "Hai un problema che non riesci a risolvere? Cerca su Google!"
+    tip_adding_evil: "Aggiungendo un pizzico di malvagità."
 #    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: "Puoi aiutare CodeCombat a migliorare!"
-#    tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch"
-#    tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus"
-#    tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha"
+    tip_recurse: "Iterare e umano, usare la ricorsione è divino. - L. Peter Deutsch"
+    tip_free_your_mind: "Devi liberarti di tutto questo, Neo. Paura, dubbio, sfiducia. Libera la tua mente. - Morpheus"
+    tip_strong_opponents: "Anche il più tenace degli avversari ha sempre una debolezza. - Itachi Uchiha"

   game_menu:
     inventory_tab: "Inventario"
@@ -538,7 +538,7 @@
     general_options: "Opzioni generali" # Check out the Options tab in the Game Menu while playing a level
     volume_label: "Volume"
     music_label: "Musica"
-    music_description: "Accendi/spegni musica di sottofondo."
+    music_description: "Attiva/disattiva musica di sottofondo."
     editor_config: "Editor config"
     editor_config_title: "Editor di configurazione"
     editor_config_level_language_label: "Linguaggio per questo livello"
@@ -655,14 +655,14 @@
     forum_prefix: "Per discussioni pubbliche, puoi provare "
     forum_page: "il nostro forum"
     forum_suffix: " invece."
-#    faq_prefix: "There's also a"
+    faq_prefix: "C'è anche una"
     faq: "FAQ"
-#    subscribe_prefix: "If you need help figuring out a level, please"
-#    subscribe: "buy a CodeCombat subscription"
-#    subscribe_suffix: "and we'll be happy to help you with your code."
-#    subscriber_support: "Since you're a CodeCombat subscriber, your email will get our priority support."
-#    screenshot_included: "Screenshot included."
-#    where_reply: "Where should we reply?"
+    subscribe_prefix: "Se hai bisogno di aiuto nel completare un livello, per favore"
+    subscribe: "acquista un abbonamento a CodeCombat"
+    subscribe_suffix: "e saremo felici di aiutarti con il tuo codice."
+    subscriber_support: "Dato che hai un abbonamento a CodeCombat, la tua email avrà supporto prioritario."
+    screenshot_included: "Screenshot incluso."
+    where_reply: "Dove dovremmo risponderti?"
     send: "Invia feedback"
 #    contact_candidate: "Contact Candidate" # Deprecated
 #    recruitment_reminder: "Use this form to reach out to candidates you are interested in interviewing. Remember that CodeCombat charges 15% of first-year salary. The fee is due upon hiring the employee and is refundable for 90 days if the employee does not remain employed. Part time, remote, and contract employees are free, as are interns." # Deprecated
@@ -876,16 +876,16 @@
     new_article_title_login: "Accedi per creare un nuovo articolo"
 #    new_thang_title_login: "Log In to Create a New Thang Type"
     new_level_title_login: "Accedi per creare un nuovo livello"
-#    new_achievement_title: "Create a New Achievement"
-#    new_achievement_title_login: "Log In to Create a New Achievement"
-#    new_poll_title: "Create a New Poll"
-#    new_poll_title_login: "Log In to Create a New Poll"
-#    article_search_title: "Search Articles Here"
+    new_achievement_title: "Crea una nuova Impresa"
+    new_achievement_title_login: "Accedi per creare una nuova Impresa"
+    new_poll_title: "Crea un nuovo sondaggio"
+    new_poll_title_login: "Accedi per creare un nuovo sondaggio"
+    article_search_title: "Cerca articoli qui"
 #    thang_search_title: "Search Thang Types Here"
-#    level_search_title: "Search Levels Here"
-#    achievement_search_title: "Search Achievements"
-#    poll_search_title: "Search Polls"
-#    read_only_warning2: "Note: you can't save any edits here, because you're not logged in."
+    level_search_title: "Cerca livelli qui"
+    achievement_search_title: "Cerca Imprese"
+    poll_search_title: "Cerca sondaggi"
+    read_only_warning2: "Nota: non puoi salvare nessuna modifica qui, perchè non hai effettuato l'accesso al sito."
 #    no_achievements: "No achievements have been added for this level yet."
 #    achievement_query_misc: "Key achievement off of miscellanea"
 #    achievement_query_goals: "Key achievement off of level goals"
@@ -898,20 +898,20 @@
     edit_btn_preview: "Anteprima"
     edit_article_title: "Modifica articolo"

-#  polls:
-#    priority: "Priority"
-
+  polls:
+    priority: "Priorità"
+
   contribute:
     page_title: "Contribuire"
 #    intro_blurb: "CodeCombat is 100% open source! Hundreds of dedicated players have helped us build the game into what it is today. Join us and write the next chapter in CodeCombat's quest to teach the world to code!"
 #    alert_account_message_intro: "Hey there!"
 #    alert_account_message: "To subscribe for class emails, you'll need to be logged in first."
 #    archmage_introduction: "One of the best parts about building games is they synthesize so many different things. Graphics, sound, real-time networking, social networking, and of course many of the more common aspects of programming, from low-level database management, and server administration to user facing design and interface building. There's a lot to do, and if you're an experienced programmer with a hankering to really dive into the nitty-gritty of CodeCombat, this class might be for you. We would love to have your help building the best programming game ever."
-#    class_attributes: "Class Attributes"
+    class_attributes: "Attributi di classe"
 #    archmage_attribute_1_pref: "Knowledge in "
 #    archmage_attribute_1_suf: ", or a desire to learn. Most of our code is in this language. If you're a fan of Ruby or Python, you'll feel right at home. It's JavaScript, but with a nicer syntax."
 #    archmage_attribute_2: "Some experience in programming and personal initiative. We'll help you get oriented, but we can't spend much time training you."
-#    how_to_join: "How To Join"
+    how_to_join: "Come unirsi"
 #    join_desc_1: "Anyone can help out! Just check out our "
 #    join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? "
 #    join_desc_3: ", or find us in our "
@@ -925,10 +925,10 @@
 #    artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix."
 #    artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!"
 #    artisan_join_desc: "Use the Level Editor in these steps, give or take:"
-#    artisan_join_step1: "Read the documentation."
+    artisan_join_step1: "Leggi la documentazione."
     artisan_join_step2: "Crea un nuovo livello ed esplora quelli già esistenti."
 #    artisan_join_step3: "Find us in our public HipChat room for help."
-    artisan_join_step4: "Posta il tuo livello sul forum per ricevere del feedback."
+    artisan_join_step4: "Pubblica il tuo livello sul forum per sapere cosa ne pensano altre persone."
 #    artisan_subscribe_desc: "Get emails on level editor updates and announcements."
 #    adventurer_introduction: "Let's be clear about your role: you are the tank. You're going to take heavy damage. We need people to try out brand-new levels and help identify how to make things better. The pain will be enormous; making good games is a long process and no one gets it right the first time. If you can endure and have a high constitution score, then this class might be for you."
 #    adventurer_attribute_1: "A thirst for learning. You want to learn how to code and we want to teach you how to code. You'll probably be doing most of the teaching in this case, though."
@@ -951,9 +951,9 @@
     diplomat_i18n_page_prefix: "Puoi iniziare a tradurre i livelli andando alla nostra"
     diplomat_i18n_page: "pagina traduzioni"
     diplomat_i18n_page_suffix: ", o sulla nostra interfaccia e sito su GitHub."
-    diplomat_join_pref_github: "Trova il file locale della tua lingua "
+    diplomat_join_pref_github: "Trova il file della tua lingua "
     diplomat_github_url: "su GitHub"
-    diplomat_join_suf_github: ", modificalo online e invia una richiesta di pull. Ricordati di segnare la casella qui sotto per essere aggiornato sugli sviluppi delle traduzioni!"
+    diplomat_join_suf_github: ", modificalo online e invia una richiesta di pull. Ricordati di spuntare la casella qui sotto per essere aggiornato sugli sviluppi delle traduzioni!"
     diplomat_subscribe_desc: "Ricevi messaggi email sullo sviluppo i18n e i livelli da tradurre."
     ambassador_introduction: "Stiamo costruendo questa comunità, e voi siete i collegamenti. Abbiamo chat Olark, email e reti sociali con tanta gente con cui parlare ed aiutare a familiarizzare con il gioco, e da cui imparare. Se vuoi aiutare le persone a farsi coinvolgere e a divertirsi; se sei entrato nello spirito di CodeCombat e di dove stiamo andando, questa categoria può essere per te."
 #    ambassador_attribute_1: "Communication skills. Be able to identify the problems players are having and help them solve them. Also, keep the rest of us informed about what players are saying, what they like and don't like and want more of!"
@@ -970,7 +970,7 @@
     helpful_ambassadors: "I nostri servizievoli ambasciatori:"

   ladder:
-    please_login: "Per favore accedi prima di giocare una partita classificata ."
+    please_login: "Per favore accedi prima di giocare una partita classificata."
     my_matches: "Le mie partite"
     simulate: "Simula"
 #    simulation_explanation: "By simulating games you can get your game ranked faster!"
@@ -981,49 +981,49 @@
 #    games_simulated: "Games simulated"
 #    games_played: "Games played"
 #    ratio: "Ratio"
-#    leaderboard: "Leaderboard"
+     leaderboard: "Classifica"
 #    battle_as: "Battle as "
-#    summary_your: "Your "
-#    summary_matches: "Matches - "
-#    summary_wins: " Wins, "
-#    summary_losses: " Losses"
-#    rank_no_code: "No New Code to Rank"
-    rank_my_game: "Valuta il mio gioco!"
+    summary_your: "Le tue "
+    summary_matches: "Partite - "
+    summary_wins: " vittorie, "
+    summary_losses: " sconfitte"
+    rank_no_code: "Nessun nuovo codice da valutare"
+    rank_my_game: "Valuta la mia partita!"
     rank_submitting: "Inviando..."
     rank_submitted: "Inviato per essere valutato"
     rank_failed: "Impossibile valutare"
-    rank_being_ranked: "Il Gioco è stato valutato"
-#    rank_last_submitted: "submitted "
+    rank_being_ranked: "La partita è in valutazione."
+    rank_last_submitted: "inviata "
 #    help_simulate: "Help simulate games?"
     code_being_simulated: "Il tuo nuovo codice sarà simulato da altri giocatori per essere valutato. Sarà aggiornato ad ogni nuova partita."
     no_ranked_matches_pre: "Nessuna partita valutata per "
     no_ranked_matches_post: " squadra! Gioca contro altri avversari e poi torna qui affinchè la tua partita venga valutata."
     choose_opponent: "Scegli un avversario"
-    select_your_language: "Scegli la lingua!"
+    select_your_language: "Scegli il linguaggio!"
     tutorial_play: "Gioca il Tutorial"
     tutorial_recommended: "Consigliato se questa è la tua primissima partita"
     tutorial_skip: "Salta il Tutorial"
     tutorial_not_sure: "Non sei sicuro di quello che sta accadendo?"
     tutorial_play_first: "Prima di tutto gioca al Tutorial."
-#    simple_ai: "Simple AI"
+    simple_ai: "IA semplice"
     warmup: "Allenamento"
 #    friends_playing: "Friends Playing"
     log_in_for_friends: "Accedi per giocare con i tuoi amici!"
-#    social_connect_blurb: "Connect and play against your friends!"
+    social_connect_blurb: "Connettiti e gioca contro i tuoi amici!"
     invite_friends_to_battle: "Invita i tuoi amici a unirsi a te nella battaglia!"
     fight: "Combatti!"
 #    watch_victory: "Watch your victory"
 #    defeat_the: "Defeat the"
 #    tournament_started: ", started"
 #    tournament_ends: "Tournament ends"
-#    tournament_ended: "Tournament ended"
-#    tournament_rules: "Tournament Rules"
+    tournament_ended: "Torneo concluso"
+    tournament_rules: "Regole torneo"
 #    tournament_blurb: "Write code, collect gold, build armies, crush foes, win prizes, and upgrade your career in our $40,000 Greed tournament! Check out the details"
 #    tournament_blurb_criss_cross: "Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details"
 #    tournament_blurb_zero_sum: "Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer. The tournament began on Friday, March 27 and will run until Monday, April 6 at 5PM PDT. Compete for fun and glory! Check out the details"
 #    tournament_blurb_blog: "on our blog"
-#    rules: "Rules"
-#    winners: "Winners"
+    rules: "Regole"
+    winners: "Vincitori"

   user:
     stats: "Statistiche"
@@ -1033,22 +1033,22 @@
     last_played: "Ultimo giocato"
     status: "Stato"
     status_completed: "Completati"
-    status_unfinished: "Non finiti"
+    status_unfinished: "Incompleti"
     no_singleplayer: "Nessun livello singolo giocato finora."
-    no_multiplayer: "Nessun multi-livello giocato finora."
+    no_multiplayer: "Nessun livello multigiocatore giocato finora."
     no_achievements: "Nessun guadagno finora."
     favorite_prefix: "Lingua preferita "
     favorite_postfix: "."
 #    not_member_of_clans: "Not a member of any clans yet."

   achievements:
-    last_earned: "Ultimo completato"
+    last_earned: "Ultima compiuta"
     amount_achieved: "Quantità"
-#    achievement: "Achievement"
+    achievement: "Impresa"
 #    category_contributor: "Contributor"
 #    category_ladder: "Ladder"
     category_level: "Livello"
-#    category_miscellaneous: "Miscellaneous"
+    category_miscellaneous: "Varie"
     category_levels: "Livelli"
 #    category_undefined: "Uncategorized"
     current_xp_prefix: ""


Changed manual

Changed manual

Manual is ambiguous, is it manual as in "manual instead of automatic" or manual as in a handbook/guide. I thought it was the latter, so I changed it here.

--- app/locale/nl.coffee
+++ app/locale/nl.coffee
@@ -8,7 +8,7 @@
     delay_1_sec: "1 seconde"
     delay_3_sec: "3 secondes"
     delay_5_sec: "5 secondes"
-    manual: "Handmatig"
+    manual: "Handleiding"
     fork: "Fork"
     play: "Spelen"