From 943126647b33dc805def8904b72f795b51bee672 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Mon, 6 Sep 2021 12:25:23 +0200
Subject: [PATCH 01/49] Upgrade gitignore

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index f02a819..8537f75 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 /cache/
 /dependencies/
 /build/
+*~

From 2c275424a3bb4f20de0b66a28615941d70a02fe1 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Mon, 6 Sep 2021 12:28:35 +0200
Subject: [PATCH 02/49] Add split description in italia and english and add
 directory it in levels

---
 levels/it/bisect/bisect                       |  43 +++++
 levels/it/bisect/sequence                     |   1 +
 levels/it/branches/branch-create              |  44 +++++
 levels/it/branches/branch-remove              |  47 +++++
 levels/it/branches/checkout-commit            |  43 +++++
 levels/it/branches/fork                       |  65 +++++++
 levels/it/branches/grow                       |  49 +++++
 levels/it/branches/reorder                    |  89 +++++++++
 levels/it/branches/sequence                   |   6 +
 levels/it/changing-the-past/rebase            |  86 +++++++++
 levels/it/changing-the-past/reorder           |  78 ++++++++
 levels/it/changing-the-past/sequence          |   2 +
 levels/it/files/files-add                     |  32 ++++
 levels/it/files/files-delete                  |  36 ++++
 levels/it/files/sequence                      |   3 +
 levels/it/index/add                           |  38 ++++
 levels/it/index/change                        |  31 +++
 levels/it/index/checkout                      |  25 +++
 levels/it/index/compare                       |  51 +++++
 levels/it/index/new                           |  28 +++
 levels/it/index/reset                         |  37 ++++
 levels/it/index/rm                            |  24 +++
 levels/it/index/sequence                      |   5 +
 levels/it/index/steps                         |  53 ++++++
 levels/it/intro/cli                           |  27 +++
 levels/it/intro/commit                        |  32 ++++
 levels/it/intro/copies                        |  42 ++++
 levels/it/intro/init                          |  24 +++
 levels/it/intro/remote                        |  52 +++++
 levels/it/intro/risky                         |  42 ++++
 levels/it/intro/sequence                      |   6 +
 levels/it/intro/who-are-you                   |  38 ++++
 levels/it/low-level/basics                    |  26 +++
 levels/it/low-level/blob-create               |  38 ++++
 levels/it/low-level/blob-remove               |  27 +++
 levels/it/low-level/commit-create             |  37 ++++
 levels/it/low-level/commit-parents            |  31 +++
 levels/it/low-level/commit-rhombus            |  30 +++
 levels/it/low-level/index-add                 |  37 ++++
 levels/it/low-level/index-remove              |  29 +++
 levels/it/low-level/index-update              |  33 ++++
 levels/it/low-level/puzzle-apocalypse         |  41 ++++
 levels/it/low-level/puzzle-precious-blob      |  28 +++
 .../low-level/puzzle-trees-all-the-way-down   |  34 ++++
 levels/it/low-level/ref-create                |  42 ++++
 levels/it/low-level/ref-move                  |  41 ++++
 levels/it/low-level/ref-remove                |  41 ++++
 levels/it/low-level/sequence                  |  18 ++
 levels/it/low-level/symref-create             |  21 ++
 levels/it/low-level/symref-no-deref           |  46 +++++
 levels/it/low-level/tree-create               |  35 ++++
 levels/it/low-level/tree-nested               |  38 ++++
 levels/it/low-level/tree-read                 |  51 +++++
 levels/it/low-level/welcome                   |  33 ++++
 levels/it/merge/conflict                      |  47 +++++
 levels/it/merge/merge                         |  82 ++++++++
 levels/it/merge/merge-abort                   |  54 ++++++
 levels/it/merge/sequence                      |   2 +
 levels/it/remotes/friend                      |  47 +++++
 levels/it/remotes/problems                    |  33 ++++
 levels/it/remotes/sequence                    |   2 +
 levels/it/sandbox/empty                       |   7 +
 levels/it/sandbox/remote                      |  22 +++
 levels/it/sandbox/sequence                    |   3 +
 levels/it/sandbox/three-commits               |  26 +++
 levels/it/sequence                            |  13 ++
 levels/it/shit-happens/bad-commit             |  30 +++
 .../it/shit-happens/pushed-something-broken   |  54 ++++++
 levels/it/shit-happens/reflog                 |  26 +++
 levels/it/shit-happens/restore-a-file         |  22 +++
 .../shit-happens/restore-a-file-from-the-past |  21 ++
 levels/it/shit-happens/sequence               |   5 +
 levels/it/stash/sequence                      |   5 +
 levels/it/stash/stash                         |  45 +++++
 levels/it/stash/stash-branch                  |  48 +++++
 levels/it/stash/stash-clear                   |  57 ++++++
 levels/it/stash/stash-merge                   |  54 ++++++
 levels/it/stash/stash-pop                     |  46 +++++
 levels/it/tags/add-tag                        |  53 ++++++
 levels/it/tags/add-tag-later                  |  50 +++++
 levels/it/tags/remote-tag                     |  58 ++++++
 levels/it/tags/remove-tag                     |  53 ++++++
 levels/it/tags/sequence                       |   4 +
 levels/it/unused/checkout                     |  31 +++
 levels/it/unused/clone                        |  20 ++
 levels/it/unused/commit                       |  27 +++
 levels/it/unused/commit-a                     |  26 +++
 levels/it/unused/fetch                        |  35 ++++
 levels/it/unused/files-move                   |  27 +++
 levels/it/unused/index-mv                     |  26 +++
 levels/it/unused/init                         |  14 ++
 levels/it/unused/pull-push                    |  51 +++++
 levels/it/unused/remotes-add                  |  33 ++++
 levels/it/unused/remotes-delete               |  23 +++
 levels/it/unused/restore                      |  28 +++
 levels/it/unused/split                        |  26 +++
 levels/it/unused/steps                        |  23 +++
 levels/it/unused/who-are-you                  |  23 +++
 levels/it/workflows/gitignore                 |  18 ++
 levels/it/workflows/pr                        |  25 +++
 levels/it/workflows/sequence                  |   1 +
 resources/cards.json                          | 180 ++++++++++++++----
 scenes/cards.gd                               |   5 +-
 scenes/title.tscn                             |   1 +
 104 files changed, 3510 insertions(+), 38 deletions(-)
 create mode 100644 levels/it/bisect/bisect
 create mode 100644 levels/it/bisect/sequence
 create mode 100644 levels/it/branches/branch-create
 create mode 100644 levels/it/branches/branch-remove
 create mode 100644 levels/it/branches/checkout-commit
 create mode 100644 levels/it/branches/fork
 create mode 100644 levels/it/branches/grow
 create mode 100644 levels/it/branches/reorder
 create mode 100644 levels/it/branches/sequence
 create mode 100644 levels/it/changing-the-past/rebase
 create mode 100644 levels/it/changing-the-past/reorder
 create mode 100644 levels/it/changing-the-past/sequence
 create mode 100644 levels/it/files/files-add
 create mode 100644 levels/it/files/files-delete
 create mode 100644 levels/it/files/sequence
 create mode 100644 levels/it/index/add
 create mode 100644 levels/it/index/change
 create mode 100644 levels/it/index/checkout
 create mode 100644 levels/it/index/compare
 create mode 100644 levels/it/index/new
 create mode 100644 levels/it/index/reset
 create mode 100644 levels/it/index/rm
 create mode 100644 levels/it/index/sequence
 create mode 100644 levels/it/index/steps
 create mode 100644 levels/it/intro/cli
 create mode 100644 levels/it/intro/commit
 create mode 100644 levels/it/intro/copies
 create mode 100644 levels/it/intro/init
 create mode 100644 levels/it/intro/remote
 create mode 100644 levels/it/intro/risky
 create mode 100644 levels/it/intro/sequence
 create mode 100644 levels/it/intro/who-are-you
 create mode 100644 levels/it/low-level/basics
 create mode 100644 levels/it/low-level/blob-create
 create mode 100644 levels/it/low-level/blob-remove
 create mode 100644 levels/it/low-level/commit-create
 create mode 100644 levels/it/low-level/commit-parents
 create mode 100644 levels/it/low-level/commit-rhombus
 create mode 100644 levels/it/low-level/index-add
 create mode 100644 levels/it/low-level/index-remove
 create mode 100644 levels/it/low-level/index-update
 create mode 100644 levels/it/low-level/puzzle-apocalypse
 create mode 100644 levels/it/low-level/puzzle-precious-blob
 create mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down
 create mode 100644 levels/it/low-level/ref-create
 create mode 100644 levels/it/low-level/ref-move
 create mode 100644 levels/it/low-level/ref-remove
 create mode 100644 levels/it/low-level/sequence
 create mode 100644 levels/it/low-level/symref-create
 create mode 100644 levels/it/low-level/symref-no-deref
 create mode 100644 levels/it/low-level/tree-create
 create mode 100644 levels/it/low-level/tree-nested
 create mode 100644 levels/it/low-level/tree-read
 create mode 100644 levels/it/low-level/welcome
 create mode 100644 levels/it/merge/conflict
 create mode 100644 levels/it/merge/merge
 create mode 100644 levels/it/merge/merge-abort
 create mode 100644 levels/it/merge/sequence
 create mode 100644 levels/it/remotes/friend
 create mode 100644 levels/it/remotes/problems
 create mode 100644 levels/it/remotes/sequence
 create mode 100644 levels/it/sandbox/empty
 create mode 100644 levels/it/sandbox/remote
 create mode 100644 levels/it/sandbox/sequence
 create mode 100644 levels/it/sandbox/three-commits
 create mode 100644 levels/it/sequence
 create mode 100644 levels/it/shit-happens/bad-commit
 create mode 100644 levels/it/shit-happens/pushed-something-broken
 create mode 100644 levels/it/shit-happens/reflog
 create mode 100644 levels/it/shit-happens/restore-a-file
 create mode 100644 levels/it/shit-happens/restore-a-file-from-the-past
 create mode 100644 levels/it/shit-happens/sequence
 create mode 100644 levels/it/stash/sequence
 create mode 100644 levels/it/stash/stash
 create mode 100644 levels/it/stash/stash-branch
 create mode 100644 levels/it/stash/stash-clear
 create mode 100644 levels/it/stash/stash-merge
 create mode 100644 levels/it/stash/stash-pop
 create mode 100644 levels/it/tags/add-tag
 create mode 100644 levels/it/tags/add-tag-later
 create mode 100644 levels/it/tags/remote-tag
 create mode 100644 levels/it/tags/remove-tag
 create mode 100644 levels/it/tags/sequence
 create mode 100644 levels/it/unused/checkout
 create mode 100644 levels/it/unused/clone
 create mode 100644 levels/it/unused/commit
 create mode 100644 levels/it/unused/commit-a
 create mode 100644 levels/it/unused/fetch
 create mode 100644 levels/it/unused/files-move
 create mode 100644 levels/it/unused/index-mv
 create mode 100644 levels/it/unused/init
 create mode 100644 levels/it/unused/pull-push
 create mode 100644 levels/it/unused/remotes-add
 create mode 100644 levels/it/unused/remotes-delete
 create mode 100644 levels/it/unused/restore
 create mode 100644 levels/it/unused/split
 create mode 100644 levels/it/unused/steps
 create mode 100644 levels/it/unused/who-are-you
 create mode 100644 levels/it/workflows/gitignore
 create mode 100644 levels/it/workflows/pr
 create mode 100644 levels/it/workflows/sequence

diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect
new file mode 100644
index 0000000..0b66edb
--- /dev/null
+++ b/levels/it/bisect/bisect
@@ -0,0 +1,43 @@
+title = Yellow brick road
+cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad
+
+[description]
+
+(Please zoom out a bit using your mouse wheel! :D)
+
+Oh no! You have lost your key at some point during the day!
+
+Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!
+
+First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card".
+
+After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?
+
+[setup]
+
+echo "You still have your key." > you
+
+for i in {1..30}; do
+    if test $i -eq 12; then
+        echo "Your pocket is empty." > you
+        echo "Is on the ground." > key
+    fi
+    if test $i -eq 13; then
+        echo "Is holding a key in its beak." > bird
+        rm key
+    fi
+    if test $i -eq 14; then
+        rm bird
+    fi
+    git add .
+    git commit --allow-empty -m "$i"
+done
+
+[win]
+
+# Find the last good commit
+test "$(git log --pretty=%s main | head -1)" -eq 11
+
+[congrats]
+
+Well done! :) The only problem is that you now have to walk all the way back home, again...
diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence
new file mode 100644
index 0000000..e8018fe
--- /dev/null
+++ b/levels/it/bisect/sequence
@@ -0,0 +1 @@
+bisect
diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create
new file mode 100644
index 0000000..110d929
--- /dev/null
+++ b/levels/it/branches/branch-create
@@ -0,0 +1,44 @@
+title = Creating branches
+cards = checkout commit-auto branch branch-delete reset-hard
+
+[description]
+
+You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!
+
+To make it easier to tell which timeline is which, you can create time portals! (We call these "branches".)
+
+[cli]
+
+Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called "birthday", you can type `git checkout birthday` to travel to it!
+
+[setup]
+
+echo "You wrap the birthday present, and grab your concert ticket." > you
+git add .
+git commit -m "Evening preparations"
+echo "You go to the birthday party!" >> you
+git add .
+git commit -m "Go to the birthday"
+
+git checkout HEAD~1
+echo "You go to the concert!" > you
+git add .
+git commit -m "Go to the concert"
+
+git checkout HEAD~1
+
+git branch -D main
+
+[win]
+
+# Create a branch called 'birthday' that points to the birthday timeline.
+git show birthday | grep 'to the birthday'
+
+# Create a branch called 'concert' that points to the concert timeline.
+git show concert | grep 'to the concert'
+
+[congrats]
+
+Now you can travel between those branches easily (using `git checkout`) - try it!
+
+Your friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!
diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove
new file mode 100644
index 0000000..3b576e0
--- /dev/null
+++ b/levels/it/branches/branch-remove
@@ -0,0 +1,47 @@
+title = Deleting branches
+cards = checkout commit-auto reset-hard branch-delete
+
+[description]
+
+Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!
+
+This Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around.
+
+[setup]
+
+echo You leave your house and start walking to school. > you
+git add .
+git commit -m "Good morning!"
+
+echo You walk on the right side of the street. >> you
+git commit -am "Right side"
+
+echo You jump over an manhole in the walkway, and arrive at school on time. >> you
+git commit -am "Jump"
+
+git checkout HEAD^ -b friend
+echo Suddenly, you fall down, splash into stinking water, and are eaten by an alligator. >> you
+git commit -am "A new friend"
+
+git checkout HEAD~2 -b music
+echo You walk on the left side of the street. >> you
+git commit -am "Left side"
+
+echo Because you\'re kind of late, you start running. Someone throws a piano out of their windows, and it smashes you. >> you
+git commit -am "Sounds nice"
+
+git checkout HEAD^ -b ice-cream
+echo You\'re not in a hurry, and walk slowly. You even get some ice cream on your way. You arrive at school too late, your teacher is angry, and you are expelled. >> you
+git commit -am "Yum"
+
+git branch -M main leap
+git checkout leap^^
+
+[win]
+
+# Find the bad branches and delete them. Keep only the best one.
+test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)"
+
+[congrats]
+
+On second thought, maybe you even prefer the ice cream timeline to the main one? :)
diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit
new file mode 100644
index 0000000..87061d8
--- /dev/null
+++ b/levels/it/branches/checkout-commit
@@ -0,0 +1,43 @@
+title = Moving through time
+cards = checkout commit-auto
+
+[description]
+
+The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!)
+
+Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!
+
+[cli]
+
+To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!
+
+This will insert the commit's unique identifier!
+
+[setup]
+
+echo "This piggy bank belongs to the big sister.
+It contains 10 coins." > piggy_bank
+git add .
+git commit -m "The beginning"
+
+echo "A young girl with brown, curly hair." > little_sister
+git add .
+git commit -m "Little sister comes in"
+
+echo "Has 10 coins." >> little_sister
+echo "This piggy bank belongs to the big sister.
+It is empty." > piggy_bank
+git add .
+git commit -m "Little sister does something"
+
+git checkout HEAD^^
+git branch -df main
+
+[win]
+
+# Restore sisterly peace.
+{ git show HEAD:piggy_bank | grep "10 coins"; } && { git show HEAD:little_sister | grep -v "10 coins"; } && { git rev-parse HEAD^^^; }
+
+[congrats]
+
+Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations...
diff --git a/levels/it/branches/fork b/levels/it/branches/fork
new file mode 100644
index 0000000..a58dcf5
--- /dev/null
+++ b/levels/it/branches/fork
@@ -0,0 +1,65 @@
+title = Make parallel commits
+cards = checkout commit-auto
+
+[description]
+
+Did you know that creating parallel timelines is perfectly legal and safe? It's true!
+
+Can you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!
+
+[cli]
+
+The blue animal represents a concept known as the "HEAD pointer" in Git: It shows you which commit is the current one.
+
+Here's a cool trick to go to the previous commit: 
+
+    git checkout HEAD^
+
+You can also go back two commits by typing, for example: 
+
+    git checkout HEAD~2
+
+[setup]
+
+mkdir cage
+echo "Looks very hungry." > cage/lion
+
+echo "A small child.
+It really loves cats!" > child
+git add .
+git commit -m "The beginning"
+
+echo "It's holding a lollipop." >> child
+git commit -am "The child buys something"
+
+mv child cage
+git add .
+git commit -m "The child climbs somewhere"
+
+git rm cage/child
+echo "Looks happy. :)" > cage/lion
+git add .
+git commit -m "Oh no"
+
+echo "It's sleeping." > cage/lion
+git add .
+git commit -m "Nap time!"
+
+git checkout --detach
+git branch -d main
+
+[win]
+
+# Make sure that the child is happy.
+git ls-tree --name-only -r HEAD | grep child
+
+# Make sure that the lion gets something to eat.
+git show HEAD:cage/lion | grep -v "very hungry"
+
+[congrats]
+
+Whew, good job! This seems like a *much* better outcome.
+
+Feel free to add more parallel timelines, or make them longer.
+
+If you're ready, our next mission is already waiting...
diff --git a/levels/it/branches/grow b/levels/it/branches/grow
new file mode 100644
index 0000000..77fe360
--- /dev/null
+++ b/levels/it/branches/grow
@@ -0,0 +1,49 @@
+title = Branches grow with you!
+cards = checkout commit-auto branch branch-delete reset-hard
+
+[description]
+
+Note that there are two options to "travel to the end of a timeline":
+
+First, you can directly travel to the commit, like we've done it before.
+
+And second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!
+
+[cli]
+
+To travel to a branch, type `git checkout name_of_the_branch`.
+
+And to travel to the last commit, type `git checkout --detach name_of_the_branch`.
+
+[setup]
+
+echo "You wrap the birthday present, and grab your concert ticket." > you
+git add .
+git commit -m "Evening preparations"
+echo "You go to the birthday party!" >> you
+git add .
+git commit -m "Go to the birthday"
+git branch birthday
+
+git checkout HEAD~1
+echo "You go to the concert!" > you
+git add .
+git commit -m "Go to the concert"
+git branch concert
+
+git checkout HEAD~1
+
+git branch -D main
+
+[win]
+
+# Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test $(git rev-parse $commit^) = $(git rev-parse birthday); then
+        return 0
+    fi
+done
+return 1
+
+# Travel to the blue 'concert' branch, make a change to 'you', and a commit.
+git show concert^ | grep "Go to the concert"
diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder
new file mode 100644
index 0000000..1c36c08
--- /dev/null
+++ b/levels/it/branches/reorder
@@ -0,0 +1,89 @@
+title = Moving branches around
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+One of your colleagues messed up here, and put the branches in the wrong timelines!
+
+You could delete and re-create these branches - but you can also directly move them to different commits, by using
+
+    git checkout
+
+on the branch names, and then using
+
+    git reset --hard
+
+on the commit where you want the branch to be.
+
+The donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!
+
+[setup]
+
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+
+git add .
+git commit -m "The Beginning"
+
+git checkout -b coffee
+echo "You have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy a baguette"
+
+echo "You ate a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You eat the baguette"
+
+git checkout -b baguette main
+echo "You do not have a baguette.
+
+You have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy some coffee"
+
+echo "You do not have a baguette.
+
+You drank coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You drink the coffee"
+
+git checkout -b donut main
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You have a donut." > you
+git add .
+git commit -m "You buy a donut"
+
+git checkout --detach main
+
+[win]
+
+# Did you eat a baguette on the baguette branch?
+git show baguette:you | grep "You ate.*baguette"
+
+# Did you drink a coffee on the coffee branch?
+git show coffee:you | grep "You drank.*coffee"
+
+# Did you eat a donut on the donut branch?
+git show donut:you | grep "You ate.*donut"
+
+[actions]
+
+test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Remember to checkout the blue branch tag when you want it to grow with the timeline."
diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence
new file mode 100644
index 0000000..2619ea0
--- /dev/null
+++ b/levels/it/branches/sequence
@@ -0,0 +1,6 @@
+checkout-commit
+fork
+branch-create
+grow
+branch-remove
+reorder
diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase
new file mode 100644
index 0000000..6ed89a8
--- /dev/null
+++ b/levels/it/changing-the-past/rebase
@@ -0,0 +1,86 @@
+title = Rebasing
+cards = checkout commit-auto reset-hard rebase
+
+[description]
+
+Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.
+
+See the "rebase" card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.
+
+Again, we want to make that our base reality - the "main" branch should point to that timeline!
+
+[setup]
+
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+
+git add .
+git commit -m "The Beginning"
+
+git checkout -b baguette main
+echo "You have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy a baguette"
+
+echo "You ate a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You eat the baguette"
+
+git checkout -b coffee main
+echo "You do not have a baguette.
+
+You have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy some coffee"
+
+echo "You do not have a baguette.
+
+You drank coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You drink the coffee"
+
+git checkout -b donut main
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You have a donut." > you
+git add .
+git commit -m "You buy a donut"
+
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You ate a donut." > you
+git add .
+git commit -m "You eat the donut"
+
+git checkout --detach main
+
+
+[win]
+
+# Order all tree branches into one and move the main branch ref
+{ git show main:you | grep "You ate.*baguette"; } && { git show main:you | grep "You drank.*coffee"; } && { git show main:you | grep "You ate.*donut"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
+
+[congrats]
+
+Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.
+
+It's really hard to actually *destroy* stuff with your time machine.
diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder
new file mode 100644
index 0000000..04f66cb
--- /dev/null
+++ b/levels/it/changing-the-past/reorder
@@ -0,0 +1,78 @@
+title = Reordering events
+cards = checkout commit-auto reset-hard rebase-interactive cherry-pick
+
+[description]
+
+Oops, looks like there's something messed up here. Can you put the events back into their correct order?
+
+There are two ways to do this: You can drag the "interactive rebase" card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.
+
+Or you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!
+
+[setup]
+
+echo "You just woke up.
+
+You are NOT wearing underwear.
+
+You are NOT wearing pants.
+
+You are NOT wearing a shirt.
+
+You are NOT wearing shoes." > you
+git add .
+
+git commit -m "The Beginning"
+
+echo "You just woke up.
+
+You are NOT wearing underwear.
+
+You are NOT wearing pants.
+
+You are NOT wearing a shirt.
+
+You are wearing shoes." > you
+git commit -am "Put on shoes"
+
+echo "You just woke up.
+
+You are NOT wearing underwear.
+
+You are wearing pants.
+
+You are NOT wearing a shirt.
+
+You are wearing shoes." > you
+git commit -am "Put on pants"
+
+echo "You just woke up.
+
+You are wearing underwear.
+
+You are wearing pants.
+
+You are NOT wearing a shirt.
+
+You are wearing shoes." > you
+git commit -am "Put on underwear"
+
+echo "You just woke up.
+
+You are wearing underwear.
+
+You are wearing pants.
+
+You are wearing a shirt.
+
+You are wearing shoes." > you
+git commit -am "Put on shirt"
+
+[win]
+
+# Reorder the commits to dress yourself in the correct way
+{ git log main --oneline | perl -0777 -ne'exit(1) if not /shoes[\s\S]*pants[\s\S]*underwear/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
+
+[congrats]
+
+Feel free to reset the level and try the other strategy! Which one do you like better?
diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence
new file mode 100644
index 0000000..43c5d08
--- /dev/null
+++ b/levels/it/changing-the-past/sequence
@@ -0,0 +1,2 @@
+rebase
+reorder
diff --git a/levels/it/files/files-add b/levels/it/files/files-add
new file mode 100644
index 0000000..0676df6
--- /dev/null
+++ b/levels/it/files/files-add
@@ -0,0 +1,32 @@
+title = Interior design
+cards = file-new file-delete
+
+[description]
+
+Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,
+you see that their colors match the color of your bed!
+
+Build up your two pieces of furniture by playing the touch card.
+Then name your furniture - you can choose whatever you like.
+
+Make sure the colors match! You can find the bed's color in its description.
+Don't forget to add a color and description to your new furnitures, too!
+
+[setup]
+
+echo A yellow cozy bed. > bed
+
+[win]
+
+# Add two more pieces of furniture
+NUM_FILES="$(ls | wc -l)"
+test "$NUM_FILES" -ge 3
+
+# Make sure the colors match your bed's color.
+NUM_FILES="$(ls | wc -l)"
+YELLOW_FILES="$(grep -li yellow * | wc -l)"
+test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES"
+
+[congrats]
+
+Don't you immediately feel more at home?
diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete
new file mode 100644
index 0000000..7bf33be
--- /dev/null
+++ b/levels/it/files/files-delete
@@ -0,0 +1,36 @@
+title = Unexpected Roommates
+cards = file-delete
+
+[description]
+
+The first day at Time Travel School comes to an end and you receive the key to your room.
+Full of excitement you open the door just to find... spider webs! Spider webs everywhere!
+
+Remove all the spider webs you can find with the remove card!
+
+[cli]
+
+On the command line, you can easily delete all files ending in -web using this command:
+
+    rm *web
+
+[setup]
+
+echo A tiny spider web is next to your window. > tiny_web
+echo A big spider web sticks above your bed. > big_web
+echo A cozy bed. > bed
+echo An extra thick spider web is right beside your door. > thick_web
+
+[win]
+
+# Remove all spider webs.
+! ls | grep thick_web &&
+! ls | grep big_web &&
+! ls | grep tiny_web
+
+# But make sure you keep your bed!
+ls | grep bed
+
+[congrats]
+
+Your room looks now very tidy and cozy! Time to unpack your stuff!
diff --git a/levels/it/files/sequence b/levels/it/files/sequence
new file mode 100644
index 0000000..cb24408
--- /dev/null
+++ b/levels/it/files/sequence
@@ -0,0 +1,3 @@
+files-delete
+files-add
+
diff --git a/levels/it/index/add b/levels/it/index/add
new file mode 100644
index 0000000..e627917
--- /dev/null
+++ b/levels/it/index/add
@@ -0,0 +1,38 @@
+title = Updating files in the index
+cards = add commit checkout
+
+[description]
+
+So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version.
+
+This allows you to have smaller commits, that describe better what you changed!
+
+The command for this is the same - `git add`!
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+
+[win]
+
+# Make changes to all files!
+test "$(cat a)" != "a" &&
+test "$(cat b)" != "b" &&
+test "$(cat c)" != "c"
+
+# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!
+
+test "$(git show main:a)" != "a" &&
+test "$(git show main:b)" != "b" &&
+test "$(git show main:c)" != "c" &&
+test "$(git show main^:a)" != "a" &&
+test "$(git show main^:b)" == "b" &&
+test "$(git show main^:c)" != "c"
+
+[congrats]
+
+Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again!
diff --git a/levels/it/index/change b/levels/it/index/change
new file mode 100644
index 0000000..f1e377d
--- /dev/null
+++ b/levels/it/index/change
@@ -0,0 +1,31 @@
+title = Update files in the index
+cards = add commit
+
+[description]
+
+When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.
+
+Let's try that!
+
+The icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!
+
+[win]
+
+Good! The index is sometimes also called the "staging area" - it contains exactly what ends up in the next commit when you use `git commit`!
+
+[setup]
+
+echo "The candle is burning with a blue flame." > candle
+git add .
+git commit -m "The beginning"
+
+[win]
+
+# Make a change to the candle.
+test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed
+
+# Add the candle.
+test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
+
+# Make a commit.
+test "$(git diff --name-only HEAD HEAD^)" = "candle"
diff --git a/levels/it/index/checkout b/levels/it/index/checkout
new file mode 100644
index 0000000..3c01b09
--- /dev/null
+++ b/levels/it/index/checkout
@@ -0,0 +1,25 @@
+title = Checking out files from the index
+cards = add reset-file checkout-file commit
+
+[description]
+
+So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that!
+
+What happens if you have already update the index, like in file c? You have to reset the index first!
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo x > b
+echo x > c
+git add c
+
+[win]
+
+# Remove all changes in your local files!
+test "$(git diff --name-only | wc -l)" -eq 0
diff --git a/levels/it/index/compare b/levels/it/index/compare
new file mode 100644
index 0000000..97fa6c7
--- /dev/null
+++ b/levels/it/index/compare
@@ -0,0 +1,51 @@
+title = Step by step
+cards = checkout commit-auto
+
+[description]
+
+Welcome to today's lesson! We're going to learn how to make commits with more precision!
+
+Have a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened.
+
+[win]
+
+# Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that!
+git branch --show-current | grep step-by-step
+
+[setup]
+
+echo "A small, but heavy glass ball." > ball
+echo "A thin book, that's standing upright." > book
+echo "A candle, burning with a blue flame." > candle
+echo "A smoke detector. It's absolutely silent." > smoke_detector
+
+git add .
+git commit -m "The beginning"
+
+git branch -M all-at-once
+
+echo "The ball is now touching the book." > ball
+echo "The book has fallen over." > book
+echo "The candle has been blown out." > candle
+
+git commit -am "The end"
+
+git checkout HEAD^
+
+git checkout -b step-by-step
+
+echo "The ball is now touching the book." > ball
+git commit -am "The ball rolls towards the book"
+
+echo "The book has fallen over." > book
+git commit -am "The book falls over"
+
+echo "The candle has been blown out." > candle
+git commit -am "The book blows out the candle"
+
+git checkout HEAD~3
+
+[win]
+
+# Pick the timeline that's clearer, and make the alarm go off!
+git show step-by-step:smoke_detector | tail -n 1 | grep -v "absolutely silent"
diff --git a/levels/it/index/new b/levels/it/index/new
new file mode 100644
index 0000000..4df3930
--- /dev/null
+++ b/levels/it/index/new
@@ -0,0 +1,28 @@
+title = Add new files to the index
+cards = add commit
+
+[description]
+
+So far, when we made a commit, we've always recorded the current status of all objects, right?
+
+But Git allows you to pick which changes you want to put in a commit!
+
+To learn how that works, we need to learn about the "index"! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!
+
+Initially, the index is empty. To make a commit that contains a new file, we need to add it!
+
+[cli]
+
+You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!
+
+[setup]
+
+echo "The candle is burning with a blue flame." > candle
+
+[win]
+
+# Add the candle.
+test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
+
+# Make a commit.
+test "$(git ls-tree --name-only HEAD)" = "candle"
diff --git a/levels/it/index/reset b/levels/it/index/reset
new file mode 100644
index 0000000..5e21973
--- /dev/null
+++ b/levels/it/index/reset
@@ -0,0 +1,37 @@
+title = Resetting files in the index
+cards = add reset-file commit
+
+[description]
+
+See the dark shadow behind the icons? That's the version of the file in the last commit!
+
+For example, these candles have been blown out, and that change has been added.
+
+But you decide that this was a mistake! You only want to blow out the red candle in the next commit!
+
+If you already have updated the index to a changed file, but want to reset it, you can use `git reset`!
+
+[setup]
+
+echo "It's burning!" > red_candle
+echo "It's burning!" > green_candle
+echo "It's burning!" > blue_candle
+git add .
+git commit -m "The beginning"
+
+echo "It's been blown out." > red_candle
+echo "It's been blown out." > green_candle
+echo "It's been blown out." > blue_candle
+git add .
+
+[win]
+
+# Reset the changes in the green and blue candles!
+git show :green_candle | grep burning &&
+git show :blue_candle | grep burning &&
+git show :red_candle | grep -v burning
+
+# And make a commit!
+git show main:green_candle | grep burning &&
+git show main:blue_candle | grep burning &&
+git show main:red_candle | grep -v burning
diff --git a/levels/it/index/rm b/levels/it/index/rm
new file mode 100644
index 0000000..637fd22
--- /dev/null
+++ b/levels/it/index/rm
@@ -0,0 +1,24 @@
+title = Delete a file in the next commit
+cards = add reset-file checkout-file rm file-delete commit
+
+[description]
+
+If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index.
+
+If a file is modified, you'll need to reset these changes first/reset the files.
+
+[setup]
+
+echo a > a
+echo x > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b > b
+git add b
+
+[win]
+
+# Make a commit where all files are deleted ¯\_(^_^)_/¯
+test "$(git ls-tree main | wc -l)" -eq 0
diff --git a/levels/it/index/sequence b/levels/it/index/sequence
new file mode 100644
index 0000000..42f7f48
--- /dev/null
+++ b/levels/it/index/sequence
@@ -0,0 +1,5 @@
+compare
+new
+change
+reset
+steps
diff --git a/levels/it/index/steps b/levels/it/index/steps
new file mode 100644
index 0000000..36e7500
--- /dev/null
+++ b/levels/it/index/steps
@@ -0,0 +1,53 @@
+title = Adding changes step by step
+cards = add reset-file commit
+
+[description]
+
+The index is really useful, because it allows us to be precise about which changes we want to include in each commit!
+
+[setup]
+
+echo "A hammer, balancing on its handle." > hammer
+echo "A bottle, containing a clear liquid." > bottle
+echo "A white sugar cube." > sugar_cube
+
+git add .
+git commit -m "The beginning"
+
+[win]
+
+# Make changes to all three objects, to form a logical sequence of events!
+test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed
+
+# Only add one of these changes!
+test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added
+
+# And make a commit.
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 1
+
+# Make a second commit that only records a single change.
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 2
+
+# And a third one.
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 3
diff --git a/levels/it/intro/cli b/levels/it/intro/cli
new file mode 100644
index 0000000..c643fc1
--- /dev/null
+++ b/levels/it/intro/cli
@@ -0,0 +1,27 @@
+title = La line di comando
+cards = 
+
+[description]
+
+Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git!
+
+[cli]
+
+Ma c'è un'altra via per interagire con Git:
+
+Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter!
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Inizializza la macchina del tempo!
+test -d .git
+
+[congrats]
+
+Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando!
+
+La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica.
diff --git a/levels/it/intro/commit b/levels/it/intro/commit
new file mode 100644
index 0000000..1141ae1
--- /dev/null
+++ b/levels/it/intro/commit
@@ -0,0 +1,32 @@
+title = Il tuo primo commit!
+cards = commit-auto
+
+[description]
+
+Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica!
+
+(Il tuo insegnante versa un pò di acqua nel bicchiere)
+
+[cli]
+Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! 
+
+Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :)
+
+[setup]
+
+echo "Il bicchiere è pieno di acqua." > glass
+
+[win]
+
+# Crea un'istantanea del bicchiere (un "commit")
+git rev-parse HEAD
+
+# Cambia il contenuto del bicchiere!
+! test "$(cat glass)" = "Il bicchiere è pieno di acqua."
+
+# E crea un secondo "commit"!
+git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua."
+
+[congrats]
+
+Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level".
diff --git a/levels/it/intro/copies b/levels/it/intro/copies
new file mode 100644
index 0000000..8f8d6ce
--- /dev/null
+++ b/levels/it/intro/copies
@@ -0,0 +1,42 @@
+title = Crea una copia
+cards =
+
+[description]
+
+Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra!
+
+[congrats]
+
+Okay, questo è un modo di lavorare.
+
+Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo.
+
+Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale.
+
+Fermati, devi provare questa macchina del tempo!
+
+[setup]
+
+rm -rf .git
+
+echo "~ Perchè voglio imparare Git ~
+
+(Devo ancora scriverlo.)" >> form.txt
+
+
+echo "~ Perchè volgio imparare Git ~
+
+- Così posso annullare gli errori" >> form2.txt
+
+
+echo "~ Perchè volgio imparare Git ~
+
+- Così posso annullare gli errori
+- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt
+
+cp form2_final.txt form2_really_final.txt
+
+[win]
+
+# Aggiungi una nuova line al file form2_really_final.txt!
+test "$(cat form2_really_final.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/init b/levels/it/intro/init
new file mode 100644
index 0000000..260f6e9
--- /dev/null
+++ b/levels/it/intro/init
@@ -0,0 +1,24 @@
+title = Entra nella machina del tempo
+cards = init
+
+[description]
+
+Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega:
+
+"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!"
+
+Trascina quella carta blu verso l'alto per usarla!
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Inizializzazione della macchina del tempo
+test -d .git
+
+[congrats]
+
+Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo!
+
diff --git a/levels/it/intro/remote b/levels/it/intro/remote
new file mode 100644
index 0000000..c0b582a
--- /dev/null
+++ b/levels/it/intro/remote
@@ -0,0 +1,52 @@
+title = Dai lavoriamo tutti assieme
+cards = pull commit-auto push
+
+[description]
+
+Aggiungi il tuo nome nella nostra lista di studenti!
+
+Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme!
+
+[cli]
+
+Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni.
+
+[congrats]
+
+Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione!
+
+[setup]
+
+echo "~ Lista degli attuali studenti ~" > students
+git add .
+git commit -m "Versione iniziale"
+git push -u teacher main
+
+git update-ref -d refs/remotes/teacher/main
+
+[setup teacher]
+
+git reset --hard main
+
+echo " 
+- Sam
+- Alex" >> students
+
+git add .
+git commit -m "Aggiunti due studenti"
+
+[win]
+
+# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`.
+test "$(git log --oneline teacher/main | wc -l)" -ge 2
+
+# Aggiungi il tuo nome alla lista degli studenti.
+test "$(cat students |wc -l)" -ge 5
+
+# Crea un'istantanea dei risultati.
+test "$(git show main:students |wc -l)" -ge 5
+
+[win teacher]
+
+# E usa `git push` per inviarlo al tuo insegnante!
+test "$(git show main:students |wc -l)" -ge 5
diff --git a/levels/it/intro/risky b/levels/it/intro/risky
new file mode 100644
index 0000000..0203433
--- /dev/null
+++ b/levels/it/intro/risky
@@ -0,0 +1,42 @@
+title = Vivere è pericoloso
+cards =
+
+[description]
+
+Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"!
+
+Che emozione!
+
+Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git.
+
+[congrats]
+
+All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato!
+
+Devi trovare una buona soluzione.
+
+(Premi "Next Level" appena sei pronto!)
+
+[setup]
+
+rm -rf .git
+
+echo "~ Perchè voglio imparare Git ~
+
+- Così posso cancellare gli errori
+- Per seguire il mio progetto attraverso il tempo" >> form.txt
+
+[actions]
+
+test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.)
+
+
+
+
+
+" > form.txt
+
+[win]
+
+# Aggiungi un'altra line a form.txt!
+test "$(cat form.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence
new file mode 100644
index 0000000..aa225df
--- /dev/null
+++ b/levels/it/intro/sequence
@@ -0,0 +1,6 @@
+risky
+copies
+init
+cli
+commit
+remote
diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you
new file mode 100644
index 0000000..abb94f3
--- /dev/null
+++ b/levels/it/intro/who-are-you
@@ -0,0 +1,38 @@
+title = Benvenuto nella scuola del viaggio nel tempo!
+cards = config-name commit-auto checkout
+
+[description]
+
+Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo!
+
+Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?"
+
+[setup]
+
+git config --global user.name "TU"
+
+echo "~ Chi vuole imparare come si usa la macchina del tempo? ~
+
+[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro.
+[ ] Così non devo tenere copie di tutti i miei saggi.
+[ ] Per collaborare con altri studenti del viaggio nel tempo.
+[ ] Altro, perfavore specifica:" > form
+
+[actions]
+
+test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo "
+Firma: $(git config user.name)" >> form
+
+[win]
+
+# Presentati.
+test "$(git config user.name)" != "TU"
+
+# Compila l'iscrizione e inviala!
+git show main:form | grep '\[[xX]\]'
+
+[congrats]
+
+"Siamo lieti di averti con noi!
+
+Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!"
diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics
new file mode 100644
index 0000000..55374b5
--- /dev/null
+++ b/levels/it/low-level/basics
@@ -0,0 +1,26 @@
+[description]
+
+For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:
+
+- ls
+- echo content > file
+- cat file
+- mkdir dir
+
+Find the riddle in your current directory and put the answer into the file "answer"!
+
+[congrats]
+
+Omnomnom!
+
+For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :)
+
+[setup]
+
+mkdir riddle
+echo "ppl p" > riddle/consonants
+echo "ae ie" > riddle/vowels
+
+[win]
+
+cat answer | grep -i "apple \\?pie"
diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create
new file mode 100644
index 0000000..86f6254
--- /dev/null
+++ b/levels/it/low-level/blob-create
@@ -0,0 +1,38 @@
+[description]
+
+At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID).
+
+There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text.
+
+Let's create some blobs! To do that, create a file with the desired content, and then use
+
+    git hash-object -w <file>
+
+The flag -w means "write", and tells Git to actually write the new blob to the disk.
+
+Create three new blobs!
+
+[congrats]
+
+Tip: You can also use a command like this to create a blob in a single line:
+
+    echo "awesome content" | git hash-object -w --stdin
+
+Did you already notice that you can drag and drop all objects? :)
+
+[setup]
+
+[setup goal]
+
+echo "Hi" > file1
+echo "Ho" > file2
+echo "Hu" > file3
+git hash-object -w file1
+git hash-object -w file2
+git hash-object -w file3
+
+[win]
+
+BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l)
+
+test "$BLOB_COUNT" -gt 2
diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove
new file mode 100644
index 0000000..bbc1b30
--- /dev/null
+++ b/levels/it/low-level/blob-remove
@@ -0,0 +1,27 @@
+[description]
+
+There's a simple command to remove all objects that are not referenced by anything:
+
+    git prune
+
+Remove all blobs in this repository.
+
+[congrats]
+
+Generally, `git prune` will be useful if you want to clean up some objects you made.
+
+Alternatively, you can also click the "Reload" button to restart a level.
+
+[setup]
+
+echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin
+echo "This blob really should not exist" | git hash-object -w --stdin
+echo "This is a virus" | git hash-object -w --stdin
+
+[setup goal]
+
+[win]
+
+OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l)
+
+test "$OBJECT_COUNT" -eq 0
diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create
new file mode 100644
index 0000000..79a8e52
--- /dev/null
+++ b/levels/it/low-level/commit-create
@@ -0,0 +1,37 @@
+[description]
+
+So a tree describes a directory structure at a specific point in time.
+
+It would be nice if we could remember when that state existed, and who authored it, right?
+
+Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using
+
+    git commit-tree <tree> -m "Description of your commit"
+
+Make a commit from the tree in this repository!
+
+[setup]
+
+touch empty_file
+git add .
+git write-tree
+
+rm empty_file
+git update-index --remove empty_file
+
+[setup goal]
+
+touch empty_file
+git add .
+git write-tree
+
+rm empty_file
+git update-index --remove empty_file
+
+git commit-tree 3185 -m 'Clever commit message'
+
+[win]
+
+COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l)
+
+test "$COMMIT_COUNT" -gt 0
diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents
new file mode 100644
index 0000000..a2efb11
--- /dev/null
+++ b/levels/it/low-level/commit-parents
@@ -0,0 +1,31 @@
+[description]
+
+When using the commit-tree command, you can optionally specify a parent:
+
+    git commit-tree <tree> -m "Description" -p <parent commit>
+
+Make a string of three commits!
+
+Hint: You'll need a tree object. What could be the easiest way to obtain one?
+
+[setup]
+
+[setup goal]
+
+git write-tree
+FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O')
+SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D')
+THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/')
+
+[win]
+
+COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
+
+for COMMIT in $COMMITS; do
+    echo a commit named $COMMIT
+    if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then
+        return 0
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus
new file mode 100644
index 0000000..e320ca0
--- /dev/null
+++ b/levels/it/low-level/commit-rhombus
@@ -0,0 +1,30 @@
+[description]
+
+A commit can have multiple parents! You can specify the -p option multiple times, like this:
+
+    git commit-tree <tree> -m "Description" -p <parent1> -p <parent2>
+
+Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them.
+
+[setup]
+
+[setup goal]
+
+TREE=$(git write-tree)
+SOUTH=$(git commit-tree $TREE -m "South")
+EAST=$(git commit-tree $TREE -m "East" -p $SOUTH)
+WEST=$(git commit-tree $TREE -m "West" -p $SOUTH)
+NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST)
+
+[win]
+
+COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
+
+for COMMIT in $COMMITS; do
+    # My first parent's parents has to be the same as my second parent's parent.
+    if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then
+        return 0
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add
new file mode 100644
index 0000000..633245c
--- /dev/null
+++ b/levels/it/low-level/index-add
@@ -0,0 +1,37 @@
+[description]
+
+Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!
+
+Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions.
+
+The most convenient option to add an entry to the index is via an existing file:
+
+    echo "my content" > file
+    git update-index --add file
+
+Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"?
+
+[congrats]
+
+There's another way to add an entry to the index directly:
+
+    git update-index --add --cacheinfo <mode>,<blobhash>,<name>
+
+The first three numbers of the mode describe the type of the entry, "100" is a regular file.
+
+The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported.
+
+You can insert the hash of an object into the terminal by right-clicking on it! :)
+
+[setup]
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[win]
+
+test "$(git ls-files | wc -l)" -ge 3
diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove
new file mode 100644
index 0000000..9816126
--- /dev/null
+++ b/levels/it/low-level/index-remove
@@ -0,0 +1,29 @@
+[description]
+
+To remove an entry from the index, use a command like this:
+
+    git update-index --force-remove <file>
+
+Remove all entries from the index!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+git update-index --force-remove file1
+git update-index --force-remove file2
+git update-index --force-remove file3
+
+[win]
+
+test "$(git ls-files | wc -l)" -eq 0
diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update
new file mode 100644
index 0000000..047493d
--- /dev/null
+++ b/levels/it/low-level/index-update
@@ -0,0 +1,33 @@
+[description]
+
+Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!
+
+Put the content you want in a file with a matching name, and then run
+
+    git update-index <file>
+
+This will create a new blob, and update the hash of the entry to that blob.
+
+Update an entry in the index!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+echo "new content" > file1
+git update-index file1
+
+[win]
+
+# This is not really a good test for the winning condition...
+test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3
diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse
new file mode 100644
index 0000000..119784d
--- /dev/null
+++ b/levels/it/low-level/puzzle-apocalypse
@@ -0,0 +1,41 @@
+[description]
+
+Delete all objects in this repository using git commands only!
+
+Useful commands:
+
+    git prune
+    git reflog expire
+
+[setup]
+
+echo foo > foo
+BLOB=$(git hash-object -w foo)
+echo bar > bar
+git add .
+git commit -m "Initial commit"
+echo blabber >> bar
+git commit -a -m "Second commit"
+git update-ref refs/important HEAD
+git update-ref refs/interesting "$BLOB"
+
+[setup goal]
+
+echo foo > foo
+BLOB=$(git hash-object -w foo)
+echo bar > bar
+git add .
+git commit -m "Initial commit"
+echo blabber >> bar
+git commit -a -m "Second commit"
+git update-ref refs/important HEAD
+git update-ref refs/interesting "$BLOB"
+
+TREE=$(git mktree)
+git read-tree $TREE
+rm -rf .git/refs/*
+rm -rf .git/objects/*
+
+[win]
+
+test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0
diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob
new file mode 100644
index 0000000..865cfdf
--- /dev/null
+++ b/levels/it/low-level/puzzle-precious-blob
@@ -0,0 +1,28 @@
+[description]
+
+Create two trees pointing to the same blob!
+
+[setup]
+
+[setup goal]
+
+BLOB=$(echo "I am precious" | git hash-object -w --stdin)
+git update-index --add --cacheinfo 100644,$BLOB,a
+git write-tree
+git update-index --force-remove a
+git update-index --add --cacheinfo 100644,$BLOB,b
+git write-tree
+git update-index --force-remove b
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+ALL_TREE_CHILDREN=$(for TREE in $TREES; do
+    git cat-file -p $TREE | cut -f1 | cut -f3 -d" "
+done)
+
+NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l)
+UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l)
+
+test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN"
diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down
new file mode 100644
index 0000000..bc3e58a
--- /dev/null
+++ b/levels/it/low-level/puzzle-trees-all-the-way-down
@@ -0,0 +1,34 @@
+[description]
+
+Construct a chain of three trees, which don't point to anything else.
+
+This is hard! The `git mktree` command might be useful.
+
+[setup]
+
+[setup goal]
+
+git mktree
+TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree)
+echo -e "040000 tree $TREE\tdir" | git mktree
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+for TREE in $TREES; do
+    if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then
+        if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
+            # So the tree has exactly one child, and it is a tree!
+            TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ")
+            if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then
+                if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
+                    # Same for its child! \o/
+                    return 0
+                fi
+            fi
+        fi
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create
new file mode 100644
index 0000000..1cc4bcf
--- /dev/null
+++ b/levels/it/low-level/ref-create
@@ -0,0 +1,42 @@
+[description]
+
+Let's take a look at "refs" (short for "references")! Refs are not objects, but rather very simple *pointers* to objects! They can help you keep track of what's where.
+
+You can create or update a ref with
+
+    git update-ref refs/<refname> <newvalue>
+
+Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref.
+
+Create refs that point to all objects in this repository!
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a $BLOB1
+git update-ref refs/b $BLOB2
+git update-ref refs/c $TREE
+git update-ref refs/d $COMMIT
+
+[win]
+
+OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort)
+REF_TARGETS=$(git show-ref -s | sort | uniq)
+test "$OBJECTS" = "$REF_TARGETS"
diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move
new file mode 100644
index 0000000..e3b29e3
--- /dev/null
+++ b/levels/it/low-level/ref-move
@@ -0,0 +1,41 @@
+[description]
+
+You can point refs to a new location using the same command you use to create them:
+
+    git update-ref refs/<refname> <object>
+
+As an exercise, make all refs in this repository point to the tree object!
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a "$BLOB1"
+git update-ref refs/b "$COMMIT"
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a "$BLOB1"
+git update-ref refs/b "$COMMIT"
+
+for REF in $(git for-each-ref --format='%(refname)'); do
+    git update-ref "$REF" "$TREE"
+done
+
+[win]
+
+test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e"
diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove
new file mode 100644
index 0000000..d1fa982
--- /dev/null
+++ b/levels/it/low-level/ref-remove
@@ -0,0 +1,41 @@
+[description]
+
+And finally, to delete a ref, use
+
+    git update-ref -d refs/<refname>
+
+Delete all refs! :P (Well, except for HEAD. HEAD is special.)
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/best_blob_ever "$BLOB1"
+git update-ref refs/beautiful_commit "$COMMIT"
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/best_blob_ever "$BLOB1"
+git update-ref refs/beautiful_commit "$COMMIT"
+
+for REF in $(git for-each-ref --format='%(refname)'); do
+    git update-ref -d "$REF"
+done
+
+[win]
+
+test "$(git show-ref | wc -l)" -eq 0
diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence
new file mode 100644
index 0000000..5feb0c8
--- /dev/null
+++ b/levels/it/low-level/sequence
@@ -0,0 +1,18 @@
+welcome
+basics
+blob-create
+blob-remove
+index-add
+index-remove
+index-update
+tree-create
+tree-read
+tree-nested
+commit-create
+commit-parents
+commit-rhombus
+ref-create
+ref-move
+ref-remove
+symref-create
+symref-no-deref
diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create
new file mode 100644
index 0000000..da933cb
--- /dev/null
+++ b/levels/it/low-level/symref-create
@@ -0,0 +1,21 @@
+[description]
+
+Instead of pointing directly to objects, refs can also point to other refs!
+
+When that happens, they are called "symbolic refs". You can create or update a symbolic ref using
+
+    git symbolic-ref <name> <ref>
+
+Create a symbolic ref called "refs/rainbow"!
+
+[setup]
+
+[setup goal]
+
+BLOB=$(git hash-object -w --stdin)
+git update-ref refs/double "$BLOB"
+git symbolic-ref refs/rainbow refs/double
+
+[win]
+
+git symbolic-ref refs/rainbow
diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref
new file mode 100644
index 0000000..458e669
--- /dev/null
+++ b/levels/it/low-level/symref-no-deref
@@ -0,0 +1,46 @@
+[description]
+
+When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :)
+
+What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`?
+
+Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`!
+
+Weird, huh?
+
+[congrats]
+
+Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!
+
+You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)
+
+Everything else is just convention and high-level commands that make interacting with the objects more convenient.
+
+We haven't covered:
+
+- tag objects (they are the fourth object type - a bit like refs with a description and an author)
+- configuration (allows you to specify remote repositories, for example)
+- working with local files (which is, uh, arguably pretty important :P)
+
+Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced!
+
+[setup]
+
+BLOB1=$(echo delicious | git hash-object -w --stdin)
+BLOB2=$(echo very | git hash-object -w --stdin)
+git update-ref refs/curly "$BLOB1"
+git symbolic-ref refs/fries refs/curly
+
+[setup goal]
+
+BLOB1=$(echo delicious | git hash-object -w --stdin)
+BLOB2=$(echo very | git hash-object -w --stdin)
+git update-ref refs/curly "$BLOB1"
+git symbolic-ref refs/fries refs/curly
+
+git update-ref --no-deref refs/fries "$BLOB2"
+
+[win]
+
+git symbolic-ref refs/fries && return 1
+test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6"
diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create
new file mode 100644
index 0000000..3da3618
--- /dev/null
+++ b/levels/it/low-level/tree-create
@@ -0,0 +1,35 @@
+[description]
+
+After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?
+
+This is what the second type of objects is for: trees! You can convert the index into a tree using
+
+    git write-tree
+
+Try it! :)
+
+[congrats]
+
+Nice!
+
+Can you make a different tree? Modify the index, then call `git write-tree` again!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+git write-tree
+
+[win]
+
+git cat-file -p 21a638f28022064c1f1df20844278b494d197979
diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested
new file mode 100644
index 0000000..c7afce8
--- /dev/null
+++ b/levels/it/low-level/tree-nested
@@ -0,0 +1,38 @@
+[description]
+
+Trees can also point to other trees! This way, they can describe nested directory structures.
+
+When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it.
+
+To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs.
+
+[setup]
+
+[setup goal]
+
+echo "I'm the left arm" > arm1
+echo "I'm the right arm" > arm2
+mkdir hip
+echo "I'm the left leg" > hip/leg1
+echo "I'm the right leg" > hip/leg2
+git add .
+git write-tree
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+for OUTER_TREE in $TREES; do
+    NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l)
+    NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l)
+
+    if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then
+        TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3)
+        NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l)
+        if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then
+            return 0
+        fi
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read
new file mode 100644
index 0000000..ba8c440
--- /dev/null
+++ b/levels/it/low-level/tree-read
@@ -0,0 +1,51 @@
+[description]
+
+As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called
+
+    git read-tree <tree>
+
+For <tree>, you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!
+
+Try reading some of the trees in this repository into the index!
+
+[setup]
+
+EMPTY_TREE=$(git write-tree)
+
+echo "file 1" > file1
+echo "file 2" > file2
+git add .
+git write-tree
+
+rm *
+echo "file A" > fileA
+echo "file B" > fileB
+echo "file C" > fileC
+git add .
+TRIPLE_TREE=$(git write-tree)
+
+git read-tree "$EMPTY_TREE"
+
+[setup goal]
+
+EMPTY_TREE=$(git write-tree)
+
+echo "file 1" > file1
+echo "file 2" > file2
+git add .
+git write-tree
+
+rm *
+echo "file A" > fileA
+echo "file B" > fileB
+echo "file C" > fileC
+git add .
+TRIPLE_TREE=$(git write-tree)
+
+git read-tree "$EMPTY_TREE"
+
+git read-tree "$TRIPLE_TREE"
+
+[win]
+
+test "$(git ls-files | wc -l)" -gt 0
diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome
new file mode 100644
index 0000000..d669136
--- /dev/null
+++ b/levels/it/low-level/welcome
@@ -0,0 +1,33 @@
+[description]
+
+This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3
+
+You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status.
+
+Let's get started by initializing an empty Git repository in the current directory by typing:
+
+    git init
+
+[congrats]
+
+Well done!
+
+An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later!
+
+But first, let's look at some basics!
+
+(Click "Next Level" as soon as you're ready!)
+
+[setup]
+
+rm -rf .git
+
+[setup goal]
+
+rm -rf .git
+
+git init
+
+[win]
+
+test -d .git
diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict
new file mode 100644
index 0000000..1a8b02b
--- /dev/null
+++ b/levels/it/merge/conflict
@@ -0,0 +1,47 @@
+title = Contradictions
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Sometimes, timelines will contradict each other.
+
+For example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.
+
+Try to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!
+
+Let your finalized timeline be the "main" one.
+
+[setup]
+
+echo "Just woke up. Is hungry." > sam
+git add .
+git commit -m "The beginning"
+
+git checkout -b pancakes
+echo "Had blueberry pancakes with maple syrup for breakfast." > sam
+git add .
+git commit -m "Pancakes!"
+
+echo "
+Is at work." >> sam
+git commit -am "Go to work"
+
+git checkout -b muesli main
+echo "Had muesli with oats and strawberries for breakfast." > sam
+git add .
+git commit -m "Muesli!"
+
+echo "
+Is at work." >> sam
+git commit -am "Go to work"
+
+git checkout main
+
+[win]
+
+# Make a breakfast compromise in the 'main' branch.
+git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)"
+
+[congrats]
+
+Yum, that sounds like a good breakfast!
diff --git a/levels/it/merge/merge b/levels/it/merge/merge
new file mode 100644
index 0000000..8b45d06
--- /dev/null
+++ b/levels/it/merge/merge
@@ -0,0 +1,82 @@
+title = Merging timelines
+cards = checkout commit-auto merge
+
+[description]
+
+Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!
+
+[setup]
+
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+
+git add .
+git commit -m "The Beginning"
+
+echo "You have a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy a baguette"
+
+echo "You ate a baguette.
+
+You do not have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You eat the baguette"
+
+git checkout HEAD~2
+echo "You do not have a baguette.
+
+You have coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You buy some coffee"
+
+echo "You do not have a baguette.
+
+You drank coffee.
+
+You do not have a donut." > you
+git add .
+git commit -m "You drink the coffee"
+
+git checkout HEAD~2
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You have a donut." > you
+git add .
+git commit -m "You buy a donut"
+
+echo "You do not have a baguette.
+
+You do not have coffee.
+
+You ate a donut." > you
+git add .
+git commit -m "You eat the donut"
+
+git checkout --detach
+git branch -D main
+
+[win]
+
+# Build a situation where you consumed a baguette, a coffee, *and* a donut.
+{ git show HEAD:you | grep "You ate.*baguette"; } && { git show HEAD:you | grep "You drank.*coffee"; } && { git show HEAD:you | grep "You ate.*donut"; }
+
+# Be on a merge commit.
+test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
+
+[congrats]
+
+I wonder if you're more relaxed when you *sleep* in parallel timelines...
diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort
new file mode 100644
index 0000000..ce7190b
--- /dev/null
+++ b/levels/it/merge/merge-abort
@@ -0,0 +1,54 @@
+title = Abort a merge
+cards = checkout commit-auto merge merge-abort
+
+[description]
+
+Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve.
+
+In these situations you can abort the merge to merge later. Use
+    git merge --abort
+when you are in a merge process.
+
+Try to merge both commits and abort the merge afterwards.
+
+[setup]
+
+echo "A new day is starting" > you
+
+git add .
+git commit -m "Start"
+
+echo "Walking down the Main Lane." >> you
+
+git add .
+git commit -m "Main Lane"
+
+
+git checkout HEAD~1
+
+echo "Walking down the Side Lane." >> you
+
+git add .
+git commit -m "Side Lane"
+
+git checkout HEAD~1
+
+git branch -D main
+
+[actions]
+
+if test -f .git/MERGE_HEAD; then
+    touch .git/secretfile
+fi
+
+[win]
+
+# You tried to merge?
+test -f .git/secretfile
+
+# You aborted to merge?
+test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^
+
+[congrats]
+
+Aaah, let's merge later...
diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence
new file mode 100644
index 0000000..c3b6caf
--- /dev/null
+++ b/levels/it/merge/sequence
@@ -0,0 +1,2 @@
+merge
+conflict
diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend
new file mode 100644
index 0000000..1b70f33
--- /dev/null
+++ b/levels/it/remotes/friend
@@ -0,0 +1,47 @@
+title = Friend
+cards = pull push commit-auto checkout
+
+[description]
+
+Your friend added another line to your essay! Get it, add a third one and send it to them!
+
+Take turns until you have five lines!
+
+[setup yours]
+
+echo "Line 1" > essay
+git add .
+git commit -m "One line"
+
+git push -u friend main
+
+[setup friend]
+
+git checkout main
+echo "Line 2, gnihihi" >> essay
+git commit -am "Another line"
+
+[actions friend]
+
+if test "$(git log --oneline | wc -l)" -eq 3; then
+    git reset --hard main # Necessary because the working directory isn't updated when we push to the friend.
+    echo "Line 4, blurbblubb" >> essay
+    git commit -am "Final line"
+    hint "Oh nice, I added a fourth line!"
+fi
+
+[win]
+
+# Got the second line from your friend
+git show HEAD:essay | grep gnihihi
+
+# Got the fourth line from your friend.
+git show HEAD:essay | grep blurbblubb
+
+[win friend]
+
+# The friend got a third line from you
+test "$(git show HEAD:essay | wc -l)" -ge 3
+
+# The friend got a fifth line from you
+test "$(git show HEAD:essay | wc -l)" -ge 5
diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems
new file mode 100644
index 0000000..fab71c5
--- /dev/null
+++ b/levels/it/remotes/problems
@@ -0,0 +1,33 @@
+title = Problems
+cards = checkout add pull push commit-auto merge
+
+[description]
+
+Both you and your friend have been working on the file, and want to sync up!
+
+[setup yours]
+
+echo "The bike shed should be ???" > file
+git add .
+git commit -m "initial"
+
+git push -u friend main
+
+echo "The bike shed should be green" > file
+
+[setup friend]
+
+git checkout main
+
+echo "The bike shed should be blue" > file
+git commit -a -m "friends version"
+
+[win]
+
+# Commit your local changes.
+test "$(git status -s)" = ""
+
+[win friend]
+
+# Look at your friend's suggestion, make a compromise, and push it back.
+git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)"
diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence
new file mode 100644
index 0000000..13c5715
--- /dev/null
+++ b/levels/it/remotes/sequence
@@ -0,0 +1,2 @@
+friend
+problems
diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty
new file mode 100644
index 0000000..1f954a5
--- /dev/null
+++ b/levels/it/sandbox/empty
@@ -0,0 +1,7 @@
+title = Empty sandbox
+
+[description]
+
+This is an empty sandbox you can play around in.
+
+[setup]
diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote
new file mode 100644
index 0000000..f0ca2c0
--- /dev/null
+++ b/levels/it/sandbox/remote
@@ -0,0 +1,22 @@
+title = Sandbox with a remote
+cards = checkout commit-auto pull fetch push
+
+[description]
+
+Here's a sandbox with a remote! Try pulling, fetching, or pushing!
+
+How can you push tags and branches on a remote? How can you delete them again?
+
+[setup yours]
+
+echo "Line 1" > essay
+git add .
+git commit -m "Initial commit"
+
+git push -u friend main
+
+[setup friend]
+
+git checkout main
+echo "Line 2" >> essay
+git commit -am "Another line"
diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence
new file mode 100644
index 0000000..29aa91f
--- /dev/null
+++ b/levels/it/sandbox/sequence
@@ -0,0 +1,3 @@
+empty
+remote
+three-commits
diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits
new file mode 100644
index 0000000..3e5308c
--- /dev/null
+++ b/levels/it/sandbox/three-commits
@@ -0,0 +1,26 @@
+title = Sandbox with three commits
+cards = checkout add reset-file checkout-file commit merge rebase
+
+[setup]
+
+echo "You wake up." > you
+git add .
+git commit -m "The beginning"
+
+echo "You drink coffee." >> you
+git commit -am "First things first"
+
+echo "You hear a knock on the door." >> you
+git commit -am "Who's there?"
+
+git branch not_main
+
+[description]
+
+Here's a sandbox you can play around in.
+
+You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:
+
+- Make a commit that merges three timelines together at once!
+- Create and delete some tags!
+- Make a timeline that's completely independent of the rest!
diff --git a/levels/it/sequence b/levels/it/sequence
new file mode 100644
index 0000000..cefcd7a
--- /dev/null
+++ b/levels/it/sequence
@@ -0,0 +1,13 @@
+intro
+files
+branches
+merge
+index
+remotes
+changing-the-past
+shit-happens
+workflows
+bisect
+stash
+tags
+sandbox
diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit
new file mode 100644
index 0000000..10669be
--- /dev/null
+++ b/levels/it/shit-happens/bad-commit
@@ -0,0 +1,30 @@
+title = Undo a bad commit
+cards = reset commit-a
+
+[description]
+
+Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?
+
+The answer is using `git reset [commit]`, which does two things:
+
+- It resets the current branch ref to the commit you specify.
+- And it resets the index to that commit.
+
+It does not change your working directory in any way, which means that after that, you can try making the commit you want again.
+
+[setup]
+
+echo "1 2 3 4" > numbers
+git add .
+git commit -m "Initial commit"
+echo "1 2 3 4 5 6 7 8 9 11" > numbers
+git commit -am "More numberrrrrs"
+
+[win]
+
+# In the last main commit, the numbers file contains the numbers from 1 to 10.
+test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10"
+# The commit message of that commit is "More numbers".
+git log -1 --oneline | grep "More numbers"
+# The commit with the typo is not part of the main branch anymore.
+git log --oneline | grep -v "rrrrr"
diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken
new file mode 100644
index 0000000..f8dce38
--- /dev/null
+++ b/levels/it/shit-happens/pushed-something-broken
@@ -0,0 +1,54 @@
+title = I pushed something broken
+cards = revert push
+
+[description]
+
+We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`
+
+[setup]
+
+echo "this is fine
+
+?
+
+?
+
+?" > text
+git add .
+git commit -m fine
+echo "this is fine
+
+this is also fine
+
+?
+
+?" > text
+git commit -am "also fine"
+echo "this is fine
+
+this is also fine
+
+this is very bad
+
+?" > text
+git commit -am "very bad"
+echo "this is fine
+
+this is also fine
+
+this is very bad
+
+this is fine again" > text
+git commit -am "fine again"
+
+git push team main
+git branch -u team/main main
+
+[setup team]
+
+[win team]
+
+# The team's main branch no longer contains the bad thing.
+! { git show main:text | grep -q "very bad"; }
+# And the history has not been modified.
+git show main^:text | grep -q "very bad"
diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog
new file mode 100644
index 0000000..e21c4e7
--- /dev/null
+++ b/levels/it/shit-happens/reflog
@@ -0,0 +1,26 @@
+title = Go back to where you were before
+cards = checkout reflog
+
+[description]
+
+Say you were looking at something in the past, and then switched back to the main branch.
+
+But then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?
+
+There's a convenient command that shows you all the places your HEAD did point to in the past:
+
+    git reflog
+
+[setup]
+
+for i in {1..10}; do
+    git commit --allow-empty -m $i
+    git branch $i
+done
+git checkout 3
+git checkout main
+
+[win]
+
+# Find out where you've been before, and go back there!
+test "$(git rev-parse HEAD)" = "$(git rev-parse 3)"
diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file
new file mode 100644
index 0000000..26450f0
--- /dev/null
+++ b/levels/it/shit-happens/restore-a-file
@@ -0,0 +1,22 @@
+title = Restore a deleted file
+cards = checkout
+
+[description]
+
+Oops - you deleted the "essay" file, which you worked on all night!
+
+Luckily, Git is here to help! You can use `git checkout` to restore the file!
+
+[setup]
+
+echo important > essay
+git add .
+git commit -m "Initial commit"
+echo "important content" > essay
+git commit -am "Improve essay"
+rm essay
+
+[win]
+
+# Restore the essay to contain "important content"
+test "$(cat essay)" = "important content"
diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past
new file mode 100644
index 0000000..b51c108
--- /dev/null
+++ b/levels/it/shit-happens/restore-a-file-from-the-past
@@ -0,0 +1,21 @@
+title = Restore a file from the past
+cards = checkout checkout-from commit
+
+[description]
+
+Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:
+
+    git checkout [commit] [file]
+
+[setup]
+
+echo "good version" > essay
+git add .
+git commit -m "Initial commit"
+echo "bad version" > essay
+git commit -am "\"Improve\" essay"
+
+[win]
+
+# Get the first version of your essay, and make a new commit with it.
+test "$(git show main:essay)" = "good version"
diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence
new file mode 100644
index 0000000..663d5d9
--- /dev/null
+++ b/levels/it/shit-happens/sequence
@@ -0,0 +1,5 @@
+restore-a-file
+restore-a-file-from-the-past
+bad-commit
+pushed-something-broken
+reflog
diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence
new file mode 100644
index 0000000..9dd02f7
--- /dev/null
+++ b/levels/it/stash/sequence
@@ -0,0 +1,5 @@
+stash
+stash-pop
+stash-clear
+stash-branch
+stash-merge
diff --git a/levels/it/stash/stash b/levels/it/stash/stash
new file mode 100644
index 0000000..6a4bc61
--- /dev/null
+++ b/levels/it/stash/stash
@@ -0,0 +1,45 @@
+title = Stashing
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+You will encounter situations in which you are working on your project but you need to
+put your current changes aside temporarily. To do so, you can use the stash function. Use
+    git stash push 
+to add your current changes to the stash stack.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+
+git checkout main
+
+[win]
+
+# Did you stash the current changes?
+test "$(git stash list | wc -l)" -ge 1
+
+[actions]
+
+
+
+[congrats]
+
+Nice stash you got there! :)
diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch
new file mode 100644
index 0000000..16c9eae
--- /dev/null
+++ b/levels/it/stash/stash-branch
@@ -0,0 +1,48 @@
+title = Branch from stash
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+If you want to keep your changes but they don't belong to the main branch, you can easily
+create a new branch from your stashed changes. Just use
+    git stash branch <branchname> <stash>
+If you just want to use the latest stash entry, you can leave the <stash> option empty.
+
+Create a new branch from the stashed changes!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+git stash push
+
+git checkout main
+
+[win]
+
+# Did you create a new branch from the stashed changes?
+test "$(git branch --list| wc -l)" -ge 2
+
+[actions]
+
+
+
+[congrats]
+
+Stashed changes are in a new branch! :)
diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear
new file mode 100644
index 0000000..9a1b697
--- /dev/null
+++ b/levels/it/stash/stash-clear
@@ -0,0 +1,57 @@
+title = Clear the Stash
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+If you want to inspect your stash stack, use the command
+    git stash list
+    
+Oh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with
+    git stash clear
+If you only want to discard a certain stash entry, you can use
+    git stash drop <stash>
+    
+Clear your stash stack!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+git stash push
+
+echo "- 200g Sugar" >> recipe
+git stash push
+
+echo "- Pinch of Salt" >> recipe
+git stash push
+
+git checkout main
+
+[win]
+
+# Did you clear your stash stack?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+All clear! :)
diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge
new file mode 100644
index 0000000..a8c9ac1
--- /dev/null
+++ b/levels/it/stash/stash-merge
@@ -0,0 +1,54 @@
+title = Merging popped stash
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+When you want to reapply your changes but you already continued working on your file, you might get
+a merge conflict! Let's practise this situation.
+Pop the changes from the stash with
+    git stash pop
+and resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+
+git stash push
+
+echo "- Pinch of Salt" >> recipe
+
+git checkout main
+git add recipe
+
+[win]
+
+# Did you resolve the confict and commit?
+{ git show HEAD | grep "Flour"; } && { git show HEAD | grep "Salt"; }
+
+# Did you clear stash stack?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Yay, you got your changes back! :)
diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop
new file mode 100644
index 0000000..5ac12d5
--- /dev/null
+++ b/levels/it/stash/stash-pop
@@ -0,0 +1,46 @@
+title = Pop from Stash
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+When you stashed your changes and you want to apply them back to your current working directory, you can use
+    git stash pop
+This will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use
+    git stash apply
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+
+git stash push
+git checkout main
+
+[win]
+
+# Did you pop the changes from the stash stack?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Yay, you got your changes back! :)
diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag
new file mode 100644
index 0000000..9c5703a
--- /dev/null
+++ b/levels/it/tags/add-tag
@@ -0,0 +1,53 @@
+title = Creating tags
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Some of your commits may be special commits. Maybe you reached a milestone or a new version number.
+
+You can mark these commits with a special flag called 'tag'.
+
+Write 
+
+    git tag <tag-name> 
+    
+to tag your commit.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > feature-list
+
+git add .
+git commit -m "Adding feature 1"
+
+echo "event 2" >> feature-list
+
+git add .
+git commit -m "Adding feature 2"
+
+echo "event 3" >> feature-list
+
+git add .
+git commit -m "Adding feature 3"
+
+git checkout --detach main
+
+[win]
+
+# Did you create a new tag?
+test "$(git tag -l | wc -l)" -ge 1
+
+[actions]
+
+
+
+[congrats]
+
+Nice! You tagged your first commit :)
diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later
new file mode 100644
index 0000000..905647c
--- /dev/null
+++ b/levels/it/tags/add-tag-later
@@ -0,0 +1,50 @@
+title = Tagging later
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+But what happens if you forgot to tag your current commit?
+No Prob! You can also tag older commits via
+
+    git tag <tag-name> <commit-hash>
+    
+Tag the commit "Adding feature 2" with the name "v1"!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > feature-list
+
+git add .
+git commit -m "Adding feature 1"
+
+echo "event 2" >> feature-list
+
+git add .
+git commit -m "Adding feature 2"
+
+echo "event 3" >> feature-list
+
+git add .
+git commit -m "Adding feature 3"
+
+git checkout --detach main
+
+[win]
+
+# Did you create a new tag?
+test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
+
+[actions]
+
+
+
+[congrats]
+
+Well done :)
diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag
new file mode 100644
index 0000000..0726915
--- /dev/null
+++ b/levels/it/tags/remote-tag
@@ -0,0 +1,58 @@
+title = Remote Tags
+cards = pull push commit-auto checkout
+
+[description]
+
+When you work with remote repositories, tags are not pushed or pulled automatically.
+
+You can push a tag with
+    git push <remote> <tag-name>
+Or all tags with:
+    git push <remote> --tags
+    
+Deleting tags on your remote works with: 
+    git push <remote> --delete <tag-name>
+    
+You can also sync 
+    git fetch <remote> --prune --prune-tags
+
+
+Add a tag named "v2" to the last commit and push it to the remote. Also pull the v1 tag to your local repository.
+[setup yours]
+
+git checkout main
+
+git checkout main
+echo "toothbrush sharing" > project-ideas
+git add .
+git commit -m "First idea"
+
+echo "Is my phone upside down? App" >> project-ideas
+git commit -am "Another idea"
+
+
+
+git push friend main
+
+git branch -u friend/main main
+
+[setup friend]
+
+
+
+[actions friend]
+
+git tag v1 HEAD~1
+
+[win]
+# v1 tag in your repo
+test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
+
+# v2 tag in your repo
+test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
+
+
+[win friend]
+
+# v2 tag in the remote
+test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag
new file mode 100644
index 0000000..98f2800
--- /dev/null
+++ b/levels/it/tags/remove-tag
@@ -0,0 +1,53 @@
+title = Removing tags
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+You added way too many tags? No prob! Delete them with
+
+    git tag -d <tag-name>
+    
+Remove all tags in this repo!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > feature-list
+
+git add .
+git commit -m "Adding feature 1"
+
+echo "event 2" >> feature-list
+
+git add .
+git commit -m "Adding feature 2"
+
+echo "event 3" >> feature-list
+
+git add .
+git commit -m "Adding feature 3"
+
+git tag v1 HEAD~2
+git tag v2 HEAD~1
+git tag v3 
+
+git checkout --detach main
+
+[win]
+
+# Did you remove all tags?
+test "$(git tag -l | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Well done :)
diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence
new file mode 100644
index 0000000..fd63d9c
--- /dev/null
+++ b/levels/it/tags/sequence
@@ -0,0 +1,4 @@
+add-tag
+remove-tag
+add-tag-later
+remote-tag
diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout
new file mode 100644
index 0000000..9d9c957
--- /dev/null
+++ b/levels/it/unused/checkout
@@ -0,0 +1,31 @@
+title = Getting the last version
+cards = checkout-file
+
+[description]
+
+You've been working on your essay for a while. But - ughh! Now your cat walks over your keyboard and "helps you", so now it's all messed up! :/
+
+But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`!
+
+[setup]
+
+echo "A" >> essay.txt
+git add .
+git commit -m "Initial commit"
+
+echo "B" >> essay.txt
+git commit -a -m "Improved version"
+
+echo "C" >> essay.txt
+git commit -a -m "Even better version"
+
+echo "D" >> essay.txt
+git commit -a -m "Marvelous version"
+
+echo "blarg
+blaaaargh" > essay.txt
+
+[win]
+
+# Restore the version from the last commit.
+cat essay.txt | grep D
diff --git a/levels/it/unused/clone b/levels/it/unused/clone
new file mode 100644
index 0000000..8459c08
--- /dev/null
+++ b/levels/it/unused/clone
@@ -0,0 +1,20 @@
+title = Cloning a repo
+cards = clone commit-auto pull push
+
+[description]
+
+Get your friend's repo using clone, change something, push it back.
+
+[setup]
+
+rm -rf .git
+
+[setup friend]
+
+echo hi > file
+git add .
+git commit -m "Initial commit"
+
+[win friend]
+
+test "$(git show main:file)" != hi
diff --git a/levels/it/unused/commit b/levels/it/unused/commit
new file mode 100644
index 0000000..fd84cc9
--- /dev/null
+++ b/levels/it/unused/commit
@@ -0,0 +1,27 @@
+title = Make a commit \o/
+cards = add reset checkout commit
+
+[description]
+
+For practice, make a commit where all files contain an "x"!
+
+[setup]
+
+echo a > a
+echo x > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b > b
+git add b
+echo c > c
+
+[win]
+
+# File a contains "x" in the last main commit.
+test "$(git show main:a)" = x
+# File b contains "x" in the last main commit.
+test "$(git show main:b)" = x
+# File c contains "x" in the last main commit.
+test "$(git show main:c)" = x
diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a
new file mode 100644
index 0000000..747a009
--- /dev/null
+++ b/levels/it/unused/commit-a
@@ -0,0 +1,26 @@
+title = Make a commit, but faster!
+cards = add reset checkout commit commit-a
+
+[description]
+
+There is a time-saving trick, where instead of a plain `git commit`, you can use
+
+    git commit -a
+
+This will automatically add all changes you made to local files! Very convenient.
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo x > b
+echo x > c
+
+[win]
+
+# Make a commit where all files contain "x".
+test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x
diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch
new file mode 100644
index 0000000..377355a
--- /dev/null
+++ b/levels/it/unused/fetch
@@ -0,0 +1,35 @@
+title = Fetching from remotes
+cards = checkout fetch commit-auto
+
+[description]
+
+Here, you already have two remotes configured! You can list them using `git remote`.
+
+Fetch from both, and look at the suggestions.
+
+Then, make a new commit on top of your original one that introduces a compromise.
+
+[setup]
+
+echo "The bikeshed should be ???" > proposal
+git add .
+git commit -m "What do you think?"
+
+[setup friend1]
+
+git pull yours main
+echo "The bikeshed should be green" > proposal
+git commit -am "Green"
+
+[setup friend2]
+
+git pull yours main
+echo "The bikeshed should be blue" > proposal
+git commit -am "Blue"
+
+[win]
+
+# Your proposal is acceptable for friend1.
+git show main:proposal | git grep green
+# Your proposal is acceptable for friend2.
+git show main:proposal | git grep blue
diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move
new file mode 100644
index 0000000..8f65710
--- /dev/null
+++ b/levels/it/unused/files-move
@@ -0,0 +1,27 @@
+title = No sleep required
+cards = file-new file-delete file-rename
+
+[description]
+
+Actually, you decide that you don't need any sleep.
+
+Because of that, you won't require a bed, and can build some other piece of furniture from the wood!
+
+
+[setup]
+
+echo A yellow cupboard with lots of drawers. > cupboard
+echo A really big yellow shelf. > shelf
+echo A comfortable, yellow bed with yellow cushions. > bed
+
+[win]
+
+# Rename the bed into something else, and give it a new description!
+NUM_FILES="$(ls | wc -l)"
+! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" .
+
+[congrats]
+
+Neat! It even still looks a bit comfortable!
+
+You head out, eager for your first lesson at time travel school!
diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv
new file mode 100644
index 0000000..9ff7270
--- /dev/null
+++ b/levels/it/unused/index-mv
@@ -0,0 +1,26 @@
+title = Rename a file in the next commit
+cards = add reset-file checkout-file mv commit
+
+[description]
+
+Other times, you might want to rename a file in the next commit. Use
+
+    git mv [file] [new name]
+
+for that. The effect is very similar as if you had created a copy with a new name, and removed the old version.
+
+[setup]
+
+echo a > a
+echo SPECIAL > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b >> b
+git add b
+
+[win]
+
+# Make a commit where you rename the file b to "x".
+test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")"
diff --git a/levels/it/unused/init b/levels/it/unused/init
new file mode 100644
index 0000000..c76daa5
--- /dev/null
+++ b/levels/it/unused/init
@@ -0,0 +1,14 @@
+title = Welcome!
+cards = init
+
+[description]
+
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Again, initialize your time machine!
+test -d .git
diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push
new file mode 100644
index 0000000..71ce61d
--- /dev/null
+++ b/levels/it/unused/pull-push
@@ -0,0 +1,51 @@
+title = Helping each other
+cards = checkout commit-auto reset-hard pull push
+
+[description]
+
+The events and timelines you see are always only what your own time machine knows about!
+
+Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine.
+
+Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick!
+
+You can only ever manipulate things in your own time machine (the one on the bottom).
+
+[setup yours]
+
+echo "Just woke up. Is hungry." > sam
+git add .
+git commit -m "The beginning"
+
+git checkout -b pancakes
+echo "Had blueberry pancakes with maple syrup for breakfast." > sam
+git add .
+git commit -m "Pancakes!"
+
+git checkout -b muesli main
+echo "Had muesli with oats and strawberries for breakfast." > sam
+git add .
+git commit -m "Muesli!"
+
+git checkout main
+
+git push -u sidekick main pancakes muesli
+
+[setup sidekick]
+
+git checkout main
+git merge pancakes
+git merge muesli
+
+echo "Had pancakes with strawberries for breakfast." > sam
+git add .
+git commit -m "Let's make this breakfast compromise" --author="Sidekick <sidekick@example.com>"
+
+[win sidekick]
+
+# Below main's parent, there is a rhombus:
+git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)"
+
+[congrats]
+
+In reality, in many cases, a lot of time agents work together to build a really good future together! :)
diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add
new file mode 100644
index 0000000..db24b7d
--- /dev/null
+++ b/levels/it/unused/remotes-add
@@ -0,0 +1,33 @@
+title = Adding a remote
+cards = checkout
+
+[description]
+
+Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using
+
+    git remote add [name] [URL]
+
+where `[name]` is an arbitrary, short name you pick for the remote.
+
+When you've done that, you can get all commits from that remote using
+
+    git pull friend
+
+There's a letter for you!
+
+[setup]
+
+git remote remove friend
+
+[setup friend]
+
+echo "I'm really committed to our friendship! <3" > love_letter
+git add .
+git commit -m "Write a letter"
+
+[win]
+
+# Add a remote that points to ../friend.
+git remote -v | grep '../friend'
+# Pull from the remote.
+git show HEAD:love_letter | grep committed
diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete
new file mode 100644
index 0000000..c026204
--- /dev/null
+++ b/levels/it/unused/remotes-delete
@@ -0,0 +1,23 @@
+title = Deleting and renaming a remote
+cards = checkout
+
+[description]
+
+Here, you already have two remotes configured! You can list them using `git remote`.
+
+[setup]
+
+git remote rename friend frend
+
+[setup friend]
+
+[setup enemy]
+
+[win]
+
+# Rename the remote with the typo (using `git remote rename [old name] [new name]`)
+git remote | grep friend
+# The remote with the typo is gone.
+! grep 'frend' <(git remote)
+# Delete the remote you don't want to keep (using `git remote remove [remote]`)
+! grep 'enemy' <(git remote)
diff --git a/levels/it/unused/restore b/levels/it/unused/restore
new file mode 100644
index 0000000..1f9961e
--- /dev/null
+++ b/levels/it/unused/restore
@@ -0,0 +1,28 @@
+title = Looking into the past
+cards = checkout-from
+
+[description]
+
+You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"!
+
+No problem, you can use the `checkout` card to restore your essay from an older commit!
+
+[setup]
+
+echo "Initial version" > essay.txt
+git add .
+git commit -m "Initial commit"
+
+echo "Improved version" > essay.txt
+git commit -a -m "Improved version"
+
+echo "Best version" > essay.txt
+git commit -a -m "Best version"
+
+echo "Less-good version" > essay.txt
+git commit -a -m "Less-good version"
+
+[win]
+
+# For nostalgic reasons, restore the very first backup you made!
+diff essay.txt <(echo "Best version")
diff --git a/levels/it/unused/split b/levels/it/unused/split
new file mode 100644
index 0000000..274b792
--- /dev/null
+++ b/levels/it/unused/split
@@ -0,0 +1,26 @@
+title = Split a commit!
+cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show
+
+[description]
+
+Here, both changes happened in one commit! Split them to be in two commits instead.
+
+[setup]
+
+echo something > file1
+echo something else > file2
+git add .
+git commit -m "Initial commit"
+
+echo this should happen first >> file1
+echo and this should happen after that >> file2
+git commit -am "Both together"
+
+echo this is some other change >> file1
+echo this is some other change >> file2
+git commit -am "Something else"
+
+[win]
+
+test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file2" &&
+test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M	file1"
diff --git a/levels/it/unused/steps b/levels/it/unused/steps
new file mode 100644
index 0000000..cb84861
--- /dev/null
+++ b/levels/it/unused/steps
@@ -0,0 +1,23 @@
+title = One step after another
+cards = checkout commit reset-hard add
+
+[description]
+
+Sometimes, you might want to record the order in which things changed, instead of making a single commit.
+
+What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense!
+
+[setup]
+
+echo something > file1
+echo something else > file2
+git add .
+git commit -m "Initial commit"
+
+echo this should happen first >> file1
+echo and this should happen after that >> file2
+
+[win]
+
+test "$(git diff-tree --no-commit-id --name-status -r main)" = "M	file2" &&
+test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file1"
diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you
new file mode 100644
index 0000000..f06137c
--- /dev/null
+++ b/levels/it/unused/who-are-you
@@ -0,0 +1,23 @@
+title = Nice to meet you!
+cards = config-name config-email
+
+[description]
+
+Introduce yourself using
+
+    git config --global user.name Firstname
+    git config --global user.email "your@mail.com"
+
+[setup]
+
+[actions]
+
+test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!"
+
+[win]
+
+# Have a name configured.
+test "$(git config user.name)" != "You"
+
+# Have an email address configured.
+test "$(git config user.email)" != "you@time.agency"
diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore
new file mode 100644
index 0000000..dc55243
--- /dev/null
+++ b/levels/it/workflows/gitignore
@@ -0,0 +1,18 @@
+title = Ignoring files
+
+[description]
+
+That chicken is running around a lot, and changing often. We don't want to have it in our commits.
+
+Add it to the file .gitignore, and try using `git add .`!
+
+[setup]
+
+touch .gitignore
+echo important > important
+git add important
+git commit -m "Initial commit"
+
+[actions]
+
+echo "$RANDOM" > chicken
diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr
new file mode 100644
index 0000000..1c72510
--- /dev/null
+++ b/levels/it/workflows/pr
@@ -0,0 +1,25 @@
+title = Cloning a repo
+cards = clone commit-auto reset-hard checkout file-new branch
+
+[description]
+
+Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`.
+
+[setup]
+
+rm -rf .git
+
+[setup friend]
+
+echo "2 + 3 = " > file
+git add .
+git commit -m "Initial commit"
+
+[actions friend]
+
+git ls-remote yours | grep pr && git fetch yours && git merge yours/solution
+git show main:file | grep 5 && hint "Thanks!"
+
+[win friend]
+
+git show main:file | grep 5
diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence
new file mode 100644
index 0000000..1be11a8
--- /dev/null
+++ b/levels/it/workflows/sequence
@@ -0,0 +1 @@
+pr
diff --git a/resources/cards.json b/resources/cards.json
index 79b51ca..d284b4e 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -2,181 +2,289 @@
     {
         "id": "init",
         "command": "git init",
-        "description": "Drag this card into the empty space above to initialize the time machine!"
+        "description": {
+	    "en": "Drag this card into the empty space above to initialize the time machine!",
+	    "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+	}
     },
     {
         "id": "clone",
         "command": "git clone ../[remote] .",
-        "description": "Create your own copy of someone else's repo."
+        "description": {
+	    "en": "Create your own copy of someone else's repo.",
+	    "it": "Crea la copia del Repo di qualcun'altro."
+	}
     },
     {
         "id": "config-name",
         "command": "git config --global user.name [string]",
-        "description": "Set your name.\n\n(Will not change anything outside of this game.)"
+        "description": {
+	    "en": "Set your name.\n\n(Will not change anything outside of this game.)",
+	    "it": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
+	}
     },
     {
         "id": "config-email",
         "command": "git config --global user.email [string]",
-        "description": "Set your email address."
+        "description": {
+	    "en": "Set your email address.",
+	    "it": "Imposta la tua e-mail."
+	}
     },
     {
         "id": "checkout",
         "command": "git checkout [commit, ref]",
-        "description": "Drag this card to a commit or to a branch to travel to it!"
+        "description": {
+	    "en": "Drag this card to a commit or to a branch to travel to it!",
+	    "it": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento."
+	}
     },
     {
         "id": "checkout-file",
         "command": "git checkout [file]",
-        "description": "Reset changes in a local file."
+        "description": {
+	    "en": "Reset changes in a local file.",
+	    "it": "Resetta i cambiamenti in un file locale"
+	}
     },
     {
         "id": "checkout-from",
         "command": "git checkout [commit, ref] [file]",
-        "description": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
+        "description": {
+	    "en": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.",
+	    "it": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice."
+	}
     },
     {
         "id": "commit-a",
         "command": "git commit -a",
-        "description": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
+        "description": {
+	    "en": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.",
+	    "it": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
+	}
     },
     {
         "id": "commit-auto",
         "command": "git add .; git commit",
-        "description": "Make a new commit containing your current environment! Type in a description of what changed!"
+        "description": {
+	    "en": "Make a new commit containing your current environment! Type in a description of what changed!",
+	    "it": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato"
+	}
     },
     {
         "id": "merge",
         "command": "git merge [commit, ref]",
-        "description": "Merge the specified timeline into yours. If necessary, will create a merge commit."
+        "description": {
+	    "en": "Merge the specified timeline into yours. If necessary, will create a merge commit.",
+	    "it": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione."
+	}
     },
     {
         "id": "merge-abort",
         "command": "git merge --abort",
-        "description": "Abort the current merge attempt, and reconstruct the previous state."
+        "description": {
+	    "en": "Abort the current merge attempt, and reconstruct the previous state.",
+	    "it": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
+	}
     },
     {
         "id": "rebase",
         "command": "git rebase [commit]",
-        "description": "Put the events in your current timeline on top of the specified one."
+        "description": {
+	    "en": "Put the events in your current timeline on top of the specified one.",
+	    "it": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato."
+	}
     },
     {
         "id": "pull",
         "command": "git pull",
-        "description": "Get someone else's version of the current timeline, and try to merge it into yours."
+        "description": {
+	    "en": "Get someone else's version of the current timeline, and try to merge it into yours.",
+	    "it": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua."
+	}
     },
     {
         "id": "fetch",
         "command": "git fetch [remote]",
-        "description": "Get a someone else's version of the current timeline."
+        "description": {
+	    "en": "Get a someone else's version of the current timeline.",
+	    "it": "Prende la versione, corrente, della linea temporale di qualcun'altro"
+	}
     },
     {
         "id": "push",
         "command": "git push",
-        "description": "Give the current timeline to someone else."
+        "description": {
+	    "en": "Give the current timeline to someone else.",
+	    "it": "Invia la corrente line temporale a qualcun'altro"
+	}
     },
     {
         "id": "rebase-interactive",
         "command": "git rebase -i [commit]",
-        "description": "Make changes to the events in your current timeline, back to the commit you drag this to."
+        "description": {
+	    "en": "Make changes to the events in your current timeline, back to the commit you drag this to.",
+	    "it": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini "
+	}
     },
     {
         "id": "rebase-continue",
         "command": "git rebase --continue",
-        "description": "Continue the current rebasing process."
+        "description": {
+	    "en": "Continue the current rebasing process.",
+	    "it": "Continua il corrente processo di ricostruzione"
+	}
     },
     {
         "id": "reset-hard",
         "command": "git reset --hard [commit]",
-        "description": "Move the branch you're on to the specified commit."
+        "description": {
+	    "en": "Move the branch you're on to the specified commit.",
+	    "it": "Muove il tuo branch (ramo) nello specifico commit."
+	}
     },
     {
         "id": "reset",
         "command": "git reset [commit]",
-        "description": "Jump to the commit, and update the index. Keep the current environment."
+        "description": {
+	    "en": "Jump to the commit, and update the index. Keep the current environment.",
+	    "it": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale."
+	}
     },
     {
         "id": "reset-file",
         "command": "git reset [file]",
-        "description": "Reset the index version of a file to the version in the commit you're on."
+        "description": {
+	    "en": "Reset the index version of a file to the version in the commit you're on.",
+	    "it": "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
+	}
     },
     {
         "id": "cherry-pick",
         "command": "git cherry-pick [commit]",
-        "description": "Repeat the specified action on top of your current timeline."
+        "description": {
+	    "en": "Repeat the specified action on top of your current timeline.",
+	    "it": "Ripete l'azione specificata sulla corrente linea temporale"
+	}
     },
     {
         "id": "revert",
         "command": "git revert [commit]",
-        "description": "Make a new commit that reverts the changes of the speicified commit."
+        "description": {
+	    "en": "Make a new commit that reverts the changes of the speicified commit.",
+	    "it": "Crea un nuovo commit che annula le modifiche dello specifico commit"
+	}
     },
     {
         "id": "bisect-start",
         "command": "git bisect start",
-        "description": "Start looking for the commit where things got bad."
+        "description": {
+	    "en": "Start looking for the commit where things got bad.",
+	    "it": "Inizia a cercare il commit dove le cose sono andate storte"
+	}
     },
     {
         "id": "bisect-good",
         "command": "git bisect good",
-        "description": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+        "description": {
+	    "en": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!"
+	}
     },
     {
         "id": "bisect-bad",
         "command": "git bisect bad",
-        "description": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+        "description": {
+	    "en": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
+	}
     },
     {
         "id": "add",
         "command": "git add [file]",
-        "description": "Update the index version of the file to its current real content."
+        "description": {
+	    "en": "Update the index version of the file to its current real content.",
+	    "it": "Aggiorna l'indice del file con il, corrente, reale contenuto."
+	}
     },
     {
         "id": "rm",
         "command": "git rm [file]",
-        "description": "Delete a file both in the working directory, as well as the index."
+        "description": {
+	    "en": "Delete a file both in the working directory, as well as the index.",
+	    "it": "Cancella il file sia dalla corrente directory che dall'indice."
+	}
     },
     {
         "id": "commit",
         "command": "git commit",
-        "description": "Make a commit from the current index."
+        "description": {
+	    "en": "Make a commit from the current index.",
+	    "it": "Crea un commit dal corrente indice."
+	}
     },
     {
         "id": "show",
         "command": "git show [commit]",
-        "description": "Show what changed in the commit."
+        "description": {
+	    "en": "Show what changed in the commit.",
+	    "it": "Mostra cosa è cambiato nel commit."
+	}
     },
     {
         "id": "branch",
         "command": "git branch [string]",
-        "description": "Create a new branch at your current location."
+        "description": {
+	    "en": "Create a new branch at your current location.",
+	    "it": "Crea un nuovo branch (ramo) nella tua corrente posizione."
+	}
     },
     {
         "id": "branch-delete",
         "command": "git branch -D [ref]",
-        "description": "Delete a branch."
+        "description": {
+	    "en": "Delete a branch.",
+	    "it": "Cancella un branch.(ramo)"
+	}
     },
     {
         "id": "reflog",
         "command": "git reflog [ref, head]",
-        "description": "Display a log of where the ref pointed to in the past."
+        "description": {
+	    "en": "Display a log of where the ref pointed to in the past.",
+	    "it": "Mostra un log di dove il riferimento puntava in passato"
+	}
     },
     {
         "id": "file-new",
         "command": "touch [string]",
-        "description": "Create a new file."
+        "description": {
+	    "en": "Create a new file.",
+	    "it": "Crea un nuovo file."
+	}
     },
     {
         "id": "file-delete",
         "command": "rm [file]",
-        "description": "Delete a file."
+        "description": {
+	    "en": "Delete a file.",
+	    "it": "Cancella un file."
+	}
     },
     {
         "id": "file-rename",
         "command": "mv [file] [string]",
-        "description": "Rename a file."
+        "description": {
+	    "en": "Rename a file.",
+	    "it": "Rinomina un file."
+	}
     },
     {
         "id": "file-copy",
         "command": "cp [file] [string]",
-        "description": "Make a copy of a file."
+        "description": {
+	    "en": "Make a copy of a file.",
+	    "it": "Crea una copia di un file."
+	}
     }
 ]
diff --git a/scenes/cards.gd b/scenes/cards.gd
index 4448d6c..d68dc02 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -3,6 +3,7 @@ extends Control
 var card_store = {}
 var cards
 var card_radius = 1500
+var lang = "it" # TODO: Make a global variable to setting dir and cards localizations
 
 func _ready():
 	load_card_store()
@@ -16,7 +17,7 @@ func _process(_delta):
 
 func load_card_store():
 	card_store = {}
-	var cards_json = JSON.parse(helpers.read_file("res://resources/cards.json")).result
+	var cards_json = JSON.parse(helpers.read_file("res://resources/cards_i18n.json")).result
 	for card in cards_json:
 		card_store[card["id"]] = card
 	
@@ -39,7 +40,7 @@ func draw_card(card):
 	
 	new_card.id = card["id"]
 	new_card.command = card["command"]
-	new_card.description = card["description"]
+	new_card.description = card["description"][lang]
 	new_card.energy = 0 #card.energy
 	new_card.position = Vector2(rect_size.x, rect_size.y*2)
 	add_child(new_card)
diff --git a/scenes/title.tscn b/scenes/title.tscn
index 8363e84..f919e19 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -72,6 +72,7 @@ text = "Quit"
 position = Vector2( 967.924, 306.066 )
 scale = Vector2( 0.320895, 0.320895 )
 texture = ExtResource( 2 )
+
 [connection signal="pressed" from="VBoxContainer/Button" to="." method="levels"]
 [connection signal="pressed" from="VBoxContainer/Button3" to="." method="sandbox"]
 [connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"]

From 705cc849c2320c69da05372fce442e2866adad64 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Mon, 6 Sep 2021 23:15:34 +0200
Subject: [PATCH 03/49] Add italian localizations and mechanism for card,
 levels and buttons and labels

---
 levels/{ => en}/bisect/bisect                 |   0
 levels/{ => en}/bisect/sequence               |   0
 levels/{ => en}/branches/branch-create        |   0
 levels/{ => en}/branches/branch-remove        |   0
 levels/{ => en}/branches/checkout-commit      |   0
 levels/{ => en}/branches/fork                 |   0
 levels/{ => en}/branches/grow                 |   0
 levels/{ => en}/branches/reorder              |   0
 levels/{ => en}/branches/sequence             |   0
 levels/{ => en}/changing-the-past/rebase      |   0
 levels/{ => en}/changing-the-past/reorder     |   0
 levels/{ => en}/changing-the-past/sequence    |   0
 levels/{ => en}/files/files-add               |   0
 levels/{ => en}/files/files-delete            |   0
 levels/{ => en}/files/sequence                |   0
 levels/{ => en}/index/add                     |   0
 levels/{ => en}/index/change                  |   0
 levels/{ => en}/index/checkout                |   0
 levels/{ => en}/index/compare                 |   0
 levels/{ => en}/index/new                     |   0
 levels/{ => en}/index/reset                   |   0
 levels/{ => en}/index/rm                      |   0
 levels/{ => en}/index/sequence                |   0
 levels/{ => en}/index/steps                   |   0
 levels/{ => en}/intro/cli                     |   0
 levels/{ => en}/intro/commit                  |   0
 levels/{ => en}/intro/copies                  |   0
 levels/{ => en}/intro/init                    |   0
 levels/{ => en}/intro/remote                  |   0
 levels/{ => en}/intro/risky                   |   0
 levels/{ => en}/intro/sequence                |   0
 levels/{ => en}/intro/who-are-you             |   0
 levels/{ => en}/low-level/basics              |   0
 levels/{ => en}/low-level/blob-create         |   0
 levels/{ => en}/low-level/blob-remove         |   0
 levels/{ => en}/low-level/commit-create       |   0
 levels/{ => en}/low-level/commit-parents      |   0
 levels/{ => en}/low-level/commit-rhombus      |   0
 levels/{ => en}/low-level/index-add           |   0
 levels/{ => en}/low-level/index-remove        |   0
 levels/{ => en}/low-level/index-update        |   0
 levels/{ => en}/low-level/puzzle-apocalypse   |   0
 .../{ => en}/low-level/puzzle-precious-blob   |   0
 .../low-level/puzzle-trees-all-the-way-down   |   0
 levels/{ => en}/low-level/ref-create          |   0
 levels/{ => en}/low-level/ref-move            |   0
 levels/{ => en}/low-level/ref-remove          |   0
 levels/{ => en}/low-level/sequence            |   0
 levels/{ => en}/low-level/symref-create       |   0
 levels/{ => en}/low-level/symref-no-deref     |   0
 levels/{ => en}/low-level/tree-create         |   0
 levels/{ => en}/low-level/tree-nested         |   0
 levels/{ => en}/low-level/tree-read           |   0
 levels/{ => en}/low-level/welcome             |   0
 levels/{ => en}/merge/conflict                |   0
 levels/{ => en}/merge/merge                   |   0
 levels/{ => en}/merge/merge-abort             |   0
 levels/{ => en}/merge/sequence                |   0
 levels/{ => en}/remotes/friend                |   0
 levels/{ => en}/remotes/problems              |   0
 levels/{ => en}/remotes/sequence              |   0
 levels/{ => en}/sandbox/empty                 |   0
 levels/{ => en}/sandbox/remote                |   0
 levels/{ => en}/sandbox/sequence              |   0
 levels/{ => en}/sandbox/three-commits         |   0
 levels/{ => en}/sequence                      |   0
 levels/{ => en}/shit-happens/bad-commit       |   0
 .../shit-happens/pushed-something-broken      |   0
 levels/{ => en}/shit-happens/reflog           |   0
 levels/{ => en}/shit-happens/restore-a-file   |   0
 .../shit-happens/restore-a-file-from-the-past |   0
 levels/{ => en}/shit-happens/sequence         |   0
 levels/{ => en}/stash/sequence                |   0
 levels/{ => en}/stash/stash                   |   0
 levels/{ => en}/stash/stash-branch            |   0
 levels/{ => en}/stash/stash-clear             |   0
 levels/{ => en}/stash/stash-merge             |   0
 levels/{ => en}/stash/stash-pop               |   0
 levels/{ => en}/tags/add-tag                  |   0
 levels/{ => en}/tags/add-tag-later            |   0
 levels/{ => en}/tags/remote-tag               |   0
 levels/{ => en}/tags/remove-tag               |   0
 levels/{ => en}/tags/sequence                 |   0
 levels/{ => en}/unused/checkout               |   0
 levels/{ => en}/unused/clone                  |   0
 levels/{ => en}/unused/commit                 |   0
 levels/{ => en}/unused/commit-a               |   0
 levels/{ => en}/unused/fetch                  |   0
 levels/{ => en}/unused/files-move             |   0
 levels/{ => en}/unused/index-mv               |   0
 levels/{ => en}/unused/init                   |   0
 levels/{ => en}/unused/pull-push              |   0
 levels/{ => en}/unused/remotes-add            |   0
 levels/{ => en}/unused/remotes-delete         |   0
 levels/{ => en}/unused/restore                |   0
 levels/{ => en}/unused/split                  |   0
 levels/{ => en}/unused/steps                  |   0
 levels/{ => en}/unused/who-are-you            |   0
 levels/{ => en}/workflows/gitignore           |   0
 levels/{ => en}/workflows/pr                  |   0
 levels/{ => en}/workflows/sequence            |   0
 project.godot                                 |   4 ++
 resources/localizations.csv                   |  17 +++++
 resources/localizations.csv.import            |  16 +++++
 resources/localizations.en.translation        | Bin 0 -> 785 bytes
 resources/localizations.it.translation        | Bin 0 -> 804 bytes
 scenes/card.tscn                              |   1 +
 scenes/cards.gd                               |   6 +-
 scenes/cards.tscn                             |   1 +
 scenes/chapter.gd                             |   6 +-
 scenes/drop_area.tscn                         |   1 +
 scenes/file_browser.tscn                      |   1 +
 scenes/file_browser_item.tscn                 |   1 +
 scenes/helpers.gd                             |   2 +
 scenes/input_dialog.tscn                      |   1 +
 scenes/level_select.gd                        |   1 +
 scenes/level_select.tscn                      |  65 ++++++++++--------
 scenes/levels.gd                              |   6 +-
 scenes/main.tscn                              |  39 ++++++-----
 scenes/music_button.gd                        |   1 -
 scenes/music_button.tscn                      |   5 +-
 scenes/no_git.tscn                            |  22 +++---
 scenes/node.tscn                              |   1 +
 scenes/notification.tscn                      |   1 +
 scenes/title.tscn                             |   4 +-
 125 files changed, 131 insertions(+), 71 deletions(-)
 rename levels/{ => en}/bisect/bisect (100%)
 rename levels/{ => en}/bisect/sequence (100%)
 rename levels/{ => en}/branches/branch-create (100%)
 rename levels/{ => en}/branches/branch-remove (100%)
 rename levels/{ => en}/branches/checkout-commit (100%)
 rename levels/{ => en}/branches/fork (100%)
 rename levels/{ => en}/branches/grow (100%)
 rename levels/{ => en}/branches/reorder (100%)
 rename levels/{ => en}/branches/sequence (100%)
 rename levels/{ => en}/changing-the-past/rebase (100%)
 rename levels/{ => en}/changing-the-past/reorder (100%)
 rename levels/{ => en}/changing-the-past/sequence (100%)
 rename levels/{ => en}/files/files-add (100%)
 rename levels/{ => en}/files/files-delete (100%)
 rename levels/{ => en}/files/sequence (100%)
 rename levels/{ => en}/index/add (100%)
 rename levels/{ => en}/index/change (100%)
 rename levels/{ => en}/index/checkout (100%)
 rename levels/{ => en}/index/compare (100%)
 rename levels/{ => en}/index/new (100%)
 rename levels/{ => en}/index/reset (100%)
 rename levels/{ => en}/index/rm (100%)
 rename levels/{ => en}/index/sequence (100%)
 rename levels/{ => en}/index/steps (100%)
 rename levels/{ => en}/intro/cli (100%)
 rename levels/{ => en}/intro/commit (100%)
 rename levels/{ => en}/intro/copies (100%)
 rename levels/{ => en}/intro/init (100%)
 rename levels/{ => en}/intro/remote (100%)
 rename levels/{ => en}/intro/risky (100%)
 rename levels/{ => en}/intro/sequence (100%)
 rename levels/{ => en}/intro/who-are-you (100%)
 rename levels/{ => en}/low-level/basics (100%)
 rename levels/{ => en}/low-level/blob-create (100%)
 rename levels/{ => en}/low-level/blob-remove (100%)
 rename levels/{ => en}/low-level/commit-create (100%)
 rename levels/{ => en}/low-level/commit-parents (100%)
 rename levels/{ => en}/low-level/commit-rhombus (100%)
 rename levels/{ => en}/low-level/index-add (100%)
 rename levels/{ => en}/low-level/index-remove (100%)
 rename levels/{ => en}/low-level/index-update (100%)
 rename levels/{ => en}/low-level/puzzle-apocalypse (100%)
 rename levels/{ => en}/low-level/puzzle-precious-blob (100%)
 rename levels/{ => en}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{ => en}/low-level/ref-create (100%)
 rename levels/{ => en}/low-level/ref-move (100%)
 rename levels/{ => en}/low-level/ref-remove (100%)
 rename levels/{ => en}/low-level/sequence (100%)
 rename levels/{ => en}/low-level/symref-create (100%)
 rename levels/{ => en}/low-level/symref-no-deref (100%)
 rename levels/{ => en}/low-level/tree-create (100%)
 rename levels/{ => en}/low-level/tree-nested (100%)
 rename levels/{ => en}/low-level/tree-read (100%)
 rename levels/{ => en}/low-level/welcome (100%)
 rename levels/{ => en}/merge/conflict (100%)
 rename levels/{ => en}/merge/merge (100%)
 rename levels/{ => en}/merge/merge-abort (100%)
 rename levels/{ => en}/merge/sequence (100%)
 rename levels/{ => en}/remotes/friend (100%)
 rename levels/{ => en}/remotes/problems (100%)
 rename levels/{ => en}/remotes/sequence (100%)
 rename levels/{ => en}/sandbox/empty (100%)
 rename levels/{ => en}/sandbox/remote (100%)
 rename levels/{ => en}/sandbox/sequence (100%)
 rename levels/{ => en}/sandbox/three-commits (100%)
 rename levels/{ => en}/sequence (100%)
 rename levels/{ => en}/shit-happens/bad-commit (100%)
 rename levels/{ => en}/shit-happens/pushed-something-broken (100%)
 rename levels/{ => en}/shit-happens/reflog (100%)
 rename levels/{ => en}/shit-happens/restore-a-file (100%)
 rename levels/{ => en}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{ => en}/shit-happens/sequence (100%)
 rename levels/{ => en}/stash/sequence (100%)
 rename levels/{ => en}/stash/stash (100%)
 rename levels/{ => en}/stash/stash-branch (100%)
 rename levels/{ => en}/stash/stash-clear (100%)
 rename levels/{ => en}/stash/stash-merge (100%)
 rename levels/{ => en}/stash/stash-pop (100%)
 rename levels/{ => en}/tags/add-tag (100%)
 rename levels/{ => en}/tags/add-tag-later (100%)
 rename levels/{ => en}/tags/remote-tag (100%)
 rename levels/{ => en}/tags/remove-tag (100%)
 rename levels/{ => en}/tags/sequence (100%)
 rename levels/{ => en}/unused/checkout (100%)
 rename levels/{ => en}/unused/clone (100%)
 rename levels/{ => en}/unused/commit (100%)
 rename levels/{ => en}/unused/commit-a (100%)
 rename levels/{ => en}/unused/fetch (100%)
 rename levels/{ => en}/unused/files-move (100%)
 rename levels/{ => en}/unused/index-mv (100%)
 rename levels/{ => en}/unused/init (100%)
 rename levels/{ => en}/unused/pull-push (100%)
 rename levels/{ => en}/unused/remotes-add (100%)
 rename levels/{ => en}/unused/remotes-delete (100%)
 rename levels/{ => en}/unused/restore (100%)
 rename levels/{ => en}/unused/split (100%)
 rename levels/{ => en}/unused/steps (100%)
 rename levels/{ => en}/unused/who-are-you (100%)
 rename levels/{ => en}/workflows/gitignore (100%)
 rename levels/{ => en}/workflows/pr (100%)
 rename levels/{ => en}/workflows/sequence (100%)
 create mode 100644 resources/localizations.csv
 create mode 100644 resources/localizations.csv.import
 create mode 100644 resources/localizations.en.translation
 create mode 100644 resources/localizations.it.translation

diff --git a/levels/bisect/bisect b/levels/en/bisect/bisect
similarity index 100%
rename from levels/bisect/bisect
rename to levels/en/bisect/bisect
diff --git a/levels/bisect/sequence b/levels/en/bisect/sequence
similarity index 100%
rename from levels/bisect/sequence
rename to levels/en/bisect/sequence
diff --git a/levels/branches/branch-create b/levels/en/branches/branch-create
similarity index 100%
rename from levels/branches/branch-create
rename to levels/en/branches/branch-create
diff --git a/levels/branches/branch-remove b/levels/en/branches/branch-remove
similarity index 100%
rename from levels/branches/branch-remove
rename to levels/en/branches/branch-remove
diff --git a/levels/branches/checkout-commit b/levels/en/branches/checkout-commit
similarity index 100%
rename from levels/branches/checkout-commit
rename to levels/en/branches/checkout-commit
diff --git a/levels/branches/fork b/levels/en/branches/fork
similarity index 100%
rename from levels/branches/fork
rename to levels/en/branches/fork
diff --git a/levels/branches/grow b/levels/en/branches/grow
similarity index 100%
rename from levels/branches/grow
rename to levels/en/branches/grow
diff --git a/levels/branches/reorder b/levels/en/branches/reorder
similarity index 100%
rename from levels/branches/reorder
rename to levels/en/branches/reorder
diff --git a/levels/branches/sequence b/levels/en/branches/sequence
similarity index 100%
rename from levels/branches/sequence
rename to levels/en/branches/sequence
diff --git a/levels/changing-the-past/rebase b/levels/en/changing-the-past/rebase
similarity index 100%
rename from levels/changing-the-past/rebase
rename to levels/en/changing-the-past/rebase
diff --git a/levels/changing-the-past/reorder b/levels/en/changing-the-past/reorder
similarity index 100%
rename from levels/changing-the-past/reorder
rename to levels/en/changing-the-past/reorder
diff --git a/levels/changing-the-past/sequence b/levels/en/changing-the-past/sequence
similarity index 100%
rename from levels/changing-the-past/sequence
rename to levels/en/changing-the-past/sequence
diff --git a/levels/files/files-add b/levels/en/files/files-add
similarity index 100%
rename from levels/files/files-add
rename to levels/en/files/files-add
diff --git a/levels/files/files-delete b/levels/en/files/files-delete
similarity index 100%
rename from levels/files/files-delete
rename to levels/en/files/files-delete
diff --git a/levels/files/sequence b/levels/en/files/sequence
similarity index 100%
rename from levels/files/sequence
rename to levels/en/files/sequence
diff --git a/levels/index/add b/levels/en/index/add
similarity index 100%
rename from levels/index/add
rename to levels/en/index/add
diff --git a/levels/index/change b/levels/en/index/change
similarity index 100%
rename from levels/index/change
rename to levels/en/index/change
diff --git a/levels/index/checkout b/levels/en/index/checkout
similarity index 100%
rename from levels/index/checkout
rename to levels/en/index/checkout
diff --git a/levels/index/compare b/levels/en/index/compare
similarity index 100%
rename from levels/index/compare
rename to levels/en/index/compare
diff --git a/levels/index/new b/levels/en/index/new
similarity index 100%
rename from levels/index/new
rename to levels/en/index/new
diff --git a/levels/index/reset b/levels/en/index/reset
similarity index 100%
rename from levels/index/reset
rename to levels/en/index/reset
diff --git a/levels/index/rm b/levels/en/index/rm
similarity index 100%
rename from levels/index/rm
rename to levels/en/index/rm
diff --git a/levels/index/sequence b/levels/en/index/sequence
similarity index 100%
rename from levels/index/sequence
rename to levels/en/index/sequence
diff --git a/levels/index/steps b/levels/en/index/steps
similarity index 100%
rename from levels/index/steps
rename to levels/en/index/steps
diff --git a/levels/intro/cli b/levels/en/intro/cli
similarity index 100%
rename from levels/intro/cli
rename to levels/en/intro/cli
diff --git a/levels/intro/commit b/levels/en/intro/commit
similarity index 100%
rename from levels/intro/commit
rename to levels/en/intro/commit
diff --git a/levels/intro/copies b/levels/en/intro/copies
similarity index 100%
rename from levels/intro/copies
rename to levels/en/intro/copies
diff --git a/levels/intro/init b/levels/en/intro/init
similarity index 100%
rename from levels/intro/init
rename to levels/en/intro/init
diff --git a/levels/intro/remote b/levels/en/intro/remote
similarity index 100%
rename from levels/intro/remote
rename to levels/en/intro/remote
diff --git a/levels/intro/risky b/levels/en/intro/risky
similarity index 100%
rename from levels/intro/risky
rename to levels/en/intro/risky
diff --git a/levels/intro/sequence b/levels/en/intro/sequence
similarity index 100%
rename from levels/intro/sequence
rename to levels/en/intro/sequence
diff --git a/levels/intro/who-are-you b/levels/en/intro/who-are-you
similarity index 100%
rename from levels/intro/who-are-you
rename to levels/en/intro/who-are-you
diff --git a/levels/low-level/basics b/levels/en/low-level/basics
similarity index 100%
rename from levels/low-level/basics
rename to levels/en/low-level/basics
diff --git a/levels/low-level/blob-create b/levels/en/low-level/blob-create
similarity index 100%
rename from levels/low-level/blob-create
rename to levels/en/low-level/blob-create
diff --git a/levels/low-level/blob-remove b/levels/en/low-level/blob-remove
similarity index 100%
rename from levels/low-level/blob-remove
rename to levels/en/low-level/blob-remove
diff --git a/levels/low-level/commit-create b/levels/en/low-level/commit-create
similarity index 100%
rename from levels/low-level/commit-create
rename to levels/en/low-level/commit-create
diff --git a/levels/low-level/commit-parents b/levels/en/low-level/commit-parents
similarity index 100%
rename from levels/low-level/commit-parents
rename to levels/en/low-level/commit-parents
diff --git a/levels/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus
similarity index 100%
rename from levels/low-level/commit-rhombus
rename to levels/en/low-level/commit-rhombus
diff --git a/levels/low-level/index-add b/levels/en/low-level/index-add
similarity index 100%
rename from levels/low-level/index-add
rename to levels/en/low-level/index-add
diff --git a/levels/low-level/index-remove b/levels/en/low-level/index-remove
similarity index 100%
rename from levels/low-level/index-remove
rename to levels/en/low-level/index-remove
diff --git a/levels/low-level/index-update b/levels/en/low-level/index-update
similarity index 100%
rename from levels/low-level/index-update
rename to levels/en/low-level/index-update
diff --git a/levels/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/low-level/puzzle-apocalypse
rename to levels/en/low-level/puzzle-apocalypse
diff --git a/levels/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/low-level/puzzle-precious-blob
rename to levels/en/low-level/puzzle-precious-blob
diff --git a/levels/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/low-level/puzzle-trees-all-the-way-down
rename to levels/en/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/low-level/ref-create b/levels/en/low-level/ref-create
similarity index 100%
rename from levels/low-level/ref-create
rename to levels/en/low-level/ref-create
diff --git a/levels/low-level/ref-move b/levels/en/low-level/ref-move
similarity index 100%
rename from levels/low-level/ref-move
rename to levels/en/low-level/ref-move
diff --git a/levels/low-level/ref-remove b/levels/en/low-level/ref-remove
similarity index 100%
rename from levels/low-level/ref-remove
rename to levels/en/low-level/ref-remove
diff --git a/levels/low-level/sequence b/levels/en/low-level/sequence
similarity index 100%
rename from levels/low-level/sequence
rename to levels/en/low-level/sequence
diff --git a/levels/low-level/symref-create b/levels/en/low-level/symref-create
similarity index 100%
rename from levels/low-level/symref-create
rename to levels/en/low-level/symref-create
diff --git a/levels/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref
similarity index 100%
rename from levels/low-level/symref-no-deref
rename to levels/en/low-level/symref-no-deref
diff --git a/levels/low-level/tree-create b/levels/en/low-level/tree-create
similarity index 100%
rename from levels/low-level/tree-create
rename to levels/en/low-level/tree-create
diff --git a/levels/low-level/tree-nested b/levels/en/low-level/tree-nested
similarity index 100%
rename from levels/low-level/tree-nested
rename to levels/en/low-level/tree-nested
diff --git a/levels/low-level/tree-read b/levels/en/low-level/tree-read
similarity index 100%
rename from levels/low-level/tree-read
rename to levels/en/low-level/tree-read
diff --git a/levels/low-level/welcome b/levels/en/low-level/welcome
similarity index 100%
rename from levels/low-level/welcome
rename to levels/en/low-level/welcome
diff --git a/levels/merge/conflict b/levels/en/merge/conflict
similarity index 100%
rename from levels/merge/conflict
rename to levels/en/merge/conflict
diff --git a/levels/merge/merge b/levels/en/merge/merge
similarity index 100%
rename from levels/merge/merge
rename to levels/en/merge/merge
diff --git a/levels/merge/merge-abort b/levels/en/merge/merge-abort
similarity index 100%
rename from levels/merge/merge-abort
rename to levels/en/merge/merge-abort
diff --git a/levels/merge/sequence b/levels/en/merge/sequence
similarity index 100%
rename from levels/merge/sequence
rename to levels/en/merge/sequence
diff --git a/levels/remotes/friend b/levels/en/remotes/friend
similarity index 100%
rename from levels/remotes/friend
rename to levels/en/remotes/friend
diff --git a/levels/remotes/problems b/levels/en/remotes/problems
similarity index 100%
rename from levels/remotes/problems
rename to levels/en/remotes/problems
diff --git a/levels/remotes/sequence b/levels/en/remotes/sequence
similarity index 100%
rename from levels/remotes/sequence
rename to levels/en/remotes/sequence
diff --git a/levels/sandbox/empty b/levels/en/sandbox/empty
similarity index 100%
rename from levels/sandbox/empty
rename to levels/en/sandbox/empty
diff --git a/levels/sandbox/remote b/levels/en/sandbox/remote
similarity index 100%
rename from levels/sandbox/remote
rename to levels/en/sandbox/remote
diff --git a/levels/sandbox/sequence b/levels/en/sandbox/sequence
similarity index 100%
rename from levels/sandbox/sequence
rename to levels/en/sandbox/sequence
diff --git a/levels/sandbox/three-commits b/levels/en/sandbox/three-commits
similarity index 100%
rename from levels/sandbox/three-commits
rename to levels/en/sandbox/three-commits
diff --git a/levels/sequence b/levels/en/sequence
similarity index 100%
rename from levels/sequence
rename to levels/en/sequence
diff --git a/levels/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit
similarity index 100%
rename from levels/shit-happens/bad-commit
rename to levels/en/shit-happens/bad-commit
diff --git a/levels/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/shit-happens/pushed-something-broken
rename to levels/en/shit-happens/pushed-something-broken
diff --git a/levels/shit-happens/reflog b/levels/en/shit-happens/reflog
similarity index 100%
rename from levels/shit-happens/reflog
rename to levels/en/shit-happens/reflog
diff --git a/levels/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file
similarity index 100%
rename from levels/shit-happens/restore-a-file
rename to levels/en/shit-happens/restore-a-file
diff --git a/levels/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/shit-happens/restore-a-file-from-the-past
rename to levels/en/shit-happens/restore-a-file-from-the-past
diff --git a/levels/shit-happens/sequence b/levels/en/shit-happens/sequence
similarity index 100%
rename from levels/shit-happens/sequence
rename to levels/en/shit-happens/sequence
diff --git a/levels/stash/sequence b/levels/en/stash/sequence
similarity index 100%
rename from levels/stash/sequence
rename to levels/en/stash/sequence
diff --git a/levels/stash/stash b/levels/en/stash/stash
similarity index 100%
rename from levels/stash/stash
rename to levels/en/stash/stash
diff --git a/levels/stash/stash-branch b/levels/en/stash/stash-branch
similarity index 100%
rename from levels/stash/stash-branch
rename to levels/en/stash/stash-branch
diff --git a/levels/stash/stash-clear b/levels/en/stash/stash-clear
similarity index 100%
rename from levels/stash/stash-clear
rename to levels/en/stash/stash-clear
diff --git a/levels/stash/stash-merge b/levels/en/stash/stash-merge
similarity index 100%
rename from levels/stash/stash-merge
rename to levels/en/stash/stash-merge
diff --git a/levels/stash/stash-pop b/levels/en/stash/stash-pop
similarity index 100%
rename from levels/stash/stash-pop
rename to levels/en/stash/stash-pop
diff --git a/levels/tags/add-tag b/levels/en/tags/add-tag
similarity index 100%
rename from levels/tags/add-tag
rename to levels/en/tags/add-tag
diff --git a/levels/tags/add-tag-later b/levels/en/tags/add-tag-later
similarity index 100%
rename from levels/tags/add-tag-later
rename to levels/en/tags/add-tag-later
diff --git a/levels/tags/remote-tag b/levels/en/tags/remote-tag
similarity index 100%
rename from levels/tags/remote-tag
rename to levels/en/tags/remote-tag
diff --git a/levels/tags/remove-tag b/levels/en/tags/remove-tag
similarity index 100%
rename from levels/tags/remove-tag
rename to levels/en/tags/remove-tag
diff --git a/levels/tags/sequence b/levels/en/tags/sequence
similarity index 100%
rename from levels/tags/sequence
rename to levels/en/tags/sequence
diff --git a/levels/unused/checkout b/levels/en/unused/checkout
similarity index 100%
rename from levels/unused/checkout
rename to levels/en/unused/checkout
diff --git a/levels/unused/clone b/levels/en/unused/clone
similarity index 100%
rename from levels/unused/clone
rename to levels/en/unused/clone
diff --git a/levels/unused/commit b/levels/en/unused/commit
similarity index 100%
rename from levels/unused/commit
rename to levels/en/unused/commit
diff --git a/levels/unused/commit-a b/levels/en/unused/commit-a
similarity index 100%
rename from levels/unused/commit-a
rename to levels/en/unused/commit-a
diff --git a/levels/unused/fetch b/levels/en/unused/fetch
similarity index 100%
rename from levels/unused/fetch
rename to levels/en/unused/fetch
diff --git a/levels/unused/files-move b/levels/en/unused/files-move
similarity index 100%
rename from levels/unused/files-move
rename to levels/en/unused/files-move
diff --git a/levels/unused/index-mv b/levels/en/unused/index-mv
similarity index 100%
rename from levels/unused/index-mv
rename to levels/en/unused/index-mv
diff --git a/levels/unused/init b/levels/en/unused/init
similarity index 100%
rename from levels/unused/init
rename to levels/en/unused/init
diff --git a/levels/unused/pull-push b/levels/en/unused/pull-push
similarity index 100%
rename from levels/unused/pull-push
rename to levels/en/unused/pull-push
diff --git a/levels/unused/remotes-add b/levels/en/unused/remotes-add
similarity index 100%
rename from levels/unused/remotes-add
rename to levels/en/unused/remotes-add
diff --git a/levels/unused/remotes-delete b/levels/en/unused/remotes-delete
similarity index 100%
rename from levels/unused/remotes-delete
rename to levels/en/unused/remotes-delete
diff --git a/levels/unused/restore b/levels/en/unused/restore
similarity index 100%
rename from levels/unused/restore
rename to levels/en/unused/restore
diff --git a/levels/unused/split b/levels/en/unused/split
similarity index 100%
rename from levels/unused/split
rename to levels/en/unused/split
diff --git a/levels/unused/steps b/levels/en/unused/steps
similarity index 100%
rename from levels/unused/steps
rename to levels/en/unused/steps
diff --git a/levels/unused/who-are-you b/levels/en/unused/who-are-you
similarity index 100%
rename from levels/unused/who-are-you
rename to levels/en/unused/who-are-you
diff --git a/levels/workflows/gitignore b/levels/en/workflows/gitignore
similarity index 100%
rename from levels/workflows/gitignore
rename to levels/en/workflows/gitignore
diff --git a/levels/workflows/pr b/levels/en/workflows/pr
similarity index 100%
rename from levels/workflows/pr
rename to levels/en/workflows/pr
diff --git a/levels/workflows/sequence b/levels/en/workflows/sequence
similarity index 100%
rename from levels/workflows/sequence
rename to levels/en/workflows/sequence
diff --git a/project.godot b/project.godot
index 8af698d..808e7e6 100644
--- a/project.godot
+++ b/project.godot
@@ -149,6 +149,10 @@ mute={
  ]
 }
 
+[locale]
+
+translations=PoolStringArray( "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" )
+
 [network]
 
 limits/debugger_stdout/max_chars_per_second=100000
diff --git a/resources/localizations.csv b/resources/localizations.csv
new file mode 100644
index 0000000..12f76b2
--- /dev/null
+++ b/resources/localizations.csv
@@ -0,0 +1,17 @@
+keys,en,it
+LEVELS,Livels,Livelli
+QUIT,Quit,Esci
+BACK,Back,Indietro
+RELOAD,Reload,Ricarica
+MUSIC,Toggle Music,Musica
+NEXT_LEVEL,Next Level,Prossimo Livello
+GIT_MESSAGE,"Hi! It seems that you don't have Git installed yet!
+
+On Linux, please install it from your package manager, usually the package is called "git"!
+
+On macOS 10.8 and below, you can download Git from git-scm.com.","Ciao! Sembra che tu non abbia ancora installato Git!
+
+Su Linux, installalo dal tuo gestore di pacchetti, di solito il pacchetto si chiama "git"!
+
+Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com."
+INSTALL,"Sure, I'll install it!","Sicuro, lo installerò"
\ No newline at end of file
diff --git a/resources/localizations.csv.import b/resources/localizations.csv.import
new file mode 100644
index 0000000..e2044a4
--- /dev/null
+++ b/resources/localizations.csv.import
@@ -0,0 +1,16 @@
+[remap]
+
+importer="csv_translation"
+type="Translation"
+
+[deps]
+
+files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ]
+
+source_file="res://resources/localizations.csv"
+dest_files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ]
+
+[params]
+
+compress=true
+delimiter=0
diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation
new file mode 100644
index 0000000000000000000000000000000000000000..b578dfbf17d0b2a7dc89e09f2005de5d44e12211
GIT binary patch
literal 785
zcmbW0&ubGw6vyADF-_WP6(JP~HZh@9FpUAhVm-9x&<4^UW*0nE4BPFHEZOdc%ti$9
z;D6AAihqE?lV=Y?r6?Z6gBL+OdF;(gTUx=1-<R%65l;?$_|E(8y!Yk}Y*nw8C|Co~
zkTck?ESR!kv`tq!rf++0c<#S7j?8nQEu`0JTcYN8mg&@duO=<w3OaTCn`>?eO2F9=
zQkr!kX%Im_L(nj`4cxBgn`@4slL*&3R#W(a!JVYvw%z(snzY(>%ZEv%fg#YZbfZux
z(g<5v|D2g0Bnr}i+w`y?eT_j+2YdFD*r&k7z`GRa31}Kj0q(^-+}=E!g+2kFK?JaG
z7;$Y2$~nxv?>pP?pgcSi=I;-d-t%|9^w=@~>6_hykBIq&nDG4O<15!*BmTS2w`j@W
zd-H5ecz$>NWf$R}d+@B|;0w5AT1`^=v%Q{Ho_xNv*xK)D88W<j-4W@<j<hXO3vrbp
zRnFET`L|o7uXe}PWcCB8`2x<*>X8AJDHhf8WmOrS_?f$TXKHv9bs92H`qxK4R5N;b
zkcb|R<X%j)=CvbZdMwqNohbx~uTnj2S*M;>yy~jy>lf}OV{<uuwS2xCn@c2PJKT!P
o%@jTjrSiXAMHTzLa3tOC*gjQ-<C*KUBp&$bihz%?sEVKAH-LDwKmY&$

literal 0
HcmV?d00001

diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation
new file mode 100644
index 0000000000000000000000000000000000000000..1346041d3b82af328dea38da2d5f94f2bcf80d7f
GIT binary patch
literal 804
zcmbVLF=!KE6#kQ(*R$1DDa29(Z6ur`));UQD_w$U#F&s|XfrgqUVq!u^e)_g!9hBt
zS)8Pc2Io>8#HEwyAjOUyJ4h#S(LvCmNEQ6!_s%=$(5VkTzW2WOzxVDvxKg>4Wr4-O
zAx^_D-ZsQy#WifvFg(k#!*@q!4V5E+%Z1Z&O<rp_rqQT*PEDBH=4|j_&Nh}fI}T-u
z3t=p9!TJ#R6`T#gUBuVbJY%lG*-3<RE%PDw0)Zw8&$aA@|7F5-t)>T&u?Wx)_?@n&
z(;0SxB-o)lD@f2$js<LajHGdZruJYUpH=Xwz$ZNpKLMNzv<m@Kt8w5mK%)tdH&=&~
z;4bh9hytWnDq7?Nm}&^KpTBKxfoVZHPFVk|FS|uC?QrIR{_OqU{x)JdE#<=ZtL;ly
z-y)`)Qm;_oRkD@QK&M=&@6EqjN9fO_Ikf8-unXkud5e3l!(_ShTusI6L;2>}Ui9Mz
z%eRDO8cb$2MU_e9qZ8GY+;B|){#2<}wYAaK%DsH^d|lp3%VZ`a%Q};Hhx9)wbeOJ>
zOb_by-}#FJ?d2aYqOm)v_LSP4`RNBUJGuMH8#Wo%?I(JXLYeg<nJc!u_L_a&8Pk@N
zPaYJt)D2zLrV@qDBZe{SYm@2i{=~#zTVm9^jjm)jg=sNa>J&N(w4!+VrB0c+DzRG$
G|HnUm*SY)v

literal 0
HcmV?d00001

diff --git a/scenes/card.tscn b/scenes/card.tscn
index 55c230f..9de01e4 100644
--- a/scenes/card.tscn
+++ b/scenes/card.tscn
@@ -170,5 +170,6 @@ stretch_mode = 6
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="mouse_entered" from="Area2D" to="." method="_mouse_entered"]
 [connection signal="mouse_exited" from="Area2D" to="." method="_mouse_exited"]
diff --git a/scenes/cards.gd b/scenes/cards.gd
index d68dc02..e6373d3 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -3,7 +3,7 @@ extends Control
 var card_store = {}
 var cards
 var card_radius = 1500
-var lang = "it" # TODO: Make a global variable to setting dir and cards localizations
+#var lang = "it" # TODO: Make a global variable to setting dir and cards localizations
 
 func _ready():
 	load_card_store()
@@ -17,7 +17,7 @@ func _process(_delta):
 
 func load_card_store():
 	card_store = {}
-	var cards_json = JSON.parse(helpers.read_file("res://resources/cards_i18n.json")).result
+	var cards_json = JSON.parse(helpers.read_file("res://resources/cards.json")).result
 	for card in cards_json:
 		card_store[card["id"]] = card
 	
@@ -40,7 +40,7 @@ func draw_card(card):
 	
 	new_card.id = card["id"]
 	new_card.command = card["command"]
-	new_card.description = card["description"][lang]
+	new_card.description = card["description"][helpers.lang]
 	new_card.energy = 0 #card.energy
 	new_card.position = Vector2(rect_size.x, rect_size.y*2)
 	add_child(new_card)
diff --git a/scenes/cards.tscn b/scenes/cards.tscn
index 1fc2fcc..bc678d1 100644
--- a/scenes/cards.tscn
+++ b/scenes/cards.tscn
@@ -49,4 +49,5 @@ text = "3"
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="pressed" from="Button" to="." method="redraw_all_cards"]
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index 9f2abc2..b0c9ad4 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -13,7 +13,7 @@ func load(path):
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open("res://levels/%s" % slug)
+	dir.open("res://levels/" + helpers.lang + "/%s" % slug)
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +28,7 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/%s/sequence" % slug, "").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +42,7 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load("res://levels/%s/%s" % [slug, l])
+		level.load("res://levels/" + helpers.lang + "/%s/%s" % [slug, l])
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/drop_area.tscn b/scenes/drop_area.tscn
index ed564e6..8a85979 100644
--- a/scenes/drop_area.tscn
+++ b/scenes/drop_area.tscn
@@ -45,5 +45,6 @@ material = SubResource( 3 )
 position = Vector2( -0.102825, -0.377726 )
 scale = Vector2( 2.25501, 2.25501 )
 texture = ExtResource( 2 )
+
 [connection signal="area_entered" from="Area2D" to="." method="_mouse_entered"]
 [connection signal="area_exited" from="Area2D" to="." method="_mouse_exited"]
diff --git a/scenes/file_browser.tscn b/scenes/file_browser.tscn
index cbc6bec..7bfbe1d 100644
--- a/scenes/file_browser.tscn
+++ b/scenes/file_browser.tscn
@@ -131,5 +131,6 @@ __meta__ = {
 [node name="PopupMenu" type="PopupMenu" parent="."]
 margin_right = 20.0
 margin_bottom = 20.0
+
 [connection signal="pressed" from="Panel/TextEdit/SaveButton" to="." method="save"]
 [connection signal="pressed" from="Panel/TextEdit/CloseButton" to="." method="close"]
diff --git a/scenes/file_browser_item.tscn b/scenes/file_browser_item.tscn
index d623e75..4ceb076 100644
--- a/scenes/file_browser_item.tscn
+++ b/scenes/file_browser_item.tscn
@@ -122,4 +122,5 @@ autowrap = true
 [node name="PopupMenu" type="PopupMenu" parent="."]
 margin_right = 20.0
 margin_bottom = 20.0
+
 [connection signal="id_pressed" from="PopupMenu" to="." method="_popup_menu_pressed"]
diff --git a/scenes/helpers.gd b/scenes/helpers.gd
index 57dd61f..6d983d7 100644
--- a/scenes/helpers.gd
+++ b/scenes/helpers.gd
@@ -1,5 +1,7 @@
 extends Node
 
+var lang = "it"  # Variable for localization
+
 var debug_file_io = false
 
 # Crash the game and display the error message.
diff --git a/scenes/input_dialog.tscn b/scenes/input_dialog.tscn
index 17876b9..4642eed 100644
--- a/scenes/input_dialog.tscn
+++ b/scenes/input_dialog.tscn
@@ -21,4 +21,5 @@ anchor_bottom = 1.0
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="text_entered" from="LineEdit" to="." method="_text_entered"]
diff --git a/scenes/level_select.gd b/scenes/level_select.gd
index acd0866..42bff1b 100644
--- a/scenes/level_select.gd
+++ b/scenes/level_select.gd
@@ -15,6 +15,7 @@ func back():
 
 
 func reload():
+	
 	for child in level_list.get_children():
 		child.queue_free()
 	
diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn
index 2f8e4f3..d60e69e 100644
--- a/scenes/level_select.tscn
+++ b/scenes/level_select.tscn
@@ -42,35 +42,11 @@ margin_right = 1320.0
 margin_bottom = 1080.0
 size_flags_horizontal = 3
 
-[node name="Button" type="Button" parent="."]
-margin_left = 61.0902
-margin_top = 59.0538
-margin_right = 126.09
-margin_bottom = 98.0538
-text = "Back"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="Button2" type="Button" parent="."]
-margin_left = 138.588
-margin_top = 59.3009
-margin_right = 226.588
-margin_bottom = 98.3009
-focus_mode = 0
-enabled_focus_mode = 0
-text = "Reload"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="Button3" parent="." instance=ExtResource( 4 )]
-
 [node name="HelpLabel" type="Label" parent="."]
 visible = false
 margin_left = 63.0
 margin_top = 159.0
-margin_right = 378.0
+margin_right = 379.0
 margin_bottom = 220.0
 text = "Help us improving Oh My Git! by
 answering some questions:"
@@ -90,6 +66,41 @@ text = "To the survey /o/"
 __meta__ = {
 "_edit_use_anchors_": false
 }
-[connection signal="pressed" from="Button" to="." method="back"]
-[connection signal="pressed" from="Button2" to="." method="reload"]
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+anchor_right = 1.0
+margin_left = 89.0
+margin_top = 24.0
+margin_bottom = 63.0
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Back" type="Button" parent="HBoxContainer"]
+margin_right = 75.0
+margin_bottom = 39.0
+text = "BACK"
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Reload" type="Button" parent="HBoxContainer"]
+margin_left = 80.0
+margin_right = 188.0
+margin_bottom = 39.0
+focus_mode = 0
+enabled_focus_mode = 0
+text = "RELOAD"
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="Toggle_Music" parent="HBoxContainer" instance=ExtResource( 4 )]
+margin_left = 193.0
+margin_top = 0.0
+margin_right = 282.0
+margin_bottom = 39.0
+
 [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"]
+[connection signal="pressed" from="HBoxContainer/Back" to="." method="back"]
+[connection signal="pressed" from="HBoxContainer/Reload" to="." method="reload"]
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 593b728..07d645c 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -9,7 +9,7 @@ func reload():
 	chapters = []
 	
 	var dir = Directory.new()
-	dir.open("res://levels")
+	dir.open("res://levels/" + helpers.lang) # TODO: Add language directory to get a correct language
 	dir.list_dir_begin()
 
 	var chapter_names = []
@@ -26,7 +26,7 @@ func reload():
 	
 	var final_chapter_sequence = []
 	
-	var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n"))
+	var chapter_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/sequence", "").split("\n"))
 	
 	for chapter in chapter_sequence:
 		if chapter == "":
@@ -40,5 +40,5 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load("res://levels/%s" % c)
+		chapter.load("res://levels/" + helpers.lang + "/%s" % c)
 		chapters.push_back(chapter)
diff --git a/scenes/main.tscn b/scenes/main.tscn
index e19dec2..303f9a7 100644
--- a/scenes/main.tscn
+++ b/scenes/main.tscn
@@ -206,31 +206,31 @@ __meta__ = {
 "_edit_use_anchors_": false
 }
 
-[node name="BackButton" type="Button" parent="Menu"]
-margin_right = 65.0
+[node name="Back" type="Button" parent="Menu"]
+margin_right = 75.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
-text = "Back"
+text = "BACK"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
-[node name="ReloadButton2" type="Button" parent="Menu"]
-margin_left = 73.0
-margin_right = 161.0
+[node name="Reload" type="Button" parent="Menu"]
+margin_left = 83.0
+margin_right = 191.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
-text = "Reload"
+text = "RELOAD"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
 [node name="CardsButton" type="Button" parent="Menu"]
 visible = false
-margin_left = 458.0
-margin_right = 539.0
+margin_left = 169.0
+margin_right = 250.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
@@ -251,35 +251,36 @@ __meta__ = {
 "_edit_use_anchors_": false
 }
 
-[node name="Button3" parent="Menu" instance=ExtResource( 11 )]
-margin_left = 169.0
+[node name="Toogle_Music" parent="Menu" instance=ExtResource( 11 )]
+margin_left = 199.0
 margin_top = 0.0
-margin_right = 315.0
+margin_right = 288.0
 margin_bottom = 39.0
 
 [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )]
 anchor_right = 0.0
 anchor_bottom = 0.0
-margin_left = 323.0
-margin_right = 368.0
+margin_left = 296.0
+margin_right = 341.0
 margin_bottom = 39.0
 
 [node name="NextLevelButton" type="Button" parent="Menu"]
-margin_left = 376.0
-margin_right = 493.0
+margin_left = 349.0
+margin_right = 501.0
 margin_bottom = 39.0
 focus_mode = 0
 custom_styles/hover = SubResource( 2 )
 custom_styles/normal = ExtResource( 4 )
 enabled_focus_mode = 0
-text = "Next level"
+text = "NEXT_LEVEL"
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="saved" from="Rows/Columns/RightSide/FileBrowser" to="." method="update_repos"]
 [connection signal="command_done" from="Rows/Controls/Terminal" to="." method="update_repos"]
-[connection signal="pressed" from="Menu/BackButton" to="." method="back"]
-[connection signal="pressed" from="Menu/ReloadButton2" to="." method="reload_level"]
+[connection signal="pressed" from="Menu/Back" to="." method="back"]
+[connection signal="pressed" from="Menu/Reload" to="." method="reload_level"]
 [connection signal="pressed" from="Menu/CardsButton" to="." method="toggle_cards"]
 [connection signal="pressed" from="Menu/Tip!" to="." method="new_tip"]
 [connection signal="pressed" from="Menu/NextLevelButton" to="." method="load_next_level"]
diff --git a/scenes/music_button.gd b/scenes/music_button.gd
index 6cc4e03..330356a 100644
--- a/scenes/music_button.gd
+++ b/scenes/music_button.gd
@@ -1,6 +1,5 @@
 extends Button
 
-
 func _ready():
 	pass
 
diff --git a/scenes/music_button.tscn b/scenes/music_button.tscn
index 70f47b0..a48cc46 100644
--- a/scenes/music_button.tscn
+++ b/scenes/music_button.tscn
@@ -2,16 +2,17 @@
 
 [ext_resource path="res://scenes/music_button.gd" type="Script" id=1]
 
-[node name="Button3" type="Button"]
+[node name="Toggle_music" type="Button"]
 margin_left = 241.005
 margin_top = 58.856
 margin_right = 387.005
 margin_bottom = 97.856
 focus_mode = 0
 enabled_focus_mode = 0
-text = "Toggle music"
+text = "MUSIC"
 script = ExtResource( 1 )
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="pressed" from="." to="." method="toggle_music"]
diff --git a/scenes/no_git.tscn b/scenes/no_git.tscn
index b4cad7c..60bc98c 100644
--- a/scenes/no_git.tscn
+++ b/scenes/no_git.tscn
@@ -58,11 +58,11 @@ __meta__ = {
 "_edit_use_anchors_": false
 }
 
-[node name="Button" type="Button" parent="VBoxContainer"]
+[node name="Levels" type="Button" parent="VBoxContainer"]
 visible = false
 margin_right = 351.0
 margin_bottom = 39.0
-text = "Levels"
+text = "LEVELS"
 
 [node name="Button3" type="Button" parent="VBoxContainer"]
 visible = false
@@ -70,10 +70,10 @@ margin_right = 351.0
 margin_bottom = 39.0
 text = "Sandbox"
 
-[node name="Button2" type="Button" parent="VBoxContainer"]
+[node name="Install" type="Button" parent="VBoxContainer"]
 margin_right = 351.0
 margin_bottom = 39.0
-text = "Sure, I'll install it!"
+text = "INSTALL"
 
 [node name="Sprite" type="Sprite" parent="."]
 
@@ -94,12 +94,12 @@ margin_left = 20.0
 margin_top = 21.0
 margin_right = 546.0
 margin_bottom = 252.0
-text = "Hi! It seems that you don't have Git installed yet!
-
-On Linux, please install it from your package manager, usually the package is called \"git\"!
-
-On macOS 10.8 and below, you can download Git from git-scm.com."
+text = "GIT_MESSAGE"
 autowrap = true
-[connection signal="pressed" from="VBoxContainer/Button" to="." method="levels"]
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[connection signal="pressed" from="VBoxContainer/Levels" to="." method="levels"]
 [connection signal="pressed" from="VBoxContainer/Button3" to="." method="sandbox"]
-[connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"]
+[connection signal="pressed" from="VBoxContainer/Install" to="." method="quit"]
diff --git a/scenes/node.tscn b/scenes/node.tscn
index 643a44c..f951214 100644
--- a/scenes/node.tscn
+++ b/scenes/node.tscn
@@ -81,6 +81,7 @@ custom_colors/font_color = Color( 1, 1, 1, 1 )
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="mouse_entered" from="Rect" to="." method="_on_hover"]
 [connection signal="mouse_exited" from="Rect" to="." method="_on_unhover"]
 [connection signal="mouse_entered" from="Area2D" to="." method="_on_hover"]
diff --git a/scenes/notification.tscn b/scenes/notification.tscn
index 5d944e0..3b552c5 100644
--- a/scenes/notification.tscn
+++ b/scenes/notification.tscn
@@ -60,4 +60,5 @@ text = "Got it!"
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="pressed" from="Panel/CenterContainer/OK" to="." method="confirm"]
diff --git a/scenes/title.tscn b/scenes/title.tscn
index f919e19..2aa0fe7 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -52,7 +52,7 @@ __meta__ = {
 [node name="Button" type="Button" parent="VBoxContainer"]
 margin_right = 351.0
 margin_bottom = 39.0
-text = "Levels"
+text = "LEVELS"
 
 [node name="Button3" type="Button" parent="VBoxContainer"]
 margin_top = 44.0
@@ -64,7 +64,7 @@ text = "Sandbox"
 margin_top = 88.0
 margin_right = 351.0
 margin_bottom = 127.0
-text = "Quit"
+text = "QUIT"
 
 [node name="Sprite" type="Sprite" parent="."]
 

From 50ee071f0eb99cc408454f8bcfa9a50c7efaf01d Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 8 Sep 2021 17:00:51 +0200
Subject: [PATCH 04/49] finished the mechanism for setting the language

---
 images/settings_32x32.png                     | Bin 0 -> 1022 bytes
 images/settings_32x32.png.import              |  34 +++++++++++++++
 levels/{en => en_EN}/bisect/bisect            |   0
 levels/{en => en_EN}/bisect/sequence          |   0
 levels/{en => en_EN}/branches/branch-create   |   0
 levels/{en => en_EN}/branches/branch-remove   |   0
 levels/{en => en_EN}/branches/checkout-commit |   0
 levels/{en => en_EN}/branches/fork            |   0
 levels/{en => en_EN}/branches/grow            |   0
 levels/{en => en_EN}/branches/reorder         |   0
 levels/{en => en_EN}/branches/sequence        |   0
 levels/{en => en_EN}/changing-the-past/rebase |   0
 .../{en => en_EN}/changing-the-past/reorder   |   0
 .../{en => en_EN}/changing-the-past/sequence  |   0
 levels/{en => en_EN}/files/files-add          |   0
 levels/{en => en_EN}/files/files-delete       |   0
 levels/{en => en_EN}/files/sequence           |   0
 levels/{en => en_EN}/index/add                |   0
 levels/{en => en_EN}/index/change             |   0
 levels/{en => en_EN}/index/checkout           |   0
 levels/{en => en_EN}/index/compare            |   0
 levels/{en => en_EN}/index/new                |   0
 levels/{en => en_EN}/index/reset              |   0
 levels/{en => en_EN}/index/rm                 |   0
 levels/{en => en_EN}/index/sequence           |   0
 levels/{en => en_EN}/index/steps              |   0
 levels/{en => en_EN}/intro/cli                |   0
 levels/{en => en_EN}/intro/commit             |   0
 levels/{en => en_EN}/intro/copies             |   0
 levels/{en => en_EN}/intro/init               |   0
 levels/{en => en_EN}/intro/remote             |   0
 levels/{en => en_EN}/intro/risky              |   0
 levels/{en => en_EN}/intro/sequence           |   0
 levels/{en => en_EN}/intro/who-are-you        |   0
 levels/{en => en_EN}/low-level/basics         |   0
 levels/{en => en_EN}/low-level/blob-create    |   0
 levels/{en => en_EN}/low-level/blob-remove    |   0
 levels/{en => en_EN}/low-level/commit-create  |   0
 levels/{en => en_EN}/low-level/commit-parents |   0
 levels/{en => en_EN}/low-level/commit-rhombus |   0
 levels/{en => en_EN}/low-level/index-add      |   0
 levels/{en => en_EN}/low-level/index-remove   |   0
 levels/{en => en_EN}/low-level/index-update   |   0
 .../{en => en_EN}/low-level/puzzle-apocalypse |   0
 .../low-level/puzzle-precious-blob            |   0
 .../low-level/puzzle-trees-all-the-way-down   |   0
 levels/{en => en_EN}/low-level/ref-create     |   0
 levels/{en => en_EN}/low-level/ref-move       |   0
 levels/{en => en_EN}/low-level/ref-remove     |   0
 levels/{en => en_EN}/low-level/sequence       |   0
 levels/{en => en_EN}/low-level/symref-create  |   0
 .../{en => en_EN}/low-level/symref-no-deref   |   0
 levels/{en => en_EN}/low-level/tree-create    |   0
 levels/{en => en_EN}/low-level/tree-nested    |   0
 levels/{en => en_EN}/low-level/tree-read      |   0
 levels/{en => en_EN}/low-level/welcome        |   0
 levels/{en => en_EN}/merge/conflict           |   0
 levels/{en => en_EN}/merge/merge              |   0
 levels/{en => en_EN}/merge/merge-abort        |   0
 levels/{en => en_EN}/merge/sequence           |   0
 levels/{en => en_EN}/remotes/friend           |   0
 levels/{en => en_EN}/remotes/problems         |   0
 levels/{en => en_EN}/remotes/sequence         |   0
 levels/{en => en_EN}/sandbox/empty            |   0
 levels/{en => en_EN}/sandbox/remote           |   0
 levels/{en => en_EN}/sandbox/sequence         |   0
 levels/{en => en_EN}/sandbox/three-commits    |   0
 levels/{en => en_EN}/sequence                 |   0
 levels/{en => en_EN}/shit-happens/bad-commit  |   0
 .../shit-happens/pushed-something-broken      |   0
 levels/{en => en_EN}/shit-happens/reflog      |   0
 .../{en => en_EN}/shit-happens/restore-a-file |   0
 .../shit-happens/restore-a-file-from-the-past |   0
 levels/{en => en_EN}/shit-happens/sequence    |   0
 levels/{en => en_EN}/stash/sequence           |   0
 levels/{en => en_EN}/stash/stash              |   0
 levels/{en => en_EN}/stash/stash-branch       |   0
 levels/{en => en_EN}/stash/stash-clear        |   0
 levels/{en => en_EN}/stash/stash-merge        |   0
 levels/{en => en_EN}/stash/stash-pop          |   0
 levels/{en => en_EN}/tags/add-tag             |   0
 levels/{en => en_EN}/tags/add-tag-later       |   0
 levels/{en => en_EN}/tags/remote-tag          |   0
 levels/{en => en_EN}/tags/remove-tag          |   0
 levels/{en => en_EN}/tags/sequence            |   0
 levels/{en => en_EN}/unused/checkout          |   0
 levels/{en => en_EN}/unused/clone             |   0
 levels/{en => en_EN}/unused/commit            |   0
 levels/{en => en_EN}/unused/commit-a          |   0
 levels/{en => en_EN}/unused/fetch             |   0
 levels/{en => en_EN}/unused/files-move        |   0
 levels/{en => en_EN}/unused/index-mv          |   0
 levels/{en => en_EN}/unused/init              |   0
 levels/{en => en_EN}/unused/pull-push         |   0
 levels/{en => en_EN}/unused/remotes-add       |   0
 levels/{en => en_EN}/unused/remotes-delete    |   0
 levels/{en => en_EN}/unused/restore           |   0
 levels/{en => en_EN}/unused/split             |   0
 levels/{en => en_EN}/unused/steps             |   0
 levels/{en => en_EN}/unused/who-are-you       |   0
 levels/{en => en_EN}/workflows/gitignore      |   0
 levels/{en => en_EN}/workflows/pr             |   0
 levels/{en => en_EN}/workflows/sequence       |   0
 levels/{it => it_IT}/bisect/bisect            |   0
 levels/{it => it_IT}/bisect/sequence          |   0
 levels/{it => it_IT}/branches/branch-create   |   0
 levels/{it => it_IT}/branches/branch-remove   |   0
 levels/{it => it_IT}/branches/checkout-commit |   0
 levels/{it => it_IT}/branches/fork            |   0
 levels/{it => it_IT}/branches/grow            |   0
 levels/{it => it_IT}/branches/reorder         |   0
 levels/{it => it_IT}/branches/sequence        |   0
 levels/{it => it_IT}/changing-the-past/rebase |   0
 .../{it => it_IT}/changing-the-past/reorder   |   0
 .../{it => it_IT}/changing-the-past/sequence  |   0
 levels/{it => it_IT}/files/files-add          |   0
 levels/{it => it_IT}/files/files-delete       |   0
 levels/{it => it_IT}/files/sequence           |   0
 levels/{it => it_IT}/index/add                |   0
 levels/{it => it_IT}/index/change             |   0
 levels/{it => it_IT}/index/checkout           |   0
 levels/{it => it_IT}/index/compare            |   0
 levels/{it => it_IT}/index/new                |   0
 levels/{it => it_IT}/index/reset              |   0
 levels/{it => it_IT}/index/rm                 |   0
 levels/{it => it_IT}/index/sequence           |   0
 levels/{it => it_IT}/index/steps              |   0
 levels/{it => it_IT}/intro/cli                |   0
 levels/{it => it_IT}/intro/commit             |   0
 levels/{it => it_IT}/intro/copies             |   0
 levels/{it => it_IT}/intro/init               |   0
 levels/{it => it_IT}/intro/remote             |   0
 levels/{it => it_IT}/intro/risky              |   0
 levels/{it => it_IT}/intro/sequence           |   0
 levels/{it => it_IT}/intro/who-are-you        |   0
 levels/{it => it_IT}/low-level/basics         |   0
 levels/{it => it_IT}/low-level/blob-create    |   0
 levels/{it => it_IT}/low-level/blob-remove    |   0
 levels/{it => it_IT}/low-level/commit-create  |   0
 levels/{it => it_IT}/low-level/commit-parents |   0
 levels/{it => it_IT}/low-level/commit-rhombus |   0
 levels/{it => it_IT}/low-level/index-add      |   0
 levels/{it => it_IT}/low-level/index-remove   |   0
 levels/{it => it_IT}/low-level/index-update   |   0
 .../{it => it_IT}/low-level/puzzle-apocalypse |   0
 .../low-level/puzzle-precious-blob            |   0
 .../low-level/puzzle-trees-all-the-way-down   |   0
 levels/{it => it_IT}/low-level/ref-create     |   0
 levels/{it => it_IT}/low-level/ref-move       |   0
 levels/{it => it_IT}/low-level/ref-remove     |   0
 levels/{it => it_IT}/low-level/sequence       |   0
 levels/{it => it_IT}/low-level/symref-create  |   0
 .../{it => it_IT}/low-level/symref-no-deref   |   0
 levels/{it => it_IT}/low-level/tree-create    |   0
 levels/{it => it_IT}/low-level/tree-nested    |   0
 levels/{it => it_IT}/low-level/tree-read      |   0
 levels/{it => it_IT}/low-level/welcome        |   0
 levels/{it => it_IT}/merge/conflict           |   0
 levels/{it => it_IT}/merge/merge              |   0
 levels/{it => it_IT}/merge/merge-abort        |   0
 levels/{it => it_IT}/merge/sequence           |   0
 levels/{it => it_IT}/remotes/friend           |   0
 levels/{it => it_IT}/remotes/problems         |   0
 levels/{it => it_IT}/remotes/sequence         |   0
 levels/{it => it_IT}/sandbox/empty            |   0
 levels/{it => it_IT}/sandbox/remote           |   0
 levels/{it => it_IT}/sandbox/sequence         |   0
 levels/{it => it_IT}/sandbox/three-commits    |   0
 levels/{it => it_IT}/sequence                 |   0
 levels/{it => it_IT}/shit-happens/bad-commit  |   0
 .../shit-happens/pushed-something-broken      |   0
 levels/{it => it_IT}/shit-happens/reflog      |   0
 .../{it => it_IT}/shit-happens/restore-a-file |   0
 .../shit-happens/restore-a-file-from-the-past |   0
 levels/{it => it_IT}/shit-happens/sequence    |   0
 levels/{it => it_IT}/stash/sequence           |   0
 levels/{it => it_IT}/stash/stash              |   0
 levels/{it => it_IT}/stash/stash-branch       |   0
 levels/{it => it_IT}/stash/stash-clear        |   0
 levels/{it => it_IT}/stash/stash-merge        |   0
 levels/{it => it_IT}/stash/stash-pop          |   0
 levels/{it => it_IT}/tags/add-tag             |   0
 levels/{it => it_IT}/tags/add-tag-later       |   0
 levels/{it => it_IT}/tags/remote-tag          |   0
 levels/{it => it_IT}/tags/remove-tag          |   0
 levels/{it => it_IT}/tags/sequence            |   0
 levels/{it => it_IT}/unused/checkout          |   0
 levels/{it => it_IT}/unused/clone             |   0
 levels/{it => it_IT}/unused/commit            |   0
 levels/{it => it_IT}/unused/commit-a          |   0
 levels/{it => it_IT}/unused/fetch             |   0
 levels/{it => it_IT}/unused/files-move        |   0
 levels/{it => it_IT}/unused/index-mv          |   0
 levels/{it => it_IT}/unused/init              |   0
 levels/{it => it_IT}/unused/pull-push         |   0
 levels/{it => it_IT}/unused/remotes-add       |   0
 levels/{it => it_IT}/unused/remotes-delete    |   0
 levels/{it => it_IT}/unused/restore           |   0
 levels/{it => it_IT}/unused/split             |   0
 levels/{it => it_IT}/unused/steps             |   0
 levels/{it => it_IT}/unused/who-are-you       |   0
 levels/{it => it_IT}/workflows/gitignore      |   0
 levels/{it => it_IT}/workflows/pr             |   0
 levels/{it => it_IT}/workflows/sequence       |   0
 resources/localizations.csv                   |   5 ++-
 resources/localizations.en.translation        | Bin 785 -> 865 bytes
 resources/localizations.it.translation        | Bin 804 -> 884 bytes
 scenes/cards.gd                               |   2 +-
 scenes/chapter.gd                             |   6 +--
 scenes/game.gd                                |   3 ++
 scenes/helpers.gd                             |   2 -
 scenes/levels.gd                              |   6 +--
 scenes/title.gd                               |  39 ++++++++++++++++++
 scenes/title.tscn                             |   7 ++++
 214 files changed, 94 insertions(+), 10 deletions(-)
 create mode 100644 images/settings_32x32.png
 create mode 100644 images/settings_32x32.png.import
 rename levels/{en => en_EN}/bisect/bisect (100%)
 rename levels/{en => en_EN}/bisect/sequence (100%)
 rename levels/{en => en_EN}/branches/branch-create (100%)
 rename levels/{en => en_EN}/branches/branch-remove (100%)
 rename levels/{en => en_EN}/branches/checkout-commit (100%)
 rename levels/{en => en_EN}/branches/fork (100%)
 rename levels/{en => en_EN}/branches/grow (100%)
 rename levels/{en => en_EN}/branches/reorder (100%)
 rename levels/{en => en_EN}/branches/sequence (100%)
 rename levels/{en => en_EN}/changing-the-past/rebase (100%)
 rename levels/{en => en_EN}/changing-the-past/reorder (100%)
 rename levels/{en => en_EN}/changing-the-past/sequence (100%)
 rename levels/{en => en_EN}/files/files-add (100%)
 rename levels/{en => en_EN}/files/files-delete (100%)
 rename levels/{en => en_EN}/files/sequence (100%)
 rename levels/{en => en_EN}/index/add (100%)
 rename levels/{en => en_EN}/index/change (100%)
 rename levels/{en => en_EN}/index/checkout (100%)
 rename levels/{en => en_EN}/index/compare (100%)
 rename levels/{en => en_EN}/index/new (100%)
 rename levels/{en => en_EN}/index/reset (100%)
 rename levels/{en => en_EN}/index/rm (100%)
 rename levels/{en => en_EN}/index/sequence (100%)
 rename levels/{en => en_EN}/index/steps (100%)
 rename levels/{en => en_EN}/intro/cli (100%)
 rename levels/{en => en_EN}/intro/commit (100%)
 rename levels/{en => en_EN}/intro/copies (100%)
 rename levels/{en => en_EN}/intro/init (100%)
 rename levels/{en => en_EN}/intro/remote (100%)
 rename levels/{en => en_EN}/intro/risky (100%)
 rename levels/{en => en_EN}/intro/sequence (100%)
 rename levels/{en => en_EN}/intro/who-are-you (100%)
 rename levels/{en => en_EN}/low-level/basics (100%)
 rename levels/{en => en_EN}/low-level/blob-create (100%)
 rename levels/{en => en_EN}/low-level/blob-remove (100%)
 rename levels/{en => en_EN}/low-level/commit-create (100%)
 rename levels/{en => en_EN}/low-level/commit-parents (100%)
 rename levels/{en => en_EN}/low-level/commit-rhombus (100%)
 rename levels/{en => en_EN}/low-level/index-add (100%)
 rename levels/{en => en_EN}/low-level/index-remove (100%)
 rename levels/{en => en_EN}/low-level/index-update (100%)
 rename levels/{en => en_EN}/low-level/puzzle-apocalypse (100%)
 rename levels/{en => en_EN}/low-level/puzzle-precious-blob (100%)
 rename levels/{en => en_EN}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{en => en_EN}/low-level/ref-create (100%)
 rename levels/{en => en_EN}/low-level/ref-move (100%)
 rename levels/{en => en_EN}/low-level/ref-remove (100%)
 rename levels/{en => en_EN}/low-level/sequence (100%)
 rename levels/{en => en_EN}/low-level/symref-create (100%)
 rename levels/{en => en_EN}/low-level/symref-no-deref (100%)
 rename levels/{en => en_EN}/low-level/tree-create (100%)
 rename levels/{en => en_EN}/low-level/tree-nested (100%)
 rename levels/{en => en_EN}/low-level/tree-read (100%)
 rename levels/{en => en_EN}/low-level/welcome (100%)
 rename levels/{en => en_EN}/merge/conflict (100%)
 rename levels/{en => en_EN}/merge/merge (100%)
 rename levels/{en => en_EN}/merge/merge-abort (100%)
 rename levels/{en => en_EN}/merge/sequence (100%)
 rename levels/{en => en_EN}/remotes/friend (100%)
 rename levels/{en => en_EN}/remotes/problems (100%)
 rename levels/{en => en_EN}/remotes/sequence (100%)
 rename levels/{en => en_EN}/sandbox/empty (100%)
 rename levels/{en => en_EN}/sandbox/remote (100%)
 rename levels/{en => en_EN}/sandbox/sequence (100%)
 rename levels/{en => en_EN}/sandbox/three-commits (100%)
 rename levels/{en => en_EN}/sequence (100%)
 rename levels/{en => en_EN}/shit-happens/bad-commit (100%)
 rename levels/{en => en_EN}/shit-happens/pushed-something-broken (100%)
 rename levels/{en => en_EN}/shit-happens/reflog (100%)
 rename levels/{en => en_EN}/shit-happens/restore-a-file (100%)
 rename levels/{en => en_EN}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{en => en_EN}/shit-happens/sequence (100%)
 rename levels/{en => en_EN}/stash/sequence (100%)
 rename levels/{en => en_EN}/stash/stash (100%)
 rename levels/{en => en_EN}/stash/stash-branch (100%)
 rename levels/{en => en_EN}/stash/stash-clear (100%)
 rename levels/{en => en_EN}/stash/stash-merge (100%)
 rename levels/{en => en_EN}/stash/stash-pop (100%)
 rename levels/{en => en_EN}/tags/add-tag (100%)
 rename levels/{en => en_EN}/tags/add-tag-later (100%)
 rename levels/{en => en_EN}/tags/remote-tag (100%)
 rename levels/{en => en_EN}/tags/remove-tag (100%)
 rename levels/{en => en_EN}/tags/sequence (100%)
 rename levels/{en => en_EN}/unused/checkout (100%)
 rename levels/{en => en_EN}/unused/clone (100%)
 rename levels/{en => en_EN}/unused/commit (100%)
 rename levels/{en => en_EN}/unused/commit-a (100%)
 rename levels/{en => en_EN}/unused/fetch (100%)
 rename levels/{en => en_EN}/unused/files-move (100%)
 rename levels/{en => en_EN}/unused/index-mv (100%)
 rename levels/{en => en_EN}/unused/init (100%)
 rename levels/{en => en_EN}/unused/pull-push (100%)
 rename levels/{en => en_EN}/unused/remotes-add (100%)
 rename levels/{en => en_EN}/unused/remotes-delete (100%)
 rename levels/{en => en_EN}/unused/restore (100%)
 rename levels/{en => en_EN}/unused/split (100%)
 rename levels/{en => en_EN}/unused/steps (100%)
 rename levels/{en => en_EN}/unused/who-are-you (100%)
 rename levels/{en => en_EN}/workflows/gitignore (100%)
 rename levels/{en => en_EN}/workflows/pr (100%)
 rename levels/{en => en_EN}/workflows/sequence (100%)
 rename levels/{it => it_IT}/bisect/bisect (100%)
 rename levels/{it => it_IT}/bisect/sequence (100%)
 rename levels/{it => it_IT}/branches/branch-create (100%)
 rename levels/{it => it_IT}/branches/branch-remove (100%)
 rename levels/{it => it_IT}/branches/checkout-commit (100%)
 rename levels/{it => it_IT}/branches/fork (100%)
 rename levels/{it => it_IT}/branches/grow (100%)
 rename levels/{it => it_IT}/branches/reorder (100%)
 rename levels/{it => it_IT}/branches/sequence (100%)
 rename levels/{it => it_IT}/changing-the-past/rebase (100%)
 rename levels/{it => it_IT}/changing-the-past/reorder (100%)
 rename levels/{it => it_IT}/changing-the-past/sequence (100%)
 rename levels/{it => it_IT}/files/files-add (100%)
 rename levels/{it => it_IT}/files/files-delete (100%)
 rename levels/{it => it_IT}/files/sequence (100%)
 rename levels/{it => it_IT}/index/add (100%)
 rename levels/{it => it_IT}/index/change (100%)
 rename levels/{it => it_IT}/index/checkout (100%)
 rename levels/{it => it_IT}/index/compare (100%)
 rename levels/{it => it_IT}/index/new (100%)
 rename levels/{it => it_IT}/index/reset (100%)
 rename levels/{it => it_IT}/index/rm (100%)
 rename levels/{it => it_IT}/index/sequence (100%)
 rename levels/{it => it_IT}/index/steps (100%)
 rename levels/{it => it_IT}/intro/cli (100%)
 rename levels/{it => it_IT}/intro/commit (100%)
 rename levels/{it => it_IT}/intro/copies (100%)
 rename levels/{it => it_IT}/intro/init (100%)
 rename levels/{it => it_IT}/intro/remote (100%)
 rename levels/{it => it_IT}/intro/risky (100%)
 rename levels/{it => it_IT}/intro/sequence (100%)
 rename levels/{it => it_IT}/intro/who-are-you (100%)
 rename levels/{it => it_IT}/low-level/basics (100%)
 rename levels/{it => it_IT}/low-level/blob-create (100%)
 rename levels/{it => it_IT}/low-level/blob-remove (100%)
 rename levels/{it => it_IT}/low-level/commit-create (100%)
 rename levels/{it => it_IT}/low-level/commit-parents (100%)
 rename levels/{it => it_IT}/low-level/commit-rhombus (100%)
 rename levels/{it => it_IT}/low-level/index-add (100%)
 rename levels/{it => it_IT}/low-level/index-remove (100%)
 rename levels/{it => it_IT}/low-level/index-update (100%)
 rename levels/{it => it_IT}/low-level/puzzle-apocalypse (100%)
 rename levels/{it => it_IT}/low-level/puzzle-precious-blob (100%)
 rename levels/{it => it_IT}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{it => it_IT}/low-level/ref-create (100%)
 rename levels/{it => it_IT}/low-level/ref-move (100%)
 rename levels/{it => it_IT}/low-level/ref-remove (100%)
 rename levels/{it => it_IT}/low-level/sequence (100%)
 rename levels/{it => it_IT}/low-level/symref-create (100%)
 rename levels/{it => it_IT}/low-level/symref-no-deref (100%)
 rename levels/{it => it_IT}/low-level/tree-create (100%)
 rename levels/{it => it_IT}/low-level/tree-nested (100%)
 rename levels/{it => it_IT}/low-level/tree-read (100%)
 rename levels/{it => it_IT}/low-level/welcome (100%)
 rename levels/{it => it_IT}/merge/conflict (100%)
 rename levels/{it => it_IT}/merge/merge (100%)
 rename levels/{it => it_IT}/merge/merge-abort (100%)
 rename levels/{it => it_IT}/merge/sequence (100%)
 rename levels/{it => it_IT}/remotes/friend (100%)
 rename levels/{it => it_IT}/remotes/problems (100%)
 rename levels/{it => it_IT}/remotes/sequence (100%)
 rename levels/{it => it_IT}/sandbox/empty (100%)
 rename levels/{it => it_IT}/sandbox/remote (100%)
 rename levels/{it => it_IT}/sandbox/sequence (100%)
 rename levels/{it => it_IT}/sandbox/three-commits (100%)
 rename levels/{it => it_IT}/sequence (100%)
 rename levels/{it => it_IT}/shit-happens/bad-commit (100%)
 rename levels/{it => it_IT}/shit-happens/pushed-something-broken (100%)
 rename levels/{it => it_IT}/shit-happens/reflog (100%)
 rename levels/{it => it_IT}/shit-happens/restore-a-file (100%)
 rename levels/{it => it_IT}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{it => it_IT}/shit-happens/sequence (100%)
 rename levels/{it => it_IT}/stash/sequence (100%)
 rename levels/{it => it_IT}/stash/stash (100%)
 rename levels/{it => it_IT}/stash/stash-branch (100%)
 rename levels/{it => it_IT}/stash/stash-clear (100%)
 rename levels/{it => it_IT}/stash/stash-merge (100%)
 rename levels/{it => it_IT}/stash/stash-pop (100%)
 rename levels/{it => it_IT}/tags/add-tag (100%)
 rename levels/{it => it_IT}/tags/add-tag-later (100%)
 rename levels/{it => it_IT}/tags/remote-tag (100%)
 rename levels/{it => it_IT}/tags/remove-tag (100%)
 rename levels/{it => it_IT}/tags/sequence (100%)
 rename levels/{it => it_IT}/unused/checkout (100%)
 rename levels/{it => it_IT}/unused/clone (100%)
 rename levels/{it => it_IT}/unused/commit (100%)
 rename levels/{it => it_IT}/unused/commit-a (100%)
 rename levels/{it => it_IT}/unused/fetch (100%)
 rename levels/{it => it_IT}/unused/files-move (100%)
 rename levels/{it => it_IT}/unused/index-mv (100%)
 rename levels/{it => it_IT}/unused/init (100%)
 rename levels/{it => it_IT}/unused/pull-push (100%)
 rename levels/{it => it_IT}/unused/remotes-add (100%)
 rename levels/{it => it_IT}/unused/remotes-delete (100%)
 rename levels/{it => it_IT}/unused/restore (100%)
 rename levels/{it => it_IT}/unused/split (100%)
 rename levels/{it => it_IT}/unused/steps (100%)
 rename levels/{it => it_IT}/unused/who-are-you (100%)
 rename levels/{it => it_IT}/workflows/gitignore (100%)
 rename levels/{it => it_IT}/workflows/pr (100%)
 rename levels/{it => it_IT}/workflows/sequence (100%)

diff --git a/images/settings_32x32.png b/images/settings_32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..977e052e4742d5bd65f3875c25feabed05d62212
GIT binary patch
literal 1022
zcmV<a0|ESrP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H101|XX
zSad;kbZBpK08DjbVIV_cZeeU`#Ge_{0000)bVXQnLvL_-a%pF1bO1v`AVG9=a%p09
zbZKvHAZT=Sa5^t9V{&C-bZK^FV{dJ3Z*FrgZ*pfZY-wX<ZgXXGFJgHwG%heNX%N?4
z0009WNkl<ZScR?ENr)X)6b9h$C2@?#DV>Hy%_7D{2XP=9gAf9?^MK;cMK%fwPN-y|
zuGEF%kSv6V5)fAosL(Aa7%|YID2f9HL5+xXMq;1?iJG?ixwyCRyz2Mr)&qYyP@L&M
zx9&Z+PSGA6yoYX<e{iHGhcJPqL*#9Z4S~EQcehQtXov!?9>VvAA$(h*gCG63!rO!X
zoGh0F`*Doaa;(XIMLdRs*oDV&3$}#hhjHqF*s0+6HXg*w_$BL(;G!n-t1zc|f1hrM
zzo`)0#T$cyPsZ*-@K-p!X$5$xkYgT~SI(Uf_ynHH&og)km*PU4gwL=&+e#S6Ml8cm
z_#XG;j%@!B*T;ah_%l>_Zwr!Pu@)x+$EIlfC>XxbzCA}QJnc<*rN+~N%|UrWYNsZQ
zVw=<{^H~mHD^?U@&zD-X;=2{5gJOFj!Fucu#C6$=D+)Pw1imTK0jU%-7#k2cS|E=_
z4BD2B_$%=3go|@frThV>^$FhAg1nL!`oxdacz(tOm2nJ5gYn^7a7WtbNHT$ySte_?
zeR^A5E~?5ujaBsu?+OmPYPR$Gta4?y+dZ?}?Vgd7)$Qlja(o@~-&iSQyDbaPbM@*5
z;BU;f^gSA$FRL3j={+3x)$AP$58$Nq`d8t73%8(-_=ab3ZDkn8v0(fZOZp_(s{J8+
zzEAvOd>nX=%QMEWLHV0>S@gq-ys{GcG?ov@F^WBbZ|@@f9vnW%3Hsp>ZkD=X5cXxC
z!vpLG<;y4I57Oljui`Zg1f)0dqTVyHUuv^KE3dF2`&WF|Rfe5G`FbHq#PSxT6&B;0
z!1HD_t`C*XNpryejRykxF|4Ndwt5%0<>v`$Kv^dp%6WXArG%x@Ff%T#`T)Meqc|)3
zY{7H&z;)8kM$<U8!@?^zVhKJe<k&4uSbgzYA-MF@aZe$3UTqSpW3|*mU8$ws!ZUa$
zB-x|?MMdwY{YhMjJMk*M#3N1Q70%9uM4XZfs*+#RCvGg*XOySsq4BKp_7rFTI)?c-
soE*Y;s_Zg6I@0Aat9kX`YJWNT7dIApxbC~rG5`Po07*qoM6N<$f*oVrMgRZ+

literal 0
HcmV?d00001

diff --git a/images/settings_32x32.png.import b/images/settings_32x32.png.import
new file mode 100644
index 0000000..85d04d8
--- /dev/null
+++ b/images/settings_32x32.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/settings_32x32.png-1ec947b33410cb1f2231e893c0d26b43.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://images/settings_32x32.png"
+dest_files=[ "res://.import/settings_32x32.png-1ec947b33410cb1f2231e893c0d26b43.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/levels/en/bisect/bisect b/levels/en_EN/bisect/bisect
similarity index 100%
rename from levels/en/bisect/bisect
rename to levels/en_EN/bisect/bisect
diff --git a/levels/en/bisect/sequence b/levels/en_EN/bisect/sequence
similarity index 100%
rename from levels/en/bisect/sequence
rename to levels/en_EN/bisect/sequence
diff --git a/levels/en/branches/branch-create b/levels/en_EN/branches/branch-create
similarity index 100%
rename from levels/en/branches/branch-create
rename to levels/en_EN/branches/branch-create
diff --git a/levels/en/branches/branch-remove b/levels/en_EN/branches/branch-remove
similarity index 100%
rename from levels/en/branches/branch-remove
rename to levels/en_EN/branches/branch-remove
diff --git a/levels/en/branches/checkout-commit b/levels/en_EN/branches/checkout-commit
similarity index 100%
rename from levels/en/branches/checkout-commit
rename to levels/en_EN/branches/checkout-commit
diff --git a/levels/en/branches/fork b/levels/en_EN/branches/fork
similarity index 100%
rename from levels/en/branches/fork
rename to levels/en_EN/branches/fork
diff --git a/levels/en/branches/grow b/levels/en_EN/branches/grow
similarity index 100%
rename from levels/en/branches/grow
rename to levels/en_EN/branches/grow
diff --git a/levels/en/branches/reorder b/levels/en_EN/branches/reorder
similarity index 100%
rename from levels/en/branches/reorder
rename to levels/en_EN/branches/reorder
diff --git a/levels/en/branches/sequence b/levels/en_EN/branches/sequence
similarity index 100%
rename from levels/en/branches/sequence
rename to levels/en_EN/branches/sequence
diff --git a/levels/en/changing-the-past/rebase b/levels/en_EN/changing-the-past/rebase
similarity index 100%
rename from levels/en/changing-the-past/rebase
rename to levels/en_EN/changing-the-past/rebase
diff --git a/levels/en/changing-the-past/reorder b/levels/en_EN/changing-the-past/reorder
similarity index 100%
rename from levels/en/changing-the-past/reorder
rename to levels/en_EN/changing-the-past/reorder
diff --git a/levels/en/changing-the-past/sequence b/levels/en_EN/changing-the-past/sequence
similarity index 100%
rename from levels/en/changing-the-past/sequence
rename to levels/en_EN/changing-the-past/sequence
diff --git a/levels/en/files/files-add b/levels/en_EN/files/files-add
similarity index 100%
rename from levels/en/files/files-add
rename to levels/en_EN/files/files-add
diff --git a/levels/en/files/files-delete b/levels/en_EN/files/files-delete
similarity index 100%
rename from levels/en/files/files-delete
rename to levels/en_EN/files/files-delete
diff --git a/levels/en/files/sequence b/levels/en_EN/files/sequence
similarity index 100%
rename from levels/en/files/sequence
rename to levels/en_EN/files/sequence
diff --git a/levels/en/index/add b/levels/en_EN/index/add
similarity index 100%
rename from levels/en/index/add
rename to levels/en_EN/index/add
diff --git a/levels/en/index/change b/levels/en_EN/index/change
similarity index 100%
rename from levels/en/index/change
rename to levels/en_EN/index/change
diff --git a/levels/en/index/checkout b/levels/en_EN/index/checkout
similarity index 100%
rename from levels/en/index/checkout
rename to levels/en_EN/index/checkout
diff --git a/levels/en/index/compare b/levels/en_EN/index/compare
similarity index 100%
rename from levels/en/index/compare
rename to levels/en_EN/index/compare
diff --git a/levels/en/index/new b/levels/en_EN/index/new
similarity index 100%
rename from levels/en/index/new
rename to levels/en_EN/index/new
diff --git a/levels/en/index/reset b/levels/en_EN/index/reset
similarity index 100%
rename from levels/en/index/reset
rename to levels/en_EN/index/reset
diff --git a/levels/en/index/rm b/levels/en_EN/index/rm
similarity index 100%
rename from levels/en/index/rm
rename to levels/en_EN/index/rm
diff --git a/levels/en/index/sequence b/levels/en_EN/index/sequence
similarity index 100%
rename from levels/en/index/sequence
rename to levels/en_EN/index/sequence
diff --git a/levels/en/index/steps b/levels/en_EN/index/steps
similarity index 100%
rename from levels/en/index/steps
rename to levels/en_EN/index/steps
diff --git a/levels/en/intro/cli b/levels/en_EN/intro/cli
similarity index 100%
rename from levels/en/intro/cli
rename to levels/en_EN/intro/cli
diff --git a/levels/en/intro/commit b/levels/en_EN/intro/commit
similarity index 100%
rename from levels/en/intro/commit
rename to levels/en_EN/intro/commit
diff --git a/levels/en/intro/copies b/levels/en_EN/intro/copies
similarity index 100%
rename from levels/en/intro/copies
rename to levels/en_EN/intro/copies
diff --git a/levels/en/intro/init b/levels/en_EN/intro/init
similarity index 100%
rename from levels/en/intro/init
rename to levels/en_EN/intro/init
diff --git a/levels/en/intro/remote b/levels/en_EN/intro/remote
similarity index 100%
rename from levels/en/intro/remote
rename to levels/en_EN/intro/remote
diff --git a/levels/en/intro/risky b/levels/en_EN/intro/risky
similarity index 100%
rename from levels/en/intro/risky
rename to levels/en_EN/intro/risky
diff --git a/levels/en/intro/sequence b/levels/en_EN/intro/sequence
similarity index 100%
rename from levels/en/intro/sequence
rename to levels/en_EN/intro/sequence
diff --git a/levels/en/intro/who-are-you b/levels/en_EN/intro/who-are-you
similarity index 100%
rename from levels/en/intro/who-are-you
rename to levels/en_EN/intro/who-are-you
diff --git a/levels/en/low-level/basics b/levels/en_EN/low-level/basics
similarity index 100%
rename from levels/en/low-level/basics
rename to levels/en_EN/low-level/basics
diff --git a/levels/en/low-level/blob-create b/levels/en_EN/low-level/blob-create
similarity index 100%
rename from levels/en/low-level/blob-create
rename to levels/en_EN/low-level/blob-create
diff --git a/levels/en/low-level/blob-remove b/levels/en_EN/low-level/blob-remove
similarity index 100%
rename from levels/en/low-level/blob-remove
rename to levels/en_EN/low-level/blob-remove
diff --git a/levels/en/low-level/commit-create b/levels/en_EN/low-level/commit-create
similarity index 100%
rename from levels/en/low-level/commit-create
rename to levels/en_EN/low-level/commit-create
diff --git a/levels/en/low-level/commit-parents b/levels/en_EN/low-level/commit-parents
similarity index 100%
rename from levels/en/low-level/commit-parents
rename to levels/en_EN/low-level/commit-parents
diff --git a/levels/en/low-level/commit-rhombus b/levels/en_EN/low-level/commit-rhombus
similarity index 100%
rename from levels/en/low-level/commit-rhombus
rename to levels/en_EN/low-level/commit-rhombus
diff --git a/levels/en/low-level/index-add b/levels/en_EN/low-level/index-add
similarity index 100%
rename from levels/en/low-level/index-add
rename to levels/en_EN/low-level/index-add
diff --git a/levels/en/low-level/index-remove b/levels/en_EN/low-level/index-remove
similarity index 100%
rename from levels/en/low-level/index-remove
rename to levels/en_EN/low-level/index-remove
diff --git a/levels/en/low-level/index-update b/levels/en_EN/low-level/index-update
similarity index 100%
rename from levels/en/low-level/index-update
rename to levels/en_EN/low-level/index-update
diff --git a/levels/en/low-level/puzzle-apocalypse b/levels/en_EN/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/en/low-level/puzzle-apocalypse
rename to levels/en_EN/low-level/puzzle-apocalypse
diff --git a/levels/en/low-level/puzzle-precious-blob b/levels/en_EN/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/en/low-level/puzzle-precious-blob
rename to levels/en_EN/low-level/puzzle-precious-blob
diff --git a/levels/en/low-level/puzzle-trees-all-the-way-down b/levels/en_EN/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/en/low-level/puzzle-trees-all-the-way-down
rename to levels/en_EN/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/en/low-level/ref-create b/levels/en_EN/low-level/ref-create
similarity index 100%
rename from levels/en/low-level/ref-create
rename to levels/en_EN/low-level/ref-create
diff --git a/levels/en/low-level/ref-move b/levels/en_EN/low-level/ref-move
similarity index 100%
rename from levels/en/low-level/ref-move
rename to levels/en_EN/low-level/ref-move
diff --git a/levels/en/low-level/ref-remove b/levels/en_EN/low-level/ref-remove
similarity index 100%
rename from levels/en/low-level/ref-remove
rename to levels/en_EN/low-level/ref-remove
diff --git a/levels/en/low-level/sequence b/levels/en_EN/low-level/sequence
similarity index 100%
rename from levels/en/low-level/sequence
rename to levels/en_EN/low-level/sequence
diff --git a/levels/en/low-level/symref-create b/levels/en_EN/low-level/symref-create
similarity index 100%
rename from levels/en/low-level/symref-create
rename to levels/en_EN/low-level/symref-create
diff --git a/levels/en/low-level/symref-no-deref b/levels/en_EN/low-level/symref-no-deref
similarity index 100%
rename from levels/en/low-level/symref-no-deref
rename to levels/en_EN/low-level/symref-no-deref
diff --git a/levels/en/low-level/tree-create b/levels/en_EN/low-level/tree-create
similarity index 100%
rename from levels/en/low-level/tree-create
rename to levels/en_EN/low-level/tree-create
diff --git a/levels/en/low-level/tree-nested b/levels/en_EN/low-level/tree-nested
similarity index 100%
rename from levels/en/low-level/tree-nested
rename to levels/en_EN/low-level/tree-nested
diff --git a/levels/en/low-level/tree-read b/levels/en_EN/low-level/tree-read
similarity index 100%
rename from levels/en/low-level/tree-read
rename to levels/en_EN/low-level/tree-read
diff --git a/levels/en/low-level/welcome b/levels/en_EN/low-level/welcome
similarity index 100%
rename from levels/en/low-level/welcome
rename to levels/en_EN/low-level/welcome
diff --git a/levels/en/merge/conflict b/levels/en_EN/merge/conflict
similarity index 100%
rename from levels/en/merge/conflict
rename to levels/en_EN/merge/conflict
diff --git a/levels/en/merge/merge b/levels/en_EN/merge/merge
similarity index 100%
rename from levels/en/merge/merge
rename to levels/en_EN/merge/merge
diff --git a/levels/en/merge/merge-abort b/levels/en_EN/merge/merge-abort
similarity index 100%
rename from levels/en/merge/merge-abort
rename to levels/en_EN/merge/merge-abort
diff --git a/levels/en/merge/sequence b/levels/en_EN/merge/sequence
similarity index 100%
rename from levels/en/merge/sequence
rename to levels/en_EN/merge/sequence
diff --git a/levels/en/remotes/friend b/levels/en_EN/remotes/friend
similarity index 100%
rename from levels/en/remotes/friend
rename to levels/en_EN/remotes/friend
diff --git a/levels/en/remotes/problems b/levels/en_EN/remotes/problems
similarity index 100%
rename from levels/en/remotes/problems
rename to levels/en_EN/remotes/problems
diff --git a/levels/en/remotes/sequence b/levels/en_EN/remotes/sequence
similarity index 100%
rename from levels/en/remotes/sequence
rename to levels/en_EN/remotes/sequence
diff --git a/levels/en/sandbox/empty b/levels/en_EN/sandbox/empty
similarity index 100%
rename from levels/en/sandbox/empty
rename to levels/en_EN/sandbox/empty
diff --git a/levels/en/sandbox/remote b/levels/en_EN/sandbox/remote
similarity index 100%
rename from levels/en/sandbox/remote
rename to levels/en_EN/sandbox/remote
diff --git a/levels/en/sandbox/sequence b/levels/en_EN/sandbox/sequence
similarity index 100%
rename from levels/en/sandbox/sequence
rename to levels/en_EN/sandbox/sequence
diff --git a/levels/en/sandbox/three-commits b/levels/en_EN/sandbox/three-commits
similarity index 100%
rename from levels/en/sandbox/three-commits
rename to levels/en_EN/sandbox/three-commits
diff --git a/levels/en/sequence b/levels/en_EN/sequence
similarity index 100%
rename from levels/en/sequence
rename to levels/en_EN/sequence
diff --git a/levels/en/shit-happens/bad-commit b/levels/en_EN/shit-happens/bad-commit
similarity index 100%
rename from levels/en/shit-happens/bad-commit
rename to levels/en_EN/shit-happens/bad-commit
diff --git a/levels/en/shit-happens/pushed-something-broken b/levels/en_EN/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/en/shit-happens/pushed-something-broken
rename to levels/en_EN/shit-happens/pushed-something-broken
diff --git a/levels/en/shit-happens/reflog b/levels/en_EN/shit-happens/reflog
similarity index 100%
rename from levels/en/shit-happens/reflog
rename to levels/en_EN/shit-happens/reflog
diff --git a/levels/en/shit-happens/restore-a-file b/levels/en_EN/shit-happens/restore-a-file
similarity index 100%
rename from levels/en/shit-happens/restore-a-file
rename to levels/en_EN/shit-happens/restore-a-file
diff --git a/levels/en/shit-happens/restore-a-file-from-the-past b/levels/en_EN/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/en/shit-happens/restore-a-file-from-the-past
rename to levels/en_EN/shit-happens/restore-a-file-from-the-past
diff --git a/levels/en/shit-happens/sequence b/levels/en_EN/shit-happens/sequence
similarity index 100%
rename from levels/en/shit-happens/sequence
rename to levels/en_EN/shit-happens/sequence
diff --git a/levels/en/stash/sequence b/levels/en_EN/stash/sequence
similarity index 100%
rename from levels/en/stash/sequence
rename to levels/en_EN/stash/sequence
diff --git a/levels/en/stash/stash b/levels/en_EN/stash/stash
similarity index 100%
rename from levels/en/stash/stash
rename to levels/en_EN/stash/stash
diff --git a/levels/en/stash/stash-branch b/levels/en_EN/stash/stash-branch
similarity index 100%
rename from levels/en/stash/stash-branch
rename to levels/en_EN/stash/stash-branch
diff --git a/levels/en/stash/stash-clear b/levels/en_EN/stash/stash-clear
similarity index 100%
rename from levels/en/stash/stash-clear
rename to levels/en_EN/stash/stash-clear
diff --git a/levels/en/stash/stash-merge b/levels/en_EN/stash/stash-merge
similarity index 100%
rename from levels/en/stash/stash-merge
rename to levels/en_EN/stash/stash-merge
diff --git a/levels/en/stash/stash-pop b/levels/en_EN/stash/stash-pop
similarity index 100%
rename from levels/en/stash/stash-pop
rename to levels/en_EN/stash/stash-pop
diff --git a/levels/en/tags/add-tag b/levels/en_EN/tags/add-tag
similarity index 100%
rename from levels/en/tags/add-tag
rename to levels/en_EN/tags/add-tag
diff --git a/levels/en/tags/add-tag-later b/levels/en_EN/tags/add-tag-later
similarity index 100%
rename from levels/en/tags/add-tag-later
rename to levels/en_EN/tags/add-tag-later
diff --git a/levels/en/tags/remote-tag b/levels/en_EN/tags/remote-tag
similarity index 100%
rename from levels/en/tags/remote-tag
rename to levels/en_EN/tags/remote-tag
diff --git a/levels/en/tags/remove-tag b/levels/en_EN/tags/remove-tag
similarity index 100%
rename from levels/en/tags/remove-tag
rename to levels/en_EN/tags/remove-tag
diff --git a/levels/en/tags/sequence b/levels/en_EN/tags/sequence
similarity index 100%
rename from levels/en/tags/sequence
rename to levels/en_EN/tags/sequence
diff --git a/levels/en/unused/checkout b/levels/en_EN/unused/checkout
similarity index 100%
rename from levels/en/unused/checkout
rename to levels/en_EN/unused/checkout
diff --git a/levels/en/unused/clone b/levels/en_EN/unused/clone
similarity index 100%
rename from levels/en/unused/clone
rename to levels/en_EN/unused/clone
diff --git a/levels/en/unused/commit b/levels/en_EN/unused/commit
similarity index 100%
rename from levels/en/unused/commit
rename to levels/en_EN/unused/commit
diff --git a/levels/en/unused/commit-a b/levels/en_EN/unused/commit-a
similarity index 100%
rename from levels/en/unused/commit-a
rename to levels/en_EN/unused/commit-a
diff --git a/levels/en/unused/fetch b/levels/en_EN/unused/fetch
similarity index 100%
rename from levels/en/unused/fetch
rename to levels/en_EN/unused/fetch
diff --git a/levels/en/unused/files-move b/levels/en_EN/unused/files-move
similarity index 100%
rename from levels/en/unused/files-move
rename to levels/en_EN/unused/files-move
diff --git a/levels/en/unused/index-mv b/levels/en_EN/unused/index-mv
similarity index 100%
rename from levels/en/unused/index-mv
rename to levels/en_EN/unused/index-mv
diff --git a/levels/en/unused/init b/levels/en_EN/unused/init
similarity index 100%
rename from levels/en/unused/init
rename to levels/en_EN/unused/init
diff --git a/levels/en/unused/pull-push b/levels/en_EN/unused/pull-push
similarity index 100%
rename from levels/en/unused/pull-push
rename to levels/en_EN/unused/pull-push
diff --git a/levels/en/unused/remotes-add b/levels/en_EN/unused/remotes-add
similarity index 100%
rename from levels/en/unused/remotes-add
rename to levels/en_EN/unused/remotes-add
diff --git a/levels/en/unused/remotes-delete b/levels/en_EN/unused/remotes-delete
similarity index 100%
rename from levels/en/unused/remotes-delete
rename to levels/en_EN/unused/remotes-delete
diff --git a/levels/en/unused/restore b/levels/en_EN/unused/restore
similarity index 100%
rename from levels/en/unused/restore
rename to levels/en_EN/unused/restore
diff --git a/levels/en/unused/split b/levels/en_EN/unused/split
similarity index 100%
rename from levels/en/unused/split
rename to levels/en_EN/unused/split
diff --git a/levels/en/unused/steps b/levels/en_EN/unused/steps
similarity index 100%
rename from levels/en/unused/steps
rename to levels/en_EN/unused/steps
diff --git a/levels/en/unused/who-are-you b/levels/en_EN/unused/who-are-you
similarity index 100%
rename from levels/en/unused/who-are-you
rename to levels/en_EN/unused/who-are-you
diff --git a/levels/en/workflows/gitignore b/levels/en_EN/workflows/gitignore
similarity index 100%
rename from levels/en/workflows/gitignore
rename to levels/en_EN/workflows/gitignore
diff --git a/levels/en/workflows/pr b/levels/en_EN/workflows/pr
similarity index 100%
rename from levels/en/workflows/pr
rename to levels/en_EN/workflows/pr
diff --git a/levels/en/workflows/sequence b/levels/en_EN/workflows/sequence
similarity index 100%
rename from levels/en/workflows/sequence
rename to levels/en_EN/workflows/sequence
diff --git a/levels/it/bisect/bisect b/levels/it_IT/bisect/bisect
similarity index 100%
rename from levels/it/bisect/bisect
rename to levels/it_IT/bisect/bisect
diff --git a/levels/it/bisect/sequence b/levels/it_IT/bisect/sequence
similarity index 100%
rename from levels/it/bisect/sequence
rename to levels/it_IT/bisect/sequence
diff --git a/levels/it/branches/branch-create b/levels/it_IT/branches/branch-create
similarity index 100%
rename from levels/it/branches/branch-create
rename to levels/it_IT/branches/branch-create
diff --git a/levels/it/branches/branch-remove b/levels/it_IT/branches/branch-remove
similarity index 100%
rename from levels/it/branches/branch-remove
rename to levels/it_IT/branches/branch-remove
diff --git a/levels/it/branches/checkout-commit b/levels/it_IT/branches/checkout-commit
similarity index 100%
rename from levels/it/branches/checkout-commit
rename to levels/it_IT/branches/checkout-commit
diff --git a/levels/it/branches/fork b/levels/it_IT/branches/fork
similarity index 100%
rename from levels/it/branches/fork
rename to levels/it_IT/branches/fork
diff --git a/levels/it/branches/grow b/levels/it_IT/branches/grow
similarity index 100%
rename from levels/it/branches/grow
rename to levels/it_IT/branches/grow
diff --git a/levels/it/branches/reorder b/levels/it_IT/branches/reorder
similarity index 100%
rename from levels/it/branches/reorder
rename to levels/it_IT/branches/reorder
diff --git a/levels/it/branches/sequence b/levels/it_IT/branches/sequence
similarity index 100%
rename from levels/it/branches/sequence
rename to levels/it_IT/branches/sequence
diff --git a/levels/it/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase
similarity index 100%
rename from levels/it/changing-the-past/rebase
rename to levels/it_IT/changing-the-past/rebase
diff --git a/levels/it/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder
similarity index 100%
rename from levels/it/changing-the-past/reorder
rename to levels/it_IT/changing-the-past/reorder
diff --git a/levels/it/changing-the-past/sequence b/levels/it_IT/changing-the-past/sequence
similarity index 100%
rename from levels/it/changing-the-past/sequence
rename to levels/it_IT/changing-the-past/sequence
diff --git a/levels/it/files/files-add b/levels/it_IT/files/files-add
similarity index 100%
rename from levels/it/files/files-add
rename to levels/it_IT/files/files-add
diff --git a/levels/it/files/files-delete b/levels/it_IT/files/files-delete
similarity index 100%
rename from levels/it/files/files-delete
rename to levels/it_IT/files/files-delete
diff --git a/levels/it/files/sequence b/levels/it_IT/files/sequence
similarity index 100%
rename from levels/it/files/sequence
rename to levels/it_IT/files/sequence
diff --git a/levels/it/index/add b/levels/it_IT/index/add
similarity index 100%
rename from levels/it/index/add
rename to levels/it_IT/index/add
diff --git a/levels/it/index/change b/levels/it_IT/index/change
similarity index 100%
rename from levels/it/index/change
rename to levels/it_IT/index/change
diff --git a/levels/it/index/checkout b/levels/it_IT/index/checkout
similarity index 100%
rename from levels/it/index/checkout
rename to levels/it_IT/index/checkout
diff --git a/levels/it/index/compare b/levels/it_IT/index/compare
similarity index 100%
rename from levels/it/index/compare
rename to levels/it_IT/index/compare
diff --git a/levels/it/index/new b/levels/it_IT/index/new
similarity index 100%
rename from levels/it/index/new
rename to levels/it_IT/index/new
diff --git a/levels/it/index/reset b/levels/it_IT/index/reset
similarity index 100%
rename from levels/it/index/reset
rename to levels/it_IT/index/reset
diff --git a/levels/it/index/rm b/levels/it_IT/index/rm
similarity index 100%
rename from levels/it/index/rm
rename to levels/it_IT/index/rm
diff --git a/levels/it/index/sequence b/levels/it_IT/index/sequence
similarity index 100%
rename from levels/it/index/sequence
rename to levels/it_IT/index/sequence
diff --git a/levels/it/index/steps b/levels/it_IT/index/steps
similarity index 100%
rename from levels/it/index/steps
rename to levels/it_IT/index/steps
diff --git a/levels/it/intro/cli b/levels/it_IT/intro/cli
similarity index 100%
rename from levels/it/intro/cli
rename to levels/it_IT/intro/cli
diff --git a/levels/it/intro/commit b/levels/it_IT/intro/commit
similarity index 100%
rename from levels/it/intro/commit
rename to levels/it_IT/intro/commit
diff --git a/levels/it/intro/copies b/levels/it_IT/intro/copies
similarity index 100%
rename from levels/it/intro/copies
rename to levels/it_IT/intro/copies
diff --git a/levels/it/intro/init b/levels/it_IT/intro/init
similarity index 100%
rename from levels/it/intro/init
rename to levels/it_IT/intro/init
diff --git a/levels/it/intro/remote b/levels/it_IT/intro/remote
similarity index 100%
rename from levels/it/intro/remote
rename to levels/it_IT/intro/remote
diff --git a/levels/it/intro/risky b/levels/it_IT/intro/risky
similarity index 100%
rename from levels/it/intro/risky
rename to levels/it_IT/intro/risky
diff --git a/levels/it/intro/sequence b/levels/it_IT/intro/sequence
similarity index 100%
rename from levels/it/intro/sequence
rename to levels/it_IT/intro/sequence
diff --git a/levels/it/intro/who-are-you b/levels/it_IT/intro/who-are-you
similarity index 100%
rename from levels/it/intro/who-are-you
rename to levels/it_IT/intro/who-are-you
diff --git a/levels/it/low-level/basics b/levels/it_IT/low-level/basics
similarity index 100%
rename from levels/it/low-level/basics
rename to levels/it_IT/low-level/basics
diff --git a/levels/it/low-level/blob-create b/levels/it_IT/low-level/blob-create
similarity index 100%
rename from levels/it/low-level/blob-create
rename to levels/it_IT/low-level/blob-create
diff --git a/levels/it/low-level/blob-remove b/levels/it_IT/low-level/blob-remove
similarity index 100%
rename from levels/it/low-level/blob-remove
rename to levels/it_IT/low-level/blob-remove
diff --git a/levels/it/low-level/commit-create b/levels/it_IT/low-level/commit-create
similarity index 100%
rename from levels/it/low-level/commit-create
rename to levels/it_IT/low-level/commit-create
diff --git a/levels/it/low-level/commit-parents b/levels/it_IT/low-level/commit-parents
similarity index 100%
rename from levels/it/low-level/commit-parents
rename to levels/it_IT/low-level/commit-parents
diff --git a/levels/it/low-level/commit-rhombus b/levels/it_IT/low-level/commit-rhombus
similarity index 100%
rename from levels/it/low-level/commit-rhombus
rename to levels/it_IT/low-level/commit-rhombus
diff --git a/levels/it/low-level/index-add b/levels/it_IT/low-level/index-add
similarity index 100%
rename from levels/it/low-level/index-add
rename to levels/it_IT/low-level/index-add
diff --git a/levels/it/low-level/index-remove b/levels/it_IT/low-level/index-remove
similarity index 100%
rename from levels/it/low-level/index-remove
rename to levels/it_IT/low-level/index-remove
diff --git a/levels/it/low-level/index-update b/levels/it_IT/low-level/index-update
similarity index 100%
rename from levels/it/low-level/index-update
rename to levels/it_IT/low-level/index-update
diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it_IT/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/it/low-level/puzzle-apocalypse
rename to levels/it_IT/low-level/puzzle-apocalypse
diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it_IT/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/it/low-level/puzzle-precious-blob
rename to levels/it_IT/low-level/puzzle-precious-blob
diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it_IT/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/it/low-level/puzzle-trees-all-the-way-down
rename to levels/it_IT/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/it/low-level/ref-create b/levels/it_IT/low-level/ref-create
similarity index 100%
rename from levels/it/low-level/ref-create
rename to levels/it_IT/low-level/ref-create
diff --git a/levels/it/low-level/ref-move b/levels/it_IT/low-level/ref-move
similarity index 100%
rename from levels/it/low-level/ref-move
rename to levels/it_IT/low-level/ref-move
diff --git a/levels/it/low-level/ref-remove b/levels/it_IT/low-level/ref-remove
similarity index 100%
rename from levels/it/low-level/ref-remove
rename to levels/it_IT/low-level/ref-remove
diff --git a/levels/it/low-level/sequence b/levels/it_IT/low-level/sequence
similarity index 100%
rename from levels/it/low-level/sequence
rename to levels/it_IT/low-level/sequence
diff --git a/levels/it/low-level/symref-create b/levels/it_IT/low-level/symref-create
similarity index 100%
rename from levels/it/low-level/symref-create
rename to levels/it_IT/low-level/symref-create
diff --git a/levels/it/low-level/symref-no-deref b/levels/it_IT/low-level/symref-no-deref
similarity index 100%
rename from levels/it/low-level/symref-no-deref
rename to levels/it_IT/low-level/symref-no-deref
diff --git a/levels/it/low-level/tree-create b/levels/it_IT/low-level/tree-create
similarity index 100%
rename from levels/it/low-level/tree-create
rename to levels/it_IT/low-level/tree-create
diff --git a/levels/it/low-level/tree-nested b/levels/it_IT/low-level/tree-nested
similarity index 100%
rename from levels/it/low-level/tree-nested
rename to levels/it_IT/low-level/tree-nested
diff --git a/levels/it/low-level/tree-read b/levels/it_IT/low-level/tree-read
similarity index 100%
rename from levels/it/low-level/tree-read
rename to levels/it_IT/low-level/tree-read
diff --git a/levels/it/low-level/welcome b/levels/it_IT/low-level/welcome
similarity index 100%
rename from levels/it/low-level/welcome
rename to levels/it_IT/low-level/welcome
diff --git a/levels/it/merge/conflict b/levels/it_IT/merge/conflict
similarity index 100%
rename from levels/it/merge/conflict
rename to levels/it_IT/merge/conflict
diff --git a/levels/it/merge/merge b/levels/it_IT/merge/merge
similarity index 100%
rename from levels/it/merge/merge
rename to levels/it_IT/merge/merge
diff --git a/levels/it/merge/merge-abort b/levels/it_IT/merge/merge-abort
similarity index 100%
rename from levels/it/merge/merge-abort
rename to levels/it_IT/merge/merge-abort
diff --git a/levels/it/merge/sequence b/levels/it_IT/merge/sequence
similarity index 100%
rename from levels/it/merge/sequence
rename to levels/it_IT/merge/sequence
diff --git a/levels/it/remotes/friend b/levels/it_IT/remotes/friend
similarity index 100%
rename from levels/it/remotes/friend
rename to levels/it_IT/remotes/friend
diff --git a/levels/it/remotes/problems b/levels/it_IT/remotes/problems
similarity index 100%
rename from levels/it/remotes/problems
rename to levels/it_IT/remotes/problems
diff --git a/levels/it/remotes/sequence b/levels/it_IT/remotes/sequence
similarity index 100%
rename from levels/it/remotes/sequence
rename to levels/it_IT/remotes/sequence
diff --git a/levels/it/sandbox/empty b/levels/it_IT/sandbox/empty
similarity index 100%
rename from levels/it/sandbox/empty
rename to levels/it_IT/sandbox/empty
diff --git a/levels/it/sandbox/remote b/levels/it_IT/sandbox/remote
similarity index 100%
rename from levels/it/sandbox/remote
rename to levels/it_IT/sandbox/remote
diff --git a/levels/it/sandbox/sequence b/levels/it_IT/sandbox/sequence
similarity index 100%
rename from levels/it/sandbox/sequence
rename to levels/it_IT/sandbox/sequence
diff --git a/levels/it/sandbox/three-commits b/levels/it_IT/sandbox/three-commits
similarity index 100%
rename from levels/it/sandbox/three-commits
rename to levels/it_IT/sandbox/three-commits
diff --git a/levels/it/sequence b/levels/it_IT/sequence
similarity index 100%
rename from levels/it/sequence
rename to levels/it_IT/sequence
diff --git a/levels/it/shit-happens/bad-commit b/levels/it_IT/shit-happens/bad-commit
similarity index 100%
rename from levels/it/shit-happens/bad-commit
rename to levels/it_IT/shit-happens/bad-commit
diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/it/shit-happens/pushed-something-broken
rename to levels/it_IT/shit-happens/pushed-something-broken
diff --git a/levels/it/shit-happens/reflog b/levels/it_IT/shit-happens/reflog
similarity index 100%
rename from levels/it/shit-happens/reflog
rename to levels/it_IT/shit-happens/reflog
diff --git a/levels/it/shit-happens/restore-a-file b/levels/it_IT/shit-happens/restore-a-file
similarity index 100%
rename from levels/it/shit-happens/restore-a-file
rename to levels/it_IT/shit-happens/restore-a-file
diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it_IT/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/it/shit-happens/restore-a-file-from-the-past
rename to levels/it_IT/shit-happens/restore-a-file-from-the-past
diff --git a/levels/it/shit-happens/sequence b/levels/it_IT/shit-happens/sequence
similarity index 100%
rename from levels/it/shit-happens/sequence
rename to levels/it_IT/shit-happens/sequence
diff --git a/levels/it/stash/sequence b/levels/it_IT/stash/sequence
similarity index 100%
rename from levels/it/stash/sequence
rename to levels/it_IT/stash/sequence
diff --git a/levels/it/stash/stash b/levels/it_IT/stash/stash
similarity index 100%
rename from levels/it/stash/stash
rename to levels/it_IT/stash/stash
diff --git a/levels/it/stash/stash-branch b/levels/it_IT/stash/stash-branch
similarity index 100%
rename from levels/it/stash/stash-branch
rename to levels/it_IT/stash/stash-branch
diff --git a/levels/it/stash/stash-clear b/levels/it_IT/stash/stash-clear
similarity index 100%
rename from levels/it/stash/stash-clear
rename to levels/it_IT/stash/stash-clear
diff --git a/levels/it/stash/stash-merge b/levels/it_IT/stash/stash-merge
similarity index 100%
rename from levels/it/stash/stash-merge
rename to levels/it_IT/stash/stash-merge
diff --git a/levels/it/stash/stash-pop b/levels/it_IT/stash/stash-pop
similarity index 100%
rename from levels/it/stash/stash-pop
rename to levels/it_IT/stash/stash-pop
diff --git a/levels/it/tags/add-tag b/levels/it_IT/tags/add-tag
similarity index 100%
rename from levels/it/tags/add-tag
rename to levels/it_IT/tags/add-tag
diff --git a/levels/it/tags/add-tag-later b/levels/it_IT/tags/add-tag-later
similarity index 100%
rename from levels/it/tags/add-tag-later
rename to levels/it_IT/tags/add-tag-later
diff --git a/levels/it/tags/remote-tag b/levels/it_IT/tags/remote-tag
similarity index 100%
rename from levels/it/tags/remote-tag
rename to levels/it_IT/tags/remote-tag
diff --git a/levels/it/tags/remove-tag b/levels/it_IT/tags/remove-tag
similarity index 100%
rename from levels/it/tags/remove-tag
rename to levels/it_IT/tags/remove-tag
diff --git a/levels/it/tags/sequence b/levels/it_IT/tags/sequence
similarity index 100%
rename from levels/it/tags/sequence
rename to levels/it_IT/tags/sequence
diff --git a/levels/it/unused/checkout b/levels/it_IT/unused/checkout
similarity index 100%
rename from levels/it/unused/checkout
rename to levels/it_IT/unused/checkout
diff --git a/levels/it/unused/clone b/levels/it_IT/unused/clone
similarity index 100%
rename from levels/it/unused/clone
rename to levels/it_IT/unused/clone
diff --git a/levels/it/unused/commit b/levels/it_IT/unused/commit
similarity index 100%
rename from levels/it/unused/commit
rename to levels/it_IT/unused/commit
diff --git a/levels/it/unused/commit-a b/levels/it_IT/unused/commit-a
similarity index 100%
rename from levels/it/unused/commit-a
rename to levels/it_IT/unused/commit-a
diff --git a/levels/it/unused/fetch b/levels/it_IT/unused/fetch
similarity index 100%
rename from levels/it/unused/fetch
rename to levels/it_IT/unused/fetch
diff --git a/levels/it/unused/files-move b/levels/it_IT/unused/files-move
similarity index 100%
rename from levels/it/unused/files-move
rename to levels/it_IT/unused/files-move
diff --git a/levels/it/unused/index-mv b/levels/it_IT/unused/index-mv
similarity index 100%
rename from levels/it/unused/index-mv
rename to levels/it_IT/unused/index-mv
diff --git a/levels/it/unused/init b/levels/it_IT/unused/init
similarity index 100%
rename from levels/it/unused/init
rename to levels/it_IT/unused/init
diff --git a/levels/it/unused/pull-push b/levels/it_IT/unused/pull-push
similarity index 100%
rename from levels/it/unused/pull-push
rename to levels/it_IT/unused/pull-push
diff --git a/levels/it/unused/remotes-add b/levels/it_IT/unused/remotes-add
similarity index 100%
rename from levels/it/unused/remotes-add
rename to levels/it_IT/unused/remotes-add
diff --git a/levels/it/unused/remotes-delete b/levels/it_IT/unused/remotes-delete
similarity index 100%
rename from levels/it/unused/remotes-delete
rename to levels/it_IT/unused/remotes-delete
diff --git a/levels/it/unused/restore b/levels/it_IT/unused/restore
similarity index 100%
rename from levels/it/unused/restore
rename to levels/it_IT/unused/restore
diff --git a/levels/it/unused/split b/levels/it_IT/unused/split
similarity index 100%
rename from levels/it/unused/split
rename to levels/it_IT/unused/split
diff --git a/levels/it/unused/steps b/levels/it_IT/unused/steps
similarity index 100%
rename from levels/it/unused/steps
rename to levels/it_IT/unused/steps
diff --git a/levels/it/unused/who-are-you b/levels/it_IT/unused/who-are-you
similarity index 100%
rename from levels/it/unused/who-are-you
rename to levels/it_IT/unused/who-are-you
diff --git a/levels/it/workflows/gitignore b/levels/it_IT/workflows/gitignore
similarity index 100%
rename from levels/it/workflows/gitignore
rename to levels/it_IT/workflows/gitignore
diff --git a/levels/it/workflows/pr b/levels/it_IT/workflows/pr
similarity index 100%
rename from levels/it/workflows/pr
rename to levels/it_IT/workflows/pr
diff --git a/levels/it/workflows/sequence b/levels/it_IT/workflows/sequence
similarity index 100%
rename from levels/it/workflows/sequence
rename to levels/it_IT/workflows/sequence
diff --git a/resources/localizations.csv b/resources/localizations.csv
index 12f76b2..2a860b7 100644
--- a/resources/localizations.csv
+++ b/resources/localizations.csv
@@ -14,4 +14,7 @@ On macOS 10.8 and below, you can download Git from git-scm.com.","Ciao! Sembra c
 Su Linux, installalo dal tuo gestore di pacchetti, di solito il pacchetto si chiama "git"!
 
 Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com."
-INSTALL,"Sure, I'll install it!","Sicuro, lo installerò"
\ No newline at end of file
+INSTALL,"Sure, I'll install it!","Sicuro, lo installerò"
+LANGUAGE,Language,Linguaggio
+ITALIAN,Italian,Italiano
+ENGLISH,English,Inglese
\ No newline at end of file
diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation
index b578dfbf17d0b2a7dc89e09f2005de5d44e12211..01525b371dbe43672a80083931d72d4a92bd84eb 100644
GIT binary patch
delta 388
zcmbQp_K<CZEn__w0|SEy5dQ}PDIl!?#A-mS1H>RPBPh)Zq!obJ28fw}m=TDp4^9vU
ziBAFI3qZU$j$`p!Ak7ZM96$_H7ZSq3_yWiWsRiM<2QLm@1JXcsQDDU&!$9~OyYrDP
zKw1!p#i3##@!30G2_FU0AVWbIrhe+~FF)=A`P@(p6Q9tiV={B{J4SJr1wa{ID26%b
zOUm-4Kq0tu)Q#V7JqzS>LNObVmIvauK<t#5oIN?5X--H;etLRNs)BE6ab_~ZKhG1>
zrT#Je3!e7%KclDm3_st3Z~qw;8C>(yb25uF7<>}*(n}N5QyGF%bMg~Y82nNzN)&uj
U%TjX~0!uSXfaWp;1qV3;0Ni9#g#Z8m

delta 308
zcmaFJHj!<EEn__!0|SEq5dVh)F(6w8h?SsX8c>=QNGkxb9uPA^arMCo!pcDQ6d=9;
z#7t1}kPr^WeLyxy4+zIScyaJBkY<NsnEr3<&QeD}3Iu^z9Ef2OQ+I#)acc5EM)9oe
zP%R*>Fxguy&LJRY@<K68{7cI6r9dILwIHv_1MyWLc1ldnX80F8?dyL=PxTpoz6Ia@
zGb%EK<fo_Sq$>E97H1|;E@YY`7g(BE!Vr|2lb@Kv;FnraqTrKSmYM_9&kz(G<O~2h
CZ$p3p

diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation
index 1346041d3b82af328dea38da2d5f94f2bcf80d7f..410081c3a76de444c9468a0d450193b9122de478 100644
GIT binary patch
delta 371
zcmZ3&_JwVO4`V$S0|SEy5dQ}PDIl!?#A-mS1H>RPBPh)Zq!obJ28fw}m=TDp4^9x~
z1k%%i_y!O!j^kLo4oGtVF-RPyE+mA5@g0y4G6RI;9=tdRQV&!Y1y%?$41~Y2J0IBw
zqy>Rk94ZD9pS|Oi@Npo`4#XhCVd|&u{_^7ikk1FiAU!bg35_}?3nu?%6z5$I6b0!5
zVW!E7OyVl)#_zYD1M)x~=LTXnAeIN>&p_;%my(%UQj|YAg=v1EZ)tI6aw5Y&&lA(7
z*#0s63vQmqrXrTW?^_`KpXu->phQS`JW$-nO^wCcdIFFY)a>8P0;B_qmpw}O=d){*
R7*L;UadIXDLr`##GXT|%Rz3g#

delta 332
zcmeyuwuEhi4`V$W0|SEq5dVh)F(6w8h?SsX8c>=QNGkxb9uPA^arMCo!iqrlbRfO~
z#7t1}kPr^W{XjNI4+zIScyaIukmdklP9TQq|Hketbp#|J2*lz@5>t17`Eh14FOzuv
z4xlJI5QDVBwB2HH4v~V2gXCc1Us9GY1#-bwfJ_B>O&*AE0kLOZN@i+FQ9i@J;O1#;
zDq;!zz6H|%nGSDa@GULQOipC@=gh&v_D>Ng&!ijG<SERo_NI>|YVvHR4n^1E<V=Qt
fLCyZnEdLn(1r#rPl<?1I*CsKxe?WtSf`gm^lUz+X

diff --git a/scenes/cards.gd b/scenes/cards.gd
index e6373d3..ee03e89 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -40,7 +40,7 @@ func draw_card(card):
 	
 	new_card.id = card["id"]
 	new_card.command = card["command"]
-	new_card.description = card["description"][helpers.lang]
+	new_card.description = card["description"][game.lang]
 	new_card.energy = 0 #card.energy
 	new_card.position = Vector2(rect_size.x, rect_size.y*2)
 	add_child(new_card)
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index b0c9ad4..1980e63 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -13,7 +13,7 @@ func load(path):
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open("res://levels/" + helpers.lang + "/%s" % slug)
+	dir.open("res://levels/" + game.lang + "/%s" % slug)
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +28,7 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/%s/sequence" % slug, "").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +42,7 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load("res://levels/" + helpers.lang + "/%s/%s" % [slug, l])
+		level.load("res://levels/" + game.lang + "/%s/%s" % [slug, l])
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/game.gd b/scenes/game.gd
index 2f2a0b5..e8d689e 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -1,5 +1,7 @@
 extends Node
 
+var lang = OS.get_locale() # Variable for game localization
+
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
 var global_shell
 var fake_editor
@@ -18,6 +20,7 @@ var state = {}
 var mutex
 
 func _ready():
+	print(lang)
 	mutex = Mutex.new()
 	load_state()
 	
diff --git a/scenes/helpers.gd b/scenes/helpers.gd
index 6d983d7..57dd61f 100644
--- a/scenes/helpers.gd
+++ b/scenes/helpers.gd
@@ -1,7 +1,5 @@
 extends Node
 
-var lang = "it"  # Variable for localization
-
 var debug_file_io = false
 
 # Crash the game and display the error message.
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 07d645c..25593f7 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -9,7 +9,7 @@ func reload():
 	chapters = []
 	
 	var dir = Directory.new()
-	dir.open("res://levels/" + helpers.lang) # TODO: Add language directory to get a correct language
+	dir.open("res://levels/" + game.lang)
 	dir.list_dir_begin()
 
 	var chapter_names = []
@@ -26,7 +26,7 @@ func reload():
 	
 	var final_chapter_sequence = []
 	
-	var chapter_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/sequence", "").split("\n"))
+	var chapter_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/sequence", "").split("\n"))
 	
 	for chapter in chapter_sequence:
 		if chapter == "":
@@ -40,5 +40,5 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load("res://levels/" + helpers.lang + "/%s" % c)
+		chapter.load("res://levels/" + game.lang + "/%s" % c)
 		chapters.push_back(chapter)
diff --git a/scenes/title.gd b/scenes/title.gd
index f2374af..b79d977 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -1,9 +1,13 @@
 extends Control
 
+onready var popup = $VBoxContainer/Language
+
 func _ready():
 	if !OS.has_feature("standalone") and !game.skipped_title:
 		game.skipped_title = true
 		get_tree().change_scene("res://scenes/level_select.tscn")
+	
+	make_popup_item()
 
 func quit():
 	get_tree().quit()
@@ -20,3 +24,38 @@ func sandbox():
 	game.current_chapter = levels.chapters.size() - 1
 	game.current_level = levels.chapters[game.current_chapter].levels.size() -1
 	get_tree().change_scene("res://scenes/main.tscn")
+
+
+func uncheck_all_item():
+	# Set all item unchecked
+	var num = popup.get_popup().get_item_count()
+	for n in num:
+		popup.get_popup().set_item_checked(n, false)
+	pass
+
+
+func make_popup_item():
+	popup.get_popup().add_radio_check_item("en_EN", 0)
+	popup.get_popup().add_radio_check_item(tr("it_IT"), 1)
+	
+	uncheck_all_item()
+	
+	if game.lang == "en_EN":
+		popup.get_popup().set_item_checked(0, true)
+	elif game.lang == "it_IT":
+		popup.get_popup().set_item_checked(1, true)
+	
+	popup.get_popup().connect("id_pressed", self, "_on_item_pressed")
+
+
+func _on_item_pressed(id):
+	uncheck_all_item()
+	
+	popup.get_popup().set_item_checked(id, true)
+	game.lang = popup.get_popup().get_item_text(id)
+
+	
+	TranslationServer.set_locale(game.lang)
+	# DELETE ME
+	print(popup.get_popup().get_item_text(id))
+	print(game.lang)
diff --git a/scenes/title.tscn b/scenes/title.tscn
index 2aa0fe7..d233369 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -66,6 +66,13 @@ margin_right = 351.0
 margin_bottom = 127.0
 text = "QUIT"
 
+[node name="Language" type="MenuButton" parent="VBoxContainer"]
+margin_top = 132.0
+margin_right = 351.0
+margin_bottom = 171.0
+text = "LANGUAGE"
+flat = false
+
 [node name="Sprite" type="Sprite" parent="."]
 
 [node name="oh-my-git" type="Sprite" parent="Sprite"]

From d7b40c56218421f4bf997cab990443b40a002541 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 8 Sep 2021 17:21:23 +0200
Subject: [PATCH 05/49] add org file in gitignore

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 8537f75..0dbc370 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
 /dependencies/
 /build/
 *~
+*.org

From 14e753aadd9a65f40d01ea716c41de19a3db1956 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 8 Sep 2021 17:22:38 +0200
Subject: [PATCH 06/49] add emacs backup files

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 0dbc370..3c165fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
 /build/
 *~
 *.org
+#*#

From 331f08b899a2ee40f2197799fcf3dd271a1d1c75 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 9 Sep 2021 14:26:32 +0200
Subject: [PATCH 07/49] traductions of the levels

---
 levels/it_IT/branches/branch-create | 30 ++++++++++++------------
 levels/it_IT/branches/branch-remove | 36 ++++++++++++++---------------
 levels/it_IT/files/files-add        | 25 ++++++++++----------
 levels/it_IT/files/files-delete     | 24 +++++++++----------
 4 files changed, 57 insertions(+), 58 deletions(-)

diff --git a/levels/it_IT/branches/branch-create b/levels/it_IT/branches/branch-create
index 110d929..428c4a5 100644
--- a/levels/it_IT/branches/branch-create
+++ b/levels/it_IT/branches/branch-create
@@ -1,29 +1,29 @@
-title = Creating branches
+title = Creare ramificazioni
 cards = checkout commit-auto branch branch-delete reset-hard
 
 [description]
 
-You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!
+Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste!
 
-To make it easier to tell which timeline is which, you can create time portals! (We call these "branches".)
+Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs")
 
 [cli]
 
-Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called "birthday", you can type `git checkout birthday` to travel to it!
+Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci.
 
 [setup]
 
-echo "You wrap the birthday present, and grab your concert ticket." > you
+echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you
 git add .
-git commit -m "Evening preparations"
-echo "You go to the birthday party!" >> you
+git commit -m "Preparazione serale"
+echo "Vai alla festa di compleanno!" >> you
 git add .
-git commit -m "Go to the birthday"
+git commit -m "Vai al compleanno"
 
 git checkout HEAD~1
-echo "You go to the concert!" > you
+echo "Vai al concerto!" > you
 git add .
-git commit -m "Go to the concert"
+git commit -m "Vai al concerto"
 
 git checkout HEAD~1
 
@@ -31,14 +31,14 @@ git branch -D main
 
 [win]
 
-# Create a branch called 'birthday' that points to the birthday timeline.
-git show birthday | grep 'to the birthday'
+# Crea un ramo chiamato 'birthday questo punta alla linea temporale del compleanno
+git show birthday | grep 'al compleanno'
 
 # Create a branch called 'concert' that points to the concert timeline.
-git show concert | grep 'to the concert'
+git show concert | grep 'al concerto'
 
 [congrats]
 
-Now you can travel between those branches easily (using `git checkout`) - try it!
+Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova!
 
-Your friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!
+Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay!
diff --git a/levels/it_IT/branches/branch-remove b/levels/it_IT/branches/branch-remove
index 3b576e0..07f8583 100644
--- a/levels/it_IT/branches/branch-remove
+++ b/levels/it_IT/branches/branch-remove
@@ -1,37 +1,37 @@
-title = Deleting branches
+title = Cancellare rami
 cards = checkout commit-auto reset-hard branch-delete
 
 [description]
 
-Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!
+La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi!
 
-This Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around.
+Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro
 
 [setup]
 
-echo You leave your house and start walking to school. > you
+echo Esci di casa e ti incammini verso la scuola. > you
 git add .
-git commit -m "Good morning!"
+git commit -m "Buon giorno!"
 
-echo You walk on the right side of the street. >> you
-git commit -am "Right side"
+echo Cammini nel lato destro della strada. >> you
+git commit -am "Lato destro"
 
-echo You jump over an manhole in the walkway, and arrive at school on time. >> you
-git commit -am "Jump"
+echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you
+git commit -am "Salto"
 
 git checkout HEAD^ -b friend
-echo Suddenly, you fall down, splash into stinking water, and are eaten by an alligator. >> you
-git commit -am "A new friend"
+echo All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori. >> you
+git commit -am "Un nuovo amico"
 
 git checkout HEAD~2 -b music
-echo You walk on the left side of the street. >> you
-git commit -am "Left side"
+echo Cammini nel lato sinistro della strada. >> you
+git commit -am "Lato sinistro"
 
-echo Because you\'re kind of late, you start running. Someone throws a piano out of their windows, and it smashes you. >> you
-git commit -am "Sounds nice"
+echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you
+git commit -am "Bei suoni"
 
 git checkout HEAD^ -b ice-cream
-echo You\'re not in a hurry, and walk slowly. You even get some ice cream on your way. You arrive at school too late, your teacher is angry, and you are expelled. >> you
+echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you
 git commit -am "Yum"
 
 git branch -M main leap
@@ -39,9 +39,9 @@ git checkout leap^^
 
 [win]
 
-# Find the bad branches and delete them. Keep only the best one.
+# Trova i rami cattivi e cancellali. Tieni solo il migliore.
 test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)"
 
 [congrats]
 
-On second thought, maybe you even prefer the ice cream timeline to the main one? :)
+Ripensandoci preferisci la linea temporale del gelato? :)
diff --git a/levels/it_IT/files/files-add b/levels/it_IT/files/files-add
index 0676df6..f0149b9 100644
--- a/levels/it_IT/files/files-add
+++ b/levels/it_IT/files/files-add
@@ -1,32 +1,31 @@
-title = Interior design
+title = Arredatore di interni
 cards = file-new file-delete
 
 [description]
 
-Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,
-you see that their colors match the color of your bed!
+Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso,
+vedi che i loro colori corrispondono al colore del tuo letto!
 
-Build up your two pieces of furniture by playing the touch card.
-Then name your furniture - you can choose whatever you like.
+Costruisci i tuoi due mobili usando la carta touch.
+Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi.
 
-Make sure the colors match! You can find the bed's color in its description.
-Don't forget to add a color and description to your new furnitures, too!
+Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione.
+Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile.
 
 [setup]
-
-echo A yellow cozy bed. > bed
+echo Un accogliente letto giallo. > bed
 
 [win]
 
-# Add two more pieces of furniture
+# Aggiungi altri due mobili
 NUM_FILES="$(ls | wc -l)"
 test "$NUM_FILES" -ge 3
 
-# Make sure the colors match your bed's color.
+# Assicurati che i colori corrispondano a quelle del tuo letto
 NUM_FILES="$(ls | wc -l)"
-YELLOW_FILES="$(grep -li yellow * | wc -l)"
+YELLOW_FILES="$(grep -li giallo * | wc -l)"
 test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES"
 
 [congrats]
 
-Don't you immediately feel more at home?
+Non ti senti già più a casa?
diff --git a/levels/it_IT/files/files-delete b/levels/it_IT/files/files-delete
index 7bf33be..9b207dc 100644
--- a/levels/it_IT/files/files-delete
+++ b/levels/it_IT/files/files-delete
@@ -1,36 +1,36 @@
-title = Unexpected Roommates
+title = Coinquilini inaspettati
 cards = file-delete
 
 [description]
 
-The first day at Time Travel School comes to an end and you receive the key to your room.
-Full of excitement you open the door just to find... spider webs! Spider webs everywhere!
+Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza.
+Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque!
 
-Remove all the spider webs you can find with the remove card!
+Cava tutte le ragnatele che puoi trovare con la carta remove!
 
 [cli]
 
-On the command line, you can easily delete all files ending in -web using this command:
+Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando:
 
     rm *web
 
 [setup]
 
-echo A tiny spider web is next to your window. > tiny_web
-echo A big spider web sticks above your bed. > big_web
-echo A cozy bed. > bed
-echo An extra thick spider web is right beside your door. > thick_web
+echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web
+echo Una grande ragnatela attaccata sopra al tuo letto. > big_web
+echo Un letto accogliente. > bed
+echo Una ragnatela spessa è alla destra della tua porta. > thick_web
 
 [win]
 
-# Remove all spider webs.
+# Rimuovi tutte le ragnatele.
 ! ls | grep thick_web &&
 ! ls | grep big_web &&
 ! ls | grep tiny_web
 
-# But make sure you keep your bed!
+# Ma assicurati di mantenere il tuo letto!
 ls | grep bed
 
 [congrats]
 
-Your room looks now very tidy and cozy! Time to unpack your stuff!
+Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige!

From 68577813c2bc3ccfb550a1fb10a12c45d3b5fdac Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Mon, 13 Sep 2021 17:54:39 +0200
Subject: [PATCH 08/49] some levels translated

---
 levels/it_IT/branches/checkout-commit | 34 ++++++++++-----------
 levels/it_IT/branches/fork            | 44 +++++++++++++--------------
 levels/it_IT/branches/grow            | 31 +++++++++----------
 levels/it_IT/stash/stash-branch       | 23 +++++++-------
 levels/it_IT/stash/stash-clear        | 30 +++++++++---------
 levels/it_IT/stash/stash-merge        | 29 +++++++++---------
 levels/it_IT/stash/stash-pop          | 20 ++++++------
 levels/it_IT/tags/add-tag             | 26 ++++++++--------
 levels/it_IT/tags/add-tag-later       | 26 ++++++++--------
 levels/it_IT/tags/remote-tag          | 30 +++++++++---------
 levels/it_IT/tags/remove-tag          | 22 +++++++-------
 11 files changed, 156 insertions(+), 159 deletions(-)

diff --git a/levels/it_IT/branches/checkout-commit b/levels/it_IT/branches/checkout-commit
index 87061d8..3d913df 100644
--- a/levels/it_IT/branches/checkout-commit
+++ b/levels/it_IT/branches/checkout-commit
@@ -1,43 +1,43 @@
-title = Moving through time
+title = Muoversi attraverso il tempo
 cards = checkout commit-auto
 
 [description]
 
-The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!)
+La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!)
 
-Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!
+Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit!
 
 [cli]
 
-To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!
+Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi!
 
-This will insert the commit's unique identifier!
+Questo inserirà l'identificatore unico del commit!
 
 [setup]
 
-echo "This piggy bank belongs to the big sister.
-It contains 10 coins." > piggy_bank
+echo "Questo salvadanaio appartiene alla sorella maggiore.
+Contiene 10 monete." > piggy_bank
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
-echo "A young girl with brown, curly hair." > little_sister
+echo "Una giovane donna con capelli, ricci, marroni." > little_sister
 git add .
-git commit -m "Little sister comes in"
+git commit -m "La sorella piccola è arrivata"
 
-echo "Has 10 coins." >> little_sister
-echo "This piggy bank belongs to the big sister.
-It is empty." > piggy_bank
+echo "Ha 10 monete." >> little_sister
+echo "Questo salvadanaio appartiene alla sorella maggiore.
+E' vuoto." > piggy_bank
 git add .
-git commit -m "Little sister does something"
+git commit -m "La sorella piccola ha fatto qualcosa"
 
 git checkout HEAD^^
 git branch -df main
 
 [win]
 
-# Restore sisterly peace.
-{ git show HEAD:piggy_bank | grep "10 coins"; } && { git show HEAD:little_sister | grep -v "10 coins"; } && { git rev-parse HEAD^^^; }
+# Ripristina il salvadanaio della sorella.
+{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; }
 
 [congrats]
 
-Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations...
+Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate...
diff --git a/levels/it_IT/branches/fork b/levels/it_IT/branches/fork
index a58dcf5..46b94c6 100644
--- a/levels/it_IT/branches/fork
+++ b/levels/it_IT/branches/fork
@@ -1,65 +1,65 @@
-title = Make parallel commits
+title = Crea universi paralleli
 cards = checkout commit-auto
 
 [description]
 
-Did you know that creating parallel timelines is perfectly legal and safe? It's true!
+Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero!
 
-Can you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!
+Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy!
 
 [cli]
 
-The blue animal represents a concept known as the "HEAD pointer" in Git: It shows you which commit is the current one.
+L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale.
 
-Here's a cool trick to go to the previous commit: 
+Ecco un simpatico trucchetto andare al commit precedente:
 
     git checkout HEAD^
 
-You can also go back two commits by typing, for example: 
+Puoi anche andare indietro di 2 commit digitando, pre esempio:
 
     git checkout HEAD~2
 
 [setup]
 
 mkdir cage
-echo "Looks very hungry." > cage/lion
+echo "Sembra molto affamato." > cage/lion
 
-echo "A small child.
-It really loves cats!" > child
+echo "Un ragazzino..
+Ama veramente i gatti!" > child
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
-echo "It's holding a lollipop." >> child
-git commit -am "The child buys something"
+echo "Tiene in mano un leccalecca." >> child
+git commit -am "Il ragazzo compra qualcosa"
 
 mv child cage
 git add .
-git commit -m "The child climbs somewhere"
+git commit -m "Il bambino si arrampica da qualche parte"
 
 git rm cage/child
-echo "Looks happy. :)" > cage/lion
+echo "E' felice. :)" > cage/lion
 git add .
 git commit -m "Oh no"
 
-echo "It's sleeping." > cage/lion
+echo "Sta dormendo." > cage/lion
 git add .
-git commit -m "Nap time!"
+git commit -m "Ora del pisolino!"
 
 git checkout --detach
 git branch -d main
 
 [win]
 
-# Make sure that the child is happy.
+# Assicurati che il ragazzino sia felice.
 git ls-tree --name-only -r HEAD | grep child
 
-# Make sure that the lion gets something to eat.
-git show HEAD:cage/lion | grep -v "very hungry"
+# Assicurati che il leone abbia qualcosa da mangiare.
+git show HEAD:cage/lion | grep -v "molto affamato"
 
 [congrats]
 
-Whew, good job! This seems like a *much* better outcome.
+Whew, ottimo lavoro! Questo sembra un risultato molto migliore.
 
-Feel free to add more parallel timelines, or make them longer.
+Sentiti libero di aggiungere altre line temporali parallele o allungarle.
 
-If you're ready, our next mission is already waiting...
+Se sei pronto, la prossima missione ci sta aspettando...
diff --git a/levels/it_IT/branches/grow b/levels/it_IT/branches/grow
index 77fe360..d560682 100644
--- a/levels/it_IT/branches/grow
+++ b/levels/it_IT/branches/grow
@@ -1,34 +1,33 @@
-title = Branches grow with you!
+title = I rami crescono con tè!
 cards = checkout commit-auto branch branch-delete reset-hard
 
 [description]
 
-Note that there are two options to "travel to the end of a timeline":
+Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale":
 
-First, you can directly travel to the commit, like we've done it before.
+Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima.
 
-And second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!
+e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale!
 
 [cli]
+Per viaggire in un ramo, digita `git checkout name_of_the_branch`.
 
-To travel to a branch, type `git checkout name_of_the_branch`.
-
-And to travel to the last commit, type `git checkout --detach name_of_the_branch`.
+e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`.
 
 [setup]
 
-echo "You wrap the birthday present, and grab your concert ticket." > you
+echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you
 git add .
-git commit -m "Evening preparations"
-echo "You go to the birthday party!" >> you
+git commit -m "Preparazioni della sera"
+echo "Vai alla festa di compleanno!" >> you
 git add .
-git commit -m "Go to the birthday"
+git commit -m "Vai alla festa di compleanno"
 git branch birthday
 
 git checkout HEAD~1
-echo "You go to the concert!" > you
+echo "Vai al concerto!" > you
 git add .
-git commit -m "Go to the concert"
+git commit -m "Vai al concerto"
 git branch concert
 
 git checkout HEAD~1
@@ -37,7 +36,7 @@ git branch -D main
 
 [win]
 
-# Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit
+# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit
 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
     if test $(git rev-parse $commit^) = $(git rev-parse birthday); then
         return 0
@@ -45,5 +44,5 @@ for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch
 done
 return 1
 
-# Travel to the blue 'concert' branch, make a change to 'you', and a commit.
-git show concert^ | grep "Go to the concert"
+# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit.
+git show concert^ | grep "Vai al concerto"
diff --git a/levels/it_IT/stash/stash-branch b/levels/it_IT/stash/stash-branch
index 16c9eae..e51e4d2 100644
--- a/levels/it_IT/stash/stash-branch
+++ b/levels/it_IT/stash/stash-branch
@@ -1,14 +1,13 @@
-title = Branch from stash
+title = Ramo dalla scorta
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-If you want to keep your changes but they don't belong to the main branch, you can easily
-create a new branch from your stashed changes. Just use
+Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando
     git stash branch <branchname> <stash>
-If you just want to use the latest stash entry, you can leave the <stash> option empty.
+Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione <stash>.
 
-Create a new branch from the stashed changes!
+Crea un nuovo ramo dalle modifiche nascoste!!
 
 ---
 tipp1
@@ -19,24 +18,24 @@ tipp3
 
 [setup]
 
-echo "Apple Pie:" > recipe
+echo "Torta di mele:" > recipe
 
 git add .
-git commit -m "creating a recipe"
+git commit -m "creata una ricetta"
 
-echo "- 4 Apples" >> recipe
+echo "- 4 Mele" >> recipe
 
 git add .
-git commit -m "Adding ingredients"
+git commit -m "Aggiunto ingredienti"
 
-echo "- 500g Flour" >> recipe
+echo "- 500g Farina" >> recipe
 git stash push
 
 git checkout main
 
 [win]
 
-# Did you create a new branch from the stashed changes?
+# Hai creato un nuovo ramo dai cambiamenti nascosti?
 test "$(git branch --list| wc -l)" -ge 2
 
 [actions]
@@ -45,4 +44,4 @@ test "$(git branch --list| wc -l)" -ge 2
 
 [congrats]
 
-Stashed changes are in a new branch! :)
+I cambiamenti nascosti sono nel nuovo ramo! :)
diff --git a/levels/it_IT/stash/stash-clear b/levels/it_IT/stash/stash-clear
index 9a1b697..32f82cb 100644
--- a/levels/it_IT/stash/stash-clear
+++ b/levels/it_IT/stash/stash-clear
@@ -1,17 +1,17 @@
-title = Clear the Stash
+title = Pulire la scorta
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-If you want to inspect your stash stack, use the command
+Se vuoi controllare la tua scorta, usa il comando
     git stash list
-    
-Oh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with
+
+Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con 
     git stash clear
-If you only want to discard a certain stash entry, you can use
+Se vuoi solo scartare un certo elemento dalla scorta, puoi usare
     git stash drop <stash>
     
-Clear your stash stack!
+Pulisci la tua pila di scorta!
 
 ---
 tipp1
@@ -22,30 +22,30 @@ tipp3
 
 [setup]
 
-echo "Apple Pie:" > recipe
+echo "Torta di mele:" > recipe
 
 git add .
-git commit -m "creating a recipe"
+git commit -m "creata una ricetta"
 
-echo "- 4 Apples" >> recipe
+echo "- 4 Mele" >> recipe
 
 git add .
-git commit -m "Adding ingredients"
+git commit -m "Aggiunto ingredienti"
 
-echo "- 500g Flour" >> recipe
+echo "- 500g Farina" >> recipe
 git stash push
 
-echo "- 200g Sugar" >> recipe
+echo "- 200g Zucchero" >> recipe
 git stash push
 
-echo "- Pinch of Salt" >> recipe
+echo "- Pizzico di sale" >> recipe
 git stash push
 
 git checkout main
 
 [win]
 
-# Did you clear your stash stack?
+# Hai pulito la tua pila di scorta?
 test "$(git stash list | wc -l)" -eq 0
 
 [actions]
@@ -54,4 +54,4 @@ test "$(git stash list | wc -l)" -eq 0
 
 [congrats]
 
-All clear! :)
+Pulito tutto! :)
diff --git a/levels/it_IT/stash/stash-merge b/levels/it_IT/stash/stash-merge
index a8c9ac1..a4ed759 100644
--- a/levels/it_IT/stash/stash-merge
+++ b/levels/it_IT/stash/stash-merge
@@ -1,13 +1,12 @@
-title = Merging popped stash
+title = Unire la scorta spuntata
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-When you want to reapply your changes but you already continued working on your file, you might get
-a merge conflict! Let's practise this situation.
-Pop the changes from the stash with
+Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione.
+Fai uscire le modifiche dalla scorta con
     git stash pop
-and resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.
+e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta.
 
 ---
 tipp1
@@ -18,31 +17,31 @@ tipp3
 
 [setup]
 
-echo "Apple Pie:" > recipe
+echo "Torta di mele:" > recipe
 
 git add .
-git commit -m "creating a recipe"
+git commit -m "creata una ricetta"
 
-echo "- 4 Apples" >> recipe
+echo "- 4 Mele" >> recipe
 
 git add .
-git commit -m "Adding ingredients"
+git commit -m "Aggiunti ingredienti"
 
-echo "- 500g Flour" >> recipe
+echo "- 500g Farina" >> recipe
 
 git stash push
 
-echo "- Pinch of Salt" >> recipe
+echo "- Pizzico di sale" >> recipe
 
 git checkout main
 git add recipe
 
 [win]
 
-# Did you resolve the confict and commit?
-{ git show HEAD | grep "Flour"; } && { git show HEAD | grep "Salt"; }
+# Hai rislto i conflitti ed inviato?
+{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; }
 
-# Did you clear stash stack?
+# Hai pulito la pila di scorta?
 test "$(git stash list | wc -l)" -eq 0
 
 [actions]
@@ -51,4 +50,4 @@ test "$(git stash list | wc -l)" -eq 0
 
 [congrats]
 
-Yay, you got your changes back! :)
+Yay, hai riavuto le tue modifiche in dietro! :)
diff --git a/levels/it_IT/stash/stash-pop b/levels/it_IT/stash/stash-pop
index 5ac12d5..cffc30d 100644
--- a/levels/it_IT/stash/stash-pop
+++ b/levels/it_IT/stash/stash-pop
@@ -1,11 +1,11 @@
-title = Pop from Stash
+title = Pop dalla scorta
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-When you stashed your changes and you want to apply them back to your current working directory, you can use
+Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare
     git stash pop
-This will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use
+Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa
     git stash apply
 
 ---
@@ -17,24 +17,24 @@ tipp3
 
 [setup]
 
-echo "Apple Pie:" > recipe
+echo "Torta di mele:" > recipe
 
 git add .
-git commit -m "creating a recipe"
+git commit -m "creata una ricetta"
 
-echo "- 4 Apples" >> recipe
+echo "- 4 Mele" >> recipe
 
 git add .
-git commit -m "Adding ingredients"
+git commit -m "Aggiunto ingredienti"
 
-echo "- 500g Flour" >> recipe
+echo "- 500g Farina" >> recipe
 
 git stash push
 git checkout main
 
 [win]
 
-# Did you pop the changes from the stash stack?
+# Hai pop i cambiamenti dalla pila di scorta?
 test "$(git stash list | wc -l)" -eq 0
 
 [actions]
@@ -43,4 +43,4 @@ test "$(git stash list | wc -l)" -eq 0
 
 [congrats]
 
-Yay, you got your changes back! :)
+Yay, hai riavuto i tuoi cambiamenti in dietro! :)
diff --git a/levels/it_IT/tags/add-tag b/levels/it_IT/tags/add-tag
index 9c5703a..2351635 100644
--- a/levels/it_IT/tags/add-tag
+++ b/levels/it_IT/tags/add-tag
@@ -1,17 +1,17 @@
-title = Creating tags
+title = Creare etichette
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-Some of your commits may be special commits. Maybe you reached a milestone or a new version number.
+Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione.
 
-You can mark these commits with a special flag called 'tag'.
+Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'.
 
-Write 
+Scrivi
 
     git tag <tag-name> 
     
-to tag your commit.
+per etichettare il tuo commit.
 
 ---
 tipp1
@@ -22,26 +22,26 @@ tipp3
 
 [setup]
 
-echo "event 1" > feature-list
+echo "event 1" > elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 1"
+git commit -m "Aggiunta caratteristica 1"
 
-echo "event 2" >> feature-list
+echo "event 2" >> elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 2"
+git commit -m "Aggiunta caratteristica 2"
 
-echo "event 3" >> feature-list
+echo "event 3" >> elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 3"
+git commit -m "Aggiunta caratteristica 3"
 
 git checkout --detach main
 
 [win]
 
-# Did you create a new tag?
+# Hai creato un nuovo tag?
 test "$(git tag -l | wc -l)" -ge 1
 
 [actions]
@@ -50,4 +50,4 @@ test "$(git tag -l | wc -l)" -ge 1
 
 [congrats]
 
-Nice! You tagged your first commit :)
+Bene! Hai etichettato il tuo primo commit :)
diff --git a/levels/it_IT/tags/add-tag-later b/levels/it_IT/tags/add-tag-later
index 905647c..49e17d4 100644
--- a/levels/it_IT/tags/add-tag-later
+++ b/levels/it_IT/tags/add-tag-later
@@ -1,14 +1,14 @@
-title = Tagging later
+title = Etichettare dopo
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-But what happens if you forgot to tag your current commit?
-No Prob! You can also tag older commits via
+Ma cosa succede se ti dimentichi di etichettare il corrente commit?
+No c'è problema! Puoi etichettare i vecchi commit tramite
 
     git tag <tag-name> <commit-hash>
-    
-Tag the commit "Adding feature 2" with the name "v1"!
+
+Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"!
 
 ---
 tipp1
@@ -19,26 +19,26 @@ tipp3
 
 [setup]
 
-echo "event 1" > feature-list
+echo "event 1" > elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 1"
+git commit -m "Aggiunta caratteristica 1"
 
-echo "event 2" >> feature-list
+echo "event 2" >> elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 2"
+git commit -m "Aggiunta caratteristica 2"
 
-echo "event 3" >> feature-list
+echo "event 3" >> elecno-caratteristiche
 
 git add .
-git commit -m "Adding feature 3"
+git commit -m "Aggiunta caratteristica 3"
 
 git checkout --detach main
 
 [win]
 
-# Did you create a new tag?
+# Hai creato una nuova etichetta?
 test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
 
 [actions]
@@ -47,4 +47,4 @@ test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
 
 [congrats]
 
-Well done :)
+Motlo bene :)
diff --git a/levels/it_IT/tags/remote-tag b/levels/it_IT/tags/remote-tag
index 0726915..0a68035 100644
--- a/levels/it_IT/tags/remote-tag
+++ b/levels/it_IT/tags/remote-tag
@@ -1,34 +1,34 @@
-title = Remote Tags
+title = Etichette remote
 cards = pull push commit-auto checkout
 
 [description]
 
-When you work with remote repositories, tags are not pushed or pulled automatically.
+Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente.
 
-You can push a tag with
+Puoi inviare un tag con
     git push <remote> <tag-name>
-Or all tags with:
+O tutti i tags con
     git push <remote> --tags
-    
-Deleting tags on your remote works with: 
+
+Rimuovere i tags nel repository remoto con
     git push <remote> --delete <tag-name>
     
-You can also sync 
+Puoi anche sincronizzare 
     git fetch <remote> --prune --prune-tags
 
 
-Add a tag named "v2" to the last commit and push it to the remote. Also pull the v1 tag to your local repository.
+Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale.
 [setup yours]
 
 git checkout main
 
 git checkout main
-echo "toothbrush sharing" > project-ideas
+echo "Condivisione dello spazzolino" > project-ideas
 git add .
-git commit -m "First idea"
+git commit -m "Prima idea"
 
-echo "Is my phone upside down? App" >> project-ideas
-git commit -am "Another idea"
+echo "Il mio telefono è sottosopra? App" >> project-ideas
+git commit -am "Un'altra idea"
 
 
 
@@ -45,14 +45,14 @@ git branch -u friend/main main
 git tag v1 HEAD~1
 
 [win]
-# v1 tag in your repo
+# v1 tag nel tuo repo
 test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
 
-# v2 tag in your repo
+# v2 tag nel tuo repo
 test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
 
 
 [win friend]
 
-# v2 tag in the remote
+# v2 tag nel remoto
 test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
diff --git a/levels/it_IT/tags/remove-tag b/levels/it_IT/tags/remove-tag
index 98f2800..2d2dfd9 100644
--- a/levels/it_IT/tags/remove-tag
+++ b/levels/it_IT/tags/remove-tag
@@ -1,13 +1,13 @@
-title = Removing tags
+title = Rimuovere etichette
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-You added way too many tags? No prob! Delete them with
+Hai aggiunto molte ectichette? Non c'è problema! Cancellali con
 
     git tag -d <tag-name>
     
-Remove all tags in this repo!
+Rimuovi tutti i tag in questo repository!
 
 ---
 tipp1
@@ -18,20 +18,20 @@ tipp3
 
 [setup]
 
-echo "event 1" > feature-list
+echo "event 1" > elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 1"
+git commit -m "Aggiunta caratteristica 1"
 
-echo "event 2" >> feature-list
+echo "event 2" >> elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 2"
+git commit -m "Aggiunta caratteristica 2"
 
-echo "event 3" >> feature-list
+echo "event 3" >> elenco-caratteristiche
 
 git add .
-git commit -m "Adding feature 3"
+git commit -m "Aggiunta caratteristica 3"
 
 git tag v1 HEAD~2
 git tag v2 HEAD~1
@@ -41,7 +41,7 @@ git checkout --detach main
 
 [win]
 
-# Did you remove all tags?
+# Hai riosso tutte le etichette?
 test "$(git tag -l | wc -l)" -eq 0
 
 [actions]
@@ -50,4 +50,4 @@ test "$(git tag -l | wc -l)" -eq 0
 
 [congrats]
 
-Well done :)
+Molto bene :)

From 5488edcfc3337249b96b7297a2b8c2ea486d61af Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 14 Sep 2021 12:18:31 +0200
Subject: [PATCH 09/49] some traductions

---
 levels/it_IT/branches/reorder |  74 ++++++------
 resources/cards.json          | 214 +++++++++++++++++-----------------
 2 files changed, 144 insertions(+), 144 deletions(-)

diff --git a/levels/it_IT/branches/reorder b/levels/it_IT/branches/reorder
index 1c36c08..d8a0212 100644
--- a/levels/it_IT/branches/reorder
+++ b/levels/it_IT/branches/reorder
@@ -1,89 +1,89 @@
-title = Moving branches around
+title = Muovere i rami
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-One of your colleagues messed up here, and put the branches in the wrong timelines!
+Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate!
 
-You could delete and re-create these branches - but you can also directly move them to different commits, by using
+Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando:
 
     git checkout
 
-on the branch names, and then using
+nel nome della branch e poi usare
 
     git reset --hard
 
-on the commit where you want the branch to be.
+nel commit dove vuoi che la branch vada.
 
-The donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!
+La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch!
 
 [setup]
 
-echo "You do not have a baguette.
+echo "Tu non hai una baguette.
 
-You do not have coffee.
+Non hai un caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 
 git add .
-git commit -m "The Beginning"
+git commit -m "L'inizio"
 
 git checkout -b coffee
-echo "You have a baguette.
+echo "Tu hai una baguette.
 
-You do not have coffee.
+Non hai un caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy a baguette"
+git commit -m "Compri una ciambella"
 
-echo "You ate a baguette.
+echo "Mangi una baguette.
 
-You do not have coffee.
+Non hai un caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You eat the baguette"
+git commit -m "Mangi una baguette"
 
 git checkout -b baguette main
-echo "You do not have a baguette.
+echo "Non hai una ciambella.
 
-You have coffee.
+Hai un caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy some coffee"
+git commit -m "Compri un pò di caffe"
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You drank coffee.
+Hai bevuto caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You drink the coffee"
+git commit -m "Bevi il caffe"
 
 git checkout -b donut main
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You have a donut." > you
+Hai una ciambella." > you
 git add .
-git commit -m "You buy a donut"
+git commit -m "Compri una ciambella"
 
 git checkout --detach main
 
 [win]
 
-# Did you eat a baguette on the baguette branch?
-git show baguette:you | grep "You ate.*baguette"
+# Mangi una baguette nella branch delle baguette?
+git show baguette:you | grep "Mangi.*baguette"
 
-# Did you drink a coffee on the coffee branch?
-git show coffee:you | grep "You drank.*coffee"
+# Bevi un caffe nella branch del caffe?
+git show coffee:you | grep "Bevi.*coffe"
 
-# Did you eat a donut on the donut branch?
-git show donut:you | grep "You ate.*donut"
+# Mangi una ciambella nella branch delle ciambelle?
+git show donut:you | grep "Mangi.*ciambella"
 
 [actions]
 
-test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Remember to checkout the blue branch tag when you want it to grow with the timeline."
+test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale."
diff --git a/resources/cards.json b/resources/cards.json
index d284b4e..e3c9518 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -3,288 +3,288 @@
         "id": "init",
         "command": "git init",
         "description": {
-	    "en": "Drag this card into the empty space above to initialize the time machine!",
-	    "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+	    "en_EN": "Drag this card into the empty space above to initialize the time machine!",
+	    "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
 	}
     },
     {
         "id": "clone",
-        "command": "git clone ../[remote] .",
+        "command": "git_IT clone ../[remote] .",
         "description": {
-	    "en": "Create your own copy of someone else's repo.",
-	    "it": "Crea la copia del Repo di qualcun'altro."
+	    "en_EN": "Create your own copy of someone else's repo.",
+	    "it_IT": "Crea la copia del Repo di qualcun'altro."
 	}
     },
     {
         "id": "config-name",
-        "command": "git config --global user.name [string]",
+        "command": "git_IT config --global user.name [string]",
         "description": {
-	    "en": "Set your name.\n\n(Will not change anything outside of this game.)",
-	    "it": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
+	    "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)",
+	    "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
 	}
     },
     {
         "id": "config-email",
-        "command": "git config --global user.email [string]",
+        "command": "git_IT config --global user.email [string]",
         "description": {
-	    "en": "Set your email address.",
-	    "it": "Imposta la tua e-mail."
+	    "en_EN": "Set your email address.",
+	    "it_IT": "Imposta la tua e-mail."
 	}
     },
     {
         "id": "checkout",
-        "command": "git checkout [commit, ref]",
+        "command": "git_IT checkout [commit_IT, ref]",
         "description": {
-	    "en": "Drag this card to a commit or to a branch to travel to it!",
-	    "it": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento."
+	    "en_EN": "Drag this card to a commit_IT or to a branch to travel to it_IT!",
+	    "it_IT": "Sposta questa carta su un commit_IT o su una branch per viaggiare in quello specifico momen_ENto."
 	}
     },
     {
         "id": "checkout-file",
-        "command": "git checkout [file]",
+        "command": "git_IT checkout [file]",
         "description": {
-	    "en": "Reset changes in a local file.",
-	    "it": "Resetta i cambiamenti in un file locale"
+	    "en_EN": "Reset changes in a local file.",
+	    "it_IT": "Resetta i cambiamen_ENti in un file locale"
 	}
     },
     {
         "id": "checkout-from",
-        "command": "git checkout [commit, ref] [file]",
+        "command": "git_IT checkout [commit_IT, ref] [file]",
         "description": {
-	    "en": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.",
-	    "it": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice."
+	    "en_EN": "Get the file conten_ENts from the specified commit_ITs, and reset both the working directory, as well as the index, to it_IT.",
+	    "it_IT": "Pren_ENdi il conten_ENuto del file da uno specifico commit_ITs e resetta sia la directory di lavoro sia l'indice."
 	}
     },
     {
-        "id": "commit-a",
-        "command": "git commit -a",
+        "id": "commit_IT-a",
+        "command": "git_IT commit_IT -a",
         "description": {
-	    "en": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.",
-	    "it": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
+	    "en_EN": "Make a new commit_IT, after automatically adding all changes to the index.\nYou'll be asked to en_ENter a short description of what you changed.",
+	    "it_IT": "Crea un nuovo commit_IT, dopo aver aggiunto automatico tutti i cambiamen_ENti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
 	}
     },
     {
-        "id": "commit-auto",
-        "command": "git add .; git commit",
+        "id": "commit_IT-auto",
+        "command": "git_IT add .; git_IT commit_IT",
         "description": {
-	    "en": "Make a new commit containing your current environment! Type in a description of what changed!",
-	    "it": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato"
+	    "en_EN": "Make a new commit_IT containing your curren_ENt en_ENvironmen_ENt! Type in a description of what changed!",
+	    "it_IT": "Crea un nuovo commit_IT conten_ENen_ENte il tuo ambien_ENte attuale! Scrivi nella descrizione di cosa hai cambiato"
 	}
     },
     {
         "id": "merge",
-        "command": "git merge [commit, ref]",
+        "command": "git_IT merge [commit_IT, ref]",
         "description": {
-	    "en": "Merge the specified timeline into yours. If necessary, will create a merge commit.",
-	    "it": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione."
+	    "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit_IT.",
+	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit_IT di unione."
 	}
     },
     {
         "id": "merge-abort",
-        "command": "git merge --abort",
+        "command": "git_IT merge --abort",
         "description": {
-	    "en": "Abort the current merge attempt, and reconstruct the previous state.",
-	    "it": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
+	    "en_EN": "Abort the curren_ENt merge attempt, and reconstruct the previous state.",
+	    "it_IT": "Interrompe il corren_ENte ten_ENtativo di unione e ricostruisce lo stato preceden_ENte."
 	}
     },
     {
         "id": "rebase",
-        "command": "git rebase [commit]",
+        "command": "git_IT rebase [commit_IT]",
         "description": {
-	    "en": "Put the events in your current timeline on top of the specified one.",
-	    "it": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato."
+	    "en_EN": "Put the even_ENts in your curren_ENt timeline on top of the specified one.",
+	    "it_IT": "Mette l'even_ENto nella tua, corren_ENte, linea temporale sopra a quello specificato."
 	}
     },
     {
         "id": "pull",
-        "command": "git pull",
+        "command": "git_IT pull",
         "description": {
-	    "en": "Get someone else's version of the current timeline, and try to merge it into yours.",
-	    "it": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua."
+	    "en_EN": "Get someone else's version of the curren_ENt timeline, and try to merge it_IT into yours.",
+	    "it_IT": "Pren_ENde la versione corren_ENte della line temporale di qualcun'altro e prova ad unirla alla tua."
 	}
     },
     {
         "id": "fetch",
-        "command": "git fetch [remote]",
+        "command": "git_IT fetch [remote]",
         "description": {
-	    "en": "Get a someone else's version of the current timeline.",
-	    "it": "Prende la versione, corrente, della linea temporale di qualcun'altro"
+	    "en_EN": "Get a someone else's version of the curren_ENt timeline.",
+	    "it_IT": "Pren_ENde la versione, corren_ENte, della linea temporale di qualcun'altro"
 	}
     },
     {
         "id": "push",
-        "command": "git push",
+        "command": "git_IT push",
         "description": {
-	    "en": "Give the current timeline to someone else.",
-	    "it": "Invia la corrente line temporale a qualcun'altro"
+	    "en_EN": "Give the curren_ENt timeline to someone else.",
+	    "it_IT": "Invia la corren_ENte line temporale a qualcun'altro"
 	}
     },
     {
         "id": "rebase-interactive",
-        "command": "git rebase -i [commit]",
+        "command": "git_IT rebase -i [commit_IT]",
         "description": {
-	    "en": "Make changes to the events in your current timeline, back to the commit you drag this to.",
-	    "it": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini "
+	    "en_EN": "Make changes to the even_ENts in your curren_ENt timeline, back to the commit_IT you drag this to.",
+	    "it_IT": "Apporta modifiche agli even_ENti nella tua timeline corren_ENte, torna al commit_IT su cui lo trascini "
 	}
     },
     {
         "id": "rebase-continue",
-        "command": "git rebase --continue",
+        "command": "git_IT rebase --continue",
         "description": {
-	    "en": "Continue the current rebasing process.",
-	    "it": "Continua il corrente processo di ricostruzione"
+	    "en_EN": "Continue the curren_ENt rebasing process.",
+	    "it_IT": "Continua il corren_ENte processo di ricostruzione"
 	}
     },
     {
         "id": "reset-hard",
-        "command": "git reset --hard [commit]",
+        "command": "git_IT reset --hard [commit_IT]",
         "description": {
-	    "en": "Move the branch you're on to the specified commit.",
-	    "it": "Muove il tuo branch (ramo) nello specifico commit."
+	    "en_EN": "Move the branch you're on to the specified commit_IT.",
+	    "it_IT": "Muove il tuo branch (ramo) nello specifico commit_IT."
 	}
     },
     {
         "id": "reset",
-        "command": "git reset [commit]",
+        "command": "git_IT reset [commit_IT]",
         "description": {
-	    "en": "Jump to the commit, and update the index. Keep the current environment.",
-	    "it": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale."
+	    "en_EN": "Jump to the commit_IT, and update the index. Keep the curren_ENt en_ENvironmen_ENt.",
+	    "it_IT": "Salta alcommit_IT e aggiorna l'indice. Mette l'ambien_ENte attuale."
 	}
     },
     {
         "id": "reset-file",
-        "command": "git reset [file]",
+        "command": "git_IT reset [file]",
         "description": {
-	    "en": "Reset the index version of a file to the version in the commit you're on.",
-	    "it": "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
+	    "en_EN": "Reset the index version of a file to the version in the commit_IT you're on.",
+	    "it_IT": "Resetta la versione dell'indice di un file alla versione del commit_IT in cui sei"
 	}
     },
     {
         "id": "cherry-pick",
-        "command": "git cherry-pick [commit]",
+        "command": "git_IT cherry-pick [commit_IT]",
         "description": {
-	    "en": "Repeat the specified action on top of your current timeline.",
-	    "it": "Ripete l'azione specificata sulla corrente linea temporale"
+	    "en_EN": "Repeat the specified action on top of your curren_ENt timeline.",
+	    "it_IT": "Ripete l'azione specificata sulla corren_ENte linea temporale"
 	}
     },
     {
         "id": "revert",
-        "command": "git revert [commit]",
+        "command": "git_IT revert [commit_IT]",
         "description": {
-	    "en": "Make a new commit that reverts the changes of the speicified commit.",
-	    "it": "Crea un nuovo commit che annula le modifiche dello specifico commit"
+	    "en_EN": "Make a new commit_IT that reverts the changes of the speicified commit_IT.",
+	    "it_IT": "Crea un nuovo commit_IT che annula le modifiche dello specifico commit_IT"
 	}
     },
     {
         "id": "bisect-start",
-        "command": "git bisect start",
+        "command": "git_IT bisect start",
         "description": {
-	    "en": "Start looking for the commit where things got bad.",
-	    "it": "Inizia a cercare il commit dove le cose sono andate storte"
+	    "en_EN": "Start looking for the commit_IT where things got bad.",
+	    "it_IT": "Inizia a cercare il commit_IT dove le cose sono andate storte"
 	}
     },
     {
         "id": "bisect-good",
-        "command": "git bisect good",
+        "command": "git_IT bisect good",
         "description": {
-	    "en": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!"
+	    "en_EN": "State that the curren_ENt commit_IT is good! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it_IT": "Dichiara che l'attuale commit_IT è buono! Continua a giocare con le carte `buone` e `cattive`!"
 	}
     },
     {
         "id": "bisect-bad",
-        "command": "git bisect bad",
+        "command": "git_IT bisect bad",
         "description": {
-	    "en": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
+	    "en_EN": "State that the curren_ENt commit_IT is bad! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it_IT": "Dichiara che l'attuale commit_IT non è valido! Continua a giocare con le carte `buone` e `cattive`!"
 	}
     },
     {
         "id": "add",
-        "command": "git add [file]",
+        "command": "git_IT add [file]",
         "description": {
-	    "en": "Update the index version of the file to its current real content.",
-	    "it": "Aggiorna l'indice del file con il, corrente, reale contenuto."
+	    "en_EN": "Update the index version of the file to it_ITs curren_ENt real conten_ENt.",
+	    "it_IT": "Aggiorna l'indice del file con il, corren_ENte, reale conten_ENuto."
 	}
     },
     {
         "id": "rm",
-        "command": "git rm [file]",
+        "command": "git_IT rm [file]",
         "description": {
-	    "en": "Delete a file both in the working directory, as well as the index.",
-	    "it": "Cancella il file sia dalla corrente directory che dall'indice."
+	    "en_EN": "Delete a file both in the working directory, as well as the index.",
+	    "it_IT": "Cancella il file sia dalla corren_ENte directory che dall'indice."
 	}
     },
     {
-        "id": "commit",
-        "command": "git commit",
+        "id": "commit_IT",
+        "command": "git_IT commit_IT",
         "description": {
-	    "en": "Make a commit from the current index.",
-	    "it": "Crea un commit dal corrente indice."
+	    "en_EN": "Make a commit_IT from the curren_ENt index.",
+	    "it_IT": "Crea un commit_IT dal corren_ENte indice."
 	}
     },
     {
         "id": "show",
-        "command": "git show [commit]",
+        "command": "git_IT show [commit_IT]",
         "description": {
-	    "en": "Show what changed in the commit.",
-	    "it": "Mostra cosa è cambiato nel commit."
+	    "en_EN": "Show what changed in the commit_IT.",
+	    "it_IT": "Mostra cosa è cambiato nel commit_IT."
 	}
     },
     {
         "id": "branch",
-        "command": "git branch [string]",
+        "command": "git_IT branch [string]",
         "description": {
-	    "en": "Create a new branch at your current location.",
-	    "it": "Crea un nuovo branch (ramo) nella tua corrente posizione."
+	    "en_EN": "Create a new branch at your curren_ENt location.",
+	    "it_IT": "Crea un nuovo branch (ramo) nella tua corren_ENte posizione."
 	}
     },
     {
         "id": "branch-delete",
-        "command": "git branch -D [ref]",
+        "command": "git_IT branch -D [ref]",
         "description": {
-	    "en": "Delete a branch.",
-	    "it": "Cancella un branch.(ramo)"
+	    "en_EN": "Delete a branch.",
+	    "it_IT": "Cancella un branch.(ramo)"
 	}
     },
     {
         "id": "reflog",
-        "command": "git reflog [ref, head]",
+        "command": "git_IT reflog [ref, head]",
         "description": {
-	    "en": "Display a log of where the ref pointed to in the past.",
-	    "it": "Mostra un log di dove il riferimento puntava in passato"
+	    "en_EN": "Display a log of where the ref pointed to in the past.",
+	    "it_IT": "Mostra un log di dove il riferimen_ENto puntava in passato"
 	}
     },
     {
         "id": "file-new",
         "command": "touch [string]",
         "description": {
-	    "en": "Create a new file.",
-	    "it": "Crea un nuovo file."
+	    "en_EN": "Create a new file.",
+	    "it_IT": "Crea un nuovo file."
 	}
     },
     {
         "id": "file-delete",
         "command": "rm [file]",
         "description": {
-	    "en": "Delete a file.",
-	    "it": "Cancella un file."
+	    "en_EN": "Delete a file.",
+	    "it_IT": "Cancella un file."
 	}
     },
     {
-        "id": "file-rename",
+        "id": "file-ren_EName",
         "command": "mv [file] [string]",
         "description": {
-	    "en": "Rename a file.",
-	    "it": "Rinomina un file."
+	    "en_EN": "Ren_EName a file.",
+	    "it_IT": "Rinomina un file."
 	}
     },
     {
         "id": "file-copy",
         "command": "cp [file] [string]",
         "description": {
-	    "en": "Make a copy of a file.",
-	    "it": "Crea una copia di un file."
+	    "en_EN": "Make a copy of a file.",
+	    "it_IT": "Crea una copia di un file."
 	}
     }
 ]

From 1dcde8838bc020db8e3ad3c3850915a973979f90 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 14 Sep 2021 15:16:20 +0200
Subject: [PATCH 10/49] cards localization adjustament

---
 resources/cards.json | 182 +++++++++++++++++++++----------------------
 1 file changed, 91 insertions(+), 91 deletions(-)

diff --git a/resources/cards.json b/resources/cards.json
index e3c9518..da97e59 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -1,23 +1,23 @@
 [
     {
-        "id": "init",
-        "command": "git init",
+	"id": "init",
+	"command": "git init",
         "description": {
 	    "en_EN": "Drag this card into the empty space above to initialize the time machine!",
-	    "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+	    "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
 	}
     },
     {
         "id": "clone",
-        "command": "git_IT clone ../[remote] .",
+        "command": "git clone ../[remote] .",
         "description": {
 	    "en_EN": "Create your own copy of someone else's repo.",
-	    "it_IT": "Crea la copia del Repo di qualcun'altro."
+	    "it_IT": "Crea la copiag del Repo di qualcun'altro."
 	}
     },
     {
         "id": "config-name",
-        "command": "git_IT config --global user.name [string]",
+        "command": "git config --global user.name [string]",
         "description": {
 	    "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)",
 	    "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
@@ -25,7 +25,7 @@
     },
     {
         "id": "config-email",
-        "command": "git_IT config --global user.email [string]",
+        "command": "git config --global user.email [string]",
         "description": {
 	    "en_EN": "Set your email address.",
 	    "it_IT": "Imposta la tua e-mail."
@@ -33,215 +33,215 @@
     },
     {
         "id": "checkout",
-        "command": "git_IT checkout [commit_IT, ref]",
+        "command": "git checkout [commit, ref]",
         "description": {
-	    "en_EN": "Drag this card to a commit_IT or to a branch to travel to it_IT!",
-	    "it_IT": "Sposta questa carta su un commit_IT o su una branch per viaggiare in quello specifico momen_ENto."
+	    "en_EN": "Drag this card to a commit or to a branch to travel to it!",
+	    "it_IT": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento."
 	}
     },
     {
         "id": "checkout-file",
-        "command": "git_IT checkout [file]",
+        "command": "git checkout [file]",
         "description": {
 	    "en_EN": "Reset changes in a local file.",
-	    "it_IT": "Resetta i cambiamen_ENti in un file locale"
+	    "it_IT": "Resetta i cambiamenti in un file locale"
 	}
     },
     {
         "id": "checkout-from",
-        "command": "git_IT checkout [commit_IT, ref] [file]",
+        "command": "git checkout [commit, ref] [file]",
         "description": {
-	    "en_EN": "Get the file conten_ENts from the specified commit_ITs, and reset both the working directory, as well as the index, to it_IT.",
-	    "it_IT": "Pren_ENdi il conten_ENuto del file da uno specifico commit_ITs e resetta sia la directory di lavoro sia l'indice."
+	    "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.",
+	    "it_IT": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice."
 	}
     },
     {
-        "id": "commit_IT-a",
-        "command": "git_IT commit_IT -a",
+        "id": "commit-a",
+        "command": "git commit -a",
         "description": {
-	    "en_EN": "Make a new commit_IT, after automatically adding all changes to the index.\nYou'll be asked to en_ENter a short description of what you changed.",
-	    "it_IT": "Crea un nuovo commit_IT, dopo aver aggiunto automatico tutti i cambiamen_ENti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
+	    "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.",
+	    "it_IT": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
 	}
     },
     {
-        "id": "commit_IT-auto",
-        "command": "git_IT add .; git_IT commit_IT",
+        "id": "commit-auto",
+        "command": "git add .; git commit",
         "description": {
-	    "en_EN": "Make a new commit_IT containing your curren_ENt en_ENvironmen_ENt! Type in a description of what changed!",
-	    "it_IT": "Crea un nuovo commit_IT conten_ENen_ENte il tuo ambien_ENte attuale! Scrivi nella descrizione di cosa hai cambiato"
+	    "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!",
+	    "it_IT": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato"
 	}
     },
     {
         "id": "merge",
-        "command": "git_IT merge [commit_IT, ref]",
+        "command": "git merge [commit, ref]",
         "description": {
-	    "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit_IT.",
-	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit_IT di unione."
+	    "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.",
+	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione."
 	}
     },
     {
         "id": "merge-abort",
-        "command": "git_IT merge --abort",
+        "command": "git merge --abort",
         "description": {
-	    "en_EN": "Abort the curren_ENt merge attempt, and reconstruct the previous state.",
-	    "it_IT": "Interrompe il corren_ENte ten_ENtativo di unione e ricostruisce lo stato preceden_ENte."
+	    "en_EN": "Abort the current merge attempt, and reconstruct the previous state.",
+	    "it_IT": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
 	}
     },
     {
         "id": "rebase",
-        "command": "git_IT rebase [commit_IT]",
+        "command": "git rebase [commit]",
         "description": {
-	    "en_EN": "Put the even_ENts in your curren_ENt timeline on top of the specified one.",
-	    "it_IT": "Mette l'even_ENto nella tua, corren_ENte, linea temporale sopra a quello specificato."
+	    "en_EN": "Put the events in your current timeline on top of the specified one.",
+	    "it_IT": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato."
 	}
     },
     {
         "id": "pull",
-        "command": "git_IT pull",
+        "command": "git pull",
         "description": {
-	    "en_EN": "Get someone else's version of the curren_ENt timeline, and try to merge it_IT into yours.",
-	    "it_IT": "Pren_ENde la versione corren_ENte della line temporale di qualcun'altro e prova ad unirla alla tua."
+	    "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.",
+	    "it_IT": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua."
 	}
     },
     {
         "id": "fetch",
-        "command": "git_IT fetch [remote]",
+        "command": "git fetch [remote]",
         "description": {
-	    "en_EN": "Get a someone else's version of the curren_ENt timeline.",
-	    "it_IT": "Pren_ENde la versione, corren_ENte, della linea temporale di qualcun'altro"
+	    "en_EN": "Get a someone else's version of the current timeline.",
+	    "it_IT": "Prende la versione, corrente, della linea temporale di qualcun'altro"
 	}
     },
     {
         "id": "push",
-        "command": "git_IT push",
+        "command": "git push",
         "description": {
-	    "en_EN": "Give the curren_ENt timeline to someone else.",
-	    "it_IT": "Invia la corren_ENte line temporale a qualcun'altro"
+	    "en_EN": "Give the current timeline to someone else.",
+	    "it_IT": "Invia la corrente line temporale a qualcun'altro"
 	}
     },
     {
         "id": "rebase-interactive",
-        "command": "git_IT rebase -i [commit_IT]",
+        "command": "git rebase -i [commit]",
         "description": {
-	    "en_EN": "Make changes to the even_ENts in your curren_ENt timeline, back to the commit_IT you drag this to.",
-	    "it_IT": "Apporta modifiche agli even_ENti nella tua timeline corren_ENte, torna al commit_IT su cui lo trascini "
+	    "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.",
+	    "it_IT": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini "
 	}
     },
     {
         "id": "rebase-continue",
-        "command": "git_IT rebase --continue",
+        "command": "git rebase --continue",
         "description": {
-	    "en_EN": "Continue the curren_ENt rebasing process.",
-	    "it_IT": "Continua il corren_ENte processo di ricostruzione"
+	    "en_EN": "Continue the current rebasing process.",
+	    "it_IT": "Continua il corrente processo di ricostruzione"
 	}
     },
     {
         "id": "reset-hard",
-        "command": "git_IT reset --hard [commit_IT]",
+        "command": "git reset --hard [commit]",
         "description": {
-	    "en_EN": "Move the branch you're on to the specified commit_IT.",
-	    "it_IT": "Muove il tuo branch (ramo) nello specifico commit_IT."
+	    "en_EN": "Move the branch you're on to the specified commit.",
+	    "it_IT": "Muove il tuo branch (ramo) nello specifico commit."
 	}
     },
     {
         "id": "reset",
-        "command": "git_IT reset [commit_IT]",
+        "command": "git reset [commit]",
         "description": {
-	    "en_EN": "Jump to the commit_IT, and update the index. Keep the curren_ENt en_ENvironmen_ENt.",
-	    "it_IT": "Salta alcommit_IT e aggiorna l'indice. Mette l'ambien_ENte attuale."
+	    "en_EN": "Jump to the commit, and update the index. Keep the current environment.",
+	    "it_IT": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale."
 	}
     },
     {
         "id": "reset-file",
-        "command": "git_IT reset [file]",
+        "command": "git reset [file]",
         "description": {
-	    "en_EN": "Reset the index version of a file to the version in the commit_IT you're on.",
-	    "it_IT": "Resetta la versione dell'indice di un file alla versione del commit_IT in cui sei"
+	    "en_EN": "Reset the index version of a file to the version in the commit you're on.",
+	    "it_IT": "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
 	}
     },
     {
         "id": "cherry-pick",
-        "command": "git_IT cherry-pick [commit_IT]",
+        "command": "git cherry-pick [commit]",
         "description": {
-	    "en_EN": "Repeat the specified action on top of your curren_ENt timeline.",
-	    "it_IT": "Ripete l'azione specificata sulla corren_ENte linea temporale"
+	    "en_EN": "Repeat the specified action on top of your current timeline.",
+	    "it_IT": "Ripete l'azione specificata sulla corrente linea temporale"
 	}
     },
     {
         "id": "revert",
-        "command": "git_IT revert [commit_IT]",
+        "command": "git revert [commit]",
         "description": {
-	    "en_EN": "Make a new commit_IT that reverts the changes of the speicified commit_IT.",
-	    "it_IT": "Crea un nuovo commit_IT che annula le modifiche dello specifico commit_IT"
+	    "en_EN": "Make a new commit that reverts the changes of the speicified commit.",
+	    "it_IT": "Crea un nuovo commit che annula le modifiche dello specifico commit"
 	}
     },
     {
         "id": "bisect-start",
-        "command": "git_IT bisect start",
+        "command": "git bisect start",
         "description": {
-	    "en_EN": "Start looking for the commit_IT where things got bad.",
-	    "it_IT": "Inizia a cercare il commit_IT dove le cose sono andate storte"
+	    "en_EN": "Start looking for the commit where things got bad.",
+	    "it_IT": "Inizia a cercare il commit dove le cose sono andate storte"
 	}
     },
     {
         "id": "bisect-good",
-        "command": "git_IT bisect good",
+        "command": "git bisect good",
         "description": {
-	    "en_EN": "State that the curren_ENt commit_IT is good! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it_IT": "Dichiara che l'attuale commit_IT è buono! Continua a giocare con le carte `buone` e `cattive`!"
+	    "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!"
 	}
     },
     {
         "id": "bisect-bad",
-        "command": "git_IT bisect bad",
+        "command": "git bisect bad",
         "description": {
-	    "en_EN": "State that the curren_ENt commit_IT is bad! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it_IT": "Dichiara che l'attuale commit_IT non è valido! Continua a giocare con le carte `buone` e `cattive`!"
+	    "en_EN": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!",
+	    "it_IT": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
 	}
     },
     {
         "id": "add",
-        "command": "git_IT add [file]",
+        "command": "git add [file]",
         "description": {
-	    "en_EN": "Update the index version of the file to it_ITs curren_ENt real conten_ENt.",
-	    "it_IT": "Aggiorna l'indice del file con il, corren_ENte, reale conten_ENuto."
+	    "en_EN": "Update the index version of the file to its current real content.",
+	    "it_IT": "Aggiorna l'indice del file con il, corrente, reale contenuto."
 	}
     },
     {
         "id": "rm",
-        "command": "git_IT rm [file]",
+        "command": "git rm [file]",
         "description": {
 	    "en_EN": "Delete a file both in the working directory, as well as the index.",
-	    "it_IT": "Cancella il file sia dalla corren_ENte directory che dall'indice."
+	    "it_IT": "Cancella il file sia dalla corrente directory che dall'indice."
 	}
     },
     {
-        "id": "commit_IT",
-        "command": "git_IT commit_IT",
+        "id": "commit",
+        "command": "git commit",
         "description": {
-	    "en_EN": "Make a commit_IT from the curren_ENt index.",
-	    "it_IT": "Crea un commit_IT dal corren_ENte indice."
+	    "en_EN": "Make a commit from the current index.",
+	    "it_IT": "Crea un commit dal corrente indice."
 	}
     },
     {
         "id": "show",
-        "command": "git_IT show [commit_IT]",
+        "command": "git show [commit]",
         "description": {
-	    "en_EN": "Show what changed in the commit_IT.",
-	    "it_IT": "Mostra cosa è cambiato nel commit_IT."
+	    "en_EN": "Show what changed in the commit.",
+	    "it_IT": "Mostra cosa è cambiato nel commit."
 	}
     },
     {
         "id": "branch",
-        "command": "git_IT branch [string]",
+        "command": "git branch [string]",
         "description": {
-	    "en_EN": "Create a new branch at your curren_ENt location.",
-	    "it_IT": "Crea un nuovo branch (ramo) nella tua corren_ENte posizione."
+	    "en_EN": "Create a new branch at your current location.",
+	    "it_IT": "Crea un nuovo branch (ramo) nella tua corrente posizione."
 	}
     },
     {
         "id": "branch-delete",
-        "command": "git_IT branch -D [ref]",
+        "command": "git branch -D [ref]",
         "description": {
 	    "en_EN": "Delete a branch.",
 	    "it_IT": "Cancella un branch.(ramo)"
@@ -249,10 +249,10 @@
     },
     {
         "id": "reflog",
-        "command": "git_IT reflog [ref, head]",
+        "command": "git reflog [ref, head]",
         "description": {
 	    "en_EN": "Display a log of where the ref pointed to in the past.",
-	    "it_IT": "Mostra un log di dove il riferimen_ENto puntava in passato"
+	    "it_IT": "Mostra un log di dove il riferimento puntava in passato"
 	}
     },
     {
@@ -272,10 +272,10 @@
 	}
     },
     {
-        "id": "file-ren_EName",
+        "id": "file-rename",
         "command": "mv [file] [string]",
         "description": {
-	    "en_EN": "Ren_EName a file.",
+	    "en_EN": "Rename a file.",
 	    "it_IT": "Rinomina un file."
 	}
     },

From f98922ca5cce9edd50b56e8aaac379f3c8d2a6ad Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 14 Sep 2021 15:25:00 +0200
Subject: [PATCH 11/49] now is right the card_draw

---
 resources/cards.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resources/cards.json b/resources/cards.json
index da97e59..6eac0d6 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -4,7 +4,7 @@
 	"command": "git init",
         "description": {
 	    "en_EN": "Drag this card into the empty space above to initialize the time machine!",
-	    "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+	    "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
 	}
     },
     {

From 90574216dcd9be17dcce8414366295563204115e Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 14 Sep 2021 17:03:17 +0200
Subject: [PATCH 12/49] some traductions

---
 levels/it_IT/index/#sequence# |  5 +++
 levels/it_IT/index/change     | 20 +++++------
 levels/it_IT/index/compare    | 42 +++++++++++-----------
 levels/it_IT/index/new        | 18 +++++-----
 levels/it_IT/index/reset      | 28 +++++++--------
 levels/it_IT/index/steps      | 22 ++++++------
 levels/it_IT/merge/conflict   | 26 +++++++-------
 levels/it_IT/merge/merge      | 68 +++++++++++++++++------------------
 levels/it_IT/remotes/friend   | 30 ++++++++--------
 levels/it_IT/remotes/problems | 18 +++++-----
 10 files changed, 141 insertions(+), 136 deletions(-)
 create mode 100644 levels/it_IT/index/#sequence#

diff --git a/levels/it_IT/index/#sequence# b/levels/it_IT/index/#sequence#
new file mode 100644
index 0000000..42f7f48
--- /dev/null
+++ b/levels/it_IT/index/#sequence#
@@ -0,0 +1,5 @@
+compare
+new
+change
+reset
+steps
diff --git a/levels/it_IT/index/change b/levels/it_IT/index/change
index f1e377d..6b701e3 100644
--- a/levels/it_IT/index/change
+++ b/levels/it_IT/index/change
@@ -1,31 +1,31 @@
-title = Update files in the index
+title = Aggiorna i file nell'indice
 cards = add commit
 
 [description]
 
-When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.
+Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice della versione cambiata dei file..
 
-Let's try that!
+Proviamoci!
 
-The icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!
+Le icona nel browser dei file mostrano quando il file attuale (bianco) e la versione nell'indice (blu) sono differenti o quando sono uguali!
 
 [win]
 
-Good! The index is sometimes also called the "staging area" - it contains exactly what ends up in the next commit when you use `git commit`!
+Bene! L'indice, a volte, può essere chiamato "staging are" - Contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`!
 
 [setup]
 
-echo "The candle is burning with a blue flame." > candle
+echo "La candela brucia con una fiamma blue." > candle
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
 [win]
 
-# Make a change to the candle.
+# Fai una modifica alla candela
 test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed
 
-# Add the candle.
+# Aggiungi la candella.
 test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
 
-# Make a commit.
+# Fai un commit.
 test "$(git diff --name-only HEAD HEAD^)" = "candle"
diff --git a/levels/it_IT/index/compare b/levels/it_IT/index/compare
index 97fa6c7..4f4cf8f 100644
--- a/levels/it_IT/index/compare
+++ b/levels/it_IT/index/compare
@@ -1,51 +1,51 @@
-title = Step by step
+title = Passo dopo passo
 cards = checkout commit-auto
 
 [description]
 
-Welcome to today's lesson! We're going to learn how to make commits with more precision!
+Benvenuto nella lezione di oggi! Siamo impareremo come creare commits con più precisione!
 
-Have a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened.
+Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato ma una di loro rende più semplice capire cosa è successo.
 
 [win]
 
-# Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that!
+# Pronti! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo!
 git branch --show-current | grep step-by-step
 
 [setup]
 
-echo "A small, but heavy glass ball." > ball
-echo "A thin book, that's standing upright." > book
-echo "A candle, burning with a blue flame." > candle
-echo "A smoke detector. It's absolutely silent." > smoke_detector
+echo "Una piccola ma pesante palla di vetro." > ball
+echo "Un sottile libro che sta in piedi." > book
+echo "Una candela brucia con una fiamma blue." > candle
+echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector
 
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
 git branch -M all-at-once
 
-echo "The ball is now touching the book." > ball
-echo "The book has fallen over." > book
-echo "The candle has been blown out." > candle
+echo "La palla adesso tocca il libro." > ball
+echo "Il libro è caduto." > book
+echo "La candella è stata spenta." > candle
 
-git commit -am "The end"
+git commit -am "La fine"
 
 git checkout HEAD^
 
 git checkout -b step-by-step
 
-echo "The ball is now touching the book." > ball
-git commit -am "The ball rolls towards the book"
+echo "La palla adesso tocca il libro." > ball
+git commit -am "La palla rotola verso il libro"
 
-echo "The book has fallen over." > book
-git commit -am "The book falls over"
+echo "Il libro è caduto." > book
+git commit -am "Il libro è caduto"
 
-echo "The candle has been blown out." > candle
-git commit -am "The book blows out the candle"
+echo "La candela è stata spenta." > candle
+git commit -am "Il libro ha spento la candela"
 
 git checkout HEAD~3
 
 [win]
 
-# Pick the timeline that's clearer, and make the alarm go off!
-git show step-by-step:smoke_detector | tail -n 1 | grep -v "absolutely silent"
+# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo!
+git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso"
diff --git a/levels/it_IT/index/new b/levels/it_IT/index/new
index 4df3930..cae2465 100644
--- a/levels/it_IT/index/new
+++ b/levels/it_IT/index/new
@@ -1,28 +1,28 @@
-title = Add new files to the index
+title = Aggiungi nuovi file all'indice
 cards = add commit
 
 [description]
 
-So far, when we made a commit, we've always recorded the current status of all objects, right?
+Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero?
 
-But Git allows you to pick which changes you want to put in a commit!
+Ma Git ti permette di prendere i cambiamenti che voui mettere in un commit!
 
-To learn how that works, we need to learn about the "index"! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!
+Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel browser dei file!
 
-Initially, the index is empty. To make a commit that contains a new file, we need to add it!
+Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo!
 
 [cli]
 
-You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!
+Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere un nome file e premi il tasto tab per completare il nome. Questo ti permette di risparmiare tempo!
 
 [setup]
 
-echo "The candle is burning with a blue flame." > candle
+echo "La candela brucia con una fiamma blue." > candle
 
 [win]
 
-# Add the candle.
+# Aggiungi la candela.
 test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
 
-# Make a commit.
+# Crea un commit.
 test "$(git ls-tree --name-only HEAD)" = "candle"
diff --git a/levels/it_IT/index/reset b/levels/it_IT/index/reset
index 5e21973..56aa6d7 100644
--- a/levels/it_IT/index/reset
+++ b/levels/it_IT/index/reset
@@ -1,37 +1,37 @@
-title = Resetting files in the index
+title = Resetta i file nell'indice
 cards = add reset-file commit
 
 [description]
 
-See the dark shadow behind the icons? That's the version of the file in the last commit!
+Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit!
 
-For example, these candles have been blown out, and that change has been added.
+Per esempio, queste candele sono state spente e quella modifica è stata aggiunta!
 
-But you decide that this was a mistake! You only want to blow out the red candle in the next commit!
+Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit!
 
-If you already have updated the index to a changed file, but want to reset it, you can use `git reset`!
+Se hai già giornato l'indice di un file modificato, ma vuoi ripristinarlo, puoi usare `git reset`!
 
 [setup]
 
-echo "It's burning!" > red_candle
-echo "It's burning!" > green_candle
-echo "It's burning!" > blue_candle
+echo "Sta bruciando!" > red_candle
+echo "Sta bruciando!" > green_candle
+echo "Sta bruciando!" > blue_candle
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
-echo "It's been blown out." > red_candle
-echo "It's been blown out." > green_candle
-echo "It's been blown out." > blue_candle
+echo "E' stata spenta." > red_candle
+echo "E' stata spenta." > green_candle
+echo "E' stata spenta." > blue_candle
 git add .
 
 [win]
 
-# Reset the changes in the green and blue candles!
+# Ripristina i cambiamenti nella candella verde e blu!
 git show :green_candle | grep burning &&
 git show :blue_candle | grep burning &&
 git show :red_candle | grep -v burning
 
-# And make a commit!
+# E fai un commit
 git show main:green_candle | grep burning &&
 git show main:blue_candle | grep burning &&
 git show main:red_candle | grep -v burning
diff --git a/levels/it_IT/index/steps b/levels/it_IT/index/steps
index 36e7500..b7700a1 100644
--- a/levels/it_IT/index/steps
+++ b/levels/it_IT/index/steps
@@ -1,28 +1,28 @@
-title = Adding changes step by step
+title = Aggiungi modifice passo dopo passo
 cards = add reset-file commit
 
 [description]
 
-The index is really useful, because it allows us to be precise about which changes we want to include in each commit!
+L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit!
 
 [setup]
 
-echo "A hammer, balancing on its handle." > hammer
-echo "A bottle, containing a clear liquid." > bottle
-echo "A white sugar cube." > sugar_cube
+echo "Un martello, in equilibrio sul suo manico." > hammer
+echo "Una bottiglia contenente un liquido trasparente." > bottle
+echo "Un cubo di zucche bianco." > sugar_cube
 
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
 [win]
 
-# Make changes to all three objects, to form a logical sequence of events!
+# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi!
 test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed
 
-# Only add one of these changes!
+# Aggiungi solo uno dei cambiamenti!
 test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added
 
-# And make a commit.
+# E fai un commit
 COUNT=0
 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
     if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
@@ -32,7 +32,7 @@ done
 
 test "$COUNT" -ge 1
 
-# Make a second commit that only records a single change.
+# Fai un secondo commit che registri solo un singolo cambiamento.
 COUNT=0
 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
     if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
@@ -42,7 +42,7 @@ done
 
 test "$COUNT" -ge 2
 
-# And a third one.
+# E aggiungine un terzo.
 COUNT=0
 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
     if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
diff --git a/levels/it_IT/merge/conflict b/levels/it_IT/merge/conflict
index 1a8b02b..e7c37fa 100644
--- a/levels/it_IT/merge/conflict
+++ b/levels/it_IT/merge/conflict
@@ -1,47 +1,47 @@
-title = Contradictions
+title = Contraddizioni
 cards = checkout commit-auto merge reset-hard
 
 [description]
 
-Sometimes, timelines will contradict each other.
+A volte le linee temporali si contraddicono a vicenda.
 
-For example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.
+Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali.
 
-Try to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!
+Prova ad unirle insieme! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare gli elementi, ti mostrerà le sezione in conflitti. Puoi scegliere una delle due versioni o creare una combinazione di esse! Rimuovi i markers >>>, <<<, e === e crea un nuovo commit per finalizare l'unione!
 
-Let your finalized timeline be the "main" one.
+Lascia che la tua linea temporale definitiva sia "main".
 
 [setup]
 
-echo "Just woke up. Is hungry." > sam
+echo "Appena sveglio. Sei affamato." > sam
 git add .
-git commit -m "The beginning"
+git commit -m "L'inizio"
 
 git checkout -b pancakes
-echo "Had blueberry pancakes with maple syrup for breakfast." > sam
+echo "Avevamo pancakes con mirtilli e sciroppo d'acero per colazione." > sam
 git add .
 git commit -m "Pancakes!"
 
 echo "
 Is at work." >> sam
-git commit -am "Go to work"
+git commit -am "Vai a lavoro"
 
 git checkout -b muesli main
-echo "Had muesli with oats and strawberries for breakfast." > sam
+echo "Avevamo muesli con avena e fragole per colazione." > sam
 git add .
 git commit -m "Muesli!"
 
 echo "
 Is at work." >> sam
-git commit -am "Go to work"
+git commit -am "Vai a lavoro"
 
 git checkout main
 
 [win]
 
-# Make a breakfast compromise in the 'main' branch.
+# Crea un compromesso nella colazione del branch "main".
 git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)"
 
 [congrats]
 
-Yum, that sounds like a good breakfast!
+Yum, questa sembra una buona colazione!
diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge
index 8b45d06..b23b023 100644
--- a/levels/it_IT/merge/merge
+++ b/levels/it_IT/merge/merge
@@ -1,82 +1,82 @@
-title = Merging timelines
+title = Unire le linee temporali
 cards = checkout commit-auto merge
 
 [description]
 
-Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!
+Ecco un trucco per domire un pò più a lungo: fai tutte le tue attività, in universi paralleli, e poi uniscile!
 
 [setup]
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 
 git add .
-git commit -m "The Beginning"
+git commit -m "L'inizio"
 
-echo "You have a baguette.
+echo "Hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy a baguette"
+git commit -m "Compri una baguette"
 
-echo "You ate a baguette.
+echo "Mangi una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You eat the baguette"
+git commit -m "Mangi la baguette"
 
 git checkout HEAD~2
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You have coffee.
+Hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy some coffee"
+git commit -m "Compri un pò di caffe"
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You drank coffee.
+Bevi caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You drink the coffee"
+git commit -m "Bevi il caffe"
 
 git checkout HEAD~2
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You have a donut." > you
+Hai una ciambella." > you
 git add .
-git commit -m "You buy a donut"
+git commit -m "Compri una ciambella"
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You ate a donut." > you
+Mangi una ciambella." > you
 git add .
-git commit -m "You eat the donut"
+git commit -m "Mangi la ciambella"
 
 git checkout --detach
 git branch -D main
 
 [win]
 
-# Build a situation where you consumed a baguette, a coffee, *and* a donut.
-{ git show HEAD:you | grep "You ate.*baguette"; } && { git show HEAD:you | grep "You drank.*coffee"; } && { git show HEAD:you | grep "You ate.*donut"; }
+# Crea una situazione dove consumi una baguette, un caffe e una ciambella.
+{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; }
 
-# Be on a merge commit.
+# E' un commit di unione.
 test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
 
 [congrats]
 
-I wonder if you're more relaxed when you *sleep* in parallel timelines...
+Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele...
diff --git a/levels/it_IT/remotes/friend b/levels/it_IT/remotes/friend
index 1b70f33..771db17 100644
--- a/levels/it_IT/remotes/friend
+++ b/levels/it_IT/remotes/friend
@@ -1,47 +1,47 @@
-title = Friend
+title = Amico
 cards = pull push commit-auto checkout
 
 [description]
 
-Your friend added another line to your essay! Get it, add a third one and send it to them!
+Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo a loro!
 
-Take turns until you have five lines!
+A turno fino a che non ti ritrovi ad avere cinque linee!
 
 [setup yours]
 
-echo "Line 1" > essay
+echo "Linea 1" > essay
 git add .
-git commit -m "One line"
+git commit -m "Una linea"
 
 git push -u friend main
 
 [setup friend]
 
 git checkout main
-echo "Line 2, gnihihi" >> essay
-git commit -am "Another line"
+echo "Linea 2, gnihihi" >> essay
+git commit -am "Un'altra linea"
 
 [actions friend]
 
 if test "$(git log --oneline | wc -l)" -eq 3; then
-    git reset --hard main # Necessary because the working directory isn't updated when we push to the friend.
-    echo "Line 4, blurbblubb" >> essay
-    git commit -am "Final line"
-    hint "Oh nice, I added a fourth line!"
+    git reset --hard main # Necessario perché la directory di lavoro non è aggiornata fintanto che non viene inviata all'amico
+    echo "Linea 4, blurbblubb" >> essay
+    git commit -am "Linea finale"
+    hint "Oh bene, Ho aggiunt la quarta linea!"
 fi
 
 [win]
 
-# Got the second line from your friend
+# Ricevuto la seconda linea dal tuo amico.
 git show HEAD:essay | grep gnihihi
 
-# Got the fourth line from your friend.
+# Ricevuto la quarta linea dal tuo amico.
 git show HEAD:essay | grep blurbblubb
 
 [win friend]
 
-# The friend got a third line from you
+# L'amico ha ricevuto la terza linea da te.
 test "$(git show HEAD:essay | wc -l)" -ge 3
 
-# The friend got a fifth line from you
+# L'amico ha ricevuto la quinta linea da te.
 test "$(git show HEAD:essay | wc -l)" -ge 5
diff --git a/levels/it_IT/remotes/problems b/levels/it_IT/remotes/problems
index fab71c5..068292a 100644
--- a/levels/it_IT/remotes/problems
+++ b/levels/it_IT/remotes/problems
@@ -1,33 +1,33 @@
-title = Problems
+title = Problemi
 cards = checkout add pull push commit-auto merge
 
 [description]
 
-Both you and your friend have been working on the file, and want to sync up!
+Entrambi, tu ed il tuo amicp, avete lavorato sullo stesso file e volete sincronizare!
 
 [setup yours]
 
-echo "The bike shed should be ???" > file
+echo "Il capannone delle bici dovrebbe essere ???" > file
 git add .
-git commit -m "initial"
+git commit -m "inizio"
 
 git push -u friend main
 
-echo "The bike shed should be green" > file
+echo "Il capannone delle bici dovrebbe essere verde" > file
 
 [setup friend]
 
 git checkout main
 
-echo "The bike shed should be blue" > file
-git commit -a -m "friends version"
+echo "Il capannone delle bici dovrebbe essere blue" > file
+git commit -a -m "versione dell'amico"
 
 [win]
 
-# Commit your local changes.
+# Invia le tue modifiche locali.
 test "$(git status -s)" = ""
 
 [win friend]
 
-# Look at your friend's suggestion, make a compromise, and push it back.
+# Quarda il suggerimento dell'amico, fai un compromesso e rimandalo in dietro.
 git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)"

From 086922d0c9cf97eff1057a45fdbebc6713b8d728 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 14 Sep 2021 18:06:29 +0200
Subject: [PATCH 13/49] add some localizations and levels traductions

---
 levels/it_IT/bisect/bisect             |  24 ++++++++++++------------
 levels/it_IT/workflows/pr              |   8 ++++----
 resources/localizations.csv            |  13 ++++++++++++-
 resources/localizations.en.translation | Bin 865 -> 1285 bytes
 resources/localizations.it.translation | Bin 884 -> 1324 bytes
 scenes/notification.gd                 |  12 +++++++++++-
 scenes/terminal.gd                     |   2 +-
 scenes/terminal.tscn                   |   1 +
 8 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/levels/it_IT/bisect/bisect b/levels/it_IT/bisect/bisect
index 0b66edb..a80e2e8 100644
--- a/levels/it_IT/bisect/bisect
+++ b/levels/it_IT/bisect/bisect
@@ -1,29 +1,29 @@
-title = Yellow brick road
+title = Strada di mattoni gialli
 cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad
 
 [description]
 
-(Please zoom out a bit using your mouse wheel! :D)
+(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D)
 
-Oh no! You have lost your key at some point during the day!
+Oh no! Hai perso la tua chiave da qualche parte durante il giorno!
 
-Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!
+Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male!
 
-First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card".
+Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd".
 
-After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?
+Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa?
 
 [setup]
 
-echo "You still have your key." > you
+echo "Hai ancora la tua chiave." > you
 
 for i in {1..30}; do
     if test $i -eq 12; then
-        echo "Your pocket is empty." > you
-        echo "Is on the ground." > key
+        echo "La tua tasca è vuota." > you
+        echo "E' per terra." > key
     fi
     if test $i -eq 13; then
-        echo "Is holding a key in its beak." > bird
+        echo "Tiene una chiave nel becco." > bird
         rm key
     fi
     if test $i -eq 14; then
@@ -35,9 +35,9 @@ done
 
 [win]
 
-# Find the last good commit
+# Trova l'ultimo commit buono
 test "$(git log --pretty=%s main | head -1)" -eq 11
 
 [congrats]
 
-Well done! :) The only problem is that you now have to walk all the way back home, again...
+Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo...
diff --git a/levels/it_IT/workflows/pr b/levels/it_IT/workflows/pr
index 1c72510..98fa95f 100644
--- a/levels/it_IT/workflows/pr
+++ b/levels/it_IT/workflows/pr
@@ -1,9 +1,9 @@
-title = Cloning a repo
+title = Clonare un repo
 cards = clone commit-auto reset-hard checkout file-new branch
 
 [description]
 
-Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`.
+Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`.
 
 [setup]
 
@@ -13,12 +13,12 @@ rm -rf .git
 
 echo "2 + 3 = " > file
 git add .
-git commit -m "Initial commit"
+git commit -m "Commit iniziale"
 
 [actions friend]
 
 git ls-remote yours | grep pr && git fetch yours && git merge yours/solution
-git show main:file | grep 5 && hint "Thanks!"
+git show main:file | grep 5 && hint "Grazie!"
 
 [win friend]
 
diff --git a/resources/localizations.csv b/resources/localizations.csv
index 2a860b7..8716ff6 100644
--- a/resources/localizations.csv
+++ b/resources/localizations.csv
@@ -17,4 +17,15 @@ Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com."
 INSTALL,"Sure, I'll install it!","Sicuro, lo installerò"
 LANGUAGE,Language,Linguaggio
 ITALIAN,Italian,Italiano
-ENGLISH,English,Inglese
\ No newline at end of file
+ENGLISH,English,Inglese
+GOT_IT,"Got it!","fatto"
+INTERESTING,"Interesting!","interessante"
+VERY_USEFULL,"Very useful!","Veramente utile!"
+COOL,"Cool!","Bello!"
+NICE,"Nice!","Bene!"
+THANKS,"Thanks!","Grazie!"
+WHATEVER,"Whatever...","Ad ogni costo..."
+OKAY,"Okay!","Ok!"
+YAY,"Yay!","Yay!"
+AWESOME,"Awesome!","Eccezionale!"
+YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comndi qui!"
\ No newline at end of file
diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation
index 01525b371dbe43672a80083931d72d4a92bd84eb..29648f6b6dbc57f36302ef34dc7bc83d7c7f8eb3 100644
GIT binary patch
literal 1285
zcmbW1Uu;WJ9LG<)*}9nxTUKVQjb#g2RsD&@Ojb3s=sMOiL)Kh%v{&!$t=@aFjUe$L
z65+w0B|H!o4|qZ%kr2s(ga@98M8cEB5?;2&mbmr((Ibs`a*|KZ@6Y-DIlrFUu5ed?
zWmg_{!5qk2H%odVl9p6mkqlW=#kv399f+I<(p=Zfbc{z8EhZ^ZLyPJ$u5wnI>r<sZ
z&Wd2^<GL=zxy}lq{EFagCd34~iyG2ig|k^u_nNUJH?jt*q#J2jjsFhQV`({Mz{r>l
z6oX%x)_T1@RzfDMf8Ln}k`G+K31}67*&u^encZF4oosbkxgoo+&+%=990C#03le}P
zOK~%>y8tyxJrR+J!!`(ke1tt~@BKLXv=1^3g$N}>&)qmjy%8e*%EK?^l#eDti1_#U
zfyi<kqR|mAx0ipSJJD!LfQY}*>$uShg=$c|u#fM%H4ODnUo<1~#na~;%@9PruNC(z
zPQgyUB%#iIzThZ!;a~B>HWtKr(TB)izw+CIdMF}J^gVu6U3vg^F^`Ln#=nzHFM<&9
zZ`yWAC!o-MD7T0|f3jiKe&}Lu<=0NHu7Vx}$8*jNK0RN47WxJ78cY@jMtYEs9tphz
zQK$IB?IsP%-*a!ie$Zv+*vVf5&cL=oiX~ZyA2D1(euyi~>V9nhtg5QTtVpoY8Gcu~
zz*Dx<ax=?6blr2e`OZQ6^xKh^fr&yE-rZicer%TAv1NDOx{-dX2m1WVd!^ymEc|Yv
ze~F3X&H;PI=4L?|xpmgX6;0a5TGhBB>j@S~NNQ4dGyh?Hgnb+}Han<N`{JnG^W-rK
z4A)roi=Q#8%^T`SwS?_?mfPpEI+s|%vbyQob=}KmmUW~i6S@Z#kA1U}`BUGE@~28_
zZ`P&SY`+bS&gxW4lQ$c9w>o3%46}^Qw_LRv*DTsoS>Ugwiwqa|iz*97sT8Ga^1dpr
z_WZyYLUIh91tm3Z;>%|dEgo06tHadg7;DoEmuyhSFD_SEYzI&GyG)($Hx<~zmnJf{
m_WB`oK1nm^k^0>%plR@RCQ06A$_7HWUhCLIe#W}+2lx};E+Py7

delta 430
zcmZqWddRjxm$9Cgfq~&a5CADK%>|@Iplm51tpLPoK&%7AAazDiniWVZ0I>}aGXXIp
z5LX|ZAPf?p0>l@9cyS!Z;<Z4U9f&!A7^W^HgoE(~kPlQ_4<Z=i9=tes4M>9&f-uN1
z5dOyQd}Ird76f8(s2E6m_KsJ=M}aiRP!NWxpSt_YkGnuVHx$FfCp7Aq%mj*|n}3VN
z%{gQNPy!SRAPjTimz3p8fn2cTKn_$le!ulBkmiJ9HXtnz#BYJvDKR;FG9$~>XrIio
z)SP05ko@%YoKywh(&EfyhJT(Xrc3=}_!m6w>wiX1^%;J?1>gQNDl)j{rRQW8XE69A
o=B1Y=rl&FlrRL-(rZD)WR+K3Cqyi0M2rSJk0UFN`6ddFX01ggapa1{>

diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation
index 410081c3a76de444c9468a0d450193b9122de478..882761e5a9cb18d2f8ee2eaf1b13810923fa30cd 100644
GIT binary patch
literal 1324
zcmbVMUr1A76#w?8d7I^`iHS-&kSmB|*&mapLYbM;bZx8D$lcqz>2lra?kp;NustLZ
zB}EOXhlW{!_#y^UPm+*OJp?{P5mYZlMfo66QFr~$ycZ;T>VqHWoZolO_dDPDF4yPx
z)iZ6GV0Em8@7*IR-GP`WD-kgsj>>x8e_IZf`9MrkqW!Uu6pTbeVk8)k29=N`ODt#k
zo-Ce_*h(-bBt;RsB!y)m$W%xy8*Vqc3&zDG5s9rvc%(nnBgHj>l$3ZZEO#xHDWO=n
zHx80917HO*CvA7RD%mQcu>N^xGd5@_D>NI9Gong>^#Cmkum(tD<!QD=v&8Y5U!mE$
zWqZ5ew*Ud46X*tL&{Ri~B>?qJEfN9&&X9yddjzA#cfR>Ba{)eGoQBrY)AD#1@~Ah0
zUVmfyqx}kEnkD7x^)Jo!fdG<-Cp_72e@pkX0W=rAezcPt6%gn;I=^`I?ikWC+N4i2
zqP?!zW$q9h>XrKVk~@`~f?WmBtI6vg7mmQvd4x@KhELtdr%z$IZrSFq_nX1f%hBWO
zeJ|dW%g<})lg71&i{DBA@A~JB9pX*okp}7N^}~Y|TM~%%dDw3aZKd}*3=ps9ot+uB
zPasYLFMw}Z^|L2&9`#6bf}4T$^|<>Y0)37;Uz_SHxr%`1LZDd`1Gm97$w$LdJQiiD
zSGn^}Q1?EV%(JLW-Lb*qUdg3A7Fm`N?&GW4(}qX)s;5l6FzvLp8C3^U1GCN5sfk*y
zu2`rtx_KAJ)IOdYAK)z<iyrS=cvdbPGS$qUR=r@hjbsnHU8kyZ;HR9mOSx$Sj)7(p
z8ooqp!VKFKI2cq}V@x~~mayAUH1w*c&6vro=gbxo_8XlY=bG#${_`bsM+Y}r(0{JQ
z(_1E}jV{$uS*iMYoND8LmfAeMZ9;xq4ln%hlxGhPd>t{Gno9@kEXnqTOwc~xbj&=#
z+<M*jqO_sa&(em<jj~!j&fd=#a|4c{<6f?`294JhwI)t6$c&A;T~Dn=&fl2MPW(UU
z8oPP3+dZr@PrniliL9b5mu@qcETDlNC^Y|SV6zKL7x5>qTT1f;v{#rmKAL3h;%NuY
biA16f*4pD>4N54?Y|~ZNf(DiO@Spqx8<s7~

delta 413
zcmZ3(^@VMN4P!ko0|Uc<AOKQenhQvaK-p42S^<dFfLI5JLF$a4G%Ju+0Ad>;W&&bH
zAg(?*L6{RrPY2=~K)g7PWAQp5%>l$9ahST05Dvz7Kt9lndJw@7_u$1rkOr7SkYOPF
zjotakHXtns#NtpfkofE!uY`{SX?7q6>4B-Ay8FwI2S7d_5QFr<#3wZBm@EMD(beB#
z;dc&M4wV2&GEH`55?4_-e!uk`kOvA2ZXjj@VtF9`48)#!DVeDyMfsBrSY|~0^Vzj&
z`acHW(&EhIM23H!C#FlW{bTqS+&qm<MJ$2ew?O(o)8S1(iIDJkptz5l8jH2{1RyJ@
e*}s_uNCy-zdz1h&MGUCVwKzGGfgvb3$Qb}x_F{bi

diff --git a/scenes/notification.gd b/scenes/notification.gd
index 8825be2..70ed8af 100644
--- a/scenes/notification.gd
+++ b/scenes/notification.gd
@@ -1,7 +1,17 @@
 extends Node2D
 
 var text setget _set_text
-var button_texts = ["Got it!", "Interesting!", "Very useful!", "Cool!", "Nice!", "Thanks!", "Whatever...", "Okay!", "Yay!", "Awesome!"]
+var button_texts = [
+	tr("GOT_IT"),
+	tr("INTERESTING"),
+	tr("VERY_USEFULL"),
+	tr("COOL"),
+	tr("NICE"),
+	tr("THANKS"),
+	tr("WHATEVER"),
+	tr("OKAY"),
+	tr("YAY"),
+	tr("AWESOME") ]
 
 func _ready():
 	button_texts.shuffle()
diff --git a/scenes/terminal.gd b/scenes/terminal.gd
index 5df56af..a52600f 100644
--- a/scenes/terminal.gd
+++ b/scenes/terminal.gd
@@ -104,7 +104,7 @@ func command_done(cmd):
 	
 	if cmd.output.length() <= 1000:
 		output.text = output.text + "$ " + cmd.command + "\n" + cmd.output
-		game.notify("This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!", self, "terminal")
+		game.notify(tr("YOUR_TERMINAL"), self, "terminal")
 	else:
 		$Pager/Text.text = cmd.output
 		$Pager.popup()
diff --git a/scenes/terminal.tscn b/scenes/terminal.tscn
index 2e8d6fa..e9706ea 100644
--- a/scenes/terminal.tscn
+++ b/scenes/terminal.tscn
@@ -147,6 +147,7 @@ volume_db = -10.0
 [node name="OkSound" type="AudioStreamPlayer" parent="."]
 stream = ExtResource( 2 )
 volume_db = -5.0
+
 [connection signal="item_selected" from="Rows/TopHalf/Completions" to="." method="_completion_selected"]
 [connection signal="pressed" from="Rows/VBoxContainer/Button" to="Rows/VBoxContainer/Button" method="pressed"]
 [connection signal="pressed" from="Rows/VBoxContainer/Button2" to="Rows/VBoxContainer/Button2" method="pressed"]

From 216db5c5067177086d8552a5362556bca39ac0a2 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 16:26:41 +0200
Subject: [PATCH 14/49] Code refactor and adding, in the README file, the
 instructions to add the localizations of levels and cards

---
 README.md        | 12 ++++++++++++
 scenes/cards.gd  |  1 -
 scenes/game.gd   |  6 +++++-
 scenes/levels.gd |  1 +
 scenes/title.gd  | 30 ++++++++++++++++--------------
 5 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index 0f7ee77..5c47bf5 100644
--- a/README.md
+++ b/README.md
@@ -75,6 +75,18 @@ A level can consist of multiple repositories. To have more than one, you can use
 
 At this stage, we're still exploring ourselves which kind of levels would be fun! So feel free to try new things: basic introductions with a little story? Really hard puzzles? Levels where you have to find information? Levels where you need to fix a problem? Levels with three remotes?
 
+## Add localizations
+1. Add the localization text into the section "description" in the  file ./resource/cards.json
+   Example:
+       "description": {
+          "en_EN": "Drag this card into the empty space above to initialize the time machine!",
+	  "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo",
+	  "es_ES": ""
+       }
+2. Add, into the directory *levels*, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )
+1. Add, the localization into the dictionary game.langs (es. var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"} the first and default localization it must be en_EN
+
+
 ## Contribute code!
 
 To open the game in the [Godot editor](https://godotengine.org), run `godot project.godot`. You can then run the game using *F5*.
diff --git a/scenes/cards.gd b/scenes/cards.gd
index ee03e89..aed300e 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -3,7 +3,6 @@ extends Control
 var card_store = {}
 var cards
 var card_radius = 1500
-#var lang = "it" # TODO: Make a global variable to setting dir and cards localizations
 
 func _ready():
 	load_card_store()
diff --git a/scenes/game.gd b/scenes/game.gd
index e8d689e..9cd9f92 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -1,5 +1,6 @@
 extends Node
 
+var langs = {0: "en_EN", 1: "it_IT"} # Localizations allowed
 var lang = OS.get_locale() # Variable for game localization
 
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
@@ -20,7 +21,10 @@ var state = {}
 var mutex
 
 func _ready():
-	print(lang)
+	# Check if present localization language
+	if not langs.values().has(lang):
+		lang = langs[0]
+		
 	mutex = Mutex.new()
 	load_state()
 	
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 25593f7..5a3d9f9 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -3,6 +3,7 @@ extends Node
 var chapters
 
 func _ready():
+	var lang = game.lang
 	reload()
 	
 func reload():
diff --git a/scenes/title.gd b/scenes/title.gd
index b79d977..cf99a2d 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -3,6 +3,7 @@ extends Control
 onready var popup = $VBoxContainer/Language
 
 func _ready():
+	check_correct_lang_item()
 	if !OS.has_feature("standalone") and !game.skipped_title:
 		game.skipped_title = true
 		get_tree().change_scene("res://scenes/level_select.tscn")
@@ -26,28 +27,31 @@ func sandbox():
 	get_tree().change_scene("res://scenes/main.tscn")
 
 
+# Check the apropriate locale
+func check_correct_lang_item():
+	for i in game.langs.keys():
+		if game.lang == game.langs[i]:
+			popup.get_popup().set_item_checked(i, true)
+
+# Set all items to unchecked
 func uncheck_all_item():
-	# Set all item unchecked
-	var num = popup.get_popup().get_item_count()
-	for n in num:
-		popup.get_popup().set_item_checked(n, false)
-	pass
+	for i in game.langs.keys():
+		popup.get_popup().set_item_checked(i, false)
 
 
+# Create popup items width allowed locales
 func make_popup_item():
-	popup.get_popup().add_radio_check_item("en_EN", 0)
-	popup.get_popup().add_radio_check_item(tr("it_IT"), 1)
+	for i in game.langs.keys():
+		popup.get_popup().add_radio_check_item(game.langs[i], i)
 	
 	uncheck_all_item()
 	
-	if game.lang == "en_EN":
-		popup.get_popup().set_item_checked(0, true)
-	elif game.lang == "it_IT":
-		popup.get_popup().set_item_checked(1, true)
+	check_correct_lang_item()
 	
 	popup.get_popup().connect("id_pressed", self, "_on_item_pressed")
 
 
+# Change the translations and localizations of the cards and strings
 func _on_item_pressed(id):
 	uncheck_all_item()
 	
@@ -56,6 +60,4 @@ func _on_item_pressed(id):
 
 	
 	TranslationServer.set_locale(game.lang)
-	# DELETE ME
-	print(popup.get_popup().get_item_text(id))
-	print(game.lang)
+	

From 2f1ff72c763b1fa1c444dd253054e9cc8b2e669a Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 16:45:00 +0200
Subject: [PATCH 15/49] README file adjustaments

---
 README.md | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 5c47bf5..7cf855c 100644
--- a/README.md
+++ b/README.md
@@ -77,14 +77,16 @@ At this stage, we're still exploring ourselves which kind of levels would be fun
 
 ## Add localizations
 1. Add the localization text into the section "description" in the  file ./resource/cards.json
+```
    Example:
        "description": {
           "en_EN": "Drag this card into the empty space above to initialize the time machine!",
 	  "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo",
 	  "es_ES": ""
        }
-2. Add, into the directory *levels*, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )
-1. Add, the localization into the dictionary game.langs (es. var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"} the first and default localization it must be en_EN
+```
+2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )
+1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN
 
 
 ## Contribute code!

From 6fb0f729cce42ad3a17ac19e49049929eb244767 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 16:46:34 +0200
Subject: [PATCH 16/49] README file some adjustaments

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 7cf855c..21b5c6b 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ At this stage, we're still exploring ourselves which kind of levels would be fun
        "description": {
           "en_EN": "Drag this card into the empty space above to initialize the time machine!",
 	  "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo",
-	  "es_ES": ""
+	  "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo"
        }
 ```
 2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )

From 9db0d092141807b2511aa3987e9ff1ed3e5bdebb Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 16:47:45 +0200
Subject: [PATCH 17/49] README file some adjustaments

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 21b5c6b..03c8931 100644
--- a/README.md
+++ b/README.md
@@ -78,12 +78,12 @@ At this stage, we're still exploring ourselves which kind of levels would be fun
 ## Add localizations
 1. Add the localization text into the section "description" in the  file ./resource/cards.json
 ```
-   Example:
-       "description": {
-          "en_EN": "Drag this card into the empty space above to initialize the time machine!",
-	  "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo",
-	  "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo"
-       }
+Example:
+"description": {
+   "en_EN": "Drag this card into the empty space above to initialize the time machine!",
+   "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo",
+   "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo"
+}
 ```
 2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )
 1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN

From b54abd298d1d7eaf4d62c7bb917d21192b33efcc Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 16:56:36 +0200
Subject: [PATCH 18/49] README file now its ok :)

---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 03c8931..3f2cb6a 100644
--- a/README.md
+++ b/README.md
@@ -85,9 +85,10 @@ Example:
    "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo"
 }
 ```
-2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI )
+2. Add, into the directory **levels**, the directory with the levels do you want to adding (es. ./levels/fr_FR/LIVELLI )
 1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN
-
+ 
+If one or more localizations in the descriptions of cards are missing and levels require that card, the game crashes!
 
 ## Contribute code!
 

From f8530a58c744846785b444506ba16831665a73c6 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 15 Sep 2021 18:15:10 +0200
Subject: [PATCH 19/49] some adjustaments and code refactor

---
 levels/it_IT/branches/branch-create    |   8 ++++----
 levels/it_IT/branches/branch-remove    |   2 +-
 levels/it_IT/intro/risky               |   2 +-
 resources/localizations.csv            |   9 ++++++++-
 resources/localizations.en.translation | Bin 1285 -> 1869 bytes
 resources/localizations.it.translation | Bin 1324 -> 1972 bytes
 scenes/cards.gd                        |   2 +-
 scenes/file_browser.gd                 |   2 +-
 scenes/game.gd                         |   2 +-
 scenes/level.gd                        |   4 ++--
 scenes/level_select.gd                 |   2 +-
 scenes/node.gd                         |   2 +-
 scenes/repository.gd                   |   2 +-
 scenes/repository.tscn                 |   1 +
 14 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/levels/it_IT/branches/branch-create b/levels/it_IT/branches/branch-create
index 428c4a5..2544ead 100644
--- a/levels/it_IT/branches/branch-create
+++ b/levels/it_IT/branches/branch-create
@@ -31,11 +31,11 @@ git branch -D main
 
 [win]
 
-# Crea un ramo chiamato 'birthday questo punta alla linea temporale del compleanno
-git show birthday | grep 'al compleanno'
+# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno
+git show birthday | grep 'birthday'
 
-# Create a branch called 'concert' that points to the concert timeline.
-git show concert | grep 'al concerto'
+# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno
+git show concert | grep 'concert'
 
 [congrats]
 
diff --git a/levels/it_IT/branches/branch-remove b/levels/it_IT/branches/branch-remove
index 07f8583..00a2d4c 100644
--- a/levels/it_IT/branches/branch-remove
+++ b/levels/it_IT/branches/branch-remove
@@ -20,7 +20,7 @@ echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you
 git commit -am "Salto"
 
 git checkout HEAD^ -b friend
-echo All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori. >> you
+echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you
 git commit -am "Un nuovo amico"
 
 git checkout HEAD~2 -b music
diff --git a/levels/it_IT/intro/risky b/levels/it_IT/intro/risky
index 0203433..57a52d1 100644
--- a/levels/it_IT/intro/risky
+++ b/levels/it_IT/intro/risky
@@ -15,7 +15,7 @@ All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa v
 
 Devi trovare una buona soluzione.
 
-(Premi "Next Level" appena sei pronto!)
+(Premi "Prossimo livello" appena sei pronto!)
 
 [setup]
 
diff --git a/resources/localizations.csv b/resources/localizations.csv
index 8716ff6..e64522b 100644
--- a/resources/localizations.csv
+++ b/resources/localizations.csv
@@ -28,4 +28,11 @@ WHATEVER,"Whatever...","Ad ogni costo..."
 OKAY,"Okay!","Ok!"
 YAY,"Yay!","Yay!"
 AWESOME,"Awesome!","Eccezionale!"
-YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comndi qui!"
\ No newline at end of file
+YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!"
+INTERACT,"This is the time machine of another person! To interact with it, you need special commands!","Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!"
+GOLDEN_BADGE,"You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?","Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?"
+GOOD_JOB,"Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.","Ottimo lavoro hai risolto il livello!\n\nSentiti libero di provare altro o clicca su 'Prossimo livello'"
+COMPLETE_GOAL,"Complete the goal of this level","Completa l'obbiettivo di questo ivello!"
+DRAG_AROUND,"You can drag these around with your mouse!","Puoi trascinarli in giro con il mouse!"
+EDIT_FILE,"Click on these files to edit them!","Clicca su questi files per modificarli!"
+YOUR_CARDS,"These are your cards! Drag them to highlighted areas to play them!","Queste sono le tue carte! Spostale nell'area evidenziata per usarle!"
\ No newline at end of file
diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation
index 29648f6b6dbc57f36302ef34dc7bc83d7c7f8eb3..8809d36cf439d6a33670b3ba7c3c4cf7ae3f4feb 100644
GIT binary patch
literal 1869
zcmbVNZ%kWN6u&K4N}=E=fdREEDH&l>Dl!!*8+09%j=$0lC|%Y)%3E7n-h;l@jp8O6
zV?<{p*&i@t$u>s(pd`j&f-%`7qMLIc*arhKG0rba#E6NE0LE9(>3U5={Nzo3IrseT
zIp^N<r?2g{b~A~uB#;!lVBglj2wr=T;e-Ga^6?zC``=Oyp1T1-R^Y=yH|q-UZYJOg
z@h-v5axBS6JmZ*tmZSpH&k6$LVFi)`O3Z^LX|VOe>s%qGC%_UVs6An~pAE$cyh#WJ
zeVpg9o8S)m20}m*A^|7>u}D=0Lpe!D3f6z-j0H&sXaNQQt|%-S$aFv!0CPf)F3k?T
zD6W@*+z+VQagKhqaqdXMSsUy-0KI@d045Lt(0fphB<OD^?5WKdaF+m+fF}T2z;yuT
zjOa;Ta`l7E1?b`&@`od3_eZ6Kl)&Dcz;ju53NQ{<7(wGiF8thC47v)SP2hjep3QcF
zj-5nMd&LhQ8Y>_^))4{Q*x3V1H<Jx}Y!SBg_`{X?E|A!K1oi(u*=&CWoX`eA`EQS^
ze$oMt{@5SN56_ROz5x9KU=cv?^90|MzX3YU=knaIs&BxF>eT<@=j)qxP;l}Pl%F~-
zpZWxX;oHy$=LOH!C%JuIkXS3kdhZ9*ApX@iQp^i;V2DG9wWsmUE{-SzpfmwD0-*0a
zaBWcg0C-xjijVUh=inUY=@@|etFFHF+)~{C)db#dmrHQ&=zD0~druC%`ywdVV<+I*
zyOLEG`0uQ1i@)WL9_;A-^uDpzO82Af&i;ILrQvc7@Oglz0o1;@V(nA>eb9NpczXb!
zLF_|}+fVFXhVu)Bq{;U(8xV+SZM)iBAC&;XaGo%H2#9DtU)@=!Of$;5w8~H?pCgi&
z!oCm@9ZqZh^y^n7t~}wPri0j)hn+6;Y-a;J(@RXJ;Jee$77_<DR0vVV)uR8N^7*vV
zKh8Q18I)2z+FJOK))#_fdsF3Y)sevF`<d6P@_&q+DY%&`B7GurZcW#*QDk%ewyIGq
zs^wkR^fLz(=qonJ(Zs5AN%gmH5u0;*k65hxnur!dOY=ajO`0SYmY0jIC1O+N-tD65
z&a$-3=79~bpoh1fSrh%qTbrrLTj@nN_6}GikBQ1$^+2uB5O<tWM<uN`5|xxc!-<tI
zXpZH`Oz;v&TV_hlk*(lW7|v+8uTbm%=0wuMo(^f7Sg0lGV1q;2u)v-S2jG<sC)v_X
z8D%+rCEY7q-!-0|@8oA~&V#ZX{?A=b-Hm!>TJ@-{-rBlbfk~P3As;-1I^|6eIR5MW
zOwIT^QArIEZI>QJCD!5z$Z`V<QO9`#KEX>`{jo|zDRXVh83p>xE(~Rwz>0k|DBWIK
zsEs^Ifxy=MgR4rZywRCdy)YE(V_we94BH~q<tbB17|e4c(pZT*Z%KdQI84mvhE|$+
z9+R=iWE!zg)(y45H@>ODslZy-ug;bhPM-MEGF2)y4ey&gX}{R0#>PVpi(91IIy5YX
zaCY9~39#Dcu;6o(23OvoZJDNi7)DCpepGJE8aHOuX-=JURF7IDv1t*lcgOQZ7+=y3
Hf298a@cZPX

delta 804
zcmX@h*UGg)m$6=)0Rq^7lmHO_2LdrDtpKG#Vro#f4wSY-l5+vF{eU<Gh~t1b1Bmm0
z7^IICNGkww2@o?vaYzUUV>OTil&c333`|goxCbu|<^tL5Q0$lOcU%#u5ac)zh8Zw>
z$17owfgDf_(|?P_Im7^{h!-dh!ly%pAA&r^1;ji+4AZ|jj$^Saki!nNA8ZIr;!Dc%
zr9gFHM}Zv10@ajW)X!lHR0Ol|oyZoE7N8s_6z2&Ym#zV_Ve&>N7+?DU)x#VDGhf~K
z{Z@4#2d0k+Xg}ChU*_a#WdS8XmV)rq-CuryXl^Km8F0}(DzO2`0r?1IILzl08g)$4
zfP7fU2`}g{l>+j8fEZ*4OkMTC3BtWV{uCg-0FwL0?tCN?XrLgF14;`pi@5Htw$2A~
z(1YG~VWC1Pk~m0S9*DbuVor(4*$jTE6(tHjsb#4-4FAISF+I=A%lpUhFT}?}JopBm
zv@U<dKShRrjx!eOuC-lL$TYc@%~;hZ6R5hFAt*H`KQV>DH7`9Uvp9nxBqK2|yI7II
zu{^anKR0!<H|zAg%;Z!>2A{;d^wPxiRECiJ^z@um1>e%*%wz`l{1S!C5}?_hC#FmN
zV+czvs#GW~PE9M#0g44r`}&{JQ+<Y?Z^5_!jEW4AiIs{B&iVO3Isa@BJFqmf1gJG&
Pfv+1#o`E4KILH|QqY$h#

diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation
index 882761e5a9cb18d2f8ee2eaf1b13810923fa30cd..0a5f06a5a98591d327c16e5f2dc0035ee80f83b5 100644
GIT binary patch
literal 1972
zcmbVNZERCz6n@*)%S$&_WlM#vVOuh8bz#&woC|l%k6Fhyw$81xcIbM$QlR^2p|{Iq
zIHa4=p;4BIlm$#2Wnw}|3}9R^{vexSDotiW)JRCsA42?MKZxN&?|jasH))8!e3Pf=
zJ?A~=yyraUZEjn8TOCWUEJz&>Vc)vZuk3I~{b8lg9}7joy5Ikn9FZ%4Xi$j^L<2!z
zUnJn~^Ti@QB@he;S#IW8*xw&yOJV5`DvE!5P+?1;Xc0k{jqMIp=ZpEf`+{s4)b4>m
zZ!nfN&`nA#8VYZ}7p4TFp`9@p88ZN8K+Ck=;izCaWWxH-o=rF)QXWXlP>hkO7;pfz
z7O@1#9AG&>Es{-NtM1cF)B0M-b-?=j&MEHcw5>7YtQGssz*e9Kpniq`{T`D0GW54H
z_PWnFY=?lO0JT&M90P~~LbvIA-|LW6^CM{+*`FI)d-00#UeC@9dwBVULK+egPSEoV
z9sH%E40;KWndi^^v-t{a#1&0V_cvcTDUBgN&6t3#cJ^(3r=R$w+~nVN_4@hVv`+Wx
z@jsgC+}~xy>-KM6%=<}!-2z{luWsLSemw66^aSt&px?JWdVn8;PTbH;k4*oXmz~a=
z+28x0-@Nq(lF^gR%$w}u$sD{F@}>Id>Cl}wkA}-$gQUEKn_EvzL1;eY_t%oT**kEg
zTn__!oqOl^EjtFq1KXQ`Ugw6%UB%0x&|4%_ep28)0l5(f0(yMjhhtAz;rB9ZG*{j3
zc5_1$biE!u@7E9Re&+y`dYo+o9-lM(b`U}L_u10ha$y91#1TQyJ04%Nj(VUOX7csr
z2OE#j`z-|QfbMUvyzyx<bTdGIYRXjv<b$||@YYZ;7LBm_sDCIFEMe-VbEgw3vrJc+
z3!Ey{=S7nwjbm5$UQNebO0^4}o!pq!*e}PKx=XC`o;z(777ZoLsRTkyZ50KcJ7Tt3
zT!|JYab@z+g*{t*bgs6Ix<*Y%<g|@l?)4bS=JoH!L0!UTOPWP3UE_|0z4J}wLVV4r
zD?u)6?D>d!L9Ci%i-wtxQ^`}d2}`o)th2lZ6^N?cGn1UZQe;w*sP$FLv`OMQHvSdw
zS}jPQP4UT78+h%!jeEFOLmf8><k@a4?;L5!%MyQo*MxqO1p^~3%{%R~TJKOxDk{`=
zRI|w<-YK;-@ASwkJh`HLySXeoK73;Wy_d#og@kuOQ@ocNwwX>bNsqf_TQs=ZQESCx
zVYT`syLPFF50{MfwDQs#a8qk@jSezgGnJGa7tOZvf5K?5Rr%;=nW(o4&^8yE{&uq2
z1&t!r%~whi7vmF!CeE&QUB5l0+RNnmCP7-tQ;3i!vZH6L*G#;&@^bR{VCt@Gg;^s5
zw|%i%uwF~B<4fc-R(XHQ@`^?X#`P2^7(FDET4gj?xM-X?&C~{Whfig$UeE)&y~K9)
z*(_0>F1L7$l+iugSgr9{Bv%<F(ZOkA{Nyk$Vv(L*3#l@BOIFS7ZtW2~IguTg9D~)l
zIHe%XSDV2ztElwJW+5C#@6Y0^RD$2Wz6h>xWi^(|`}@n}Zmo9j0(FRq(MbFbp5iYl
zQ+!zIA6#jjk!4%@;Vc^L8iR?*Vf1Ea%>zm(;Mdx4))vVfx#C@yQyY7Y(Co>6`><*s
dOd9+DsJzVW$@!+^t`4oRhPgxm_;17a`d{hC3UUAd

delta 786
zcmZ9JZ%7ky7{{Mm=XtI_t8OfCQ5(dBSZ}O+GZl0$QQWL~S{B)cTRA3YZYESOM(l+W
zL8DP4^hJaIyr>|=!19$ODD<j#Q3TbiNJw9d=tbQ6KI?uE9enQj|L2}tbUd@aXq9sN
z=<lOI>;_dlE=zhW$v&T@`z_i2Ppk`i1n6J{i~$31T^*zcOaaM4*Hx(m1F?(zBAXQ$
z`TT9=CUg}vfJi#B)`dh~ju8#!mcDCuVAliA74;wFpspi{{mk1z?F)aPqu8-c%f%28
zokgcg;>jZ<)TZ%78F1`U=C*nc3U9}ge>fMNWyl?1CouM|x$i@AKc;zI+89IrF6esz
z_h6ciZoce=VkgScb~wbUm3iav3<5lWxw~BX#S8r3;9d9G_&oA>2oDzZg&Y23dD!9v
z+Jo8S{EyB9_KUphD+TR2>=NeFdniBagR9eM$XoJlpw_T|dK$O|L)=dI+sc!kA`HF^
z!`C<n9>UjSBvQ$#%mkSyvyZ>V%)ZwPF2y9X<A4%qP|IP(FbtTdd@aLOsrX9iZ9dYb
zk~!&9tCE*Ey@YTy-=CKud-T&6OzO_WuceZRhW5{XOrNn8XX@q>ok@dTeJ6Z!AW$$V
zd?lM2jg!C0$#v_cMxHw4mVbw6b<0+3K9Iks9CF1R;mhu-?acxW$FF*+GdVs!;idkx
UmqOXm6gie!?2RFlq65+3A3ig$;s5{u

diff --git a/scenes/cards.gd b/scenes/cards.gd
index aed300e..095ee96 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -55,7 +55,7 @@ func draw(ids):
 	arrange_cards()
 	
 	if ids.size() > 0:
-		game.notify("These are your cards! Drag them to highlighted areas to play them!", self, "cards")
+		game.notify(tr("YOUR_CARDS"), self, "cards")
 	
 func arrange_cards():
 	var t = Timer.new()
diff --git a/scenes/file_browser.gd b/scenes/file_browser.gd
index 1af3fa2..b2d45f0 100644
--- a/scenes/file_browser.gd
+++ b/scenes/file_browser.gd
@@ -82,7 +82,7 @@ func update():
 			grid.add_child(item)
 		
 		if files.size() > 0:
-			game.notify("Click on these files to edit them!", self, "file-browser")
+			game.notify("EDIT_FILE", self, "file-browser")
 						
 		if false:
 			match mode:
diff --git a/scenes/game.gd b/scenes/game.gd
index 9cd9f92..66695b3 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -126,7 +126,7 @@ func notify(text, target=null, hint_slug=null):
 			return
 		
 	var notification = preload("res://scenes/notification.tscn").instance()
-	notification.text = text
+	notification.text = tr(text)
 	if not target:
 		target = get_tree().root
 	target.call_deferred("add_child", notification)
diff --git a/scenes/level.gd b/scenes/level.gd
index 97c1746..06b8740 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -42,7 +42,7 @@ func load(path):
 		if cli_hints != "":
 			description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]"
 		
-		congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")
+		congrats = config.get("congrats", "GOOD_JOB")
 		cards = Array(config.get("cards", "").split(" "))
 		if cards == [""]:
 			cards = []
@@ -78,7 +78,7 @@ func load(path):
 			else:
 				repo = "yours"
 			
-			var desc = "Complete the goal of this level"
+			var desc = tr("COMPLETE_GOAL")
 			for line in Array(config[k].split("\n")):
 				if line.length() > 0 and line[0] == "#":
 					desc = line.substr(1).strip_edges(true, true)
diff --git a/scenes/level_select.gd b/scenes/level_select.gd
index 42bff1b..cdcaaf9 100644
--- a/scenes/level_select.gd
+++ b/scenes/level_select.gd
@@ -57,7 +57,7 @@ func reload():
 			level_list.add_child(hb)
 			
 			if badge.active:
-				game.notify("You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?", badge, "cli-badge")
+				game.notify("GOLDEN_BADGE", badge, "cli-badge")
 			level_id += 1
 			
 		chapter_id += 1
diff --git a/scenes/node.gd b/scenes/node.gd
index f19e66a..f810a81 100644
--- a/scenes/node.gd
+++ b/scenes/node.gd
@@ -80,7 +80,7 @@ func type_set(new_type):
 			$Sprite.texture = preload("res://nodes/tree.svg")
 		"commit":
 			$Sprite.texture = preload("res://nodes/commit.svg")
-			game.notify("You can drag these around with your mouse!", self, "drag-nodes")
+			game.notify("DRAG_AROUND", self, "drag-nodes")
 		"tag":
 			$Sprite.texture = preload("res://nodes/blob.svg")
 		"ref":
diff --git a/scenes/repository.gd b/scenes/repository.gd
index 916bb03..c2f1524 100644
--- a/scenes/repository.gd
+++ b/scenes/repository.gd
@@ -89,7 +89,7 @@ func set_label(new_label):
 			$Rows/RepoVis/SeparatorLine/DropArea.queue_free()
 			$Rows/RepoVis/SeparatorLine.hide()
 		else:
-			game.notify("This is the time machine of another person! To interact with it, you need special commands!", self, "remote")
+			game.notify("INTERACT", self, "remote")
 		label_node.text = new_label
 
 func random_position():
diff --git a/scenes/repository.tscn b/scenes/repository.tscn
index 566b5e8..35264e9 100644
--- a/scenes/repository.tscn
+++ b/scenes/repository.tscn
@@ -113,6 +113,7 @@ margin_bottom = 61.0
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"]
 [connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]
 [connection signal="pressed" from="Rows/RepoVis/Button" to="." method="update_everything"]

From 42ebe9e6716baf9242209c305b0b070e157b6404 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 16 Sep 2021 18:42:31 +0200
Subject: [PATCH 20/49] export configurations file

---
 export_presets.cfg | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/export_presets.cfg b/export_presets.cfg
index 99aaf85..49998cc 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -7,22 +7,21 @@ custom_features=""
 export_filter="all_resources"
 include_filter="levels/*, scripts/*, resources/*, cards/*"
 exclude_filter="dependencies/*, cache/*"
-export_path=""
-patch_list=PoolStringArray(  )
+export_path="../../../Downloads/Oh My Git!.x86_64"
 script_export_mode=1
 script_encryption_key=""
 
 [preset.0.options]
 
+custom_template/debug=""
+custom_template/release=""
+binary_format/64_bits=true
+binary_format/embed_pck=false
 texture_format/bptc=false
 texture_format/s3tc=true
 texture_format/etc=false
 texture_format/etc2=false
 texture_format/no_bptc_fallbacks=true
-binary_format/64_bits=true
-binary_format/embed_pck=false
-custom_template/release=""
-custom_template/debug=""
 
 [preset.1]
 
@@ -34,7 +33,6 @@ export_filter="all_resources"
 include_filter="levels/*, scripts/*, resources/*, cards/*"
 exclude_filter="dependencies/*, cache/*"
 export_path=""
-patch_list=PoolStringArray(  )
 script_export_mode=1
 script_encryption_key=""
 
@@ -66,22 +64,21 @@ custom_features=""
 export_filter="all_resources"
 include_filter="levels/*, scripts/*, resources/*, cards/*"
 exclude_filter="dependencies/*, cache/*"
-export_path=""
-patch_list=PoolStringArray(  )
+export_path="../../../Downloads/Oh My Git!.exe"
 script_export_mode=1
 script_encryption_key=""
 
 [preset.2.options]
 
+custom_template/debug=""
+custom_template/release=""
+binary_format/64_bits=true
+binary_format/embed_pck=false
 texture_format/bptc=false
 texture_format/s3tc=true
 texture_format/etc=false
 texture_format/etc2=false
 texture_format/no_bptc_fallbacks=true
-binary_format/64_bits=true
-binary_format/embed_pck=false
-custom_template/release=""
-custom_template/debug=""
 codesign/enable=false
 codesign/identity=""
 codesign/password=""
@@ -109,15 +106,17 @@ export_filter="all_resources"
 include_filter="levels/*, scripts/*, resources/*"
 exclude_filter="dependencies/*, cache/*"
 export_path=""
-patch_list=PoolStringArray(  )
 script_export_mode=1
 script_encryption_key=""
 
 [preset.3.options]
 
+custom_template/debug=""
+custom_template/release=""
+variant/export_type=0
 vram_texture_compression/for_desktop=true
 vram_texture_compression/for_mobile=false
 html/custom_html_shell=""
 html/head_include=""
-custom_template/release=""
-custom_template/debug=""
+html/canvas_resize_policy=2
+html/experimental_virtual_keyboard=false

From b9fc323a58f8c1a622efd8725db8d0b4017625d9 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 16 Sep 2021 18:56:27 +0200
Subject: [PATCH 21/49] Adding another line for the explanation of localization
 mechanism

---
 README.md | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3f2cb6a..88ba387 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,17 @@ Example:
 }
 ```
 2. Add, into the directory **levels**, the directory with the levels do you want to adding (es. ./levels/fr_FR/LIVELLI )
-1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN
+3. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN
+4. Add column of specific locale and relative traductions for avery keys in the file ./resource/localization.csv
+```
+Example:
+
+keys,en,it,es
+LEVELS,Livels,Livelli,niveles
+QUIT,Quit,Esci,Salir
+BACK,Back,Indietro,Espalda
+
+```
  
 If one or more localizations in the descriptions of cards are missing and levels require that card, the game crashes!
 

From 6e0661b662465081fc77243b46e0a10ee32e9a5e Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Fri, 17 Sep 2021 11:40:31 +0200
Subject: [PATCH 22/49] Some levels translations

---
 levels/it_IT/changing-the-past/rebase         | 70 ++++++++---------
 levels/it_IT/changing-the-past/reorder        | 75 +++++++++----------
 levels/it_IT/shit-happens/bad-commit          | 25 ++++---
 .../shit-happens/pushed-something-broken      | 38 +++++-----
 levels/it_IT/shit-happens/reflog              | 10 +--
 levels/it_IT/shit-happens/restore-a-file      | 18 ++---
 .../shit-happens/restore-a-file-from-the-past | 17 +++--
 7 files changed, 127 insertions(+), 126 deletions(-)

diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase
index 6ed89a8..5de4a47 100644
--- a/levels/it_IT/changing-the-past/rebase
+++ b/levels/it_IT/changing-the-past/rebase
@@ -3,84 +3,84 @@ cards = checkout commit-auto reset-hard rebase
 
 [description]
 
-Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.
+Okay - Viene vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro i regolamenti dell'International Time Travel Association. Dopotutto, dovrai svolgere i tuoi compiti in sequenza.
 
-See the "rebase" card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.
+Vedi la carta "rebase"? Quando la sposti su un commit, copierà gli eventi della tua corrente linea temporale dopo quello specificato! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi.
 
-Again, we want to make that our base reality - the "main" branch should point to that timeline!
+Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale!
 
 [setup]
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 
 git add .
-git commit -m "The Beginning"
+git commit -m "L'inizio"
 
 git checkout -b baguette main
-echo "You have a baguette.
+echo "Hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy a baguette"
+git commit -m "Compri una baguette"
 
-echo "You ate a baguette.
+echo "Mangi una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You eat the baguette"
+git commit -m "Mangi la baguette"
 
 git checkout -b coffee main
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You have coffee.
+Hai del caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You buy some coffee"
+git commit -m "Compri un pò di caffe"
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You drank coffee.
+Hai bevuto caffe.
 
-You do not have a donut." > you
+Non hai una ciambella." > you
 git add .
-git commit -m "You drink the coffee"
+git commit -m "Bevi il caffe"
 
 git checkout -b donut main
-echo "You do not have a baguette.
+echo "Non hai una baguette
 
-You do not have coffee.
+Non hai caffe.
 
-You have a donut." > you
+Hai una ciamebella." > you
 git add .
-git commit -m "You buy a donut"
+git commit -m "Compri una ciambella"
 
-echo "You do not have a baguette.
+echo "Non hai una baguette.
 
-You do not have coffee.
+Non hai caffe.
 
-You ate a donut." > you
+Mangi una ciambella." > you
 git add .
-git commit -m "You eat the donut"
+git commit -m "Mangi la ciambella"
 
 git checkout --detach main
 
 
 [win]
 
-# Order all tree branches into one and move the main branch ref
-{ git show main:you | grep "You ate.*baguette"; } && { git show main:you | grep "You drank.*coffee"; } && { git show main:you | grep "You ate.*donut"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
+# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale
+{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "Bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
 
 [congrats]
 
-Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.
+Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro.
 
-It's really hard to actually *destroy* stuff with your time machine.
+E' davvero difficile *distruggere* le cose con la tua macchina del tempo.
diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder
index 04f66cb..93c340c 100644
--- a/levels/it_IT/changing-the-past/reorder
+++ b/levels/it_IT/changing-the-past/reorder
@@ -1,78 +1,77 @@
-title = Reordering events
+title = Riordinare gli eventi
 cards = checkout commit-auto reset-hard rebase-interactive cherry-pick
 
 [description]
 
-Oops, looks like there's something messed up here. Can you put the events back into their correct order?
+Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine?
 
-There are two ways to do this: You can drag the "interactive rebase" card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.
-
-Or you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!
+Ci sono due modi per farlo: Puoi spostare la carta "interactive rebase" nel commit precedente a quello che vuoi cambiare, poi aprire e riordinare le linee nel file e salvarlo.
+Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit nell'ordine desiderato. Hai carte per entrambe i modi!
 
 [setup]
 
-echo "You just woke up.
+echo "Ti sei appena svegliato.
 
-You are NOT wearing underwear.
+Non indossi biancheria intima.
 
-You are NOT wearing pants.
+Non indossi pantaloni.
 
-You are NOT wearing a shirt.
+Non indossi la maglia.
 
-You are NOT wearing shoes." > you
+Non indossi le scarpe." > you
 git add .
 
-git commit -m "The Beginning"
+git commit -m "L'inizio"
 
-echo "You just woke up.
+echo "Ti sei appena svegliato.
 
-You are NOT wearing underwear.
+Non indossi biancheria intima.
 
-You are NOT wearing pants.
+Non indossi pantaloni.
 
-You are NOT wearing a shirt.
+Non indossi la maglia.
 
-You are wearing shoes." > you
-git commit -am "Put on shoes"
+Indossi le scarpe." > you
+git commit -am "Metti le scarpe"
 
-echo "You just woke up.
+echo "Ti sei appena svegliato.
 
-You are NOT wearing underwear.
+Non indossi biancheria intima.
 
-You are wearing pants.
+Indossi pantaloni
 
-You are NOT wearing a shirt.
+Non indossi la maglia.
 
-You are wearing shoes." > you
-git commit -am "Put on pants"
+Indossi le scarpe." > you
+git commit -am "Metti i pantaloni"
 
-echo "You just woke up.
+echo "Ti sei appena svegliato.
 
-You are wearing underwear.
+Indossi la biancheria intima.
 
-You are wearing pants.
+Indossi pantaloni.
 
-You are NOT wearing a shirt.
+Non indossi la maglia.
 
-You are wearing shoes." > you
-git commit -am "Put on underwear"
+Indossi le scarpe." > you
+git commit -am "Metti biancheria intima"
 
-echo "You just woke up.
+echo "Ti sei appena svegliato.
 
-You are wearing underwear.
+Indossi biancheria intima.
 
-You are wearing pants.
+Indossi pantaloni.
 
-You are wearing a shirt.
+Indossi la maglia.
 
-You are wearing shoes." > you
-git commit -am "Put on shirt"
+Indossi le scarpe." > you
+git commit -am "Ti metti la maglia"
 
 [win]
 
-# Reorder the commits to dress yourself in the correct way
-{ git log main --oneline | perl -0777 -ne'exit(1) if not /shoes[\s\S]*pants[\s\S]*underwear/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
+# Riordina i commits per vestirti nel modo corretto
+{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
 
 [congrats]
 
-Feel free to reset the level and try the other strategy! Which one do you like better?
+Sentiti libero di resettare il livello e provare l'altra strategia!Qual'è quella che preferisci?
diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it_IT/shit-happens/bad-commit
index 10669be..b859921 100644
--- a/levels/it_IT/shit-happens/bad-commit
+++ b/levels/it_IT/shit-happens/bad-commit
@@ -1,30 +1,31 @@
-title = Undo a bad commit
+title = Annullare un cattivo commit
 cards = reset commit-a
 
 [description]
 
-Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?
+Oh no, abbiamo fatto un cattivo commit! Come possiamo annualre un commit e tornare al punto per poter riprovare?
 
-The answer is using `git reset [commit]`, which does two things:
+La risposta è usare `git reset [commit]` che fa due cose:
 
-- It resets the current branch ref to the commit you specify.
-- And it resets the index to that commit.
+- Reimposta il riferimento del ramo corrente al commit che hai specificato.
+- Reimposta l'indice a quel commit.
+
+Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri.
 
-It does not change your working directory in any way, which means that after that, you can try making the commit you want again.
 
 [setup]
 
 echo "1 2 3 4" > numbers
 git add .
-git commit -m "Initial commit"
+git commit -m "commit iniziale"
 echo "1 2 3 4 5 6 7 8 9 11" > numbers
-git commit -am "More numberrrrrs"
+git commit -am "Più numerrrrri"
 
 [win]
 
-# In the last main commit, the numbers file contains the numbers from 1 to 10.
+# Nel primo commit il file numbers contiene i numeri da 1 a 10.
 test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10"
-# The commit message of that commit is "More numbers".
-git log -1 --oneline | grep "More numbers"
-# The commit with the typo is not part of the main branch anymore.
+# Il messaggio di questo commit è "Più numeri".
+git log -1 --oneline | grep "Più numeri"
+# Il commit con l'errore si battitura non fa più parte del ramo principale.
 git log --oneline | grep -v "rrrrr"
diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken
index f8dce38..5535bc3 100644
--- a/levels/it_IT/shit-happens/pushed-something-broken
+++ b/levels/it_IT/shit-happens/pushed-something-broken
@@ -1,13 +1,13 @@
-title = I pushed something broken
+title = Ho rotto qualcosaI pushed something broken
 cards = revert push
 
 [description]
 
-We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`
+Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuto solo quando non lo abbiamo già inviato al remoto. Quando succede questo e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
 
 [setup]
 
-echo "this is fine
+echo "questo va bene
 
 ?
 
@@ -16,30 +16,30 @@ echo "this is fine
 ?" > text
 git add .
 git commit -m fine
-echo "this is fine
+echo "questo va bene
 
-this is also fine
+anche questo va bene
 
 ?
 
 ?" > text
-git commit -am "also fine"
-echo "this is fine
+git commit -am "anche bene"
+echo "questo va bene
 
-this is also fine
+anche questo va bene
 
-this is very bad
+questo è veramente sbagliato
 
 ?" > text
-git commit -am "very bad"
-echo "this is fine
+git commit -am "veramente sbagliato"
+echo "questo va bene
 
-this is also fine
+anche questo va bene
 
-this is very bad
+questo è veramente sbagliato
 
-this is fine again" > text
-git commit -am "fine again"
+questo va nuovamente bene" > text
+git commit -am "nuovamente bene"
 
 git push team main
 git branch -u team/main main
@@ -48,7 +48,7 @@ git branch -u team/main main
 
 [win team]
 
-# The team's main branch no longer contains the bad thing.
-! { git show main:text | grep -q "very bad"; }
-# And the history has not been modified.
-git show main^:text | grep -q "very bad"
+# Il ramo principale del Team non contiene più niente di sbagliato.
+! { git show main:text | grep -q "veramente sbaglaito"; }
+# e la cronologia non è stata modificata.
+git show main^:text | grep -q "veramente sbaglaito"
diff --git a/levels/it_IT/shit-happens/reflog b/levels/it_IT/shit-happens/reflog
index e21c4e7..8e8e51a 100644
--- a/levels/it_IT/shit-happens/reflog
+++ b/levels/it_IT/shit-happens/reflog
@@ -1,13 +1,13 @@
-title = Go back to where you were before
+title = Torna dove eri prima
 cards = checkout reflog
 
 [description]
 
-Say you were looking at something in the past, and then switched back to the main branch.
+Diciamo che stavi guardando qualcosa in passato e poi sei tornato al ramo principale.
 
-But then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?
+Ma poi ti sei distratto molto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo?
 
-There's a convenient command that shows you all the places your HEAD did point to in the past:
+C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato:
 
     git reflog
 
@@ -22,5 +22,5 @@ git checkout main
 
 [win]
 
-# Find out where you've been before, and go back there!
+# Trova cosa stavi facendo prima e tornaci!
 test "$(git rev-parse HEAD)" = "$(git rev-parse 3)"
diff --git a/levels/it_IT/shit-happens/restore-a-file b/levels/it_IT/shit-happens/restore-a-file
index 26450f0..16cf0dc 100644
--- a/levels/it_IT/shit-happens/restore-a-file
+++ b/levels/it_IT/shit-happens/restore-a-file
@@ -1,22 +1,22 @@
-title = Restore a deleted file
+title = Recuperare un file cancellato
 cards = checkout
 
 [description]
 
-Oops - you deleted the "essay" file, which you worked on all night!
+Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte!
 
-Luckily, Git is here to help! You can use `git checkout` to restore the file!
+Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file!
 
 [setup]
 
-echo important > essay
+echo importante > essay
 git add .
-git commit -m "Initial commit"
-echo "important content" > essay
-git commit -am "Improve essay"
+git commit -m "Commit iniziale"
+echo "contenuto importante" > essay
+git commit -am "Ottimizzato essay"
 rm essay
 
 [win]
 
-# Restore the essay to contain "important content"
-test "$(cat essay)" = "important content"
+# Recupera il file "essay" che contiene "contenuto importante"
+test "$(cat essay)" = "contenuto importante"
diff --git a/levels/it_IT/shit-happens/restore-a-file-from-the-past b/levels/it_IT/shit-happens/restore-a-file-from-the-past
index b51c108..c15f2a3 100644
--- a/levels/it_IT/shit-happens/restore-a-file-from-the-past
+++ b/levels/it_IT/shit-happens/restore-a-file-from-the-past
@@ -1,21 +1,22 @@
-title = Restore a file from the past
+title = Recuperare un file dal passato
 cards = checkout checkout-from commit
 
 [description]
 
-Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:
+Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits.
+Così:
 
     git checkout [commit] [file]
 
 [setup]
 
-echo "good version" > essay
+echo "versione buona" > essay
 git add .
-git commit -m "Initial commit"
-echo "bad version" > essay
-git commit -am "\"Improve\" essay"
+git commit -m "commit iniziale"
+echo "versione cattiva" > essay
+git commit -am "\"Migliorato\" essay"
 
 [win]
 
-# Get the first version of your essay, and make a new commit with it.
-test "$(git show main:essay)" = "good version"
+# Prendi la prima versione di "essay" e crea un nuovo commit con essa.
+test "$(git show main:essay)" = "versione buona"

From 91ad5092fbdbbfa991e903253e0957ad7756c0e5 Mon Sep 17 00:00:00 2001
From: Moreno Razzoli <morrolinux@gmail.com>
Date: Fri, 24 Sep 2021 20:54:49 +0200
Subject: [PATCH 23/49] localization: refining italian translation. part 1

---
 levels/it_IT/index/change      | 10 +++----
 levels/it_IT/index/compare     |  8 +++---
 levels/it_IT/index/new         | 10 +++----
 levels/it_IT/index/reset       | 12 ++++-----
 levels/it_IT/index/steps       |  4 +--
 levels/it_IT/merge/conflict    | 20 +++++++-------
 levels/it_IT/merge/merge       |  6 ++---
 levels/it_IT/merge/merge-abort | 26 +++++++++---------
 levels/it_IT/merge/sequence    |  1 +
 levels/it_IT/remotes/friend    | 10 +++----
 levels/it_IT/remotes/problems  |  8 +++---
 resources/cards.json           | 48 +++++++++++++++++-----------------
 12 files changed, 82 insertions(+), 81 deletions(-)

diff --git a/levels/it_IT/index/change b/levels/it_IT/index/change
index 6b701e3..970ffd6 100644
--- a/levels/it_IT/index/change
+++ b/levels/it_IT/index/change
@@ -1,21 +1,21 @@
-title = Aggiorna i file nell'indice
+title = Aggiornare i file nell'indice
 cards = add commit
 
 [description]
 
-Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice della versione cambiata dei file..
+Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file..
 
 Proviamoci!
 
-Le icona nel browser dei file mostrano quando il file attuale (bianco) e la versione nell'indice (blu) sono differenti o quando sono uguali!
+Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali!
 
 [win]
 
-Bene! L'indice, a volte, può essere chiamato "staging are" - Contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`!
+Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`!
 
 [setup]
 
-echo "La candela brucia con una fiamma blue." > candle
+echo "La candela brucia con una fiamma blu." > candle
 git add .
 git commit -m "L'inizio"
 
diff --git a/levels/it_IT/index/compare b/levels/it_IT/index/compare
index 4f4cf8f..557b654 100644
--- a/levels/it_IT/index/compare
+++ b/levels/it_IT/index/compare
@@ -3,20 +3,20 @@ cards = checkout commit-auto
 
 [description]
 
-Benvenuto nella lezione di oggi! Siamo impareremo come creare commits con più precisione!
+Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione!
 
-Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato ma una di loro rende più semplice capire cosa è successo.
+Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo.
 
 [win]
 
-# Pronti! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo!
+# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo!
 git branch --show-current | grep step-by-step
 
 [setup]
 
 echo "Una piccola ma pesante palla di vetro." > ball
 echo "Un sottile libro che sta in piedi." > book
-echo "Una candela brucia con una fiamma blue." > candle
+echo "Una candela brucia con una fiamma blu." > candle
 echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector
 
 git add .
diff --git a/levels/it_IT/index/new b/levels/it_IT/index/new
index cae2465..4ce39ec 100644
--- a/levels/it_IT/index/new
+++ b/levels/it_IT/index/new
@@ -1,23 +1,23 @@
-title = Aggiungi nuovi file all'indice
+title = Aggiungere nuovi file all'indice
 cards = add commit
 
 [description]
 
 Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero?
 
-Ma Git ti permette di prendere i cambiamenti che voui mettere in un commit!
+Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit!
 
-Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel browser dei file!
+Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager!
 
 Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo!
 
 [cli]
 
-Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere un nome file e premi il tasto tab per completare il nome. Questo ti permette di risparmiare tempo!
+Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo!
 
 [setup]
 
-echo "La candela brucia con una fiamma blue." > candle
+echo "La candela brucia con una fiamma blu." > candle
 
 [win]
 
diff --git a/levels/it_IT/index/reset b/levels/it_IT/index/reset
index 56aa6d7..fd118fd 100644
--- a/levels/it_IT/index/reset
+++ b/levels/it_IT/index/reset
@@ -1,4 +1,4 @@
-title = Resetta i file nell'indice
+title = Resettare i file nell'indice
 cards = add reset-file commit
 
 [description]
@@ -9,7 +9,7 @@ Per esempio, queste candele sono state spente e quella modifica è stata aggiunt
 
 Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit!
 
-Se hai già giornato l'indice di un file modificato, ma vuoi ripristinarlo, puoi usare `git reset`!
+Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`!
 
 [setup]
 
@@ -19,14 +19,14 @@ echo "Sta bruciando!" > blue_candle
 git add .
 git commit -m "L'inizio"
 
-echo "E' stata spenta." > red_candle
-echo "E' stata spenta." > green_candle
-echo "E' stata spenta." > blue_candle
+echo "È stata spenta." > red_candle
+echo "È stata spenta." > green_candle
+echo "È stata spenta." > blue_candle
 git add .
 
 [win]
 
-# Ripristina i cambiamenti nella candella verde e blu!
+# Ripristina i cambiamenti nella candela verde e in quella blu!
 git show :green_candle | grep burning &&
 git show :blue_candle | grep burning &&
 git show :red_candle | grep -v burning
diff --git a/levels/it_IT/index/steps b/levels/it_IT/index/steps
index b7700a1..8c13af7 100644
--- a/levels/it_IT/index/steps
+++ b/levels/it_IT/index/steps
@@ -1,4 +1,4 @@
-title = Aggiungi modifice passo dopo passo
+title = Aggiungere le modifice una per volta
 cards = add reset-file commit
 
 [description]
@@ -9,7 +9,7 @@ L'indice è veramente utile perché ci permette di essere precisi su quali cambi
 
 echo "Un martello, in equilibrio sul suo manico." > hammer
 echo "Una bottiglia contenente un liquido trasparente." > bottle
-echo "Un cubo di zucche bianco." > sugar_cube
+echo "Un cubetto di zucchero bianco." > sugar_cube
 
 git add .
 git commit -m "L'inizio"
diff --git a/levels/it_IT/merge/conflict b/levels/it_IT/merge/conflict
index e7c37fa..645b5ed 100644
--- a/levels/it_IT/merge/conflict
+++ b/levels/it_IT/merge/conflict
@@ -7,39 +7,39 @@ A volte le linee temporali si contraddicono a vicenda.
 
 Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali.
 
-Prova ad unirle insieme! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare gli elementi, ti mostrerà le sezione in conflitti. Puoi scegliere una delle due versioni o creare una combinazione di esse! Rimuovi i markers >>>, <<<, e === e crea un nuovo commit per finalizare l'unione!
+Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione!
 
-Lascia che la tua linea temporale definitiva sia "main".
+La tua linea temporale definitiva è "main".
 
 [setup]
 
-echo "Appena sveglio. Sei affamato." > sam
+echo "Si è appena svegliato. È affamato." > sam
 git add .
 git commit -m "L'inizio"
 
 git checkout -b pancakes
-echo "Avevamo pancakes con mirtilli e sciroppo d'acero per colazione." > sam
+echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam
 git add .
 git commit -m "Pancakes!"
 
 echo "
-Is at work." >> sam
-git commit -am "Vai a lavoro"
+È al lavoro." >> sam
+git commit -am "Va al lavoro"
 
 git checkout -b muesli main
-echo "Avevamo muesli con avena e fragole per colazione." > sam
+echo "Ha fatto colazione con muesli all'avena e fragole." > sam
 git add .
 git commit -m "Muesli!"
 
 echo "
-Is at work." >> sam
-git commit -am "Vai a lavoro"
+È al lavoro." >> sam
+git commit -am "Va al lavoro"
 
 git checkout main
 
 [win]
 
-# Crea un compromesso nella colazione del branch "main".
+# Crea un compromesso tra le due colazioni nel branch "main".
 git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)"
 
 [congrats]
diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge
index b23b023..a115cda 100644
--- a/levels/it_IT/merge/merge
+++ b/levels/it_IT/merge/merge
@@ -3,7 +3,7 @@ cards = checkout commit-auto merge
 
 [description]
 
-Ecco un trucco per domire un pò più a lungo: fai tutte le tue attività, in universi paralleli, e poi uniscile!
+Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile!
 
 [setup]
 
@@ -43,7 +43,7 @@ git commit -m "Compri un pò di caffe"
 
 echo "Non hai una baguette.
 
-Bevi caffe.
+Bevi il caffe.
 
 Non hai una ciambella." > you
 git add .
@@ -74,7 +74,7 @@ git branch -D main
 # Crea una situazione dove consumi una baguette, un caffe e una ciambella.
 { git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; }
 
-# E' un commit di unione.
+# Crea (e spostati su) un commit di unione.
 test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
 
 [congrats]
diff --git a/levels/it_IT/merge/merge-abort b/levels/it_IT/merge/merge-abort
index ce7190b..efabb5d 100644
--- a/levels/it_IT/merge/merge-abort
+++ b/levels/it_IT/merge/merge-abort
@@ -1,35 +1,35 @@
-title = Abort a merge
+title = Interrompere un merge
 cards = checkout commit-auto merge merge-abort
 
 [description]
 
-Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve.
+Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. 
 
-In these situations you can abort the merge to merge later. Use
+In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa
     git merge --abort
-when you are in a merge process.
+mentre sei nel processo di merge.
 
-Try to merge both commits and abort the merge afterwards.
+Prova a unire i due commit e interrompi la procedura di merge.
 
 [setup]
 
-echo "A new day is starting" > you
+echo "Un nuovo giorno sta iniziando" > you
 
 git add .
 git commit -m "Start"
 
-echo "Walking down the Main Lane." >> you
+echo "Stai camminando sulla corsia principale." >> you
 
 git add .
-git commit -m "Main Lane"
+git commit -m "Corsia Principale"
 
 
 git checkout HEAD~1
 
-echo "Walking down the Side Lane." >> you
+echo "Stai camminando sulla corsia laterale." >> you
 
 git add .
-git commit -m "Side Lane"
+git commit -m "Corsia laterale"
 
 git checkout HEAD~1
 
@@ -43,12 +43,12 @@ fi
 
 [win]
 
-# You tried to merge?
+# Hai provato a fare il merge?
 test -f .git/secretfile
 
-# You aborted to merge?
+# Hai interrotto il merge?
 test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^
 
 [congrats]
 
-Aaah, let's merge later...
+Aaah, faremo il merge più tardi...
diff --git a/levels/it_IT/merge/sequence b/levels/it_IT/merge/sequence
index c3b6caf..2e1aa81 100644
--- a/levels/it_IT/merge/sequence
+++ b/levels/it_IT/merge/sequence
@@ -1,2 +1,3 @@
 merge
 conflict
+merge-abort
\ No newline at end of file
diff --git a/levels/it_IT/remotes/friend b/levels/it_IT/remotes/friend
index 771db17..c6f46c8 100644
--- a/levels/it_IT/remotes/friend
+++ b/levels/it_IT/remotes/friend
@@ -1,11 +1,11 @@
-title = Amico
+title = Amici
 cards = pull push commit-auto checkout
 
 [description]
 
-Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo a loro!
+Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo!
 
-A turno fino a che non ti ritrovi ad avere cinque linee!
+Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee!
 
 [setup yours]
 
@@ -24,10 +24,10 @@ git commit -am "Un'altra linea"
 [actions friend]
 
 if test "$(git log --oneline | wc -l)" -eq 3; then
-    git reset --hard main # Necessario perché la directory di lavoro non è aggiornata fintanto che non viene inviata all'amico
+    git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico
     echo "Linea 4, blurbblubb" >> essay
     git commit -am "Linea finale"
-    hint "Oh bene, Ho aggiunt la quarta linea!"
+    hint "Oh bene, Ho aggiunto la quarta linea!"
 fi
 
 [win]
diff --git a/levels/it_IT/remotes/problems b/levels/it_IT/remotes/problems
index 068292a..764a6fc 100644
--- a/levels/it_IT/remotes/problems
+++ b/levels/it_IT/remotes/problems
@@ -3,7 +3,7 @@ cards = checkout add pull push commit-auto merge
 
 [description]
 
-Entrambi, tu ed il tuo amicp, avete lavorato sullo stesso file e volete sincronizare!
+Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare!
 
 [setup yours]
 
@@ -19,15 +19,15 @@ echo "Il capannone delle bici dovrebbe essere verde" > file
 
 git checkout main
 
-echo "Il capannone delle bici dovrebbe essere blue" > file
+echo "Il capannone delle bici dovrebbe essere blu" > file
 git commit -a -m "versione dell'amico"
 
 [win]
 
-# Invia le tue modifiche locali.
+# Fai il commit delle tue modifiche locali.
 test "$(git status -s)" = ""
 
 [win friend]
 
-# Quarda il suggerimento dell'amico, fai un compromesso e rimandalo in dietro.
+# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro.
 git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)"
diff --git a/resources/cards.json b/resources/cards.json
index 6eac0d6..a864853 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -12,7 +12,7 @@
         "command": "git clone ../[remote] .",
         "description": {
 	    "en_EN": "Create your own copy of someone else's repo.",
-	    "it_IT": "Crea la copiag del Repo di qualcun'altro."
+	    "it_IT": "Crea la tua copia personale del Repo di qualcun'altro."
 	}
     },
     {
@@ -36,7 +36,7 @@
         "command": "git checkout [commit, ref]",
         "description": {
 	    "en_EN": "Drag this card to a commit or to a branch to travel to it!",
-	    "it_IT": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento."
+	    "it_IT": "Trascina questa carta su un commit o su un branch per spostarti su di esso."
 	}
     },
     {
@@ -52,7 +52,7 @@
         "command": "git checkout [commit, ref] [file]",
         "description": {
 	    "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.",
-	    "it_IT": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice."
+	    "it_IT": "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
 	}
     },
     {
@@ -60,7 +60,7 @@
         "command": "git commit -a",
         "description": {
 	    "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.",
-	    "it_IT": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato."
+	    "it_IT": "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
 	}
     },
     {
@@ -68,7 +68,7 @@
         "command": "git add .; git commit",
         "description": {
 	    "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!",
-	    "it_IT": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato"
+	    "it_IT": "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!"
 	}
     },
     {
@@ -76,7 +76,7 @@
         "command": "git merge [commit, ref]",
         "description": {
 	    "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.",
-	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione."
+	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge."
 	}
     },
     {
@@ -92,15 +92,15 @@
         "command": "git rebase [commit]",
         "description": {
 	    "en_EN": "Put the events in your current timeline on top of the specified one.",
-	    "it_IT": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato."
-	}
+	    "it_IT": "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata."
+    }
     },
     {
         "id": "pull",
         "command": "git pull",
         "description": {
 	    "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.",
-	    "it_IT": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua."
+	    "it_IT": "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua."
 	}
     },
     {
@@ -108,7 +108,7 @@
         "command": "git fetch [remote]",
         "description": {
 	    "en_EN": "Get a someone else's version of the current timeline.",
-	    "it_IT": "Prende la versione, corrente, della linea temporale di qualcun'altro"
+	    "it_IT": "Prende la versione di qualcun'altro della temporale corrente"
 	}
     },
     {
@@ -116,7 +116,7 @@
         "command": "git push",
         "description": {
 	    "en_EN": "Give the current timeline to someone else.",
-	    "it_IT": "Invia la corrente line temporale a qualcun'altro"
+	    "it_IT": "Invia la linea temporale corrente a qualcun'altro"
 	}
     },
     {
@@ -124,7 +124,7 @@
         "command": "git rebase -i [commit]",
         "description": {
 	    "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.",
-	    "it_IT": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini "
+        "it_IT": "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda."
 	}
     },
     {
@@ -132,7 +132,7 @@
         "command": "git rebase --continue",
         "description": {
 	    "en_EN": "Continue the current rebasing process.",
-	    "it_IT": "Continua il corrente processo di ricostruzione"
+	    "it_IT": "Continua il processo di rebasing"
 	}
     },
     {
@@ -140,7 +140,7 @@
         "command": "git reset --hard [commit]",
         "description": {
 	    "en_EN": "Move the branch you're on to the specified commit.",
-	    "it_IT": "Muove il tuo branch (ramo) nello specifico commit."
+	    "it_IT": "Sposta il branch su cui ti trovi al commit specificato."
 	}
     },
     {
@@ -148,7 +148,7 @@
         "command": "git reset [commit]",
         "description": {
 	    "en_EN": "Jump to the commit, and update the index. Keep the current environment.",
-	    "it_IT": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale."
+	    "it_IT": "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
 	}
     },
     {
@@ -164,7 +164,7 @@
         "command": "git cherry-pick [commit]",
         "description": {
 	    "en_EN": "Repeat the specified action on top of your current timeline.",
-	    "it_IT": "Ripete l'azione specificata sulla corrente linea temporale"
+	    "it_IT": "Ripete l'azione specificata, in cima alla linea temporale corrente"
 	}
     },
     {
@@ -172,7 +172,7 @@
         "command": "git revert [commit]",
         "description": {
 	    "en_EN": "Make a new commit that reverts the changes of the speicified commit.",
-	    "it_IT": "Crea un nuovo commit che annula le modifiche dello specifico commit"
+	    "it_IT": "Crea un nuovo commit che annulla le modifiche del commit specificato."
 	}
     },
     {
@@ -188,7 +188,7 @@
         "command": "git bisect good",
         "description": {
 	    "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!"
+	    "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!"
 	}
     },
     {
@@ -204,7 +204,7 @@
         "command": "git add [file]",
         "description": {
 	    "en_EN": "Update the index version of the file to its current real content.",
-	    "it_IT": "Aggiorna l'indice del file con il, corrente, reale contenuto."
+        "it_IT": "Aggiorna la versione in indice del file con il contenuto attuale."
 	}
     },
     {
@@ -212,7 +212,7 @@
         "command": "git rm [file]",
         "description": {
 	    "en_EN": "Delete a file both in the working directory, as well as the index.",
-	    "it_IT": "Cancella il file sia dalla corrente directory che dall'indice."
+	    "it_IT": "Cancella un file sia dalla cartella di lavoro corrente che dall'indice."
 	}
     },
     {
@@ -220,7 +220,7 @@
         "command": "git commit",
         "description": {
 	    "en_EN": "Make a commit from the current index.",
-	    "it_IT": "Crea un commit dal corrente indice."
+	    "it_IT": "Crea un commit dall'indice corrente."
 	}
     },
     {
@@ -236,7 +236,7 @@
         "command": "git branch [string]",
         "description": {
 	    "en_EN": "Create a new branch at your current location.",
-	    "it_IT": "Crea un nuovo branch (ramo) nella tua corrente posizione."
+	    "it_IT": "Crea un nuovo branch alla posizione corrente."
 	}
     },
     {
@@ -244,7 +244,7 @@
         "command": "git branch -D [ref]",
         "description": {
 	    "en_EN": "Delete a branch.",
-	    "it_IT": "Cancella un branch.(ramo)"
+	    "it_IT": "Cancella un branch."
 	}
     },
     {
@@ -252,7 +252,7 @@
         "command": "git reflog [ref, head]",
         "description": {
 	    "en_EN": "Display a log of where the ref pointed to in the past.",
-	    "it_IT": "Mostra un log di dove il riferimento puntava in passato"
+	    "it_IT": "Mostra un log di dove il riferimento (ref) ha puntato in passato."
 	}
     },
     {

From 93b2a726bb4988685c254e0c9da91628f48b523f Mon Sep 17 00:00:00 2001
From: Moreno Razzoli <morrolinux@gmail.com>
Date: Thu, 7 Oct 2021 11:53:41 +0200
Subject: [PATCH 24/49] refining italian translation part 2

---
 levels/it_IT/changing-the-past/rebase             | 4 ++--
 levels/it_IT/changing-the-past/reorder            | 8 ++++----
 levels/it_IT/shit-happens/bad-commit              | 4 ++--
 levels/it_IT/shit-happens/pushed-something-broken | 8 ++++----
 levels/it_IT/shit-happens/reflog                  | 4 ++--
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase
index 5de4a47..1daa1e0 100644
--- a/levels/it_IT/changing-the-past/rebase
+++ b/levels/it_IT/changing-the-past/rebase
@@ -3,9 +3,9 @@ cards = checkout commit-auto reset-hard rebase
 
 [description]
 
-Okay - Viene vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro i regolamenti dell'International Time Travel Association. Dopotutto, dovrai svolgere i tuoi compiti in sequenza.
+Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto.
 
-Vedi la carta "rebase"? Quando la sposti su un commit, copierà gli eventi della tua corrente linea temporale dopo quello specificato! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi.
+Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi.
 
 Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale!
 
diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder
index 93c340c..6895f15 100644
--- a/levels/it_IT/changing-the-past/reorder
+++ b/levels/it_IT/changing-the-past/reorder
@@ -5,8 +5,8 @@ cards = checkout commit-auto reset-hard rebase-interactive cherry-pick
 
 Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine?
 
-Ci sono due modi per farlo: Puoi spostare la carta "interactive rebase" nel commit precedente a quello che vuoi cambiare, poi aprire e riordinare le linee nel file e salvarlo.
-Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit nell'ordine desiderato. Hai carte per entrambe i modi!
+Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo.
+Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi!
 
 [setup]
 
@@ -69,9 +69,9 @@ git commit -am "Ti metti la maglia"
 
 [win]
 
-# Riordina i commits per vestirti nel modo corretto
+# Riordina i commit per vestirti nel modo corretto
 { git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
 
 [congrats]
 
-Sentiti libero di resettare il livello e provare l'altra strategia!Qual'è quella che preferisci?
+Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci?
diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it_IT/shit-happens/bad-commit
index b859921..0febbc2 100644
--- a/levels/it_IT/shit-happens/bad-commit
+++ b/levels/it_IT/shit-happens/bad-commit
@@ -3,11 +3,11 @@ cards = reset commit-a
 
 [description]
 
-Oh no, abbiamo fatto un cattivo commit! Come possiamo annualre un commit e tornare al punto per poter riprovare?
+Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare?
 
 La risposta è usare `git reset [commit]` che fa due cose:
 
-- Reimposta il riferimento del ramo corrente al commit che hai specificato.
+- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato.
 - Reimposta l'indice a quel commit.
 
 Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri.
diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken
index 5535bc3..7ae7cd4 100644
--- a/levels/it_IT/shit-happens/pushed-something-broken
+++ b/levels/it_IT/shit-happens/pushed-something-broken
@@ -1,9 +1,9 @@
-title = Ho rotto qualcosaI pushed something broken
+title = Ho fatto il push di qualcosa di rotto
 cards = revert push
 
 [description]
 
-Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuto solo quando non lo abbiamo già inviato al remoto. Quando succede questo e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
+Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
 
 [setup]
 
@@ -23,7 +23,7 @@ anche questo va bene
 ?
 
 ?" > text
-git commit -am "anche bene"
+git commit -am "anche questo bene"
 echo "questo va bene
 
 anche questo va bene
@@ -48,7 +48,7 @@ git branch -u team/main main
 
 [win team]
 
-# Il ramo principale del Team non contiene più niente di sbagliato.
+# Il ramo main del Team non contiene più niente di sbagliato.
 ! { git show main:text | grep -q "veramente sbaglaito"; }
 # e la cronologia non è stata modificata.
 git show main^:text | grep -q "veramente sbaglaito"
diff --git a/levels/it_IT/shit-happens/reflog b/levels/it_IT/shit-happens/reflog
index 8e8e51a..23f7bdc 100644
--- a/levels/it_IT/shit-happens/reflog
+++ b/levels/it_IT/shit-happens/reflog
@@ -3,9 +3,9 @@ cards = checkout reflog
 
 [description]
 
-Diciamo che stavi guardando qualcosa in passato e poi sei tornato al ramo principale.
+Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main).
 
-Ma poi ti sei distratto molto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo?
+Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo?
 
 C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato:
 

From e57dfca6db266c12d5fcb842098391969980e15d Mon Sep 17 00:00:00 2001
From: Moreno Razzoli <morrolinux@gmail.com>
Date: Thu, 7 Oct 2021 20:48:24 +0200
Subject: [PATCH 25/49] various bugfixes

---
 levels/it_IT/changing-the-past/rebase             | 2 +-
 levels/it_IT/changing-the-past/reorder            | 2 +-
 levels/it_IT/merge/merge                          | 2 +-
 levels/it_IT/shit-happens/pushed-something-broken | 8 ++++----
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase
index 1daa1e0..a704c80 100644
--- a/levels/it_IT/changing-the-past/rebase
+++ b/levels/it_IT/changing-the-past/rebase
@@ -77,7 +77,7 @@ git checkout --detach main
 [win]
 
 # Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale
-{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "Bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
+{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
 
 [congrats]
 
diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder
index 6895f15..8bbe21a 100644
--- a/levels/it_IT/changing-the-past/reorder
+++ b/levels/it_IT/changing-the-past/reorder
@@ -38,7 +38,7 @@ echo "Ti sei appena svegliato.
 
 Non indossi biancheria intima.
 
-Indossi pantaloni
+Indossi pantaloni.
 
 Non indossi la maglia.
 
diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge
index a115cda..9050cb7 100644
--- a/levels/it_IT/merge/merge
+++ b/levels/it_IT/merge/merge
@@ -72,7 +72,7 @@ git branch -D main
 [win]
 
 # Crea una situazione dove consumi una baguette, un caffe e una ciambella.
-{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; }
+{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; }
 
 # Crea (e spostati su) un commit di unione.
 test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken
index 7ae7cd4..cb7f2fb 100644
--- a/levels/it_IT/shit-happens/pushed-something-broken
+++ b/levels/it_IT/shit-happens/pushed-something-broken
@@ -3,7 +3,7 @@ cards = revert push
 
 [description]
 
-Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
+Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
 
 [setup]
 
@@ -15,7 +15,7 @@ echo "questo va bene
 
 ?" > text
 git add .
-git commit -m fine
+git commit -m bene
 echo "questo va bene
 
 anche questo va bene
@@ -49,6 +49,6 @@ git branch -u team/main main
 [win team]
 
 # Il ramo main del Team non contiene più niente di sbagliato.
-! { git show main:text | grep -q "veramente sbaglaito"; }
+! { git show main:text | grep -q "veramente sbagliato"; }
 # e la cronologia non è stata modificata.
-git show main^:text | grep -q "veramente sbaglaito"
+git show main^:text | grep -q "veramente sbagliato"

From d8e649d3dcf5841a20c197df395546136cb6097b Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:31:42 +0200
Subject: [PATCH 26/49] Update scenes/repository.gd

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 scenes/repository.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scenes/repository.gd b/scenes/repository.gd
index c2f1524..f64056f 100644
--- a/scenes/repository.gd
+++ b/scenes/repository.gd
@@ -89,7 +89,7 @@ func set_label(new_label):
 			$Rows/RepoVis/SeparatorLine/DropArea.queue_free()
 			$Rows/RepoVis/SeparatorLine.hide()
 		else:
-			game.notify("INTERACT", self, "remote")
+			game.notify(tr("INTERACT"), self, "remote")
 		label_node.text = new_label
 
 func random_position():

From d218658320adb78c1f4bd5d1b3f337f3c0204708 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:31:49 +0200
Subject: [PATCH 27/49] Update scenes/node.gd

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 scenes/node.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scenes/node.gd b/scenes/node.gd
index f810a81..716ac3d 100644
--- a/scenes/node.gd
+++ b/scenes/node.gd
@@ -80,7 +80,7 @@ func type_set(new_type):
 			$Sprite.texture = preload("res://nodes/tree.svg")
 		"commit":
 			$Sprite.texture = preload("res://nodes/commit.svg")
-			game.notify("DRAG_AROUND", self, "drag-nodes")
+			game.notify(tr("DRAG_AROUND"), self, "drag-nodes")
 		"tag":
 			$Sprite.texture = preload("res://nodes/blob.svg")
 		"ref":

From 169a4974baf89965271add9ae8bd60c2f030a581 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:31:55 +0200
Subject: [PATCH 28/49] Update scenes/level_select.gd

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 scenes/level_select.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scenes/level_select.gd b/scenes/level_select.gd
index cdcaaf9..a0118f6 100644
--- a/scenes/level_select.gd
+++ b/scenes/level_select.gd
@@ -57,7 +57,7 @@ func reload():
 			level_list.add_child(hb)
 			
 			if badge.active:
-				game.notify("GOLDEN_BADGE", badge, "cli-badge")
+				game.notify(tr("GOLDEN_BADGE"), badge, "cli-badge")
 			level_id += 1
 			
 		chapter_id += 1

From 659d48a0c456df66f3edc206d26a4d575e4f94bc Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:32:00 +0200
Subject: [PATCH 29/49] Update scenes/title.gd

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 scenes/title.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scenes/title.gd b/scenes/title.gd
index cf99a2d..2a6a199 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -8,7 +8,7 @@ func _ready():
 		game.skipped_title = true
 		get_tree().change_scene("res://scenes/level_select.tscn")
 	
-	make_popup_item()
+	make_popup_items()
 
 func quit():
 	get_tree().quit()

From 3c26150450b374f4e84bc5283cda182c4261478e Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:32:06 +0200
Subject: [PATCH 30/49] Update scenes/title.gd

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 scenes/title.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scenes/title.gd b/scenes/title.gd
index 2a6a199..6fdbebb 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -40,7 +40,7 @@ func uncheck_all_item():
 
 
 # Create popup items width allowed locales
-func make_popup_item():
+func make_popup_items():
 	for i in game.langs.keys():
 		popup.get_popup().add_radio_check_item(game.langs[i], i)
 	

From dae7d04be0bb615b18728917dfec0113dc7a9ee4 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:32:14 +0200
Subject: [PATCH 31/49] Update resources/localizations.csv

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 resources/localizations.csv | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resources/localizations.csv b/resources/localizations.csv
index e64522b..4e082eb 100644
--- a/resources/localizations.csv
+++ b/resources/localizations.csv
@@ -1,5 +1,5 @@
 keys,en,it
-LEVELS,Livels,Livelli
+LEVELS,Levels,Livelli
 QUIT,Quit,Esci
 BACK,Back,Indietro
 RELOAD,Reload,Ricarica

From 71183f09c2f81c2aeb0b90d38360ee5b88a3925b Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 16 Aug 2022 08:32:21 +0200
Subject: [PATCH 32/49] Update README.md

Co-authored-by: schokotets <moritzleni@gmail.com>
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 88ba387..f1e4b5b 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Example:
 Example:
 
 keys,en,it,es
-LEVELS,Livels,Livelli,niveles
+LEVELS,Levels,Livelli,niveles
 QUIT,Quit,Esci,Salir
 BACK,Back,Indietro,Espalda
 

From 9042005c8b642142261a75641cb2debd308290f9 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 17 Aug 2022 20:19:42 +0200
Subject: [PATCH 33/49] improved the name of language variables and moved the
 languages management script in the ButtonMenu

---
 levels/{en_EN => en}/bisect/bisect            |  0
 levels/{en_EN => en}/bisect/sequence          |  0
 levels/{en_EN => en}/branches/branch-create   |  0
 levels/{en_EN => en}/branches/branch-remove   |  0
 levels/{en_EN => en}/branches/checkout-commit |  0
 levels/{en_EN => en}/branches/fork            |  0
 levels/{en_EN => en}/branches/grow            |  0
 levels/{en_EN => en}/branches/reorder         |  0
 levels/{en_EN => en}/branches/sequence        |  0
 levels/{en_EN => en}/changing-the-past/rebase |  0
 .../{en_EN => en}/changing-the-past/reorder   |  0
 .../{en_EN => en}/changing-the-past/sequence  |  0
 levels/{en_EN => en}/files/files-add          |  0
 levels/{en_EN => en}/files/files-delete       |  0
 levels/{en_EN => en}/files/sequence           |  0
 levels/{en_EN => en}/index/add                |  0
 levels/{en_EN => en}/index/change             |  0
 levels/{en_EN => en}/index/checkout           |  0
 levels/{en_EN => en}/index/compare            |  0
 levels/{en_EN => en}/index/new                |  0
 levels/{en_EN => en}/index/reset              |  0
 levels/{en_EN => en}/index/rm                 |  0
 levels/{en_EN => en}/index/sequence           |  0
 levels/{en_EN => en}/index/steps              |  0
 levels/{en_EN => en}/intro/cli                |  0
 levels/{en_EN => en}/intro/commit             |  0
 levels/{en_EN => en}/intro/copies             |  0
 levels/{en_EN => en}/intro/init               |  0
 levels/{en_EN => en}/intro/remote             |  0
 levels/{en_EN => en}/intro/risky              |  0
 levels/{en_EN => en}/intro/sequence           |  0
 levels/{en_EN => en}/intro/who-are-you        |  0
 levels/{en_EN => en}/low-level/basics         |  0
 levels/{en_EN => en}/low-level/blob-create    |  0
 levels/{en_EN => en}/low-level/blob-remove    |  0
 levels/{en_EN => en}/low-level/commit-create  |  0
 levels/{en_EN => en}/low-level/commit-parents |  0
 levels/{en_EN => en}/low-level/commit-rhombus |  0
 levels/{en_EN => en}/low-level/index-add      |  0
 levels/{en_EN => en}/low-level/index-remove   |  0
 levels/{en_EN => en}/low-level/index-update   |  0
 .../{en_EN => en}/low-level/puzzle-apocalypse |  0
 .../low-level/puzzle-precious-blob            |  0
 .../low-level/puzzle-trees-all-the-way-down   |  0
 levels/{en_EN => en}/low-level/ref-create     |  0
 levels/{en_EN => en}/low-level/ref-move       |  0
 levels/{en_EN => en}/low-level/ref-remove     |  0
 levels/{en_EN => en}/low-level/sequence       |  0
 levels/{en_EN => en}/low-level/symref-create  |  0
 .../{en_EN => en}/low-level/symref-no-deref   |  0
 levels/{en_EN => en}/low-level/tree-create    |  0
 levels/{en_EN => en}/low-level/tree-nested    |  0
 levels/{en_EN => en}/low-level/tree-read      |  0
 levels/{en_EN => en}/low-level/welcome        |  0
 levels/{en_EN => en}/merge/conflict           |  0
 levels/{en_EN => en}/merge/merge              |  0
 levels/{en_EN => en}/merge/merge-abort        |  0
 levels/{en_EN => en}/merge/sequence           |  0
 levels/{en_EN => en}/remotes/friend           |  0
 levels/{en_EN => en}/remotes/problems         |  0
 levels/{en_EN => en}/remotes/sequence         |  0
 levels/{en_EN => en}/sandbox/empty            |  0
 levels/{en_EN => en}/sandbox/remote           |  0
 levels/{en_EN => en}/sandbox/sequence         |  0
 levels/{en_EN => en}/sandbox/three-commits    |  0
 levels/{en_EN => en}/sequence                 |  0
 levels/{en_EN => en}/shit-happens/bad-commit  |  0
 .../shit-happens/pushed-something-broken      |  0
 levels/{en_EN => en}/shit-happens/reflog      |  0
 .../{en_EN => en}/shit-happens/restore-a-file |  0
 .../shit-happens/restore-a-file-from-the-past |  0
 levels/{en_EN => en}/shit-happens/sequence    |  0
 levels/{en_EN => en}/stash/sequence           |  0
 levels/{en_EN => en}/stash/stash              |  0
 levels/{en_EN => en}/stash/stash-branch       |  0
 levels/{en_EN => en}/stash/stash-clear        |  0
 levels/{en_EN => en}/stash/stash-merge        |  0
 levels/{en_EN => en}/stash/stash-pop          |  0
 levels/{en_EN => en}/tags/add-tag             |  0
 levels/{en_EN => en}/tags/add-tag-later       |  0
 levels/{en_EN => en}/tags/remote-tag          |  0
 levels/{en_EN => en}/tags/remove-tag          |  0
 levels/{en_EN => en}/tags/sequence            |  0
 levels/{en_EN => en}/unused/checkout          |  0
 levels/{en_EN => en}/unused/clone             |  0
 levels/{en_EN => en}/unused/commit            |  0
 levels/{en_EN => en}/unused/commit-a          |  0
 levels/{en_EN => en}/unused/fetch             |  0
 levels/{en_EN => en}/unused/files-move        |  0
 levels/{en_EN => en}/unused/index-mv          |  0
 levels/{en_EN => en}/unused/init              |  0
 levels/{en_EN => en}/unused/pull-push         |  0
 levels/{en_EN => en}/unused/remotes-add       |  0
 levels/{en_EN => en}/unused/remotes-delete    |  0
 levels/{en_EN => en}/unused/restore           |  0
 levels/{en_EN => en}/unused/split             |  0
 levels/{en_EN => en}/unused/steps             |  0
 levels/{en_EN => en}/unused/who-are-you       |  0
 levels/{en_EN => en}/workflows/gitignore      |  0
 levels/{en_EN => en}/workflows/pr             |  0
 levels/{en_EN => en}/workflows/sequence       |  0
 levels/{it_IT => it}/bisect/bisect            |  0
 levels/{it_IT => it}/bisect/sequence          |  0
 levels/{it_IT => it}/branches/branch-create   |  0
 levels/{it_IT => it}/branches/branch-remove   |  0
 levels/{it_IT => it}/branches/checkout-commit |  0
 levels/{it_IT => it}/branches/fork            |  0
 levels/{it_IT => it}/branches/grow            |  0
 levels/{it_IT => it}/branches/reorder         |  0
 levels/{it_IT => it}/branches/sequence        |  0
 levels/{it_IT => it}/changing-the-past/rebase |  0
 .../{it_IT => it}/changing-the-past/reorder   |  0
 .../{it_IT => it}/changing-the-past/sequence  |  0
 levels/{it_IT => it}/files/files-add          |  0
 levels/{it_IT => it}/files/files-delete       |  0
 levels/{it_IT => it}/files/sequence           |  0
 levels/{it_IT => it}/index/#sequence#         |  0
 levels/{it_IT => it}/index/add                |  0
 levels/{it_IT => it}/index/change             |  0
 levels/{it_IT => it}/index/checkout           |  0
 levels/{it_IT => it}/index/compare            |  0
 levels/{it_IT => it}/index/new                |  0
 levels/{it_IT => it}/index/reset              |  0
 levels/{it_IT => it}/index/rm                 |  0
 levels/{it_IT => it}/index/sequence           |  0
 levels/{it_IT => it}/index/steps              |  0
 levels/{it_IT => it}/intro/cli                |  0
 levels/{it_IT => it}/intro/commit             |  0
 levels/{it_IT => it}/intro/copies             |  0
 levels/{it_IT => it}/intro/init               |  0
 levels/{it_IT => it}/intro/remote             |  0
 levels/{it_IT => it}/intro/risky              |  0
 levels/{it_IT => it}/intro/sequence           |  0
 levels/{it_IT => it}/intro/who-are-you        |  0
 levels/{it_IT => it}/low-level/basics         |  0
 levels/{it_IT => it}/low-level/blob-create    |  0
 levels/{it_IT => it}/low-level/blob-remove    |  0
 levels/{it_IT => it}/low-level/commit-create  |  0
 levels/{it_IT => it}/low-level/commit-parents |  0
 levels/{it_IT => it}/low-level/commit-rhombus |  0
 levels/{it_IT => it}/low-level/index-add      |  0
 levels/{it_IT => it}/low-level/index-remove   |  0
 levels/{it_IT => it}/low-level/index-update   |  0
 .../{it_IT => it}/low-level/puzzle-apocalypse |  0
 .../low-level/puzzle-precious-blob            |  0
 .../low-level/puzzle-trees-all-the-way-down   |  0
 levels/{it_IT => it}/low-level/ref-create     |  0
 levels/{it_IT => it}/low-level/ref-move       |  0
 levels/{it_IT => it}/low-level/ref-remove     |  0
 levels/{it_IT => it}/low-level/sequence       |  0
 levels/{it_IT => it}/low-level/symref-create  |  0
 .../{it_IT => it}/low-level/symref-no-deref   |  0
 levels/{it_IT => it}/low-level/tree-create    |  0
 levels/{it_IT => it}/low-level/tree-nested    |  0
 levels/{it_IT => it}/low-level/tree-read      |  0
 levels/{it_IT => it}/low-level/welcome        |  0
 levels/{it_IT => it}/merge/conflict           |  0
 levels/{it_IT => it}/merge/merge              |  0
 levels/{it_IT => it}/merge/merge-abort        |  0
 levels/{it_IT => it}/merge/sequence           |  0
 levels/{it_IT => it}/remotes/friend           |  0
 levels/{it_IT => it}/remotes/problems         |  0
 levels/{it_IT => it}/remotes/sequence         |  0
 levels/{it_IT => it}/sandbox/empty            |  0
 levels/{it_IT => it}/sandbox/remote           |  0
 levels/{it_IT => it}/sandbox/sequence         |  0
 levels/{it_IT => it}/sandbox/three-commits    |  0
 levels/{it_IT => it}/sequence                 |  0
 levels/{it_IT => it}/shit-happens/bad-commit  |  0
 .../shit-happens/pushed-something-broken      |  0
 levels/{it_IT => it}/shit-happens/reflog      |  0
 .../{it_IT => it}/shit-happens/restore-a-file |  0
 .../shit-happens/restore-a-file-from-the-past |  0
 levels/{it_IT => it}/shit-happens/sequence    |  0
 levels/{it_IT => it}/stash/sequence           |  0
 levels/{it_IT => it}/stash/stash              |  0
 levels/{it_IT => it}/stash/stash-branch       |  0
 levels/{it_IT => it}/stash/stash-clear        |  0
 levels/{it_IT => it}/stash/stash-merge        |  0
 levels/{it_IT => it}/stash/stash-pop          |  0
 levels/{it_IT => it}/tags/add-tag             |  0
 levels/{it_IT => it}/tags/add-tag-later       |  0
 levels/{it_IT => it}/tags/remote-tag          |  0
 levels/{it_IT => it}/tags/remove-tag          |  0
 levels/{it_IT => it}/tags/sequence            |  0
 levels/{it_IT => it}/unused/checkout          |  0
 levels/{it_IT => it}/unused/clone             |  0
 levels/{it_IT => it}/unused/commit            |  0
 levels/{it_IT => it}/unused/commit-a          |  0
 levels/{it_IT => it}/unused/fetch             |  0
 levels/{it_IT => it}/unused/files-move        |  0
 levels/{it_IT => it}/unused/index-mv          |  0
 levels/{it_IT => it}/unused/init              |  0
 levels/{it_IT => it}/unused/pull-push         |  0
 levels/{it_IT => it}/unused/remotes-add       |  0
 levels/{it_IT => it}/unused/remotes-delete    |  0
 levels/{it_IT => it}/unused/restore           |  0
 levels/{it_IT => it}/unused/split             |  0
 levels/{it_IT => it}/unused/steps             |  0
 levels/{it_IT => it}/unused/who-are-you       |  0
 levels/{it_IT => it}/workflows/gitignore      |  0
 levels/{it_IT => it}/workflows/pr             |  0
 levels/{it_IT => it}/workflows/sequence       |  0
 project.godot                                 | 26 +++++-----
 scenes/Language.gd                            | 34 +++++++++++++
 scenes/chapter.gd                             |  6 +--
 scenes/game.gd                                | 12 ++---
 scenes/levels.gd                              |  8 ++--
 scenes/title.gd                               | 48 +++++++++----------
 scenes/title.tscn                             |  8 ++--
 styles/theme.tres                             | 18 +++----
 211 files changed, 98 insertions(+), 62 deletions(-)
 rename levels/{en_EN => en}/bisect/bisect (100%)
 rename levels/{en_EN => en}/bisect/sequence (100%)
 rename levels/{en_EN => en}/branches/branch-create (100%)
 rename levels/{en_EN => en}/branches/branch-remove (100%)
 rename levels/{en_EN => en}/branches/checkout-commit (100%)
 rename levels/{en_EN => en}/branches/fork (100%)
 rename levels/{en_EN => en}/branches/grow (100%)
 rename levels/{en_EN => en}/branches/reorder (100%)
 rename levels/{en_EN => en}/branches/sequence (100%)
 rename levels/{en_EN => en}/changing-the-past/rebase (100%)
 rename levels/{en_EN => en}/changing-the-past/reorder (100%)
 rename levels/{en_EN => en}/changing-the-past/sequence (100%)
 rename levels/{en_EN => en}/files/files-add (100%)
 rename levels/{en_EN => en}/files/files-delete (100%)
 rename levels/{en_EN => en}/files/sequence (100%)
 rename levels/{en_EN => en}/index/add (100%)
 rename levels/{en_EN => en}/index/change (100%)
 rename levels/{en_EN => en}/index/checkout (100%)
 rename levels/{en_EN => en}/index/compare (100%)
 rename levels/{en_EN => en}/index/new (100%)
 rename levels/{en_EN => en}/index/reset (100%)
 rename levels/{en_EN => en}/index/rm (100%)
 rename levels/{en_EN => en}/index/sequence (100%)
 rename levels/{en_EN => en}/index/steps (100%)
 rename levels/{en_EN => en}/intro/cli (100%)
 rename levels/{en_EN => en}/intro/commit (100%)
 rename levels/{en_EN => en}/intro/copies (100%)
 rename levels/{en_EN => en}/intro/init (100%)
 rename levels/{en_EN => en}/intro/remote (100%)
 rename levels/{en_EN => en}/intro/risky (100%)
 rename levels/{en_EN => en}/intro/sequence (100%)
 rename levels/{en_EN => en}/intro/who-are-you (100%)
 rename levels/{en_EN => en}/low-level/basics (100%)
 rename levels/{en_EN => en}/low-level/blob-create (100%)
 rename levels/{en_EN => en}/low-level/blob-remove (100%)
 rename levels/{en_EN => en}/low-level/commit-create (100%)
 rename levels/{en_EN => en}/low-level/commit-parents (100%)
 rename levels/{en_EN => en}/low-level/commit-rhombus (100%)
 rename levels/{en_EN => en}/low-level/index-add (100%)
 rename levels/{en_EN => en}/low-level/index-remove (100%)
 rename levels/{en_EN => en}/low-level/index-update (100%)
 rename levels/{en_EN => en}/low-level/puzzle-apocalypse (100%)
 rename levels/{en_EN => en}/low-level/puzzle-precious-blob (100%)
 rename levels/{en_EN => en}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{en_EN => en}/low-level/ref-create (100%)
 rename levels/{en_EN => en}/low-level/ref-move (100%)
 rename levels/{en_EN => en}/low-level/ref-remove (100%)
 rename levels/{en_EN => en}/low-level/sequence (100%)
 rename levels/{en_EN => en}/low-level/symref-create (100%)
 rename levels/{en_EN => en}/low-level/symref-no-deref (100%)
 rename levels/{en_EN => en}/low-level/tree-create (100%)
 rename levels/{en_EN => en}/low-level/tree-nested (100%)
 rename levels/{en_EN => en}/low-level/tree-read (100%)
 rename levels/{en_EN => en}/low-level/welcome (100%)
 rename levels/{en_EN => en}/merge/conflict (100%)
 rename levels/{en_EN => en}/merge/merge (100%)
 rename levels/{en_EN => en}/merge/merge-abort (100%)
 rename levels/{en_EN => en}/merge/sequence (100%)
 rename levels/{en_EN => en}/remotes/friend (100%)
 rename levels/{en_EN => en}/remotes/problems (100%)
 rename levels/{en_EN => en}/remotes/sequence (100%)
 rename levels/{en_EN => en}/sandbox/empty (100%)
 rename levels/{en_EN => en}/sandbox/remote (100%)
 rename levels/{en_EN => en}/sandbox/sequence (100%)
 rename levels/{en_EN => en}/sandbox/three-commits (100%)
 rename levels/{en_EN => en}/sequence (100%)
 rename levels/{en_EN => en}/shit-happens/bad-commit (100%)
 rename levels/{en_EN => en}/shit-happens/pushed-something-broken (100%)
 rename levels/{en_EN => en}/shit-happens/reflog (100%)
 rename levels/{en_EN => en}/shit-happens/restore-a-file (100%)
 rename levels/{en_EN => en}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{en_EN => en}/shit-happens/sequence (100%)
 rename levels/{en_EN => en}/stash/sequence (100%)
 rename levels/{en_EN => en}/stash/stash (100%)
 rename levels/{en_EN => en}/stash/stash-branch (100%)
 rename levels/{en_EN => en}/stash/stash-clear (100%)
 rename levels/{en_EN => en}/stash/stash-merge (100%)
 rename levels/{en_EN => en}/stash/stash-pop (100%)
 rename levels/{en_EN => en}/tags/add-tag (100%)
 rename levels/{en_EN => en}/tags/add-tag-later (100%)
 rename levels/{en_EN => en}/tags/remote-tag (100%)
 rename levels/{en_EN => en}/tags/remove-tag (100%)
 rename levels/{en_EN => en}/tags/sequence (100%)
 rename levels/{en_EN => en}/unused/checkout (100%)
 rename levels/{en_EN => en}/unused/clone (100%)
 rename levels/{en_EN => en}/unused/commit (100%)
 rename levels/{en_EN => en}/unused/commit-a (100%)
 rename levels/{en_EN => en}/unused/fetch (100%)
 rename levels/{en_EN => en}/unused/files-move (100%)
 rename levels/{en_EN => en}/unused/index-mv (100%)
 rename levels/{en_EN => en}/unused/init (100%)
 rename levels/{en_EN => en}/unused/pull-push (100%)
 rename levels/{en_EN => en}/unused/remotes-add (100%)
 rename levels/{en_EN => en}/unused/remotes-delete (100%)
 rename levels/{en_EN => en}/unused/restore (100%)
 rename levels/{en_EN => en}/unused/split (100%)
 rename levels/{en_EN => en}/unused/steps (100%)
 rename levels/{en_EN => en}/unused/who-are-you (100%)
 rename levels/{en_EN => en}/workflows/gitignore (100%)
 rename levels/{en_EN => en}/workflows/pr (100%)
 rename levels/{en_EN => en}/workflows/sequence (100%)
 rename levels/{it_IT => it}/bisect/bisect (100%)
 rename levels/{it_IT => it}/bisect/sequence (100%)
 rename levels/{it_IT => it}/branches/branch-create (100%)
 rename levels/{it_IT => it}/branches/branch-remove (100%)
 rename levels/{it_IT => it}/branches/checkout-commit (100%)
 rename levels/{it_IT => it}/branches/fork (100%)
 rename levels/{it_IT => it}/branches/grow (100%)
 rename levels/{it_IT => it}/branches/reorder (100%)
 rename levels/{it_IT => it}/branches/sequence (100%)
 rename levels/{it_IT => it}/changing-the-past/rebase (100%)
 rename levels/{it_IT => it}/changing-the-past/reorder (100%)
 rename levels/{it_IT => it}/changing-the-past/sequence (100%)
 rename levels/{it_IT => it}/files/files-add (100%)
 rename levels/{it_IT => it}/files/files-delete (100%)
 rename levels/{it_IT => it}/files/sequence (100%)
 rename levels/{it_IT => it}/index/#sequence# (100%)
 rename levels/{it_IT => it}/index/add (100%)
 rename levels/{it_IT => it}/index/change (100%)
 rename levels/{it_IT => it}/index/checkout (100%)
 rename levels/{it_IT => it}/index/compare (100%)
 rename levels/{it_IT => it}/index/new (100%)
 rename levels/{it_IT => it}/index/reset (100%)
 rename levels/{it_IT => it}/index/rm (100%)
 rename levels/{it_IT => it}/index/sequence (100%)
 rename levels/{it_IT => it}/index/steps (100%)
 rename levels/{it_IT => it}/intro/cli (100%)
 rename levels/{it_IT => it}/intro/commit (100%)
 rename levels/{it_IT => it}/intro/copies (100%)
 rename levels/{it_IT => it}/intro/init (100%)
 rename levels/{it_IT => it}/intro/remote (100%)
 rename levels/{it_IT => it}/intro/risky (100%)
 rename levels/{it_IT => it}/intro/sequence (100%)
 rename levels/{it_IT => it}/intro/who-are-you (100%)
 rename levels/{it_IT => it}/low-level/basics (100%)
 rename levels/{it_IT => it}/low-level/blob-create (100%)
 rename levels/{it_IT => it}/low-level/blob-remove (100%)
 rename levels/{it_IT => it}/low-level/commit-create (100%)
 rename levels/{it_IT => it}/low-level/commit-parents (100%)
 rename levels/{it_IT => it}/low-level/commit-rhombus (100%)
 rename levels/{it_IT => it}/low-level/index-add (100%)
 rename levels/{it_IT => it}/low-level/index-remove (100%)
 rename levels/{it_IT => it}/low-level/index-update (100%)
 rename levels/{it_IT => it}/low-level/puzzle-apocalypse (100%)
 rename levels/{it_IT => it}/low-level/puzzle-precious-blob (100%)
 rename levels/{it_IT => it}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{it_IT => it}/low-level/ref-create (100%)
 rename levels/{it_IT => it}/low-level/ref-move (100%)
 rename levels/{it_IT => it}/low-level/ref-remove (100%)
 rename levels/{it_IT => it}/low-level/sequence (100%)
 rename levels/{it_IT => it}/low-level/symref-create (100%)
 rename levels/{it_IT => it}/low-level/symref-no-deref (100%)
 rename levels/{it_IT => it}/low-level/tree-create (100%)
 rename levels/{it_IT => it}/low-level/tree-nested (100%)
 rename levels/{it_IT => it}/low-level/tree-read (100%)
 rename levels/{it_IT => it}/low-level/welcome (100%)
 rename levels/{it_IT => it}/merge/conflict (100%)
 rename levels/{it_IT => it}/merge/merge (100%)
 rename levels/{it_IT => it}/merge/merge-abort (100%)
 rename levels/{it_IT => it}/merge/sequence (100%)
 rename levels/{it_IT => it}/remotes/friend (100%)
 rename levels/{it_IT => it}/remotes/problems (100%)
 rename levels/{it_IT => it}/remotes/sequence (100%)
 rename levels/{it_IT => it}/sandbox/empty (100%)
 rename levels/{it_IT => it}/sandbox/remote (100%)
 rename levels/{it_IT => it}/sandbox/sequence (100%)
 rename levels/{it_IT => it}/sandbox/three-commits (100%)
 rename levels/{it_IT => it}/sequence (100%)
 rename levels/{it_IT => it}/shit-happens/bad-commit (100%)
 rename levels/{it_IT => it}/shit-happens/pushed-something-broken (100%)
 rename levels/{it_IT => it}/shit-happens/reflog (100%)
 rename levels/{it_IT => it}/shit-happens/restore-a-file (100%)
 rename levels/{it_IT => it}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{it_IT => it}/shit-happens/sequence (100%)
 rename levels/{it_IT => it}/stash/sequence (100%)
 rename levels/{it_IT => it}/stash/stash (100%)
 rename levels/{it_IT => it}/stash/stash-branch (100%)
 rename levels/{it_IT => it}/stash/stash-clear (100%)
 rename levels/{it_IT => it}/stash/stash-merge (100%)
 rename levels/{it_IT => it}/stash/stash-pop (100%)
 rename levels/{it_IT => it}/tags/add-tag (100%)
 rename levels/{it_IT => it}/tags/add-tag-later (100%)
 rename levels/{it_IT => it}/tags/remote-tag (100%)
 rename levels/{it_IT => it}/tags/remove-tag (100%)
 rename levels/{it_IT => it}/tags/sequence (100%)
 rename levels/{it_IT => it}/unused/checkout (100%)
 rename levels/{it_IT => it}/unused/clone (100%)
 rename levels/{it_IT => it}/unused/commit (100%)
 rename levels/{it_IT => it}/unused/commit-a (100%)
 rename levels/{it_IT => it}/unused/fetch (100%)
 rename levels/{it_IT => it}/unused/files-move (100%)
 rename levels/{it_IT => it}/unused/index-mv (100%)
 rename levels/{it_IT => it}/unused/init (100%)
 rename levels/{it_IT => it}/unused/pull-push (100%)
 rename levels/{it_IT => it}/unused/remotes-add (100%)
 rename levels/{it_IT => it}/unused/remotes-delete (100%)
 rename levels/{it_IT => it}/unused/restore (100%)
 rename levels/{it_IT => it}/unused/split (100%)
 rename levels/{it_IT => it}/unused/steps (100%)
 rename levels/{it_IT => it}/unused/who-are-you (100%)
 rename levels/{it_IT => it}/workflows/gitignore (100%)
 rename levels/{it_IT => it}/workflows/pr (100%)
 rename levels/{it_IT => it}/workflows/sequence (100%)
 create mode 100644 scenes/Language.gd

diff --git a/levels/en_EN/bisect/bisect b/levels/en/bisect/bisect
similarity index 100%
rename from levels/en_EN/bisect/bisect
rename to levels/en/bisect/bisect
diff --git a/levels/en_EN/bisect/sequence b/levels/en/bisect/sequence
similarity index 100%
rename from levels/en_EN/bisect/sequence
rename to levels/en/bisect/sequence
diff --git a/levels/en_EN/branches/branch-create b/levels/en/branches/branch-create
similarity index 100%
rename from levels/en_EN/branches/branch-create
rename to levels/en/branches/branch-create
diff --git a/levels/en_EN/branches/branch-remove b/levels/en/branches/branch-remove
similarity index 100%
rename from levels/en_EN/branches/branch-remove
rename to levels/en/branches/branch-remove
diff --git a/levels/en_EN/branches/checkout-commit b/levels/en/branches/checkout-commit
similarity index 100%
rename from levels/en_EN/branches/checkout-commit
rename to levels/en/branches/checkout-commit
diff --git a/levels/en_EN/branches/fork b/levels/en/branches/fork
similarity index 100%
rename from levels/en_EN/branches/fork
rename to levels/en/branches/fork
diff --git a/levels/en_EN/branches/grow b/levels/en/branches/grow
similarity index 100%
rename from levels/en_EN/branches/grow
rename to levels/en/branches/grow
diff --git a/levels/en_EN/branches/reorder b/levels/en/branches/reorder
similarity index 100%
rename from levels/en_EN/branches/reorder
rename to levels/en/branches/reorder
diff --git a/levels/en_EN/branches/sequence b/levels/en/branches/sequence
similarity index 100%
rename from levels/en_EN/branches/sequence
rename to levels/en/branches/sequence
diff --git a/levels/en_EN/changing-the-past/rebase b/levels/en/changing-the-past/rebase
similarity index 100%
rename from levels/en_EN/changing-the-past/rebase
rename to levels/en/changing-the-past/rebase
diff --git a/levels/en_EN/changing-the-past/reorder b/levels/en/changing-the-past/reorder
similarity index 100%
rename from levels/en_EN/changing-the-past/reorder
rename to levels/en/changing-the-past/reorder
diff --git a/levels/en_EN/changing-the-past/sequence b/levels/en/changing-the-past/sequence
similarity index 100%
rename from levels/en_EN/changing-the-past/sequence
rename to levels/en/changing-the-past/sequence
diff --git a/levels/en_EN/files/files-add b/levels/en/files/files-add
similarity index 100%
rename from levels/en_EN/files/files-add
rename to levels/en/files/files-add
diff --git a/levels/en_EN/files/files-delete b/levels/en/files/files-delete
similarity index 100%
rename from levels/en_EN/files/files-delete
rename to levels/en/files/files-delete
diff --git a/levels/en_EN/files/sequence b/levels/en/files/sequence
similarity index 100%
rename from levels/en_EN/files/sequence
rename to levels/en/files/sequence
diff --git a/levels/en_EN/index/add b/levels/en/index/add
similarity index 100%
rename from levels/en_EN/index/add
rename to levels/en/index/add
diff --git a/levels/en_EN/index/change b/levels/en/index/change
similarity index 100%
rename from levels/en_EN/index/change
rename to levels/en/index/change
diff --git a/levels/en_EN/index/checkout b/levels/en/index/checkout
similarity index 100%
rename from levels/en_EN/index/checkout
rename to levels/en/index/checkout
diff --git a/levels/en_EN/index/compare b/levels/en/index/compare
similarity index 100%
rename from levels/en_EN/index/compare
rename to levels/en/index/compare
diff --git a/levels/en_EN/index/new b/levels/en/index/new
similarity index 100%
rename from levels/en_EN/index/new
rename to levels/en/index/new
diff --git a/levels/en_EN/index/reset b/levels/en/index/reset
similarity index 100%
rename from levels/en_EN/index/reset
rename to levels/en/index/reset
diff --git a/levels/en_EN/index/rm b/levels/en/index/rm
similarity index 100%
rename from levels/en_EN/index/rm
rename to levels/en/index/rm
diff --git a/levels/en_EN/index/sequence b/levels/en/index/sequence
similarity index 100%
rename from levels/en_EN/index/sequence
rename to levels/en/index/sequence
diff --git a/levels/en_EN/index/steps b/levels/en/index/steps
similarity index 100%
rename from levels/en_EN/index/steps
rename to levels/en/index/steps
diff --git a/levels/en_EN/intro/cli b/levels/en/intro/cli
similarity index 100%
rename from levels/en_EN/intro/cli
rename to levels/en/intro/cli
diff --git a/levels/en_EN/intro/commit b/levels/en/intro/commit
similarity index 100%
rename from levels/en_EN/intro/commit
rename to levels/en/intro/commit
diff --git a/levels/en_EN/intro/copies b/levels/en/intro/copies
similarity index 100%
rename from levels/en_EN/intro/copies
rename to levels/en/intro/copies
diff --git a/levels/en_EN/intro/init b/levels/en/intro/init
similarity index 100%
rename from levels/en_EN/intro/init
rename to levels/en/intro/init
diff --git a/levels/en_EN/intro/remote b/levels/en/intro/remote
similarity index 100%
rename from levels/en_EN/intro/remote
rename to levels/en/intro/remote
diff --git a/levels/en_EN/intro/risky b/levels/en/intro/risky
similarity index 100%
rename from levels/en_EN/intro/risky
rename to levels/en/intro/risky
diff --git a/levels/en_EN/intro/sequence b/levels/en/intro/sequence
similarity index 100%
rename from levels/en_EN/intro/sequence
rename to levels/en/intro/sequence
diff --git a/levels/en_EN/intro/who-are-you b/levels/en/intro/who-are-you
similarity index 100%
rename from levels/en_EN/intro/who-are-you
rename to levels/en/intro/who-are-you
diff --git a/levels/en_EN/low-level/basics b/levels/en/low-level/basics
similarity index 100%
rename from levels/en_EN/low-level/basics
rename to levels/en/low-level/basics
diff --git a/levels/en_EN/low-level/blob-create b/levels/en/low-level/blob-create
similarity index 100%
rename from levels/en_EN/low-level/blob-create
rename to levels/en/low-level/blob-create
diff --git a/levels/en_EN/low-level/blob-remove b/levels/en/low-level/blob-remove
similarity index 100%
rename from levels/en_EN/low-level/blob-remove
rename to levels/en/low-level/blob-remove
diff --git a/levels/en_EN/low-level/commit-create b/levels/en/low-level/commit-create
similarity index 100%
rename from levels/en_EN/low-level/commit-create
rename to levels/en/low-level/commit-create
diff --git a/levels/en_EN/low-level/commit-parents b/levels/en/low-level/commit-parents
similarity index 100%
rename from levels/en_EN/low-level/commit-parents
rename to levels/en/low-level/commit-parents
diff --git a/levels/en_EN/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus
similarity index 100%
rename from levels/en_EN/low-level/commit-rhombus
rename to levels/en/low-level/commit-rhombus
diff --git a/levels/en_EN/low-level/index-add b/levels/en/low-level/index-add
similarity index 100%
rename from levels/en_EN/low-level/index-add
rename to levels/en/low-level/index-add
diff --git a/levels/en_EN/low-level/index-remove b/levels/en/low-level/index-remove
similarity index 100%
rename from levels/en_EN/low-level/index-remove
rename to levels/en/low-level/index-remove
diff --git a/levels/en_EN/low-level/index-update b/levels/en/low-level/index-update
similarity index 100%
rename from levels/en_EN/low-level/index-update
rename to levels/en/low-level/index-update
diff --git a/levels/en_EN/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/en_EN/low-level/puzzle-apocalypse
rename to levels/en/low-level/puzzle-apocalypse
diff --git a/levels/en_EN/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/en_EN/low-level/puzzle-precious-blob
rename to levels/en/low-level/puzzle-precious-blob
diff --git a/levels/en_EN/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/en_EN/low-level/puzzle-trees-all-the-way-down
rename to levels/en/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/en_EN/low-level/ref-create b/levels/en/low-level/ref-create
similarity index 100%
rename from levels/en_EN/low-level/ref-create
rename to levels/en/low-level/ref-create
diff --git a/levels/en_EN/low-level/ref-move b/levels/en/low-level/ref-move
similarity index 100%
rename from levels/en_EN/low-level/ref-move
rename to levels/en/low-level/ref-move
diff --git a/levels/en_EN/low-level/ref-remove b/levels/en/low-level/ref-remove
similarity index 100%
rename from levels/en_EN/low-level/ref-remove
rename to levels/en/low-level/ref-remove
diff --git a/levels/en_EN/low-level/sequence b/levels/en/low-level/sequence
similarity index 100%
rename from levels/en_EN/low-level/sequence
rename to levels/en/low-level/sequence
diff --git a/levels/en_EN/low-level/symref-create b/levels/en/low-level/symref-create
similarity index 100%
rename from levels/en_EN/low-level/symref-create
rename to levels/en/low-level/symref-create
diff --git a/levels/en_EN/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref
similarity index 100%
rename from levels/en_EN/low-level/symref-no-deref
rename to levels/en/low-level/symref-no-deref
diff --git a/levels/en_EN/low-level/tree-create b/levels/en/low-level/tree-create
similarity index 100%
rename from levels/en_EN/low-level/tree-create
rename to levels/en/low-level/tree-create
diff --git a/levels/en_EN/low-level/tree-nested b/levels/en/low-level/tree-nested
similarity index 100%
rename from levels/en_EN/low-level/tree-nested
rename to levels/en/low-level/tree-nested
diff --git a/levels/en_EN/low-level/tree-read b/levels/en/low-level/tree-read
similarity index 100%
rename from levels/en_EN/low-level/tree-read
rename to levels/en/low-level/tree-read
diff --git a/levels/en_EN/low-level/welcome b/levels/en/low-level/welcome
similarity index 100%
rename from levels/en_EN/low-level/welcome
rename to levels/en/low-level/welcome
diff --git a/levels/en_EN/merge/conflict b/levels/en/merge/conflict
similarity index 100%
rename from levels/en_EN/merge/conflict
rename to levels/en/merge/conflict
diff --git a/levels/en_EN/merge/merge b/levels/en/merge/merge
similarity index 100%
rename from levels/en_EN/merge/merge
rename to levels/en/merge/merge
diff --git a/levels/en_EN/merge/merge-abort b/levels/en/merge/merge-abort
similarity index 100%
rename from levels/en_EN/merge/merge-abort
rename to levels/en/merge/merge-abort
diff --git a/levels/en_EN/merge/sequence b/levels/en/merge/sequence
similarity index 100%
rename from levels/en_EN/merge/sequence
rename to levels/en/merge/sequence
diff --git a/levels/en_EN/remotes/friend b/levels/en/remotes/friend
similarity index 100%
rename from levels/en_EN/remotes/friend
rename to levels/en/remotes/friend
diff --git a/levels/en_EN/remotes/problems b/levels/en/remotes/problems
similarity index 100%
rename from levels/en_EN/remotes/problems
rename to levels/en/remotes/problems
diff --git a/levels/en_EN/remotes/sequence b/levels/en/remotes/sequence
similarity index 100%
rename from levels/en_EN/remotes/sequence
rename to levels/en/remotes/sequence
diff --git a/levels/en_EN/sandbox/empty b/levels/en/sandbox/empty
similarity index 100%
rename from levels/en_EN/sandbox/empty
rename to levels/en/sandbox/empty
diff --git a/levels/en_EN/sandbox/remote b/levels/en/sandbox/remote
similarity index 100%
rename from levels/en_EN/sandbox/remote
rename to levels/en/sandbox/remote
diff --git a/levels/en_EN/sandbox/sequence b/levels/en/sandbox/sequence
similarity index 100%
rename from levels/en_EN/sandbox/sequence
rename to levels/en/sandbox/sequence
diff --git a/levels/en_EN/sandbox/three-commits b/levels/en/sandbox/three-commits
similarity index 100%
rename from levels/en_EN/sandbox/three-commits
rename to levels/en/sandbox/three-commits
diff --git a/levels/en_EN/sequence b/levels/en/sequence
similarity index 100%
rename from levels/en_EN/sequence
rename to levels/en/sequence
diff --git a/levels/en_EN/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit
similarity index 100%
rename from levels/en_EN/shit-happens/bad-commit
rename to levels/en/shit-happens/bad-commit
diff --git a/levels/en_EN/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/en_EN/shit-happens/pushed-something-broken
rename to levels/en/shit-happens/pushed-something-broken
diff --git a/levels/en_EN/shit-happens/reflog b/levels/en/shit-happens/reflog
similarity index 100%
rename from levels/en_EN/shit-happens/reflog
rename to levels/en/shit-happens/reflog
diff --git a/levels/en_EN/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file
similarity index 100%
rename from levels/en_EN/shit-happens/restore-a-file
rename to levels/en/shit-happens/restore-a-file
diff --git a/levels/en_EN/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/en_EN/shit-happens/restore-a-file-from-the-past
rename to levels/en/shit-happens/restore-a-file-from-the-past
diff --git a/levels/en_EN/shit-happens/sequence b/levels/en/shit-happens/sequence
similarity index 100%
rename from levels/en_EN/shit-happens/sequence
rename to levels/en/shit-happens/sequence
diff --git a/levels/en_EN/stash/sequence b/levels/en/stash/sequence
similarity index 100%
rename from levels/en_EN/stash/sequence
rename to levels/en/stash/sequence
diff --git a/levels/en_EN/stash/stash b/levels/en/stash/stash
similarity index 100%
rename from levels/en_EN/stash/stash
rename to levels/en/stash/stash
diff --git a/levels/en_EN/stash/stash-branch b/levels/en/stash/stash-branch
similarity index 100%
rename from levels/en_EN/stash/stash-branch
rename to levels/en/stash/stash-branch
diff --git a/levels/en_EN/stash/stash-clear b/levels/en/stash/stash-clear
similarity index 100%
rename from levels/en_EN/stash/stash-clear
rename to levels/en/stash/stash-clear
diff --git a/levels/en_EN/stash/stash-merge b/levels/en/stash/stash-merge
similarity index 100%
rename from levels/en_EN/stash/stash-merge
rename to levels/en/stash/stash-merge
diff --git a/levels/en_EN/stash/stash-pop b/levels/en/stash/stash-pop
similarity index 100%
rename from levels/en_EN/stash/stash-pop
rename to levels/en/stash/stash-pop
diff --git a/levels/en_EN/tags/add-tag b/levels/en/tags/add-tag
similarity index 100%
rename from levels/en_EN/tags/add-tag
rename to levels/en/tags/add-tag
diff --git a/levels/en_EN/tags/add-tag-later b/levels/en/tags/add-tag-later
similarity index 100%
rename from levels/en_EN/tags/add-tag-later
rename to levels/en/tags/add-tag-later
diff --git a/levels/en_EN/tags/remote-tag b/levels/en/tags/remote-tag
similarity index 100%
rename from levels/en_EN/tags/remote-tag
rename to levels/en/tags/remote-tag
diff --git a/levels/en_EN/tags/remove-tag b/levels/en/tags/remove-tag
similarity index 100%
rename from levels/en_EN/tags/remove-tag
rename to levels/en/tags/remove-tag
diff --git a/levels/en_EN/tags/sequence b/levels/en/tags/sequence
similarity index 100%
rename from levels/en_EN/tags/sequence
rename to levels/en/tags/sequence
diff --git a/levels/en_EN/unused/checkout b/levels/en/unused/checkout
similarity index 100%
rename from levels/en_EN/unused/checkout
rename to levels/en/unused/checkout
diff --git a/levels/en_EN/unused/clone b/levels/en/unused/clone
similarity index 100%
rename from levels/en_EN/unused/clone
rename to levels/en/unused/clone
diff --git a/levels/en_EN/unused/commit b/levels/en/unused/commit
similarity index 100%
rename from levels/en_EN/unused/commit
rename to levels/en/unused/commit
diff --git a/levels/en_EN/unused/commit-a b/levels/en/unused/commit-a
similarity index 100%
rename from levels/en_EN/unused/commit-a
rename to levels/en/unused/commit-a
diff --git a/levels/en_EN/unused/fetch b/levels/en/unused/fetch
similarity index 100%
rename from levels/en_EN/unused/fetch
rename to levels/en/unused/fetch
diff --git a/levels/en_EN/unused/files-move b/levels/en/unused/files-move
similarity index 100%
rename from levels/en_EN/unused/files-move
rename to levels/en/unused/files-move
diff --git a/levels/en_EN/unused/index-mv b/levels/en/unused/index-mv
similarity index 100%
rename from levels/en_EN/unused/index-mv
rename to levels/en/unused/index-mv
diff --git a/levels/en_EN/unused/init b/levels/en/unused/init
similarity index 100%
rename from levels/en_EN/unused/init
rename to levels/en/unused/init
diff --git a/levels/en_EN/unused/pull-push b/levels/en/unused/pull-push
similarity index 100%
rename from levels/en_EN/unused/pull-push
rename to levels/en/unused/pull-push
diff --git a/levels/en_EN/unused/remotes-add b/levels/en/unused/remotes-add
similarity index 100%
rename from levels/en_EN/unused/remotes-add
rename to levels/en/unused/remotes-add
diff --git a/levels/en_EN/unused/remotes-delete b/levels/en/unused/remotes-delete
similarity index 100%
rename from levels/en_EN/unused/remotes-delete
rename to levels/en/unused/remotes-delete
diff --git a/levels/en_EN/unused/restore b/levels/en/unused/restore
similarity index 100%
rename from levels/en_EN/unused/restore
rename to levels/en/unused/restore
diff --git a/levels/en_EN/unused/split b/levels/en/unused/split
similarity index 100%
rename from levels/en_EN/unused/split
rename to levels/en/unused/split
diff --git a/levels/en_EN/unused/steps b/levels/en/unused/steps
similarity index 100%
rename from levels/en_EN/unused/steps
rename to levels/en/unused/steps
diff --git a/levels/en_EN/unused/who-are-you b/levels/en/unused/who-are-you
similarity index 100%
rename from levels/en_EN/unused/who-are-you
rename to levels/en/unused/who-are-you
diff --git a/levels/en_EN/workflows/gitignore b/levels/en/workflows/gitignore
similarity index 100%
rename from levels/en_EN/workflows/gitignore
rename to levels/en/workflows/gitignore
diff --git a/levels/en_EN/workflows/pr b/levels/en/workflows/pr
similarity index 100%
rename from levels/en_EN/workflows/pr
rename to levels/en/workflows/pr
diff --git a/levels/en_EN/workflows/sequence b/levels/en/workflows/sequence
similarity index 100%
rename from levels/en_EN/workflows/sequence
rename to levels/en/workflows/sequence
diff --git a/levels/it_IT/bisect/bisect b/levels/it/bisect/bisect
similarity index 100%
rename from levels/it_IT/bisect/bisect
rename to levels/it/bisect/bisect
diff --git a/levels/it_IT/bisect/sequence b/levels/it/bisect/sequence
similarity index 100%
rename from levels/it_IT/bisect/sequence
rename to levels/it/bisect/sequence
diff --git a/levels/it_IT/branches/branch-create b/levels/it/branches/branch-create
similarity index 100%
rename from levels/it_IT/branches/branch-create
rename to levels/it/branches/branch-create
diff --git a/levels/it_IT/branches/branch-remove b/levels/it/branches/branch-remove
similarity index 100%
rename from levels/it_IT/branches/branch-remove
rename to levels/it/branches/branch-remove
diff --git a/levels/it_IT/branches/checkout-commit b/levels/it/branches/checkout-commit
similarity index 100%
rename from levels/it_IT/branches/checkout-commit
rename to levels/it/branches/checkout-commit
diff --git a/levels/it_IT/branches/fork b/levels/it/branches/fork
similarity index 100%
rename from levels/it_IT/branches/fork
rename to levels/it/branches/fork
diff --git a/levels/it_IT/branches/grow b/levels/it/branches/grow
similarity index 100%
rename from levels/it_IT/branches/grow
rename to levels/it/branches/grow
diff --git a/levels/it_IT/branches/reorder b/levels/it/branches/reorder
similarity index 100%
rename from levels/it_IT/branches/reorder
rename to levels/it/branches/reorder
diff --git a/levels/it_IT/branches/sequence b/levels/it/branches/sequence
similarity index 100%
rename from levels/it_IT/branches/sequence
rename to levels/it/branches/sequence
diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it/changing-the-past/rebase
similarity index 100%
rename from levels/it_IT/changing-the-past/rebase
rename to levels/it/changing-the-past/rebase
diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it/changing-the-past/reorder
similarity index 100%
rename from levels/it_IT/changing-the-past/reorder
rename to levels/it/changing-the-past/reorder
diff --git a/levels/it_IT/changing-the-past/sequence b/levels/it/changing-the-past/sequence
similarity index 100%
rename from levels/it_IT/changing-the-past/sequence
rename to levels/it/changing-the-past/sequence
diff --git a/levels/it_IT/files/files-add b/levels/it/files/files-add
similarity index 100%
rename from levels/it_IT/files/files-add
rename to levels/it/files/files-add
diff --git a/levels/it_IT/files/files-delete b/levels/it/files/files-delete
similarity index 100%
rename from levels/it_IT/files/files-delete
rename to levels/it/files/files-delete
diff --git a/levels/it_IT/files/sequence b/levels/it/files/sequence
similarity index 100%
rename from levels/it_IT/files/sequence
rename to levels/it/files/sequence
diff --git a/levels/it_IT/index/#sequence# b/levels/it/index/#sequence#
similarity index 100%
rename from levels/it_IT/index/#sequence#
rename to levels/it/index/#sequence#
diff --git a/levels/it_IT/index/add b/levels/it/index/add
similarity index 100%
rename from levels/it_IT/index/add
rename to levels/it/index/add
diff --git a/levels/it_IT/index/change b/levels/it/index/change
similarity index 100%
rename from levels/it_IT/index/change
rename to levels/it/index/change
diff --git a/levels/it_IT/index/checkout b/levels/it/index/checkout
similarity index 100%
rename from levels/it_IT/index/checkout
rename to levels/it/index/checkout
diff --git a/levels/it_IT/index/compare b/levels/it/index/compare
similarity index 100%
rename from levels/it_IT/index/compare
rename to levels/it/index/compare
diff --git a/levels/it_IT/index/new b/levels/it/index/new
similarity index 100%
rename from levels/it_IT/index/new
rename to levels/it/index/new
diff --git a/levels/it_IT/index/reset b/levels/it/index/reset
similarity index 100%
rename from levels/it_IT/index/reset
rename to levels/it/index/reset
diff --git a/levels/it_IT/index/rm b/levels/it/index/rm
similarity index 100%
rename from levels/it_IT/index/rm
rename to levels/it/index/rm
diff --git a/levels/it_IT/index/sequence b/levels/it/index/sequence
similarity index 100%
rename from levels/it_IT/index/sequence
rename to levels/it/index/sequence
diff --git a/levels/it_IT/index/steps b/levels/it/index/steps
similarity index 100%
rename from levels/it_IT/index/steps
rename to levels/it/index/steps
diff --git a/levels/it_IT/intro/cli b/levels/it/intro/cli
similarity index 100%
rename from levels/it_IT/intro/cli
rename to levels/it/intro/cli
diff --git a/levels/it_IT/intro/commit b/levels/it/intro/commit
similarity index 100%
rename from levels/it_IT/intro/commit
rename to levels/it/intro/commit
diff --git a/levels/it_IT/intro/copies b/levels/it/intro/copies
similarity index 100%
rename from levels/it_IT/intro/copies
rename to levels/it/intro/copies
diff --git a/levels/it_IT/intro/init b/levels/it/intro/init
similarity index 100%
rename from levels/it_IT/intro/init
rename to levels/it/intro/init
diff --git a/levels/it_IT/intro/remote b/levels/it/intro/remote
similarity index 100%
rename from levels/it_IT/intro/remote
rename to levels/it/intro/remote
diff --git a/levels/it_IT/intro/risky b/levels/it/intro/risky
similarity index 100%
rename from levels/it_IT/intro/risky
rename to levels/it/intro/risky
diff --git a/levels/it_IT/intro/sequence b/levels/it/intro/sequence
similarity index 100%
rename from levels/it_IT/intro/sequence
rename to levels/it/intro/sequence
diff --git a/levels/it_IT/intro/who-are-you b/levels/it/intro/who-are-you
similarity index 100%
rename from levels/it_IT/intro/who-are-you
rename to levels/it/intro/who-are-you
diff --git a/levels/it_IT/low-level/basics b/levels/it/low-level/basics
similarity index 100%
rename from levels/it_IT/low-level/basics
rename to levels/it/low-level/basics
diff --git a/levels/it_IT/low-level/blob-create b/levels/it/low-level/blob-create
similarity index 100%
rename from levels/it_IT/low-level/blob-create
rename to levels/it/low-level/blob-create
diff --git a/levels/it_IT/low-level/blob-remove b/levels/it/low-level/blob-remove
similarity index 100%
rename from levels/it_IT/low-level/blob-remove
rename to levels/it/low-level/blob-remove
diff --git a/levels/it_IT/low-level/commit-create b/levels/it/low-level/commit-create
similarity index 100%
rename from levels/it_IT/low-level/commit-create
rename to levels/it/low-level/commit-create
diff --git a/levels/it_IT/low-level/commit-parents b/levels/it/low-level/commit-parents
similarity index 100%
rename from levels/it_IT/low-level/commit-parents
rename to levels/it/low-level/commit-parents
diff --git a/levels/it_IT/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus
similarity index 100%
rename from levels/it_IT/low-level/commit-rhombus
rename to levels/it/low-level/commit-rhombus
diff --git a/levels/it_IT/low-level/index-add b/levels/it/low-level/index-add
similarity index 100%
rename from levels/it_IT/low-level/index-add
rename to levels/it/low-level/index-add
diff --git a/levels/it_IT/low-level/index-remove b/levels/it/low-level/index-remove
similarity index 100%
rename from levels/it_IT/low-level/index-remove
rename to levels/it/low-level/index-remove
diff --git a/levels/it_IT/low-level/index-update b/levels/it/low-level/index-update
similarity index 100%
rename from levels/it_IT/low-level/index-update
rename to levels/it/low-level/index-update
diff --git a/levels/it_IT/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/it_IT/low-level/puzzle-apocalypse
rename to levels/it/low-level/puzzle-apocalypse
diff --git a/levels/it_IT/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/it_IT/low-level/puzzle-precious-blob
rename to levels/it/low-level/puzzle-precious-blob
diff --git a/levels/it_IT/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/it_IT/low-level/puzzle-trees-all-the-way-down
rename to levels/it/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/it_IT/low-level/ref-create b/levels/it/low-level/ref-create
similarity index 100%
rename from levels/it_IT/low-level/ref-create
rename to levels/it/low-level/ref-create
diff --git a/levels/it_IT/low-level/ref-move b/levels/it/low-level/ref-move
similarity index 100%
rename from levels/it_IT/low-level/ref-move
rename to levels/it/low-level/ref-move
diff --git a/levels/it_IT/low-level/ref-remove b/levels/it/low-level/ref-remove
similarity index 100%
rename from levels/it_IT/low-level/ref-remove
rename to levels/it/low-level/ref-remove
diff --git a/levels/it_IT/low-level/sequence b/levels/it/low-level/sequence
similarity index 100%
rename from levels/it_IT/low-level/sequence
rename to levels/it/low-level/sequence
diff --git a/levels/it_IT/low-level/symref-create b/levels/it/low-level/symref-create
similarity index 100%
rename from levels/it_IT/low-level/symref-create
rename to levels/it/low-level/symref-create
diff --git a/levels/it_IT/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref
similarity index 100%
rename from levels/it_IT/low-level/symref-no-deref
rename to levels/it/low-level/symref-no-deref
diff --git a/levels/it_IT/low-level/tree-create b/levels/it/low-level/tree-create
similarity index 100%
rename from levels/it_IT/low-level/tree-create
rename to levels/it/low-level/tree-create
diff --git a/levels/it_IT/low-level/tree-nested b/levels/it/low-level/tree-nested
similarity index 100%
rename from levels/it_IT/low-level/tree-nested
rename to levels/it/low-level/tree-nested
diff --git a/levels/it_IT/low-level/tree-read b/levels/it/low-level/tree-read
similarity index 100%
rename from levels/it_IT/low-level/tree-read
rename to levels/it/low-level/tree-read
diff --git a/levels/it_IT/low-level/welcome b/levels/it/low-level/welcome
similarity index 100%
rename from levels/it_IT/low-level/welcome
rename to levels/it/low-level/welcome
diff --git a/levels/it_IT/merge/conflict b/levels/it/merge/conflict
similarity index 100%
rename from levels/it_IT/merge/conflict
rename to levels/it/merge/conflict
diff --git a/levels/it_IT/merge/merge b/levels/it/merge/merge
similarity index 100%
rename from levels/it_IT/merge/merge
rename to levels/it/merge/merge
diff --git a/levels/it_IT/merge/merge-abort b/levels/it/merge/merge-abort
similarity index 100%
rename from levels/it_IT/merge/merge-abort
rename to levels/it/merge/merge-abort
diff --git a/levels/it_IT/merge/sequence b/levels/it/merge/sequence
similarity index 100%
rename from levels/it_IT/merge/sequence
rename to levels/it/merge/sequence
diff --git a/levels/it_IT/remotes/friend b/levels/it/remotes/friend
similarity index 100%
rename from levels/it_IT/remotes/friend
rename to levels/it/remotes/friend
diff --git a/levels/it_IT/remotes/problems b/levels/it/remotes/problems
similarity index 100%
rename from levels/it_IT/remotes/problems
rename to levels/it/remotes/problems
diff --git a/levels/it_IT/remotes/sequence b/levels/it/remotes/sequence
similarity index 100%
rename from levels/it_IT/remotes/sequence
rename to levels/it/remotes/sequence
diff --git a/levels/it_IT/sandbox/empty b/levels/it/sandbox/empty
similarity index 100%
rename from levels/it_IT/sandbox/empty
rename to levels/it/sandbox/empty
diff --git a/levels/it_IT/sandbox/remote b/levels/it/sandbox/remote
similarity index 100%
rename from levels/it_IT/sandbox/remote
rename to levels/it/sandbox/remote
diff --git a/levels/it_IT/sandbox/sequence b/levels/it/sandbox/sequence
similarity index 100%
rename from levels/it_IT/sandbox/sequence
rename to levels/it/sandbox/sequence
diff --git a/levels/it_IT/sandbox/three-commits b/levels/it/sandbox/three-commits
similarity index 100%
rename from levels/it_IT/sandbox/three-commits
rename to levels/it/sandbox/three-commits
diff --git a/levels/it_IT/sequence b/levels/it/sequence
similarity index 100%
rename from levels/it_IT/sequence
rename to levels/it/sequence
diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit
similarity index 100%
rename from levels/it_IT/shit-happens/bad-commit
rename to levels/it/shit-happens/bad-commit
diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/it_IT/shit-happens/pushed-something-broken
rename to levels/it/shit-happens/pushed-something-broken
diff --git a/levels/it_IT/shit-happens/reflog b/levels/it/shit-happens/reflog
similarity index 100%
rename from levels/it_IT/shit-happens/reflog
rename to levels/it/shit-happens/reflog
diff --git a/levels/it_IT/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file
similarity index 100%
rename from levels/it_IT/shit-happens/restore-a-file
rename to levels/it/shit-happens/restore-a-file
diff --git a/levels/it_IT/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/it_IT/shit-happens/restore-a-file-from-the-past
rename to levels/it/shit-happens/restore-a-file-from-the-past
diff --git a/levels/it_IT/shit-happens/sequence b/levels/it/shit-happens/sequence
similarity index 100%
rename from levels/it_IT/shit-happens/sequence
rename to levels/it/shit-happens/sequence
diff --git a/levels/it_IT/stash/sequence b/levels/it/stash/sequence
similarity index 100%
rename from levels/it_IT/stash/sequence
rename to levels/it/stash/sequence
diff --git a/levels/it_IT/stash/stash b/levels/it/stash/stash
similarity index 100%
rename from levels/it_IT/stash/stash
rename to levels/it/stash/stash
diff --git a/levels/it_IT/stash/stash-branch b/levels/it/stash/stash-branch
similarity index 100%
rename from levels/it_IT/stash/stash-branch
rename to levels/it/stash/stash-branch
diff --git a/levels/it_IT/stash/stash-clear b/levels/it/stash/stash-clear
similarity index 100%
rename from levels/it_IT/stash/stash-clear
rename to levels/it/stash/stash-clear
diff --git a/levels/it_IT/stash/stash-merge b/levels/it/stash/stash-merge
similarity index 100%
rename from levels/it_IT/stash/stash-merge
rename to levels/it/stash/stash-merge
diff --git a/levels/it_IT/stash/stash-pop b/levels/it/stash/stash-pop
similarity index 100%
rename from levels/it_IT/stash/stash-pop
rename to levels/it/stash/stash-pop
diff --git a/levels/it_IT/tags/add-tag b/levels/it/tags/add-tag
similarity index 100%
rename from levels/it_IT/tags/add-tag
rename to levels/it/tags/add-tag
diff --git a/levels/it_IT/tags/add-tag-later b/levels/it/tags/add-tag-later
similarity index 100%
rename from levels/it_IT/tags/add-tag-later
rename to levels/it/tags/add-tag-later
diff --git a/levels/it_IT/tags/remote-tag b/levels/it/tags/remote-tag
similarity index 100%
rename from levels/it_IT/tags/remote-tag
rename to levels/it/tags/remote-tag
diff --git a/levels/it_IT/tags/remove-tag b/levels/it/tags/remove-tag
similarity index 100%
rename from levels/it_IT/tags/remove-tag
rename to levels/it/tags/remove-tag
diff --git a/levels/it_IT/tags/sequence b/levels/it/tags/sequence
similarity index 100%
rename from levels/it_IT/tags/sequence
rename to levels/it/tags/sequence
diff --git a/levels/it_IT/unused/checkout b/levels/it/unused/checkout
similarity index 100%
rename from levels/it_IT/unused/checkout
rename to levels/it/unused/checkout
diff --git a/levels/it_IT/unused/clone b/levels/it/unused/clone
similarity index 100%
rename from levels/it_IT/unused/clone
rename to levels/it/unused/clone
diff --git a/levels/it_IT/unused/commit b/levels/it/unused/commit
similarity index 100%
rename from levels/it_IT/unused/commit
rename to levels/it/unused/commit
diff --git a/levels/it_IT/unused/commit-a b/levels/it/unused/commit-a
similarity index 100%
rename from levels/it_IT/unused/commit-a
rename to levels/it/unused/commit-a
diff --git a/levels/it_IT/unused/fetch b/levels/it/unused/fetch
similarity index 100%
rename from levels/it_IT/unused/fetch
rename to levels/it/unused/fetch
diff --git a/levels/it_IT/unused/files-move b/levels/it/unused/files-move
similarity index 100%
rename from levels/it_IT/unused/files-move
rename to levels/it/unused/files-move
diff --git a/levels/it_IT/unused/index-mv b/levels/it/unused/index-mv
similarity index 100%
rename from levels/it_IT/unused/index-mv
rename to levels/it/unused/index-mv
diff --git a/levels/it_IT/unused/init b/levels/it/unused/init
similarity index 100%
rename from levels/it_IT/unused/init
rename to levels/it/unused/init
diff --git a/levels/it_IT/unused/pull-push b/levels/it/unused/pull-push
similarity index 100%
rename from levels/it_IT/unused/pull-push
rename to levels/it/unused/pull-push
diff --git a/levels/it_IT/unused/remotes-add b/levels/it/unused/remotes-add
similarity index 100%
rename from levels/it_IT/unused/remotes-add
rename to levels/it/unused/remotes-add
diff --git a/levels/it_IT/unused/remotes-delete b/levels/it/unused/remotes-delete
similarity index 100%
rename from levels/it_IT/unused/remotes-delete
rename to levels/it/unused/remotes-delete
diff --git a/levels/it_IT/unused/restore b/levels/it/unused/restore
similarity index 100%
rename from levels/it_IT/unused/restore
rename to levels/it/unused/restore
diff --git a/levels/it_IT/unused/split b/levels/it/unused/split
similarity index 100%
rename from levels/it_IT/unused/split
rename to levels/it/unused/split
diff --git a/levels/it_IT/unused/steps b/levels/it/unused/steps
similarity index 100%
rename from levels/it_IT/unused/steps
rename to levels/it/unused/steps
diff --git a/levels/it_IT/unused/who-are-you b/levels/it/unused/who-are-you
similarity index 100%
rename from levels/it_IT/unused/who-are-you
rename to levels/it/unused/who-are-you
diff --git a/levels/it_IT/workflows/gitignore b/levels/it/workflows/gitignore
similarity index 100%
rename from levels/it_IT/workflows/gitignore
rename to levels/it/workflows/gitignore
diff --git a/levels/it_IT/workflows/pr b/levels/it/workflows/pr
similarity index 100%
rename from levels/it_IT/workflows/pr
rename to levels/it/workflows/pr
diff --git a/levels/it_IT/workflows/sequence b/levels/it/workflows/sequence
similarity index 100%
rename from levels/it_IT/workflows/sequence
rename to levels/it/workflows/sequence
diff --git a/project.godot b/project.godot
index 808e7e6..84b9e7c 100644
--- a/project.godot
+++ b/project.godot
@@ -81,26 +81,26 @@ window/stretch/aspect="keep"
 
 left={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 right={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 up={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 down={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 click={
@@ -125,27 +125,27 @@ right_click={
 }
 tab_complete={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 save={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 delete_word={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 clear={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":76,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 mute={
 "deadzone": 0.5,
-"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"unicode":0,"echo":false,"script":null)
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
 
diff --git a/scenes/Language.gd b/scenes/Language.gd
new file mode 100644
index 0000000..35d96b3
--- /dev/null
+++ b/scenes/Language.gd
@@ -0,0 +1,34 @@
+extends MenuButton
+
+
+func _ready():
+	make_popup_menu() # generate items for popup menu
+	get_popup().connect("id_pressed", self, "_on_item_pressed")
+	check_current_items()
+
+
+func make_popup_menu():
+	for lang in game.languages.values():
+		get_popup().add_check_item(lang)
+
+
+func check_current_items():
+	var items_count = get_popup().get_item_count()
+	for i in range(items_count):
+		var idx = get_popup().get_item_index(i)
+		if get_popup().get_item_text(idx) == game.languages[game.os_lang]:
+			get_popup().set_item_checked(idx, true)
+		else:
+			get_popup().set_item_checked(idx, false)
+
+
+func _on_item_pressed(id):
+	#get_popup().set_item_checked(id, true)
+	var lang = get_popup().get_item_text(id)
+	for key in game.languages.keys():
+		var value = tr(game.languages[key])
+		if value == lang:
+			game.os_lang = key
+	
+	check_current_items()
+	TranslationServer.set_locale(game.os_lang)
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index 1980e63..17f75b5 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -13,7 +13,7 @@ func load(path):
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open("res://levels/" + game.lang + "/%s" % slug)
+	dir.open("res://levels/" + game.os_lang + "/%s" % slug)
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +28,7 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/%s/sequence" % slug, "").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +42,7 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load("res://levels/" + game.lang + "/%s/%s" % [slug, l])
+		level.load("res://levels/" + game.os_lang + "/%s/%s" % [slug, l])
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/game.gd b/scenes/game.gd
index 66695b3..f9b73c3 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -1,7 +1,7 @@
 extends Node
 
-var langs = {0: "en_EN", 1: "it_IT"} # Localizations allowed
-var lang = OS.get_locale() # Variable for game localization
+var languages = {"en": tr("ENGLISH"), "it": tr("ITALIAN")} # Localizations allowed
+var os_lang = OS.get_locale_language() # Variable for game localization
 
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
 var global_shell
@@ -21,10 +21,10 @@ var state = {}
 var mutex
 
 func _ready():
-	# Check if present localization language
-	if not langs.values().has(lang):
-		lang = langs[0]
-		
+	# Check if language traslation exist otherwise use the default language
+	if not languages.keys().has(os_lang):
+		os_lang = "en"
+	
 	mutex = Mutex.new()
 	load_state()
 	
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 5a3d9f9..3065f76 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -3,14 +3,14 @@ extends Node
 var chapters
 
 func _ready():
-	var lang = game.lang
+	var lang = game.os_lang
 	reload()
 	
 func reload():
 	chapters = []
 	
 	var dir = Directory.new()
-	dir.open("res://levels/" + game.lang)
+	dir.open("res://levels/" + game.os_lang)
 	dir.list_dir_begin()
 
 	var chapter_names = []
@@ -27,7 +27,7 @@ func reload():
 	
 	var final_chapter_sequence = []
 	
-	var chapter_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/sequence", "").split("\n"))
+	var chapter_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/sequence", "").split("\n"))
 	
 	for chapter in chapter_sequence:
 		if chapter == "":
@@ -41,5 +41,5 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load("res://levels/" + game.lang + "/%s" % c)
+		chapter.load("res://levels/" + game.os_lang + "/%s" % c)
 		chapters.push_back(chapter)
diff --git a/scenes/title.gd b/scenes/title.gd
index 6fdbebb..285d24e 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -1,14 +1,14 @@
 extends Control
 
-onready var popup = $VBoxContainer/Language
+#onready var popup = $VBoxContainer/Language
 
 func _ready():
-	check_correct_lang_item()
+	#check_correct_lang_item()
 	if !OS.has_feature("standalone") and !game.skipped_title:
 		game.skipped_title = true
 		get_tree().change_scene("res://scenes/level_select.tscn")
 	
-	make_popup_items()
+	#make_popup_items()
 
 func quit():
 	get_tree().quit()
@@ -28,36 +28,36 @@ func sandbox():
 
 
 # Check the apropriate locale
-func check_correct_lang_item():
-	for i in game.langs.keys():
-		if game.lang == game.langs[i]:
-			popup.get_popup().set_item_checked(i, true)
+#func check_correct_lang_item():
+#	for i in game.langs.keys():
+#		if game.lang == game.langs[i]:
+#			popup.get_popup().set_item_checked(i, true)
 
 # Set all items to unchecked
-func uncheck_all_item():
-	for i in game.langs.keys():
-		popup.get_popup().set_item_checked(i, false)
+#func uncheck_all_item():
+#	for i in game.langs.keys():
+#		popup.get_popup().set_item_checked(i, false)
 
 
 # Create popup items width allowed locales
-func make_popup_items():
-	for i in game.langs.keys():
-		popup.get_popup().add_radio_check_item(game.langs[i], i)
-	
-	uncheck_all_item()
-	
-	check_correct_lang_item()
-	
-	popup.get_popup().connect("id_pressed", self, "_on_item_pressed")
+#func make_popup_items():
+#	for i in game.langs.keys():
+#		popup.get_popup().add_radio_check_item(game.langs[i], i)
+#	
+#	uncheck_all_item()
+#	
+#	check_correct_lang_item()
+#	
+#	popup.get_popup().connect("id_pressed", self, "_on_item_pressed")
 
 
 # Change the translations and localizations of the cards and strings
-func _on_item_pressed(id):
-	uncheck_all_item()
+#func _on_item_pressed(id):
+#	uncheck_all_item()
 	
-	popup.get_popup().set_item_checked(id, true)
-	game.lang = popup.get_popup().get_item_text(id)
+#	popup.get_popup().set_item_checked(id, true)
+#	game.lang = popup.get_popup().get_item_text(id)
 
 	
-	TranslationServer.set_locale(game.lang)
+#	TranslationServer.set_locale(game.os_lang)
 	
diff --git a/scenes/title.tscn b/scenes/title.tscn
index d233369..e2333d3 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=6 format=2]
 
 [ext_resource path="res://styles/theme.tres" type="Theme" id=1]
 [ext_resource path="res://images/oh-my-git.png" type="Texture" id=2]
 [ext_resource path="res://scenes/title.gd" type="Script" id=3]
+[ext_resource path="res://scenes/Language.gd" type="Script" id=4]
 [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=5]
 
 [node name="Title" type="Control"]
@@ -19,8 +20,8 @@ margin_left = 790.778
 margin_top = 594.135
 margin_right = 1131.78
 margin_bottom = 650.135
-custom_fonts/font = ExtResource( 5 )
 custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
+custom_fonts/font = ExtResource( 5 )
 text = "by bleeptrack & blinry"
 align = 1
 __meta__ = {
@@ -32,8 +33,8 @@ margin_left = 709.713
 margin_top = 621.416
 margin_right = 1209.71
 margin_bottom = 677.416
-custom_fonts/font = ExtResource( 5 )
 custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
+custom_fonts/font = ExtResource( 5 )
 text = "Original score by winniehell"
 align = 1
 __meta__ = {
@@ -72,6 +73,7 @@ margin_right = 351.0
 margin_bottom = 171.0
 text = "LANGUAGE"
 flat = false
+script = ExtResource( 4 )
 
 [node name="Sprite" type="Sprite" parent="."]
 
diff --git a/styles/theme.tres b/styles/theme.tres
index 35315aa..a56c333 100644
--- a/styles/theme.tres
+++ b/styles/theme.tres
@@ -193,7 +193,7 @@ Button/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
 Button/colors/font_color_hover = Color( 0.94, 0.94, 0.94, 1 )
 Button/colors/font_color_pressed = Color( 1, 1, 1, 1 )
 Button/constants/hseparation = 2
-Button/fonts/font = null
+Button/fonts/font = ExtResource( 1 )
 Button/styles/disabled = SubResource( 1 )
 Button/styles/focus = SubResource( 2 )
 Button/styles/hover = SubResource( 3 )
@@ -206,7 +206,7 @@ CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 )
 CheckBox/colors/font_color_pressed = Color( 1, 1, 1, 1 )
 CheckBox/constants/check_vadjust = 0
 CheckBox/constants/hseparation = 4
-CheckBox/fonts/font = null
+CheckBox/fonts/font = ExtResource( 1 )
 CheckBox/icons/checked = null
 CheckBox/icons/radio_checked = null
 CheckBox/icons/radio_unchecked = null
@@ -238,7 +238,7 @@ PopupMenu/colors/font_color_disabled = Color( 0.4, 0.4, 0.4, 0.8 )
 PopupMenu/colors/font_color_hover = Color( 0.88, 0.88, 0.88, 1 )
 PopupMenu/constants/hseparation = 4
 PopupMenu/constants/vseparation = 4
-PopupMenu/fonts/font = null
+PopupMenu/fonts/font = ExtResource( 1 )
 PopupMenu/icons/checked = null
 PopupMenu/icons/radio_checked = null
 PopupMenu/icons/radio_unchecked = null
@@ -261,11 +261,11 @@ RichTextLabel/constants/shadow_offset_x = 1
 RichTextLabel/constants/shadow_offset_y = 1
 RichTextLabel/constants/table_hseparation = 3
 RichTextLabel/constants/table_vseparation = 3
-RichTextLabel/fonts/bold_font = null
-RichTextLabel/fonts/bold_italics_font = null
-RichTextLabel/fonts/italics_font = null
+RichTextLabel/fonts/bold_font = ExtResource( 1 )
+RichTextLabel/fonts/bold_italics_font = ExtResource( 1 )
+RichTextLabel/fonts/italics_font = ExtResource( 1 )
 RichTextLabel/fonts/mono_font = ExtResource( 2 )
-RichTextLabel/fonts/normal_font = null
+RichTextLabel/fonts/normal_font = ExtResource( 1 )
 RichTextLabel/styles/focus = null
 RichTextLabel/styles/normal = null
 TextEdit/colors/background_color = Color( 0, 0, 0, 0 )
@@ -322,8 +322,8 @@ Tree/constants/item_margin = 0
 Tree/constants/scroll_border = 4
 Tree/constants/scroll_speed = 12
 Tree/constants/vseparation = 4
-Tree/fonts/font = null
-Tree/fonts/title_button_font = null
+Tree/fonts/font = ExtResource( 1 )
+Tree/fonts/title_button_font = ExtResource( 1 )
 Tree/icons/arrow = null
 Tree/icons/arrow_collapsed = null
 Tree/icons/checked = null

From 07d33339cc0a0b0abe512b965a5e7e3caf5fbf46 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 18 Aug 2022 12:19:13 +0200
Subject: [PATCH 34/49] Created the .pot and babelrc files and make it.po file
 with italian traductions and some modification to reset all english text

---
 cards/add.svg.import                   |   1 +
 cards/bisect-bad.svg.import            |   1 +
 cards/bisect-good.svg.import           |   1 +
 cards/bisect-start.svg.import          |   1 +
 cards/branch-delete.svg.import         |   1 +
 cards/branch.svg.import                |   1 +
 cards/checkout-file.svg.import         |   1 +
 cards/checkout-from.svg.import         |   1 +
 cards/checkout.svg.import              |   1 +
 cards/cherry-pick.svg.import           |   1 +
 cards/clone.svg.import                 |   1 +
 cards/commit-a.svg.import              |   1 +
 cards/commit-auto.svg.import           |   1 +
 cards/commit.svg.import                |   1 +
 cards/fetch.svg.import                 |   1 +
 cards/file-copy.svg.import             |   1 +
 cards/file-delete.svg.import           |   1 +
 cards/file-new.svg.import              |   1 +
 cards/file-rename.svg.import           |   1 +
 cards/init.svg.import                  |   1 +
 cards/merge-abort.svg.import           |   1 +
 cards/merge.svg.import                 |   1 +
 cards/pull.svg.import                  |   1 +
 cards/push.svg.import                  |   1 +
 cards/rebase-continue.svg.import       |   1 +
 cards/rebase-interactive.svg.import    |   1 +
 cards/rebase.svg.import                |   1 +
 cards/reflog.svg.import                |   1 +
 cards/reset-file.svg.import            |   1 +
 cards/reset-hard.svg.import            |   1 +
 cards/reset.svg.import                 |   1 +
 cards/revert.svg.import                |   1 +
 cards/rm.svg.import                    |   1 +
 cards/show.svg.import                  |   1 +
 images/cli-badge.svg.import            |   1 +
 images/commit.svg.import               |   1 +
 images/conflict.svg.import             |   1 +
 images/file.svg.import                 |   1 +
 images/head.svg.import                 |   1 +
 images/modified.svg.import             |   1 +
 images/new.svg.import                  |   1 +
 images/oh-my-git.png.import            |   1 +
 images/ref.svg.import                  |   1 +
 images/remote.svg.import               |   1 +
 images/removed.svg.import              |   1 +
 images/settings_32x32.png.import       |   1 +
 images/string.svg.import               |   1 +
 images/untracked.svg.import            |   1 +
 locale/babelrc                         |   5 +
 locale/it.po                           | 264 ++++++++++++++++++++++++
 locale/messages.pot                    | 271 +++++++++++++++++++++++++
 nodes/blob.svg.import                  |   1 +
 nodes/commit.svg.import                |   1 +
 nodes/document.svg.import              |   1 +
 nodes/head.svg.import                  |   1 +
 nodes/head1.svg.import                 |   1 +
 nodes/head2.svg.import                 |   1 +
 nodes/head3.svg.import                 |   1 +
 nodes/ref.svg.import                   |   1 +
 nodes/tree.svg.import                  |   1 +
 project.godot                          |   3 +-
 resources/localizations.csv            |  38 ----
 resources/localizations.csv.import     |  16 --
 resources/localizations.en.translation | Bin 1869 -> 0 bytes
 resources/localizations.it.translation | Bin 1972 -> 0 bytes
 scenes/arrow.tscn                      |   7 +-
 scenes/cards.gd                        |   5 +-
 scenes/cards.tscn                      |   3 -
 scenes/cli_badge.tscn                  |   3 -
 scenes/drop_area.tscn                  |   6 +-
 scenes/file_browser.tscn               |  15 +-
 scenes/file_browser_item.tscn          |   3 -
 scenes/game.gd                         |   2 +-
 scenes/level.gd                        |   2 +-
 scenes/level_select.gd                 |   2 +-
 scenes/level_select.tscn               |  18 +-
 scenes/main.tscn                       |  36 ++--
 scenes/music_button.tscn               |   5 +-
 scenes/no_git.tscn                     |   8 +-
 scenes/node.gd                         |   2 +-
 scenes/node.tscn                       |   6 +-
 scenes/notification.gd                 |  20 +-
 scenes/notification.tscn               |   6 -
 scenes/repository.gd                   |   2 +-
 scenes/repository.tscn                 |   9 -
 scenes/sandbox.tscn                    |   1 +
 scenes/survey.tscn                     |   9 +-
 scenes/terminal.gd                     |   2 +-
 scenes/terminal.tscn                   |   8 +-
 scenes/text_editor.tscn                |   5 +-
 scenes/title.gd                        |  39 +---
 scenes/title.tscn                      |  12 +-
 92 files changed, 668 insertions(+), 222 deletions(-)
 create mode 100644 locale/babelrc
 create mode 100644 locale/it.po
 create mode 100644 locale/messages.pot
 delete mode 100644 resources/localizations.csv
 delete mode 100644 resources/localizations.csv.import
 delete mode 100644 resources/localizations.en.translation
 delete mode 100644 resources/localizations.it.translation

diff --git a/cards/add.svg.import b/cards/add.svg.import
index cca9696..4ec9107 100644
--- a/cards/add.svg.import
+++ b/cards/add.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/bisect-bad.svg.import b/cards/bisect-bad.svg.import
index c2afba5..a23974f 100644
--- a/cards/bisect-bad.svg.import
+++ b/cards/bisect-bad.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/bisect-good.svg.import b/cards/bisect-good.svg.import
index 50f3eef..eccfb46 100644
--- a/cards/bisect-good.svg.import
+++ b/cards/bisect-good.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/bisect-start.svg.import b/cards/bisect-start.svg.import
index cd672e1..f58b103 100644
--- a/cards/bisect-start.svg.import
+++ b/cards/bisect-start.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/branch-delete.svg.import b/cards/branch-delete.svg.import
index 6277fe4..385e0b9 100644
--- a/cards/branch-delete.svg.import
+++ b/cards/branch-delete.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/branch.svg.import b/cards/branch.svg.import
index ff2d5b8..f0a165e 100644
--- a/cards/branch.svg.import
+++ b/cards/branch.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/checkout-file.svg.import b/cards/checkout-file.svg.import
index a960142..10b175c 100644
--- a/cards/checkout-file.svg.import
+++ b/cards/checkout-file.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/checkout-from.svg.import b/cards/checkout-from.svg.import
index 2892f47..7e6160e 100644
--- a/cards/checkout-from.svg.import
+++ b/cards/checkout-from.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/checkout.svg.import b/cards/checkout.svg.import
index 895efd6..ba8c88a 100644
--- a/cards/checkout.svg.import
+++ b/cards/checkout.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/cherry-pick.svg.import b/cards/cherry-pick.svg.import
index 3549183..1c88964 100644
--- a/cards/cherry-pick.svg.import
+++ b/cards/cherry-pick.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/clone.svg.import b/cards/clone.svg.import
index 1f894b7..6fa25e0 100644
--- a/cards/clone.svg.import
+++ b/cards/clone.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/commit-a.svg.import b/cards/commit-a.svg.import
index d514e29..be711b0 100644
--- a/cards/commit-a.svg.import
+++ b/cards/commit-a.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/commit-auto.svg.import b/cards/commit-auto.svg.import
index 51e7cfd..4f561ca 100644
--- a/cards/commit-auto.svg.import
+++ b/cards/commit-auto.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/commit.svg.import b/cards/commit.svg.import
index 613bc09..1e1535b 100644
--- a/cards/commit.svg.import
+++ b/cards/commit.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/fetch.svg.import b/cards/fetch.svg.import
index 3c65896..80da734 100644
--- a/cards/fetch.svg.import
+++ b/cards/fetch.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/file-copy.svg.import b/cards/file-copy.svg.import
index ebd39cb..f5c9405 100644
--- a/cards/file-copy.svg.import
+++ b/cards/file-copy.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/file-delete.svg.import b/cards/file-delete.svg.import
index 9c9d9da..942334e 100644
--- a/cards/file-delete.svg.import
+++ b/cards/file-delete.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/file-new.svg.import b/cards/file-new.svg.import
index 968c800..334d7a1 100644
--- a/cards/file-new.svg.import
+++ b/cards/file-new.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/file-rename.svg.import b/cards/file-rename.svg.import
index 79f1261..ca2d82c 100644
--- a/cards/file-rename.svg.import
+++ b/cards/file-rename.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/init.svg.import b/cards/init.svg.import
index aacb273..dedbfe6 100644
--- a/cards/init.svg.import
+++ b/cards/init.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/merge-abort.svg.import b/cards/merge-abort.svg.import
index cbdf0a8..4a919d2 100644
--- a/cards/merge-abort.svg.import
+++ b/cards/merge-abort.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/merge.svg.import b/cards/merge.svg.import
index b96f40d..a83da3d 100644
--- a/cards/merge.svg.import
+++ b/cards/merge.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/pull.svg.import b/cards/pull.svg.import
index 15ab40d..e792f8f 100644
--- a/cards/pull.svg.import
+++ b/cards/pull.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/push.svg.import b/cards/push.svg.import
index aa6a9ff..e191ead 100644
--- a/cards/push.svg.import
+++ b/cards/push.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/rebase-continue.svg.import b/cards/rebase-continue.svg.import
index 4276f0a..41f5eda 100644
--- a/cards/rebase-continue.svg.import
+++ b/cards/rebase-continue.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/rebase-interactive.svg.import b/cards/rebase-interactive.svg.import
index a65c315..ebe0624 100644
--- a/cards/rebase-interactive.svg.import
+++ b/cards/rebase-interactive.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/rebase.svg.import b/cards/rebase.svg.import
index 97241e1..460096a 100644
--- a/cards/rebase.svg.import
+++ b/cards/rebase.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/reflog.svg.import b/cards/reflog.svg.import
index 17b81f7..00dcf26 100644
--- a/cards/reflog.svg.import
+++ b/cards/reflog.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/reset-file.svg.import b/cards/reset-file.svg.import
index 883becf..03dc0bd 100644
--- a/cards/reset-file.svg.import
+++ b/cards/reset-file.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/reset-hard.svg.import b/cards/reset-hard.svg.import
index 199bee3..103b70b 100644
--- a/cards/reset-hard.svg.import
+++ b/cards/reset-hard.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/reset.svg.import b/cards/reset.svg.import
index 3409230..0e43dc4 100644
--- a/cards/reset.svg.import
+++ b/cards/reset.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/revert.svg.import b/cards/revert.svg.import
index 6f0bbfc..6491f9c 100644
--- a/cards/revert.svg.import
+++ b/cards/revert.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/rm.svg.import b/cards/rm.svg.import
index 2830052..ab96873 100644
--- a/cards/rm.svg.import
+++ b/cards/rm.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/cards/show.svg.import b/cards/show.svg.import
index 39cebac..40f1504 100644
--- a/cards/show.svg.import
+++ b/cards/show.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/cli-badge.svg.import b/images/cli-badge.svg.import
index 53031f8..930d998 100644
--- a/images/cli-badge.svg.import
+++ b/images/cli-badge.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/commit.svg.import b/images/commit.svg.import
index 54316cf..fbf6f82 100644
--- a/images/commit.svg.import
+++ b/images/commit.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/conflict.svg.import b/images/conflict.svg.import
index 5053a2b..63c961d 100644
--- a/images/conflict.svg.import
+++ b/images/conflict.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/file.svg.import b/images/file.svg.import
index 12aa5dd..49fd863 100644
--- a/images/file.svg.import
+++ b/images/file.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/head.svg.import b/images/head.svg.import
index 2a5c3cf..b92f7aa 100644
--- a/images/head.svg.import
+++ b/images/head.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/modified.svg.import b/images/modified.svg.import
index a7356bb..c8ba6f4 100644
--- a/images/modified.svg.import
+++ b/images/modified.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/new.svg.import b/images/new.svg.import
index 4b01767..1218f0e 100644
--- a/images/new.svg.import
+++ b/images/new.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/oh-my-git.png.import b/images/oh-my-git.png.import
index 708ee15..a173ad8 100644
--- a/images/oh-my-git.png.import
+++ b/images/oh-my-git.png.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/ref.svg.import b/images/ref.svg.import
index 480c664..1b179ae 100644
--- a/images/ref.svg.import
+++ b/images/ref.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/remote.svg.import b/images/remote.svg.import
index 762dceb..7c90ac0 100644
--- a/images/remote.svg.import
+++ b/images/remote.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/removed.svg.import b/images/removed.svg.import
index 1e0dd8a..104b392 100644
--- a/images/removed.svg.import
+++ b/images/removed.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/settings_32x32.png.import b/images/settings_32x32.png.import
index 85d04d8..c4a7e0c 100644
--- a/images/settings_32x32.png.import
+++ b/images/settings_32x32.png.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/string.svg.import b/images/string.svg.import
index 97a8d20..53ec0cd 100644
--- a/images/string.svg.import
+++ b/images/string.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/images/untracked.svg.import b/images/untracked.svg.import
index 95cb700..ab65e26 100644
--- a/images/untracked.svg.import
+++ b/images/untracked.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/locale/babelrc b/locale/babelrc
new file mode 100644
index 0000000..b2125de
--- /dev/null
+++ b/locale/babelrc
@@ -0,0 +1,5 @@
+[python: **.gd]
+encoding = utf-8
+
+[godot_scene: **.tscn]
+encoding = utf-8
diff --git a/locale/it.po b/locale/it.po
new file mode 100644
index 0000000..adbae71
--- /dev/null
+++ b/locale/it.po
@@ -0,0 +1,264 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# Automatically generated, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.10.3\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48
+#msgid "label"
+#msgstr ""
+
+#: oh-my-git/scenes/card.tscn:125
+#msgid "Description"
+#msgstr ""
+
+#: oh-my-git/scenes/card.tscn:144
+#msgid "0"
+#msgstr ""
+
+#: oh-my-git/scenes/cards.gd:58
+msgid "These are your cards! Drag them to highlighted areas to play them!"
+msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!"
+
+#: oh-my-git/scenes/cards.tscn:34
+msgid "Draw new cards"
+msgstr "Pesca nuove carte"
+
+#: oh-my-git/scenes/cards.tscn:48
+#msgid "3"
+#msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:51
+msgid "title"
+msgstr "titolo"
+
+#: oh-my-git/scenes/file_browser.tscn:64
+#msgid "root"
+#msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:70
+#msgid "dir"
+#msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32
+msgid "Save"
+msgstr "Salva"
+
+#: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47
+#msgid "x"
+#msgstr ""
+
+#: oh-my-git/scenes/file_browser_item.tscn:118
+msgid "filename"
+msgstr "nome file"
+
+#: oh-my-git/scenes/game.gd:3
+msgid "English"
+msgstr "Inglese"
+
+#: oh-my-git/scenes/game.gd:3
+msgid "Italian"
+msgstr "Italiano"
+
+#: oh-my-git/scenes/level.gd:81
+msgid "Complete the goal of this level"
+msgstr "Completa l'obbiettivo di questo ivello!"
+
+#: oh-my-git/scenes/level_select.gd:60
+msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?"
+msgstr "Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?"
+
+#: oh-my-git/scenes/level_select.tscn:51
+msgid "Help us improving Oh My Git! by\nanswering some questions:"
+msgstr "Aiutaci a migliorare Oh My Git!\nRispondendo ad alcune domande:"
+
+#: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105
+msgid "To the survey /o/"
+msgstr "Al sondaggio /o/"
+
+#: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214
+msgid "Back"
+msgstr "Indietro"
+
+#: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225
+msgid "Reload"
+msgstr "Ricarica"
+
+#: oh-my-git/scenes/main.tscn:105
+#msgid "Level name here!"
+#msgstr ""
+
+#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136
+#msgid "Level description here!"
+#msgstr ""
+
+#: oh-my-git/scenes/main.tscn:237
+msgid "Cards!"
+msgstr "Carte!"
+
+#: oh-my-git/scenes/main.tscn:249
+msgid "Tip!"
+msgstr "Mancia!"
+
+#: oh-my-git/scenes/main.tscn:275
+msgid "Next level"
+msgstr "Prossimo livello"
+
+#: oh-my-git/scenes/music_button.tscn:12
+msgid "Toggle music"
+msgstr "Musica"
+
+#: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46
+#: oh-my-git/scenes/title.tscn:25
+#msgid "by bleeptrack & blinry"
+#msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38
+#msgid "Original score by winniehell"
+#msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56
+msgid "Levels"
+msgstr "Livelli"
+
+#: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62
+msgid "Sandbox"
+msgstr "Sandbox"
+
+#: oh-my-git/scenes/no_git.tscn:76
+msgid "Install"
+msgstr "Installa"
+
+#: oh-my-git/scenes/no_git.tscn:97
+#msgid "GIT_MESSAGE"
+#msgstr ""
+
+#: oh-my-git/scenes/node.gd:83
+msgid "You can drag these around with your mouse!"
+msgstr "Puoi trascinarli in giro con il mouse!"
+
+#: oh-my-git/scenes/node.tscn:55
+#msgid "object_id"
+#msgstr ""
+
+#: oh-my-git/scenes/notification.gd:5 oh-my-git/scenes/notification.tscn:59
+msgid "Got it!"
+msgstr "Fatto!"
+
+#: oh-my-git/scenes/notification.gd:6
+msgid "Interesting!"
+msgstr "Interessante"
+
+#: oh-my-git/scenes/notification.gd:7
+msgid "Very useful!"
+msgstr "Veramente utile!"
+
+#: oh-my-git/scenes/notification.gd:8
+msgid "Cool!"
+msgstr "Bello!"
+
+#: oh-my-git/scenes/notification.gd:9
+msgid "Nice!"
+msgstr "Bene!"
+
+#: oh-my-git/scenes/notification.gd:10
+msgid "Thanks!"
+msgstr "Grazie!"
+
+#: oh-my-git/scenes/notification.gd:11
+msgid "Whatever..."
+msgstr "Ad ogni costo..."
+
+#: oh-my-git/scenes/notification.gd:12
+msgid "Okay!"
+msgstr "Ok!"
+
+#: oh-my-git/scenes/notification.gd:13
+msgid "Yay!"
+msgstr "Yay!"
+
+#: oh-my-git/scenes/notification.gd:14
+msgid "Awesome!"
+msgstr "Eccezionale!"
+
+#: oh-my-git/scenes/notification.tscn:37
+msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!"
+msgstr "Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento!"
+
+#: oh-my-git/scenes/notification.tscn:59
+#msgid "Got it!"
+#msgstr "Fatto!"
+
+#: oh-my-git/scenes/repository.gd:92
+msgid "This is the time machine of another person! To interact with it, you need special commands!"
+msgstr "Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!"
+
+#: oh-my-git/scenes/repository.tscn:56
+#msgid "Repo name"
+#msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:67
+#msgid "Index:"
+#msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:78
+msgid "Update"
+msgstr "Aggiorna"
+
+#: oh-my-git/scenes/repository.tscn:93
+msgid "Hide trees and blobs"
+msgstr "Nascondi alberi e macchie"
+
+#: oh-my-git/scenes/survey.tscn:34
+#msgid "Oh My Git!"
+#msgstr ""
+
+#: oh-my-git/scenes/survey.tscn:71 oh-my-git/scenes/title.tscn:68
+msgid "Quit"
+msgstr "Esci"
+
+#: oh-my-git/scenes/survey.tscn:90
+msgid "Thank you very much for playing!\nPlease help us improve Oh My Git! \nby filling out this survey:"
+msgstr "Grazie mille per aver giocato!\nAiutaci a migliorare Oh My Git!\ncompilando questo sondaggio:"
+
+#: oh-my-git/scenes/terminal.gd:107
+msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!"
+msgstr "Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!"
+
+#: oh-my-git/scenes/terminal.tscn:86
+#msgid "git commit --allow-empty -m \"$RANDOM\""
+#msgstr ""
+
+#: oh-my-git/scenes/terminal.tscn:93
+#msgid "git checkout HEAD^"
+#msgstr ""
+
+#: oh-my-git/scenes/terminal.tscn:100
+#msgid "git checkout -b \"$RANDOM\""
+#msgstr ""
+
+#: oh-my-git/scenes/text_editor.tscn:12
+msgid "Text here"
+msgstr "Il testo qui"
+
+#: oh-my-git/scenes/title.tscn:68
+#msgid "Quit"
+#msgstr "Esci"
+
+#: oh-my-git/scenes/title.tscn:74
+msgid "Language"
+msgstr "Linguaggio"
diff --git a/locale/messages.pot b/locale/messages.pot
new file mode 100644
index 0000000..82b3c14
--- /dev/null
+++ b/locale/messages.pot
@@ -0,0 +1,271 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.10.3\n"
+
+#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48
+msgid "label"
+msgstr ""
+
+#: oh-my-git/scenes/card.tscn:125
+msgid "Description"
+msgstr ""
+
+#: oh-my-git/scenes/card.tscn:144
+msgid "0"
+msgstr ""
+
+#: oh-my-git/scenes/cards.gd:58
+msgid "YOUR_CARDS"
+msgstr ""
+
+#: oh-my-git/scenes/cards.tscn:34
+msgid "Draw new cards"
+msgstr ""
+
+#: oh-my-git/scenes/cards.tscn:48
+msgid "3"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:51
+msgid "title"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:64
+msgid "root"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:70
+msgid "dir"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32
+msgid "Save"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47
+msgid "x"
+msgstr ""
+
+#: oh-my-git/scenes/file_browser_item.tscn:118
+msgid "filename"
+msgstr ""
+
+#: oh-my-git/scenes/game.gd:3
+msgid "ENGLISH"
+msgstr ""
+
+#: oh-my-git/scenes/game.gd:3
+msgid "ITALIAN"
+msgstr ""
+
+#: oh-my-git/scenes/level.gd:81
+msgid "COMPLETE_GOAL"
+msgstr ""
+
+#: oh-my-git/scenes/level_select.gd:60
+msgid "GOLDEN_BADGE"
+msgstr ""
+
+#: oh-my-git/scenes/level_select.tscn:51
+msgid ""
+"Help us improving Oh My Git! by\n"
+"answering some questions:"
+msgstr ""
+
+#: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105
+msgid "To the survey /o/"
+msgstr ""
+
+#: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214
+msgid "BACK"
+msgstr ""
+
+#: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225
+msgid "RELOAD"
+msgstr ""
+
+#: oh-my-git/scenes/main.tscn:105
+msgid "Level name here!"
+msgstr ""
+
+#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136
+msgid "Level description here!"
+msgstr ""
+
+#: oh-my-git/scenes/main.tscn:237
+msgid "Cards!"
+msgstr ""
+
+#: oh-my-git/scenes/main.tscn:249
+msgid "Tip!"
+msgstr ""
+
+#: oh-my-git/scenes/main.tscn:275
+msgid "NEXT_LEVEL"
+msgstr ""
+
+#: oh-my-git/scenes/music_button.tscn:12
+msgid "MUSIC"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46
+#: oh-my-git/scenes/title.tscn:25
+msgid "by bleeptrack & blinry"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38
+msgid "Original score by winniehell"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56
+msgid "LEVELS"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62
+msgid "Sandbox"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:76
+msgid "INSTALL"
+msgstr ""
+
+#: oh-my-git/scenes/no_git.tscn:97
+msgid "GIT_MESSAGE"
+msgstr ""
+
+#: oh-my-git/scenes/node.gd:83
+msgid "DRAG_AROUND"
+msgstr ""
+
+#: oh-my-git/scenes/node.tscn:55
+msgid "object_id"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:5
+msgid "GOT_IT"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:6
+msgid "INTERESTING"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:7
+msgid "VERY_USEFULL"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:8
+msgid "COOL"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:9
+msgid "NICE"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:10
+msgid "THANKS"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:11
+msgid "WHATEVER"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:12
+msgid "OKAY"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:13
+msgid "YAY"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:14
+msgid "AWESOME"
+msgstr ""
+
+#: oh-my-git/scenes/notification.tscn:37
+msgid ""
+"This is a hint! This is a hint! This is a hint! This is a hint! This is a"
+" hint! This is a hint! This is a hint! This is a hint! This is a hint!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.tscn:59
+msgid "Got it!"
+msgstr ""
+
+#: oh-my-git/scenes/repository.gd:92
+msgid "INTERACT"
+msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:56
+msgid "Repo name"
+msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:67
+msgid "Index:"
+msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:78
+msgid "Update"
+msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:93
+msgid "Hide trees and blobs"
+msgstr ""
+
+#: oh-my-git/scenes/survey.tscn:34
+msgid "Oh My Git!"
+msgstr ""
+
+#: oh-my-git/scenes/survey.tscn:71
+msgid "Quit"
+msgstr ""
+
+#: oh-my-git/scenes/survey.tscn:90
+msgid ""
+"Thank you very much for playing!\n"
+"Please help us improve Oh My Git! \n"
+"by filling out this survey:"
+msgstr ""
+
+#: oh-my-git/scenes/terminal.gd:107
+msgid "YOUR_TERMINAL"
+msgstr ""
+
+#: oh-my-git/scenes/terminal.tscn:86
+msgid "git commit --allow-empty -m \"$RANDOM\""
+msgstr ""
+
+#: oh-my-git/scenes/terminal.tscn:93
+msgid "git checkout HEAD^"
+msgstr ""
+
+#: oh-my-git/scenes/terminal.tscn:100
+msgid "git checkout -b \"$RANDOM\""
+msgstr ""
+
+#: oh-my-git/scenes/text_editor.tscn:12
+msgid "Text here"
+msgstr ""
+
+#: oh-my-git/scenes/title.tscn:68
+msgid "QUIT"
+msgstr ""
+
+#: oh-my-git/scenes/title.tscn:74
+msgid "LANGUAGE"
+msgstr ""
+
diff --git a/nodes/blob.svg.import b/nodes/blob.svg.import
index 725b562..bcb068a 100644
--- a/nodes/blob.svg.import
+++ b/nodes/blob.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/commit.svg.import b/nodes/commit.svg.import
index d47ebc6..86b4574 100644
--- a/nodes/commit.svg.import
+++ b/nodes/commit.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/document.svg.import b/nodes/document.svg.import
index 4c5b739..d038a7f 100644
--- a/nodes/document.svg.import
+++ b/nodes/document.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/head.svg.import b/nodes/head.svg.import
index f011619..db9e9e9 100644
--- a/nodes/head.svg.import
+++ b/nodes/head.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/head1.svg.import b/nodes/head1.svg.import
index 0888d00..6ad89b1 100644
--- a/nodes/head1.svg.import
+++ b/nodes/head1.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/head2.svg.import b/nodes/head2.svg.import
index 92a04d2..f1fd364 100644
--- a/nodes/head2.svg.import
+++ b/nodes/head2.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/head3.svg.import b/nodes/head3.svg.import
index 7ba33f4..1641097 100644
--- a/nodes/head3.svg.import
+++ b/nodes/head3.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/ref.svg.import b/nodes/ref.svg.import
index 1ad858d..a7b3421 100644
--- a/nodes/ref.svg.import
+++ b/nodes/ref.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/nodes/tree.svg.import b/nodes/tree.svg.import
index 8192b20..f613eaf 100644
--- a/nodes/tree.svg.import
+++ b/nodes/tree.svg.import
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
 process/premult_alpha=false
 process/HDR_as_SRGB=false
 process/invert_color=false
+process/normal_map_invert_y=false
 stream=false
 size_limit=0
 detect_3d=true
diff --git a/project.godot b/project.godot
index 84b9e7c..59db029 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,8 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" )
+translations=PoolStringArray( "res://locale/it.po" )
+locale_filter=[ 0, [  ] ]
 
 [network]
 
diff --git a/resources/localizations.csv b/resources/localizations.csv
deleted file mode 100644
index 4e082eb..0000000
--- a/resources/localizations.csv
+++ /dev/null
@@ -1,38 +0,0 @@
-keys,en,it
-LEVELS,Levels,Livelli
-QUIT,Quit,Esci
-BACK,Back,Indietro
-RELOAD,Reload,Ricarica
-MUSIC,Toggle Music,Musica
-NEXT_LEVEL,Next Level,Prossimo Livello
-GIT_MESSAGE,"Hi! It seems that you don't have Git installed yet!
-
-On Linux, please install it from your package manager, usually the package is called "git"!
-
-On macOS 10.8 and below, you can download Git from git-scm.com.","Ciao! Sembra che tu non abbia ancora installato Git!
-
-Su Linux, installalo dal tuo gestore di pacchetti, di solito il pacchetto si chiama "git"!
-
-Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com."
-INSTALL,"Sure, I'll install it!","Sicuro, lo installerò"
-LANGUAGE,Language,Linguaggio
-ITALIAN,Italian,Italiano
-ENGLISH,English,Inglese
-GOT_IT,"Got it!","fatto"
-INTERESTING,"Interesting!","interessante"
-VERY_USEFULL,"Very useful!","Veramente utile!"
-COOL,"Cool!","Bello!"
-NICE,"Nice!","Bene!"
-THANKS,"Thanks!","Grazie!"
-WHATEVER,"Whatever...","Ad ogni costo..."
-OKAY,"Okay!","Ok!"
-YAY,"Yay!","Yay!"
-AWESOME,"Awesome!","Eccezionale!"
-YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!"
-INTERACT,"This is the time machine of another person! To interact with it, you need special commands!","Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!"
-GOLDEN_BADGE,"You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?","Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?"
-GOOD_JOB,"Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.","Ottimo lavoro hai risolto il livello!\n\nSentiti libero di provare altro o clicca su 'Prossimo livello'"
-COMPLETE_GOAL,"Complete the goal of this level","Completa l'obbiettivo di questo ivello!"
-DRAG_AROUND,"You can drag these around with your mouse!","Puoi trascinarli in giro con il mouse!"
-EDIT_FILE,"Click on these files to edit them!","Clicca su questi files per modificarli!"
-YOUR_CARDS,"These are your cards! Drag them to highlighted areas to play them!","Queste sono le tue carte! Spostale nell'area evidenziata per usarle!"
\ No newline at end of file
diff --git a/resources/localizations.csv.import b/resources/localizations.csv.import
deleted file mode 100644
index e2044a4..0000000
--- a/resources/localizations.csv.import
+++ /dev/null
@@ -1,16 +0,0 @@
-[remap]
-
-importer="csv_translation"
-type="Translation"
-
-[deps]
-
-files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ]
-
-source_file="res://resources/localizations.csv"
-dest_files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ]
-
-[params]
-
-compress=true
-delimiter=0
diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation
deleted file mode 100644
index 8809d36cf439d6a33670b3ba7c3c4cf7ae3f4feb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1869
zcmbVNZ%kWN6u&K4N}=E=fdREEDH&l>Dl!!*8+09%j=$0lC|%Y)%3E7n-h;l@jp8O6
zV?<{p*&i@t$u>s(pd`j&f-%`7qMLIc*arhKG0rba#E6NE0LE9(>3U5={Nzo3IrseT
zIp^N<r?2g{b~A~uB#;!lVBglj2wr=T;e-Ga^6?zC``=Oyp1T1-R^Y=yH|q-UZYJOg
z@h-v5axBS6JmZ*tmZSpH&k6$LVFi)`O3Z^LX|VOe>s%qGC%_UVs6An~pAE$cyh#WJ
zeVpg9o8S)m20}m*A^|7>u}D=0Lpe!D3f6z-j0H&sXaNQQt|%-S$aFv!0CPf)F3k?T
zD6W@*+z+VQagKhqaqdXMSsUy-0KI@d045Lt(0fphB<OD^?5WKdaF+m+fF}T2z;yuT
zjOa;Ta`l7E1?b`&@`od3_eZ6Kl)&Dcz;ju53NQ{<7(wGiF8thC47v)SP2hjep3QcF
zj-5nMd&LhQ8Y>_^))4{Q*x3V1H<Jx}Y!SBg_`{X?E|A!K1oi(u*=&CWoX`eA`EQS^
ze$oMt{@5SN56_ROz5x9KU=cv?^90|MzX3YU=knaIs&BxF>eT<@=j)qxP;l}Pl%F~-
zpZWxX;oHy$=LOH!C%JuIkXS3kdhZ9*ApX@iQp^i;V2DG9wWsmUE{-SzpfmwD0-*0a
zaBWcg0C-xjijVUh=inUY=@@|etFFHF+)~{C)db#dmrHQ&=zD0~druC%`ywdVV<+I*
zyOLEG`0uQ1i@)WL9_;A-^uDpzO82Af&i;ILrQvc7@Oglz0o1;@V(nA>eb9NpczXb!
zLF_|}+fVFXhVu)Bq{;U(8xV+SZM)iBAC&;XaGo%H2#9DtU)@=!Of$;5w8~H?pCgi&
z!oCm@9ZqZh^y^n7t~}wPri0j)hn+6;Y-a;J(@RXJ;Jee$77_<DR0vVV)uR8N^7*vV
zKh8Q18I)2z+FJOK))#_fdsF3Y)sevF`<d6P@_&q+DY%&`B7GurZcW#*QDk%ewyIGq
zs^wkR^fLz(=qonJ(Zs5AN%gmH5u0;*k65hxnur!dOY=ajO`0SYmY0jIC1O+N-tD65
z&a$-3=79~bpoh1fSrh%qTbrrLTj@nN_6}GikBQ1$^+2uB5O<tWM<uN`5|xxc!-<tI
zXpZH`Oz;v&TV_hlk*(lW7|v+8uTbm%=0wuMo(^f7Sg0lGV1q;2u)v-S2jG<sC)v_X
z8D%+rCEY7q-!-0|@8oA~&V#ZX{?A=b-Hm!>TJ@-{-rBlbfk~P3As;-1I^|6eIR5MW
zOwIT^QArIEZI>QJCD!5z$Z`V<QO9`#KEX>`{jo|zDRXVh83p>xE(~Rwz>0k|DBWIK
zsEs^Ifxy=MgR4rZywRCdy)YE(V_we94BH~q<tbB17|e4c(pZT*Z%KdQI84mvhE|$+
z9+R=iWE!zg)(y45H@>ODslZy-ug;bhPM-MEGF2)y4ey&gX}{R0#>PVpi(91IIy5YX
zaCY9~39#Dcu;6o(23OvoZJDNi7)DCpepGJE8aHOuX-=JURF7IDv1t*lcgOQZ7+=y3
Hf298a@cZPX

diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation
deleted file mode 100644
index 0a5f06a5a98591d327c16e5f2dc0035ee80f83b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1972
zcmbVNZERCz6n@*)%S$&_WlM#vVOuh8bz#&woC|l%k6Fhyw$81xcIbM$QlR^2p|{Iq
zIHa4=p;4BIlm$#2Wnw}|3}9R^{vexSDotiW)JRCsA42?MKZxN&?|jasH))8!e3Pf=
zJ?A~=yyraUZEjn8TOCWUEJz&>Vc)vZuk3I~{b8lg9}7joy5Ikn9FZ%4Xi$j^L<2!z
zUnJn~^Ti@QB@he;S#IW8*xw&yOJV5`DvE!5P+?1;Xc0k{jqMIp=ZpEf`+{s4)b4>m
zZ!nfN&`nA#8VYZ}7p4TFp`9@p88ZN8K+Ck=;izCaWWxH-o=rF)QXWXlP>hkO7;pfz
z7O@1#9AG&>Es{-NtM1cF)B0M-b-?=j&MEHcw5>7YtQGssz*e9Kpniq`{T`D0GW54H
z_PWnFY=?lO0JT&M90P~~LbvIA-|LW6^CM{+*`FI)d-00#UeC@9dwBVULK+egPSEoV
z9sH%E40;KWndi^^v-t{a#1&0V_cvcTDUBgN&6t3#cJ^(3r=R$w+~nVN_4@hVv`+Wx
z@jsgC+}~xy>-KM6%=<}!-2z{luWsLSemw66^aSt&px?JWdVn8;PTbH;k4*oXmz~a=
z+28x0-@Nq(lF^gR%$w}u$sD{F@}>Id>Cl}wkA}-$gQUEKn_EvzL1;eY_t%oT**kEg
zTn__!oqOl^EjtFq1KXQ`Ugw6%UB%0x&|4%_ep28)0l5(f0(yMjhhtAz;rB9ZG*{j3
zc5_1$biE!u@7E9Re&+y`dYo+o9-lM(b`U}L_u10ha$y91#1TQyJ04%Nj(VUOX7csr
z2OE#j`z-|QfbMUvyzyx<bTdGIYRXjv<b$||@YYZ;7LBm_sDCIFEMe-VbEgw3vrJc+
z3!Ey{=S7nwjbm5$UQNebO0^4}o!pq!*e}PKx=XC`o;z(777ZoLsRTkyZ50KcJ7Tt3
zT!|JYab@z+g*{t*bgs6Ix<*Y%<g|@l?)4bS=JoH!L0!UTOPWP3UE_|0z4J}wLVV4r
zD?u)6?D>d!L9Ci%i-wtxQ^`}d2}`o)th2lZ6^N?cGn1UZQe;w*sP$FLv`OMQHvSdw
zS}jPQP4UT78+h%!jeEFOLmf8><k@a4?;L5!%MyQo*MxqO1p^~3%{%R~TJKOxDk{`=
zRI|w<-YK;-@ASwkJh`HLySXeoK73;Wy_d#og@kuOQ@ocNwwX>bNsqf_TQs=ZQESCx
zVYT`syLPFF50{MfwDQs#a8qk@jSezgGnJGa7tOZvf5K?5Rr%;=nW(o4&^8yE{&uq2
z1&t!r%~whi7vmF!CeE&QUB5l0+RNnmCP7-tQ;3i!vZH6L*G#;&@^bR{VCt@Gg;^s5
zw|%i%uwF~B<4fc-R(XHQ@`^?X#`P2^7(FDET4gj?xM-X?&C~{Whfig$UeE)&y~K9)
z*(_0>F1L7$l+iugSgr9{Bv%<F(ZOkA{Nyk$Vv(L*3#l@BOIFS7ZtW2~IguTg9D~)l
zIHe%XSDV2ztElwJW+5C#@6Y0^RD$2Wz6h>xWi^(|`}@n}Zmo9j0(FRq(MbFbp5iYl
zQ+!zIA6#jjk!4%@;Vc^L8iR?*Vf1Ea%>zm(;Mdx4))vVfx#C@yQyY7Y(Co>6`><*s
dOd9+DsJzVW$@!+^t`4oRhPgxm_;17a`d{hC3UUAd

diff --git a/scenes/arrow.tscn b/scenes/arrow.tscn
index 53c1d62..27ca701 100644
--- a/scenes/arrow.tscn
+++ b/scenes/arrow.tscn
@@ -30,8 +30,8 @@ margin_left = -19.374
 margin_top = -5.93085
 margin_right = 20.626
 margin_bottom = 8.06915
-custom_fonts/font = ExtResource( 1 )
 custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 1 )
 text = "label"
 align = 1
 __meta__ = {
@@ -43,10 +43,7 @@ margin_left = -230.84
 margin_top = 42.1225
 margin_right = 231.16
 margin_bottom = 68.1225
-custom_fonts/font = ExtResource( 1 )
 custom_colors/font_color = Color( 0.356863, 0.356863, 0.356863, 1 )
+custom_fonts/font = ExtResource( 1 )
 text = "label"
 align = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
diff --git a/scenes/cards.gd b/scenes/cards.gd
index 095ee96..f1696ec 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -39,7 +39,8 @@ func draw_card(card):
 	
 	new_card.id = card["id"]
 	new_card.command = card["command"]
-	new_card.description = card["description"][game.lang]
+	# TODO: Make better game.os_lang + "_" + game.os_lang.to_upper()
+	new_card.description = card["description"][game.os_lang + "_" + game.os_lang.to_upper()]
 	new_card.energy = 0 #card.energy
 	new_card.position = Vector2(rect_size.x, rect_size.y*2)
 	add_child(new_card)
@@ -55,7 +56,7 @@ func draw(ids):
 	arrange_cards()
 	
 	if ids.size() > 0:
-		game.notify(tr("YOUR_CARDS"), self, "cards")
+		game.notify(tr("These are your cards! Drag them to highlighted areas to play them!"), self, "cards")
 	
 func arrange_cards():
 	var t = Timer.new()
diff --git a/scenes/cards.tscn b/scenes/cards.tscn
index bc678d1..dbade8d 100644
--- a/scenes/cards.tscn
+++ b/scenes/cards.tscn
@@ -9,9 +9,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 mouse_filter = 2
 script = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="ColorRect" type="ColorRect" parent="."]
 anchor_right = 1.0
diff --git a/scenes/cli_badge.tscn b/scenes/cli_badge.tscn
index 740e2a3..37bbb26 100644
--- a/scenes/cli_badge.tscn
+++ b/scenes/cli_badge.tscn
@@ -32,9 +32,6 @@ texture = ExtResource( 1 )
 expand = true
 stretch_mode = 6
 script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Particles2D" type="Particles2D" parent="."]
 show_behind_parent = true
diff --git a/scenes/drop_area.tscn b/scenes/drop_area.tscn
index 8a85979..9326dc4 100644
--- a/scenes/drop_area.tscn
+++ b/scenes/drop_area.tscn
@@ -23,16 +23,14 @@ resource_local_to_scene = true
 shader = SubResource( 2 )
 shader_param/hovered = 0.0
 
-[node name="DropArea" type="Node2D" groups=[
-"drop_areas",
-]]
+[node name="DropArea" type="Node2D" groups=["drop_areas"]]
 position = Vector2( -0.197731, 0.0673599 )
 script = ExtResource( 1 )
 
 [node name="Area2D" type="Area2D" parent="."]
-input_pickable = false
 collision_layer = 0
 collision_mask = 524288
+input_pickable = false
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
 shape = SubResource( 1 )
diff --git a/scenes/file_browser.tscn b/scenes/file_browser.tscn
index 7bfbe1d..e10ad1a 100644
--- a/scenes/file_browser.tscn
+++ b/scenes/file_browser.tscn
@@ -4,17 +4,12 @@
 [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=2]
 [ext_resource path="res://styles/theme.tres" type="Theme" id=3]
 
-[node name="FileBrowser" type="Control" groups=[
-"editors",
-]]
+[node name="FileBrowser" type="Control" groups=["editors"]]
 anchor_right = 1.0
 anchor_bottom = 1.0
 rect_min_size = Vector2( 0, 142 )
 theme = ExtResource( 3 )
 script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Panel" type="Panel" parent="."]
 anchor_right = 1.0
@@ -53,19 +48,19 @@ align = 1
 
 [node name="Breadcrumbs" type="HBoxContainer" parent="Panel/Margin/Rows"]
 visible = false
-margin_right = 1856.0
+margin_right = 1904.0
 margin_bottom = 50.0
 rect_min_size = Vector2( 0, 50 )
 custom_constants/separation = 8
 
 [node name="Button" type="Button" parent="Panel/Margin/Rows/Breadcrumbs"]
-margin_right = 55.0
+margin_right = 61.0
 margin_bottom = 50.0
 text = "root"
 
 [node name="Button2" type="Button" parent="Panel/Margin/Rows/Breadcrumbs"]
-margin_left = 63.0
-margin_right = 104.0
+margin_left = 69.0
+margin_right = 114.0
 margin_bottom = 50.0
 text = "dir"
 
diff --git a/scenes/file_browser_item.tscn b/scenes/file_browser_item.tscn
index 4ceb076..6a8149d 100644
--- a/scenes/file_browser_item.tscn
+++ b/scenes/file_browser_item.tscn
@@ -13,9 +13,6 @@ margin_bottom = -0.0800018
 rect_min_size = Vector2( 140, 140 )
 mouse_filter = 1
 script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Control" type="Control" parent="."]
 anchor_left = 0.5
diff --git a/scenes/game.gd b/scenes/game.gd
index f9b73c3..a336900 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -1,6 +1,6 @@
 extends Node
 
-var languages = {"en": tr("ENGLISH"), "it": tr("ITALIAN")} # Localizations allowed
+var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed
 var os_lang = OS.get_locale_language() # Variable for game localization
 
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
diff --git a/scenes/level.gd b/scenes/level.gd
index 06b8740..d978784 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -78,7 +78,7 @@ func load(path):
 			else:
 				repo = "yours"
 			
-			var desc = tr("COMPLETE_GOAL")
+			var desc = tr("Complete the goal of this level")
 			for line in Array(config[k].split("\n")):
 				if line.length() > 0 and line[0] == "#":
 					desc = line.substr(1).strip_edges(true, true)
diff --git a/scenes/level_select.gd b/scenes/level_select.gd
index a0118f6..e311f12 100644
--- a/scenes/level_select.gd
+++ b/scenes/level_select.gd
@@ -57,7 +57,7 @@ func reload():
 			level_list.add_child(hb)
 			
 			if badge.active:
-				game.notify(tr("GOLDEN_BADGE"), badge, "cli-badge")
+				game.notify(tr("You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?"), badge, "cli-badge")
 			level_id += 1
 			
 		chapter_id += 1
diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn
index d60e69e..eb8f3b5 100644
--- a/scenes/level_select.tscn
+++ b/scenes/level_select.tscn
@@ -17,9 +17,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 1 )
 script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="ScrollContainer" type="ScrollContainer" parent="."]
 anchor_right = 1.0
@@ -77,29 +74,30 @@ __meta__ = {
 }
 
 [node name="Back" type="Button" parent="HBoxContainer"]
-margin_right = 75.0
+margin_right = 65.0
 margin_bottom = 39.0
-text = "BACK"
+text = "Back"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
 [node name="Reload" type="Button" parent="HBoxContainer"]
-margin_left = 80.0
-margin_right = 188.0
+margin_left = 70.0
+margin_right = 158.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
-text = "RELOAD"
+text = "Reload"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
 [node name="Toggle_Music" parent="HBoxContainer" instance=ExtResource( 4 )]
-margin_left = 193.0
+margin_left = 163.0
 margin_top = 0.0
-margin_right = 282.0
+margin_right = 309.0
 margin_bottom = 39.0
+text = "Toggle music"
 
 [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"]
 [connection signal="pressed" from="HBoxContainer/Back" to="." method="back"]
diff --git a/scenes/main.tscn b/scenes/main.tscn
index 303f9a7..a97e9e4 100644
--- a/scenes/main.tscn
+++ b/scenes/main.tscn
@@ -36,9 +36,6 @@ margin_bottom = -8.0
 mouse_filter = 2
 theme = ExtResource( 6 )
 script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="CanvasLayer" type="CanvasLayer" parent="."]
 layer = -1
@@ -122,9 +119,6 @@ size_flags_vertical = 3
 bbcode_enabled = true
 bbcode_text = "Level description here!"
 text = "Level description here!"
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="LevelCongrats" type="RichTextLabel" parent="Rows/Columns/RightSide/LevelInfo/LevelPanel/Text"]
 visible = false
@@ -189,9 +183,9 @@ position = Vector2( 68.6342, 59.1206 )
 script = ExtResource( 9 )
 
 [node name="Area2D" type="Area2D" parent="Cursor"]
-input_pickable = false
 collision_layer = 524288
 collision_mask = 0
+input_pickable = false
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cursor/Area2D"]
 shape = SubResource( 1 )
@@ -202,27 +196,24 @@ margin_top = 5.13129
 margin_right = 636.864
 margin_bottom = 44.1313
 custom_constants/separation = 8
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Back" type="Button" parent="Menu"]
-margin_right = 75.0
+margin_right = 65.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
-text = "BACK"
+text = "Back"
 __meta__ = {
 "_edit_use_anchors_": false
 }
 
 [node name="Reload" type="Button" parent="Menu"]
-margin_left = 83.0
-margin_right = 191.0
+margin_left = 73.0
+margin_right = 161.0
 margin_bottom = 39.0
 focus_mode = 0
 enabled_focus_mode = 0
-text = "RELOAD"
+text = "Reload"
 __meta__ = {
 "_edit_use_anchors_": false
 }
@@ -252,27 +243,28 @@ __meta__ = {
 }
 
 [node name="Toogle_Music" parent="Menu" instance=ExtResource( 11 )]
-margin_left = 199.0
+margin_left = 169.0
 margin_top = 0.0
-margin_right = 288.0
+margin_right = 315.0
 margin_bottom = 39.0
+text = "Toggle music"
 
 [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )]
 anchor_right = 0.0
 anchor_bottom = 0.0
-margin_left = 296.0
-margin_right = 341.0
+margin_left = 323.0
+margin_right = 368.0
 margin_bottom = 39.0
 
 [node name="NextLevelButton" type="Button" parent="Menu"]
-margin_left = 349.0
-margin_right = 501.0
+margin_left = 376.0
+margin_right = 493.0
 margin_bottom = 39.0
 focus_mode = 0
 custom_styles/hover = SubResource( 2 )
 custom_styles/normal = ExtResource( 4 )
 enabled_focus_mode = 0
-text = "NEXT_LEVEL"
+text = "Next level"
 __meta__ = {
 "_edit_use_anchors_": false
 }
diff --git a/scenes/music_button.tscn b/scenes/music_button.tscn
index a48cc46..fae6457 100644
--- a/scenes/music_button.tscn
+++ b/scenes/music_button.tscn
@@ -9,10 +9,7 @@ margin_right = 387.005
 margin_bottom = 97.856
 focus_mode = 0
 enabled_focus_mode = 0
-text = "MUSIC"
+text = "Toggle music"
 script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [connection signal="pressed" from="." to="." method="toggle_music"]
diff --git a/scenes/no_git.tscn b/scenes/no_git.tscn
index 60bc98c..61f5db1 100644
--- a/scenes/no_git.tscn
+++ b/scenes/no_git.tscn
@@ -28,8 +28,8 @@ margin_left = 797.196
 margin_top = 545.117
 margin_right = 1138.2
 margin_bottom = 601.117
-custom_fonts/font = ExtResource( 5 )
 custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
+custom_fonts/font = ExtResource( 5 )
 text = "by bleeptrack & blinry"
 align = 1
 __meta__ = {
@@ -41,8 +41,8 @@ margin_left = 716.131
 margin_top = 572.398
 margin_right = 1216.13
 margin_bottom = 628.398
-custom_fonts/font = ExtResource( 5 )
 custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
+custom_fonts/font = ExtResource( 5 )
 text = "Original score by winniehell"
 align = 1
 __meta__ = {
@@ -62,7 +62,7 @@ __meta__ = {
 visible = false
 margin_right = 351.0
 margin_bottom = 39.0
-text = "LEVELS"
+text = "Levels"
 
 [node name="Button3" type="Button" parent="VBoxContainer"]
 visible = false
@@ -73,7 +73,7 @@ text = "Sandbox"
 [node name="Install" type="Button" parent="VBoxContainer"]
 margin_right = 351.0
 margin_bottom = 39.0
-text = "INSTALL"
+text = "Install"
 
 [node name="Sprite" type="Sprite" parent="."]
 
diff --git a/scenes/node.gd b/scenes/node.gd
index 716ac3d..c695e91 100644
--- a/scenes/node.gd
+++ b/scenes/node.gd
@@ -80,7 +80,7 @@ func type_set(new_type):
 			$Sprite.texture = preload("res://nodes/tree.svg")
 		"commit":
 			$Sprite.texture = preload("res://nodes/commit.svg")
-			game.notify(tr("DRAG_AROUND"), self, "drag-nodes")
+			game.notify(tr("You can drag these around with your mouse!"), self, "drag-nodes")
 		"tag":
 			$Sprite.texture = preload("res://nodes/blob.svg")
 		"ref":
diff --git a/scenes/node.tscn b/scenes/node.tscn
index f951214..0905cc2 100644
--- a/scenes/node.tscn
+++ b/scenes/node.tscn
@@ -50,8 +50,8 @@ margin_left = -19.9265
 margin_top = -12.0097
 margin_right = 129.073
 margin_bottom = 40.9903
-custom_fonts/font = ExtResource( 1 )
 custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 1 )
 text = "object_id"
 __meta__ = {
 "_edit_use_anchors_": false
@@ -75,9 +75,9 @@ margin_left = -22.057
 margin_top = 31.1738
 margin_right = -12.057
 margin_bottom = 66.1738
-custom_styles/normal = SubResource( 2 )
-custom_fonts/font = ExtResource( 1 )
 custom_colors/font_color = Color( 1, 1, 1, 1 )
+custom_fonts/font = ExtResource( 1 )
+custom_styles/normal = SubResource( 2 )
 __meta__ = {
 "_edit_use_anchors_": false
 }
diff --git a/scenes/notification.gd b/scenes/notification.gd
index 70ed8af..e668c49 100644
--- a/scenes/notification.gd
+++ b/scenes/notification.gd
@@ -2,16 +2,16 @@ extends Node2D
 
 var text setget _set_text
 var button_texts = [
-	tr("GOT_IT"),
-	tr("INTERESTING"),
-	tr("VERY_USEFULL"),
-	tr("COOL"),
-	tr("NICE"),
-	tr("THANKS"),
-	tr("WHATEVER"),
-	tr("OKAY"),
-	tr("YAY"),
-	tr("AWESOME") ]
+	tr("Got it!"),
+	tr("Interesting!"),
+	tr("Very useful!"),
+	tr("Cool!"),
+	tr("Nice!"),
+	tr("Thanks!"),
+	tr("Whatever..."),
+	tr("Okay!"),
+	tr("Yay!"),
+	tr("Awesome!") ]
 
 func _ready():
 	button_texts.shuffle()
diff --git a/scenes/notification.tscn b/scenes/notification.tscn
index 3b552c5..0068983 100644
--- a/scenes/notification.tscn
+++ b/scenes/notification.tscn
@@ -22,9 +22,6 @@ margin_right = 492.0
 margin_bottom = 170.0
 theme = ExtResource( 2 )
 custom_styles/panel = SubResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Label" type="Label" parent="Panel"]
 anchor_right = 1.0
@@ -36,9 +33,6 @@ margin_bottom = -15.0
 custom_fonts/font = ExtResource( 1 )
 text = "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!"
 autowrap = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="CenterContainer" type="CenterContainer" parent="Panel"]
 anchor_top = 1.0
diff --git a/scenes/repository.gd b/scenes/repository.gd
index f64056f..00a9aeb 100644
--- a/scenes/repository.gd
+++ b/scenes/repository.gd
@@ -89,7 +89,7 @@ func set_label(new_label):
 			$Rows/RepoVis/SeparatorLine/DropArea.queue_free()
 			$Rows/RepoVis/SeparatorLine.hide()
 		else:
-			game.notify(tr("INTERACT"), self, "remote")
+			game.notify(tr("This is the time machine of another person! To interact with it, you need special commands!"), self, "remote")
 		label_node.text = new_label
 
 func random_position():
diff --git a/scenes/repository.tscn b/scenes/repository.tscn
index 35264e9..476ffb0 100644
--- a/scenes/repository.tscn
+++ b/scenes/repository.tscn
@@ -12,9 +12,6 @@ rect_clip_content = true
 mouse_filter = 2
 theme = ExtResource( 2 )
 script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Rows" type="HSplitContainer" parent="."]
 anchor_right = 1.0
@@ -38,9 +35,6 @@ anchor_bottom = 1.0
 margin_top = -4.0
 mouse_filter = 2
 color = Color( 0.196078, 0.184314, 0.435294, 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="DropArea" parent="Rows/RepoVis/SeparatorLine" instance=ExtResource( 4 )]
 position = Vector2( 71.6342, -29.3427 )
@@ -54,9 +48,6 @@ margin_right = 229.063
 margin_bottom = -8.50476
 custom_fonts/font = ExtResource( 3 )
 text = "Repo name"
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="IndexLabel" type="Label" parent="Rows/RepoVis"]
 visible = false
diff --git a/scenes/sandbox.tscn b/scenes/sandbox.tscn
index ee28577..fc1e113 100644
--- a/scenes/sandbox.tscn
+++ b/scenes/sandbox.tscn
@@ -48,4 +48,5 @@ margin_left = 961.0
 margin_right = 1910.0
 margin_bottom = 1070.0
 size_flags_horizontal = 3
+
 [connection signal="command_done" from="Columns/Terminal" to="." method="update_repo"]
diff --git a/scenes/survey.tscn b/scenes/survey.tscn
index 85aa1a1..2d3bfc1 100644
--- a/scenes/survey.tscn
+++ b/scenes/survey.tscn
@@ -13,9 +13,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 1 )
 script = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="ColorRect" type="ColorRect" parent="."]
 anchor_right = 1.0
@@ -41,8 +38,8 @@ margin_left = 774.698
 margin_top = 297.059
 margin_right = 1115.7
 margin_bottom = 353.059
-custom_fonts/font = ExtResource( 5 )
 custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
+custom_fonts/font = ExtResource( 5 )
 text = "by bleeptrack & blinry"
 align = 1
 __meta__ = {
@@ -61,9 +58,6 @@ anchor_bottom = 1.0
 margin_left = -175.997
 margin_top = -183.0
 margin_right = 175.997
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Button2" type="Button" parent="VBoxContainer"]
 margin_right = 351.0
@@ -106,5 +100,6 @@ text = "To the survey /o/"
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"]
 [connection signal="pressed" from="VBoxContainer2/Button" to="." method="on_survey_pressed"]
diff --git a/scenes/terminal.gd b/scenes/terminal.gd
index a52600f..757df1e 100644
--- a/scenes/terminal.gd
+++ b/scenes/terminal.gd
@@ -104,7 +104,7 @@ func command_done(cmd):
 	
 	if cmd.output.length() <= 1000:
 		output.text = output.text + "$ " + cmd.command + "\n" + cmd.output
-		game.notify(tr("YOUR_TERMINAL"), self, "terminal")
+		game.notify(tr("This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!"), self, "terminal")
 	else:
 		$Pager/Text.text = cmd.output
 		$Pager.popup()
diff --git a/scenes/terminal.tscn b/scenes/terminal.tscn
index e9706ea..8e36199 100644
--- a/scenes/terminal.tscn
+++ b/scenes/terminal.tscn
@@ -34,9 +34,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 mouse_filter = 1
 script = ExtResource( 4 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Rows" type="VBoxContainer" parent="."]
 anchor_right = 1.0
@@ -56,12 +53,9 @@ anchor_bottom = 1.0
 margin_top = -1.92206
 margin_bottom = -1.92212
 size_flags_vertical = 3
-custom_styles/normal = SubResource( 1 )
 custom_fonts/normal_font = ExtResource( 3 )
+custom_styles/normal = SubResource( 1 )
 scroll_following = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Completions" type="Tree" parent="Rows/TopHalf"]
 anchor_top = 1.0
diff --git a/scenes/text_editor.tscn b/scenes/text_editor.tscn
index 732784f..1738b65 100644
--- a/scenes/text_editor.tscn
+++ b/scenes/text_editor.tscn
@@ -3,9 +3,7 @@
 [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=1]
 [ext_resource path="res://scenes/text_editor.gd" type="Script" id=2]
 
-[node name="TextEditor" type="TextEdit" groups=[
-"editors",
-]]
+[node name="TextEditor" type="TextEdit" groups=["editors"]]
 anchor_right = 1.0
 anchor_bottom = 1.0
 custom_colors/background_color = Color( 0, 0, 0, 1 )
@@ -48,5 +46,6 @@ text = "x"
 __meta__ = {
 "_edit_use_anchors_": false
 }
+
 [connection signal="pressed" from="SaveButton" to="." method="save"]
 [connection signal="pressed" from="CloseButton" to="." method="close"]
diff --git a/scenes/title.gd b/scenes/title.gd
index 285d24e..a9674bf 100644
--- a/scenes/title.gd
+++ b/scenes/title.gd
@@ -1,6 +1,5 @@
 extends Control
 
-#onready var popup = $VBoxContainer/Language
 
 func _ready():
 	#check_correct_lang_item()
@@ -10,9 +9,11 @@ func _ready():
 	
 	#make_popup_items()
 
+
 func quit():
 	get_tree().quit()
 
+
 func levels():
 	get_tree().change_scene("res://scenes/level_select.tscn")
 
@@ -25,39 +26,3 @@ func sandbox():
 	game.current_chapter = levels.chapters.size() - 1
 	game.current_level = levels.chapters[game.current_chapter].levels.size() -1
 	get_tree().change_scene("res://scenes/main.tscn")
-
-
-# Check the apropriate locale
-#func check_correct_lang_item():
-#	for i in game.langs.keys():
-#		if game.lang == game.langs[i]:
-#			popup.get_popup().set_item_checked(i, true)
-
-# Set all items to unchecked
-#func uncheck_all_item():
-#	for i in game.langs.keys():
-#		popup.get_popup().set_item_checked(i, false)
-
-
-# Create popup items width allowed locales
-#func make_popup_items():
-#	for i in game.langs.keys():
-#		popup.get_popup().add_radio_check_item(game.langs[i], i)
-#	
-#	uncheck_all_item()
-#	
-#	check_correct_lang_item()
-#	
-#	popup.get_popup().connect("id_pressed", self, "_on_item_pressed")
-
-
-# Change the translations and localizations of the cards and strings
-#func _on_item_pressed(id):
-#	uncheck_all_item()
-	
-#	popup.get_popup().set_item_checked(id, true)
-#	game.lang = popup.get_popup().get_item_text(id)
-
-	
-#	TranslationServer.set_locale(game.os_lang)
-	
diff --git a/scenes/title.tscn b/scenes/title.tscn
index e2333d3..6ea4267 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -11,9 +11,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 1 )
 script = ExtResource( 3 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Label2" type="Label" parent="."]
 margin_left = 790.778
@@ -24,9 +21,6 @@ custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 )
 custom_fonts/font = ExtResource( 5 )
 text = "by bleeptrack & blinry"
 align = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Label3" type="Label" parent="."]
 margin_left = 709.713
@@ -53,7 +47,7 @@ __meta__ = {
 [node name="Button" type="Button" parent="VBoxContainer"]
 margin_right = 351.0
 margin_bottom = 39.0
-text = "LEVELS"
+text = "Levels"
 
 [node name="Button3" type="Button" parent="VBoxContainer"]
 margin_top = 44.0
@@ -65,13 +59,13 @@ text = "Sandbox"
 margin_top = 88.0
 margin_right = 351.0
 margin_bottom = 127.0
-text = "QUIT"
+text = "Quit"
 
 [node name="Language" type="MenuButton" parent="VBoxContainer"]
 margin_top = 132.0
 margin_right = 351.0
 margin_bottom = 171.0
-text = "LANGUAGE"
+text = "Language"
 flat = false
 script = ExtResource( 4 )
 

From e80596219ae81c3bded5b1c91aa5e3c0a70fe1d5 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 18 Aug 2022 14:40:30 +0200
Subject: [PATCH 35/49] reset levels directory without it translations

---
 levels/{en => }/bisect/bisect                 |   0
 levels/{en => }/bisect/sequence               |   0
 levels/{en => }/branches/branch-create        |   0
 levels/{en => }/branches/branch-remove        |   0
 levels/{en => }/branches/checkout-commit      |   0
 levels/{en => }/branches/fork                 |   0
 levels/{en => }/branches/grow                 |   0
 levels/{en => }/branches/reorder              |   0
 levels/{en => }/branches/sequence             |   0
 levels/{en => }/changing-the-past/rebase      |   0
 levels/{en => }/changing-the-past/reorder     |   0
 levels/{en => }/changing-the-past/sequence    |   0
 levels/{en => }/files/files-add               |   0
 levels/{en => }/files/files-delete            |   0
 levels/{en => }/files/sequence                |   0
 levels/{en => }/index/add                     |   0
 levels/{en => }/index/change                  |   0
 levels/{en => }/index/checkout                |   0
 levels/{en => }/index/compare                 |   0
 levels/{en => }/index/new                     |   0
 levels/{en => }/index/reset                   |   0
 levels/{en => }/index/rm                      |   0
 levels/{en => }/index/sequence                |   0
 levels/{en => }/index/steps                   |   0
 levels/{en => }/intro/cli                     |   0
 levels/{en => }/intro/commit                  |   0
 levels/{en => }/intro/copies                  |   0
 levels/{en => }/intro/init                    |   0
 levels/{en => }/intro/remote                  |   0
 levels/{en => }/intro/risky                   |   0
 levels/{en => }/intro/sequence                |   0
 levels/{en => }/intro/who-are-you             |   0
 levels/it/bisect/bisect                       |  43 -----
 levels/it/bisect/sequence                     |   1 -
 levels/it/branches/branch-create              |  44 -----
 levels/it/branches/branch-remove              |  47 -----
 levels/it/branches/checkout-commit            |  43 -----
 levels/it/branches/fork                       |  65 -------
 levels/it/branches/grow                       |  48 -----
 levels/it/branches/reorder                    |  89 ---------
 levels/it/branches/sequence                   |   6 -
 levels/it/changing-the-past/rebase            |  86 ---------
 levels/it/changing-the-past/reorder           |  77 --------
 levels/it/changing-the-past/sequence          |   2 -
 levels/it/files/files-add                     |  31 ---
 levels/it/files/files-delete                  |  36 ----
 levels/it/files/sequence                      |   3 -
 levels/it/index/#sequence#                    |   5 -
 levels/it/index/add                           |  38 ----
 levels/it/index/change                        |  31 ---
 levels/it/index/checkout                      |  25 ---
 levels/it/index/compare                       |  51 -----
 levels/it/index/new                           |  28 ---
 levels/it/index/reset                         |  37 ----
 levels/it/index/rm                            |  24 ---
 levels/it/index/sequence                      |   5 -
 levels/it/index/steps                         |  53 ------
 levels/it/intro/cli                           |  27 ---
 levels/it/intro/commit                        |  32 ----
 levels/it/intro/copies                        |  42 ----
 levels/it/intro/init                          |  24 ---
 levels/it/intro/remote                        |  52 -----
 levels/it/intro/risky                         |  42 ----
 levels/it/intro/sequence                      |   6 -
 levels/it/intro/who-are-you                   |  38 ----
 levels/it/low-level/basics                    |  26 ---
 levels/it/low-level/blob-create               |  38 ----
 levels/it/low-level/blob-remove               |  27 ---
 levels/it/low-level/commit-create             |  37 ----
 levels/it/low-level/commit-parents            |  31 ---
 levels/it/low-level/commit-rhombus            |  30 ---
 levels/it/low-level/index-add                 |  37 ----
 levels/it/low-level/index-remove              |  29 ---
 levels/it/low-level/index-update              |  33 ----
 levels/it/low-level/puzzle-apocalypse         |  41 ----
 levels/it/low-level/puzzle-precious-blob      |  28 ---
 .../low-level/puzzle-trees-all-the-way-down   |  34 ----
 levels/it/low-level/ref-create                |  42 ----
 levels/it/low-level/ref-move                  |  41 ----
 levels/it/low-level/ref-remove                |  41 ----
 levels/it/low-level/sequence                  |  18 --
 levels/it/low-level/symref-create             |  21 --
 levels/it/low-level/symref-no-deref           |  46 -----
 levels/it/low-level/tree-create               |  35 ----
 levels/it/low-level/tree-nested               |  38 ----
 levels/it/low-level/tree-read                 |  51 -----
 levels/it/low-level/welcome                   |  33 ----
 levels/it/merge/conflict                      |  47 -----
 levels/it/merge/merge                         |  82 --------
 levels/it/merge/merge-abort                   |  54 ------
 levels/it/merge/sequence                      |   3 -
 levels/it/remotes/friend                      |  47 -----
 levels/it/remotes/problems                    |  33 ----
 levels/it/remotes/sequence                    |   2 -
 levels/it/sandbox/empty                       |   7 -
 levels/it/sandbox/remote                      |  22 ---
 levels/it/sandbox/sequence                    |   3 -
 levels/it/sandbox/three-commits               |  26 ---
 levels/it/sequence                            |  13 --
 levels/it/shit-happens/bad-commit             |  31 ---
 .../it/shit-happens/pushed-something-broken   |  54 ------
 levels/it/shit-happens/reflog                 |  26 ---
 levels/it/shit-happens/restore-a-file         |  22 ---
 .../shit-happens/restore-a-file-from-the-past |  22 ---
 levels/it/shit-happens/sequence               |   5 -
 levels/it/stash/sequence                      |   5 -
 levels/it/stash/stash                         |  45 -----
 levels/it/stash/stash-branch                  |  47 -----
 levels/it/stash/stash-clear                   |  57 ------
 levels/it/stash/stash-merge                   |  53 ------
 levels/it/stash/stash-pop                     |  46 -----
 levels/it/tags/add-tag                        |  53 ------
 levels/it/tags/add-tag-later                  |  50 -----
 levels/it/tags/remote-tag                     |  58 ------
 levels/it/tags/remove-tag                     |  53 ------
 levels/it/tags/sequence                       |   4 -
 levels/it/unused/checkout                     |  31 ---
 levels/it/unused/clone                        |  20 --
 levels/it/unused/commit                       |  27 ---
 levels/it/unused/commit-a                     |  26 ---
 levels/it/unused/fetch                        |  35 ----
 levels/it/unused/files-move                   |  27 ---
 levels/it/unused/index-mv                     |  26 ---
 levels/it/unused/init                         |  14 --
 levels/it/unused/pull-push                    |  51 -----
 levels/it/unused/remotes-add                  |  33 ----
 levels/it/unused/remotes-delete               |  23 ---
 levels/it/unused/restore                      |  28 ---
 levels/it/unused/split                        |  26 ---
 levels/it/unused/steps                        |  23 ---
 levels/it/unused/who-are-you                  |  23 ---
 levels/it/workflows/gitignore                 |  18 --
 levels/it/workflows/pr                        |  25 ---
 levels/it/workflows/sequence                  |   1 -
 levels/{en => }/low-level/basics              |   0
 levels/{en => }/low-level/blob-create         |   0
 levels/{en => }/low-level/blob-remove         |   0
 levels/{en => }/low-level/commit-create       |   0
 levels/{en => }/low-level/commit-parents      |   0
 levels/{en => }/low-level/commit-rhombus      |   0
 levels/{en => }/low-level/index-add           |   0
 levels/{en => }/low-level/index-remove        |   0
 levels/{en => }/low-level/index-update        |   0
 levels/{en => }/low-level/puzzle-apocalypse   |   0
 .../{en => }/low-level/puzzle-precious-blob   |   0
 .../low-level/puzzle-trees-all-the-way-down   |   0
 levels/{en => }/low-level/ref-create          |   0
 levels/{en => }/low-level/ref-move            |   0
 levels/{en => }/low-level/ref-remove          |   0
 levels/{en => }/low-level/sequence            |   0
 levels/{en => }/low-level/symref-create       |   0
 levels/{en => }/low-level/symref-no-deref     |   0
 levels/{en => }/low-level/tree-create         |   0
 levels/{en => }/low-level/tree-nested         |   0
 levels/{en => }/low-level/tree-read           |   0
 levels/{en => }/low-level/welcome             |   0
 levels/{en => }/merge/conflict                |   0
 levels/{en => }/merge/merge                   |   0
 levels/{en => }/merge/merge-abort             |   0
 levels/{en => }/merge/sequence                |   0
 levels/{en => }/remotes/friend                |   0
 levels/{en => }/remotes/problems              |   0
 levels/{en => }/remotes/sequence              |   0
 levels/{en => }/sandbox/empty                 |   0
 levels/{en => }/sandbox/remote                |   0
 levels/{en => }/sandbox/sequence              |   0
 levels/{en => }/sandbox/three-commits         |   0
 levels/{en => }/sequence                      |   0
 levels/{en => }/shit-happens/bad-commit       |   0
 .../shit-happens/pushed-something-broken      |   0
 levels/{en => }/shit-happens/reflog           |   0
 levels/{en => }/shit-happens/restore-a-file   |   0
 .../shit-happens/restore-a-file-from-the-past |   0
 levels/{en => }/shit-happens/sequence         |   0
 levels/{en => }/stash/sequence                |   0
 levels/{en => }/stash/stash                   |   0
 levels/{en => }/stash/stash-branch            |   0
 levels/{en => }/stash/stash-clear             |   0
 levels/{en => }/stash/stash-merge             |   0
 levels/{en => }/stash/stash-pop               |   0
 levels/{en => }/tags/add-tag                  |   0
 levels/{en => }/tags/add-tag-later            |   0
 levels/{en => }/tags/remote-tag               |   0
 levels/{en => }/tags/remove-tag               |   0
 levels/{en => }/tags/sequence                 |   0
 levels/{en => }/unused/checkout               |   0
 levels/{en => }/unused/clone                  |   0
 levels/{en => }/unused/commit                 |   0
 levels/{en => }/unused/commit-a               |   0
 levels/{en => }/unused/fetch                  |   0
 levels/{en => }/unused/files-move             |   0
 levels/{en => }/unused/index-mv               |   0
 levels/{en => }/unused/init                   |   0
 levels/{en => }/unused/pull-push              |   0
 levels/{en => }/unused/remotes-add            |   0
 levels/{en => }/unused/remotes-delete         |   0
 levels/{en => }/unused/restore                |   0
 levels/{en => }/unused/split                  |   0
 levels/{en => }/unused/steps                  |   0
 levels/{en => }/unused/who-are-you            |   0
 levels/{en => }/workflows/gitignore           |   0
 levels/{en => }/workflows/pr                  |   0
 levels/{en => }/workflows/sequence            |   0
 locale/it.po                                  | 154 +++++++++++++++
 locale/messages.mo                            | Bin 0 -> 8795 bytes
 resources/cards.json                          | 180 ++++--------------
 scenes/cards.gd                               |   2 +-
 scenes/level.gd                               |   3 +-
 208 files changed, 193 insertions(+), 3511 deletions(-)
 rename levels/{en => }/bisect/bisect (100%)
 rename levels/{en => }/bisect/sequence (100%)
 rename levels/{en => }/branches/branch-create (100%)
 rename levels/{en => }/branches/branch-remove (100%)
 rename levels/{en => }/branches/checkout-commit (100%)
 rename levels/{en => }/branches/fork (100%)
 rename levels/{en => }/branches/grow (100%)
 rename levels/{en => }/branches/reorder (100%)
 rename levels/{en => }/branches/sequence (100%)
 rename levels/{en => }/changing-the-past/rebase (100%)
 rename levels/{en => }/changing-the-past/reorder (100%)
 rename levels/{en => }/changing-the-past/sequence (100%)
 rename levels/{en => }/files/files-add (100%)
 rename levels/{en => }/files/files-delete (100%)
 rename levels/{en => }/files/sequence (100%)
 rename levels/{en => }/index/add (100%)
 rename levels/{en => }/index/change (100%)
 rename levels/{en => }/index/checkout (100%)
 rename levels/{en => }/index/compare (100%)
 rename levels/{en => }/index/new (100%)
 rename levels/{en => }/index/reset (100%)
 rename levels/{en => }/index/rm (100%)
 rename levels/{en => }/index/sequence (100%)
 rename levels/{en => }/index/steps (100%)
 rename levels/{en => }/intro/cli (100%)
 rename levels/{en => }/intro/commit (100%)
 rename levels/{en => }/intro/copies (100%)
 rename levels/{en => }/intro/init (100%)
 rename levels/{en => }/intro/remote (100%)
 rename levels/{en => }/intro/risky (100%)
 rename levels/{en => }/intro/sequence (100%)
 rename levels/{en => }/intro/who-are-you (100%)
 delete mode 100644 levels/it/bisect/bisect
 delete mode 100644 levels/it/bisect/sequence
 delete mode 100644 levels/it/branches/branch-create
 delete mode 100644 levels/it/branches/branch-remove
 delete mode 100644 levels/it/branches/checkout-commit
 delete mode 100644 levels/it/branches/fork
 delete mode 100644 levels/it/branches/grow
 delete mode 100644 levels/it/branches/reorder
 delete mode 100644 levels/it/branches/sequence
 delete mode 100644 levels/it/changing-the-past/rebase
 delete mode 100644 levels/it/changing-the-past/reorder
 delete mode 100644 levels/it/changing-the-past/sequence
 delete mode 100644 levels/it/files/files-add
 delete mode 100644 levels/it/files/files-delete
 delete mode 100644 levels/it/files/sequence
 delete mode 100644 levels/it/index/#sequence#
 delete mode 100644 levels/it/index/add
 delete mode 100644 levels/it/index/change
 delete mode 100644 levels/it/index/checkout
 delete mode 100644 levels/it/index/compare
 delete mode 100644 levels/it/index/new
 delete mode 100644 levels/it/index/reset
 delete mode 100644 levels/it/index/rm
 delete mode 100644 levels/it/index/sequence
 delete mode 100644 levels/it/index/steps
 delete mode 100644 levels/it/intro/cli
 delete mode 100644 levels/it/intro/commit
 delete mode 100644 levels/it/intro/copies
 delete mode 100644 levels/it/intro/init
 delete mode 100644 levels/it/intro/remote
 delete mode 100644 levels/it/intro/risky
 delete mode 100644 levels/it/intro/sequence
 delete mode 100644 levels/it/intro/who-are-you
 delete mode 100644 levels/it/low-level/basics
 delete mode 100644 levels/it/low-level/blob-create
 delete mode 100644 levels/it/low-level/blob-remove
 delete mode 100644 levels/it/low-level/commit-create
 delete mode 100644 levels/it/low-level/commit-parents
 delete mode 100644 levels/it/low-level/commit-rhombus
 delete mode 100644 levels/it/low-level/index-add
 delete mode 100644 levels/it/low-level/index-remove
 delete mode 100644 levels/it/low-level/index-update
 delete mode 100644 levels/it/low-level/puzzle-apocalypse
 delete mode 100644 levels/it/low-level/puzzle-precious-blob
 delete mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down
 delete mode 100644 levels/it/low-level/ref-create
 delete mode 100644 levels/it/low-level/ref-move
 delete mode 100644 levels/it/low-level/ref-remove
 delete mode 100644 levels/it/low-level/sequence
 delete mode 100644 levels/it/low-level/symref-create
 delete mode 100644 levels/it/low-level/symref-no-deref
 delete mode 100644 levels/it/low-level/tree-create
 delete mode 100644 levels/it/low-level/tree-nested
 delete mode 100644 levels/it/low-level/tree-read
 delete mode 100644 levels/it/low-level/welcome
 delete mode 100644 levels/it/merge/conflict
 delete mode 100644 levels/it/merge/merge
 delete mode 100644 levels/it/merge/merge-abort
 delete mode 100644 levels/it/merge/sequence
 delete mode 100644 levels/it/remotes/friend
 delete mode 100644 levels/it/remotes/problems
 delete mode 100644 levels/it/remotes/sequence
 delete mode 100644 levels/it/sandbox/empty
 delete mode 100644 levels/it/sandbox/remote
 delete mode 100644 levels/it/sandbox/sequence
 delete mode 100644 levels/it/sandbox/three-commits
 delete mode 100644 levels/it/sequence
 delete mode 100644 levels/it/shit-happens/bad-commit
 delete mode 100644 levels/it/shit-happens/pushed-something-broken
 delete mode 100644 levels/it/shit-happens/reflog
 delete mode 100644 levels/it/shit-happens/restore-a-file
 delete mode 100644 levels/it/shit-happens/restore-a-file-from-the-past
 delete mode 100644 levels/it/shit-happens/sequence
 delete mode 100644 levels/it/stash/sequence
 delete mode 100644 levels/it/stash/stash
 delete mode 100644 levels/it/stash/stash-branch
 delete mode 100644 levels/it/stash/stash-clear
 delete mode 100644 levels/it/stash/stash-merge
 delete mode 100644 levels/it/stash/stash-pop
 delete mode 100644 levels/it/tags/add-tag
 delete mode 100644 levels/it/tags/add-tag-later
 delete mode 100644 levels/it/tags/remote-tag
 delete mode 100644 levels/it/tags/remove-tag
 delete mode 100644 levels/it/tags/sequence
 delete mode 100644 levels/it/unused/checkout
 delete mode 100644 levels/it/unused/clone
 delete mode 100644 levels/it/unused/commit
 delete mode 100644 levels/it/unused/commit-a
 delete mode 100644 levels/it/unused/fetch
 delete mode 100644 levels/it/unused/files-move
 delete mode 100644 levels/it/unused/index-mv
 delete mode 100644 levels/it/unused/init
 delete mode 100644 levels/it/unused/pull-push
 delete mode 100644 levels/it/unused/remotes-add
 delete mode 100644 levels/it/unused/remotes-delete
 delete mode 100644 levels/it/unused/restore
 delete mode 100644 levels/it/unused/split
 delete mode 100644 levels/it/unused/steps
 delete mode 100644 levels/it/unused/who-are-you
 delete mode 100644 levels/it/workflows/gitignore
 delete mode 100644 levels/it/workflows/pr
 delete mode 100644 levels/it/workflows/sequence
 rename levels/{en => }/low-level/basics (100%)
 rename levels/{en => }/low-level/blob-create (100%)
 rename levels/{en => }/low-level/blob-remove (100%)
 rename levels/{en => }/low-level/commit-create (100%)
 rename levels/{en => }/low-level/commit-parents (100%)
 rename levels/{en => }/low-level/commit-rhombus (100%)
 rename levels/{en => }/low-level/index-add (100%)
 rename levels/{en => }/low-level/index-remove (100%)
 rename levels/{en => }/low-level/index-update (100%)
 rename levels/{en => }/low-level/puzzle-apocalypse (100%)
 rename levels/{en => }/low-level/puzzle-precious-blob (100%)
 rename levels/{en => }/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{en => }/low-level/ref-create (100%)
 rename levels/{en => }/low-level/ref-move (100%)
 rename levels/{en => }/low-level/ref-remove (100%)
 rename levels/{en => }/low-level/sequence (100%)
 rename levels/{en => }/low-level/symref-create (100%)
 rename levels/{en => }/low-level/symref-no-deref (100%)
 rename levels/{en => }/low-level/tree-create (100%)
 rename levels/{en => }/low-level/tree-nested (100%)
 rename levels/{en => }/low-level/tree-read (100%)
 rename levels/{en => }/low-level/welcome (100%)
 rename levels/{en => }/merge/conflict (100%)
 rename levels/{en => }/merge/merge (100%)
 rename levels/{en => }/merge/merge-abort (100%)
 rename levels/{en => }/merge/sequence (100%)
 rename levels/{en => }/remotes/friend (100%)
 rename levels/{en => }/remotes/problems (100%)
 rename levels/{en => }/remotes/sequence (100%)
 rename levels/{en => }/sandbox/empty (100%)
 rename levels/{en => }/sandbox/remote (100%)
 rename levels/{en => }/sandbox/sequence (100%)
 rename levels/{en => }/sandbox/three-commits (100%)
 rename levels/{en => }/sequence (100%)
 rename levels/{en => }/shit-happens/bad-commit (100%)
 rename levels/{en => }/shit-happens/pushed-something-broken (100%)
 rename levels/{en => }/shit-happens/reflog (100%)
 rename levels/{en => }/shit-happens/restore-a-file (100%)
 rename levels/{en => }/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{en => }/shit-happens/sequence (100%)
 rename levels/{en => }/stash/sequence (100%)
 rename levels/{en => }/stash/stash (100%)
 rename levels/{en => }/stash/stash-branch (100%)
 rename levels/{en => }/stash/stash-clear (100%)
 rename levels/{en => }/stash/stash-merge (100%)
 rename levels/{en => }/stash/stash-pop (100%)
 rename levels/{en => }/tags/add-tag (100%)
 rename levels/{en => }/tags/add-tag-later (100%)
 rename levels/{en => }/tags/remote-tag (100%)
 rename levels/{en => }/tags/remove-tag (100%)
 rename levels/{en => }/tags/sequence (100%)
 rename levels/{en => }/unused/checkout (100%)
 rename levels/{en => }/unused/clone (100%)
 rename levels/{en => }/unused/commit (100%)
 rename levels/{en => }/unused/commit-a (100%)
 rename levels/{en => }/unused/fetch (100%)
 rename levels/{en => }/unused/files-move (100%)
 rename levels/{en => }/unused/index-mv (100%)
 rename levels/{en => }/unused/init (100%)
 rename levels/{en => }/unused/pull-push (100%)
 rename levels/{en => }/unused/remotes-add (100%)
 rename levels/{en => }/unused/remotes-delete (100%)
 rename levels/{en => }/unused/restore (100%)
 rename levels/{en => }/unused/split (100%)
 rename levels/{en => }/unused/steps (100%)
 rename levels/{en => }/unused/who-are-you (100%)
 rename levels/{en => }/workflows/gitignore (100%)
 rename levels/{en => }/workflows/pr (100%)
 rename levels/{en => }/workflows/sequence (100%)
 create mode 100644 locale/messages.mo

diff --git a/levels/en/bisect/bisect b/levels/bisect/bisect
similarity index 100%
rename from levels/en/bisect/bisect
rename to levels/bisect/bisect
diff --git a/levels/en/bisect/sequence b/levels/bisect/sequence
similarity index 100%
rename from levels/en/bisect/sequence
rename to levels/bisect/sequence
diff --git a/levels/en/branches/branch-create b/levels/branches/branch-create
similarity index 100%
rename from levels/en/branches/branch-create
rename to levels/branches/branch-create
diff --git a/levels/en/branches/branch-remove b/levels/branches/branch-remove
similarity index 100%
rename from levels/en/branches/branch-remove
rename to levels/branches/branch-remove
diff --git a/levels/en/branches/checkout-commit b/levels/branches/checkout-commit
similarity index 100%
rename from levels/en/branches/checkout-commit
rename to levels/branches/checkout-commit
diff --git a/levels/en/branches/fork b/levels/branches/fork
similarity index 100%
rename from levels/en/branches/fork
rename to levels/branches/fork
diff --git a/levels/en/branches/grow b/levels/branches/grow
similarity index 100%
rename from levels/en/branches/grow
rename to levels/branches/grow
diff --git a/levels/en/branches/reorder b/levels/branches/reorder
similarity index 100%
rename from levels/en/branches/reorder
rename to levels/branches/reorder
diff --git a/levels/en/branches/sequence b/levels/branches/sequence
similarity index 100%
rename from levels/en/branches/sequence
rename to levels/branches/sequence
diff --git a/levels/en/changing-the-past/rebase b/levels/changing-the-past/rebase
similarity index 100%
rename from levels/en/changing-the-past/rebase
rename to levels/changing-the-past/rebase
diff --git a/levels/en/changing-the-past/reorder b/levels/changing-the-past/reorder
similarity index 100%
rename from levels/en/changing-the-past/reorder
rename to levels/changing-the-past/reorder
diff --git a/levels/en/changing-the-past/sequence b/levels/changing-the-past/sequence
similarity index 100%
rename from levels/en/changing-the-past/sequence
rename to levels/changing-the-past/sequence
diff --git a/levels/en/files/files-add b/levels/files/files-add
similarity index 100%
rename from levels/en/files/files-add
rename to levels/files/files-add
diff --git a/levels/en/files/files-delete b/levels/files/files-delete
similarity index 100%
rename from levels/en/files/files-delete
rename to levels/files/files-delete
diff --git a/levels/en/files/sequence b/levels/files/sequence
similarity index 100%
rename from levels/en/files/sequence
rename to levels/files/sequence
diff --git a/levels/en/index/add b/levels/index/add
similarity index 100%
rename from levels/en/index/add
rename to levels/index/add
diff --git a/levels/en/index/change b/levels/index/change
similarity index 100%
rename from levels/en/index/change
rename to levels/index/change
diff --git a/levels/en/index/checkout b/levels/index/checkout
similarity index 100%
rename from levels/en/index/checkout
rename to levels/index/checkout
diff --git a/levels/en/index/compare b/levels/index/compare
similarity index 100%
rename from levels/en/index/compare
rename to levels/index/compare
diff --git a/levels/en/index/new b/levels/index/new
similarity index 100%
rename from levels/en/index/new
rename to levels/index/new
diff --git a/levels/en/index/reset b/levels/index/reset
similarity index 100%
rename from levels/en/index/reset
rename to levels/index/reset
diff --git a/levels/en/index/rm b/levels/index/rm
similarity index 100%
rename from levels/en/index/rm
rename to levels/index/rm
diff --git a/levels/en/index/sequence b/levels/index/sequence
similarity index 100%
rename from levels/en/index/sequence
rename to levels/index/sequence
diff --git a/levels/en/index/steps b/levels/index/steps
similarity index 100%
rename from levels/en/index/steps
rename to levels/index/steps
diff --git a/levels/en/intro/cli b/levels/intro/cli
similarity index 100%
rename from levels/en/intro/cli
rename to levels/intro/cli
diff --git a/levels/en/intro/commit b/levels/intro/commit
similarity index 100%
rename from levels/en/intro/commit
rename to levels/intro/commit
diff --git a/levels/en/intro/copies b/levels/intro/copies
similarity index 100%
rename from levels/en/intro/copies
rename to levels/intro/copies
diff --git a/levels/en/intro/init b/levels/intro/init
similarity index 100%
rename from levels/en/intro/init
rename to levels/intro/init
diff --git a/levels/en/intro/remote b/levels/intro/remote
similarity index 100%
rename from levels/en/intro/remote
rename to levels/intro/remote
diff --git a/levels/en/intro/risky b/levels/intro/risky
similarity index 100%
rename from levels/en/intro/risky
rename to levels/intro/risky
diff --git a/levels/en/intro/sequence b/levels/intro/sequence
similarity index 100%
rename from levels/en/intro/sequence
rename to levels/intro/sequence
diff --git a/levels/en/intro/who-are-you b/levels/intro/who-are-you
similarity index 100%
rename from levels/en/intro/who-are-you
rename to levels/intro/who-are-you
diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect
deleted file mode 100644
index a80e2e8..0000000
--- a/levels/it/bisect/bisect
+++ /dev/null
@@ -1,43 +0,0 @@
-title = Strada di mattoni gialli
-cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad
-
-[description]
-
-(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D)
-
-Oh no! Hai perso la tua chiave da qualche parte durante il giorno!
-
-Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male!
-
-Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd".
-
-Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa?
-
-[setup]
-
-echo "Hai ancora la tua chiave." > you
-
-for i in {1..30}; do
-    if test $i -eq 12; then
-        echo "La tua tasca è vuota." > you
-        echo "E' per terra." > key
-    fi
-    if test $i -eq 13; then
-        echo "Tiene una chiave nel becco." > bird
-        rm key
-    fi
-    if test $i -eq 14; then
-        rm bird
-    fi
-    git add .
-    git commit --allow-empty -m "$i"
-done
-
-[win]
-
-# Trova l'ultimo commit buono
-test "$(git log --pretty=%s main | head -1)" -eq 11
-
-[congrats]
-
-Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo...
diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence
deleted file mode 100644
index e8018fe..0000000
--- a/levels/it/bisect/sequence
+++ /dev/null
@@ -1 +0,0 @@
-bisect
diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create
deleted file mode 100644
index 2544ead..0000000
--- a/levels/it/branches/branch-create
+++ /dev/null
@@ -1,44 +0,0 @@
-title = Creare ramificazioni
-cards = checkout commit-auto branch branch-delete reset-hard
-
-[description]
-
-Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste!
-
-Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs")
-
-[cli]
-
-Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci.
-
-[setup]
-
-echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you
-git add .
-git commit -m "Preparazione serale"
-echo "Vai alla festa di compleanno!" >> you
-git add .
-git commit -m "Vai al compleanno"
-
-git checkout HEAD~1
-echo "Vai al concerto!" > you
-git add .
-git commit -m "Vai al concerto"
-
-git checkout HEAD~1
-
-git branch -D main
-
-[win]
-
-# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno
-git show birthday | grep 'birthday'
-
-# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno
-git show concert | grep 'concert'
-
-[congrats]
-
-Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova!
-
-Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay!
diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove
deleted file mode 100644
index 00a2d4c..0000000
--- a/levels/it/branches/branch-remove
+++ /dev/null
@@ -1,47 +0,0 @@
-title = Cancellare rami
-cards = checkout commit-auto reset-hard branch-delete
-
-[description]
-
-La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi!
-
-Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro
-
-[setup]
-
-echo Esci di casa e ti incammini verso la scuola. > you
-git add .
-git commit -m "Buon giorno!"
-
-echo Cammini nel lato destro della strada. >> you
-git commit -am "Lato destro"
-
-echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you
-git commit -am "Salto"
-
-git checkout HEAD^ -b friend
-echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you
-git commit -am "Un nuovo amico"
-
-git checkout HEAD~2 -b music
-echo Cammini nel lato sinistro della strada. >> you
-git commit -am "Lato sinistro"
-
-echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you
-git commit -am "Bei suoni"
-
-git checkout HEAD^ -b ice-cream
-echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you
-git commit -am "Yum"
-
-git branch -M main leap
-git checkout leap^^
-
-[win]
-
-# Trova i rami cattivi e cancellali. Tieni solo il migliore.
-test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)"
-
-[congrats]
-
-Ripensandoci preferisci la linea temporale del gelato? :)
diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit
deleted file mode 100644
index 3d913df..0000000
--- a/levels/it/branches/checkout-commit
+++ /dev/null
@@ -1,43 +0,0 @@
-title = Muoversi attraverso il tempo
-cards = checkout commit-auto
-
-[description]
-
-La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!)
-
-Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit!
-
-[cli]
-
-Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi!
-
-Questo inserirà l'identificatore unico del commit!
-
-[setup]
-
-echo "Questo salvadanaio appartiene alla sorella maggiore.
-Contiene 10 monete." > piggy_bank
-git add .
-git commit -m "L'inizio"
-
-echo "Una giovane donna con capelli, ricci, marroni." > little_sister
-git add .
-git commit -m "La sorella piccola è arrivata"
-
-echo "Ha 10 monete." >> little_sister
-echo "Questo salvadanaio appartiene alla sorella maggiore.
-E' vuoto." > piggy_bank
-git add .
-git commit -m "La sorella piccola ha fatto qualcosa"
-
-git checkout HEAD^^
-git branch -df main
-
-[win]
-
-# Ripristina il salvadanaio della sorella.
-{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; }
-
-[congrats]
-
-Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate...
diff --git a/levels/it/branches/fork b/levels/it/branches/fork
deleted file mode 100644
index 46b94c6..0000000
--- a/levels/it/branches/fork
+++ /dev/null
@@ -1,65 +0,0 @@
-title = Crea universi paralleli
-cards = checkout commit-auto
-
-[description]
-
-Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero!
-
-Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy!
-
-[cli]
-
-L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale.
-
-Ecco un simpatico trucchetto andare al commit precedente:
-
-    git checkout HEAD^
-
-Puoi anche andare indietro di 2 commit digitando, pre esempio:
-
-    git checkout HEAD~2
-
-[setup]
-
-mkdir cage
-echo "Sembra molto affamato." > cage/lion
-
-echo "Un ragazzino..
-Ama veramente i gatti!" > child
-git add .
-git commit -m "L'inizio"
-
-echo "Tiene in mano un leccalecca." >> child
-git commit -am "Il ragazzo compra qualcosa"
-
-mv child cage
-git add .
-git commit -m "Il bambino si arrampica da qualche parte"
-
-git rm cage/child
-echo "E' felice. :)" > cage/lion
-git add .
-git commit -m "Oh no"
-
-echo "Sta dormendo." > cage/lion
-git add .
-git commit -m "Ora del pisolino!"
-
-git checkout --detach
-git branch -d main
-
-[win]
-
-# Assicurati che il ragazzino sia felice.
-git ls-tree --name-only -r HEAD | grep child
-
-# Assicurati che il leone abbia qualcosa da mangiare.
-git show HEAD:cage/lion | grep -v "molto affamato"
-
-[congrats]
-
-Whew, ottimo lavoro! Questo sembra un risultato molto migliore.
-
-Sentiti libero di aggiungere altre line temporali parallele o allungarle.
-
-Se sei pronto, la prossima missione ci sta aspettando...
diff --git a/levels/it/branches/grow b/levels/it/branches/grow
deleted file mode 100644
index d560682..0000000
--- a/levels/it/branches/grow
+++ /dev/null
@@ -1,48 +0,0 @@
-title = I rami crescono con tè!
-cards = checkout commit-auto branch branch-delete reset-hard
-
-[description]
-
-Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale":
-
-Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima.
-
-e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale!
-
-[cli]
-Per viaggire in un ramo, digita `git checkout name_of_the_branch`.
-
-e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`.
-
-[setup]
-
-echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you
-git add .
-git commit -m "Preparazioni della sera"
-echo "Vai alla festa di compleanno!" >> you
-git add .
-git commit -m "Vai alla festa di compleanno"
-git branch birthday
-
-git checkout HEAD~1
-echo "Vai al concerto!" > you
-git add .
-git commit -m "Vai al concerto"
-git branch concert
-
-git checkout HEAD~1
-
-git branch -D main
-
-[win]
-
-# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit
-for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
-    if test $(git rev-parse $commit^) = $(git rev-parse birthday); then
-        return 0
-    fi
-done
-return 1
-
-# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit.
-git show concert^ | grep "Vai al concerto"
diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder
deleted file mode 100644
index d8a0212..0000000
--- a/levels/it/branches/reorder
+++ /dev/null
@@ -1,89 +0,0 @@
-title = Muovere i rami
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate!
-
-Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando:
-
-    git checkout
-
-nel nome della branch e poi usare
-
-    git reset --hard
-
-nel commit dove vuoi che la branch vada.
-
-La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch!
-
-[setup]
-
-echo "Tu non hai una baguette.
-
-Non hai un caffe.
-
-Non hai una ciambella." > you
-
-git add .
-git commit -m "L'inizio"
-
-git checkout -b coffee
-echo "Tu hai una baguette.
-
-Non hai un caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri una ciambella"
-
-echo "Mangi una baguette.
-
-Non hai un caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Mangi una baguette"
-
-git checkout -b baguette main
-echo "Non hai una ciambella.
-
-Hai un caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri un pò di caffe"
-
-echo "Non hai una baguette.
-
-Hai bevuto caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Bevi il caffe"
-
-git checkout -b donut main
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Hai una ciambella." > you
-git add .
-git commit -m "Compri una ciambella"
-
-git checkout --detach main
-
-[win]
-
-# Mangi una baguette nella branch delle baguette?
-git show baguette:you | grep "Mangi.*baguette"
-
-# Bevi un caffe nella branch del caffe?
-git show coffee:you | grep "Bevi.*coffe"
-
-# Mangi una ciambella nella branch delle ciambelle?
-git show donut:you | grep "Mangi.*ciambella"
-
-[actions]
-
-test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale."
diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence
deleted file mode 100644
index 2619ea0..0000000
--- a/levels/it/branches/sequence
+++ /dev/null
@@ -1,6 +0,0 @@
-checkout-commit
-fork
-branch-create
-grow
-branch-remove
-reorder
diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase
deleted file mode 100644
index a704c80..0000000
--- a/levels/it/changing-the-past/rebase
+++ /dev/null
@@ -1,86 +0,0 @@
-title = Rebasing
-cards = checkout commit-auto reset-hard rebase
-
-[description]
-
-Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto.
-
-Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi.
-
-Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale!
-
-[setup]
-
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-
-git add .
-git commit -m "L'inizio"
-
-git checkout -b baguette main
-echo "Hai una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri una baguette"
-
-echo "Mangi una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Mangi la baguette"
-
-git checkout -b coffee main
-echo "Non hai una baguette.
-
-Hai del caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri un pò di caffe"
-
-echo "Non hai una baguette.
-
-Hai bevuto caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Bevi il caffe"
-
-git checkout -b donut main
-echo "Non hai una baguette
-
-Non hai caffe.
-
-Hai una ciamebella." > you
-git add .
-git commit -m "Compri una ciambella"
-
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Mangi una ciambella." > you
-git add .
-git commit -m "Mangi la ciambella"
-
-git checkout --detach main
-
-
-[win]
-
-# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale
-{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
-
-[congrats]
-
-Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro.
-
-E' davvero difficile *distruggere* le cose con la tua macchina del tempo.
diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder
deleted file mode 100644
index 8bbe21a..0000000
--- a/levels/it/changing-the-past/reorder
+++ /dev/null
@@ -1,77 +0,0 @@
-title = Riordinare gli eventi
-cards = checkout commit-auto reset-hard rebase-interactive cherry-pick
-
-[description]
-
-Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine?
-
-Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo.
-Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi!
-
-[setup]
-
-echo "Ti sei appena svegliato.
-
-Non indossi biancheria intima.
-
-Non indossi pantaloni.
-
-Non indossi la maglia.
-
-Non indossi le scarpe." > you
-git add .
-
-git commit -m "L'inizio"
-
-echo "Ti sei appena svegliato.
-
-Non indossi biancheria intima.
-
-Non indossi pantaloni.
-
-Non indossi la maglia.
-
-Indossi le scarpe." > you
-git commit -am "Metti le scarpe"
-
-echo "Ti sei appena svegliato.
-
-Non indossi biancheria intima.
-
-Indossi pantaloni.
-
-Non indossi la maglia.
-
-Indossi le scarpe." > you
-git commit -am "Metti i pantaloni"
-
-echo "Ti sei appena svegliato.
-
-Indossi la biancheria intima.
-
-Indossi pantaloni.
-
-Non indossi la maglia.
-
-Indossi le scarpe." > you
-git commit -am "Metti biancheria intima"
-
-echo "Ti sei appena svegliato.
-
-Indossi biancheria intima.
-
-Indossi pantaloni.
-
-Indossi la maglia.
-
-Indossi le scarpe." > you
-git commit -am "Ti metti la maglia"
-
-[win]
-
-# Riordina i commit per vestirti nel modo corretto
-{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
-
-[congrats]
-
-Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci?
diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence
deleted file mode 100644
index 43c5d08..0000000
--- a/levels/it/changing-the-past/sequence
+++ /dev/null
@@ -1,2 +0,0 @@
-rebase
-reorder
diff --git a/levels/it/files/files-add b/levels/it/files/files-add
deleted file mode 100644
index f0149b9..0000000
--- a/levels/it/files/files-add
+++ /dev/null
@@ -1,31 +0,0 @@
-title = Arredatore di interni
-cards = file-new file-delete
-
-[description]
-
-Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso,
-vedi che i loro colori corrispondono al colore del tuo letto!
-
-Costruisci i tuoi due mobili usando la carta touch.
-Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi.
-
-Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione.
-Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile.
-
-[setup]
-echo Un accogliente letto giallo. > bed
-
-[win]
-
-# Aggiungi altri due mobili
-NUM_FILES="$(ls | wc -l)"
-test "$NUM_FILES" -ge 3
-
-# Assicurati che i colori corrispondano a quelle del tuo letto
-NUM_FILES="$(ls | wc -l)"
-YELLOW_FILES="$(grep -li giallo * | wc -l)"
-test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES"
-
-[congrats]
-
-Non ti senti già più a casa?
diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete
deleted file mode 100644
index 9b207dc..0000000
--- a/levels/it/files/files-delete
+++ /dev/null
@@ -1,36 +0,0 @@
-title = Coinquilini inaspettati
-cards = file-delete
-
-[description]
-
-Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza.
-Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque!
-
-Cava tutte le ragnatele che puoi trovare con la carta remove!
-
-[cli]
-
-Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando:
-
-    rm *web
-
-[setup]
-
-echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web
-echo Una grande ragnatela attaccata sopra al tuo letto. > big_web
-echo Un letto accogliente. > bed
-echo Una ragnatela spessa è alla destra della tua porta. > thick_web
-
-[win]
-
-# Rimuovi tutte le ragnatele.
-! ls | grep thick_web &&
-! ls | grep big_web &&
-! ls | grep tiny_web
-
-# Ma assicurati di mantenere il tuo letto!
-ls | grep bed
-
-[congrats]
-
-Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige!
diff --git a/levels/it/files/sequence b/levels/it/files/sequence
deleted file mode 100644
index cb24408..0000000
--- a/levels/it/files/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-files-delete
-files-add
-
diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence#
deleted file mode 100644
index 42f7f48..0000000
--- a/levels/it/index/#sequence#
+++ /dev/null
@@ -1,5 +0,0 @@
-compare
-new
-change
-reset
-steps
diff --git a/levels/it/index/add b/levels/it/index/add
deleted file mode 100644
index e627917..0000000
--- a/levels/it/index/add
+++ /dev/null
@@ -1,38 +0,0 @@
-title = Updating files in the index
-cards = add commit checkout
-
-[description]
-
-So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version.
-
-This allows you to have smaller commits, that describe better what you changed!
-
-The command for this is the same - `git add`!
-
-[setup]
-
-echo a > a
-echo b > b
-echo c > c
-git add .
-git commit -m "Initial commit"
-
-[win]
-
-# Make changes to all files!
-test "$(cat a)" != "a" &&
-test "$(cat b)" != "b" &&
-test "$(cat c)" != "c"
-
-# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!
-
-test "$(git show main:a)" != "a" &&
-test "$(git show main:b)" != "b" &&
-test "$(git show main:c)" != "c" &&
-test "$(git show main^:a)" != "a" &&
-test "$(git show main^:b)" == "b" &&
-test "$(git show main^:c)" != "c"
-
-[congrats]
-
-Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again!
diff --git a/levels/it/index/change b/levels/it/index/change
deleted file mode 100644
index 970ffd6..0000000
--- a/levels/it/index/change
+++ /dev/null
@@ -1,31 +0,0 @@
-title = Aggiornare i file nell'indice
-cards = add commit
-
-[description]
-
-Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file..
-
-Proviamoci!
-
-Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali!
-
-[win]
-
-Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`!
-
-[setup]
-
-echo "La candela brucia con una fiamma blu." > candle
-git add .
-git commit -m "L'inizio"
-
-[win]
-
-# Fai una modifica alla candela
-test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed
-
-# Aggiungi la candella.
-test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
-
-# Fai un commit.
-test "$(git diff --name-only HEAD HEAD^)" = "candle"
diff --git a/levels/it/index/checkout b/levels/it/index/checkout
deleted file mode 100644
index 3c01b09..0000000
--- a/levels/it/index/checkout
+++ /dev/null
@@ -1,25 +0,0 @@
-title = Checking out files from the index
-cards = add reset-file checkout-file commit
-
-[description]
-
-So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that!
-
-What happens if you have already update the index, like in file c? You have to reset the index first!
-
-[setup]
-
-echo a > a
-echo b > b
-echo c > c
-git add .
-git commit -m "Initial commit"
-echo x > a
-echo x > b
-echo x > c
-git add c
-
-[win]
-
-# Remove all changes in your local files!
-test "$(git diff --name-only | wc -l)" -eq 0
diff --git a/levels/it/index/compare b/levels/it/index/compare
deleted file mode 100644
index 557b654..0000000
--- a/levels/it/index/compare
+++ /dev/null
@@ -1,51 +0,0 @@
-title = Passo dopo passo
-cards = checkout commit-auto
-
-[description]
-
-Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione!
-
-Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo.
-
-[win]
-
-# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo!
-git branch --show-current | grep step-by-step
-
-[setup]
-
-echo "Una piccola ma pesante palla di vetro." > ball
-echo "Un sottile libro che sta in piedi." > book
-echo "Una candela brucia con una fiamma blu." > candle
-echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector
-
-git add .
-git commit -m "L'inizio"
-
-git branch -M all-at-once
-
-echo "La palla adesso tocca il libro." > ball
-echo "Il libro è caduto." > book
-echo "La candella è stata spenta." > candle
-
-git commit -am "La fine"
-
-git checkout HEAD^
-
-git checkout -b step-by-step
-
-echo "La palla adesso tocca il libro." > ball
-git commit -am "La palla rotola verso il libro"
-
-echo "Il libro è caduto." > book
-git commit -am "Il libro è caduto"
-
-echo "La candela è stata spenta." > candle
-git commit -am "Il libro ha spento la candela"
-
-git checkout HEAD~3
-
-[win]
-
-# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo!
-git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso"
diff --git a/levels/it/index/new b/levels/it/index/new
deleted file mode 100644
index 4ce39ec..0000000
--- a/levels/it/index/new
+++ /dev/null
@@ -1,28 +0,0 @@
-title = Aggiungere nuovi file all'indice
-cards = add commit
-
-[description]
-
-Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero?
-
-Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit!
-
-Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager!
-
-Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo!
-
-[cli]
-
-Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo!
-
-[setup]
-
-echo "La candela brucia con una fiamma blu." > candle
-
-[win]
-
-# Aggiungi la candela.
-test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
-
-# Crea un commit.
-test "$(git ls-tree --name-only HEAD)" = "candle"
diff --git a/levels/it/index/reset b/levels/it/index/reset
deleted file mode 100644
index fd118fd..0000000
--- a/levels/it/index/reset
+++ /dev/null
@@ -1,37 +0,0 @@
-title = Resettare i file nell'indice
-cards = add reset-file commit
-
-[description]
-
-Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit!
-
-Per esempio, queste candele sono state spente e quella modifica è stata aggiunta!
-
-Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit!
-
-Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`!
-
-[setup]
-
-echo "Sta bruciando!" > red_candle
-echo "Sta bruciando!" > green_candle
-echo "Sta bruciando!" > blue_candle
-git add .
-git commit -m "L'inizio"
-
-echo "È stata spenta." > red_candle
-echo "È stata spenta." > green_candle
-echo "È stata spenta." > blue_candle
-git add .
-
-[win]
-
-# Ripristina i cambiamenti nella candela verde e in quella blu!
-git show :green_candle | grep burning &&
-git show :blue_candle | grep burning &&
-git show :red_candle | grep -v burning
-
-# E fai un commit
-git show main:green_candle | grep burning &&
-git show main:blue_candle | grep burning &&
-git show main:red_candle | grep -v burning
diff --git a/levels/it/index/rm b/levels/it/index/rm
deleted file mode 100644
index 637fd22..0000000
--- a/levels/it/index/rm
+++ /dev/null
@@ -1,24 +0,0 @@
-title = Delete a file in the next commit
-cards = add reset-file checkout-file rm file-delete commit
-
-[description]
-
-If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index.
-
-If a file is modified, you'll need to reset these changes first/reset the files.
-
-[setup]
-
-echo a > a
-echo x > b
-echo x > c
-git add .
-git commit -m "Initial commit"
-echo x > a
-echo b > b
-git add b
-
-[win]
-
-# Make a commit where all files are deleted ¯\_(^_^)_/¯
-test "$(git ls-tree main | wc -l)" -eq 0
diff --git a/levels/it/index/sequence b/levels/it/index/sequence
deleted file mode 100644
index 42f7f48..0000000
--- a/levels/it/index/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-compare
-new
-change
-reset
-steps
diff --git a/levels/it/index/steps b/levels/it/index/steps
deleted file mode 100644
index 8c13af7..0000000
--- a/levels/it/index/steps
+++ /dev/null
@@ -1,53 +0,0 @@
-title = Aggiungere le modifice una per volta
-cards = add reset-file commit
-
-[description]
-
-L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit!
-
-[setup]
-
-echo "Un martello, in equilibrio sul suo manico." > hammer
-echo "Una bottiglia contenente un liquido trasparente." > bottle
-echo "Un cubetto di zucchero bianco." > sugar_cube
-
-git add .
-git commit -m "L'inizio"
-
-[win]
-
-# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi!
-test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed
-
-# Aggiungi solo uno dei cambiamenti!
-test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added
-
-# E fai un commit
-COUNT=0
-for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
-    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
-        COUNT=$((COUNT+1))
-    fi
-done
-
-test "$COUNT" -ge 1
-
-# Fai un secondo commit che registri solo un singolo cambiamento.
-COUNT=0
-for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
-    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
-        COUNT=$((COUNT+1))
-    fi
-done
-
-test "$COUNT" -ge 2
-
-# E aggiungine un terzo.
-COUNT=0
-for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
-    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
-        COUNT=$((COUNT+1))
-    fi
-done
-
-test "$COUNT" -ge 3
diff --git a/levels/it/intro/cli b/levels/it/intro/cli
deleted file mode 100644
index c643fc1..0000000
--- a/levels/it/intro/cli
+++ /dev/null
@@ -1,27 +0,0 @@
-title = La line di comando
-cards = 
-
-[description]
-
-Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git!
-
-[cli]
-
-Ma c'è un'altra via per interagire con Git:
-
-Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter!
-
-[setup]
-
-rm -rf .git
-
-[win]
-
-# Inizializza la macchina del tempo!
-test -d .git
-
-[congrats]
-
-Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando!
-
-La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica.
diff --git a/levels/it/intro/commit b/levels/it/intro/commit
deleted file mode 100644
index 1141ae1..0000000
--- a/levels/it/intro/commit
+++ /dev/null
@@ -1,32 +0,0 @@
-title = Il tuo primo commit!
-cards = commit-auto
-
-[description]
-
-Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica!
-
-(Il tuo insegnante versa un pò di acqua nel bicchiere)
-
-[cli]
-Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! 
-
-Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :)
-
-[setup]
-
-echo "Il bicchiere è pieno di acqua." > glass
-
-[win]
-
-# Crea un'istantanea del bicchiere (un "commit")
-git rev-parse HEAD
-
-# Cambia il contenuto del bicchiere!
-! test "$(cat glass)" = "Il bicchiere è pieno di acqua."
-
-# E crea un secondo "commit"!
-git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua."
-
-[congrats]
-
-Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level".
diff --git a/levels/it/intro/copies b/levels/it/intro/copies
deleted file mode 100644
index 8f8d6ce..0000000
--- a/levels/it/intro/copies
+++ /dev/null
@@ -1,42 +0,0 @@
-title = Crea una copia
-cards =
-
-[description]
-
-Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra!
-
-[congrats]
-
-Okay, questo è un modo di lavorare.
-
-Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo.
-
-Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale.
-
-Fermati, devi provare questa macchina del tempo!
-
-[setup]
-
-rm -rf .git
-
-echo "~ Perchè voglio imparare Git ~
-
-(Devo ancora scriverlo.)" >> form.txt
-
-
-echo "~ Perchè volgio imparare Git ~
-
-- Così posso annullare gli errori" >> form2.txt
-
-
-echo "~ Perchè volgio imparare Git ~
-
-- Così posso annullare gli errori
-- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt
-
-cp form2_final.txt form2_really_final.txt
-
-[win]
-
-# Aggiungi una nuova line al file form2_really_final.txt!
-test "$(cat form2_really_final.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/init b/levels/it/intro/init
deleted file mode 100644
index 260f6e9..0000000
--- a/levels/it/intro/init
+++ /dev/null
@@ -1,24 +0,0 @@
-title = Entra nella machina del tempo
-cards = init
-
-[description]
-
-Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega:
-
-"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!"
-
-Trascina quella carta blu verso l'alto per usarla!
-
-[setup]
-
-rm -rf .git
-
-[win]
-
-# Inizializzazione della macchina del tempo
-test -d .git
-
-[congrats]
-
-Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo!
-
diff --git a/levels/it/intro/remote b/levels/it/intro/remote
deleted file mode 100644
index c0b582a..0000000
--- a/levels/it/intro/remote
+++ /dev/null
@@ -1,52 +0,0 @@
-title = Dai lavoriamo tutti assieme
-cards = pull commit-auto push
-
-[description]
-
-Aggiungi il tuo nome nella nostra lista di studenti!
-
-Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme!
-
-[cli]
-
-Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni.
-
-[congrats]
-
-Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione!
-
-[setup]
-
-echo "~ Lista degli attuali studenti ~" > students
-git add .
-git commit -m "Versione iniziale"
-git push -u teacher main
-
-git update-ref -d refs/remotes/teacher/main
-
-[setup teacher]
-
-git reset --hard main
-
-echo " 
-- Sam
-- Alex" >> students
-
-git add .
-git commit -m "Aggiunti due studenti"
-
-[win]
-
-# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`.
-test "$(git log --oneline teacher/main | wc -l)" -ge 2
-
-# Aggiungi il tuo nome alla lista degli studenti.
-test "$(cat students |wc -l)" -ge 5
-
-# Crea un'istantanea dei risultati.
-test "$(git show main:students |wc -l)" -ge 5
-
-[win teacher]
-
-# E usa `git push` per inviarlo al tuo insegnante!
-test "$(git show main:students |wc -l)" -ge 5
diff --git a/levels/it/intro/risky b/levels/it/intro/risky
deleted file mode 100644
index 57a52d1..0000000
--- a/levels/it/intro/risky
+++ /dev/null
@@ -1,42 +0,0 @@
-title = Vivere è pericoloso
-cards =
-
-[description]
-
-Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"!
-
-Che emozione!
-
-Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git.
-
-[congrats]
-
-All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato!
-
-Devi trovare una buona soluzione.
-
-(Premi "Prossimo livello" appena sei pronto!)
-
-[setup]
-
-rm -rf .git
-
-echo "~ Perchè voglio imparare Git ~
-
-- Così posso cancellare gli errori
-- Per seguire il mio progetto attraverso il tempo" >> form.txt
-
-[actions]
-
-test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.)
-
-
-
-
-
-" > form.txt
-
-[win]
-
-# Aggiungi un'altra line a form.txt!
-test "$(cat form.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence
deleted file mode 100644
index aa225df..0000000
--- a/levels/it/intro/sequence
+++ /dev/null
@@ -1,6 +0,0 @@
-risky
-copies
-init
-cli
-commit
-remote
diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you
deleted file mode 100644
index abb94f3..0000000
--- a/levels/it/intro/who-are-you
+++ /dev/null
@@ -1,38 +0,0 @@
-title = Benvenuto nella scuola del viaggio nel tempo!
-cards = config-name commit-auto checkout
-
-[description]
-
-Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo!
-
-Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?"
-
-[setup]
-
-git config --global user.name "TU"
-
-echo "~ Chi vuole imparare come si usa la macchina del tempo? ~
-
-[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro.
-[ ] Così non devo tenere copie di tutti i miei saggi.
-[ ] Per collaborare con altri studenti del viaggio nel tempo.
-[ ] Altro, perfavore specifica:" > form
-
-[actions]
-
-test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo "
-Firma: $(git config user.name)" >> form
-
-[win]
-
-# Presentati.
-test "$(git config user.name)" != "TU"
-
-# Compila l'iscrizione e inviala!
-git show main:form | grep '\[[xX]\]'
-
-[congrats]
-
-"Siamo lieti di averti con noi!
-
-Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!"
diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics
deleted file mode 100644
index 55374b5..0000000
--- a/levels/it/low-level/basics
+++ /dev/null
@@ -1,26 +0,0 @@
-[description]
-
-For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:
-
-- ls
-- echo content > file
-- cat file
-- mkdir dir
-
-Find the riddle in your current directory and put the answer into the file "answer"!
-
-[congrats]
-
-Omnomnom!
-
-For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :)
-
-[setup]
-
-mkdir riddle
-echo "ppl p" > riddle/consonants
-echo "ae ie" > riddle/vowels
-
-[win]
-
-cat answer | grep -i "apple \\?pie"
diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create
deleted file mode 100644
index 86f6254..0000000
--- a/levels/it/low-level/blob-create
+++ /dev/null
@@ -1,38 +0,0 @@
-[description]
-
-At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID).
-
-There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text.
-
-Let's create some blobs! To do that, create a file with the desired content, and then use
-
-    git hash-object -w <file>
-
-The flag -w means "write", and tells Git to actually write the new blob to the disk.
-
-Create three new blobs!
-
-[congrats]
-
-Tip: You can also use a command like this to create a blob in a single line:
-
-    echo "awesome content" | git hash-object -w --stdin
-
-Did you already notice that you can drag and drop all objects? :)
-
-[setup]
-
-[setup goal]
-
-echo "Hi" > file1
-echo "Ho" > file2
-echo "Hu" > file3
-git hash-object -w file1
-git hash-object -w file2
-git hash-object -w file3
-
-[win]
-
-BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l)
-
-test "$BLOB_COUNT" -gt 2
diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove
deleted file mode 100644
index bbc1b30..0000000
--- a/levels/it/low-level/blob-remove
+++ /dev/null
@@ -1,27 +0,0 @@
-[description]
-
-There's a simple command to remove all objects that are not referenced by anything:
-
-    git prune
-
-Remove all blobs in this repository.
-
-[congrats]
-
-Generally, `git prune` will be useful if you want to clean up some objects you made.
-
-Alternatively, you can also click the "Reload" button to restart a level.
-
-[setup]
-
-echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin
-echo "This blob really should not exist" | git hash-object -w --stdin
-echo "This is a virus" | git hash-object -w --stdin
-
-[setup goal]
-
-[win]
-
-OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l)
-
-test "$OBJECT_COUNT" -eq 0
diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create
deleted file mode 100644
index 79a8e52..0000000
--- a/levels/it/low-level/commit-create
+++ /dev/null
@@ -1,37 +0,0 @@
-[description]
-
-So a tree describes a directory structure at a specific point in time.
-
-It would be nice if we could remember when that state existed, and who authored it, right?
-
-Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using
-
-    git commit-tree <tree> -m "Description of your commit"
-
-Make a commit from the tree in this repository!
-
-[setup]
-
-touch empty_file
-git add .
-git write-tree
-
-rm empty_file
-git update-index --remove empty_file
-
-[setup goal]
-
-touch empty_file
-git add .
-git write-tree
-
-rm empty_file
-git update-index --remove empty_file
-
-git commit-tree 3185 -m 'Clever commit message'
-
-[win]
-
-COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l)
-
-test "$COMMIT_COUNT" -gt 0
diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents
deleted file mode 100644
index a2efb11..0000000
--- a/levels/it/low-level/commit-parents
+++ /dev/null
@@ -1,31 +0,0 @@
-[description]
-
-When using the commit-tree command, you can optionally specify a parent:
-
-    git commit-tree <tree> -m "Description" -p <parent commit>
-
-Make a string of three commits!
-
-Hint: You'll need a tree object. What could be the easiest way to obtain one?
-
-[setup]
-
-[setup goal]
-
-git write-tree
-FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O')
-SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D')
-THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/')
-
-[win]
-
-COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
-
-for COMMIT in $COMMITS; do
-    echo a commit named $COMMIT
-    if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then
-        return 0
-    fi
-done
-
-return 1
diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus
deleted file mode 100644
index e320ca0..0000000
--- a/levels/it/low-level/commit-rhombus
+++ /dev/null
@@ -1,30 +0,0 @@
-[description]
-
-A commit can have multiple parents! You can specify the -p option multiple times, like this:
-
-    git commit-tree <tree> -m "Description" -p <parent1> -p <parent2>
-
-Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them.
-
-[setup]
-
-[setup goal]
-
-TREE=$(git write-tree)
-SOUTH=$(git commit-tree $TREE -m "South")
-EAST=$(git commit-tree $TREE -m "East" -p $SOUTH)
-WEST=$(git commit-tree $TREE -m "West" -p $SOUTH)
-NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST)
-
-[win]
-
-COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
-
-for COMMIT in $COMMITS; do
-    # My first parent's parents has to be the same as my second parent's parent.
-    if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then
-        return 0
-    fi
-done
-
-return 1
diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add
deleted file mode 100644
index 633245c..0000000
--- a/levels/it/low-level/index-add
+++ /dev/null
@@ -1,37 +0,0 @@
-[description]
-
-Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!
-
-Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions.
-
-The most convenient option to add an entry to the index is via an existing file:
-
-    echo "my content" > file
-    git update-index --add file
-
-Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"?
-
-[congrats]
-
-There's another way to add an entry to the index directly:
-
-    git update-index --add --cacheinfo <mode>,<blobhash>,<name>
-
-The first three numbers of the mode describe the type of the entry, "100" is a regular file.
-
-The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported.
-
-You can insert the hash of an object into the terminal by right-clicking on it! :)
-
-[setup]
-
-[setup goal]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-[win]
-
-test "$(git ls-files | wc -l)" -ge 3
diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove
deleted file mode 100644
index 9816126..0000000
--- a/levels/it/low-level/index-remove
+++ /dev/null
@@ -1,29 +0,0 @@
-[description]
-
-To remove an entry from the index, use a command like this:
-
-    git update-index --force-remove <file>
-
-Remove all entries from the index!
-
-[setup]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-[setup goal]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-git update-index --force-remove file1
-git update-index --force-remove file2
-git update-index --force-remove file3
-
-[win]
-
-test "$(git ls-files | wc -l)" -eq 0
diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update
deleted file mode 100644
index 047493d..0000000
--- a/levels/it/low-level/index-update
+++ /dev/null
@@ -1,33 +0,0 @@
-[description]
-
-Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!
-
-Put the content you want in a file with a matching name, and then run
-
-    git update-index <file>
-
-This will create a new blob, and update the hash of the entry to that blob.
-
-Update an entry in the index!
-
-[setup]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-[setup goal]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-echo "new content" > file1
-git update-index file1
-
-[win]
-
-# This is not really a good test for the winning condition...
-test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3
diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse
deleted file mode 100644
index 119784d..0000000
--- a/levels/it/low-level/puzzle-apocalypse
+++ /dev/null
@@ -1,41 +0,0 @@
-[description]
-
-Delete all objects in this repository using git commands only!
-
-Useful commands:
-
-    git prune
-    git reflog expire
-
-[setup]
-
-echo foo > foo
-BLOB=$(git hash-object -w foo)
-echo bar > bar
-git add .
-git commit -m "Initial commit"
-echo blabber >> bar
-git commit -a -m "Second commit"
-git update-ref refs/important HEAD
-git update-ref refs/interesting "$BLOB"
-
-[setup goal]
-
-echo foo > foo
-BLOB=$(git hash-object -w foo)
-echo bar > bar
-git add .
-git commit -m "Initial commit"
-echo blabber >> bar
-git commit -a -m "Second commit"
-git update-ref refs/important HEAD
-git update-ref refs/interesting "$BLOB"
-
-TREE=$(git mktree)
-git read-tree $TREE
-rm -rf .git/refs/*
-rm -rf .git/objects/*
-
-[win]
-
-test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0
diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob
deleted file mode 100644
index 865cfdf..0000000
--- a/levels/it/low-level/puzzle-precious-blob
+++ /dev/null
@@ -1,28 +0,0 @@
-[description]
-
-Create two trees pointing to the same blob!
-
-[setup]
-
-[setup goal]
-
-BLOB=$(echo "I am precious" | git hash-object -w --stdin)
-git update-index --add --cacheinfo 100644,$BLOB,a
-git write-tree
-git update-index --force-remove a
-git update-index --add --cacheinfo 100644,$BLOB,b
-git write-tree
-git update-index --force-remove b
-
-[win]
-
-TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
-
-ALL_TREE_CHILDREN=$(for TREE in $TREES; do
-    git cat-file -p $TREE | cut -f1 | cut -f3 -d" "
-done)
-
-NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l)
-UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l)
-
-test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN"
diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down
deleted file mode 100644
index bc3e58a..0000000
--- a/levels/it/low-level/puzzle-trees-all-the-way-down
+++ /dev/null
@@ -1,34 +0,0 @@
-[description]
-
-Construct a chain of three trees, which don't point to anything else.
-
-This is hard! The `git mktree` command might be useful.
-
-[setup]
-
-[setup goal]
-
-git mktree
-TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree)
-echo -e "040000 tree $TREE\tdir" | git mktree
-
-[win]
-
-TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
-
-for TREE in $TREES; do
-    if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then
-        if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
-            # So the tree has exactly one child, and it is a tree!
-            TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ")
-            if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then
-                if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
-                    # Same for its child! \o/
-                    return 0
-                fi
-            fi
-        fi
-    fi
-done
-
-return 1
diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create
deleted file mode 100644
index 1cc4bcf..0000000
--- a/levels/it/low-level/ref-create
+++ /dev/null
@@ -1,42 +0,0 @@
-[description]
-
-Let's take a look at "refs" (short for "references")! Refs are not objects, but rather very simple *pointers* to objects! They can help you keep track of what's where.
-
-You can create or update a ref with
-
-    git update-ref refs/<refname> <newvalue>
-
-Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref.
-
-Create refs that point to all objects in this repository!
-
-[setup]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-[setup goal]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-git update-ref refs/a $BLOB1
-git update-ref refs/b $BLOB2
-git update-ref refs/c $TREE
-git update-ref refs/d $COMMIT
-
-[win]
-
-OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort)
-REF_TARGETS=$(git show-ref -s | sort | uniq)
-test "$OBJECTS" = "$REF_TARGETS"
diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move
deleted file mode 100644
index e3b29e3..0000000
--- a/levels/it/low-level/ref-move
+++ /dev/null
@@ -1,41 +0,0 @@
-[description]
-
-You can point refs to a new location using the same command you use to create them:
-
-    git update-ref refs/<refname> <object>
-
-As an exercise, make all refs in this repository point to the tree object!
-
-[setup]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-git update-ref refs/a "$BLOB1"
-git update-ref refs/b "$COMMIT"
-
-[setup goal]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-git update-ref refs/a "$BLOB1"
-git update-ref refs/b "$COMMIT"
-
-for REF in $(git for-each-ref --format='%(refname)'); do
-    git update-ref "$REF" "$TREE"
-done
-
-[win]
-
-test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e"
diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove
deleted file mode 100644
index d1fa982..0000000
--- a/levels/it/low-level/ref-remove
+++ /dev/null
@@ -1,41 +0,0 @@
-[description]
-
-And finally, to delete a ref, use
-
-    git update-ref -d refs/<refname>
-
-Delete all refs! :P (Well, except for HEAD. HEAD is special.)
-
-[setup]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-git update-ref refs/best_blob_ever "$BLOB1"
-git update-ref refs/beautiful_commit "$COMMIT"
-
-[setup goal]
-
-echo hello > hello
-echo world > world
-BLOB1=$(git hash-object -w hello)
-BLOB2=$(git hash-object -w world)
-git add .
-TREE=$(git write-tree)
-COMMIT=$(git commit-tree $TREE -m "Initial commit")
-
-git update-ref refs/best_blob_ever "$BLOB1"
-git update-ref refs/beautiful_commit "$COMMIT"
-
-for REF in $(git for-each-ref --format='%(refname)'); do
-    git update-ref -d "$REF"
-done
-
-[win]
-
-test "$(git show-ref | wc -l)" -eq 0
diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence
deleted file mode 100644
index 5feb0c8..0000000
--- a/levels/it/low-level/sequence
+++ /dev/null
@@ -1,18 +0,0 @@
-welcome
-basics
-blob-create
-blob-remove
-index-add
-index-remove
-index-update
-tree-create
-tree-read
-tree-nested
-commit-create
-commit-parents
-commit-rhombus
-ref-create
-ref-move
-ref-remove
-symref-create
-symref-no-deref
diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create
deleted file mode 100644
index da933cb..0000000
--- a/levels/it/low-level/symref-create
+++ /dev/null
@@ -1,21 +0,0 @@
-[description]
-
-Instead of pointing directly to objects, refs can also point to other refs!
-
-When that happens, they are called "symbolic refs". You can create or update a symbolic ref using
-
-    git symbolic-ref <name> <ref>
-
-Create a symbolic ref called "refs/rainbow"!
-
-[setup]
-
-[setup goal]
-
-BLOB=$(git hash-object -w --stdin)
-git update-ref refs/double "$BLOB"
-git symbolic-ref refs/rainbow refs/double
-
-[win]
-
-git symbolic-ref refs/rainbow
diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref
deleted file mode 100644
index 458e669..0000000
--- a/levels/it/low-level/symref-no-deref
+++ /dev/null
@@ -1,46 +0,0 @@
-[description]
-
-When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :)
-
-What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`?
-
-Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`!
-
-Weird, huh?
-
-[congrats]
-
-Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!
-
-You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)
-
-Everything else is just convention and high-level commands that make interacting with the objects more convenient.
-
-We haven't covered:
-
-- tag objects (they are the fourth object type - a bit like refs with a description and an author)
-- configuration (allows you to specify remote repositories, for example)
-- working with local files (which is, uh, arguably pretty important :P)
-
-Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced!
-
-[setup]
-
-BLOB1=$(echo delicious | git hash-object -w --stdin)
-BLOB2=$(echo very | git hash-object -w --stdin)
-git update-ref refs/curly "$BLOB1"
-git symbolic-ref refs/fries refs/curly
-
-[setup goal]
-
-BLOB1=$(echo delicious | git hash-object -w --stdin)
-BLOB2=$(echo very | git hash-object -w --stdin)
-git update-ref refs/curly "$BLOB1"
-git symbolic-ref refs/fries refs/curly
-
-git update-ref --no-deref refs/fries "$BLOB2"
-
-[win]
-
-git symbolic-ref refs/fries && return 1
-test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6"
diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create
deleted file mode 100644
index 3da3618..0000000
--- a/levels/it/low-level/tree-create
+++ /dev/null
@@ -1,35 +0,0 @@
-[description]
-
-After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?
-
-This is what the second type of objects is for: trees! You can convert the index into a tree using
-
-    git write-tree
-
-Try it! :)
-
-[congrats]
-
-Nice!
-
-Can you make a different tree? Modify the index, then call `git write-tree` again!
-
-[setup]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-[setup goal]
-
-echo "file 1" > file1
-echo "file 2" > file2
-echo "file 3" > file3
-git add .
-
-git write-tree
-
-[win]
-
-git cat-file -p 21a638f28022064c1f1df20844278b494d197979
diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested
deleted file mode 100644
index c7afce8..0000000
--- a/levels/it/low-level/tree-nested
+++ /dev/null
@@ -1,38 +0,0 @@
-[description]
-
-Trees can also point to other trees! This way, they can describe nested directory structures.
-
-When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it.
-
-To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs.
-
-[setup]
-
-[setup goal]
-
-echo "I'm the left arm" > arm1
-echo "I'm the right arm" > arm2
-mkdir hip
-echo "I'm the left leg" > hip/leg1
-echo "I'm the right leg" > hip/leg2
-git add .
-git write-tree
-
-[win]
-
-TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
-
-for OUTER_TREE in $TREES; do
-    NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l)
-    NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l)
-
-    if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then
-        TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3)
-        NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l)
-        if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then
-            return 0
-        fi
-    fi
-done
-
-return 1
diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read
deleted file mode 100644
index ba8c440..0000000
--- a/levels/it/low-level/tree-read
+++ /dev/null
@@ -1,51 +0,0 @@
-[description]
-
-As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called
-
-    git read-tree <tree>
-
-For <tree>, you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!
-
-Try reading some of the trees in this repository into the index!
-
-[setup]
-
-EMPTY_TREE=$(git write-tree)
-
-echo "file 1" > file1
-echo "file 2" > file2
-git add .
-git write-tree
-
-rm *
-echo "file A" > fileA
-echo "file B" > fileB
-echo "file C" > fileC
-git add .
-TRIPLE_TREE=$(git write-tree)
-
-git read-tree "$EMPTY_TREE"
-
-[setup goal]
-
-EMPTY_TREE=$(git write-tree)
-
-echo "file 1" > file1
-echo "file 2" > file2
-git add .
-git write-tree
-
-rm *
-echo "file A" > fileA
-echo "file B" > fileB
-echo "file C" > fileC
-git add .
-TRIPLE_TREE=$(git write-tree)
-
-git read-tree "$EMPTY_TREE"
-
-git read-tree "$TRIPLE_TREE"
-
-[win]
-
-test "$(git ls-files | wc -l)" -gt 0
diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome
deleted file mode 100644
index d669136..0000000
--- a/levels/it/low-level/welcome
+++ /dev/null
@@ -1,33 +0,0 @@
-[description]
-
-This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3
-
-You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status.
-
-Let's get started by initializing an empty Git repository in the current directory by typing:
-
-    git init
-
-[congrats]
-
-Well done!
-
-An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later!
-
-But first, let's look at some basics!
-
-(Click "Next Level" as soon as you're ready!)
-
-[setup]
-
-rm -rf .git
-
-[setup goal]
-
-rm -rf .git
-
-git init
-
-[win]
-
-test -d .git
diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict
deleted file mode 100644
index 645b5ed..0000000
--- a/levels/it/merge/conflict
+++ /dev/null
@@ -1,47 +0,0 @@
-title = Contraddizioni
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-A volte le linee temporali si contraddicono a vicenda.
-
-Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali.
-
-Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione!
-
-La tua linea temporale definitiva è "main".
-
-[setup]
-
-echo "Si è appena svegliato. È affamato." > sam
-git add .
-git commit -m "L'inizio"
-
-git checkout -b pancakes
-echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam
-git add .
-git commit -m "Pancakes!"
-
-echo "
-È al lavoro." >> sam
-git commit -am "Va al lavoro"
-
-git checkout -b muesli main
-echo "Ha fatto colazione con muesli all'avena e fragole." > sam
-git add .
-git commit -m "Muesli!"
-
-echo "
-È al lavoro." >> sam
-git commit -am "Va al lavoro"
-
-git checkout main
-
-[win]
-
-# Crea un compromesso tra le due colazioni nel branch "main".
-git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)"
-
-[congrats]
-
-Yum, questa sembra una buona colazione!
diff --git a/levels/it/merge/merge b/levels/it/merge/merge
deleted file mode 100644
index 9050cb7..0000000
--- a/levels/it/merge/merge
+++ /dev/null
@@ -1,82 +0,0 @@
-title = Unire le linee temporali
-cards = checkout commit-auto merge
-
-[description]
-
-Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile!
-
-[setup]
-
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-
-git add .
-git commit -m "L'inizio"
-
-echo "Hai una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri una baguette"
-
-echo "Mangi una baguette.
-
-Non hai caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Mangi la baguette"
-
-git checkout HEAD~2
-echo "Non hai una baguette.
-
-Hai caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Compri un pò di caffe"
-
-echo "Non hai una baguette.
-
-Bevi il caffe.
-
-Non hai una ciambella." > you
-git add .
-git commit -m "Bevi il caffe"
-
-git checkout HEAD~2
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Hai una ciambella." > you
-git add .
-git commit -m "Compri una ciambella"
-
-echo "Non hai una baguette.
-
-Non hai caffe.
-
-Mangi una ciambella." > you
-git add .
-git commit -m "Mangi la ciambella"
-
-git checkout --detach
-git branch -D main
-
-[win]
-
-# Crea una situazione dove consumi una baguette, un caffe e una ciambella.
-{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; }
-
-# Crea (e spostati su) un commit di unione.
-test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
-
-[congrats]
-
-Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele...
diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort
deleted file mode 100644
index efabb5d..0000000
--- a/levels/it/merge/merge-abort
+++ /dev/null
@@ -1,54 +0,0 @@
-title = Interrompere un merge
-cards = checkout commit-auto merge merge-abort
-
-[description]
-
-Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. 
-
-In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa
-    git merge --abort
-mentre sei nel processo di merge.
-
-Prova a unire i due commit e interrompi la procedura di merge.
-
-[setup]
-
-echo "Un nuovo giorno sta iniziando" > you
-
-git add .
-git commit -m "Start"
-
-echo "Stai camminando sulla corsia principale." >> you
-
-git add .
-git commit -m "Corsia Principale"
-
-
-git checkout HEAD~1
-
-echo "Stai camminando sulla corsia laterale." >> you
-
-git add .
-git commit -m "Corsia laterale"
-
-git checkout HEAD~1
-
-git branch -D main
-
-[actions]
-
-if test -f .git/MERGE_HEAD; then
-    touch .git/secretfile
-fi
-
-[win]
-
-# Hai provato a fare il merge?
-test -f .git/secretfile
-
-# Hai interrotto il merge?
-test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^
-
-[congrats]
-
-Aaah, faremo il merge più tardi...
diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence
deleted file mode 100644
index 2e1aa81..0000000
--- a/levels/it/merge/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-merge
-conflict
-merge-abort
\ No newline at end of file
diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend
deleted file mode 100644
index c6f46c8..0000000
--- a/levels/it/remotes/friend
+++ /dev/null
@@ -1,47 +0,0 @@
-title = Amici
-cards = pull push commit-auto checkout
-
-[description]
-
-Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo!
-
-Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee!
-
-[setup yours]
-
-echo "Linea 1" > essay
-git add .
-git commit -m "Una linea"
-
-git push -u friend main
-
-[setup friend]
-
-git checkout main
-echo "Linea 2, gnihihi" >> essay
-git commit -am "Un'altra linea"
-
-[actions friend]
-
-if test "$(git log --oneline | wc -l)" -eq 3; then
-    git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico
-    echo "Linea 4, blurbblubb" >> essay
-    git commit -am "Linea finale"
-    hint "Oh bene, Ho aggiunto la quarta linea!"
-fi
-
-[win]
-
-# Ricevuto la seconda linea dal tuo amico.
-git show HEAD:essay | grep gnihihi
-
-# Ricevuto la quarta linea dal tuo amico.
-git show HEAD:essay | grep blurbblubb
-
-[win friend]
-
-# L'amico ha ricevuto la terza linea da te.
-test "$(git show HEAD:essay | wc -l)" -ge 3
-
-# L'amico ha ricevuto la quinta linea da te.
-test "$(git show HEAD:essay | wc -l)" -ge 5
diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems
deleted file mode 100644
index 764a6fc..0000000
--- a/levels/it/remotes/problems
+++ /dev/null
@@ -1,33 +0,0 @@
-title = Problemi
-cards = checkout add pull push commit-auto merge
-
-[description]
-
-Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare!
-
-[setup yours]
-
-echo "Il capannone delle bici dovrebbe essere ???" > file
-git add .
-git commit -m "inizio"
-
-git push -u friend main
-
-echo "Il capannone delle bici dovrebbe essere verde" > file
-
-[setup friend]
-
-git checkout main
-
-echo "Il capannone delle bici dovrebbe essere blu" > file
-git commit -a -m "versione dell'amico"
-
-[win]
-
-# Fai il commit delle tue modifiche locali.
-test "$(git status -s)" = ""
-
-[win friend]
-
-# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro.
-git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)"
diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence
deleted file mode 100644
index 13c5715..0000000
--- a/levels/it/remotes/sequence
+++ /dev/null
@@ -1,2 +0,0 @@
-friend
-problems
diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty
deleted file mode 100644
index 1f954a5..0000000
--- a/levels/it/sandbox/empty
+++ /dev/null
@@ -1,7 +0,0 @@
-title = Empty sandbox
-
-[description]
-
-This is an empty sandbox you can play around in.
-
-[setup]
diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote
deleted file mode 100644
index f0ca2c0..0000000
--- a/levels/it/sandbox/remote
+++ /dev/null
@@ -1,22 +0,0 @@
-title = Sandbox with a remote
-cards = checkout commit-auto pull fetch push
-
-[description]
-
-Here's a sandbox with a remote! Try pulling, fetching, or pushing!
-
-How can you push tags and branches on a remote? How can you delete them again?
-
-[setup yours]
-
-echo "Line 1" > essay
-git add .
-git commit -m "Initial commit"
-
-git push -u friend main
-
-[setup friend]
-
-git checkout main
-echo "Line 2" >> essay
-git commit -am "Another line"
diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence
deleted file mode 100644
index 29aa91f..0000000
--- a/levels/it/sandbox/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-empty
-remote
-three-commits
diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits
deleted file mode 100644
index 3e5308c..0000000
--- a/levels/it/sandbox/three-commits
+++ /dev/null
@@ -1,26 +0,0 @@
-title = Sandbox with three commits
-cards = checkout add reset-file checkout-file commit merge rebase
-
-[setup]
-
-echo "You wake up." > you
-git add .
-git commit -m "The beginning"
-
-echo "You drink coffee." >> you
-git commit -am "First things first"
-
-echo "You hear a knock on the door." >> you
-git commit -am "Who's there?"
-
-git branch not_main
-
-[description]
-
-Here's a sandbox you can play around in.
-
-You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:
-
-- Make a commit that merges three timelines together at once!
-- Create and delete some tags!
-- Make a timeline that's completely independent of the rest!
diff --git a/levels/it/sequence b/levels/it/sequence
deleted file mode 100644
index cefcd7a..0000000
--- a/levels/it/sequence
+++ /dev/null
@@ -1,13 +0,0 @@
-intro
-files
-branches
-merge
-index
-remotes
-changing-the-past
-shit-happens
-workflows
-bisect
-stash
-tags
-sandbox
diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit
deleted file mode 100644
index 0febbc2..0000000
--- a/levels/it/shit-happens/bad-commit
+++ /dev/null
@@ -1,31 +0,0 @@
-title = Annullare un cattivo commit
-cards = reset commit-a
-
-[description]
-
-Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare?
-
-La risposta è usare `git reset [commit]` che fa due cose:
-
-- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato.
-- Reimposta l'indice a quel commit.
-
-Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri.
-
-
-[setup]
-
-echo "1 2 3 4" > numbers
-git add .
-git commit -m "commit iniziale"
-echo "1 2 3 4 5 6 7 8 9 11" > numbers
-git commit -am "Più numerrrrri"
-
-[win]
-
-# Nel primo commit il file numbers contiene i numeri da 1 a 10.
-test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10"
-# Il messaggio di questo commit è "Più numeri".
-git log -1 --oneline | grep "Più numeri"
-# Il commit con l'errore si battitura non fa più parte del ramo principale.
-git log --oneline | grep -v "rrrrr"
diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken
deleted file mode 100644
index cb7f2fb..0000000
--- a/levels/it/shit-happens/pushed-something-broken
+++ /dev/null
@@ -1,54 +0,0 @@
-title = Ho fatto il push di qualcosa di rotto
-cards = revert push
-
-[description]
-
-Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
-
-[setup]
-
-echo "questo va bene
-
-?
-
-?
-
-?" > text
-git add .
-git commit -m bene
-echo "questo va bene
-
-anche questo va bene
-
-?
-
-?" > text
-git commit -am "anche questo bene"
-echo "questo va bene
-
-anche questo va bene
-
-questo è veramente sbagliato
-
-?" > text
-git commit -am "veramente sbagliato"
-echo "questo va bene
-
-anche questo va bene
-
-questo è veramente sbagliato
-
-questo va nuovamente bene" > text
-git commit -am "nuovamente bene"
-
-git push team main
-git branch -u team/main main
-
-[setup team]
-
-[win team]
-
-# Il ramo main del Team non contiene più niente di sbagliato.
-! { git show main:text | grep -q "veramente sbagliato"; }
-# e la cronologia non è stata modificata.
-git show main^:text | grep -q "veramente sbagliato"
diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog
deleted file mode 100644
index 23f7bdc..0000000
--- a/levels/it/shit-happens/reflog
+++ /dev/null
@@ -1,26 +0,0 @@
-title = Torna dove eri prima
-cards = checkout reflog
-
-[description]
-
-Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main).
-
-Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo?
-
-C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato:
-
-    git reflog
-
-[setup]
-
-for i in {1..10}; do
-    git commit --allow-empty -m $i
-    git branch $i
-done
-git checkout 3
-git checkout main
-
-[win]
-
-# Trova cosa stavi facendo prima e tornaci!
-test "$(git rev-parse HEAD)" = "$(git rev-parse 3)"
diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file
deleted file mode 100644
index 16cf0dc..0000000
--- a/levels/it/shit-happens/restore-a-file
+++ /dev/null
@@ -1,22 +0,0 @@
-title = Recuperare un file cancellato
-cards = checkout
-
-[description]
-
-Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte!
-
-Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file!
-
-[setup]
-
-echo importante > essay
-git add .
-git commit -m "Commit iniziale"
-echo "contenuto importante" > essay
-git commit -am "Ottimizzato essay"
-rm essay
-
-[win]
-
-# Recupera il file "essay" che contiene "contenuto importante"
-test "$(cat essay)" = "contenuto importante"
diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past
deleted file mode 100644
index c15f2a3..0000000
--- a/levels/it/shit-happens/restore-a-file-from-the-past
+++ /dev/null
@@ -1,22 +0,0 @@
-title = Recuperare un file dal passato
-cards = checkout checkout-from commit
-
-[description]
-
-Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits.
-Così:
-
-    git checkout [commit] [file]
-
-[setup]
-
-echo "versione buona" > essay
-git add .
-git commit -m "commit iniziale"
-echo "versione cattiva" > essay
-git commit -am "\"Migliorato\" essay"
-
-[win]
-
-# Prendi la prima versione di "essay" e crea un nuovo commit con essa.
-test "$(git show main:essay)" = "versione buona"
diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence
deleted file mode 100644
index 663d5d9..0000000
--- a/levels/it/shit-happens/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-restore-a-file
-restore-a-file-from-the-past
-bad-commit
-pushed-something-broken
-reflog
diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence
deleted file mode 100644
index 9dd02f7..0000000
--- a/levels/it/stash/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-stash
-stash-pop
-stash-clear
-stash-branch
-stash-merge
diff --git a/levels/it/stash/stash b/levels/it/stash/stash
deleted file mode 100644
index 6a4bc61..0000000
--- a/levels/it/stash/stash
+++ /dev/null
@@ -1,45 +0,0 @@
-title = Stashing
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-You will encounter situations in which you are working on your project but you need to
-put your current changes aside temporarily. To do so, you can use the stash function. Use
-    git stash push 
-to add your current changes to the stash stack.
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "Apple Pie:" > recipe
-
-git add .
-git commit -m "creating a recipe"
-
-echo "- 4 Apples" >> recipe
-
-git add .
-git commit -m "Adding ingredients"
-
-echo "- 500g Flour" >> recipe
-
-git checkout main
-
-[win]
-
-# Did you stash the current changes?
-test "$(git stash list | wc -l)" -ge 1
-
-[actions]
-
-
-
-[congrats]
-
-Nice stash you got there! :)
diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch
deleted file mode 100644
index e51e4d2..0000000
--- a/levels/it/stash/stash-branch
+++ /dev/null
@@ -1,47 +0,0 @@
-title = Ramo dalla scorta
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando
-    git stash branch <branchname> <stash>
-Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione <stash>.
-
-Crea un nuovo ramo dalle modifiche nascoste!!
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "Torta di mele:" > recipe
-
-git add .
-git commit -m "creata una ricetta"
-
-echo "- 4 Mele" >> recipe
-
-git add .
-git commit -m "Aggiunto ingredienti"
-
-echo "- 500g Farina" >> recipe
-git stash push
-
-git checkout main
-
-[win]
-
-# Hai creato un nuovo ramo dai cambiamenti nascosti?
-test "$(git branch --list| wc -l)" -ge 2
-
-[actions]
-
-
-
-[congrats]
-
-I cambiamenti nascosti sono nel nuovo ramo! :)
diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear
deleted file mode 100644
index 32f82cb..0000000
--- a/levels/it/stash/stash-clear
+++ /dev/null
@@ -1,57 +0,0 @@
-title = Pulire la scorta
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Se vuoi controllare la tua scorta, usa il comando
-    git stash list
-
-Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con 
-    git stash clear
-Se vuoi solo scartare un certo elemento dalla scorta, puoi usare
-    git stash drop <stash>
-    
-Pulisci la tua pila di scorta!
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "Torta di mele:" > recipe
-
-git add .
-git commit -m "creata una ricetta"
-
-echo "- 4 Mele" >> recipe
-
-git add .
-git commit -m "Aggiunto ingredienti"
-
-echo "- 500g Farina" >> recipe
-git stash push
-
-echo "- 200g Zucchero" >> recipe
-git stash push
-
-echo "- Pizzico di sale" >> recipe
-git stash push
-
-git checkout main
-
-[win]
-
-# Hai pulito la tua pila di scorta?
-test "$(git stash list | wc -l)" -eq 0
-
-[actions]
-
-
-
-[congrats]
-
-Pulito tutto! :)
diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge
deleted file mode 100644
index a4ed759..0000000
--- a/levels/it/stash/stash-merge
+++ /dev/null
@@ -1,53 +0,0 @@
-title = Unire la scorta spuntata
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione.
-Fai uscire le modifiche dalla scorta con
-    git stash pop
-e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta.
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "Torta di mele:" > recipe
-
-git add .
-git commit -m "creata una ricetta"
-
-echo "- 4 Mele" >> recipe
-
-git add .
-git commit -m "Aggiunti ingredienti"
-
-echo "- 500g Farina" >> recipe
-
-git stash push
-
-echo "- Pizzico di sale" >> recipe
-
-git checkout main
-git add recipe
-
-[win]
-
-# Hai rislto i conflitti ed inviato?
-{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; }
-
-# Hai pulito la pila di scorta?
-test "$(git stash list | wc -l)" -eq 0
-
-[actions]
-
-
-
-[congrats]
-
-Yay, hai riavuto le tue modifiche in dietro! :)
diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop
deleted file mode 100644
index cffc30d..0000000
--- a/levels/it/stash/stash-pop
+++ /dev/null
@@ -1,46 +0,0 @@
-title = Pop dalla scorta
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare
-    git stash pop
-Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa
-    git stash apply
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "Torta di mele:" > recipe
-
-git add .
-git commit -m "creata una ricetta"
-
-echo "- 4 Mele" >> recipe
-
-git add .
-git commit -m "Aggiunto ingredienti"
-
-echo "- 500g Farina" >> recipe
-
-git stash push
-git checkout main
-
-[win]
-
-# Hai pop i cambiamenti dalla pila di scorta?
-test "$(git stash list | wc -l)" -eq 0
-
-[actions]
-
-
-
-[congrats]
-
-Yay, hai riavuto i tuoi cambiamenti in dietro! :)
diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag
deleted file mode 100644
index 2351635..0000000
--- a/levels/it/tags/add-tag
+++ /dev/null
@@ -1,53 +0,0 @@
-title = Creare etichette
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione.
-
-Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'.
-
-Scrivi
-
-    git tag <tag-name> 
-    
-per etichettare il tuo commit.
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "event 1" > elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 1"
-
-echo "event 2" >> elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 2"
-
-echo "event 3" >> elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 3"
-
-git checkout --detach main
-
-[win]
-
-# Hai creato un nuovo tag?
-test "$(git tag -l | wc -l)" -ge 1
-
-[actions]
-
-
-
-[congrats]
-
-Bene! Hai etichettato il tuo primo commit :)
diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later
deleted file mode 100644
index 49e17d4..0000000
--- a/levels/it/tags/add-tag-later
+++ /dev/null
@@ -1,50 +0,0 @@
-title = Etichettare dopo
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Ma cosa succede se ti dimentichi di etichettare il corrente commit?
-No c'è problema! Puoi etichettare i vecchi commit tramite
-
-    git tag <tag-name> <commit-hash>
-
-Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"!
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "event 1" > elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 1"
-
-echo "event 2" >> elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 2"
-
-echo "event 3" >> elecno-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 3"
-
-git checkout --detach main
-
-[win]
-
-# Hai creato una nuova etichetta?
-test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
-
-[actions]
-
-
-
-[congrats]
-
-Motlo bene :)
diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag
deleted file mode 100644
index 0a68035..0000000
--- a/levels/it/tags/remote-tag
+++ /dev/null
@@ -1,58 +0,0 @@
-title = Etichette remote
-cards = pull push commit-auto checkout
-
-[description]
-
-Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente.
-
-Puoi inviare un tag con
-    git push <remote> <tag-name>
-O tutti i tags con
-    git push <remote> --tags
-
-Rimuovere i tags nel repository remoto con
-    git push <remote> --delete <tag-name>
-    
-Puoi anche sincronizzare 
-    git fetch <remote> --prune --prune-tags
-
-
-Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale.
-[setup yours]
-
-git checkout main
-
-git checkout main
-echo "Condivisione dello spazzolino" > project-ideas
-git add .
-git commit -m "Prima idea"
-
-echo "Il mio telefono è sottosopra? App" >> project-ideas
-git commit -am "Un'altra idea"
-
-
-
-git push friend main
-
-git branch -u friend/main main
-
-[setup friend]
-
-
-
-[actions friend]
-
-git tag v1 HEAD~1
-
-[win]
-# v1 tag nel tuo repo
-test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
-
-# v2 tag nel tuo repo
-test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
-
-
-[win friend]
-
-# v2 tag nel remoto
-test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag
deleted file mode 100644
index 2d2dfd9..0000000
--- a/levels/it/tags/remove-tag
+++ /dev/null
@@ -1,53 +0,0 @@
-title = Rimuovere etichette
-cards = checkout commit-auto merge reset-hard
-
-[description]
-
-Hai aggiunto molte ectichette? Non c'è problema! Cancellali con
-
-    git tag -d <tag-name>
-    
-Rimuovi tutti i tag in questo repository!
-
----
-tipp1
----
-tipp2
----
-tipp3
-
-[setup]
-
-echo "event 1" > elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 1"
-
-echo "event 2" >> elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 2"
-
-echo "event 3" >> elenco-caratteristiche
-
-git add .
-git commit -m "Aggiunta caratteristica 3"
-
-git tag v1 HEAD~2
-git tag v2 HEAD~1
-git tag v3 
-
-git checkout --detach main
-
-[win]
-
-# Hai riosso tutte le etichette?
-test "$(git tag -l | wc -l)" -eq 0
-
-[actions]
-
-
-
-[congrats]
-
-Molto bene :)
diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence
deleted file mode 100644
index fd63d9c..0000000
--- a/levels/it/tags/sequence
+++ /dev/null
@@ -1,4 +0,0 @@
-add-tag
-remove-tag
-add-tag-later
-remote-tag
diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout
deleted file mode 100644
index 9d9c957..0000000
--- a/levels/it/unused/checkout
+++ /dev/null
@@ -1,31 +0,0 @@
-title = Getting the last version
-cards = checkout-file
-
-[description]
-
-You've been working on your essay for a while. But - ughh! Now your cat walks over your keyboard and "helps you", so now it's all messed up! :/
-
-But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`!
-
-[setup]
-
-echo "A" >> essay.txt
-git add .
-git commit -m "Initial commit"
-
-echo "B" >> essay.txt
-git commit -a -m "Improved version"
-
-echo "C" >> essay.txt
-git commit -a -m "Even better version"
-
-echo "D" >> essay.txt
-git commit -a -m "Marvelous version"
-
-echo "blarg
-blaaaargh" > essay.txt
-
-[win]
-
-# Restore the version from the last commit.
-cat essay.txt | grep D
diff --git a/levels/it/unused/clone b/levels/it/unused/clone
deleted file mode 100644
index 8459c08..0000000
--- a/levels/it/unused/clone
+++ /dev/null
@@ -1,20 +0,0 @@
-title = Cloning a repo
-cards = clone commit-auto pull push
-
-[description]
-
-Get your friend's repo using clone, change something, push it back.
-
-[setup]
-
-rm -rf .git
-
-[setup friend]
-
-echo hi > file
-git add .
-git commit -m "Initial commit"
-
-[win friend]
-
-test "$(git show main:file)" != hi
diff --git a/levels/it/unused/commit b/levels/it/unused/commit
deleted file mode 100644
index fd84cc9..0000000
--- a/levels/it/unused/commit
+++ /dev/null
@@ -1,27 +0,0 @@
-title = Make a commit \o/
-cards = add reset checkout commit
-
-[description]
-
-For practice, make a commit where all files contain an "x"!
-
-[setup]
-
-echo a > a
-echo x > b
-echo x > c
-git add .
-git commit -m "Initial commit"
-echo x > a
-echo b > b
-git add b
-echo c > c
-
-[win]
-
-# File a contains "x" in the last main commit.
-test "$(git show main:a)" = x
-# File b contains "x" in the last main commit.
-test "$(git show main:b)" = x
-# File c contains "x" in the last main commit.
-test "$(git show main:c)" = x
diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a
deleted file mode 100644
index 747a009..0000000
--- a/levels/it/unused/commit-a
+++ /dev/null
@@ -1,26 +0,0 @@
-title = Make a commit, but faster!
-cards = add reset checkout commit commit-a
-
-[description]
-
-There is a time-saving trick, where instead of a plain `git commit`, you can use
-
-    git commit -a
-
-This will automatically add all changes you made to local files! Very convenient.
-
-[setup]
-
-echo a > a
-echo b > b
-echo c > c
-git add .
-git commit -m "Initial commit"
-echo x > a
-echo x > b
-echo x > c
-
-[win]
-
-# Make a commit where all files contain "x".
-test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x
diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch
deleted file mode 100644
index 377355a..0000000
--- a/levels/it/unused/fetch
+++ /dev/null
@@ -1,35 +0,0 @@
-title = Fetching from remotes
-cards = checkout fetch commit-auto
-
-[description]
-
-Here, you already have two remotes configured! You can list them using `git remote`.
-
-Fetch from both, and look at the suggestions.
-
-Then, make a new commit on top of your original one that introduces a compromise.
-
-[setup]
-
-echo "The bikeshed should be ???" > proposal
-git add .
-git commit -m "What do you think?"
-
-[setup friend1]
-
-git pull yours main
-echo "The bikeshed should be green" > proposal
-git commit -am "Green"
-
-[setup friend2]
-
-git pull yours main
-echo "The bikeshed should be blue" > proposal
-git commit -am "Blue"
-
-[win]
-
-# Your proposal is acceptable for friend1.
-git show main:proposal | git grep green
-# Your proposal is acceptable for friend2.
-git show main:proposal | git grep blue
diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move
deleted file mode 100644
index 8f65710..0000000
--- a/levels/it/unused/files-move
+++ /dev/null
@@ -1,27 +0,0 @@
-title = No sleep required
-cards = file-new file-delete file-rename
-
-[description]
-
-Actually, you decide that you don't need any sleep.
-
-Because of that, you won't require a bed, and can build some other piece of furniture from the wood!
-
-
-[setup]
-
-echo A yellow cupboard with lots of drawers. > cupboard
-echo A really big yellow shelf. > shelf
-echo A comfortable, yellow bed with yellow cushions. > bed
-
-[win]
-
-# Rename the bed into something else, and give it a new description!
-NUM_FILES="$(ls | wc -l)"
-! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" .
-
-[congrats]
-
-Neat! It even still looks a bit comfortable!
-
-You head out, eager for your first lesson at time travel school!
diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv
deleted file mode 100644
index 9ff7270..0000000
--- a/levels/it/unused/index-mv
+++ /dev/null
@@ -1,26 +0,0 @@
-title = Rename a file in the next commit
-cards = add reset-file checkout-file mv commit
-
-[description]
-
-Other times, you might want to rename a file in the next commit. Use
-
-    git mv [file] [new name]
-
-for that. The effect is very similar as if you had created a copy with a new name, and removed the old version.
-
-[setup]
-
-echo a > a
-echo SPECIAL > b
-echo x > c
-git add .
-git commit -m "Initial commit"
-echo x > a
-echo b >> b
-git add b
-
-[win]
-
-# Make a commit where you rename the file b to "x".
-test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")"
diff --git a/levels/it/unused/init b/levels/it/unused/init
deleted file mode 100644
index c76daa5..0000000
--- a/levels/it/unused/init
+++ /dev/null
@@ -1,14 +0,0 @@
-title = Welcome!
-cards = init
-
-[description]
-
-
-[setup]
-
-rm -rf .git
-
-[win]
-
-# Again, initialize your time machine!
-test -d .git
diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push
deleted file mode 100644
index 71ce61d..0000000
--- a/levels/it/unused/pull-push
+++ /dev/null
@@ -1,51 +0,0 @@
-title = Helping each other
-cards = checkout commit-auto reset-hard pull push
-
-[description]
-
-The events and timelines you see are always only what your own time machine knows about!
-
-Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine.
-
-Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick!
-
-You can only ever manipulate things in your own time machine (the one on the bottom).
-
-[setup yours]
-
-echo "Just woke up. Is hungry." > sam
-git add .
-git commit -m "The beginning"
-
-git checkout -b pancakes
-echo "Had blueberry pancakes with maple syrup for breakfast." > sam
-git add .
-git commit -m "Pancakes!"
-
-git checkout -b muesli main
-echo "Had muesli with oats and strawberries for breakfast." > sam
-git add .
-git commit -m "Muesli!"
-
-git checkout main
-
-git push -u sidekick main pancakes muesli
-
-[setup sidekick]
-
-git checkout main
-git merge pancakes
-git merge muesli
-
-echo "Had pancakes with strawberries for breakfast." > sam
-git add .
-git commit -m "Let's make this breakfast compromise" --author="Sidekick <sidekick@example.com>"
-
-[win sidekick]
-
-# Below main's parent, there is a rhombus:
-git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)"
-
-[congrats]
-
-In reality, in many cases, a lot of time agents work together to build a really good future together! :)
diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add
deleted file mode 100644
index db24b7d..0000000
--- a/levels/it/unused/remotes-add
+++ /dev/null
@@ -1,33 +0,0 @@
-title = Adding a remote
-cards = checkout
-
-[description]
-
-Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using
-
-    git remote add [name] [URL]
-
-where `[name]` is an arbitrary, short name you pick for the remote.
-
-When you've done that, you can get all commits from that remote using
-
-    git pull friend
-
-There's a letter for you!
-
-[setup]
-
-git remote remove friend
-
-[setup friend]
-
-echo "I'm really committed to our friendship! <3" > love_letter
-git add .
-git commit -m "Write a letter"
-
-[win]
-
-# Add a remote that points to ../friend.
-git remote -v | grep '../friend'
-# Pull from the remote.
-git show HEAD:love_letter | grep committed
diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete
deleted file mode 100644
index c026204..0000000
--- a/levels/it/unused/remotes-delete
+++ /dev/null
@@ -1,23 +0,0 @@
-title = Deleting and renaming a remote
-cards = checkout
-
-[description]
-
-Here, you already have two remotes configured! You can list them using `git remote`.
-
-[setup]
-
-git remote rename friend frend
-
-[setup friend]
-
-[setup enemy]
-
-[win]
-
-# Rename the remote with the typo (using `git remote rename [old name] [new name]`)
-git remote | grep friend
-# The remote with the typo is gone.
-! grep 'frend' <(git remote)
-# Delete the remote you don't want to keep (using `git remote remove [remote]`)
-! grep 'enemy' <(git remote)
diff --git a/levels/it/unused/restore b/levels/it/unused/restore
deleted file mode 100644
index 1f9961e..0000000
--- a/levels/it/unused/restore
+++ /dev/null
@@ -1,28 +0,0 @@
-title = Looking into the past
-cards = checkout-from
-
-[description]
-
-You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"!
-
-No problem, you can use the `checkout` card to restore your essay from an older commit!
-
-[setup]
-
-echo "Initial version" > essay.txt
-git add .
-git commit -m "Initial commit"
-
-echo "Improved version" > essay.txt
-git commit -a -m "Improved version"
-
-echo "Best version" > essay.txt
-git commit -a -m "Best version"
-
-echo "Less-good version" > essay.txt
-git commit -a -m "Less-good version"
-
-[win]
-
-# For nostalgic reasons, restore the very first backup you made!
-diff essay.txt <(echo "Best version")
diff --git a/levels/it/unused/split b/levels/it/unused/split
deleted file mode 100644
index 274b792..0000000
--- a/levels/it/unused/split
+++ /dev/null
@@ -1,26 +0,0 @@
-title = Split a commit!
-cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show
-
-[description]
-
-Here, both changes happened in one commit! Split them to be in two commits instead.
-
-[setup]
-
-echo something > file1
-echo something else > file2
-git add .
-git commit -m "Initial commit"
-
-echo this should happen first >> file1
-echo and this should happen after that >> file2
-git commit -am "Both together"
-
-echo this is some other change >> file1
-echo this is some other change >> file2
-git commit -am "Something else"
-
-[win]
-
-test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file2" &&
-test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M	file1"
diff --git a/levels/it/unused/steps b/levels/it/unused/steps
deleted file mode 100644
index cb84861..0000000
--- a/levels/it/unused/steps
+++ /dev/null
@@ -1,23 +0,0 @@
-title = One step after another
-cards = checkout commit reset-hard add
-
-[description]
-
-Sometimes, you might want to record the order in which things changed, instead of making a single commit.
-
-What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense!
-
-[setup]
-
-echo something > file1
-echo something else > file2
-git add .
-git commit -m "Initial commit"
-
-echo this should happen first >> file1
-echo and this should happen after that >> file2
-
-[win]
-
-test "$(git diff-tree --no-commit-id --name-status -r main)" = "M	file2" &&
-test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file1"
diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you
deleted file mode 100644
index f06137c..0000000
--- a/levels/it/unused/who-are-you
+++ /dev/null
@@ -1,23 +0,0 @@
-title = Nice to meet you!
-cards = config-name config-email
-
-[description]
-
-Introduce yourself using
-
-    git config --global user.name Firstname
-    git config --global user.email "your@mail.com"
-
-[setup]
-
-[actions]
-
-test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!"
-
-[win]
-
-# Have a name configured.
-test "$(git config user.name)" != "You"
-
-# Have an email address configured.
-test "$(git config user.email)" != "you@time.agency"
diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore
deleted file mode 100644
index dc55243..0000000
--- a/levels/it/workflows/gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-title = Ignoring files
-
-[description]
-
-That chicken is running around a lot, and changing often. We don't want to have it in our commits.
-
-Add it to the file .gitignore, and try using `git add .`!
-
-[setup]
-
-touch .gitignore
-echo important > important
-git add important
-git commit -m "Initial commit"
-
-[actions]
-
-echo "$RANDOM" > chicken
diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr
deleted file mode 100644
index 98fa95f..0000000
--- a/levels/it/workflows/pr
+++ /dev/null
@@ -1,25 +0,0 @@
-title = Clonare un repo
-cards = clone commit-auto reset-hard checkout file-new branch
-
-[description]
-
-Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`.
-
-[setup]
-
-rm -rf .git
-
-[setup friend]
-
-echo "2 + 3 = " > file
-git add .
-git commit -m "Commit iniziale"
-
-[actions friend]
-
-git ls-remote yours | grep pr && git fetch yours && git merge yours/solution
-git show main:file | grep 5 && hint "Grazie!"
-
-[win friend]
-
-git show main:file | grep 5
diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence
deleted file mode 100644
index 1be11a8..0000000
--- a/levels/it/workflows/sequence
+++ /dev/null
@@ -1 +0,0 @@
-pr
diff --git a/levels/en/low-level/basics b/levels/low-level/basics
similarity index 100%
rename from levels/en/low-level/basics
rename to levels/low-level/basics
diff --git a/levels/en/low-level/blob-create b/levels/low-level/blob-create
similarity index 100%
rename from levels/en/low-level/blob-create
rename to levels/low-level/blob-create
diff --git a/levels/en/low-level/blob-remove b/levels/low-level/blob-remove
similarity index 100%
rename from levels/en/low-level/blob-remove
rename to levels/low-level/blob-remove
diff --git a/levels/en/low-level/commit-create b/levels/low-level/commit-create
similarity index 100%
rename from levels/en/low-level/commit-create
rename to levels/low-level/commit-create
diff --git a/levels/en/low-level/commit-parents b/levels/low-level/commit-parents
similarity index 100%
rename from levels/en/low-level/commit-parents
rename to levels/low-level/commit-parents
diff --git a/levels/en/low-level/commit-rhombus b/levels/low-level/commit-rhombus
similarity index 100%
rename from levels/en/low-level/commit-rhombus
rename to levels/low-level/commit-rhombus
diff --git a/levels/en/low-level/index-add b/levels/low-level/index-add
similarity index 100%
rename from levels/en/low-level/index-add
rename to levels/low-level/index-add
diff --git a/levels/en/low-level/index-remove b/levels/low-level/index-remove
similarity index 100%
rename from levels/en/low-level/index-remove
rename to levels/low-level/index-remove
diff --git a/levels/en/low-level/index-update b/levels/low-level/index-update
similarity index 100%
rename from levels/en/low-level/index-update
rename to levels/low-level/index-update
diff --git a/levels/en/low-level/puzzle-apocalypse b/levels/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/en/low-level/puzzle-apocalypse
rename to levels/low-level/puzzle-apocalypse
diff --git a/levels/en/low-level/puzzle-precious-blob b/levels/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/en/low-level/puzzle-precious-blob
rename to levels/low-level/puzzle-precious-blob
diff --git a/levels/en/low-level/puzzle-trees-all-the-way-down b/levels/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/en/low-level/puzzle-trees-all-the-way-down
rename to levels/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/en/low-level/ref-create b/levels/low-level/ref-create
similarity index 100%
rename from levels/en/low-level/ref-create
rename to levels/low-level/ref-create
diff --git a/levels/en/low-level/ref-move b/levels/low-level/ref-move
similarity index 100%
rename from levels/en/low-level/ref-move
rename to levels/low-level/ref-move
diff --git a/levels/en/low-level/ref-remove b/levels/low-level/ref-remove
similarity index 100%
rename from levels/en/low-level/ref-remove
rename to levels/low-level/ref-remove
diff --git a/levels/en/low-level/sequence b/levels/low-level/sequence
similarity index 100%
rename from levels/en/low-level/sequence
rename to levels/low-level/sequence
diff --git a/levels/en/low-level/symref-create b/levels/low-level/symref-create
similarity index 100%
rename from levels/en/low-level/symref-create
rename to levels/low-level/symref-create
diff --git a/levels/en/low-level/symref-no-deref b/levels/low-level/symref-no-deref
similarity index 100%
rename from levels/en/low-level/symref-no-deref
rename to levels/low-level/symref-no-deref
diff --git a/levels/en/low-level/tree-create b/levels/low-level/tree-create
similarity index 100%
rename from levels/en/low-level/tree-create
rename to levels/low-level/tree-create
diff --git a/levels/en/low-level/tree-nested b/levels/low-level/tree-nested
similarity index 100%
rename from levels/en/low-level/tree-nested
rename to levels/low-level/tree-nested
diff --git a/levels/en/low-level/tree-read b/levels/low-level/tree-read
similarity index 100%
rename from levels/en/low-level/tree-read
rename to levels/low-level/tree-read
diff --git a/levels/en/low-level/welcome b/levels/low-level/welcome
similarity index 100%
rename from levels/en/low-level/welcome
rename to levels/low-level/welcome
diff --git a/levels/en/merge/conflict b/levels/merge/conflict
similarity index 100%
rename from levels/en/merge/conflict
rename to levels/merge/conflict
diff --git a/levels/en/merge/merge b/levels/merge/merge
similarity index 100%
rename from levels/en/merge/merge
rename to levels/merge/merge
diff --git a/levels/en/merge/merge-abort b/levels/merge/merge-abort
similarity index 100%
rename from levels/en/merge/merge-abort
rename to levels/merge/merge-abort
diff --git a/levels/en/merge/sequence b/levels/merge/sequence
similarity index 100%
rename from levels/en/merge/sequence
rename to levels/merge/sequence
diff --git a/levels/en/remotes/friend b/levels/remotes/friend
similarity index 100%
rename from levels/en/remotes/friend
rename to levels/remotes/friend
diff --git a/levels/en/remotes/problems b/levels/remotes/problems
similarity index 100%
rename from levels/en/remotes/problems
rename to levels/remotes/problems
diff --git a/levels/en/remotes/sequence b/levels/remotes/sequence
similarity index 100%
rename from levels/en/remotes/sequence
rename to levels/remotes/sequence
diff --git a/levels/en/sandbox/empty b/levels/sandbox/empty
similarity index 100%
rename from levels/en/sandbox/empty
rename to levels/sandbox/empty
diff --git a/levels/en/sandbox/remote b/levels/sandbox/remote
similarity index 100%
rename from levels/en/sandbox/remote
rename to levels/sandbox/remote
diff --git a/levels/en/sandbox/sequence b/levels/sandbox/sequence
similarity index 100%
rename from levels/en/sandbox/sequence
rename to levels/sandbox/sequence
diff --git a/levels/en/sandbox/three-commits b/levels/sandbox/three-commits
similarity index 100%
rename from levels/en/sandbox/three-commits
rename to levels/sandbox/three-commits
diff --git a/levels/en/sequence b/levels/sequence
similarity index 100%
rename from levels/en/sequence
rename to levels/sequence
diff --git a/levels/en/shit-happens/bad-commit b/levels/shit-happens/bad-commit
similarity index 100%
rename from levels/en/shit-happens/bad-commit
rename to levels/shit-happens/bad-commit
diff --git a/levels/en/shit-happens/pushed-something-broken b/levels/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/en/shit-happens/pushed-something-broken
rename to levels/shit-happens/pushed-something-broken
diff --git a/levels/en/shit-happens/reflog b/levels/shit-happens/reflog
similarity index 100%
rename from levels/en/shit-happens/reflog
rename to levels/shit-happens/reflog
diff --git a/levels/en/shit-happens/restore-a-file b/levels/shit-happens/restore-a-file
similarity index 100%
rename from levels/en/shit-happens/restore-a-file
rename to levels/shit-happens/restore-a-file
diff --git a/levels/en/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/en/shit-happens/restore-a-file-from-the-past
rename to levels/shit-happens/restore-a-file-from-the-past
diff --git a/levels/en/shit-happens/sequence b/levels/shit-happens/sequence
similarity index 100%
rename from levels/en/shit-happens/sequence
rename to levels/shit-happens/sequence
diff --git a/levels/en/stash/sequence b/levels/stash/sequence
similarity index 100%
rename from levels/en/stash/sequence
rename to levels/stash/sequence
diff --git a/levels/en/stash/stash b/levels/stash/stash
similarity index 100%
rename from levels/en/stash/stash
rename to levels/stash/stash
diff --git a/levels/en/stash/stash-branch b/levels/stash/stash-branch
similarity index 100%
rename from levels/en/stash/stash-branch
rename to levels/stash/stash-branch
diff --git a/levels/en/stash/stash-clear b/levels/stash/stash-clear
similarity index 100%
rename from levels/en/stash/stash-clear
rename to levels/stash/stash-clear
diff --git a/levels/en/stash/stash-merge b/levels/stash/stash-merge
similarity index 100%
rename from levels/en/stash/stash-merge
rename to levels/stash/stash-merge
diff --git a/levels/en/stash/stash-pop b/levels/stash/stash-pop
similarity index 100%
rename from levels/en/stash/stash-pop
rename to levels/stash/stash-pop
diff --git a/levels/en/tags/add-tag b/levels/tags/add-tag
similarity index 100%
rename from levels/en/tags/add-tag
rename to levels/tags/add-tag
diff --git a/levels/en/tags/add-tag-later b/levels/tags/add-tag-later
similarity index 100%
rename from levels/en/tags/add-tag-later
rename to levels/tags/add-tag-later
diff --git a/levels/en/tags/remote-tag b/levels/tags/remote-tag
similarity index 100%
rename from levels/en/tags/remote-tag
rename to levels/tags/remote-tag
diff --git a/levels/en/tags/remove-tag b/levels/tags/remove-tag
similarity index 100%
rename from levels/en/tags/remove-tag
rename to levels/tags/remove-tag
diff --git a/levels/en/tags/sequence b/levels/tags/sequence
similarity index 100%
rename from levels/en/tags/sequence
rename to levels/tags/sequence
diff --git a/levels/en/unused/checkout b/levels/unused/checkout
similarity index 100%
rename from levels/en/unused/checkout
rename to levels/unused/checkout
diff --git a/levels/en/unused/clone b/levels/unused/clone
similarity index 100%
rename from levels/en/unused/clone
rename to levels/unused/clone
diff --git a/levels/en/unused/commit b/levels/unused/commit
similarity index 100%
rename from levels/en/unused/commit
rename to levels/unused/commit
diff --git a/levels/en/unused/commit-a b/levels/unused/commit-a
similarity index 100%
rename from levels/en/unused/commit-a
rename to levels/unused/commit-a
diff --git a/levels/en/unused/fetch b/levels/unused/fetch
similarity index 100%
rename from levels/en/unused/fetch
rename to levels/unused/fetch
diff --git a/levels/en/unused/files-move b/levels/unused/files-move
similarity index 100%
rename from levels/en/unused/files-move
rename to levels/unused/files-move
diff --git a/levels/en/unused/index-mv b/levels/unused/index-mv
similarity index 100%
rename from levels/en/unused/index-mv
rename to levels/unused/index-mv
diff --git a/levels/en/unused/init b/levels/unused/init
similarity index 100%
rename from levels/en/unused/init
rename to levels/unused/init
diff --git a/levels/en/unused/pull-push b/levels/unused/pull-push
similarity index 100%
rename from levels/en/unused/pull-push
rename to levels/unused/pull-push
diff --git a/levels/en/unused/remotes-add b/levels/unused/remotes-add
similarity index 100%
rename from levels/en/unused/remotes-add
rename to levels/unused/remotes-add
diff --git a/levels/en/unused/remotes-delete b/levels/unused/remotes-delete
similarity index 100%
rename from levels/en/unused/remotes-delete
rename to levels/unused/remotes-delete
diff --git a/levels/en/unused/restore b/levels/unused/restore
similarity index 100%
rename from levels/en/unused/restore
rename to levels/unused/restore
diff --git a/levels/en/unused/split b/levels/unused/split
similarity index 100%
rename from levels/en/unused/split
rename to levels/unused/split
diff --git a/levels/en/unused/steps b/levels/unused/steps
similarity index 100%
rename from levels/en/unused/steps
rename to levels/unused/steps
diff --git a/levels/en/unused/who-are-you b/levels/unused/who-are-you
similarity index 100%
rename from levels/en/unused/who-are-you
rename to levels/unused/who-are-you
diff --git a/levels/en/workflows/gitignore b/levels/workflows/gitignore
similarity index 100%
rename from levels/en/workflows/gitignore
rename to levels/workflows/gitignore
diff --git a/levels/en/workflows/pr b/levels/workflows/pr
similarity index 100%
rename from levels/en/workflows/pr
rename to levels/workflows/pr
diff --git a/levels/en/workflows/sequence b/levels/workflows/sequence
similarity index 100%
rename from levels/en/workflows/sequence
rename to levels/workflows/sequence
diff --git a/locale/it.po b/locale/it.po
index adbae71..59b3509 100644
--- a/locale/it.po
+++ b/locale/it.po
@@ -74,6 +74,10 @@ msgstr "Inglese"
 msgid "Italian"
 msgstr "Italiano"
 
+#: oh-my-git/scenes/level.gd:45
+msgid "Good job, you solved the level!\nFeel free to try a few more things or click 'Next level'."
+msgstr "Ottimo lavoro, hai risolto il livello!\n Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'"
+
 #: oh-my-git/scenes/level.gd:81
 msgid "Complete the goal of this level"
 msgstr "Completa l'obbiettivo di questo ivello!"
@@ -262,3 +266,153 @@ msgstr "Il testo qui"
 #: oh-my-git/scenes/title.tscn:74
 msgid "Language"
 msgstr "Linguaggio"
+
+#: CARDS DESCRIPTION
+#: oh-my-git/resources/cards.json:6
+msgid "Drag this card into the empty space above to initialize the time machine!"
+msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+
+#: oh-my-git/resources/cards.json:14
+msgid "Create your own copy of someone else's repo."
+msgstr "Crea la tua copia personale del Repo di qualcun'altro."
+
+#: oh-my-git/resources/cards.json:22
+msgid "Set your name.\n\n(Will not change anything outside of this game.)"
+msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
+
+#: oh-my-git/resources/cards.json:30
+msgid "Set your email address."
+msgstr "Imposta la tua e-mail."
+
+#: oh-my-git/resources/cards.json:38
+msgid "Drag this card to a commit or to a branch to travel to it!"
+msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso."
+
+#: oh-my-git/resources/cards.json:46
+msgid "Reset changes in a local file."
+msgstr "Resetta i cambiamenti in un file locale"
+
+#: oh-my-git/resources/cards.json:54
+msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
+msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
+
+#: oh-my-git/resources/cards.json:62
+msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
+msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
+
+#: oh-my-git/resources/cards.json:70
+msgid "Make a new commit containing your current environment! Type in a description of what changed!"
+msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!"
+
+#: oh-my-git/resources/cards.json:78
+msgid "Merge the specified timeline into yours. If necessary, will create a merge commit."
+msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge."
+
+#: oh-my-git/resources/cards.json:86
+msgid "Abort the current merge attempt, and reconstruct the previous state."
+msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
+
+#: oh-my-git/resources/cards.json:94
+msgid "Put the events in your current timeline on top of the specified one."
+msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata."
+
+#: oh-my-git/resources/cards.json:102
+msgid "Get someone else's version of the current timeline, and try to merge it into yours."
+msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua."
+
+#: oh-my-git/resources/cards.json:110
+msgid "Get a someone else's version of the current timeline."
+msgstr "Prende la versione di qualcun'altro della temporale corrente"
+
+#: oh-my-git/resources/cards.json:118
+msgid "Give the current timeline to someone else."
+msgstr "Invia la linea temporale corrente a qualcun'altro"
+
+#: oh-my-git/resources/cards.json:126
+msgid "Make changes to the events in your current timeline, back to the commit you drag this to."
+msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda."
+
+#: oh-my-git/resources/cards.json:134
+msgid "Continue the current rebasing process."
+msgstr "Continua il processo di rebasing"
+
+#: oh-my-git/resources/cards.json:142
+msgid "Move the branch you're on to the specified commit."
+msgstr "Sposta il branch su cui ti trovi al commit specificato."
+
+#: oh-my-git/resources/cards.json:150
+msgid "Jump to the commit, and update the index. Keep the current environment."
+msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
+
+#: oh-my-git/resources/cards.json:158
+msgid "Reset the index version of a file to the version in the commit you're on."
+msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
+
+#: oh-my-git/resources/cards.json:166
+msgid "Repeat the specified action on top of your current timeline."
+msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente"
+
+#: oh-my-git/resources/cards.json:174
+msgid "Make a new commit that reverts the changes of the speicified commit."
+msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato."
+
+#: oh-my-git/resources/cards.json:182
+msgid "Start looking for the commit where things got bad."
+msgstr "Inizia a cercare il commit dove le cose sono andate storte"
+
+#: oh-my-git/resources/cards.json:190
+msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!"
+
+#: oh-my-git/resources/cards.json:198
+msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
+
+#: oh-my-git/resources/cards.json:206
+msgid "Update the index version of the file to its current real content."
+msgstr "Aggiorna la versione in indice del file con il contenuto attuale."
+
+#: oh-my-git/resources/cards.json:214
+msgid "Delete a file both in the working directory, as well as the index."
+msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice."
+
+#: oh-my-git/resources/cards.json:222
+msgid "Make a commit from the current index."
+msgstr "Crea un commit dall'indice corrente."
+
+#: oh-my-git/resources/cards.json:230
+msgid "Show what changed in the commit."
+msgstr "Mostra cosa è cambiato nel commit."
+
+#: oh-my-git/resources/cards.json:238
+msgid "Create a new branch at your current location."
+msgstr "Crea un nuovo branch alla posizione corrente."
+
+#: oh-my-git/resources/cards.json:246
+msgid "Delete a branch."
+msgstr "Cancella un branch."
+
+#: oh-my-git/resources/cards.json:254
+msgid "Display a log of where the ref pointed to in the past."
+msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato."
+
+#: oh-my-git/resources/cards.json:262
+msgid "Create a new file."
+msgstr "Crea un nuovo file."
+
+#: oh-my-git/resources/cards.json:270
+msgid "Delete a file."
+msgstr "Cancella un file."
+
+#: oh-my-git/resources/cards.json:278
+msgid "Rename a file."
+msgstr "Rinomina un file."
+
+#: oh-my-git/resources/cards.json:286
+msgid "Make a copy of a file."
+msgstr "Crea una copia di un file."
+
+#: LEVELS
+#: oh-my-git/levels/
+msgid "Amici"
+msgstr "Friend"
diff --git a/locale/messages.mo b/locale/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..a440a58d63cb555e4be7f22382399bf6ff95e0d7
GIT binary patch
literal 8795
zcmds+UyNMWUB_>l(8BPiG!$BBL(dSBwUeFk+HP8BT_;)F8)sdwZFV;f>7U>`GiPT{
zednIZ{j=*$A(aY^S|Qq(mhylQ5)wj4z!Tz+)CZIY5TXbK5(oiOK%zqMfFd3cQW2l;
zIrq-Yx(+D<35k*KerN7I=XZYp|6Kp={r7z-;j_v0Uap^dOOlMif4+}Dd_McuB)JHF
z4*XW|k3l{93y^=wU-RdE;NOD}gZI8INxlVq1nhw;;QinW;4=6k_}$<yfak&A0KW@-
z9sB@z4~J}kXTVkP)1aPz1!PI`N8n@NpM%?A=i8E`0$%_h0sjoty8i$l2jALBl6Qhn
zfx7=J_#NQKo8O-RFY&toA({LxD7jt*9|Hdn{66qsz>kA(`}U|03x1B@zY0DNz8|7n
z;OD_p;A<dTl6QV*)W`c8d<c|29|fhyDX8;mP;&k__#yD8!5;+w0Nen-28#caEYiNm
z!FPdAfKP!pKm&dm)cL;+*5E&Z`(XO^Bta#~UxGgd{v9ZK=P`!ta2fmp_%q-~!3W-v
zBrk)9pw9a@kblY7`6K<k9ixix_kwHSgP`tP5S1hasC_SkkAOc3ehU0`P<rlvPt?l?
z!H?XNB<H}Z-2XX@B|2XNweDX*o%3~Y3B2!nqnyj2?r(xUa0i4$@@Y_h^s~+HuY$7g
zYoPc)jxojWS#TTt3Gl<<pMrY+07{i!PJpt*2f-f&D{u^c6+8((_U?H87<_`?Ir#nH
zuYuzG_d&_=C(ZA_0d?*_fbxrDEY>-v!5;?Cf<FM>1YZC@39f^G1%44UJd|C26Z{zX
zj`zSDn1hO^Uj`L-zXje4eg(V%{vIehyqn+_Uk`wi^I=eSKLaj-p9H1<UjoI~>!9fU
zJBVu77}viGe2||X0TrJwgDLns;K#uC;IxwaHuzESGoa|b23`dJ5qur&lQc$P*WerA
zE1=eOx>26{LD}~~P<%fEu7RgP$y+!03Ml!$3_cA0JopOuDky)y{6mq>4tNj0wf7mW
z$GF<h`}y)j`va7`Yh2QgXfJWKAKByt*99&_NeH75x2QST5p{*n2l)FTF5E7}sdS}}
zVng!C=U_4T?lLHy5#r$^`}CXd0>gEQOL+kI2_M2Cd=Tr%M>0##PjfxQ^%gFDRw5*4
z8x+Wn%H4`jePnON&^a#YUVi>4m;8*dO^$QPMyI)O%OjsN{5r+;IM*?*%Ut^4uE8!(
zfw)NU{d+-uHo2bUx}qOz17B38+OuX@7lq9$GqJ_knzX9yWLhnoG#{D54t-u$MLmp5
zr-j{jzAjB!rIqa`YX`RU6WdMBr^8#xg|rxz-Q<FwOfy^AKz!`e%=lftyV7KK-)20|
zE0@>td3$(a2Wjc@v6&WrXv?zCGM_=Lu$*L4liLF`DAIhm2aD#=*TszS%n#Gb`J6qA
zt9M-ni_NXD!5`#i=%<HbNPPR;8k?1NsYKGL?<W^+U_5P3TDT!%X5gzm<MJTbfiG@}
z-;qN}l`js_SZNMymI<X-myhi2J4o=;mD4OeM54@(#mK>)Eut<8yKAQ2<&_<o%C`qi
z)3Rb)k&dGhhiI8+EYKmc)uAb;=@2Ci{63Vl(^W3b+)I&e<tEll(&3)VG1VQESe~Mk
z$;4I07uwxQukTfnVzNN93R@3?A;d$Otmos*m3zr0Te0a5h3?y;#3s@9b0-ro8GQ7^
zuK(Vi=#y1(D1M^1!gNrD%!|*66KN$_3)iji>(cBNeiCk%Q#*9K4)sQX%ht<F_66f=
z^EYYP<){@7b<#Q;TVHNv)Ph9`S?b{zMLuJ*sUeKq1b5$;8(rHon}_BS56$4Pljh}t
zEp%V|&5N}y<>2LN@{AjCSYd4$0(6l1L78k2qiL3b6~4sMeB4boxaHD3xm-`C;v{ew
z>>Q=8rz1s{ZbwfwAGVg23xe2u-xWTepv8W2CC$fmI=0CbMRA#IrneNAjqA*G+$y2*
z{@JP+b!jk7zul~$ZV1R)DUOTGM}m8ShpyQ<oQhkH9oceNxT&-fgNURs+=E3s>fVKV
zwa0Ukmo4yzAYxcsw(f~%xFfD{7Zy?5F8VcTUHJ(KXNby)<IzYw^SwDA`cc_Y1D)r6
zy~M)-$|`Tg$VQ){W6C|{;Jb-}3R-a*PNHx#;)o*GMi)o4)w<rY8IX}%P8t=9=xCNl
zD)QZCNcqyoJTzJoi-Bb}c8PoC<y498z)9LR*TzVUXFxLKASgD;nnRb!Z<wi3%lxEv
z%T;^3YHGt(HzY+}yOkbxlk0U1<~I>FlAbPDvN0sty`TI@?W$zUW<DJOc}g_3KDcG4
z)Ry24bDq*+bSbeLXx>%5eP}6Xv_=UosWOx`{v99BV#_RK!+3nFjrKuPRpyq8O6w=v
z)Zu}@4er}yn==DLc9ObGzDKx|_h$DcV87Ej_M9w~lWii0<cdQoFn;Rms#FSTOY&G7
zjwjoD{(wp}4<dP1h?9^pIH5{$)y(@)^mbJ#lqh1|XiFFelxEDSgLD+Og#6OzxJ?Yr
z9@+s`b<J~oHu$jQJsMfmp1j<(G$*5Fb4$5Ng;PT4=$m8jM>j(fya}P3Ce);^82ztL
z)xQ7zV|V1ks^rNIndO$OB%>diNlnKheKpK?JJ&OtmX^hfHNY-bfX?7heng!N218!7
zRo2D6JzS0SX|s0ra6yxzw&<dv`7%v)w-h{Y_S|?c<5EMxLiHs+@F5LOL;||}OIevy
zdH#=o&-jsjm4@1;Mc$g?&FI%m=_`B=uWEBhqXaDZNPQVStF)e5qzwU0G|JfsprEcO
zYfu*ZCN592u31wiYZe7%+S_(mOJOo*tdycUOmkD(P%d4eD4Nz)-#p(uNwboiui_NQ
z$38Qj9O$5GH|0+(4AGM2gg?QZ@tDSPQkQO+JR2%<1Hs8d30X`Y(oAS>Fr*{@w?Tz*
zB}Zs@`pFGBUR~PVnhyFoqFRNo-|r{SE3dXpH>DtYk*{g@gC2tf6PkPyv6ha>IVn+{
zjR;gCjTu4iZ0RRs(hgcLeMT1~0_cXb+c0fIHb$qpfEqb~wnoe4g`slJ*EhB>>Jgtz
zB&t$cQn@O#$@Rj2f@Zt7G3p_r+RIgQee2rg^$R=Z#`@Ow#<i;*vN}bzw^@$esCT{|
zm%SaoYSuT`Hm*FicJboY`u29``nBE`gNz9DE~1@Pb86+(sou(&-pMoO<jU&l#~)oe
zwX)K=LhIezQ5wopTKrYBcBJ%=ZI1upD=dt?QE$hllT{LLZabSBo9lBnPxe<j8hohQ
zJ#{gwrXpjUKs_!$t1MkmPtHBN^K|dbd|i_Od+YhotIJq5X9lk7Tx!qloj+VP=hFcl
z`l<fOmHz1&Bdd4^iKZ^ntoO7pCM8Tw!_V^Esk7t&JvnzQH{EmQ<ngne*gDcDtG|*b
zg^>^o!7r`OzGu!cb&kRqIZWY(UQ?kfnL09>T-K0S7=$cNqQP)|IJ7UZI?eE+jeO*6
zRd@}E6~8aU0g(x4$qxoRY7Yo~E{;uqnR%@XgJLR<nz1nO(aws=`DPv74|683J&d+P
zVwR;$Q>7Cds#H;;I1tWP%fp&`tgmV{v{T2<kY-??_AE1UDrw-wI?aZ4zLaK&!#2iI
zSO|y5V~^eoky=7+M0*HjiLWnE%F=yb_!(Px04K3(iIArU`bIkHtk8KlOOqosMryUt
zP2s4Lq)W|&#~31yn>_@mWjQ5D!vtCKwV&Y1<&eA=2a3p$CTosWc`*C6uQbR_IR*u=
z7wu_|d`V>n#wY1eQ>5B&hC*gf{{}S6S}ImBYpkSp>1SgZQ7*BJItr&ph(Z?wf7fa1
z;RiEfFewYyAw8Cge9JT~7RY3ZTeNkDIm8ps16Mfr+~ohG&3L;;w3J>85nRCu!IpSR
zKe>kI+T6v6QEZbQV8g`}JxX1xfu_IIYYK%A5>-+(o&mkt8w82e_(ga$^MwuOu&`8F
z@oplLppUp_@-(k;h@drBSLx94c;cAVeIYx}N6pR_FC#pP%}0#=^ayfpG|PCy&DG>8
z?!sgCX9GM8)}sT+E|?E>$GoAr0P)+A)6=YG$k)_gJb*rBJmz>jXXfE%lRZIwc;AFH
z00q5$BE)e2E2KN7O*ZjW`M`xYISXF35G}JXB5YzVXu}xZalC~fpL=Djmf=)lsH)Mx
z9b9zHHZ$hFNXX+gaK>Z;RT5xoUi}r^luZOzd{d>vVisy#Utyi*c`eUWohOa&x)AFG
zP_t(497-uia#>ulj77*l3;+y`sD#Mo*Q^vN@X6FQ&S+pPFr<4j+f3V?i+;brAzfZ#
zNxVQZ4KxwoRkA(#ZX+5@g>MEAGGQ1a^@Lcv(;atR4r6n{Xq#$BGIDy46fzHtha`{l
zqlFPM^lToh2>Q9hx#xP3HFJfEqRwpF*(~b(vgS}*y!wk$eWOs!6J}CIkdS5+pH1!|
z+lVD}LjuRL3(UrMLxiXjQQ^zdO*}k>T12JMtFvpjc(*|4+HX{aD#x7yv^9qu7wrGW
z@=-8RPqM{31!`-`m)xsCl~B=nx7<{(R0);nf(y!7R*oOKNt2o0h>Il5q=aQ_+2|we
zZ4RN5Gr-!}I`lnHwyF`aG$~89J3=a4T-2IC9HHmZx`hEY+b3U8Ge{kcF^%nMknPWI
zH<5_+VT`?s*@GJf3&${uPQ6=u5|YXgDPrguVVm-JXJD$lHC%B_C}^a^p)F8#)9ZvH
z6^d!78cbD87&vksUXYb^e&n``gsn>{jEY{&5EE4^FCCw<!9K-u<hy3pxzISno=yrL
z+>|wQb5K*lZju*o;&8M-_Gb4@PJp^LeY3><0&x%V4b^KzA^co&slbcKMvR!0H)R#2
zmcS{Qtn+47gD{)A4D~d@thb!#O38Y)q21-h3&%B@<dll{{h_3jRD%a_Z{B#&j8lZ@
zHSi4aQ}dolons*4rCB_#tjFWF&*_@~r;nn@p|lWxvD}90)AU;*`a=IX>ruPrIx369
z@YofUdu7~#EBzQR4z)`4oM=>v!$TMK+5}uX5L*W8wvdD_fL)3OI+ihS($sRP4Vc#6
zksL<)p9?5tYGvD*_`06y|7p~sjU8PcYgAuVG$SJr(M#GKZs<|6x%-5fcvHi0nyfV)
z!|aQ4#w^#6VA^y<e1}F`5e73r(}~TRi5rY*u}anz{XS=o49XEhgv4wx4xG1@s-W0$
z2ntn~9w;|M@ebmt3e%_ajsR8Tn{h54ElCk_;6S}89wB2Cn1hj5%S$|+%#MqbNJ3Qb
ie!_&q+f|&+a|IZ?s6uURnHkeRnJ7mF!8IJSD)~>}nqWTw

literal 0
HcmV?d00001

diff --git a/resources/cards.json b/resources/cards.json
index a864853..6c84a52 100644
--- a/resources/cards.json
+++ b/resources/cards.json
@@ -2,289 +2,181 @@
     {
 	"id": "init",
 	"command": "git init",
-        "description": {
-	    "en_EN": "Drag this card into the empty space above to initialize the time machine!",
-	    "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
-	}
+        "description": "Drag this card into the empty space above to initialize the time machine!"
     },
     {
         "id": "clone",
         "command": "git clone ../[remote] .",
-        "description": {
-	    "en_EN": "Create your own copy of someone else's repo.",
-	    "it_IT": "Crea la tua copia personale del Repo di qualcun'altro."
-	}
+        "description": "Create your own copy of someone else's repo."
     },
     {
         "id": "config-name",
         "command": "git config --global user.name [string]",
-        "description": {
-	    "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)",
-	    "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
-	}
+        "description": "Set your name.\n\n(Will not change anything outside of this game.)"
     },
     {
         "id": "config-email",
         "command": "git config --global user.email [string]",
-        "description": {
-	    "en_EN": "Set your email address.",
-	    "it_IT": "Imposta la tua e-mail."
-	}
+        "description": "Set your email address."
     },
     {
         "id": "checkout",
         "command": "git checkout [commit, ref]",
-        "description": {
-	    "en_EN": "Drag this card to a commit or to a branch to travel to it!",
-	    "it_IT": "Trascina questa carta su un commit o su un branch per spostarti su di esso."
-	}
+        "description": "Drag this card to a commit or to a branch to travel to it!"
     },
     {
         "id": "checkout-file",
         "command": "git checkout [file]",
-        "description": {
-	    "en_EN": "Reset changes in a local file.",
-	    "it_IT": "Resetta i cambiamenti in un file locale"
-	}
+        "description": "Reset changes in a local file."
     },
     {
         "id": "checkout-from",
         "command": "git checkout [commit, ref] [file]",
-        "description": {
-	    "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.",
-	    "it_IT": "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
-	}
+        "description": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
     },
     {
         "id": "commit-a",
         "command": "git commit -a",
-        "description": {
-	    "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.",
-	    "it_IT": "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
-	}
+        "description": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
     },
     {
         "id": "commit-auto",
         "command": "git add .; git commit",
-        "description": {
-	    "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!",
-	    "it_IT": "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!"
-	}
+        "description": "Make a new commit containing your current environment! Type in a description of what changed!"
     },
     {
         "id": "merge",
         "command": "git merge [commit, ref]",
-        "description": {
-	    "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.",
-	    "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge."
-	}
+        "description": "Merge the specified timeline into yours. If necessary, will create a merge commit."
     },
     {
         "id": "merge-abort",
         "command": "git merge --abort",
-        "description": {
-	    "en_EN": "Abort the current merge attempt, and reconstruct the previous state.",
-	    "it_IT": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
-	}
+        "description": "Abort the current merge attempt, and reconstruct the previous state."
     },
     {
         "id": "rebase",
         "command": "git rebase [commit]",
-        "description": {
-	    "en_EN": "Put the events in your current timeline on top of the specified one.",
-	    "it_IT": "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata."
-    }
+        "description": "Put the events in your current timeline on top of the specified one."
     },
     {
         "id": "pull",
         "command": "git pull",
-        "description": {
-	    "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.",
-	    "it_IT": "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua."
-	}
+        "description": "Get someone else's version of the current timeline, and try to merge it into yours."
     },
     {
         "id": "fetch",
         "command": "git fetch [remote]",
-        "description": {
-	    "en_EN": "Get a someone else's version of the current timeline.",
-	    "it_IT": "Prende la versione di qualcun'altro della temporale corrente"
-	}
+        "description": "Get a someone else's version of the current timeline."
     },
     {
         "id": "push",
         "command": "git push",
-        "description": {
-	    "en_EN": "Give the current timeline to someone else.",
-	    "it_IT": "Invia la linea temporale corrente a qualcun'altro"
-	}
+        "description": "Give the current timeline to someone else."
     },
     {
         "id": "rebase-interactive",
         "command": "git rebase -i [commit]",
-        "description": {
-	    "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.",
-        "it_IT": "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda."
-	}
+        "description": "Make changes to the events in your current timeline, back to the commit you drag this to."
     },
     {
         "id": "rebase-continue",
         "command": "git rebase --continue",
-        "description": {
-	    "en_EN": "Continue the current rebasing process.",
-	    "it_IT": "Continua il processo di rebasing"
-	}
+        "description": "Continue the current rebasing process."
     },
     {
         "id": "reset-hard",
         "command": "git reset --hard [commit]",
-        "description": {
-	    "en_EN": "Move the branch you're on to the specified commit.",
-	    "it_IT": "Sposta il branch su cui ti trovi al commit specificato."
-	}
+        "description": "Move the branch you're on to the specified commit."
     },
     {
         "id": "reset",
         "command": "git reset [commit]",
-        "description": {
-	    "en_EN": "Jump to the commit, and update the index. Keep the current environment.",
-	    "it_IT": "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
-	}
+        "description": "Jump to the commit, and update the index. Keep the current environment."
     },
     {
         "id": "reset-file",
         "command": "git reset [file]",
-        "description": {
-	    "en_EN": "Reset the index version of a file to the version in the commit you're on.",
-	    "it_IT": "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
-	}
+        "description": "Reset the index version of a file to the version in the commit you're on."
     },
     {
         "id": "cherry-pick",
         "command": "git cherry-pick [commit]",
-        "description": {
-	    "en_EN": "Repeat the specified action on top of your current timeline.",
-	    "it_IT": "Ripete l'azione specificata, in cima alla linea temporale corrente"
-	}
+        "description": "Repeat the specified action on top of your current timeline."
     },
     {
         "id": "revert",
         "command": "git revert [commit]",
-        "description": {
-	    "en_EN": "Make a new commit that reverts the changes of the speicified commit.",
-	    "it_IT": "Crea un nuovo commit che annulla le modifiche del commit specificato."
-	}
+        "description": "Make a new commit that reverts the changes of the speicified commit."
     },
     {
         "id": "bisect-start",
         "command": "git bisect start",
-        "description": {
-	    "en_EN": "Start looking for the commit where things got bad.",
-	    "it_IT": "Inizia a cercare il commit dove le cose sono andate storte"
-	}
+        "description": "Start looking for the commit where things got bad."
     },
     {
         "id": "bisect-good",
         "command": "git bisect good",
-        "description": {
-	    "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!"
-	}
+        "description": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
     },
     {
         "id": "bisect-bad",
         "command": "git bisect bad",
-        "description": {
-	    "en_EN": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!",
-	    "it_IT": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
-	}
+        "description": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
     },
     {
         "id": "add",
         "command": "git add [file]",
-        "description": {
-	    "en_EN": "Update the index version of the file to its current real content.",
-        "it_IT": "Aggiorna la versione in indice del file con il contenuto attuale."
-	}
+        "description": "Update the index version of the file to its current real content."
     },
     {
         "id": "rm",
         "command": "git rm [file]",
-        "description": {
-	    "en_EN": "Delete a file both in the working directory, as well as the index.",
-	    "it_IT": "Cancella un file sia dalla cartella di lavoro corrente che dall'indice."
-	}
+        "description": "Delete a file both in the working directory, as well as the index."
     },
     {
         "id": "commit",
         "command": "git commit",
-        "description": {
-	    "en_EN": "Make a commit from the current index.",
-	    "it_IT": "Crea un commit dall'indice corrente."
-	}
+        "description": "Make a commit from the current index."
     },
     {
         "id": "show",
         "command": "git show [commit]",
-        "description": {
-	    "en_EN": "Show what changed in the commit.",
-	    "it_IT": "Mostra cosa è cambiato nel commit."
-	}
+        "description": "Show what changed in the commit."
     },
     {
         "id": "branch",
         "command": "git branch [string]",
-        "description": {
-	    "en_EN": "Create a new branch at your current location.",
-	    "it_IT": "Crea un nuovo branch alla posizione corrente."
-	}
+        "description": "Create a new branch at your current location."
     },
     {
         "id": "branch-delete",
         "command": "git branch -D [ref]",
-        "description": {
-	    "en_EN": "Delete a branch.",
-	    "it_IT": "Cancella un branch."
-	}
+        "description": "Delete a branch."
     },
     {
         "id": "reflog",
         "command": "git reflog [ref, head]",
-        "description": {
-	    "en_EN": "Display a log of where the ref pointed to in the past.",
-	    "it_IT": "Mostra un log di dove il riferimento (ref) ha puntato in passato."
-	}
+        "description": "Display a log of where the ref pointed to in the past."
     },
     {
         "id": "file-new",
         "command": "touch [string]",
-        "description": {
-	    "en_EN": "Create a new file.",
-	    "it_IT": "Crea un nuovo file."
-	}
+        "description": "Create a new file."
     },
     {
         "id": "file-delete",
         "command": "rm [file]",
-        "description": {
-	    "en_EN": "Delete a file.",
-	    "it_IT": "Cancella un file."
-	}
+        "description": "Delete a file."
     },
     {
         "id": "file-rename",
         "command": "mv [file] [string]",
-        "description": {
-	    "en_EN": "Rename a file.",
-	    "it_IT": "Rinomina un file."
-	}
+        "description": "Rename a file."
     },
     {
         "id": "file-copy",
         "command": "cp [file] [string]",
-        "description": {
-	    "en_EN": "Make a copy of a file.",
-	    "it_IT": "Crea una copia di un file."
-	}
+        "description": "Make a copy of a file."
     }
 ]
diff --git a/scenes/cards.gd b/scenes/cards.gd
index f1696ec..aeb360c 100644
--- a/scenes/cards.gd
+++ b/scenes/cards.gd
@@ -40,7 +40,7 @@ func draw_card(card):
 	new_card.id = card["id"]
 	new_card.command = card["command"]
 	# TODO: Make better game.os_lang + "_" + game.os_lang.to_upper()
-	new_card.description = card["description"][game.os_lang + "_" + game.os_lang.to_upper()]
+	new_card.description = tr(card["description"])
 	new_card.energy = 0 #card.energy
 	new_card.position = Vector2(rect_size.x, rect_size.y*2)
 	add_child(new_card)
diff --git a/scenes/level.gd b/scenes/level.gd
index d978784..3f6ebdf 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -21,6 +21,7 @@ func load(path):
 		var config = helpers.parse(path)
 		
 		title = config.get("title", slug)
+		print(tr(title))
 		description = config.get("description", "(no description)")
 		
 		# Surround all lines indented with four spaces with [code] tags.
@@ -42,7 +43,7 @@ func load(path):
 		if cli_hints != "":
 			description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]"
 		
-		congrats = config.get("congrats", "GOOD_JOB")
+		congrats = config.get("congrats", tr("Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'."))
 		cards = Array(config.get("cards", "").split(" "))
 		if cards == [""]:
 			cards = []

From c2e0eaffb6de3009f5bc3b6d6206d266a04decdc Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 18 Aug 2022 17:52:39 +0200
Subject: [PATCH 36/49] splited .po files for cards, levels and some one

---
 levels/branches/checkout-commit |   2 +-
 levels/intro/init               |   2 +-
 levels/intro/risky              |   2 +-
 locale/it.po                    | 152 +-----------
 locale/it_cards.po              | 164 +++++++++++++
 locale/it_levels.po             | 401 ++++++++++++++++++++++++++++++++
 project.godot                   |   2 +-
 scenes/chapter.gd               |   6 +-
 scenes/level.gd                 |  10 +-
 scenes/levels.gd                |   7 +-
 10 files changed, 583 insertions(+), 165 deletions(-)
 create mode 100644 locale/it_cards.po
 create mode 100644 locale/it_levels.po

diff --git a/levels/branches/checkout-commit b/levels/branches/checkout-commit
index 87061d8..258434d 100644
--- a/levels/branches/checkout-commit
+++ b/levels/branches/checkout-commit
@@ -3,7 +3,7 @@ cards = checkout commit-auto
 
 [description]
 
-The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!)
+The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the "checkout" card! (Try it!)
 
 Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!
 
diff --git a/levels/intro/init b/levels/intro/init
index ea0426e..01e6071 100644
--- a/levels/intro/init
+++ b/levels/intro/init
@@ -5,7 +5,7 @@ cards = init
 
 You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:
 
-"To do anything with a time machine, you first need to initialize it!"
+'To do anything with a time machine, you first need to initialize it!'
 
 Drag that blue card up to play it!
 
diff --git a/levels/intro/risky b/levels/intro/risky
index a5e7239..de8560a 100644
--- a/levels/intro/risky
+++ b/levels/intro/risky
@@ -3,7 +3,7 @@ cards =
 
 [description]
 
-So you have decided to apply for time travel school, to learn how to use this time machine called "Git"!
+So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!
 
 How exciting!
 
diff --git a/locale/it.po b/locale/it.po
index 59b3509..591bde3 100644
--- a/locale/it.po
+++ b/locale/it.po
@@ -265,154 +265,4 @@ msgstr "Il testo qui"
 
 #: oh-my-git/scenes/title.tscn:74
 msgid "Language"
-msgstr "Linguaggio"
-
-#: CARDS DESCRIPTION
-#: oh-my-git/resources/cards.json:6
-msgid "Drag this card into the empty space above to initialize the time machine!"
-msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
-
-#: oh-my-git/resources/cards.json:14
-msgid "Create your own copy of someone else's repo."
-msgstr "Crea la tua copia personale del Repo di qualcun'altro."
-
-#: oh-my-git/resources/cards.json:22
-msgid "Set your name.\n\n(Will not change anything outside of this game.)"
-msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
-
-#: oh-my-git/resources/cards.json:30
-msgid "Set your email address."
-msgstr "Imposta la tua e-mail."
-
-#: oh-my-git/resources/cards.json:38
-msgid "Drag this card to a commit or to a branch to travel to it!"
-msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso."
-
-#: oh-my-git/resources/cards.json:46
-msgid "Reset changes in a local file."
-msgstr "Resetta i cambiamenti in un file locale"
-
-#: oh-my-git/resources/cards.json:54
-msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
-msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
-
-#: oh-my-git/resources/cards.json:62
-msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
-msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
-
-#: oh-my-git/resources/cards.json:70
-msgid "Make a new commit containing your current environment! Type in a description of what changed!"
-msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!"
-
-#: oh-my-git/resources/cards.json:78
-msgid "Merge the specified timeline into yours. If necessary, will create a merge commit."
-msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge."
-
-#: oh-my-git/resources/cards.json:86
-msgid "Abort the current merge attempt, and reconstruct the previous state."
-msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
-
-#: oh-my-git/resources/cards.json:94
-msgid "Put the events in your current timeline on top of the specified one."
-msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata."
-
-#: oh-my-git/resources/cards.json:102
-msgid "Get someone else's version of the current timeline, and try to merge it into yours."
-msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua."
-
-#: oh-my-git/resources/cards.json:110
-msgid "Get a someone else's version of the current timeline."
-msgstr "Prende la versione di qualcun'altro della temporale corrente"
-
-#: oh-my-git/resources/cards.json:118
-msgid "Give the current timeline to someone else."
-msgstr "Invia la linea temporale corrente a qualcun'altro"
-
-#: oh-my-git/resources/cards.json:126
-msgid "Make changes to the events in your current timeline, back to the commit you drag this to."
-msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda."
-
-#: oh-my-git/resources/cards.json:134
-msgid "Continue the current rebasing process."
-msgstr "Continua il processo di rebasing"
-
-#: oh-my-git/resources/cards.json:142
-msgid "Move the branch you're on to the specified commit."
-msgstr "Sposta il branch su cui ti trovi al commit specificato."
-
-#: oh-my-git/resources/cards.json:150
-msgid "Jump to the commit, and update the index. Keep the current environment."
-msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
-
-#: oh-my-git/resources/cards.json:158
-msgid "Reset the index version of a file to the version in the commit you're on."
-msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
-
-#: oh-my-git/resources/cards.json:166
-msgid "Repeat the specified action on top of your current timeline."
-msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente"
-
-#: oh-my-git/resources/cards.json:174
-msgid "Make a new commit that reverts the changes of the speicified commit."
-msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato."
-
-#: oh-my-git/resources/cards.json:182
-msgid "Start looking for the commit where things got bad."
-msgstr "Inizia a cercare il commit dove le cose sono andate storte"
-
-#: oh-my-git/resources/cards.json:190
-msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
-msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!"
-
-#: oh-my-git/resources/cards.json:198
-msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
-msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
-
-#: oh-my-git/resources/cards.json:206
-msgid "Update the index version of the file to its current real content."
-msgstr "Aggiorna la versione in indice del file con il contenuto attuale."
-
-#: oh-my-git/resources/cards.json:214
-msgid "Delete a file both in the working directory, as well as the index."
-msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice."
-
-#: oh-my-git/resources/cards.json:222
-msgid "Make a commit from the current index."
-msgstr "Crea un commit dall'indice corrente."
-
-#: oh-my-git/resources/cards.json:230
-msgid "Show what changed in the commit."
-msgstr "Mostra cosa è cambiato nel commit."
-
-#: oh-my-git/resources/cards.json:238
-msgid "Create a new branch at your current location."
-msgstr "Crea un nuovo branch alla posizione corrente."
-
-#: oh-my-git/resources/cards.json:246
-msgid "Delete a branch."
-msgstr "Cancella un branch."
-
-#: oh-my-git/resources/cards.json:254
-msgid "Display a log of where the ref pointed to in the past."
-msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato."
-
-#: oh-my-git/resources/cards.json:262
-msgid "Create a new file."
-msgstr "Crea un nuovo file."
-
-#: oh-my-git/resources/cards.json:270
-msgid "Delete a file."
-msgstr "Cancella un file."
-
-#: oh-my-git/resources/cards.json:278
-msgid "Rename a file."
-msgstr "Rinomina un file."
-
-#: oh-my-git/resources/cards.json:286
-msgid "Make a copy of a file."
-msgstr "Crea una copia di un file."
-
-#: LEVELS
-#: oh-my-git/levels/
-msgid "Amici"
-msgstr "Friend"
+msgstr "Linguaggio"
\ No newline at end of file
diff --git a/locale/it_cards.po b/locale/it_cards.po
new file mode 100644
index 0000000..8e12c7f
--- /dev/null
+++ b/locale/it_cards.po
@@ -0,0 +1,164 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# Automatically generated, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.10.3\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: CARDS DESCRIPTION
+#: oh-my-git/resources/cards.json:6
+msgid "Drag this card into the empty space above to initialize the time machine!"
+msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+
+#: oh-my-git/resources/cards.json:14
+msgid "Create your own copy of someone else's repo."
+msgstr "Crea la tua copia personale del Repo di qualcun'altro."
+
+#: oh-my-git/resources/cards.json:22
+msgid "Set your name.\n\n(Will not change anything outside of this game.)"
+msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
+
+#: oh-my-git/resources/cards.json:30
+msgid "Set your email address."
+msgstr "Imposta la tua e-mail."
+
+#: oh-my-git/resources/cards.json:38
+msgid "Drag this card to a commit or to a branch to travel to it!"
+msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso."
+
+#: oh-my-git/resources/cards.json:46
+msgid "Reset changes in a local file."
+msgstr "Resetta i cambiamenti in un file locale"
+
+#: oh-my-git/resources/cards.json:54
+msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
+msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
+
+#: oh-my-git/resources/cards.json:62
+msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
+msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
+
+#: oh-my-git/resources/cards.json:70
+msgid "Make a new commit containing your current environment! Type in a description of what changed!"
+msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!"
+
+#: oh-my-git/resources/cards.json:78
+msgid "Merge the specified timeline into yours. If necessary, will create a merge commit."
+msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge."
+
+#: oh-my-git/resources/cards.json:86
+msgid "Abort the current merge attempt, and reconstruct the previous state."
+msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente."
+
+#: oh-my-git/resources/cards.json:94
+msgid "Put the events in your current timeline on top of the specified one."
+msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata."
+
+#: oh-my-git/resources/cards.json:102
+msgid "Get someone else's version of the current timeline, and try to merge it into yours."
+msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua."
+
+#: oh-my-git/resources/cards.json:110
+msgid "Get a someone else's version of the current timeline."
+msgstr "Prende la versione di qualcun'altro della temporale corrente"
+
+#: oh-my-git/resources/cards.json:118
+msgid "Give the current timeline to someone else."
+msgstr "Invia la linea temporale corrente a qualcun'altro"
+
+#: oh-my-git/resources/cards.json:126
+msgid "Make changes to the events in your current timeline, back to the commit you drag this to."
+msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda."
+
+#: oh-my-git/resources/cards.json:134
+msgid "Continue the current rebasing process."
+msgstr "Continua il processo di rebasing"
+
+#: oh-my-git/resources/cards.json:142
+msgid "Move the branch you're on to the specified commit."
+msgstr "Sposta il branch su cui ti trovi al commit specificato."
+
+#: oh-my-git/resources/cards.json:150
+msgid "Jump to the commit, and update the index. Keep the current environment."
+msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
+
+#: oh-my-git/resources/cards.json:158
+msgid "Reset the index version of a file to the version in the commit you're on."
+msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
+
+#: oh-my-git/resources/cards.json:166
+msgid "Repeat the specified action on top of your current timeline."
+msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente"
+
+#: oh-my-git/resources/cards.json:174
+msgid "Make a new commit that reverts the changes of the speicified commit."
+msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato."
+
+#: oh-my-git/resources/cards.json:182
+msgid "Start looking for the commit where things got bad."
+msgstr "Inizia a cercare il commit dove le cose sono andate storte"
+
+#: oh-my-git/resources/cards.json:190
+msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!"
+
+#: oh-my-git/resources/cards.json:198
+msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!"
+
+#: oh-my-git/resources/cards.json:206
+msgid "Update the index version of the file to its current real content."
+msgstr "Aggiorna la versione in indice del file con il contenuto attuale."
+
+#: oh-my-git/resources/cards.json:214
+msgid "Delete a file both in the working directory, as well as the index."
+msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice."
+
+#: oh-my-git/resources/cards.json:222
+msgid "Make a commit from the current index."
+msgstr "Crea un commit dall'indice corrente."
+
+#: oh-my-git/resources/cards.json:230
+msgid "Show what changed in the commit."
+msgstr "Mostra cosa è cambiato nel commit."
+
+#: oh-my-git/resources/cards.json:238
+msgid "Create a new branch at your current location."
+msgstr "Crea un nuovo branch alla posizione corrente."
+
+#: oh-my-git/resources/cards.json:246
+msgid "Delete a branch."
+msgstr "Cancella un branch."
+
+#: oh-my-git/resources/cards.json:254
+msgid "Display a log of where the ref pointed to in the past."
+msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato."
+
+#: oh-my-git/resources/cards.json:262
+msgid "Create a new file."
+msgstr "Crea un nuovo file."
+
+#: oh-my-git/resources/cards.json:270
+msgid "Delete a file."
+msgstr "Cancella un file."
+
+#: oh-my-git/resources/cards.json:278
+msgid "Rename a file."
+msgstr "Rinomina un file."
+
+#: oh-my-git/resources/cards.json:286
+msgid "Make a copy of a file."
+msgstr "Crea una copia di un file."
\ No newline at end of file
diff --git a/locale/it_levels.po b/locale/it_levels.po
new file mode 100644
index 0000000..1bd7b4f
--- /dev/null
+++ b/locale/it_levels.po
@@ -0,0 +1,401 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# Automatically generated, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.10.3\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: TITLE
+#: oh-my-git/levels/
+msgid "Friend"
+msgstr "Amici"
+
+msgid "friend"
+msgstr "amici"
+
+
+#: DESCRIPTION
+msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git."
+msgstr "PIPPO"
+
+msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!"
+msgstr "PIPPO"
+
+msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!"
+msgstr "PIPPO"
+
+msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!"
+msgstr "PIPPO"
+
+msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)"
+msgstr "PIPPO"
+
+msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!"
+msgstr "PIPPO"
+
+msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!"
+msgstr "PIPPO"
+
+msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!"
+msgstr "PIPPO"
+
+msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!"
+msgstr "PIPPO"
+
+msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!"
+msgstr "PIPPO"
+
+msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)"
+msgstr "PIPPO"
+
+msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!"
+msgstr "PIPPO"
+
+msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around."
+msgstr "PIPPO"
+
+msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n    git checkout\n\non the branch names, and then using\n\n    git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!"
+msgstr "PIPPO"
+
+msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!"
+msgstr "PIPPO"
+
+msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one."
+msgstr "PIPPO"
+
+msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened."
+msgstr "PIPPO"
+
+msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!"
+msgstr "PIPPO"
+
+msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!"
+msgstr "PIPPO"
+
+msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!"
+msgstr "PIPPO"
+
+msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!"
+msgstr "PIPPO"
+
+msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!"
+msgstr "PIPPO"
+
+msgid "Both you and your friend have been working on the file, and want to sync up!"
+msgstr "PIPPO"
+
+msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!"
+msgstr "PIPPO"
+
+msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!"
+msgstr "PIPPO"
+
+msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!"
+msgstr "PIPPO"
+
+msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n    git checkout [commit] [file]"
+msgstr "PIPPO"
+
+msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again."
+msgstr "PIPPO"
+
+msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`"
+msgstr "PIPPO"
+
+msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n    git reflog"
+msgstr "PIPPO"
+
+msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`."
+msgstr "PIPPO"
+
+msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?"
+msgstr "PIPPO"
+
+msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n    git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n    git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n    git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "If you want to inspect your stash stack, use the command\n    git stash list\n    \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n    git stash clear\nIf you only want to discard a certain stash entry, you can use\n    git stash drop <stash>\n    \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n    git stash branch <branchname> <stash>\nIf you just want to use the latest stash entry, you can leave the <stash> option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n    git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n    git tag <tag-name> \n    \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "You added way too many tags? No prob! Delete them with\n\n    git tag -d <tag-name>\n    \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n    git tag <tag-name> <commit-hash>\n    \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n    git push <remote> <tag-name>\nOr all tags with:\n    git push <remote> --tags\n    \nDeleting tags on your remote works with: \n    git push <remote> --delete <tag-name>\n    \nYou can also sync \n    git fetch <remote> --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository."
+msgstr "PIPPO"
+
+msgid "This is an empty sandbox you can play around in."
+msgstr "PIPPO"
+
+msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?"
+msgstr "PIPPO"
+
+msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!"
+msgstr "PIPPO"
+
+msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git."
+msgstr "PIPPO"
+
+msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!"
+msgstr "PIPPO"
+
+msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!"
+msgstr "PIPPO"
+
+msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!"
+msgstr "PIPPO"
+
+msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)"
+msgstr "PIPPO"
+
+msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!"
+msgstr "PIPPO"
+
+msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!"
+msgstr "PIPPO"
+
+msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!"
+msgstr "PIPPO"
+
+msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!"
+msgstr "PIPPO"
+
+msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!"
+msgstr "PIPPO"
+
+msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)"
+msgstr "PIPPO"
+
+msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!"
+msgstr "PIPPO"
+
+msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around."
+msgstr "PIPPO"
+
+msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n    git checkout\n\non the branch names, and then using\n\n    git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!"
+msgstr "PIPPO"
+
+msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!"
+msgstr "PIPPO"
+
+msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one."
+msgstr "PIPPO"
+
+msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened."
+msgstr "PIPPO"
+
+msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!"
+msgstr "PIPPO"
+
+msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!"
+msgstr "PIPPO"
+
+msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!"
+msgstr "PIPPO"
+
+msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!"
+msgstr "PIPPO"
+
+msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!"
+msgstr "PIPPO"
+
+msgid "Both you and your friend have been working on the file, and want to sync up!"
+msgstr "PIPPO"
+
+msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!"
+msgstr "PIPPO"
+
+msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!"
+msgstr "PIPPO"
+
+msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!"
+msgstr "PIPPO"
+
+msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n    git checkout [commit] [file]"
+msgstr "PIPPO"
+
+msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again."
+msgstr "PIPPO"
+
+msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`"
+msgstr "PIPPO"
+
+msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n    git reflog"
+msgstr "PIPPO"
+
+msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`."
+msgstr "PIPPO"
+
+msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?"
+msgstr "PIPPO"
+
+msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n    git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n    git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n    git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "If you want to inspect your stash stack, use the command\n    git stash list\n    \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n    git stash clear\nIf you only want to discard a certain stash entry, you can use\n    git stash drop <stash>\n    \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n    git stash branch <branchname> <stash>\nIf you just want to use the latest stash entry, you can leave the <stash> option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n    git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n    git tag <tag-name> \n    \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "You added way too many tags? No prob! Delete them with\n\n    git tag -d <tag-name>\n    \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n    git tag <tag-name> <commit-hash>\n    \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
+msgstr "PIPPO"
+
+msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n    git push <remote> <tag-name>\nOr all tags with:\n    git push <remote> --tags\n    \nDeleting tags on your remote works with: \n    git push <remote> --delete <tag-name>\n    \nYou can also sync \n    git fetch <remote> --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository."
+msgstr "PIPPO"
+
+msgid "This is an empty sandbox you can play around in."
+msgstr "PIPPO"
+
+msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?"
+msgstr "PIPPO"
+
+msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!"
+msgstr "PIPPO"
+
+#: HITS
+msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!"
+msgstr "PIPPO"
+
+msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)"
+msgstr "PIPPO"
+
+msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice."
+msgstr "PIPPO"
+
+msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n    rm *web"
+msgstr "PIPPO"
+
+msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!"
+msgstr "PIPPO"
+
+msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n    git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n    git checkout HEAD~2"
+msgstr "PIPPO"
+
+msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!"
+msgstr "PIPPO"
+
+msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`."
+msgstr "PIPPO"
+
+msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!"
+msgstr "PIPPO"
+
+msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!"
+msgstr "PIPPO"
+
+msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)"
+msgstr "PIPPO"
+
+msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice."
+msgstr "PIPPO"
+
+msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n    rm *web"
+msgstr "PIPPO"
+
+msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!"
+msgstr "PIPPO"
+
+msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n    git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n    git checkout HEAD~2"
+msgstr "PIPPO"
+
+msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!"
+msgstr "PIPPO"
+
+msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`."
+msgstr "PIPPO"
+
+msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!"
+msgstr "PIPPO"
+
+
+#############################################
+
+#: CONGRAT
+msgid "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'."
+msgstr "PIPPO"
+msgid "Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone!\n\nYou clearly need a better solution.\n\n(Click 'Next Level' as soon as you're ready!)"
+msgstr "PIPPO"
+msgid "Okay, this kind of works.\n\nBut you're a bit worried that you'll end up with hundreds of copies of this form, and it will be hard to keep track of all of them.\n\nAnd especially when working with other people, sending copies back and forth doesn't seem ideal.\n\nYou can't wait to try these time machines!"
+msgstr "PIPPO"
+msgid "Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!"
+msgstr "PIPPO"
+msgid "Cool! Instead of using the playing cards, you can also do everything via the command line!\n\nThe command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface."
+msgstr "PIPPO"
+msgid "Nice! You can try making some additional commits. When you feel comfortable, click on 'Next Level'."
+msgstr "PIPPO"
+msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!"
+msgstr "PIPPO"
+msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
+msgstr "PIPPO"
+msgid "Don't you immediately feel more at home?"
+msgstr "PIPPO"
+msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..."
+msgstr "PIPPO"
+msgid "Whew, good job! This seems like a *much* better outcome.\n\nFeel free to add more parallel timelines, or make them longer.\n\nIf you're ready, our next mission is already waiting..."
+msgstr "PIPPO"
+msgid "Now you can travel between those branches easily (using `git checkout`) - try it!\n\nYour friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!"
+msgstr "PIPPO"
+msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)"
+msgstr "PIPPO"
+msgid "I wonder if you're more relaxed when you *sleep* in parallel timelines..."
+msgstr "PIPPO"
+msgid "Yum, that sounds like a good breakfast!"
+msgstr "PIPPO"
+msgid "Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.\n\nIt's really hard to actually *destroy* stuff with your time machine."
+msgstr "PIPPO"
+msgid "Feel free to reset the level and try the other strategy! Which one do you like better?"
+msgstr "PIPPO"
+msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..."
+msgstr "PIPPO"
+msgid "Nice stash you got there! :)"
+msgstr "PIPPO"
+msgid "Yay, you got your changes back! :)"
+msgstr "PIPPO"
+msgid "All clear! :)"
+msgstr "PIPPO"
+msgid "Stashed changes are in a new branch! :)"
+msgstr "PIPPO"
+msgid "Nice! You tagged your first commit :)"
+msgstr "PIPPO"
+msgid "Well done :)"
+msgstr "PIPPO"
\ No newline at end of file
diff --git a/project.godot b/project.godot
index 59db029..05c7cc7 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,7 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://locale/it.po" )
+translations=PoolStringArray( "res://locale/it.po", "res://locale/it_levels.po", "res://locale/it_cards.po" )
 locale_filter=[ 0, [  ] ]
 
 [network]
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index 17f75b5..9f2abc2 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -13,7 +13,7 @@ func load(path):
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open("res://levels/" + game.os_lang + "/%s" % slug)
+	dir.open("res://levels/%s" % slug)
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +28,7 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +42,7 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load("res://levels/" + game.os_lang + "/%s/%s" % [slug, l])
+		level.load("res://levels/%s/%s" % [slug, l])
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/level.gd b/scenes/level.gd
index 3f6ebdf..7d277f1 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -20,9 +20,9 @@ func load(path):
 		# This is a new-style level.
 		var config = helpers.parse(path)
 		
-		title = config.get("title", slug)
-		print(tr(title))
+		title = tr(config.get("title", slug))
 		description = config.get("description", "(no description)")
+		description = tr(description.replace("\"", "\'"))
 		
 		# Surround all lines indented with four spaces with [code] tags.
 		var monospace_regex = RegEx.new()
@@ -31,9 +31,11 @@ func load(path):
 		description = description.split("---")
 		
 		var cli_hints = config.get("cli", "")
+		cli_hints = tr(cli_hints.replace("\"", "\'"))
 		# Also do this substitution in the CLI hints.
 		cli_hints = monospace_regex.sub(cli_hints, "\n      [code][color=#bbbb5d]$1[/color][/code]", true)
 		
+		
 		# Also replace `code` with [code] tags.
 		var monospace_inline_regex = RegEx.new()
 		monospace_inline_regex.compile("`([^`]+)`")
@@ -43,7 +45,9 @@ func load(path):
 		if cli_hints != "":
 			description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]"
 		
-		congrats = config.get("congrats", tr("Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'."))
+		congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")
+		congrats = congrats.replace("\"", "\'")
+		congrats = tr(congrats)
 		cards = Array(config.get("cards", "").split(" "))
 		if cards == [""]:
 			cards = []
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 3065f76..0efb4dd 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -3,14 +3,13 @@ extends Node
 var chapters
 
 func _ready():
-	var lang = game.os_lang
 	reload()
 	
 func reload():
 	chapters = []
 	
 	var dir = Directory.new()
-	dir.open("res://levels/" + game.os_lang)
+	dir.open("res://levels/")
 	dir.list_dir_begin()
 
 	var chapter_names = []
@@ -27,7 +26,7 @@ func reload():
 	
 	var final_chapter_sequence = []
 	
-	var chapter_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/sequence", "").split("\n"))
+	var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n"))
 	
 	for chapter in chapter_sequence:
 		if chapter == "":
@@ -41,5 +40,5 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load("res://levels/" + game.os_lang + "/%s" % c)
+		chapter.load("res://levels/%s" % c)
 		chapters.push_back(chapter)

From 27db39c2fbbeaeb328a046c0e17859b4def1714a Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Thu, 18 Aug 2022 22:55:42 +0200
Subject: [PATCH 37/49] Some modification .po files

---
 locale/it_levels.po | 434 +++++++++++++++++++++++++++++++++++++++++++-
 scenes/level.gd     |   1 +
 scenes/title.tscn   |   4 +
 3 files changed, 438 insertions(+), 1 deletion(-)

diff --git a/locale/it_levels.po b/locale/it_levels.po
index 1bd7b4f..0c625d2 100644
--- a/locale/it_levels.po
+++ b/locale/it_levels.po
@@ -398,4 +398,436 @@ msgstr "PIPPO"
 msgid "Nice! You tagged your first commit :)"
 msgstr "PIPPO"
 msgid "Well done :)"
-msgstr "PIPPO"
\ No newline at end of file
+msgstr "PIPPO"
+
+#: Command
+--- Debugging process started ---
+Godot Engine v3.5.stable.official.991bb6ac7 - https://godotengine.org
+OpenGL ES 3.0 Renderer: Mesa Intel(R) UHD Graphics 620 (KBL GT2)
+Async. shader compilation: OFF
+ 
+msgid "Add another line to form.txt!"
+msgstr "PIPPO"
+
+msgid "Add another line to form2_really_final.txt!"
+msgstr "PIPPO"
+
+msgid "Initialize the time machine!"
+msgstr "PIPPO"
+
+msgid "Initialize the time machine!"
+msgstr "PIPPO"
+
+msgid "Make a snapshot of the glass (a "commit")"
+msgstr "PIPPO"
+
+msgid "Change the contents of the glass!"
+msgstr "PIPPO"
+
+msgid "And make a second commit!"
+msgstr "PIPPO"
+
+msgid "Get the second commit from your teacher using `git pull`."
+msgstr "PIPPO"
+
+msgid "Add your name to the list of students"
+msgstr "PIPPO"
+
+msgid "Commit your result."
+msgstr "PIPPO"
+
+msgid "And use `git push` to send it to your teacher!"
+msgstr "PIPPO"
+
+msgid "Remove all spider webs."
+msgstr "PIPPO"
+
+msgid "But make sure you keep your bed!"
+msgstr "PIPPO"
+
+msgid "Add two more pieces of furniture"
+msgstr "PIPPO"
+
+msgid "Make sure the colors match your bed's color."
+msgstr "PIPPO"
+
+msgid "Restore sisterly peace."
+msgstr "PIPPO"
+
+msgid "Make sure that the child is happy."
+msgstr "PIPPO"
+
+msgid "Make sure that the lion gets something to eat."
+msgstr "PIPPO"
+
+msgid "Create a branch called 'birthday' that points to the birthday timeline."
+msgstr "PIPPO"
+
+msgid "Create a branch called 'concert' that points to the concert timeline."
+msgstr "PIPPO"
+
+msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit"
+msgstr "PIPPO"
+
+msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit."
+msgstr "PIPPO"
+
+msgid "Find the bad branches and delete them. Keep only the best one."
+msgstr "PIPPO"
+
+msgid "Did you eat a baguette on the baguette branch?"
+msgstr "PIPPO"
+
+msgid "Did you drink a coffee on the coffee branch?"
+msgstr "PIPPO"
+
+msgid "Did you eat a donut on the donut branch?"
+msgstr "PIPPO"
+
+msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut."
+msgstr "PIPPO"
+
+msgid "Be on a merge commit."
+msgstr "PIPPO"
+
+msgid "Make a breakfast compromise in the 'main' branch."
+msgstr "PIPPO"
+
+msgid "Pick the timeline that's clearer, and make the alarm go off!"
+msgstr "PIPPO"
+
+msgid "Add the candle."
+msgstr "PIPPO"
+
+msgid "Make a commit."
+msgstr "PIPPO"
+
+msgid "Make a change to the candle."
+msgstr "PIPPO"
+
+msgid "Add the candle."
+msgstr "PIPPO"
+
+msgid "Make a commit."
+msgstr "PIPPO"
+
+msgid "Reset the changes in the green and blue candles!"
+msgstr "PIPPO"
+
+msgid "And make a commit!"
+msgstr "PIPPO"
+
+msgid "Make changes to all three objects, to form a logical sequence of events!"
+msgstr "PIPPO"
+
+msgid "Only add one of these changes!"
+msgstr "PIPPO"
+
+msgid "And make a commit."
+msgstr "PIPPO"
+
+msgid "Make a second commit that only records a single change."
+msgstr "PIPPO"
+
+msgid "And a third one."
+msgstr "PIPPO"
+
+msgid "Got the second line from your friend"
+msgstr "PIPPO"
+
+msgid "Got the fourth line from your friend."
+msgstr "PIPPO"
+
+msgid "The friend got a third line from you"
+msgstr "PIPPO"
+
+msgid "The friend got a fifth line from you"
+msgstr "PIPPO"
+
+msgid "Commit your local changes."
+msgstr "PIPPO"
+
+msgid "Look at your friend's suggestion, make a compromise, and push it back."
+msgstr "PIPPO"
+
+msgid "Order all tree branches into one and move the main branch ref"
+msgstr "PIPPO"
+
+msgid "Reorder the commits to dress yourself in the correct way"
+msgstr "PIPPO"
+
+msgid "Restore the essay to contain "important content""
+msgstr "PIPPO"
+
+msgid "Get the first version of your essay, and make a new commit with it."
+msgstr "PIPPO"
+
+msgid "In the last main commit, the numbers file contains the numbers from 1 to 10."
+msgstr "PIPPO"
+
+msgid "The commit message of that commit is "More numbers"."
+msgstr "PIPPO"
+
+msgid "The commit with the typo is not part of the main branch anymore."
+msgstr "PIPPO"
+
+msgid "The team's main branch no longer contains the bad thing."
+msgstr "PIPPO"
+
+msgid "And the history has not been modified."
+msgstr "PIPPO"
+
+msgid "Find out where you've been before, and go back there!"
+msgstr "PIPPO"
+
+msgid "Find the last good commit"
+msgstr "PIPPO"
+
+msgid "Did you stash the current changes?"
+msgstr "PIPPO"
+
+msgid "Did you pop the changes from the stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you clear your stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you create a new branch from the stashed changes?"
+msgstr "PIPPO"
+
+msgid "Did you resolve the confict and commit?"
+msgstr "PIPPO"
+
+msgid "Did you clear stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you create a new tag?"
+msgstr "PIPPO"
+
+msgid "Did you remove all tags?"
+msgstr "PIPPO"
+
+msgid "Did you create a new tag?"
+msgstr "PIPPO"
+
+msgid "v1 tag in your repo"
+msgstr "PIPPO"
+
+msgid "v2 tag in your repo"
+msgstr "PIPPO"
+
+msgid "v2 tag in the remote"
+msgstr "PIPPO"
+
+msgid "Add another line to form.txt!"
+msgstr "PIPPO"
+
+msgid "Add another line to form2_really_final.txt!"
+msgstr "PIPPO"
+
+msgid "Initialize the time machine!"
+msgstr "PIPPO"
+
+msgid "Initialize the time machine!"
+msgstr "PIPPO"
+
+msgid "Make a snapshot of the glass (a "commit")"
+msgstr "PIPPO"
+
+msgid "Change the contents of the glass!"
+msgstr "PIPPO"
+
+msgid "And make a second commit!"
+msgstr "PIPPO"
+
+msgid "Get the second commit from your teacher using `git pull`."
+msgstr "PIPPO"
+
+msgid "Add your name to the list of students"
+msgstr "PIPPO"
+
+msgid "Commit your result."
+msgstr "PIPPO"
+
+msgid "And use `git push` to send it to your teacher!"
+msgstr "PIPPO"
+
+msgid "Remove all spider webs."
+msgstr "PIPPO"
+
+msgid "But make sure you keep your bed!"
+msgstr "PIPPO"
+
+msgid "Add two more pieces of furniture"
+msgstr "PIPPO"
+
+msgid "Make sure the colors match your bed's color."
+msgstr "PIPPO"
+
+msgid "Restore sisterly peace."
+msgstr "PIPPO"
+
+msgid "Make sure that the child is happy."
+msgstr "PIPPO"
+
+msgid "Make sure that the lion gets something to eat."
+msgstr "PIPPO"
+
+msgid "Create a branch called 'birthday' that points to the birthday timeline."
+msgstr "PIPPO"
+
+msgid "Create a branch called 'concert' that points to the concert timeline."
+msgstr "PIPPO"
+
+msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit"
+msgstr "PIPPO"
+
+msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit."
+msgstr "PIPPO"
+
+msgid "Find the bad branches and delete them. Keep only the best one."
+msgstr "PIPPO"
+
+msgid "Did you eat a baguette on the baguette branch?"
+msgstr "PIPPO"
+
+msgid "Did you drink a coffee on the coffee branch?"
+msgstr "PIPPO"
+
+msgid "Did you eat a donut on the donut branch?"
+msgstr "PIPPO"
+
+msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut."
+msgstr "PIPPO"
+
+msgid "Be on a merge commit."
+msgstr "PIPPO"
+
+msgid "Make a breakfast compromise in the 'main' branch."
+msgstr "PIPPO"
+
+msgid "Pick the timeline that's clearer, and make the alarm go off!"
+msgstr "PIPPO"
+
+msgid "Add the candle."
+msgstr "PIPPO"
+
+msgid "Make a commit."
+msgstr "PIPPO"
+
+msgid "Make a change to the candle."
+msgstr "PIPPO"
+
+msgid "Add the candle."
+msgstr "PIPPO"
+
+msgid "Make a commit."
+msgstr "PIPPO"
+
+msgid "Reset the changes in the green and blue candles!"
+msgstr "PIPPO"
+
+msgid "And make a commit!"
+msgstr "PIPPO"
+
+msgid "Make changes to all three objects, to form a logical sequence of events!"
+msgstr "PIPPO"
+
+msgid "Only add one of these changes!"
+msgstr "PIPPO"
+
+msgid "And make a commit."
+msgstr "PIPPO"
+
+msgid "Make a second commit that only records a single change."
+msgstr "PIPPO"
+
+msgid "And a third one."
+msgstr "PIPPO"
+
+msgid "Got the second line from your friend"
+msgstr "PIPPO"
+
+msgid "Got the fourth line from your friend."
+msgstr "PIPPO"
+
+msgid "The friend got a third line from you"
+msgstr "PIPPO"
+
+msgid "The friend got a fifth line from you"
+msgstr "PIPPO"
+
+msgid "Commit your local changes."
+msgstr "PIPPO"
+
+msgid "Look at your friend's suggestion, make a compromise, and push it back."
+msgstr "PIPPO"
+
+msgid "Order all tree branches into one and move the main branch ref"
+msgstr "PIPPO"
+
+msgid "Reorder the commits to dress yourself in the correct way"
+msgstr "PIPPO"
+
+msgid "Restore the essay to contain "important content""
+msgstr "PIPPO"
+
+msgid "Get the first version of your essay, and make a new commit with it."
+msgstr "PIPPO"
+
+msgid "In the last main commit, the numbers file contains the numbers from 1 to 10."
+msgstr "PIPPO"
+
+msgid "The commit message of that commit is "More numbers"."
+msgstr "PIPPO"
+
+msgid "The commit with the typo is not part of the main branch anymore."
+msgstr "PIPPO"
+
+msgid "The team's main branch no longer contains the bad thing."
+msgstr "PIPPO"
+
+msgid "And the history has not been modified."
+msgstr "PIPPO"
+
+msgid "Find out where you've been before, and go back there!"
+msgstr "PIPPO"
+
+msgid "Find the last good commit"
+msgstr "PIPPO"
+
+msgid "Did you stash the current changes?"
+msgstr "PIPPO"
+
+msgid "Did you pop the changes from the stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you clear your stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you create a new branch from the stashed changes?"
+msgstr "PIPPO"
+
+msgid "Did you resolve the confict and commit?"
+msgstr "PIPPO"
+
+msgid "Did you clear stash stack?"
+msgstr "PIPPO"
+
+msgid "Did you create a new tag?"
+msgstr "PIPPO"
+
+msgid "Did you remove all tags?"
+msgstr "PIPPO"
+
+msgid "Did you create a new tag?"
+msgstr "PIPPO"
+
+msgid "v1 tag in your repo"
+msgstr "PIPPO"
+
+msgid "v2 tag in your repo"
+msgstr "PIPPO"
+
+msgid "v2 tag in the remote"
+msgstr "PIPPO"
diff --git a/scenes/level.gd b/scenes/level.gd
index 7d277f1..a05de90 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -87,6 +87,7 @@ func load(path):
 			for line in Array(config[k].split("\n")):
 				if line.length() > 0 and line[0] == "#":
 					desc = line.substr(1).strip_edges(true, true)
+					print("msgid \"", desc, "\"\nmsgstr \"PIPPO\"\n")
 				else:
 					if not repos[repo].win_conditions.has(desc):
 						repos[repo].win_conditions[desc] = ""
diff --git a/scenes/title.tscn b/scenes/title.tscn
index 6ea4267..d247714 100644
--- a/scenes/title.tscn
+++ b/scenes/title.tscn
@@ -11,6 +11,10 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 1 )
 script = ExtResource( 3 )
+__meta__ = {
+"_editor_description_": "
+"
+}
 
 [node name="Label2" type="Label" parent="."]
 margin_left = 790.778

From 4ef05f6ea3d051458fabf5654e7609e345b49e9a Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Fri, 19 Aug 2022 16:18:17 +0200
Subject: [PATCH 38/49] Add *.mo files to gitignore

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 3c165fe..d1b5863 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
 *~
 *.org
 #*#
+*.mo

From 337d3d396309d8d3efa4bef954a754fd3a5a5228 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Fri, 19 Aug 2022 16:36:47 +0200
Subject: [PATCH 39/49] the internationalization system was completed and the
 Italian translation of the first level was added

---
 locale/it.po             |  151 ++--
 locale/it_cards.po       |   48 +-
 locale/it_levels.po      | 1640 ++++++++++++++++++++++----------------
 project.godot            |    2 +-
 scenes/level.gd          |   10 +-
 scenes/level_select.gd   |    7 -
 scenes/level_select.tscn |    1 -
 scenes/main.tscn         |    1 -
 scenes/sandbox.tscn      |    3 -
 9 files changed, 1038 insertions(+), 825 deletions(-)

diff --git a/locale/it.po b/locale/it.po
index 591bde3..4dff1c8 100644
--- a/locale/it.po
+++ b/locale/it.po
@@ -8,28 +8,22 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-19 14:46+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.3\n"
-"Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
+
+msgid "teacher"
+msgstr "insegnante"
 
 #: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48
-#msgid "label"
-#msgstr ""
-
-#: oh-my-git/scenes/card.tscn:125
-#msgid "Description"
-#msgstr ""
-
-#: oh-my-git/scenes/card.tscn:144
-#msgid "0"
-#msgstr ""
-
+#: oh-my-git/scenes/card.tscn:125 oh-my-git/scenes/card.tscn:144
 #: oh-my-git/scenes/cards.gd:58
 msgid "These are your cards! Drag them to highlighted areas to play them!"
 msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!"
@@ -38,30 +32,16 @@ msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!"
 msgid "Draw new cards"
 msgstr "Pesca nuove carte"
 
-#: oh-my-git/scenes/cards.tscn:48
-#msgid "3"
-#msgstr ""
-
-#: oh-my-git/scenes/file_browser.tscn:51
+#: oh-my-git/scenes/cards.tscn:48 oh-my-git/scenes/file_browser.tscn:51
 msgid "title"
 msgstr "titolo"
 
-#: oh-my-git/scenes/file_browser.tscn:64
-#msgid "root"
-#msgstr ""
-
-#: oh-my-git/scenes/file_browser.tscn:70
-#msgid "dir"
-#msgstr ""
-
+#: oh-my-git/scenes/file_browser.tscn:64 oh-my-git/scenes/file_browser.tscn:70
 #: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32
 msgid "Save"
 msgstr "Salva"
 
 #: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47
-#msgid "x"
-#msgstr ""
-
 #: oh-my-git/scenes/file_browser_item.tscn:118
 msgid "filename"
 msgstr "nome file"
@@ -75,20 +55,28 @@ msgid "Italian"
 msgstr "Italiano"
 
 #: oh-my-git/scenes/level.gd:45
-msgid "Good job, you solved the level!\nFeel free to try a few more things or click 'Next level'."
-msgstr "Ottimo lavoro, hai risolto il livello!\n Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'"
+msgid ""
+"Good job, you solved the level!\n"
+"Feel free to try a few more things or click 'Next level'."
+msgstr ""
+"Ottimo lavoro, hai risolto il livello!\n"
+" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'."
 
 #: oh-my-git/scenes/level.gd:81
 msgid "Complete the goal of this level"
-msgstr "Completa l'obbiettivo di questo ivello!"
+msgstr "Completa l'obbiettivo di questo ivello"
 
 #: oh-my-git/scenes/level_select.gd:60
 msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?"
 msgstr "Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?"
 
 #: oh-my-git/scenes/level_select.tscn:51
-msgid "Help us improving Oh My Git! by\nanswering some questions:"
-msgstr "Aiutaci a migliorare Oh My Git!\nRispondendo ad alcune domande:"
+msgid ""
+"Help us improving Oh My Git! by\n"
+"answering some questions:"
+msgstr ""
+"Aiutaci a migliorare Oh My Git!\n"
+"Rispondendo ad alcune domande:"
 
 #: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105
 msgid "To the survey /o/"
@@ -102,15 +90,8 @@ msgstr "Indietro"
 msgid "Reload"
 msgstr "Ricarica"
 
-#: oh-my-git/scenes/main.tscn:105
-#msgid "Level name here!"
-#msgstr ""
-
-#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136
-#msgid "Level description here!"
-#msgstr ""
-
-#: oh-my-git/scenes/main.tscn:237
+#: oh-my-git/scenes/main.tscn:105 oh-my-git/scenes/main.tscn:124
+#: oh-my-git/scenes/main.tscn:136 oh-my-git/scenes/main.tscn:237
 msgid "Cards!"
 msgstr "Carte!"
 
@@ -127,15 +108,9 @@ msgid "Toggle music"
 msgstr "Musica"
 
 #: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46
-#: oh-my-git/scenes/title.tscn:25
-#msgid "by bleeptrack & blinry"
-#msgstr ""
-
-#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38
-#msgid "Original score by winniehell"
-#msgstr ""
-
-#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56
+#: oh-my-git/scenes/title.tscn:25 oh-my-git/scenes/no_git.tscn:46
+#: oh-my-git/scenes/title.tscn:38 oh-my-git/scenes/no_git.tscn:65
+#: oh-my-git/scenes/title.tscn:56
 msgid "Levels"
 msgstr "Livelli"
 
@@ -147,25 +122,18 @@ msgstr "Sandbox"
 msgid "Install"
 msgstr "Installa"
 
-#: oh-my-git/scenes/no_git.tscn:97
-#msgid "GIT_MESSAGE"
-#msgstr ""
-
-#: oh-my-git/scenes/node.gd:83
+#: oh-my-git/scenes/no_git.tscn:97 oh-my-git/scenes/node.gd:83
 msgid "You can drag these around with your mouse!"
 msgstr "Puoi trascinarli in giro con il mouse!"
 
-#: oh-my-git/scenes/node.tscn:55
-#msgid "object_id"
-#msgstr ""
-
-#: oh-my-git/scenes/notification.gd:5 oh-my-git/scenes/notification.tscn:59
+#: oh-my-git/scenes/node.tscn:55 oh-my-git/scenes/notification.gd:5
+#: oh-my-git/scenes/notification.tscn:59
 msgid "Got it!"
 msgstr "Fatto!"
 
 #: oh-my-git/scenes/notification.gd:6
 msgid "Interesting!"
-msgstr "Interessante"
+msgstr "Interessante!"
 
 #: oh-my-git/scenes/notification.gd:7
 msgid "Very useful!"
@@ -203,22 +171,11 @@ msgstr "Eccezionale!"
 msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!"
 msgstr "Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento!"
 
-#: oh-my-git/scenes/notification.tscn:59
-#msgid "Got it!"
-#msgstr "Fatto!"
-
-#: oh-my-git/scenes/repository.gd:92
+#: oh-my-git/scenes/notification.tscn:59 oh-my-git/scenes/repository.gd:92
 msgid "This is the time machine of another person! To interact with it, you need special commands!"
 msgstr "Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!"
 
-#: oh-my-git/scenes/repository.tscn:56
-#msgid "Repo name"
-#msgstr ""
-
-#: oh-my-git/scenes/repository.tscn:67
-#msgid "Index:"
-#msgstr ""
-
+#: oh-my-git/scenes/repository.tscn:56 oh-my-git/scenes/repository.tscn:67
 #: oh-my-git/scenes/repository.tscn:78
 msgid "Update"
 msgstr "Aggiorna"
@@ -227,42 +184,30 @@ msgstr "Aggiorna"
 msgid "Hide trees and blobs"
 msgstr "Nascondi alberi e macchie"
 
-#: oh-my-git/scenes/survey.tscn:34
-#msgid "Oh My Git!"
-#msgstr ""
-
-#: oh-my-git/scenes/survey.tscn:71 oh-my-git/scenes/title.tscn:68
+#: oh-my-git/scenes/survey.tscn:34 oh-my-git/scenes/survey.tscn:71
+#: oh-my-git/scenes/title.tscn:68
 msgid "Quit"
 msgstr "Esci"
 
 #: oh-my-git/scenes/survey.tscn:90
-msgid "Thank you very much for playing!\nPlease help us improve Oh My Git! \nby filling out this survey:"
-msgstr "Grazie mille per aver giocato!\nAiutaci a migliorare Oh My Git!\ncompilando questo sondaggio:"
+msgid ""
+"Thank you very much for playing!\n"
+"Please help us improve Oh My Git! \n"
+"by filling out this survey:"
+msgstr ""
+"Grazie mille per aver giocato!\n"
+"Aiutaci a migliorare Oh My Git!\n"
+"compilando questo sondaggio:"
 
 #: oh-my-git/scenes/terminal.gd:107
 msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!"
 msgstr "Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!"
 
-#: oh-my-git/scenes/terminal.tscn:86
-#msgid "git commit --allow-empty -m \"$RANDOM\""
-#msgstr ""
-
-#: oh-my-git/scenes/terminal.tscn:93
-#msgid "git checkout HEAD^"
-#msgstr ""
-
-#: oh-my-git/scenes/terminal.tscn:100
-#msgid "git checkout -b \"$RANDOM\""
-#msgstr ""
-
-#: oh-my-git/scenes/text_editor.tscn:12
+#: oh-my-git/scenes/terminal.tscn:86 oh-my-git/scenes/terminal.tscn:93
+#: oh-my-git/scenes/terminal.tscn:100 oh-my-git/scenes/text_editor.tscn:12
 msgid "Text here"
 msgstr "Il testo qui"
 
-#: oh-my-git/scenes/title.tscn:68
-#msgid "Quit"
-#msgstr "Esci"
-
-#: oh-my-git/scenes/title.tscn:74
+#: oh-my-git/scenes/title.tscn:68 oh-my-git/scenes/title.tscn:74
 msgid "Language"
-msgstr "Linguaggio"
\ No newline at end of file
+msgstr "Linguaggio"
diff --git a/locale/it_cards.po b/locale/it_cards.po
index 8e12c7f..409d345 100644
--- a/locale/it_cards.po
+++ b/locale/it_cards.po
@@ -8,28 +8,34 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-19 14:48+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.3\n"
-"Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
 
-#: CARDS DESCRIPTION
-#: oh-my-git/resources/cards.json:6
+#: CARDS DESCRIPTION oh-my-git/resources/cards.json:6
 msgid "Drag this card into the empty space above to initialize the time machine!"
-msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo"
+msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo!"
 
 #: oh-my-git/resources/cards.json:14
 msgid "Create your own copy of someone else's repo."
 msgstr "Crea la tua copia personale del Repo di qualcun'altro."
 
 #: oh-my-git/resources/cards.json:22
-msgid "Set your name.\n\n(Will not change anything outside of this game.)"
-msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)"
+msgid ""
+"Set your name.\n"
+"\n"
+"(Will not change anything outside of this game.)"
+msgstr ""
+"Imposta il tuo nome.\n"
+"\n"
+"(Non cambierà nulla all'infuori del gioco.)"
 
 #: oh-my-git/resources/cards.json:30
 msgid "Set your email address."
@@ -37,19 +43,23 @@ msgstr "Imposta la tua e-mail."
 
 #: oh-my-git/resources/cards.json:38
 msgid "Drag this card to a commit or to a branch to travel to it!"
-msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso."
+msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso.!"
 
 #: oh-my-git/resources/cards.json:46
 msgid "Reset changes in a local file."
-msgstr "Resetta i cambiamenti in un file locale"
+msgstr "Resetta i cambiamenti in un file locale."
 
 #: oh-my-git/resources/cards.json:54
 msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
 msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice."
 
 #: oh-my-git/resources/cards.json:62
-msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed."
-msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato."
+msgid ""
+"Make a new commit, after automatically adding all changes to the index.\n"
+"You'll be asked to enter a short description of what you changed."
+msgstr ""
+"Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\n"
+"Dovrai inserire una breve descrizione di cosa hai cambiato."
 
 #: oh-my-git/resources/cards.json:70
 msgid "Make a new commit containing your current environment! Type in a description of what changed!"
@@ -73,11 +83,11 @@ msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad
 
 #: oh-my-git/resources/cards.json:110
 msgid "Get a someone else's version of the current timeline."
-msgstr "Prende la versione di qualcun'altro della temporale corrente"
+msgstr "Prende la versione di qualcun'altro della temporale corrente."
 
 #: oh-my-git/resources/cards.json:118
 msgid "Give the current timeline to someone else."
-msgstr "Invia la linea temporale corrente a qualcun'altro"
+msgstr "Invia la linea temporale corrente a qualcun'altro."
 
 #: oh-my-git/resources/cards.json:126
 msgid "Make changes to the events in your current timeline, back to the commit you drag this to."
@@ -85,7 +95,7 @@ msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trasci
 
 #: oh-my-git/resources/cards.json:134
 msgid "Continue the current rebasing process."
-msgstr "Continua il processo di rebasing"
+msgstr "Continua il processo di rebasing."
 
 #: oh-my-git/resources/cards.json:142
 msgid "Move the branch you're on to the specified commit."
@@ -97,11 +107,11 @@ msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale."
 
 #: oh-my-git/resources/cards.json:158
 msgid "Reset the index version of a file to the version in the commit you're on."
-msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei"
+msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei."
 
 #: oh-my-git/resources/cards.json:166
 msgid "Repeat the specified action on top of your current timeline."
-msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente"
+msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente."
 
 #: oh-my-git/resources/cards.json:174
 msgid "Make a new commit that reverts the changes of the speicified commit."
@@ -109,7 +119,7 @@ msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato."
 
 #: oh-my-git/resources/cards.json:182
 msgid "Start looking for the commit where things got bad."
-msgstr "Inizia a cercare il commit dove le cose sono andate storte"
+msgstr "Inizia a cercare il commit dove le cose sono andate storte."
 
 #: oh-my-git/resources/cards.json:190
 msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
@@ -161,4 +171,4 @@ msgstr "Rinomina un file."
 
 #: oh-my-git/resources/cards.json:286
 msgid "Make a copy of a file."
-msgstr "Crea una copia di un file."
\ No newline at end of file
+msgstr "Crea una copia di un file."
diff --git a/locale/it_levels.po b/locale/it_levels.po
index 0c625d2..114a86e 100644
--- a/locale/it_levels.po
+++ b/locale/it_levels.po
@@ -8,826 +8,1096 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-19 16:33+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.3\n"
-"Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
 
 #: TITLE
-#: oh-my-git/levels/
-msgid "Friend"
-msgstr "Amici"
-
-msgid "friend"
-msgstr "amici"
-
-
-#: DESCRIPTION
-msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git."
-msgstr "PIPPO"
-
-msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!"
-msgstr "PIPPO"
-
-msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!"
-msgstr "PIPPO"
-
-msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!"
-msgstr "PIPPO"
-
-msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)"
-msgstr "PIPPO"
-
-msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!"
-msgstr "PIPPO"
-
-msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!"
-msgstr "PIPPO"
-
-msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!"
-msgstr "PIPPO"
-
-msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!"
-msgstr "PIPPO"
-
-msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!"
-msgstr "PIPPO"
-
-msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)"
-msgstr "PIPPO"
-
-msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!"
-msgstr "PIPPO"
-
-msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around."
-msgstr "PIPPO"
-
-msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n    git checkout\n\non the branch names, and then using\n\n    git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!"
-msgstr "PIPPO"
-
-msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!"
-msgstr "PIPPO"
-
-msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one."
-msgstr "PIPPO"
-
-msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened."
-msgstr "PIPPO"
-
-msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!"
-msgstr "PIPPO"
-
-msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!"
-msgstr "PIPPO"
-
-msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!"
-msgstr "PIPPO"
-
-msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!"
-msgstr "PIPPO"
-
-msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!"
-msgstr "PIPPO"
-
-msgid "Both you and your friend have been working on the file, and want to sync up!"
-msgstr "PIPPO"
-
-msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!"
-msgstr "PIPPO"
-
-msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!"
-msgstr "PIPPO"
-
-msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!"
-msgstr "PIPPO"
-
-msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n    git checkout [commit] [file]"
-msgstr "PIPPO"
-
-msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again."
-msgstr "PIPPO"
-
-msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`"
-msgstr "PIPPO"
-
-msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n    git reflog"
-msgstr "PIPPO"
-
-msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`."
-msgstr "PIPPO"
-
-msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?"
-msgstr "PIPPO"
-
-msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n    git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n    git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n    git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "If you want to inspect your stash stack, use the command\n    git stash list\n    \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n    git stash clear\nIf you only want to discard a certain stash entry, you can use\n    git stash drop <stash>\n    \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n    git stash branch <branchname> <stash>\nIf you just want to use the latest stash entry, you can leave the <stash> option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n    git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n    git tag <tag-name> \n    \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "You added way too many tags? No prob! Delete them with\n\n    git tag -d <tag-name>\n    \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n    git tag <tag-name> <commit-hash>\n    \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n    git push <remote> <tag-name>\nOr all tags with:\n    git push <remote> --tags\n    \nDeleting tags on your remote works with: \n    git push <remote> --delete <tag-name>\n    \nYou can also sync \n    git fetch <remote> --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository."
-msgstr "PIPPO"
-
-msgid "This is an empty sandbox you can play around in."
-msgstr "PIPPO"
-
-msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?"
-msgstr "PIPPO"
-
-msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!"
-msgstr "PIPPO"
-
-msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git."
-msgstr "PIPPO"
-
-msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!"
-msgstr "PIPPO"
-
-msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!"
-msgstr "PIPPO"
-
-msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!"
-msgstr "PIPPO"
-
-msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)"
-msgstr "PIPPO"
-
-msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!"
-msgstr "PIPPO"
-
-msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!"
-msgstr "PIPPO"
-
-msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!"
-msgstr "PIPPO"
-
-msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!"
-msgstr "PIPPO"
-
-msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!"
-msgstr "PIPPO"
-
-msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)"
-msgstr "PIPPO"
-
-msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!"
-msgstr "PIPPO"
-
-msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around."
-msgstr "PIPPO"
-
-msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n    git checkout\n\non the branch names, and then using\n\n    git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!"
-msgstr "PIPPO"
-
-msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!"
-msgstr "PIPPO"
-
-msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one."
-msgstr "PIPPO"
-
-msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened."
-msgstr "PIPPO"
-
-msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!"
-msgstr "PIPPO"
-
-msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!"
-msgstr "PIPPO"
-
-msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!"
-msgstr "PIPPO"
-
-msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!"
-msgstr "PIPPO"
-
-msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!"
-msgstr "PIPPO"
-
-msgid "Both you and your friend have been working on the file, and want to sync up!"
-msgstr "PIPPO"
-
-msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!"
-msgstr "PIPPO"
-
-msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!"
-msgstr "PIPPO"
-
-msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!"
-msgstr "PIPPO"
-
-msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n    git checkout [commit] [file]"
-msgstr "PIPPO"
-
-msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again."
-msgstr "PIPPO"
-
-msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`"
-msgstr "PIPPO"
-
-msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n    git reflog"
-msgstr "PIPPO"
-
-msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`."
-msgstr "PIPPO"
-
-msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?"
-msgstr "PIPPO"
-
-msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n    git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n    git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n    git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "If you want to inspect your stash stack, use the command\n    git stash list\n    \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n    git stash clear\nIf you only want to discard a certain stash entry, you can use\n    git stash drop <stash>\n    \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n    git stash branch <branchname> <stash>\nIf you just want to use the latest stash entry, you can leave the <stash> option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n    git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n    git tag <tag-name> \n    \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "You added way too many tags? No prob! Delete them with\n\n    git tag -d <tag-name>\n    \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n    git tag <tag-name> <commit-hash>\n    \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3"
-msgstr "PIPPO"
-
-msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n    git push <remote> <tag-name>\nOr all tags with:\n    git push <remote> --tags\n    \nDeleting tags on your remote works with: \n    git push <remote> --delete <tag-name>\n    \nYou can also sync \n    git fetch <remote> --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository."
-msgstr "PIPPO"
-
-msgid "This is an empty sandbox you can play around in."
-msgstr "PIPPO"
-
-msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?"
-msgstr "PIPPO"
-
-msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!"
-msgstr "PIPPO"
-
-#: HITS
-msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!"
-msgstr "PIPPO"
-
-msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)"
-msgstr "PIPPO"
-
-msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice."
-msgstr "PIPPO"
-
-msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n    rm *web"
-msgstr "PIPPO"
-
-msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!"
-msgstr "PIPPO"
-
-msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n    git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n    git checkout HEAD~2"
-msgstr "PIPPO"
-
-msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!"
-msgstr "PIPPO"
-
-msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`."
-msgstr "PIPPO"
-
-msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!"
-msgstr "PIPPO"
-
-msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!"
-msgstr "PIPPO"
-
-msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)"
-msgstr "PIPPO"
-
-msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice."
-msgstr "PIPPO"
-
-msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n    rm *web"
-msgstr "PIPPO"
-
-msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!"
-msgstr "PIPPO"
-
-msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n    git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n    git checkout HEAD~2"
-msgstr "PIPPO"
-
-msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!"
-msgstr "PIPPO"
-
-msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`."
-msgstr "PIPPO"
-
-msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!"
-msgstr "PIPPO"
-
-
-#############################################
-
-#: CONGRAT
-msgid "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'."
-msgstr "PIPPO"
-msgid "Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone!\n\nYou clearly need a better solution.\n\n(Click 'Next Level' as soon as you're ready!)"
-msgstr "PIPPO"
-msgid "Okay, this kind of works.\n\nBut you're a bit worried that you'll end up with hundreds of copies of this form, and it will be hard to keep track of all of them.\n\nAnd especially when working with other people, sending copies back and forth doesn't seem ideal.\n\nYou can't wait to try these time machines!"
-msgstr "PIPPO"
-msgid "Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!"
-msgstr "PIPPO"
-msgid "Cool! Instead of using the playing cards, you can also do everything via the command line!\n\nThe command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface."
-msgstr "PIPPO"
-msgid "Nice! You can try making some additional commits. When you feel comfortable, click on 'Next Level'."
-msgstr "PIPPO"
-msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!"
-msgstr "PIPPO"
-msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
-msgstr "PIPPO"
-msgid "Don't you immediately feel more at home?"
-msgstr "PIPPO"
-msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..."
-msgstr "PIPPO"
-msgid "Whew, good job! This seems like a *much* better outcome.\n\nFeel free to add more parallel timelines, or make them longer.\n\nIf you're ready, our next mission is already waiting..."
-msgstr "PIPPO"
-msgid "Now you can travel between those branches easily (using `git checkout`) - try it!\n\nYour friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!"
-msgstr "PIPPO"
-msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)"
-msgstr "PIPPO"
-msgid "I wonder if you're more relaxed when you *sleep* in parallel timelines..."
-msgstr "PIPPO"
-msgid "Yum, that sounds like a good breakfast!"
-msgstr "PIPPO"
-msgid "Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.\n\nIt's really hard to actually *destroy* stuff with your time machine."
-msgstr "PIPPO"
-msgid "Feel free to reset the level and try the other strategy! Which one do you like better?"
-msgstr "PIPPO"
-msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..."
-msgstr "PIPPO"
-msgid "Nice stash you got there! :)"
-msgstr "PIPPO"
-msgid "Yay, you got your changes back! :)"
-msgstr "PIPPO"
-msgid "All clear! :)"
-msgstr "PIPPO"
-msgid "Stashed changes are in a new branch! :)"
-msgstr "PIPPO"
-msgid "Nice! You tagged your first commit :)"
-msgstr "PIPPO"
-msgid "Well done :)"
-msgstr "PIPPO"
+msgid "Living dangerously"
+msgstr "Vivere pericolosamente"
 
 #: Command
---- Debugging process started ---
-Godot Engine v3.5.stable.official.991bb6ac7 - https://godotengine.org
-OpenGL ES 3.0 Renderer: Mesa Intel(R) UHD Graphics 620 (KBL GT2)
-Async. shader compilation: OFF
- 
 msgid "Add another line to form.txt!"
-msgstr "PIPPO"
+msgstr "Aggiungi un'ulteriore linea a form.txt!"
+
+msgid "Making backups"
+msgstr "Fare backups"
 
 msgid "Add another line to form2_really_final.txt!"
-msgstr "PIPPO"
+msgstr "Aggiungi un'ulteriore linea a form2_really_final.txt!"
+
+msgid "Enter the time machine"
+msgstr "Entra nella macchina del tempo"
 
 msgid "Initialize the time machine!"
-msgstr "PIPPO"
+msgstr "Inizializza la macchina del tempo!"
 
-msgid "Initialize the time machine!"
-msgstr "PIPPO"
+msgid "The command line"
+msgstr "La linea di comando"
 
-msgid "Make a snapshot of the glass (a "commit")"
-msgstr "PIPPO"
+msgid "Your first commit"
+msgstr "Il tuo primo commit"
+
+msgid "Make a snapshot of the glass (a 'commit')"
+msgstr "Crea un'istantanea di glass (un 'commit')"
 
 msgid "Change the contents of the glass!"
-msgstr "PIPPO"
+msgstr "Cambia il contenuto di glass!"
 
 msgid "And make a second commit!"
-msgstr "PIPPO"
+msgstr "E crea un secondo commit!"
+
+msgid "Working together"
+msgstr "Lavoriamo assieme"
 
 msgid "Get the second commit from your teacher using `git pull`."
-msgstr "PIPPO"
+msgstr "Recupera il secondo commit dal tuo insegnante usando `git pull`."
 
 msgid "Add your name to the list of students"
-msgstr "PIPPO"
+msgstr "Aggiungi il tuo nome alla lista degli studenti"
 
 msgid "Commit your result."
-msgstr "PIPPO"
+msgstr "Conferma il risultato."
 
 msgid "And use `git push` to send it to your teacher!"
-msgstr "PIPPO"
+msgstr "E usa `git push` per inviarlo al tuo insegnante!"
+
+msgid "Unexpected Roommates"
+msgstr ""
 
 msgid "Remove all spider webs."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "But make sure you keep your bed!"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Interior design"
+msgstr ""
 
 msgid "Add two more pieces of furniture"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Make sure the colors match your bed's color."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Moving through time"
+msgstr ""
 
 msgid "Restore sisterly peace."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Make parallel commits"
+msgstr ""
 
 msgid "Make sure that the child is happy."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Make sure that the lion gets something to eat."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Creating branches"
+msgstr ""
 
 msgid "Create a branch called 'birthday' that points to the birthday timeline."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Create a branch called 'concert' that points to the concert timeline."
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit"
-msgstr "PIPPO"
+msgid "Branches grow with you!"
+msgstr ""
 
-msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit."
-msgstr "PIPPO"
+msgid ""
+"Travel directly to the last yellow commit of the birthday timeline, make a "
+"change to 'you', and make a commit"
+msgstr ""
+
+msgid ""
+"Travel to the blue 'concert' branch, make a change to 'you', and a commit."
+msgstr ""
+
+msgid "Deleting branches"
+msgstr ""
 
 msgid "Find the bad branches and delete them. Keep only the best one."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Moving branches around"
+msgstr ""
 
 msgid "Did you eat a baguette on the baguette branch?"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Did you drink a coffee on the coffee branch?"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Did you eat a donut on the donut branch?"
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut."
-msgstr "PIPPO"
+msgid "Merging timelines"
+msgstr ""
+
+msgid ""
+"Build a situation where you consumed a baguette, a coffee, *and* a donut."
+msgstr ""
 
 msgid "Be on a merge commit."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Contradictions"
+msgstr ""
 
 msgid "Make a breakfast compromise in the 'main' branch."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Step by step"
+msgstr ""
 
 msgid "Pick the timeline that's clearer, and make the alarm go off!"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Add new files to the index"
+msgstr ""
 
 msgid "Add the candle."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Make a commit."
-msgstr "PIPPO"
+msgstr "Crea un commit."
+
+msgid "Update files in the index"
+msgstr ""
 
 msgid "Make a change to the candle."
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Add the candle."
-msgstr "PIPPO"
-
-msgid "Make a commit."
-msgstr "PIPPO"
+msgid "Resetting files in the index"
+msgstr ""
 
 msgid "Reset the changes in the green and blue candles!"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "And make a commit!"
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Make changes to all three objects, to form a logical sequence of events!"
-msgstr "PIPPO"
+msgid "Adding changes step by step"
+msgstr ""
+
+msgid ""
+"Make changes to all three objects, to form a logical sequence of events!"
+msgstr ""
 
 msgid "Only add one of these changes!"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "And make a commit."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Make a second commit that only records a single change."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "And a third one."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Friend"
+msgstr ""
 
 msgid "Got the second line from your friend"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Got the fourth line from your friend."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "The friend got a third line from you"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "The friend got a fifth line from you"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Problems"
+msgstr ""
 
 msgid "Commit your local changes."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Look at your friend's suggestion, make a compromise, and push it back."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Rebasing"
+msgstr ""
 
 msgid "Order all tree branches into one and move the main branch ref"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Reordering events"
+msgstr ""
 
 msgid "Reorder the commits to dress yourself in the correct way"
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Restore the essay to contain "important content""
-msgstr "PIPPO"
+msgid "Restore a deleted file"
+msgstr ""
+
+msgid "Restore the essay to contain 'important content'"
+msgstr ""
+
+msgid "Restore a file from the past"
+msgstr ""
 
 msgid "Get the first version of your essay, and make a new commit with it."
-msgstr "PIPPO"
+msgstr ""
 
-msgid "In the last main commit, the numbers file contains the numbers from 1 to 10."
-msgstr "PIPPO"
+msgid "Undo a bad commit"
+msgstr ""
 
-msgid "The commit message of that commit is "More numbers"."
-msgstr "PIPPO"
+msgid ""
+"In the last main commit, the numbers file contains the numbers from 1 to 10."
+msgstr ""
+
+msgid "The commit message of that commit is 'More numbers'."
+msgstr ""
 
 msgid "The commit with the typo is not part of the main branch anymore."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "I pushed something broken"
+msgstr ""
 
 msgid "The team's main branch no longer contains the bad thing."
-msgstr "PIPPO"
+msgstr ""
 
 msgid "And the history has not been modified."
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Go back to where you were before"
+msgstr ""
 
 msgid "Find out where you've been before, and go back there!"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Cloning a repo"
+msgstr ""
+
+msgid "Yellow brick road"
+msgstr ""
 
 msgid "Find the last good commit"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Stashing"
+msgstr ""
 
 msgid "Did you stash the current changes?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Pop from Stash"
+msgstr ""
 
 msgid "Did you pop the changes from the stash stack?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Clear the Stash"
+msgstr ""
 
 msgid "Did you clear your stash stack?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Branch from stash"
+msgstr ""
 
 msgid "Did you create a new branch from the stashed changes?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Merging popped stash"
+msgstr ""
 
 msgid "Did you resolve the confict and commit?"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "Did you clear stash stack?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Creating tags"
+msgstr ""
 
 msgid "Did you create a new tag?"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Removing tags"
+msgstr ""
 
 msgid "Did you remove all tags?"
-msgstr "PIPPO"
+msgstr ""
 
-msgid "Did you create a new tag?"
-msgstr "PIPPO"
+msgid "Tagging later"
+msgstr ""
+
+msgid "Remote Tags"
+msgstr ""
 
 msgid "v1 tag in your repo"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "v2 tag in your repo"
-msgstr "PIPPO"
+msgstr ""
 
 msgid "v2 tag in the remote"
-msgstr "PIPPO"
-
-msgid "Add another line to form.txt!"
-msgstr "PIPPO"
-
-msgid "Add another line to form2_really_final.txt!"
-msgstr "PIPPO"
-
-msgid "Initialize the time machine!"
-msgstr "PIPPO"
-
-msgid "Initialize the time machine!"
-msgstr "PIPPO"
-
-msgid "Make a snapshot of the glass (a "commit")"
-msgstr "PIPPO"
-
-msgid "Change the contents of the glass!"
-msgstr "PIPPO"
-
-msgid "And make a second commit!"
-msgstr "PIPPO"
-
-msgid "Get the second commit from your teacher using `git pull`."
-msgstr "PIPPO"
-
-msgid "Add your name to the list of students"
-msgstr "PIPPO"
-
-msgid "Commit your result."
-msgstr "PIPPO"
-
-msgid "And use `git push` to send it to your teacher!"
-msgstr "PIPPO"
-
-msgid "Remove all spider webs."
-msgstr "PIPPO"
-
-msgid "But make sure you keep your bed!"
-msgstr "PIPPO"
-
-msgid "Add two more pieces of furniture"
-msgstr "PIPPO"
-
-msgid "Make sure the colors match your bed's color."
-msgstr "PIPPO"
-
-msgid "Restore sisterly peace."
-msgstr "PIPPO"
-
-msgid "Make sure that the child is happy."
-msgstr "PIPPO"
-
-msgid "Make sure that the lion gets something to eat."
-msgstr "PIPPO"
-
-msgid "Create a branch called 'birthday' that points to the birthday timeline."
-msgstr "PIPPO"
-
-msgid "Create a branch called 'concert' that points to the concert timeline."
-msgstr "PIPPO"
-
-msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit"
-msgstr "PIPPO"
-
-msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit."
-msgstr "PIPPO"
-
-msgid "Find the bad branches and delete them. Keep only the best one."
-msgstr "PIPPO"
-
-msgid "Did you eat a baguette on the baguette branch?"
-msgstr "PIPPO"
-
-msgid "Did you drink a coffee on the coffee branch?"
-msgstr "PIPPO"
-
-msgid "Did you eat a donut on the donut branch?"
-msgstr "PIPPO"
-
-msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut."
-msgstr "PIPPO"
-
-msgid "Be on a merge commit."
-msgstr "PIPPO"
-
-msgid "Make a breakfast compromise in the 'main' branch."
-msgstr "PIPPO"
-
-msgid "Pick the timeline that's clearer, and make the alarm go off!"
-msgstr "PIPPO"
-
-msgid "Add the candle."
-msgstr "PIPPO"
-
-msgid "Make a commit."
-msgstr "PIPPO"
-
-msgid "Make a change to the candle."
-msgstr "PIPPO"
-
-msgid "Add the candle."
-msgstr "PIPPO"
-
-msgid "Make a commit."
-msgstr "PIPPO"
-
-msgid "Reset the changes in the green and blue candles!"
-msgstr "PIPPO"
-
-msgid "And make a commit!"
-msgstr "PIPPO"
-
-msgid "Make changes to all three objects, to form a logical sequence of events!"
-msgstr "PIPPO"
-
-msgid "Only add one of these changes!"
-msgstr "PIPPO"
-
-msgid "And make a commit."
-msgstr "PIPPO"
-
-msgid "Make a second commit that only records a single change."
-msgstr "PIPPO"
-
-msgid "And a third one."
-msgstr "PIPPO"
-
-msgid "Got the second line from your friend"
-msgstr "PIPPO"
-
-msgid "Got the fourth line from your friend."
-msgstr "PIPPO"
-
-msgid "The friend got a third line from you"
-msgstr "PIPPO"
-
-msgid "The friend got a fifth line from you"
-msgstr "PIPPO"
-
-msgid "Commit your local changes."
-msgstr "PIPPO"
-
-msgid "Look at your friend's suggestion, make a compromise, and push it back."
-msgstr "PIPPO"
-
-msgid "Order all tree branches into one and move the main branch ref"
-msgstr "PIPPO"
-
-msgid "Reorder the commits to dress yourself in the correct way"
-msgstr "PIPPO"
-
-msgid "Restore the essay to contain "important content""
-msgstr "PIPPO"
-
-msgid "Get the first version of your essay, and make a new commit with it."
-msgstr "PIPPO"
-
-msgid "In the last main commit, the numbers file contains the numbers from 1 to 10."
-msgstr "PIPPO"
-
-msgid "The commit message of that commit is "More numbers"."
-msgstr "PIPPO"
-
-msgid "The commit with the typo is not part of the main branch anymore."
-msgstr "PIPPO"
-
-msgid "The team's main branch no longer contains the bad thing."
-msgstr "PIPPO"
-
-msgid "And the history has not been modified."
-msgstr "PIPPO"
-
-msgid "Find out where you've been before, and go back there!"
-msgstr "PIPPO"
-
-msgid "Find the last good commit"
-msgstr "PIPPO"
-
-msgid "Did you stash the current changes?"
-msgstr "PIPPO"
-
-msgid "Did you pop the changes from the stash stack?"
-msgstr "PIPPO"
-
-msgid "Did you clear your stash stack?"
-msgstr "PIPPO"
-
-msgid "Did you create a new branch from the stashed changes?"
-msgstr "PIPPO"
-
-msgid "Did you resolve the confict and commit?"
-msgstr "PIPPO"
-
-msgid "Did you clear stash stack?"
-msgstr "PIPPO"
-
-msgid "Did you create a new tag?"
-msgstr "PIPPO"
-
-msgid "Did you remove all tags?"
-msgstr "PIPPO"
-
-msgid "Did you create a new tag?"
-msgstr "PIPPO"
-
-msgid "v1 tag in your repo"
-msgstr "PIPPO"
-
-msgid "v2 tag in your repo"
-msgstr "PIPPO"
-
-msgid "v2 tag in the remote"
-msgstr "PIPPO"
+msgstr ""
+
+msgid "Empty sandbox"
+msgstr ""
+
+msgid "Sandbox with a remote"
+msgstr ""
+
+msgid "Sandbox with three commits"
+msgstr ""
+
+#: DESCRIPTION
+msgid ""
+"So you have decided to apply for time travel school, to learn how to use "
+"this time machine called 'Git'!\n"
+"\n"
+"How exciting!\n"
+"\n"
+"You're almost done with the paperwork! You just need to fill in one more "
+"reason why you want to learn Git."
+msgstr ""
+"Bene hai deciso di fare domanda per la scuola di viaggio nel tempo, per "
+"usare questa macchina del tempo chiamata 'Git'!\n"
+"\n"
+"Che emozione!\n"
+"\n"
+"Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il "
+"quale vuoi imparare Git."
+
+msgid ""
+"This time, you're making a lot of backup copies - you can look at them by "
+"clicking on them!"
+msgstr ""
+"Questa volta hai fatto molti copie di backup - le puoi guardare cliccandoci "
+"sopra!"
+
+msgid ""
+"You've been accepted to time travel school! Yay! It's your first day! Your "
+"teacher explains:\n"
+"\n"
+"'To do anything with a time machine, you first need to initialize it!'\n"
+"\n"
+"Drag that blue card up to play it!"
+msgstr ""
+"Sei stato accettato nella scuola della macchina del tempo! Yay! E' il tuo "
+"primo giorno! Il tuo insegnante spiega;\n"
+"\n"
+"'Prima di fare qualsiasi altra cosa con la macchina del tempo, e' necessario "
+"che la inizializzi!'\n"
+"\n"
+"Trascina verso l'alto la carta blue per usarla!"
+
+msgid ""
+"These playing cards are designed to be easy to use and to remember! We'd "
+"suggest sticking to them if you don't have a lot of experience with Git!"
+msgstr ""
+"Queste carte da gioco sono state disegnate per essere facili da utilizzare e "
+"ricordare! Ti consigliamo di usarle se non hai molta esperienza con Git!"
+
+msgid ""
+"You can use your time machine to make snapshots of objects around you! Here, "
+"let's practice this!\n"
+"\n"
+"(Your teacher pours some water into a glass.)"
+msgstr ""
+"Puoi usare la tua macchina del tempo per creare delle istantanee degli "
+"oggetti che ti circondano! Ecco, facciamo questo!\n"
+"\n"
+"(Il tuo insegnante versa dell'acqua nel bicchiere.)"
+
+msgid ""
+"Let's add your name to our list of students!\n"
+"\n"
+"I already have a second commit of it in my time machine - let's work "
+"together!"
+msgstr ""
+"Aggiungiamo il tuo nome nella nostra lista di studenti!\n"
+"\n"
+"Io ne ho gia' un secondo commit nella mia macchina del tempo - lavoriamo "
+"assieme!"
+
+msgid ""
+"The first day at Time Travel School comes to an end and you receive the key "
+"to your room.\n"
+"Full of excitement you open the door just to find... spider webs! Spider "
+"webs everywhere!\n"
+"\n"
+"Remove all the spider webs you can find with the remove card!"
+msgstr ""
+
+msgid ""
+"Now that your room looks tidy, you can start to unpack your stuff. You "
+"brought two new pieces of furniture with you and with a bright smile,\n"
+"you see that their colors match the color of your bed!\n"
+"\n"
+"Build up your two pieces of furniture by playing the touch card.\n"
+"Then name your furniture - you can choose whatever you like.\n"
+"\n"
+"Make sure the colors match! You can find the bed's color in its "
+"description.\n"
+"Don't forget to add a color and description to your new furnitures, too!"
+msgstr ""
+
+msgid ""
+"The yellow boxes are frozen points in time, we call them 'commits'! You can "
+"travel between them using the 'checkout' card! (Try it!)\n"
+"\n"
+"Can you find out what happened here? Then, while on the last commit, edit "
+"the files to fix the problem, and make a new commit!"
+msgstr ""
+
+msgid ""
+"Did you know that creating parallel timelines is perfectly legal and safe? "
+"It's true!\n"
+"\n"
+"Can you find out when things went wrong in this zoo? Then, go back to the "
+"last good commit and create a parallel universe where everyone is happy!"
+msgstr ""
+
+msgid ""
+"You were invited to two parties! At one of them, your favorite band is "
+"playing - and the other one is your best friend's birthday party. Where "
+"should you go? No worries - as a time travel agent in training, you can go "
+"to both parties!\n"
+"\n"
+"To make it easier to tell which timeline is which, you can create time "
+"portals! (We call these 'branches'.)"
+msgstr ""
+
+msgid ""
+"Note that there are two options to 'travel to the end of a timeline':\n"
+"\n"
+"First, you can directly travel to the commit, like we've done it before.\n"
+"\n"
+"And second, you can travel to the branch label. In this case, when you make "
+"a new commit, the branch will grow with you, and still point at the end of "
+"the timeline!"
+msgstr ""
+
+msgid ""
+"Life is full of dangers, right? Even when walking to school, it seems like "
+"there's a lot of risks!\n"
+"\n"
+"This Monday is especially bad. You made it to school, but there's some "
+"timelines you definitely don't want to keep around."
+msgstr ""
+
+msgid ""
+"One of your colleagues messed up here, and put the branches in the wrong "
+"timelines!\n"
+"\n"
+"You could delete and re-create these branches - but you can also directly "
+"move them to different commits, by using\n"
+"\n"
+"    git checkout\n"
+"\n"
+"on the branch names, and then using\n"
+"\n"
+"    git reset --hard\n"
+"\n"
+"on the commit where you want the branch to be.\n"
+"\n"
+"The donut branch is in the right place, but the timeline is still incomplete "
+"- make you actually *eat* the donut in that branch!"
+msgstr ""
+
+msgid ""
+"Here's a trick so that you can sleep a bit longer: just do all your morning "
+"activities in parallel universes, and then at the end, merge them together!"
+msgstr ""
+
+msgid ""
+"Sometimes, timelines will contradict each other.\n"
+"\n"
+"For example, in this case, one of our clients wants these timelines merged, "
+"but they ate different things for breakfast in both timelines.\n"
+"\n"
+"Try to merge them together! You'll notice that there will be a conflict! The "
+"time machine will leave it up to you how to proceed: you can edit the "
+"problematic item, it will show you the conflicting sections. You can keep "
+"either of the two versions - or create a combination of them! Remove the "
+">>>, <<<, and === markers, and make a new commit to finalize the merge!\n"
+"\n"
+"Let your finalized timeline be the 'main' one."
+msgstr ""
+
+msgid ""
+"Welcome to today's lesson! We're going to learn how to make commits with "
+"more precision!\n"
+"\n"
+"Have a look at these two timelines. They have exactly the same outcome. But "
+"one of them makes it much easier to figure out what happened."
+msgstr ""
+
+msgid ""
+"So far, when we made a commit, we've always recorded the current status of "
+"all objects, right?\n"
+"\n"
+"But Git allows you to pick which changes you want to put in a commit!\n"
+"\n"
+"To learn how that works, we need to learn about the 'index'! In the index, "
+"we can prepare what will be in the next commit. In this game, the index is "
+"represented by a blue aura around icons in the file browser!\n"
+"\n"
+"Initially, the index is empty. To make a commit that contains a new file, we "
+"need to add it!"
+msgstr ""
+
+msgid ""
+"When we change files, the index won't change on its own. We have to use `git "
+"add` to update the index to the changed version of the file.\n"
+"\n"
+"Let's try that!\n"
+"\n"
+"The icons in the file browser show you when the actual file (white) and the "
+"version in the index (blue) are different, and when they are the same!"
+msgstr ""
+
+msgid ""
+"See the dark shadow behind the icons? That's the version of the file in the "
+"last commit!\n"
+"\n"
+"For example, these candles have been blown out, and that change has been "
+"added.\n"
+"\n"
+"But you decide that this was a mistake! You only want to blow out the red "
+"candle in the next commit!\n"
+"\n"
+"If you already have updated the index to a changed file, but want to reset "
+"it, you can use `git reset`!"
+msgstr ""
+
+msgid ""
+"The index is really useful, because it allows us to be precise about which "
+"changes we want to include in each commit!"
+msgstr ""
+
+msgid ""
+"Your friend added another line to your essay! Get it, add a third one and "
+"send it to them!\n"
+"\n"
+"Take turns until you have five lines!"
+msgstr ""
+
+msgid ""
+"Both you and your friend have been working on the file, and want to sync up!"
+msgstr ""
+
+msgid ""
+"Okay - turns out that saving time in the morning by utilizing parallel "
+"universes is against the regulations of the International Time Travel "
+"Association. You'll have to do your tasks in sequence after all.\n"
+"\n"
+"See the 'rebase' card? When you drag it to a commit, it will copy the events "
+"in your current timeline after the specified one! This way, make a clean, "
+"linear timeline where you visit all three shops.\n"
+"\n"
+"Again, we want to make that our base reality - the 'main' branch should "
+"point to that timeline!"
+msgstr ""
+
+msgid ""
+"Oops, looks like there's something messed up here. Can you put the events "
+"back into their correct order?\n"
+"\n"
+"There are two ways to do this: You can drag the 'interactive rebase' card to "
+"the commit before the one you want to change, then reorder the lines in the "
+"file that opens, and save it.\n"
+"\n"
+"Or you can reset the main tag to the very first commit, and then cherry-pick "
+"single commits in the order you want. You have cards for both approaches!"
+msgstr ""
+
+msgid ""
+"Oops - you deleted the 'essay' file, which you worked on all night!\n"
+"\n"
+"Luckily, Git is here to help! You can use `git checkout` to restore the file!"
+msgstr ""
+
+msgid ""
+"Here's a similar problem: you really liked the essay from the very first "
+"commit, and want to have it back! Well, checkout can also restore things "
+"from older commits, Here's how:\n"
+"\n"
+"    git checkout [commit] [file]"
+msgstr ""
+
+msgid ""
+"Oh no, we made a bad commit! How can we undo making the commit, and go back "
+"to a point where we can try again?\n"
+"\n"
+"The answer is using `git reset [commit]`, which does two things:\n"
+"\n"
+"- It resets the current branch ref to the commit you specify.\n"
+"- And it resets the index to that commit.\n"
+"\n"
+"It does not change your working directory in any way, which means that after "
+"that, you can try making the commit you want again."
+msgstr ""
+
+msgid ""
+"We were talking about how to undo a commit, and fix it. This only helps when "
+"you haven't already pushed it to a remote. When that has happened, and you "
+"want to undo the effects of the commit completely, your best option is `git "
+"revert`"
+msgstr ""
+
+msgid ""
+"Say you were looking at something in the past, and then switched back to the "
+"main branch.\n"
+"\n"
+"But then, you got reaaally distracted, and after your lunch break, you can't "
+"remember on which commit in the past you were before. How can you find out?\n"
+"\n"
+"There's a convenient command that shows you all the places your HEAD did "
+"point to in the past:\n"
+"\n"
+"    git reflog"
+msgstr ""
+
+msgid ""
+"Your friend has a problem! Clone the repo, create a branch called "
+"'solution', and fix the problem in this branch. When you're ready, make a "
+"'Pull Request' by using `git tag pr`."
+msgstr ""
+
+msgid ""
+"(Please zoom out a bit using your mouse wheel! :D)\n"
+"\n"
+"Oh no! You have lost your key at some point during the day!\n"
+"\n"
+"Sure, you could look at every single commit in an attempt to find it - but "
+"there's a better way: your time machine has a built-in way to find the point "
+"in time where things went wrong quickly!\n"
+"\n"
+"First, play the 'bisect start' card. Then, go to a commit where you don't "
+"have the key, and play the 'bisect bad' card. Likewise, go to a commit early "
+"on where you have the key *in your pocket*, and play the 'bisect good "
+"card'.\n"
+"\n"
+"After you've found the last good commit, reset the main branch to it. What "
+"happened to the key after you lost it?"
+msgstr ""
+
+msgid ""
+"You will encounter situations in which you are working on your project but "
+"you need to\n"
+"put your current changes aside temporarily. To do so, you can use the stash "
+"function. Use\n"
+"    git stash push \n"
+"to add your current changes to the stash stack.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you stashed your changes and you want to apply them back to your "
+"current working directory, you can use\n"
+"    git stash pop\n"
+"This will remove the changes from the stash stack. If you also want to keep "
+"the changes on the stash stack, use\n"
+"    git stash apply\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"If you want to inspect your stash stack, use the command\n"
+"    git stash list\n"
+"    \n"
+"Oh, you don't want to keep your stashed changes? There are way too many? "
+"Then go ahead and clear the stack with\n"
+"    git stash clear\n"
+"If you only want to discard a certain stash entry, you can use\n"
+"    git stash drop <stash>\n"
+"    \n"
+"Clear your stash stack!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"If you want to keep your changes but they don't belong to the main branch, "
+"you can easily\n"
+"create a new branch from your stashed changes. Just use\n"
+"    git stash branch <branchname> <stash>\n"
+"If you just want to use the latest stash entry, you can leave the <stash> "
+"option empty.\n"
+"\n"
+"Create a new branch from the stashed changes!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you want to reapply your changes but you already continued working on "
+"your file, you might get\n"
+"a merge conflict! Let's practise this situation.\n"
+"Pop the changes from the stash with\n"
+"    git stash pop\n"
+"and resolve the merge conflict. Commit the resolved changes and clear the "
+"stash stack afterwards.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"Some of your commits may be special commits. Maybe you reached a milestone "
+"or a new version number.\n"
+"\n"
+"You can mark these commits with a special flag called 'tag'.\n"
+"\n"
+"Write \n"
+"\n"
+"    git tag <tag-name> \n"
+"    \n"
+"to tag your commit.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"You added way too many tags? No prob! Delete them with\n"
+"\n"
+"    git tag -d <tag-name>\n"
+"    \n"
+"Remove all tags in this repo!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"But what happens if you forgot to tag your current commit?\n"
+"No Prob! You can also tag older commits via\n"
+"\n"
+"    git tag <tag-name> <commit-hash>\n"
+"    \n"
+"Tag the commit 'Adding feature 2' with the name 'v1'!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you work with remote repositories, tags are not pushed or pulled "
+"automatically.\n"
+"\n"
+"You can push a tag with\n"
+"    git push <remote> <tag-name>\n"
+"Or all tags with:\n"
+"    git push <remote> --tags\n"
+"    \n"
+"Deleting tags on your remote works with: \n"
+"    git push <remote> --delete <tag-name>\n"
+"    \n"
+"You can also sync \n"
+"    git fetch <remote> --prune --prune-tags\n"
+"\n"
+"\n"
+"Add a tag named 'v2' to the last commit and push it to the remote. Also pull "
+"the v1 tag to your local repository."
+msgstr ""
+
+msgid "This is an empty sandbox you can play around in."
+msgstr ""
+
+msgid ""
+"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n"
+"\n"
+"How can you push tags and branches on a remote? How can you delete them "
+"again?"
+msgstr ""
+
+msgid ""
+"Here's a sandbox you can play around in.\n"
+"\n"
+"You can use both the playing cards, as well as the terminal. This is a real "
+"Git terminal! Fun things to try:\n"
+"\n"
+"- Make a commit that merges three timelines together at once!\n"
+"- Create and delete some tags!\n"
+"- Make a timeline that's completely independent of the rest!"
+msgstr ""
+
+#: HITS
+msgid ""
+"But there's another way to interact with Git:\n"
+"\n"
+"Try typing `git init` into the black terminal below, and pressing the enter "
+"key!"
+msgstr ""
+"Ma c'e' un'altro modo per interagire con Git:\n"
+"\n"
+"Prova a scrivere `git init` nel terminale sotto, per poi premere il tasto "
+"invio!"
+
+msgid ""
+"Again, instead of using the card, you can also type the commands which are "
+"printed on it into the black terminal below!\n"
+"\n"
+"This is totally optional! But this will be a super useful skill in the real "
+"world - and it will give you a sparkling golden badge! :)"
+msgstr ""
+"Nuovamente, al posto di usare la carta, puoi anche digitare, nel terminale "
+"sotto, i comandi che trovi stampato sulla carta!\n"
+"\n"
+"Questo e' completamente opzionale! Ma questa sara' una skill veramente utile "
+"nel mondo reale - e ti dara' un distintivo scintillante! :)"
+
+msgid ""
+"To go back to old commands, you can press arrow up and down. That way, you "
+"don't have to type in long commands twice."
+msgstr ""
+"Per scorrere i vecchi comandi, puoi premere la freccia su e giu. In questo "
+"modo, non dovrai digitare nuovamente i comandi."
+
+msgid ""
+"On the command line, you can easily delete all files ending in -web using "
+"this command:\n"
+"\n"
+"    rm *web"
+msgstr ""
+
+msgid ""
+"To checkout a specific commit, type `git checkout`, then a space, and then "
+"right click on the commit you want!\n"
+"\n"
+"This will insert the commit's unique identifier!"
+msgstr ""
+
+msgid ""
+"The blue animal represents a concept known as the 'HEAD pointer' in Git: It "
+"shows you which commit is the current one.\n"
+"\n"
+"Here's a cool trick to go to the previous commit: \n"
+"\n"
+"    git checkout HEAD^\n"
+"\n"
+"You can also go back two commits by typing, for example: \n"
+"\n"
+"    git checkout HEAD~2"
+msgstr ""
+
+msgid ""
+"Branches also make it really easy to travel between different places using "
+"the command line! As soon as you have a branch called 'birthday', you can "
+"type `git checkout birthday` to travel to it!"
+msgstr ""
+
+msgid ""
+"To travel to a branch, type `git checkout name_of_the_branch`.\n"
+"\n"
+"And to travel to the last commit, type `git checkout --detach "
+"name_of_the_branch`."
+msgstr ""
+
+msgid ""
+"You can use tab completion in the terminal! Start typing a filename, then "
+"press the tab key to complete its name. This will often save you some time!"
+msgstr ""
+
+#: CONGRAT
+msgid ""
+"Good job, you solved the level!\n"
+"\n"
+"Feel free to try a few more things or click 'Next level'."
+msgstr ""
+"Ottimo lavoro, hai risolto il livello!\n"
+" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'."
+
+msgid ""
+"Suddenly, your cat jumps on the table, snatches away the form, and runs "
+"away! Oh no. All your hard work, gone!\n"
+"\n"
+"You clearly need a better solution.\n"
+"\n"
+"(Click 'Next Level' as soon as you're ready!)"
+msgstr ""
+"All'improvviso il tuo gatto salta sul tavolo, strappa via il modulo e scappa "
+"via!Oh no. Tutto il tuo duro lavoro, andato!\n"
+"\n"
+"Devi trovare una buona soluzione\n"
+"\n"
+"(Clicca 'Prossimo livello' appena sei pronto!)"
+
+msgid ""
+"Okay, this kind of works.\n"
+"\n"
+"But you're a bit worried that you'll end up with hundreds of copies of this "
+"form, and it will be hard to keep track of all of them.\n"
+"\n"
+"And especially when working with other people, sending copies back and forth "
+"doesn't seem ideal.\n"
+"\n"
+"You can't wait to try these time machines!"
+msgstr ""
+"Ok, questo cosa può funzionare.\n"
+"\n"
+"Ma sei un pochino preoccupato che alla fine ti troverai con un centinaio di "
+"copie di questo form, ed e' difficile tenerne traccia di tutto loro.\n"
+"\n"
+"Specialmente quando lavorerai con altre persone, inviare copie avanti ed "
+"indietro non sembra l'ideale.\n"
+"\n"
+"Non vedi l'ora di provare questa macchina del tempo!"
+
+msgid ""
+"Nice! See that little owl squirrel that appeared? It will be your companion, "
+"and always show you where you are in time!"
+msgstr ""
+"Bene! Vedi quel piccolo animale che e' apparso? Sara' il tuo compagno e ti "
+"mostrera' dove ti trovi nel tempo!"
+
+msgid ""
+"Cool! Instead of using the playing cards, you can also do everything via the "
+"command line!\n"
+"\n"
+"The command line is pretty powerful! Often, you can use it to solve tasks "
+"faster compared to using a graphical interface."
+msgstr ""
+"Bello! Al posto di usare le carte, puoi anche fare tutto tramite la linea di "
+"comando!\n"
+"\n"
+"La linea di comando e' molto potente! A volte, puoi usarla per svolgere "
+"alcuni compiti piu' velocemente in confronto all'uso dell'interfaccia "
+"grafica."
+
+msgid ""
+"Nice! You can try making some additional commits. When you feel comfortable, "
+"click on 'Next Level'."
+msgstr ""
+"Bene! Puoi provare a creare altri commit aggiuntivi. Quando ti senti a tuo "
+"agio, clicca su 'Prossimo livello'."
+
+msgid ""
+"Welcome to time travel school! :) I'll see you for your first class tomorrow!"
+msgstr ""
+"Benvenuto nella scuola del viaggio nel tempo! :) Ci vediamo domani per la "
+"tua prima lezione!"
+
+msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
+msgstr ""
+
+msgid "Don't you immediately feel more at home?"
+msgstr ""
+
+msgid ""
+"Wonderful! Now that you're getting familiar with the time machine, let's "
+"look at some more complicated situations..."
+msgstr ""
+
+msgid ""
+"Whew, good job! This seems like a *much* better outcome.\n"
+"\n"
+"Feel free to add more parallel timelines, or make them longer.\n"
+"\n"
+"If you're ready, our next mission is already waiting..."
+msgstr ""
+
+msgid ""
+"Now you can travel between those branches easily (using `git checkout`) - "
+"try it!\n"
+"\n"
+"Your friend is happy that you made it to the birthday party and you also got "
+"your concert ticket signed. Yay!"
+msgstr ""
+
+msgid ""
+"On second thought, maybe you even prefer the ice cream timeline to the main "
+"one? :)"
+msgstr ""
+
+msgid ""
+"I wonder if you're more relaxed when you *sleep* in parallel timelines..."
+msgstr ""
+
+msgid "Yum, that sounds like a good breakfast!"
+msgstr ""
+
+msgid ""
+"Notice how the other timelines and commits are still there - if anything "
+"goes wrong, you can also travel back to them.\n"
+"\n"
+"It's really hard to actually *destroy* stuff with your time machine."
+msgstr ""
+
+msgid ""
+"Feel free to reset the level and try the other strategy! Which one do you "
+"like better?"
+msgstr ""
+
+msgid ""
+"Well done! :) The only problem is that you now have to walk all the way back "
+"home, again..."
+msgstr ""
+
+msgid "Nice stash you got there! :)"
+msgstr ""
+
+msgid "Yay, you got your changes back! :)"
+msgstr ""
+
+msgid "All clear! :)"
+msgstr ""
+
+msgid "Stashed changes are in a new branch! :)"
+msgstr ""
+
+msgid "Nice! You tagged your first commit :)"
+msgstr ""
+
+msgid "Well done :)"
+msgstr ""
diff --git a/project.godot b/project.godot
index 05c7cc7..0a401a8 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,7 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://locale/it.po", "res://locale/it_levels.po", "res://locale/it_cards.po" )
+translations=PoolStringArray( "res://locale/it.po", "res://locale/it_cards.po", "res://locale/it_levels.po" )
 locale_filter=[ 0, [  ] ]
 
 [network]
diff --git a/scenes/level.gd b/scenes/level.gd
index a05de90..743430f 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -20,9 +20,9 @@ func load(path):
 		# This is a new-style level.
 		var config = helpers.parse(path)
 		
-		title = tr(config.get("title", slug))
+		title = tr(config.get("title", slug)) # Title of Levels
 		description = config.get("description", "(no description)")
-		description = tr(description.replace("\"", "\'"))
+		description = tr(description.replace("\"", "\'")) # Descriptions how to make the level
 		
 		# Surround all lines indented with four spaces with [code] tags.
 		var monospace_regex = RegEx.new()
@@ -31,7 +31,7 @@ func load(path):
 		description = description.split("---")
 		
 		var cli_hints = config.get("cli", "")
-		cli_hints = tr(cli_hints.replace("\"", "\'"))
+		cli_hints = tr(cli_hints.replace("\"", "\'")) # suggestions to work strong
 		# Also do this substitution in the CLI hints.
 		cli_hints = monospace_regex.sub(cli_hints, "\n      [code][color=#bbbb5d]$1[/color][/code]", true)
 		
@@ -47,7 +47,7 @@ func load(path):
 		
 		congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")
 		congrats = congrats.replace("\"", "\'")
-		congrats = tr(congrats)
+		congrats = tr(congrats) # Congratulations when the level is finish
 		cards = Array(config.get("cards", "").split(" "))
 		if cards == [""]:
 			cards = []
@@ -87,7 +87,7 @@ func load(path):
 			for line in Array(config[k].split("\n")):
 				if line.length() > 0 and line[0] == "#":
 					desc = line.substr(1).strip_edges(true, true)
-					print("msgid \"", desc, "\"\nmsgstr \"PIPPO\"\n")
+					desc = desc.replace("\"", "\'")
 				else:
 					if not repos[repo].win_conditions.has(desc):
 						repos[repo].win_conditions[desc] = ""
diff --git a/scenes/level_select.gd b/scenes/level_select.gd
index e311f12..98526e1 100644
--- a/scenes/level_select.gd
+++ b/scenes/level_select.gd
@@ -61,10 +61,3 @@ func reload():
 			level_id += 1
 			
 		chapter_id += 1
-
-
-
-
-
-
-		
diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn
index eb8f3b5..69629da 100644
--- a/scenes/level_select.tscn
+++ b/scenes/level_select.tscn
@@ -97,7 +97,6 @@ margin_left = 163.0
 margin_top = 0.0
 margin_right = 309.0
 margin_bottom = 39.0
-text = "Toggle music"
 
 [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"]
 [connection signal="pressed" from="HBoxContainer/Back" to="." method="back"]
diff --git a/scenes/main.tscn b/scenes/main.tscn
index a97e9e4..18c9ba4 100644
--- a/scenes/main.tscn
+++ b/scenes/main.tscn
@@ -247,7 +247,6 @@ margin_left = 169.0
 margin_top = 0.0
 margin_right = 315.0
 margin_bottom = 39.0
-text = "Toggle music"
 
 [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )]
 anchor_right = 0.0
diff --git a/scenes/sandbox.tscn b/scenes/sandbox.tscn
index fc1e113..e0546a9 100644
--- a/scenes/sandbox.tscn
+++ b/scenes/sandbox.tscn
@@ -10,9 +10,6 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 3 )
 script = ExtResource( 4 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="Background" type="ColorRect" parent="."]
 anchor_right = 1.0

From ba3e4b07e83a27ba02b60d920ef75f7c2a2a43cc Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Fri, 19 Aug 2022 16:58:51 +0200
Subject: [PATCH 40/49] Add template files for generating .po file in other
 languages

---
 locale/cards.pot                  |  169 +++++
 locale/levels.pot                 | 1037 +++++++++++++++++++++++++++++
 locale/messages.mo                |  Bin 8795 -> 0 bytes
 locale/{messages.pot => text.pot} |  235 +++----
 4 files changed, 1291 insertions(+), 150 deletions(-)
 create mode 100644 locale/cards.pot
 create mode 100644 locale/levels.pot
 delete mode 100644 locale/messages.mo
 rename locale/{messages.pot => text.pot} (53%)

diff --git a/locale/cards.pot b/locale/cards.pot
new file mode 100644
index 0000000..a157bab
--- /dev/null
+++ b/locale/cards.pot
@@ -0,0 +1,169 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# Automatically generated, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-19 16:52+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
+
+#: CARDS DESCRIPTION oh-my-git/resources/cards.json:6
+msgid "Drag this card into the empty space above to initialize the time machine!"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:14
+msgid "Create your own copy of someone else's repo."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:22
+msgid ""
+"Set your name.\n"
+"\n"
+"(Will not change anything outside of this game.)"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:30
+msgid "Set your email address."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:38
+msgid "Drag this card to a commit or to a branch to travel to it!"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:46
+msgid "Reset changes in a local file."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:54
+msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:62
+msgid ""
+"Make a new commit, after automatically adding all changes to the index.\n"
+"You'll be asked to enter a short description of what you changed."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:70
+msgid "Make a new commit containing your current environment! Type in a description of what changed!"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:78
+msgid "Merge the specified timeline into yours. If necessary, will create a merge commit."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:86
+msgid "Abort the current merge attempt, and reconstruct the previous state."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:94
+msgid "Put the events in your current timeline on top of the specified one."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:102
+msgid "Get someone else's version of the current timeline, and try to merge it into yours."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:110
+msgid "Get a someone else's version of the current timeline."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:118
+msgid "Give the current timeline to someone else."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:126
+msgid "Make changes to the events in your current timeline, back to the commit you drag this to."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:134
+msgid "Continue the current rebasing process."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:142
+msgid "Move the branch you're on to the specified commit."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:150
+msgid "Jump to the commit, and update the index. Keep the current environment."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:158
+msgid "Reset the index version of a file to the version in the commit you're on."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:166
+msgid "Repeat the specified action on top of your current timeline."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:174
+msgid "Make a new commit that reverts the changes of the speicified commit."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:182
+msgid "Start looking for the commit where things got bad."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:190
+msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:198
+msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!"
+msgstr ""
+
+#: oh-my-git/resources/cards.json:206
+msgid "Update the index version of the file to its current real content."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:214
+msgid "Delete a file both in the working directory, as well as the index."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:222
+msgid "Make a commit from the current index."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:230
+msgid "Show what changed in the commit."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:238
+msgid "Create a new branch at your current location."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:246
+msgid "Delete a branch."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:254
+msgid "Display a log of where the ref pointed to in the past."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:262
+msgid "Create a new file."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:270
+msgid "Delete a file."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:278
+msgid "Rename a file."
+msgstr ""
+
+#: oh-my-git/resources/cards.json:286
+msgid "Make a copy of a file."
+msgstr ""
diff --git a/locale/levels.pot b/locale/levels.pot
new file mode 100644
index 0000000..eeced88
--- /dev/null
+++ b/locale/levels.pot
@@ -0,0 +1,1037 @@
+# Translations template for PROJECT.
+# Copyright (C) 2022 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# Automatically generated, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2022-08-18 10:39+0200\n"
+"PO-Revision-Date: 2022-08-19 16:53+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
+
+#: TITLE
+msgid "Living dangerously"
+msgstr ""
+
+#: Command
+msgid "Add another line to form.txt!"
+msgstr ""
+
+msgid "Making backups"
+msgstr ""
+
+msgid "Add another line to form2_really_final.txt!"
+msgstr ""
+
+msgid "Enter the time machine"
+msgstr ""
+
+msgid "Initialize the time machine!"
+msgstr ""
+
+msgid "The command line"
+msgstr ""
+
+msgid "Your first commit"
+msgstr ""
+
+msgid "Make a snapshot of the glass (a 'commit')"
+msgstr ""
+
+msgid "Change the contents of the glass!"
+msgstr ""
+
+msgid "And make a second commit!"
+msgstr ""
+
+msgid "Working together"
+msgstr ""
+
+msgid "Get the second commit from your teacher using `git pull`."
+msgstr ""
+
+msgid "Add your name to the list of students"
+msgstr ""
+
+msgid "Commit your result."
+msgstr ""
+
+msgid "And use `git push` to send it to your teacher!"
+msgstr ""
+
+msgid "Unexpected Roommates"
+msgstr ""
+
+msgid "Remove all spider webs."
+msgstr ""
+
+msgid "But make sure you keep your bed!"
+msgstr ""
+
+msgid "Interior design"
+msgstr ""
+
+msgid "Add two more pieces of furniture"
+msgstr ""
+
+msgid "Make sure the colors match your bed's color."
+msgstr ""
+
+msgid "Moving through time"
+msgstr ""
+
+msgid "Restore sisterly peace."
+msgstr ""
+
+msgid "Make parallel commits"
+msgstr ""
+
+msgid "Make sure that the child is happy."
+msgstr ""
+
+msgid "Make sure that the lion gets something to eat."
+msgstr ""
+
+msgid "Creating branches"
+msgstr ""
+
+msgid "Create a branch called 'birthday' that points to the birthday timeline."
+msgstr ""
+
+msgid "Create a branch called 'concert' that points to the concert timeline."
+msgstr ""
+
+msgid "Branches grow with you!"
+msgstr ""
+
+msgid ""
+"Travel directly to the last yellow commit of the birthday timeline, make a "
+"change to 'you', and make a commit"
+msgstr ""
+
+msgid ""
+"Travel to the blue 'concert' branch, make a change to 'you', and a commit."
+msgstr ""
+
+msgid "Deleting branches"
+msgstr ""
+
+msgid "Find the bad branches and delete them. Keep only the best one."
+msgstr ""
+
+msgid "Moving branches around"
+msgstr ""
+
+msgid "Did you eat a baguette on the baguette branch?"
+msgstr ""
+
+msgid "Did you drink a coffee on the coffee branch?"
+msgstr ""
+
+msgid "Did you eat a donut on the donut branch?"
+msgstr ""
+
+msgid "Merging timelines"
+msgstr ""
+
+msgid ""
+"Build a situation where you consumed a baguette, a coffee, *and* a donut."
+msgstr ""
+
+msgid "Be on a merge commit."
+msgstr ""
+
+msgid "Contradictions"
+msgstr ""
+
+msgid "Make a breakfast compromise in the 'main' branch."
+msgstr ""
+
+msgid "Step by step"
+msgstr ""
+
+msgid "Pick the timeline that's clearer, and make the alarm go off!"
+msgstr ""
+
+msgid "Add new files to the index"
+msgstr ""
+
+msgid "Add the candle."
+msgstr ""
+
+msgid "Make a commit."
+msgstr ""
+
+msgid "Update files in the index"
+msgstr ""
+
+msgid "Make a change to the candle."
+msgstr ""
+
+msgid "Resetting files in the index"
+msgstr ""
+
+msgid "Reset the changes in the green and blue candles!"
+msgstr ""
+
+msgid "And make a commit!"
+msgstr ""
+
+msgid "Adding changes step by step"
+msgstr ""
+
+msgid ""
+"Make changes to all three objects, to form a logical sequence of events!"
+msgstr ""
+
+msgid "Only add one of these changes!"
+msgstr ""
+
+msgid "And make a commit."
+msgstr ""
+
+msgid "Make a second commit that only records a single change."
+msgstr ""
+
+msgid "And a third one."
+msgstr ""
+
+msgid "Friend"
+msgstr ""
+
+msgid "Got the second line from your friend"
+msgstr ""
+
+msgid "Got the fourth line from your friend."
+msgstr ""
+
+msgid "The friend got a third line from you"
+msgstr ""
+
+msgid "The friend got a fifth line from you"
+msgstr ""
+
+msgid "Problems"
+msgstr ""
+
+msgid "Commit your local changes."
+msgstr ""
+
+msgid "Look at your friend's suggestion, make a compromise, and push it back."
+msgstr ""
+
+msgid "Rebasing"
+msgstr ""
+
+msgid "Order all tree branches into one and move the main branch ref"
+msgstr ""
+
+msgid "Reordering events"
+msgstr ""
+
+msgid "Reorder the commits to dress yourself in the correct way"
+msgstr ""
+
+msgid "Restore a deleted file"
+msgstr ""
+
+msgid "Restore the essay to contain 'important content'"
+msgstr ""
+
+msgid "Restore a file from the past"
+msgstr ""
+
+msgid "Get the first version of your essay, and make a new commit with it."
+msgstr ""
+
+msgid "Undo a bad commit"
+msgstr ""
+
+msgid ""
+"In the last main commit, the numbers file contains the numbers from 1 to 10."
+msgstr ""
+
+msgid "The commit message of that commit is 'More numbers'."
+msgstr ""
+
+msgid "The commit with the typo is not part of the main branch anymore."
+msgstr ""
+
+msgid "I pushed something broken"
+msgstr ""
+
+msgid "The team's main branch no longer contains the bad thing."
+msgstr ""
+
+msgid "And the history has not been modified."
+msgstr ""
+
+msgid "Go back to where you were before"
+msgstr ""
+
+msgid "Find out where you've been before, and go back there!"
+msgstr ""
+
+msgid "Cloning a repo"
+msgstr ""
+
+msgid "Yellow brick road"
+msgstr ""
+
+msgid "Find the last good commit"
+msgstr ""
+
+msgid "Stashing"
+msgstr ""
+
+msgid "Did you stash the current changes?"
+msgstr ""
+
+msgid "Pop from Stash"
+msgstr ""
+
+msgid "Did you pop the changes from the stash stack?"
+msgstr ""
+
+msgid "Clear the Stash"
+msgstr ""
+
+msgid "Did you clear your stash stack?"
+msgstr ""
+
+msgid "Branch from stash"
+msgstr ""
+
+msgid "Did you create a new branch from the stashed changes?"
+msgstr ""
+
+msgid "Merging popped stash"
+msgstr ""
+
+msgid "Did you resolve the confict and commit?"
+msgstr ""
+
+msgid "Did you clear stash stack?"
+msgstr ""
+
+msgid "Creating tags"
+msgstr ""
+
+msgid "Did you create a new tag?"
+msgstr ""
+
+msgid "Removing tags"
+msgstr ""
+
+msgid "Did you remove all tags?"
+msgstr ""
+
+msgid "Tagging later"
+msgstr ""
+
+msgid "Remote Tags"
+msgstr ""
+
+msgid "v1 tag in your repo"
+msgstr ""
+
+msgid "v2 tag in your repo"
+msgstr ""
+
+msgid "v2 tag in the remote"
+msgstr ""
+
+msgid "Empty sandbox"
+msgstr ""
+
+msgid "Sandbox with a remote"
+msgstr ""
+
+msgid "Sandbox with three commits"
+msgstr ""
+
+#: DESCRIPTION
+msgid ""
+"So you have decided to apply for time travel school, to learn how to use "
+"this time machine called 'Git'!\n"
+"\n"
+"How exciting!\n"
+"\n"
+"You're almost done with the paperwork! You just need to fill in one more "
+"reason why you want to learn Git."
+msgstr ""
+
+msgid ""
+"This time, you're making a lot of backup copies - you can look at them by "
+"clicking on them!"
+msgstr ""
+
+msgid ""
+"You've been accepted to time travel school! Yay! It's your first day! Your "
+"teacher explains:\n"
+"\n"
+"'To do anything with a time machine, you first need to initialize it!'\n"
+"\n"
+"Drag that blue card up to play it!"
+msgstr ""
+
+msgid ""
+"These playing cards are designed to be easy to use and to remember! We'd "
+"suggest sticking to them if you don't have a lot of experience with Git!"
+msgstr ""
+
+msgid ""
+"You can use your time machine to make snapshots of objects around you! Here, "
+"let's practice this!\n"
+"\n"
+"(Your teacher pours some water into a glass.)"
+msgstr ""
+
+msgid ""
+"Let's add your name to our list of students!\n"
+"\n"
+"I already have a second commit of it in my time machine - let's work "
+"together!"
+msgstr ""
+
+msgid ""
+"The first day at Time Travel School comes to an end and you receive the key "
+"to your room.\n"
+"Full of excitement you open the door just to find... spider webs! Spider "
+"webs everywhere!\n"
+"\n"
+"Remove all the spider webs you can find with the remove card!"
+msgstr ""
+
+msgid ""
+"Now that your room looks tidy, you can start to unpack your stuff. You "
+"brought two new pieces of furniture with you and with a bright smile,\n"
+"you see that their colors match the color of your bed!\n"
+"\n"
+"Build up your two pieces of furniture by playing the touch card.\n"
+"Then name your furniture - you can choose whatever you like.\n"
+"\n"
+"Make sure the colors match! You can find the bed's color in its "
+"description.\n"
+"Don't forget to add a color and description to your new furnitures, too!"
+msgstr ""
+
+msgid ""
+"The yellow boxes are frozen points in time, we call them 'commits'! You can "
+"travel between them using the 'checkout' card! (Try it!)\n"
+"\n"
+"Can you find out what happened here? Then, while on the last commit, edit "
+"the files to fix the problem, and make a new commit!"
+msgstr ""
+
+msgid ""
+"Did you know that creating parallel timelines is perfectly legal and safe? "
+"It's true!\n"
+"\n"
+"Can you find out when things went wrong in this zoo? Then, go back to the "
+"last good commit and create a parallel universe where everyone is happy!"
+msgstr ""
+
+msgid ""
+"You were invited to two parties! At one of them, your favorite band is "
+"playing - and the other one is your best friend's birthday party. Where "
+"should you go? No worries - as a time travel agent in training, you can go "
+"to both parties!\n"
+"\n"
+"To make it easier to tell which timeline is which, you can create time "
+"portals! (We call these 'branches'.)"
+msgstr ""
+
+msgid ""
+"Note that there are two options to 'travel to the end of a timeline':\n"
+"\n"
+"First, you can directly travel to the commit, like we've done it before.\n"
+"\n"
+"And second, you can travel to the branch label. In this case, when you make "
+"a new commit, the branch will grow with you, and still point at the end of "
+"the timeline!"
+msgstr ""
+
+msgid ""
+"Life is full of dangers, right? Even when walking to school, it seems like "
+"there's a lot of risks!\n"
+"\n"
+"This Monday is especially bad. You made it to school, but there's some "
+"timelines you definitely don't want to keep around."
+msgstr ""
+
+msgid ""
+"One of your colleagues messed up here, and put the branches in the wrong "
+"timelines!\n"
+"\n"
+"You could delete and re-create these branches - but you can also directly "
+"move them to different commits, by using\n"
+"\n"
+"    git checkout\n"
+"\n"
+"on the branch names, and then using\n"
+"\n"
+"    git reset --hard\n"
+"\n"
+"on the commit where you want the branch to be.\n"
+"\n"
+"The donut branch is in the right place, but the timeline is still incomplete "
+"- make you actually *eat* the donut in that branch!"
+msgstr ""
+
+msgid ""
+"Here's a trick so that you can sleep a bit longer: just do all your morning "
+"activities in parallel universes, and then at the end, merge them together!"
+msgstr ""
+
+msgid ""
+"Sometimes, timelines will contradict each other.\n"
+"\n"
+"For example, in this case, one of our clients wants these timelines merged, "
+"but they ate different things for breakfast in both timelines.\n"
+"\n"
+"Try to merge them together! You'll notice that there will be a conflict! The "
+"time machine will leave it up to you how to proceed: you can edit the "
+"problematic item, it will show you the conflicting sections. You can keep "
+"either of the two versions - or create a combination of them! Remove the "
+">>>, <<<, and === markers, and make a new commit to finalize the merge!\n"
+"\n"
+"Let your finalized timeline be the 'main' one."
+msgstr ""
+
+msgid ""
+"Welcome to today's lesson! We're going to learn how to make commits with "
+"more precision!\n"
+"\n"
+"Have a look at these two timelines. They have exactly the same outcome. But "
+"one of them makes it much easier to figure out what happened."
+msgstr ""
+
+msgid ""
+"So far, when we made a commit, we've always recorded the current status of "
+"all objects, right?\n"
+"\n"
+"But Git allows you to pick which changes you want to put in a commit!\n"
+"\n"
+"To learn how that works, we need to learn about the 'index'! In the index, "
+"we can prepare what will be in the next commit. In this game, the index is "
+"represented by a blue aura around icons in the file browser!\n"
+"\n"
+"Initially, the index is empty. To make a commit that contains a new file, we "
+"need to add it!"
+msgstr ""
+
+msgid ""
+"When we change files, the index won't change on its own. We have to use `git "
+"add` to update the index to the changed version of the file.\n"
+"\n"
+"Let's try that!\n"
+"\n"
+"The icons in the file browser show you when the actual file (white) and the "
+"version in the index (blue) are different, and when they are the same!"
+msgstr ""
+
+msgid ""
+"See the dark shadow behind the icons? That's the version of the file in the "
+"last commit!\n"
+"\n"
+"For example, these candles have been blown out, and that change has been "
+"added.\n"
+"\n"
+"But you decide that this was a mistake! You only want to blow out the red "
+"candle in the next commit!\n"
+"\n"
+"If you already have updated the index to a changed file, but want to reset "
+"it, you can use `git reset`!"
+msgstr ""
+
+msgid ""
+"The index is really useful, because it allows us to be precise about which "
+"changes we want to include in each commit!"
+msgstr ""
+
+msgid ""
+"Your friend added another line to your essay! Get it, add a third one and "
+"send it to them!\n"
+"\n"
+"Take turns until you have five lines!"
+msgstr ""
+
+msgid ""
+"Both you and your friend have been working on the file, and want to sync up!"
+msgstr ""
+
+msgid ""
+"Okay - turns out that saving time in the morning by utilizing parallel "
+"universes is against the regulations of the International Time Travel "
+"Association. You'll have to do your tasks in sequence after all.\n"
+"\n"
+"See the 'rebase' card? When you drag it to a commit, it will copy the events "
+"in your current timeline after the specified one! This way, make a clean, "
+"linear timeline where you visit all three shops.\n"
+"\n"
+"Again, we want to make that our base reality - the 'main' branch should "
+"point to that timeline!"
+msgstr ""
+
+msgid ""
+"Oops, looks like there's something messed up here. Can you put the events "
+"back into their correct order?\n"
+"\n"
+"There are two ways to do this: You can drag the 'interactive rebase' card to "
+"the commit before the one you want to change, then reorder the lines in the "
+"file that opens, and save it.\n"
+"\n"
+"Or you can reset the main tag to the very first commit, and then cherry-pick "
+"single commits in the order you want. You have cards for both approaches!"
+msgstr ""
+
+msgid ""
+"Oops - you deleted the 'essay' file, which you worked on all night!\n"
+"\n"
+"Luckily, Git is here to help! You can use `git checkout` to restore the file!"
+msgstr ""
+
+msgid ""
+"Here's a similar problem: you really liked the essay from the very first "
+"commit, and want to have it back! Well, checkout can also restore things "
+"from older commits, Here's how:\n"
+"\n"
+"    git checkout [commit] [file]"
+msgstr ""
+
+msgid ""
+"Oh no, we made a bad commit! How can we undo making the commit, and go back "
+"to a point where we can try again?\n"
+"\n"
+"The answer is using `git reset [commit]`, which does two things:\n"
+"\n"
+"- It resets the current branch ref to the commit you specify.\n"
+"- And it resets the index to that commit.\n"
+"\n"
+"It does not change your working directory in any way, which means that after "
+"that, you can try making the commit you want again."
+msgstr ""
+
+msgid ""
+"We were talking about how to undo a commit, and fix it. This only helps when "
+"you haven't already pushed it to a remote. When that has happened, and you "
+"want to undo the effects of the commit completely, your best option is `git "
+"revert`"
+msgstr ""
+
+msgid ""
+"Say you were looking at something in the past, and then switched back to the "
+"main branch.\n"
+"\n"
+"But then, you got reaaally distracted, and after your lunch break, you can't "
+"remember on which commit in the past you were before. How can you find out?\n"
+"\n"
+"There's a convenient command that shows you all the places your HEAD did "
+"point to in the past:\n"
+"\n"
+"    git reflog"
+msgstr ""
+
+msgid ""
+"Your friend has a problem! Clone the repo, create a branch called "
+"'solution', and fix the problem in this branch. When you're ready, make a "
+"'Pull Request' by using `git tag pr`."
+msgstr ""
+
+msgid ""
+"(Please zoom out a bit using your mouse wheel! :D)\n"
+"\n"
+"Oh no! You have lost your key at some point during the day!\n"
+"\n"
+"Sure, you could look at every single commit in an attempt to find it - but "
+"there's a better way: your time machine has a built-in way to find the point "
+"in time where things went wrong quickly!\n"
+"\n"
+"First, play the 'bisect start' card. Then, go to a commit where you don't "
+"have the key, and play the 'bisect bad' card. Likewise, go to a commit early "
+"on where you have the key *in your pocket*, and play the 'bisect good "
+"card'.\n"
+"\n"
+"After you've found the last good commit, reset the main branch to it. What "
+"happened to the key after you lost it?"
+msgstr ""
+
+msgid ""
+"You will encounter situations in which you are working on your project but "
+"you need to\n"
+"put your current changes aside temporarily. To do so, you can use the stash "
+"function. Use\n"
+"    git stash push \n"
+"to add your current changes to the stash stack.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you stashed your changes and you want to apply them back to your "
+"current working directory, you can use\n"
+"    git stash pop\n"
+"This will remove the changes from the stash stack. If you also want to keep "
+"the changes on the stash stack, use\n"
+"    git stash apply\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"If you want to inspect your stash stack, use the command\n"
+"    git stash list\n"
+"    \n"
+"Oh, you don't want to keep your stashed changes? There are way too many? "
+"Then go ahead and clear the stack with\n"
+"    git stash clear\n"
+"If you only want to discard a certain stash entry, you can use\n"
+"    git stash drop <stash>\n"
+"    \n"
+"Clear your stash stack!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"If you want to keep your changes but they don't belong to the main branch, "
+"you can easily\n"
+"create a new branch from your stashed changes. Just use\n"
+"    git stash branch <branchname> <stash>\n"
+"If you just want to use the latest stash entry, you can leave the <stash> "
+"option empty.\n"
+"\n"
+"Create a new branch from the stashed changes!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you want to reapply your changes but you already continued working on "
+"your file, you might get\n"
+"a merge conflict! Let's practise this situation.\n"
+"Pop the changes from the stash with\n"
+"    git stash pop\n"
+"and resolve the merge conflict. Commit the resolved changes and clear the "
+"stash stack afterwards.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"Some of your commits may be special commits. Maybe you reached a milestone "
+"or a new version number.\n"
+"\n"
+"You can mark these commits with a special flag called 'tag'.\n"
+"\n"
+"Write \n"
+"\n"
+"    git tag <tag-name> \n"
+"    \n"
+"to tag your commit.\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"You added way too many tags? No prob! Delete them with\n"
+"\n"
+"    git tag -d <tag-name>\n"
+"    \n"
+"Remove all tags in this repo!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"But what happens if you forgot to tag your current commit?\n"
+"No Prob! You can also tag older commits via\n"
+"\n"
+"    git tag <tag-name> <commit-hash>\n"
+"    \n"
+"Tag the commit 'Adding feature 2' with the name 'v1'!\n"
+"\n"
+"---\n"
+"tipp1\n"
+"---\n"
+"tipp2\n"
+"---\n"
+"tipp3"
+msgstr ""
+
+msgid ""
+"When you work with remote repositories, tags are not pushed or pulled "
+"automatically.\n"
+"\n"
+"You can push a tag with\n"
+"    git push <remote> <tag-name>\n"
+"Or all tags with:\n"
+"    git push <remote> --tags\n"
+"    \n"
+"Deleting tags on your remote works with: \n"
+"    git push <remote> --delete <tag-name>\n"
+"    \n"
+"You can also sync \n"
+"    git fetch <remote> --prune --prune-tags\n"
+"\n"
+"\n"
+"Add a tag named 'v2' to the last commit and push it to the remote. Also pull "
+"the v1 tag to your local repository."
+msgstr ""
+
+msgid "This is an empty sandbox you can play around in."
+msgstr ""
+
+msgid ""
+"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n"
+"\n"
+"How can you push tags and branches on a remote? How can you delete them "
+"again?"
+msgstr ""
+
+msgid ""
+"Here's a sandbox you can play around in.\n"
+"\n"
+"You can use both the playing cards, as well as the terminal. This is a real "
+"Git terminal! Fun things to try:\n"
+"\n"
+"- Make a commit that merges three timelines together at once!\n"
+"- Create and delete some tags!\n"
+"- Make a timeline that's completely independent of the rest!"
+msgstr ""
+
+#: HITS
+msgid ""
+"But there's another way to interact with Git:\n"
+"\n"
+"Try typing `git init` into the black terminal below, and pressing the enter "
+"key!"
+msgstr ""
+
+msgid ""
+"Again, instead of using the card, you can also type the commands which are "
+"printed on it into the black terminal below!\n"
+"\n"
+"This is totally optional! But this will be a super useful skill in the real "
+"world - and it will give you a sparkling golden badge! :)"
+msgstr ""
+
+msgid ""
+"To go back to old commands, you can press arrow up and down. That way, you "
+"don't have to type in long commands twice."
+msgstr ""
+
+msgid ""
+"On the command line, you can easily delete all files ending in -web using "
+"this command:\n"
+"\n"
+"    rm *web"
+msgstr ""
+
+msgid ""
+"To checkout a specific commit, type `git checkout`, then a space, and then "
+"right click on the commit you want!\n"
+"\n"
+"This will insert the commit's unique identifier!"
+msgstr ""
+
+msgid ""
+"The blue animal represents a concept known as the 'HEAD pointer' in Git: It "
+"shows you which commit is the current one.\n"
+"\n"
+"Here's a cool trick to go to the previous commit: \n"
+"\n"
+"    git checkout HEAD^\n"
+"\n"
+"You can also go back two commits by typing, for example: \n"
+"\n"
+"    git checkout HEAD~2"
+msgstr ""
+
+msgid ""
+"Branches also make it really easy to travel between different places using "
+"the command line! As soon as you have a branch called 'birthday', you can "
+"type `git checkout birthday` to travel to it!"
+msgstr ""
+
+msgid ""
+"To travel to a branch, type `git checkout name_of_the_branch`.\n"
+"\n"
+"And to travel to the last commit, type `git checkout --detach "
+"name_of_the_branch`."
+msgstr ""
+
+msgid ""
+"You can use tab completion in the terminal! Start typing a filename, then "
+"press the tab key to complete its name. This will often save you some time!"
+msgstr ""
+
+#: CONGRAT
+msgid ""
+"Good job, you solved the level!\n"
+"\n"
+"Feel free to try a few more things or click 'Next level'."
+msgstr ""
+
+msgid ""
+"Suddenly, your cat jumps on the table, snatches away the form, and runs "
+"away! Oh no. All your hard work, gone!\n"
+"\n"
+"You clearly need a better solution.\n"
+"\n"
+"(Click 'Next Level' as soon as you're ready!)"
+msgstr ""
+
+msgid ""
+"Okay, this kind of works.\n"
+"\n"
+"But you're a bit worried that you'll end up with hundreds of copies of this "
+"form, and it will be hard to keep track of all of them.\n"
+"\n"
+"And especially when working with other people, sending copies back and forth "
+"doesn't seem ideal.\n"
+"\n"
+"You can't wait to try these time machines!"
+msgstr ""
+
+msgid ""
+"Nice! See that little owl squirrel that appeared? It will be your companion, "
+"and always show you where you are in time!"
+msgstr ""
+
+msgid ""
+"Cool! Instead of using the playing cards, you can also do everything via the "
+"command line!\n"
+"\n"
+"The command line is pretty powerful! Often, you can use it to solve tasks "
+"faster compared to using a graphical interface."
+msgstr ""
+
+msgid ""
+"Nice! You can try making some additional commits. When you feel comfortable, "
+"click on 'Next Level'."
+msgstr ""
+
+msgid ""
+"Welcome to time travel school! :) I'll see you for your first class tomorrow!"
+msgstr ""
+
+msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
+msgstr ""
+
+msgid "Don't you immediately feel more at home?"
+msgstr ""
+
+msgid ""
+"Wonderful! Now that you're getting familiar with the time machine, let's "
+"look at some more complicated situations..."
+msgstr ""
+
+msgid ""
+"Whew, good job! This seems like a *much* better outcome.\n"
+"\n"
+"Feel free to add more parallel timelines, or make them longer.\n"
+"\n"
+"If you're ready, our next mission is already waiting..."
+msgstr ""
+
+msgid ""
+"Now you can travel between those branches easily (using `git checkout`) - "
+"try it!\n"
+"\n"
+"Your friend is happy that you made it to the birthday party and you also got "
+"your concert ticket signed. Yay!"
+msgstr ""
+
+msgid ""
+"On second thought, maybe you even prefer the ice cream timeline to the main "
+"one? :)"
+msgstr ""
+
+msgid ""
+"I wonder if you're more relaxed when you *sleep* in parallel timelines..."
+msgstr ""
+
+msgid "Yum, that sounds like a good breakfast!"
+msgstr ""
+
+msgid ""
+"Notice how the other timelines and commits are still there - if anything "
+"goes wrong, you can also travel back to them.\n"
+"\n"
+"It's really hard to actually *destroy* stuff with your time machine."
+msgstr ""
+
+msgid ""
+"Feel free to reset the level and try the other strategy! Which one do you "
+"like better?"
+msgstr ""
+
+msgid ""
+"Well done! :) The only problem is that you now have to walk all the way back "
+"home, again..."
+msgstr ""
+
+msgid "Nice stash you got there! :)"
+msgstr ""
+
+msgid "Yay, you got your changes back! :)"
+msgstr ""
+
+msgid "All clear! :)"
+msgstr ""
+
+msgid "Stashed changes are in a new branch! :)"
+msgstr ""
+
+msgid "Nice! You tagged your first commit :)"
+msgstr ""
+
+msgid "Well done :)"
+msgstr ""
diff --git a/locale/messages.mo b/locale/messages.mo
deleted file mode 100644
index a440a58d63cb555e4be7f22382399bf6ff95e0d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8795
zcmds+UyNMWUB_>l(8BPiG!$BBL(dSBwUeFk+HP8BT_;)F8)sdwZFV;f>7U>`GiPT{
zednIZ{j=*$A(aY^S|Qq(mhylQ5)wj4z!Tz+)CZIY5TXbK5(oiOK%zqMfFd3cQW2l;
zIrq-Yx(+D<35k*KerN7I=XZYp|6Kp={r7z-;j_v0Uap^dOOlMif4+}Dd_McuB)JHF
z4*XW|k3l{93y^=wU-RdE;NOD}gZI8INxlVq1nhw;;QinW;4=6k_}$<yfak&A0KW@-
z9sB@z4~J}kXTVkP)1aPz1!PI`N8n@NpM%?A=i8E`0$%_h0sjoty8i$l2jALBl6Qhn
zfx7=J_#NQKo8O-RFY&toA({LxD7jt*9|Hdn{66qsz>kA(`}U|03x1B@zY0DNz8|7n
z;OD_p;A<dTl6QV*)W`c8d<c|29|fhyDX8;mP;&k__#yD8!5;+w0Nen-28#caEYiNm
z!FPdAfKP!pKm&dm)cL;+*5E&Z`(XO^Bta#~UxGgd{v9ZK=P`!ta2fmp_%q-~!3W-v
zBrk)9pw9a@kblY7`6K<k9ixix_kwHSgP`tP5S1hasC_SkkAOc3ehU0`P<rlvPt?l?
z!H?XNB<H}Z-2XX@B|2XNweDX*o%3~Y3B2!nqnyj2?r(xUa0i4$@@Y_h^s~+HuY$7g
zYoPc)jxojWS#TTt3Gl<<pMrY+07{i!PJpt*2f-f&D{u^c6+8((_U?H87<_`?Ir#nH
zuYuzG_d&_=C(ZA_0d?*_fbxrDEY>-v!5;?Cf<FM>1YZC@39f^G1%44UJd|C26Z{zX
zj`zSDn1hO^Uj`L-zXje4eg(V%{vIehyqn+_Uk`wi^I=eSKLaj-p9H1<UjoI~>!9fU
zJBVu77}viGe2||X0TrJwgDLns;K#uC;IxwaHuzESGoa|b23`dJ5qur&lQc$P*WerA
zE1=eOx>26{LD}~~P<%fEu7RgP$y+!03Ml!$3_cA0JopOuDky)y{6mq>4tNj0wf7mW
z$GF<h`}y)j`va7`Yh2QgXfJWKAKByt*99&_NeH75x2QST5p{*n2l)FTF5E7}sdS}}
zVng!C=U_4T?lLHy5#r$^`}CXd0>gEQOL+kI2_M2Cd=Tr%M>0##PjfxQ^%gFDRw5*4
z8x+Wn%H4`jePnON&^a#YUVi>4m;8*dO^$QPMyI)O%OjsN{5r+;IM*?*%Ut^4uE8!(
zfw)NU{d+-uHo2bUx}qOz17B38+OuX@7lq9$GqJ_knzX9yWLhnoG#{D54t-u$MLmp5
zr-j{jzAjB!rIqa`YX`RU6WdMBr^8#xg|rxz-Q<FwOfy^AKz!`e%=lftyV7KK-)20|
zE0@>td3$(a2Wjc@v6&WrXv?zCGM_=Lu$*L4liLF`DAIhm2aD#=*TszS%n#Gb`J6qA
zt9M-ni_NXD!5`#i=%<HbNPPR;8k?1NsYKGL?<W^+U_5P3TDT!%X5gzm<MJTbfiG@}
z-;qN}l`js_SZNMymI<X-myhi2J4o=;mD4OeM54@(#mK>)Eut<8yKAQ2<&_<o%C`qi
z)3Rb)k&dGhhiI8+EYKmc)uAb;=@2Ci{63Vl(^W3b+)I&e<tEll(&3)VG1VQESe~Mk
z$;4I07uwxQukTfnVzNN93R@3?A;d$Otmos*m3zr0Te0a5h3?y;#3s@9b0-ro8GQ7^
zuK(Vi=#y1(D1M^1!gNrD%!|*66KN$_3)iji>(cBNeiCk%Q#*9K4)sQX%ht<F_66f=
z^EYYP<){@7b<#Q;TVHNv)Ph9`S?b{zMLuJ*sUeKq1b5$;8(rHon}_BS56$4Pljh}t
zEp%V|&5N}y<>2LN@{AjCSYd4$0(6l1L78k2qiL3b6~4sMeB4boxaHD3xm-`C;v{ew
z>>Q=8rz1s{ZbwfwAGVg23xe2u-xWTepv8W2CC$fmI=0CbMRA#IrneNAjqA*G+$y2*
z{@JP+b!jk7zul~$ZV1R)DUOTGM}m8ShpyQ<oQhkH9oceNxT&-fgNURs+=E3s>fVKV
zwa0Ukmo4yzAYxcsw(f~%xFfD{7Zy?5F8VcTUHJ(KXNby)<IzYw^SwDA`cc_Y1D)r6
zy~M)-$|`Tg$VQ){W6C|{;Jb-}3R-a*PNHx#;)o*GMi)o4)w<rY8IX}%P8t=9=xCNl
zD)QZCNcqyoJTzJoi-Bb}c8PoC<y498z)9LR*TzVUXFxLKASgD;nnRb!Z<wi3%lxEv
z%T;^3YHGt(HzY+}yOkbxlk0U1<~I>FlAbPDvN0sty`TI@?W$zUW<DJOc}g_3KDcG4
z)Ry24bDq*+bSbeLXx>%5eP}6Xv_=UosWOx`{v99BV#_RK!+3nFjrKuPRpyq8O6w=v
z)Zu}@4er}yn==DLc9ObGzDKx|_h$DcV87Ej_M9w~lWii0<cdQoFn;Rms#FSTOY&G7
zjwjoD{(wp}4<dP1h?9^pIH5{$)y(@)^mbJ#lqh1|XiFFelxEDSgLD+Og#6OzxJ?Yr
z9@+s`b<J~oHu$jQJsMfmp1j<(G$*5Fb4$5Ng;PT4=$m8jM>j(fya}P3Ce);^82ztL
z)xQ7zV|V1ks^rNIndO$OB%>diNlnKheKpK?JJ&OtmX^hfHNY-bfX?7heng!N218!7
zRo2D6JzS0SX|s0ra6yxzw&<dv`7%v)w-h{Y_S|?c<5EMxLiHs+@F5LOL;||}OIevy
zdH#=o&-jsjm4@1;Mc$g?&FI%m=_`B=uWEBhqXaDZNPQVStF)e5qzwU0G|JfsprEcO
zYfu*ZCN592u31wiYZe7%+S_(mOJOo*tdycUOmkD(P%d4eD4Nz)-#p(uNwboiui_NQ
z$38Qj9O$5GH|0+(4AGM2gg?QZ@tDSPQkQO+JR2%<1Hs8d30X`Y(oAS>Fr*{@w?Tz*
zB}Zs@`pFGBUR~PVnhyFoqFRNo-|r{SE3dXpH>DtYk*{g@gC2tf6PkPyv6ha>IVn+{
zjR;gCjTu4iZ0RRs(hgcLeMT1~0_cXb+c0fIHb$qpfEqb~wnoe4g`slJ*EhB>>Jgtz
zB&t$cQn@O#$@Rj2f@Zt7G3p_r+RIgQee2rg^$R=Z#`@Ow#<i;*vN}bzw^@$esCT{|
zm%SaoYSuT`Hm*FicJboY`u29``nBE`gNz9DE~1@Pb86+(sou(&-pMoO<jU&l#~)oe
zwX)K=LhIezQ5wopTKrYBcBJ%=ZI1upD=dt?QE$hllT{LLZabSBo9lBnPxe<j8hohQ
zJ#{gwrXpjUKs_!$t1MkmPtHBN^K|dbd|i_Od+YhotIJq5X9lk7Tx!qloj+VP=hFcl
z`l<fOmHz1&Bdd4^iKZ^ntoO7pCM8Tw!_V^Esk7t&JvnzQH{EmQ<ngne*gDcDtG|*b
zg^>^o!7r`OzGu!cb&kRqIZWY(UQ?kfnL09>T-K0S7=$cNqQP)|IJ7UZI?eE+jeO*6
zRd@}E6~8aU0g(x4$qxoRY7Yo~E{;uqnR%@XgJLR<nz1nO(aws=`DPv74|683J&d+P
zVwR;$Q>7Cds#H;;I1tWP%fp&`tgmV{v{T2<kY-??_AE1UDrw-wI?aZ4zLaK&!#2iI
zSO|y5V~^eoky=7+M0*HjiLWnE%F=yb_!(Px04K3(iIArU`bIkHtk8KlOOqosMryUt
zP2s4Lq)W|&#~31yn>_@mWjQ5D!vtCKwV&Y1<&eA=2a3p$CTosWc`*C6uQbR_IR*u=
z7wu_|d`V>n#wY1eQ>5B&hC*gf{{}S6S}ImBYpkSp>1SgZQ7*BJItr&ph(Z?wf7fa1
z;RiEfFewYyAw8Cge9JT~7RY3ZTeNkDIm8ps16Mfr+~ohG&3L;;w3J>85nRCu!IpSR
zKe>kI+T6v6QEZbQV8g`}JxX1xfu_IIYYK%A5>-+(o&mkt8w82e_(ga$^MwuOu&`8F
z@oplLppUp_@-(k;h@drBSLx94c;cAVeIYx}N6pR_FC#pP%}0#=^ayfpG|PCy&DG>8
z?!sgCX9GM8)}sT+E|?E>$GoAr0P)+A)6=YG$k)_gJb*rBJmz>jXXfE%lRZIwc;AFH
z00q5$BE)e2E2KN7O*ZjW`M`xYISXF35G}JXB5YzVXu}xZalC~fpL=Djmf=)lsH)Mx
z9b9zHHZ$hFNXX+gaK>Z;RT5xoUi}r^luZOzd{d>vVisy#Utyi*c`eUWohOa&x)AFG
zP_t(497-uia#>ulj77*l3;+y`sD#Mo*Q^vN@X6FQ&S+pPFr<4j+f3V?i+;brAzfZ#
zNxVQZ4KxwoRkA(#ZX+5@g>MEAGGQ1a^@Lcv(;atR4r6n{Xq#$BGIDy46fzHtha`{l
zqlFPM^lToh2>Q9hx#xP3HFJfEqRwpF*(~b(vgS}*y!wk$eWOs!6J}CIkdS5+pH1!|
z+lVD}LjuRL3(UrMLxiXjQQ^zdO*}k>T12JMtFvpjc(*|4+HX{aD#x7yv^9qu7wrGW
z@=-8RPqM{31!`-`m)xsCl~B=nx7<{(R0);nf(y!7R*oOKNt2o0h>Il5q=aQ_+2|we
zZ4RN5Gr-!}I`lnHwyF`aG$~89J3=a4T-2IC9HHmZx`hEY+b3U8Ge{kcF^%nMknPWI
zH<5_+VT`?s*@GJf3&${uPQ6=u5|YXgDPrguVVm-JXJD$lHC%B_C}^a^p)F8#)9ZvH
z6^d!78cbD87&vksUXYb^e&n``gsn>{jEY{&5EE4^FCCw<!9K-u<hy3pxzISno=yrL
z+>|wQb5K*lZju*o;&8M-_Gb4@PJp^LeY3><0&x%V4b^KzA^co&slbcKMvR!0H)R#2
zmcS{Qtn+47gD{)A4D~d@thb!#O38Y)q21-h3&%B@<dll{{h_3jRD%a_Z{B#&j8lZ@
zHSi4aQ}dolons*4rCB_#tjFWF&*_@~r;nn@p|lWxvD}90)AU;*`a=IX>ruPrIx369
z@YofUdu7~#EBzQR4z)`4oM=>v!$TMK+5}uX5L*W8wvdD_fL)3OI+ihS($sRP4Vc#6
zksL<)p9?5tYGvD*_`06y|7p~sjU8PcYgAuVG$SJr(M#GKZs<|6x%-5fcvHi0nyfV)
z!|aQ4#w^#6VA^y<e1}F`5e73r(}~TRi5rY*u}anz{XS=o49XEhgv4wx4xG1@s-W0$
z2ntn~9w;|M@ebmt3e%_ajsR8Tn{h54ElCk_;6S}89wB2Cn1hj5%S$|+%#MqbNJ3Qb
ie!_&q+f|&+a|IZ?s6uURnHkeRnJ7mF!8IJSD)~>}nqWTw

diff --git a/locale/messages.pot b/locale/text.pot
similarity index 53%
rename from locale/messages.pot
rename to locale/text.pot
index 82b3c14..3a74517 100644
--- a/locale/messages.pot
+++ b/locale/text.pot
@@ -1,84 +1,71 @@
 # Translations template for PROJECT.
 # Copyright (C) 2022 ORGANIZATION
 # This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
+# Automatically generated, 2022.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2022-08-19 16:52+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Babel 2.10.3\n"
+"X-Generator: Poedit 3.1\n"
+
+msgid "teacher"
+msgstr ""
 
 #: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48
-msgid "label"
-msgstr ""
-
-#: oh-my-git/scenes/card.tscn:125
-msgid "Description"
-msgstr ""
-
-#: oh-my-git/scenes/card.tscn:144
-msgid "0"
-msgstr ""
-
+#: oh-my-git/scenes/card.tscn:125 oh-my-git/scenes/card.tscn:144
 #: oh-my-git/scenes/cards.gd:58
-msgid "YOUR_CARDS"
+msgid "These are your cards! Drag them to highlighted areas to play them!"
 msgstr ""
 
 #: oh-my-git/scenes/cards.tscn:34
 msgid "Draw new cards"
 msgstr ""
 
-#: oh-my-git/scenes/cards.tscn:48
-msgid "3"
-msgstr ""
-
-#: oh-my-git/scenes/file_browser.tscn:51
+#: oh-my-git/scenes/cards.tscn:48 oh-my-git/scenes/file_browser.tscn:51
 msgid "title"
 msgstr ""
 
-#: oh-my-git/scenes/file_browser.tscn:64
-msgid "root"
-msgstr ""
-
-#: oh-my-git/scenes/file_browser.tscn:70
-msgid "dir"
-msgstr ""
-
+#: oh-my-git/scenes/file_browser.tscn:64 oh-my-git/scenes/file_browser.tscn:70
 #: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32
 msgid "Save"
 msgstr ""
 
 #: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47
-msgid "x"
-msgstr ""
-
 #: oh-my-git/scenes/file_browser_item.tscn:118
 msgid "filename"
 msgstr ""
 
 #: oh-my-git/scenes/game.gd:3
-msgid "ENGLISH"
+msgid "English"
 msgstr ""
 
 #: oh-my-git/scenes/game.gd:3
-msgid "ITALIAN"
+msgid "Italian"
+msgstr ""
+
+#: oh-my-git/scenes/level.gd:45
+msgid ""
+"Good job, you solved the level!\n"
+"Feel free to try a few more things or click 'Next level'."
 msgstr ""
 
 #: oh-my-git/scenes/level.gd:81
-msgid "COMPLETE_GOAL"
+msgid "Complete the goal of this level"
 msgstr ""
 
 #: oh-my-git/scenes/level_select.gd:60
-msgid "GOLDEN_BADGE"
+msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?"
 msgstr ""
 
 #: oh-my-git/scenes/level_select.tscn:51
@@ -92,22 +79,15 @@ msgid "To the survey /o/"
 msgstr ""
 
 #: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214
-msgid "BACK"
+msgid "Back"
 msgstr ""
 
 #: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225
-msgid "RELOAD"
+msgid "Reload"
 msgstr ""
 
-#: oh-my-git/scenes/main.tscn:105
-msgid "Level name here!"
-msgstr ""
-
-#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136
-msgid "Level description here!"
-msgstr ""
-
-#: oh-my-git/scenes/main.tscn:237
+#: oh-my-git/scenes/main.tscn:105 oh-my-git/scenes/main.tscn:124
+#: oh-my-git/scenes/main.tscn:136 oh-my-git/scenes/main.tscn:237
 msgid "Cards!"
 msgstr ""
 
@@ -116,24 +96,18 @@ msgid "Tip!"
 msgstr ""
 
 #: oh-my-git/scenes/main.tscn:275
-msgid "NEXT_LEVEL"
+msgid "Next level"
 msgstr ""
 
 #: oh-my-git/scenes/music_button.tscn:12
-msgid "MUSIC"
+msgid "Toggle music"
 msgstr ""
 
 #: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46
-#: oh-my-git/scenes/title.tscn:25
-msgid "by bleeptrack & blinry"
-msgstr ""
-
-#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38
-msgid "Original score by winniehell"
-msgstr ""
-
-#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56
-msgid "LEVELS"
+#: oh-my-git/scenes/title.tscn:25 oh-my-git/scenes/no_git.tscn:46
+#: oh-my-git/scenes/title.tscn:38 oh-my-git/scenes/no_git.tscn:65
+#: oh-my-git/scenes/title.tscn:56
+msgid "Levels"
 msgstr ""
 
 #: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62
@@ -141,83 +115,63 @@ msgid "Sandbox"
 msgstr ""
 
 #: oh-my-git/scenes/no_git.tscn:76
-msgid "INSTALL"
+msgid "Install"
 msgstr ""
 
-#: oh-my-git/scenes/no_git.tscn:97
-msgid "GIT_MESSAGE"
-msgstr ""
-
-#: oh-my-git/scenes/node.gd:83
-msgid "DRAG_AROUND"
-msgstr ""
-
-#: oh-my-git/scenes/node.tscn:55
-msgid "object_id"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:5
-msgid "GOT_IT"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:6
-msgid "INTERESTING"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:7
-msgid "VERY_USEFULL"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:8
-msgid "COOL"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:9
-msgid "NICE"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:10
-msgid "THANKS"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:11
-msgid "WHATEVER"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:12
-msgid "OKAY"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:13
-msgid "YAY"
-msgstr ""
-
-#: oh-my-git/scenes/notification.gd:14
-msgid "AWESOME"
-msgstr ""
-
-#: oh-my-git/scenes/notification.tscn:37
-msgid ""
-"This is a hint! This is a hint! This is a hint! This is a hint! This is a"
-" hint! This is a hint! This is a hint! This is a hint! This is a hint!"
+#: oh-my-git/scenes/no_git.tscn:97 oh-my-git/scenes/node.gd:83
+msgid "You can drag these around with your mouse!"
 msgstr ""
 
+#: oh-my-git/scenes/node.tscn:55 oh-my-git/scenes/notification.gd:5
 #: oh-my-git/scenes/notification.tscn:59
 msgid "Got it!"
 msgstr ""
 
-#: oh-my-git/scenes/repository.gd:92
-msgid "INTERACT"
+#: oh-my-git/scenes/notification.gd:6
+msgid "Interesting!"
 msgstr ""
 
-#: oh-my-git/scenes/repository.tscn:56
-msgid "Repo name"
+#: oh-my-git/scenes/notification.gd:7
+msgid "Very useful!"
 msgstr ""
 
-#: oh-my-git/scenes/repository.tscn:67
-msgid "Index:"
+#: oh-my-git/scenes/notification.gd:8
+msgid "Cool!"
 msgstr ""
 
+#: oh-my-git/scenes/notification.gd:9
+msgid "Nice!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:10
+msgid "Thanks!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:11
+msgid "Whatever..."
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:12
+msgid "Okay!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:13
+msgid "Yay!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.gd:14
+msgid "Awesome!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.tscn:37
+msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!"
+msgstr ""
+
+#: oh-my-git/scenes/notification.tscn:59 oh-my-git/scenes/repository.gd:92
+msgid "This is the time machine of another person! To interact with it, you need special commands!"
+msgstr ""
+
+#: oh-my-git/scenes/repository.tscn:56 oh-my-git/scenes/repository.tscn:67
 #: oh-my-git/scenes/repository.tscn:78
 msgid "Update"
 msgstr ""
@@ -226,11 +180,8 @@ msgstr ""
 msgid "Hide trees and blobs"
 msgstr ""
 
-#: oh-my-git/scenes/survey.tscn:34
-msgid "Oh My Git!"
-msgstr ""
-
-#: oh-my-git/scenes/survey.tscn:71
+#: oh-my-git/scenes/survey.tscn:34 oh-my-git/scenes/survey.tscn:71
+#: oh-my-git/scenes/title.tscn:68
 msgid "Quit"
 msgstr ""
 
@@ -242,30 +193,14 @@ msgid ""
 msgstr ""
 
 #: oh-my-git/scenes/terminal.gd:107
-msgid "YOUR_TERMINAL"
+msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!"
 msgstr ""
 
-#: oh-my-git/scenes/terminal.tscn:86
-msgid "git commit --allow-empty -m \"$RANDOM\""
-msgstr ""
-
-#: oh-my-git/scenes/terminal.tscn:93
-msgid "git checkout HEAD^"
-msgstr ""
-
-#: oh-my-git/scenes/terminal.tscn:100
-msgid "git checkout -b \"$RANDOM\""
-msgstr ""
-
-#: oh-my-git/scenes/text_editor.tscn:12
+#: oh-my-git/scenes/terminal.tscn:86 oh-my-git/scenes/terminal.tscn:93
+#: oh-my-git/scenes/terminal.tscn:100 oh-my-git/scenes/text_editor.tscn:12
 msgid "Text here"
 msgstr ""
 
-#: oh-my-git/scenes/title.tscn:68
-msgid "QUIT"
+#: oh-my-git/scenes/title.tscn:68 oh-my-git/scenes/title.tscn:74
+msgid "Language"
 msgstr ""
-
-#: oh-my-git/scenes/title.tscn:74
-msgid "LANGUAGE"
-msgstr ""
-

From ba53de04bd239eaf4d84324ad59911e535e25ab3 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Sat, 20 Aug 2022 12:20:36 +0200
Subject: [PATCH 41/49] change files .po names

---
 locale/{it_cards.po => it_IT-cards.po}   |  0
 locale/{it_levels.po => it_IT-levels.po} | 40 ++++++++++++++++++------
 locale/{it.po => it_IT-text.po}          |  0
 3 files changed, 31 insertions(+), 9 deletions(-)
 rename locale/{it_cards.po => it_IT-cards.po} (100%)
 rename locale/{it_levels.po => it_IT-levels.po} (95%)
 rename locale/{it.po => it_IT-text.po} (100%)

diff --git a/locale/it_cards.po b/locale/it_IT-cards.po
similarity index 100%
rename from locale/it_cards.po
rename to locale/it_IT-cards.po
diff --git a/locale/it_levels.po b/locale/it_IT-levels.po
similarity index 95%
rename from locale/it_levels.po
rename to locale/it_IT-levels.po
index 114a86e..36de2ac 100644
--- a/locale/it_levels.po
+++ b/locale/it_IT-levels.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-19 16:33+0200\n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2022-08-20 12:13+0200\n"
+"Last-Translator: Luca Canali <info@canaliluca.com>\n"
 "Language-Team: none\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -70,22 +70,22 @@ msgid "And use `git push` to send it to your teacher!"
 msgstr "E usa `git push` per inviarlo al tuo insegnante!"
 
 msgid "Unexpected Roommates"
-msgstr ""
+msgstr "Coinquilini inaspettati"
 
 msgid "Remove all spider webs."
-msgstr ""
+msgstr "Rimuovi tutte le ragnatele."
 
 msgid "But make sure you keep your bed!"
-msgstr ""
+msgstr "Ma accertati di lasciare il tuo letto!"
 
 msgid "Interior design"
-msgstr ""
+msgstr "Arredatore"
 
 msgid "Add two more pieces of furniture"
-msgstr ""
+msgstr "Aggiungi altri due mobili"
 
 msgid "Make sure the colors match your bed's color."
-msgstr ""
+msgstr "Assicurati che i colore corrisponda a quello del letto."
 
 msgid "Moving through time"
 msgstr ""
@@ -438,6 +438,12 @@ msgid ""
 "\n"
 "Remove all the spider webs you can find with the remove card!"
 msgstr ""
+"Il primo giorno nella scuola del viaggio nel tempo! La scuola finisce e "
+"rivevi le chiavi della tua stanza.\n"
+"Pieno di eccitazione apri la porta per trovare ... ragnatele! Ragnatele "
+"ovunque!\n"
+"\n"
+"Elimina tutte le ragnatele che trovi con la carta cancella!"
 
 msgid ""
 "Now that your room looks tidy, you can start to unpack your stuff. You "
@@ -451,6 +457,17 @@ msgid ""
 "description.\n"
 "Don't forget to add a color and description to your new furnitures, too!"
 msgstr ""
+"Adesso che la tua camera è riordinata, puoi iniziare a disfare le valige. Ti "
+"sei portato due nuovi mobili con te e con un felicità,\n"
+"noti che il loro colore si abbina al letto!\n"
+"\n"
+"Monta i tuoi due mobili giocando la carta touch.\n"
+"Quindi dai un nome ai tuoi mobili - puoi scegliere quello che preferisci.\n"
+"\n"
+"Accertati che il colori corrispondano! Puoi trovare il colore del letto "
+"nella sua descrizione.\n"
+"Non ti dimenticare anche di aggiungere il colore e la descrizione ai tuoi "
+"nuovi mobili!"
 
 msgid ""
 "The yellow boxes are frozen points in time, we call them 'commits'! You can "
@@ -910,6 +927,10 @@ msgid ""
 "\n"
 "    rm *web"
 msgstr ""
+"Nella riga di comando, puoi facilmente cancellare tutti i file -web usando "
+"questo comando:\n"
+"\n"
+"   rm *web"
 
 msgid ""
 "To checkout a specific commit, type `git checkout`, then a space, and then "
@@ -1030,9 +1051,10 @@ msgstr ""
 
 msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
 msgstr ""
+"Adesso la tua camera è ordinata ed accogliente! E' ora di disfare le valige!"
 
 msgid "Don't you immediately feel more at home?"
-msgstr ""
+msgstr "Non ti senti subito a casa?"
 
 msgid ""
 "Wonderful! Now that you're getting familiar with the time machine, let's "
diff --git a/locale/it.po b/locale/it_IT-text.po
similarity index 100%
rename from locale/it.po
rename to locale/it_IT-text.po

From 2616c8b9f12bfc6247e77b6a1363079f1d423e3b Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Sun, 21 Aug 2022 09:18:56 +0200
Subject: [PATCH 42/49] Adding renamed file .po

---
 project.godot | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/project.godot b/project.godot
index 0a401a8..fdb8df7 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,7 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://locale/it.po", "res://locale/it_cards.po", "res://locale/it_levels.po" )
+translations=PoolStringArray( "res://locale/it_IT-text.po", "res://locale/it_IT-levels.po", "res://locale/it_IT-cards.po" )
 locale_filter=[ 0, [  ] ]
 
 [network]

From 9da07de3a3e8cc33e1451093e7607b367325726b Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 24 Aug 2022 07:06:39 +0200
Subject: [PATCH 43/49] some traductions

---
 locale/it_IT-levels.po | 45 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 39 insertions(+), 6 deletions(-)

diff --git a/locale/it_IT-levels.po b/locale/it_IT-levels.po
index 36de2ac..0de9c41 100644
--- a/locale/it_IT-levels.po
+++ b/locale/it_IT-levels.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-20 12:13+0200\n"
+"PO-Revision-Date: 2022-08-22 20:29+0200\n"
 "Last-Translator: Luca Canali <info@canaliluca.com>\n"
 "Language-Team: none\n"
 "Language: it\n"
@@ -88,19 +88,19 @@ msgid "Make sure the colors match your bed's color."
 msgstr "Assicurati che i colore corrisponda a quello del letto."
 
 msgid "Moving through time"
-msgstr ""
+msgstr "Muoversi attraverso il tempo"
 
 msgid "Restore sisterly peace."
-msgstr ""
+msgstr "Ripristina il salvadanaio della sorella"
 
 msgid "Make parallel commits"
-msgstr ""
+msgstr "Crea commit paralleli"
 
 msgid "Make sure that the child is happy."
-msgstr ""
+msgstr "Assicurati che il bambino sia felice."
 
 msgid "Make sure that the lion gets something to eat."
-msgstr ""
+msgstr "Assicurati che il leone abbia qualcosa da mangiare."
 
 msgid "Creating branches"
 msgstr ""
@@ -476,6 +476,12 @@ msgid ""
 "Can you find out what happened here? Then, while on the last commit, edit "
 "the files to fix the problem, and make a new commit!"
 msgstr ""
+"La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "
+"\"commits\"! Puoi viaggiare tra loro usando la carta \"checkout\"! "
+"(Provala!)\n"
+"\n"
+"Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i "
+"files per risolvere il problema ed invia un nuovo commit!"
 
 msgid ""
 "Did you know that creating parallel timelines is perfectly legal and safe? "
@@ -484,6 +490,12 @@ msgid ""
 "Can you find out when things went wrong in this zoo? Then, go back to the "
 "last good commit and create a parallel universe where everyone is happy!"
 msgstr ""
+"Sai che creare linee temporali parallele è perfettamente legale e sicuro? E' "
+"vero!\n"
+"\n"
+"Puoi trovare cosa c'è di sbagliato in questo zoo? Bene, torna indietro "
+"all'ultimo commit buono e creane un universo parallelo dove tutti sono "
+"felici!"
 
 msgid ""
 "You were invited to two parties! At one of them, your favorite band is "
@@ -938,6 +950,10 @@ msgid ""
 "\n"
 "This will insert the commit's unique identifier!"
 msgstr ""
+"Guarda uno specifico commit, digita `git checkout` uno spazio e premi il "
+"tasto destro sopra il commit che vuoi!\n"
+"\n"
+"Questo inserirà l'identificatore unico del commit!"
 
 msgid ""
 "The blue animal represents a concept known as the 'HEAD pointer' in Git: It "
@@ -951,6 +967,16 @@ msgid ""
 "\n"
 "    git checkout HEAD~2"
 msgstr ""
+"L'animale blue rappresenta un concetto conosciuto come \"HEAD pointer\" in "
+"Git: Ti mostra qual'è il commit attuale.\n"
+"\n"
+"Ecco un simpatico trucchetto andare al commit precedente:\n"
+"\n"
+"    git checkout HEAD^\n"
+"\n"
+"Puoi anche andare indietro di 2 commit digitando, pre esempio:\n"
+"\n"
+"    git checkout HEAD~2"
 
 msgid ""
 "Branches also make it really easy to travel between different places using "
@@ -1060,6 +1086,8 @@ msgid ""
 "Wonderful! Now that you're getting familiar with the time machine, let's "
 "look at some more complicated situations..."
 msgstr ""
+"Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo "
+"situazioni più complicate... "
 
 msgid ""
 "Whew, good job! This seems like a *much* better outcome.\n"
@@ -1068,6 +1096,11 @@ msgid ""
 "\n"
 "If you're ready, our next mission is already waiting..."
 msgstr ""
+"Whew, ottimo lavoro! Questo sembra un risultato molto migliore.\n"
+"\n"
+"Sentiti libero di aggiungere altre line temporali parallele o allungarle.\n"
+"\n"
+"Se sei pronto, la prossima missione ci sta aspettando..."
 
 msgid ""
 "Now you can travel between those branches easily (using `git checkout`) - "

From 5b28efc48157bac1a54c950b5c9add4951b9ba75 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 24 Aug 2022 13:35:20 +0200
Subject: [PATCH 44/49] Some translations

---
 locale/it_IT-levels.po | 114 +++++++++++++++++++++++++----------------
 1 file changed, 71 insertions(+), 43 deletions(-)

diff --git a/locale/it_IT-levels.po b/locale/it_IT-levels.po
index 0de9c41..0f5e4b4 100644
--- a/locale/it_IT-levels.po
+++ b/locale/it_IT-levels.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-22 20:29+0200\n"
+"PO-Revision-Date: 2022-08-24 12:17+0200\n"
 "Last-Translator: Luca Canali <info@canaliluca.com>\n"
 "Language-Team: none\n"
 "Language: it\n"
@@ -91,7 +91,7 @@ msgid "Moving through time"
 msgstr "Muoversi attraverso il tempo"
 
 msgid "Restore sisterly peace."
-msgstr "Ripristina il salvadanaio della sorella"
+msgstr "Ripristina il salvadanaio della sorella."
 
 msgid "Make parallel commits"
 msgstr "Crea commit paralleli"
@@ -103,147 +103,158 @@ msgid "Make sure that the lion gets something to eat."
 msgstr "Assicurati che il leone abbia qualcosa da mangiare."
 
 msgid "Creating branches"
-msgstr ""
+msgstr "Creare branch"
 
 msgid "Create a branch called 'birthday' that points to the birthday timeline."
 msgstr ""
+"Creare una branch chiamata 'birthday' che punti alla timeline del compleanno."
 
 msgid "Create a branch called 'concert' that points to the concert timeline."
 msgstr ""
+"Crare una branch chiamata 'concert' che punti alla timeline del concerto."
 
 msgid "Branches grow with you!"
-msgstr ""
+msgstr "Le branch crescono con te!"
 
 msgid ""
 "Travel directly to the last yellow commit of the birthday timeline, make a "
 "change to 'you', and make a commit"
 msgstr ""
+"VIaggia direttamente nell'ultimo commit della linea temporale del "
+"compleanno, fai un cambiamento in 'you' e crea un commit"
 
 msgid ""
 "Travel to the blue 'concert' branch, make a change to 'you', and a commit."
 msgstr ""
+"Viaggia nella branch blue 'concert', fai un cambiamento in 'you', e un "
+"commit."
 
 msgid "Deleting branches"
-msgstr ""
+msgstr "Cancella le branch"
 
 msgid "Find the bad branches and delete them. Keep only the best one."
-msgstr ""
+msgstr "Trova le brach sbagliate e cancellale. Tieni solo la migliore."
 
 msgid "Moving branches around"
-msgstr ""
+msgstr "Sposta le branch in giro"
 
 msgid "Did you eat a baguette on the baguette branch?"
-msgstr ""
+msgstr "Hai mangiato una baguette nella branch 'baguette'?"
 
 msgid "Did you drink a coffee on the coffee branch?"
-msgstr ""
+msgstr "Hai bevuto un caffe nella branch 'coffee'?"
 
 msgid "Did you eat a donut on the donut branch?"
-msgstr ""
+msgstr "Hai mangiato una ciambella nella branch 'donut'?"
 
 msgid "Merging timelines"
-msgstr ""
+msgstr "Unisci le line temporali"
 
 msgid ""
 "Build a situation where you consumed a baguette, a coffee, *and* a donut."
 msgstr ""
+"Crea una condizione dove tu consumi una baguette, un caffe *e* una ciambella."
 
 msgid "Be on a merge commit."
-msgstr ""
+msgstr "Crea (e spostati su) un commit di unione."
 
 msgid "Contradictions"
-msgstr ""
+msgstr "Contradizioni"
 
 msgid "Make a breakfast compromise in the 'main' branch."
-msgstr ""
+msgstr "Fai un compromesso per la colazione nella branch 'main'."
 
 msgid "Step by step"
-msgstr ""
+msgstr "Passo dopo passo"
 
 msgid "Pick the timeline that's clearer, and make the alarm go off!"
-msgstr ""
+msgstr "Scegli la linea temporale piu' chiara e fai suonare l'allarme!"
 
 msgid "Add new files to the index"
-msgstr ""
+msgstr "Aggiungi nuovi file all'indice"
 
 msgid "Add the candle."
-msgstr ""
+msgstr "Aggiungi la candela."
 
 msgid "Make a commit."
 msgstr "Crea un commit."
 
 msgid "Update files in the index"
-msgstr ""
+msgstr "Aggiorna i file nell'indice"
 
 msgid "Make a change to the candle."
-msgstr ""
+msgstr "Fai un cambiamento nella candela."
 
 msgid "Resetting files in the index"
-msgstr ""
+msgstr "Resetta i file nell'indice"
 
 msgid "Reset the changes in the green and blue candles!"
-msgstr ""
+msgstr "Resetta i cambiamenti nelle candele verdi e blue!"
 
 msgid "And make a commit!"
-msgstr ""
+msgstr "E crea un commit!"
 
 msgid "Adding changes step by step"
-msgstr ""
+msgstr "Aggiungi i cambiamenti passo dopo passo"
 
 msgid ""
 "Make changes to all three objects, to form a logical sequence of events!"
 msgstr ""
+"Crea cambiamenti in tutti e tre gli oggetti, da una sequenza logica di "
+"eventi!"
 
 msgid "Only add one of these changes!"
-msgstr ""
+msgstr "Aggiungi solo uno di questi cambiamenti!"
 
 msgid "And make a commit."
-msgstr ""
+msgstr "E crea un commit."
 
 msgid "Make a second commit that only records a single change."
-msgstr ""
+msgstr "Crea un secondo commit con solo i record con un singolo cambiamento."
 
 msgid "And a third one."
-msgstr ""
+msgstr "E un terzo."
 
 msgid "Friend"
-msgstr ""
+msgstr "Amici"
 
 msgid "Got the second line from your friend"
-msgstr ""
+msgstr "Ottenuta la seconda linea dal tuo amico"
 
 msgid "Got the fourth line from your friend."
-msgstr ""
+msgstr "Ottenuta la quarta linea dal tuo amico."
 
 msgid "The friend got a third line from you"
-msgstr ""
+msgstr "Il tuo amico ti ha dato la terza linea"
 
 msgid "The friend got a fifth line from you"
-msgstr ""
+msgstr "Il tuo amico ti ha dato la quinta linea"
 
 msgid "Problems"
-msgstr ""
+msgstr "Problemi"
 
 msgid "Commit your local changes."
-msgstr ""
+msgstr "Committa i tuoi combiamenti."
 
 msgid "Look at your friend's suggestion, make a compromise, and push it back."
 msgstr ""
+"Guarda i suggerimenti del tuo amico, fai un compromesso, e rimadalo in "
+"dietro."
 
 msgid "Rebasing"
 msgstr ""
 
 msgid "Order all tree branches into one and move the main branch ref"
-msgstr ""
+msgstr "Ordina le tre branch in una e muovi il riferimeto alla branch 'main'"
 
 msgid "Reordering events"
-msgstr ""
+msgstr "Riordinare gli eventi"
 
 msgid "Reorder the commits to dress yourself in the correct way"
-msgstr ""
+msgstr "Riordina i commit per vestirti nell'ordine giusto"
 
 msgid "Restore a deleted file"
-msgstr ""
+msgstr "Recupera un file cancellato"
 
 msgid "Restore the essay to contain 'important content'"
 msgstr ""
@@ -506,6 +517,13 @@ msgid ""
 "To make it easier to tell which timeline is which, you can create time "
 "portals! (We call these 'branches'.)"
 msgstr ""
+"Sei stato invitato a due feste! In una di queste, suona la tua band "
+"preferita - e l'altra e' il compleanno del tuo migliore amico. Dove dovresti "
+"andare? Non ti preoccupare - sei un agente del tempo in addestramento, tu "
+"puoi andare ad entrambe le feste!\n"
+"\n"
+"Per rendere piu' facile capire quale sequenza temporale e', puoi creare dei "
+"portali! ( Che chiamiamo 'branches'.)"
 
 msgid ""
 "Note that there are two options to 'travel to the end of a timeline':\n"
@@ -983,6 +1001,9 @@ msgid ""
 "the command line! As soon as you have a branch called 'birthday', you can "
 "type `git checkout birthday` to travel to it!"
 msgstr ""
+"Le branch rendono molto facile viaggiare tra luoghi diversi anche usando la "
+"linea di comando! Quando hai una branch chiamata 'birthday', puoi digitare "
+"`git checkout bithday` per raggiungerlo!"
 
 msgid ""
 "To travel to a branch, type `git checkout name_of_the_branch`.\n"
@@ -990,11 +1011,18 @@ msgid ""
 "And to travel to the last commit, type `git checkout --detach "
 "name_of_the_branch`."
 msgstr ""
+"Per viaggiare in una branch, digita `git checkout nome_della_branch`.\n"
+"\n"
+"Per andare all'ultimo commit, digita `git checkout --detach "
+"nome_della_branch`."
 
 msgid ""
 "You can use tab completion in the terminal! Start typing a filename, then "
 "press the tab key to complete its name. This will often save you some time!"
 msgstr ""
+"Puoi usare la tab completition nel terminale! Inizia a digitare il nome del "
+"file, quindi permi il tasto tab per completare il suo nome. Questo ti "
+"permettera' di risparmiare tempo!"
 
 #: CONGRAT
 msgid ""
@@ -1087,7 +1115,7 @@ msgid ""
 "look at some more complicated situations..."
 msgstr ""
 "Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo "
-"situazioni più complicate... "
+"situazioni più complicate..."
 
 msgid ""
 "Whew, good job! This seems like a *much* better outcome.\n"
@@ -1146,13 +1174,13 @@ msgid "Yay, you got your changes back! :)"
 msgstr ""
 
 msgid "All clear! :)"
-msgstr ""
+msgstr "Tutto chiaro! :)"
 
 msgid "Stashed changes are in a new branch! :)"
 msgstr ""
 
 msgid "Nice! You tagged your first commit :)"
-msgstr ""
+msgstr "Bello! Hai taggato il tuo primo commit :)"
 
 msgid "Well done :)"
-msgstr ""
+msgstr "Ben fatto :)"

From 8cb71aa5b865fd36716634c8817733b2505d544e Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 31 Aug 2022 08:44:55 +0200
Subject: [PATCH 45/49] Presets upgrade

---
 export_presets.cfg | 262 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 261 insertions(+), 1 deletion(-)

diff --git a/export_presets.cfg b/export_presets.cfg
index 49998cc..4084d47 100644
--- a/export_presets.cfg
+++ b/export_presets.cfg
@@ -45,12 +45,54 @@ application/info=""
 application/icon=""
 application/identifier=""
 application/signature=""
+application/app_category="Games"
 application/short_version="1.0"
 application/version="1.0"
 application/copyright=""
 display/high_res=false
-privacy/camera_usage_description=""
 privacy/microphone_usage_description=""
+privacy/camera_usage_description=""
+privacy/location_usage_description=""
+privacy/address_book_usage_description=""
+privacy/calendar_usage_description=""
+privacy/photos_library_usage_description=""
+privacy/desktop_folder_usage_description=""
+privacy/documents_folder_usage_description=""
+privacy/downloads_folder_usage_description=""
+privacy/network_volumes_usage_description=""
+privacy/removable_volumes_usage_description=""
+codesign/enable=true
+codesign/identity=""
+codesign/timestamp=true
+codesign/hardened_runtime=true
+codesign/replace_existing_signature=true
+codesign/entitlements/custom_file=""
+codesign/entitlements/allow_jit_code_execution=false
+codesign/entitlements/allow_unsigned_executable_memory=false
+codesign/entitlements/allow_dyld_environment_variables=false
+codesign/entitlements/disable_library_validation=false
+codesign/entitlements/audio_input=false
+codesign/entitlements/camera=false
+codesign/entitlements/location=false
+codesign/entitlements/address_book=false
+codesign/entitlements/calendars=false
+codesign/entitlements/photos_library=false
+codesign/entitlements/apple_events=false
+codesign/entitlements/debugging=false
+codesign/entitlements/app_sandbox/enabled=false
+codesign/entitlements/app_sandbox/network_server=false
+codesign/entitlements/app_sandbox/network_client=false
+codesign/entitlements/app_sandbox/device_usb=false
+codesign/entitlements/app_sandbox/device_bluetooth=false
+codesign/entitlements/app_sandbox/files_downloads=0
+codesign/entitlements/app_sandbox/files_pictures=0
+codesign/entitlements/app_sandbox/files_music=0
+codesign/entitlements/app_sandbox/files_movies=0
+codesign/custom_options=PoolStringArray(  )
+notarization/enable=false
+notarization/apple_id_name=""
+notarization/apple_id_password=""
+notarization/apple_team_id=""
 texture_format/s3tc=true
 texture_format/etc=false
 texture_format/etc2=false
@@ -80,6 +122,7 @@ texture_format/etc=false
 texture_format/etc2=false
 texture_format/no_bptc_fallbacks=true
 codesign/enable=false
+codesign/identity_type=0
 codesign/identity=""
 codesign/password=""
 codesign/timestamp=true
@@ -87,6 +130,7 @@ codesign/timestamp_server_url=""
 codesign/digest_algorithm=1
 codesign/description=""
 codesign/custom_options=PoolStringArray(  )
+application/modify_resources=true
 application/icon=""
 application/file_version=""
 application/product_version=""
@@ -116,7 +160,223 @@ custom_template/release=""
 variant/export_type=0
 vram_texture_compression/for_desktop=true
 vram_texture_compression/for_mobile=false
+html/export_icon=true
 html/custom_html_shell=""
 html/head_include=""
 html/canvas_resize_policy=2
+html/focus_canvas_on_start=true
 html/experimental_virtual_keyboard=false
+progressive_web_app/enabled=false
+progressive_web_app/offline_page=""
+progressive_web_app/display=1
+progressive_web_app/orientation=0
+progressive_web_app/icon_144x144=""
+progressive_web_app/icon_180x180=""
+progressive_web_app/icon_512x512=""
+progressive_web_app/background_color=Color( 0, 0, 0, 1 )
+
+[preset.4]
+
+name="Android"
+platform="Android"
+runnable=true
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path=""
+script_export_mode=1
+script_encryption_key=""
+
+[preset.4.options]
+
+custom_template/debug=""
+custom_template/release=""
+custom_build/use_custom_build=false
+custom_build/export_format=0
+custom_build/min_sdk=""
+custom_build/target_sdk=""
+architectures/armeabi-v7a=true
+architectures/arm64-v8a=true
+architectures/x86=false
+architectures/x86_64=false
+keystore/debug=""
+keystore/debug_user=""
+keystore/debug_password=""
+keystore/release=""
+keystore/release_user=""
+keystore/release_password=""
+one_click_deploy/clear_previous_install=false
+version/code=1
+version/name="1.0"
+package/unique_name="org.godotengine.$genname"
+package/name=""
+package/signed=true
+package/classify_as_game=true
+package/retain_data_on_uninstall=false
+package/exclude_from_recents=false
+launcher_icons/main_192x192=""
+launcher_icons/adaptive_foreground_432x432=""
+launcher_icons/adaptive_background_432x432=""
+graphics/opengl_debug=false
+xr_features/xr_mode=0
+xr_features/hand_tracking=0
+xr_features/hand_tracking_frequency=0
+xr_features/passthrough=0
+screen/immersive_mode=true
+screen/support_small=true
+screen/support_normal=true
+screen/support_large=true
+screen/support_xlarge=true
+user_data_backup/allow=false
+command_line/extra_args=""
+apk_expansion/enable=false
+apk_expansion/SALT=""
+apk_expansion/public_key=""
+permissions/custom_permissions=PoolStringArray(  )
+permissions/access_checkin_properties=false
+permissions/access_coarse_location=false
+permissions/access_fine_location=false
+permissions/access_location_extra_commands=false
+permissions/access_mock_location=false
+permissions/access_network_state=false
+permissions/access_surface_flinger=false
+permissions/access_wifi_state=false
+permissions/account_manager=false
+permissions/add_voicemail=false
+permissions/authenticate_accounts=false
+permissions/battery_stats=false
+permissions/bind_accessibility_service=false
+permissions/bind_appwidget=false
+permissions/bind_device_admin=false
+permissions/bind_input_method=false
+permissions/bind_nfc_service=false
+permissions/bind_notification_listener_service=false
+permissions/bind_print_service=false
+permissions/bind_remoteviews=false
+permissions/bind_text_service=false
+permissions/bind_vpn_service=false
+permissions/bind_wallpaper=false
+permissions/bluetooth=false
+permissions/bluetooth_admin=false
+permissions/bluetooth_privileged=false
+permissions/brick=false
+permissions/broadcast_package_removed=false
+permissions/broadcast_sms=false
+permissions/broadcast_sticky=false
+permissions/broadcast_wap_push=false
+permissions/call_phone=false
+permissions/call_privileged=false
+permissions/camera=false
+permissions/capture_audio_output=false
+permissions/capture_secure_video_output=false
+permissions/capture_video_output=false
+permissions/change_component_enabled_state=false
+permissions/change_configuration=false
+permissions/change_network_state=false
+permissions/change_wifi_multicast_state=false
+permissions/change_wifi_state=false
+permissions/clear_app_cache=false
+permissions/clear_app_user_data=false
+permissions/control_location_updates=false
+permissions/delete_cache_files=false
+permissions/delete_packages=false
+permissions/device_power=false
+permissions/diagnostic=false
+permissions/disable_keyguard=false
+permissions/dump=false
+permissions/expand_status_bar=false
+permissions/factory_test=false
+permissions/flashlight=false
+permissions/force_back=false
+permissions/get_accounts=false
+permissions/get_package_size=false
+permissions/get_tasks=false
+permissions/get_top_activity_info=false
+permissions/global_search=false
+permissions/hardware_test=false
+permissions/inject_events=false
+permissions/install_location_provider=false
+permissions/install_packages=false
+permissions/install_shortcut=false
+permissions/internal_system_window=false
+permissions/internet=false
+permissions/kill_background_processes=false
+permissions/location_hardware=false
+permissions/manage_accounts=false
+permissions/manage_app_tokens=false
+permissions/manage_documents=false
+permissions/manage_external_storage=false
+permissions/master_clear=false
+permissions/media_content_control=false
+permissions/modify_audio_settings=false
+permissions/modify_phone_state=false
+permissions/mount_format_filesystems=false
+permissions/mount_unmount_filesystems=false
+permissions/nfc=false
+permissions/persistent_activity=false
+permissions/process_outgoing_calls=false
+permissions/read_calendar=false
+permissions/read_call_log=false
+permissions/read_contacts=false
+permissions/read_external_storage=false
+permissions/read_frame_buffer=false
+permissions/read_history_bookmarks=false
+permissions/read_input_state=false
+permissions/read_logs=false
+permissions/read_phone_state=false
+permissions/read_profile=false
+permissions/read_sms=false
+permissions/read_social_stream=false
+permissions/read_sync_settings=false
+permissions/read_sync_stats=false
+permissions/read_user_dictionary=false
+permissions/reboot=false
+permissions/receive_boot_completed=false
+permissions/receive_mms=false
+permissions/receive_sms=false
+permissions/receive_wap_push=false
+permissions/record_audio=false
+permissions/reorder_tasks=false
+permissions/restart_packages=false
+permissions/send_respond_via_message=false
+permissions/send_sms=false
+permissions/set_activity_watcher=false
+permissions/set_alarm=false
+permissions/set_always_finish=false
+permissions/set_animation_scale=false
+permissions/set_debug_app=false
+permissions/set_orientation=false
+permissions/set_pointer_speed=false
+permissions/set_preferred_applications=false
+permissions/set_process_limit=false
+permissions/set_time=false
+permissions/set_time_zone=false
+permissions/set_wallpaper=false
+permissions/set_wallpaper_hints=false
+permissions/signal_persistent_processes=false
+permissions/status_bar=false
+permissions/subscribed_feeds_read=false
+permissions/subscribed_feeds_write=false
+permissions/system_alert_window=false
+permissions/transmit_ir=false
+permissions/uninstall_shortcut=false
+permissions/update_device_stats=false
+permissions/use_credentials=false
+permissions/use_sip=false
+permissions/vibrate=false
+permissions/wake_lock=false
+permissions/write_apn_settings=false
+permissions/write_calendar=false
+permissions/write_call_log=false
+permissions/write_contacts=false
+permissions/write_external_storage=false
+permissions/write_gservices=false
+permissions/write_history_bookmarks=false
+permissions/write_profile=false
+permissions/write_secure_settings=false
+permissions/write_settings=false
+permissions/write_sms=false
+permissions/write_social_stream=false
+permissions/write_sync_settings=false
+permissions/write_user_dictionary=false

From e802402b4868ff8c93d5b74d18510721f8f032e0 Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 31 Aug 2022 08:53:20 +0200
Subject: [PATCH 46/49] organized the local folder into subfolders containing
 the various localizations as suggested in the post
 https://github.com/git-learning-game/oh-my-git/pull/146#issuecomment-1230965522

---
 locale/{ => it_IT}/it_IT-cards.po  | 0
 locale/{ => it_IT}/it_IT-levels.po | 0
 locale/{ => it_IT}/it_IT-text.po   | 0
 project.godot                      | 2 +-
 4 files changed, 1 insertion(+), 1 deletion(-)
 rename locale/{ => it_IT}/it_IT-cards.po (100%)
 rename locale/{ => it_IT}/it_IT-levels.po (100%)
 rename locale/{ => it_IT}/it_IT-text.po (100%)

diff --git a/locale/it_IT-cards.po b/locale/it_IT/it_IT-cards.po
similarity index 100%
rename from locale/it_IT-cards.po
rename to locale/it_IT/it_IT-cards.po
diff --git a/locale/it_IT-levels.po b/locale/it_IT/it_IT-levels.po
similarity index 100%
rename from locale/it_IT-levels.po
rename to locale/it_IT/it_IT-levels.po
diff --git a/locale/it_IT-text.po b/locale/it_IT/it_IT-text.po
similarity index 100%
rename from locale/it_IT-text.po
rename to locale/it_IT/it_IT-text.po
diff --git a/project.godot b/project.godot
index fdb8df7..f349d1d 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,7 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://locale/it_IT-text.po", "res://locale/it_IT-levels.po", "res://locale/it_IT-cards.po" )
+translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-levels.po", "res://locale/it_IT/it_IT-text.po" )
 locale_filter=[ 0, [  ] ]
 
 [network]

From af776bd3c26b0f9190308dadd8880ad1a8ed171d Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 13 Sep 2022 14:40:40 +0200
Subject: [PATCH 47/49] deleted the .po level files and added dir italian
 levels in dir levels and made some changes to the scripts

---
 levels/{ => en}/bisect/bisect                 |    2 +-
 levels/{ => en}/bisect/sequence               |    0
 levels/{ => en}/branches/branch-create        |    0
 levels/{ => en}/branches/branch-remove        |    0
 levels/{ => en}/branches/checkout-commit      |    2 +-
 levels/{ => en}/branches/fork                 |    0
 levels/{ => en}/branches/grow                 |    0
 levels/{ => en}/branches/reorder              |    0
 levels/{ => en}/branches/sequence             |    0
 levels/{ => en}/changing-the-past/rebase      |    0
 levels/{ => en}/changing-the-past/reorder     |    0
 levels/{ => en}/changing-the-past/sequence    |    0
 levels/{ => en}/files/files-add               |    0
 levels/{ => en}/files/files-delete            |    0
 levels/{ => en}/files/sequence                |    0
 levels/{ => en}/index/add                     |    0
 levels/{ => en}/index/change                  |    0
 levels/{ => en}/index/checkout                |    0
 levels/{ => en}/index/compare                 |    0
 levels/{ => en}/index/new                     |    0
 levels/{ => en}/index/reset                   |    0
 levels/{ => en}/index/rm                      |    0
 levels/{ => en}/index/sequence                |    0
 levels/{ => en}/index/steps                   |    0
 levels/{ => en}/intro/cli                     |    0
 levels/{ => en}/intro/commit                  |    0
 levels/{ => en}/intro/copies                  |    0
 levels/{ => en}/intro/init                    |    2 +-
 levels/{ => en}/intro/remote                  |    0
 levels/{ => en}/intro/risky                   |    2 +-
 levels/{ => en}/intro/sequence                |    0
 levels/{ => en}/intro/who-are-you             |    0
 levels/{ => en}/low-level/basics              |    0
 levels/{ => en}/low-level/blob-create         |    0
 levels/{ => en}/low-level/blob-remove         |    0
 levels/{ => en}/low-level/commit-create       |    0
 levels/{ => en}/low-level/commit-parents      |    0
 levels/{ => en}/low-level/commit-rhombus      |    0
 levels/{ => en}/low-level/index-add           |    0
 levels/{ => en}/low-level/index-remove        |    0
 levels/{ => en}/low-level/index-update        |    0
 levels/{ => en}/low-level/puzzle-apocalypse   |    0
 .../{ => en}/low-level/puzzle-precious-blob   |    0
 .../low-level/puzzle-trees-all-the-way-down   |    0
 levels/{ => en}/low-level/ref-create          |    0
 levels/{ => en}/low-level/ref-move            |    0
 levels/{ => en}/low-level/ref-remove          |    0
 levels/{ => en}/low-level/sequence            |    0
 levels/{ => en}/low-level/symref-create       |    0
 levels/{ => en}/low-level/symref-no-deref     |    0
 levels/{ => en}/low-level/tree-create         |    0
 levels/{ => en}/low-level/tree-nested         |    0
 levels/{ => en}/low-level/tree-read           |    0
 levels/{ => en}/low-level/welcome             |    0
 levels/{ => en}/merge/conflict                |    0
 levels/{ => en}/merge/merge                   |    0
 levels/{ => en}/merge/merge-abort             |    0
 levels/{ => en}/merge/sequence                |    0
 levels/{ => en}/remotes/friend                |    0
 levels/{ => en}/remotes/problems              |    0
 levels/{ => en}/remotes/sequence              |    0
 levels/{ => en}/sandbox/empty                 |    0
 levels/{ => en}/sandbox/remote                |    0
 levels/{ => en}/sandbox/sequence              |    0
 levels/{ => en}/sandbox/three-commits         |    0
 levels/{ => en}/sequence                      |    0
 levels/{ => en}/shit-happens/bad-commit       |    0
 .../shit-happens/pushed-something-broken      |    0
 levels/{ => en}/shit-happens/reflog           |    0
 levels/{ => en}/shit-happens/restore-a-file   |    0
 .../shit-happens/restore-a-file-from-the-past |    0
 levels/{ => en}/shit-happens/sequence         |    0
 levels/{ => en}/stash/sequence                |    0
 levels/{ => en}/stash/stash                   |    0
 levels/{ => en}/stash/stash-branch            |    0
 levels/{ => en}/stash/stash-clear             |    0
 levels/{ => en}/stash/stash-merge             |    0
 levels/{ => en}/stash/stash-pop               |    0
 levels/{ => en}/tags/add-tag                  |    0
 levels/{ => en}/tags/add-tag-later            |    0
 levels/{ => en}/tags/remote-tag               |    0
 levels/{ => en}/tags/remove-tag               |    0
 levels/{ => en}/tags/sequence                 |    0
 levels/{ => en}/unused/checkout               |    0
 levels/{ => en}/unused/clone                  |    0
 levels/{ => en}/unused/commit                 |    0
 levels/{ => en}/unused/commit-a               |    0
 levels/{ => en}/unused/fetch                  |    0
 levels/{ => en}/unused/files-move             |    0
 levels/{ => en}/unused/index-mv               |    0
 levels/{ => en}/unused/init                   |    0
 levels/{ => en}/unused/pull-push              |    0
 levels/{ => en}/unused/remotes-add            |    0
 levels/{ => en}/unused/remotes-delete         |    0
 levels/{ => en}/unused/restore                |    0
 levels/{ => en}/unused/split                  |    0
 levels/{ => en}/unused/steps                  |    0
 levels/{ => en}/unused/who-are-you            |    0
 levels/{ => en}/workflows/gitignore           |    0
 levels/{ => en}/workflows/pr                  |    3 +-
 levels/{ => en}/workflows/sequence            |    0
 levels/it/bisect/bisect                       |   43 +
 levels/it/bisect/sequence                     |    1 +
 levels/it/branches/branch-create              |   44 +
 levels/it/branches/branch-remove              |   47 +
 levels/it/branches/checkout-commit            |   43 +
 levels/it/branches/fork                       |   65 +
 levels/it/branches/grow                       |   48 +
 levels/it/branches/reorder                    |   89 ++
 levels/it/branches/sequence                   |    6 +
 levels/it/changing-the-past/rebase            |   86 ++
 levels/it/changing-the-past/reorder           |   77 ++
 levels/it/changing-the-past/sequence          |    2 +
 levels/it/files/files-add                     |   31 +
 levels/it/files/files-delete                  |   36 +
 levels/it/files/sequence                      |    3 +
 levels/it/index/#sequence#                    |    5 +
 levels/it/index/add                           |   38 +
 levels/it/index/change                        |   31 +
 levels/it/index/checkout                      |   25 +
 levels/it/index/compare                       |   51 +
 levels/it/index/new                           |   28 +
 levels/it/index/reset                         |   37 +
 levels/it/index/rm                            |   24 +
 levels/it/index/sequence                      |    5 +
 levels/it/index/steps                         |   53 +
 levels/it/intro/cli                           |   27 +
 levels/it/intro/commit                        |   32 +
 levels/it/intro/copies                        |   42 +
 levels/it/intro/init                          |   24 +
 levels/it/intro/remote                        |   52 +
 levels/it/intro/risky                         |   42 +
 levels/it/intro/sequence                      |    6 +
 levels/it/intro/who-are-you                   |   38 +
 levels/it/low-level/basics                    |   26 +
 levels/it/low-level/blob-create               |   38 +
 levels/it/low-level/blob-remove               |   27 +
 levels/it/low-level/commit-create             |   37 +
 levels/it/low-level/commit-parents            |   31 +
 levels/it/low-level/commit-rhombus            |   30 +
 levels/it/low-level/index-add                 |   37 +
 levels/it/low-level/index-remove              |   29 +
 levels/it/low-level/index-update              |   33 +
 levels/it/low-level/puzzle-apocalypse         |   41 +
 levels/it/low-level/puzzle-precious-blob      |   28 +
 .../low-level/puzzle-trees-all-the-way-down   |   34 +
 levels/it/low-level/ref-create                |   42 +
 levels/it/low-level/ref-move                  |   41 +
 levels/it/low-level/ref-remove                |   41 +
 levels/it/low-level/sequence                  |   18 +
 levels/it/low-level/symref-create             |   21 +
 levels/it/low-level/symref-no-deref           |   46 +
 levels/it/low-level/tree-create               |   35 +
 levels/it/low-level/tree-nested               |   38 +
 levels/it/low-level/tree-read                 |   51 +
 levels/it/low-level/welcome                   |   33 +
 levels/it/merge/conflict                      |   47 +
 levels/it/merge/merge                         |   82 ++
 levels/it/merge/merge-abort                   |   54 +
 levels/it/merge/sequence                      |    3 +
 levels/it/remotes/friend                      |   47 +
 levels/it/remotes/problems                    |   33 +
 levels/it/remotes/sequence                    |    2 +
 levels/it/sandbox/empty                       |    7 +
 levels/it/sandbox/remote                      |   22 +
 levels/it/sandbox/sequence                    |    3 +
 levels/it/sandbox/three-commits               |   26 +
 levels/it/sequence                            |   13 +
 levels/it/shit-happens/bad-commit             |   31 +
 .../it/shit-happens/pushed-something-broken   |   54 +
 levels/it/shit-happens/reflog                 |   26 +
 levels/it/shit-happens/restore-a-file         |   22 +
 .../shit-happens/restore-a-file-from-the-past |   22 +
 levels/it/shit-happens/sequence               |    5 +
 levels/it/stash/sequence                      |    5 +
 levels/it/stash/stash                         |   45 +
 levels/it/stash/stash-branch                  |   47 +
 levels/it/stash/stash-clear                   |   57 +
 levels/it/stash/stash-merge                   |   53 +
 levels/it/stash/stash-pop                     |   46 +
 levels/it/tags/add-tag                        |   53 +
 levels/it/tags/add-tag-later                  |   50 +
 levels/it/tags/remote-tag                     |   58 +
 levels/it/tags/remove-tag                     |   53 +
 levels/it/tags/sequence                       |    4 +
 levels/it/unused/checkout                     |   31 +
 levels/it/unused/clone                        |   20 +
 levels/it/unused/commit                       |   27 +
 levels/it/unused/commit-a                     |   26 +
 levels/it/unused/fetch                        |   35 +
 levels/it/unused/files-move                   |   27 +
 levels/it/unused/index-mv                     |   26 +
 levels/it/unused/init                         |   14 +
 levels/it/unused/pull-push                    |   51 +
 levels/it/unused/remotes-add                  |   33 +
 levels/it/unused/remotes-delete               |   23 +
 levels/it/unused/restore                      |   28 +
 levels/it/unused/split                        |   26 +
 levels/it/unused/steps                        |   23 +
 levels/it/unused/who-are-you                  |   23 +
 levels/it/workflows/gitignore                 |   18 +
 levels/it/workflows/pr                        |   25 +
 levels/it/workflows/sequence                  |    1 +
 locale/it_IT/it_IT-levels.po                  | 1186 -----------------
 locale/levels.pot                             | 1037 --------------
 scenes/Language.gd                            |    1 +
 scenes/chapter.gd                             |    6 +-
 scenes/game.gd                                |    3 +-
 scenes/level.gd                               |    8 +-
 scenes/levels.gd                              |    7 +-
 210 files changed, 3381 insertions(+), 2243 deletions(-)
 rename levels/{ => en}/bisect/bisect (97%)
 rename levels/{ => en}/bisect/sequence (100%)
 rename levels/{ => en}/branches/branch-create (100%)
 rename levels/{ => en}/branches/branch-remove (100%)
 rename levels/{ => en}/branches/checkout-commit (89%)
 rename levels/{ => en}/branches/fork (100%)
 rename levels/{ => en}/branches/grow (100%)
 rename levels/{ => en}/branches/reorder (100%)
 rename levels/{ => en}/branches/sequence (100%)
 rename levels/{ => en}/changing-the-past/rebase (100%)
 rename levels/{ => en}/changing-the-past/reorder (100%)
 rename levels/{ => en}/changing-the-past/sequence (100%)
 rename levels/{ => en}/files/files-add (100%)
 rename levels/{ => en}/files/files-delete (100%)
 rename levels/{ => en}/files/sequence (100%)
 rename levels/{ => en}/index/add (100%)
 rename levels/{ => en}/index/change (100%)
 rename levels/{ => en}/index/checkout (100%)
 rename levels/{ => en}/index/compare (100%)
 rename levels/{ => en}/index/new (100%)
 rename levels/{ => en}/index/reset (100%)
 rename levels/{ => en}/index/rm (100%)
 rename levels/{ => en}/index/sequence (100%)
 rename levels/{ => en}/index/steps (100%)
 rename levels/{ => en}/intro/cli (100%)
 rename levels/{ => en}/intro/commit (100%)
 rename levels/{ => en}/intro/copies (100%)
 rename levels/{ => en}/intro/init (84%)
 rename levels/{ => en}/intro/remote (100%)
 rename levels/{ => en}/intro/risky (94%)
 rename levels/{ => en}/intro/sequence (100%)
 rename levels/{ => en}/intro/who-are-you (100%)
 rename levels/{ => en}/low-level/basics (100%)
 rename levels/{ => en}/low-level/blob-create (100%)
 rename levels/{ => en}/low-level/blob-remove (100%)
 rename levels/{ => en}/low-level/commit-create (100%)
 rename levels/{ => en}/low-level/commit-parents (100%)
 rename levels/{ => en}/low-level/commit-rhombus (100%)
 rename levels/{ => en}/low-level/index-add (100%)
 rename levels/{ => en}/low-level/index-remove (100%)
 rename levels/{ => en}/low-level/index-update (100%)
 rename levels/{ => en}/low-level/puzzle-apocalypse (100%)
 rename levels/{ => en}/low-level/puzzle-precious-blob (100%)
 rename levels/{ => en}/low-level/puzzle-trees-all-the-way-down (100%)
 rename levels/{ => en}/low-level/ref-create (100%)
 rename levels/{ => en}/low-level/ref-move (100%)
 rename levels/{ => en}/low-level/ref-remove (100%)
 rename levels/{ => en}/low-level/sequence (100%)
 rename levels/{ => en}/low-level/symref-create (100%)
 rename levels/{ => en}/low-level/symref-no-deref (100%)
 rename levels/{ => en}/low-level/tree-create (100%)
 rename levels/{ => en}/low-level/tree-nested (100%)
 rename levels/{ => en}/low-level/tree-read (100%)
 rename levels/{ => en}/low-level/welcome (100%)
 rename levels/{ => en}/merge/conflict (100%)
 rename levels/{ => en}/merge/merge (100%)
 rename levels/{ => en}/merge/merge-abort (100%)
 rename levels/{ => en}/merge/sequence (100%)
 rename levels/{ => en}/remotes/friend (100%)
 rename levels/{ => en}/remotes/problems (100%)
 rename levels/{ => en}/remotes/sequence (100%)
 rename levels/{ => en}/sandbox/empty (100%)
 rename levels/{ => en}/sandbox/remote (100%)
 rename levels/{ => en}/sandbox/sequence (100%)
 rename levels/{ => en}/sandbox/three-commits (100%)
 rename levels/{ => en}/sequence (100%)
 rename levels/{ => en}/shit-happens/bad-commit (100%)
 rename levels/{ => en}/shit-happens/pushed-something-broken (100%)
 rename levels/{ => en}/shit-happens/reflog (100%)
 rename levels/{ => en}/shit-happens/restore-a-file (100%)
 rename levels/{ => en}/shit-happens/restore-a-file-from-the-past (100%)
 rename levels/{ => en}/shit-happens/sequence (100%)
 rename levels/{ => en}/stash/sequence (100%)
 rename levels/{ => en}/stash/stash (100%)
 rename levels/{ => en}/stash/stash-branch (100%)
 rename levels/{ => en}/stash/stash-clear (100%)
 rename levels/{ => en}/stash/stash-merge (100%)
 rename levels/{ => en}/stash/stash-pop (100%)
 rename levels/{ => en}/tags/add-tag (100%)
 rename levels/{ => en}/tags/add-tag-later (100%)
 rename levels/{ => en}/tags/remote-tag (100%)
 rename levels/{ => en}/tags/remove-tag (100%)
 rename levels/{ => en}/tags/sequence (100%)
 rename levels/{ => en}/unused/checkout (100%)
 rename levels/{ => en}/unused/clone (100%)
 rename levels/{ => en}/unused/commit (100%)
 rename levels/{ => en}/unused/commit-a (100%)
 rename levels/{ => en}/unused/fetch (100%)
 rename levels/{ => en}/unused/files-move (100%)
 rename levels/{ => en}/unused/index-mv (100%)
 rename levels/{ => en}/unused/init (100%)
 rename levels/{ => en}/unused/pull-push (100%)
 rename levels/{ => en}/unused/remotes-add (100%)
 rename levels/{ => en}/unused/remotes-delete (100%)
 rename levels/{ => en}/unused/restore (100%)
 rename levels/{ => en}/unused/split (100%)
 rename levels/{ => en}/unused/steps (100%)
 rename levels/{ => en}/unused/who-are-you (100%)
 rename levels/{ => en}/workflows/gitignore (100%)
 rename levels/{ => en}/workflows/pr (65%)
 rename levels/{ => en}/workflows/sequence (100%)
 create mode 100644 levels/it/bisect/bisect
 create mode 100644 levels/it/bisect/sequence
 create mode 100644 levels/it/branches/branch-create
 create mode 100644 levels/it/branches/branch-remove
 create mode 100644 levels/it/branches/checkout-commit
 create mode 100644 levels/it/branches/fork
 create mode 100644 levels/it/branches/grow
 create mode 100644 levels/it/branches/reorder
 create mode 100644 levels/it/branches/sequence
 create mode 100644 levels/it/changing-the-past/rebase
 create mode 100644 levels/it/changing-the-past/reorder
 create mode 100644 levels/it/changing-the-past/sequence
 create mode 100644 levels/it/files/files-add
 create mode 100644 levels/it/files/files-delete
 create mode 100644 levels/it/files/sequence
 create mode 100644 levels/it/index/#sequence#
 create mode 100644 levels/it/index/add
 create mode 100644 levels/it/index/change
 create mode 100644 levels/it/index/checkout
 create mode 100644 levels/it/index/compare
 create mode 100644 levels/it/index/new
 create mode 100644 levels/it/index/reset
 create mode 100644 levels/it/index/rm
 create mode 100644 levels/it/index/sequence
 create mode 100644 levels/it/index/steps
 create mode 100644 levels/it/intro/cli
 create mode 100644 levels/it/intro/commit
 create mode 100644 levels/it/intro/copies
 create mode 100644 levels/it/intro/init
 create mode 100644 levels/it/intro/remote
 create mode 100644 levels/it/intro/risky
 create mode 100644 levels/it/intro/sequence
 create mode 100644 levels/it/intro/who-are-you
 create mode 100644 levels/it/low-level/basics
 create mode 100644 levels/it/low-level/blob-create
 create mode 100644 levels/it/low-level/blob-remove
 create mode 100644 levels/it/low-level/commit-create
 create mode 100644 levels/it/low-level/commit-parents
 create mode 100644 levels/it/low-level/commit-rhombus
 create mode 100644 levels/it/low-level/index-add
 create mode 100644 levels/it/low-level/index-remove
 create mode 100644 levels/it/low-level/index-update
 create mode 100644 levels/it/low-level/puzzle-apocalypse
 create mode 100644 levels/it/low-level/puzzle-precious-blob
 create mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down
 create mode 100644 levels/it/low-level/ref-create
 create mode 100644 levels/it/low-level/ref-move
 create mode 100644 levels/it/low-level/ref-remove
 create mode 100644 levels/it/low-level/sequence
 create mode 100644 levels/it/low-level/symref-create
 create mode 100644 levels/it/low-level/symref-no-deref
 create mode 100644 levels/it/low-level/tree-create
 create mode 100644 levels/it/low-level/tree-nested
 create mode 100644 levels/it/low-level/tree-read
 create mode 100644 levels/it/low-level/welcome
 create mode 100644 levels/it/merge/conflict
 create mode 100644 levels/it/merge/merge
 create mode 100644 levels/it/merge/merge-abort
 create mode 100644 levels/it/merge/sequence
 create mode 100644 levels/it/remotes/friend
 create mode 100644 levels/it/remotes/problems
 create mode 100644 levels/it/remotes/sequence
 create mode 100644 levels/it/sandbox/empty
 create mode 100644 levels/it/sandbox/remote
 create mode 100644 levels/it/sandbox/sequence
 create mode 100644 levels/it/sandbox/three-commits
 create mode 100644 levels/it/sequence
 create mode 100644 levels/it/shit-happens/bad-commit
 create mode 100644 levels/it/shit-happens/pushed-something-broken
 create mode 100644 levels/it/shit-happens/reflog
 create mode 100644 levels/it/shit-happens/restore-a-file
 create mode 100644 levels/it/shit-happens/restore-a-file-from-the-past
 create mode 100644 levels/it/shit-happens/sequence
 create mode 100644 levels/it/stash/sequence
 create mode 100644 levels/it/stash/stash
 create mode 100644 levels/it/stash/stash-branch
 create mode 100644 levels/it/stash/stash-clear
 create mode 100644 levels/it/stash/stash-merge
 create mode 100644 levels/it/stash/stash-pop
 create mode 100644 levels/it/tags/add-tag
 create mode 100644 levels/it/tags/add-tag-later
 create mode 100644 levels/it/tags/remote-tag
 create mode 100644 levels/it/tags/remove-tag
 create mode 100644 levels/it/tags/sequence
 create mode 100644 levels/it/unused/checkout
 create mode 100644 levels/it/unused/clone
 create mode 100644 levels/it/unused/commit
 create mode 100644 levels/it/unused/commit-a
 create mode 100644 levels/it/unused/fetch
 create mode 100644 levels/it/unused/files-move
 create mode 100644 levels/it/unused/index-mv
 create mode 100644 levels/it/unused/init
 create mode 100644 levels/it/unused/pull-push
 create mode 100644 levels/it/unused/remotes-add
 create mode 100644 levels/it/unused/remotes-delete
 create mode 100644 levels/it/unused/restore
 create mode 100644 levels/it/unused/split
 create mode 100644 levels/it/unused/steps
 create mode 100644 levels/it/unused/who-are-you
 create mode 100644 levels/it/workflows/gitignore
 create mode 100644 levels/it/workflows/pr
 create mode 100644 levels/it/workflows/sequence
 delete mode 100644 locale/it_IT/it_IT-levels.po
 delete mode 100644 locale/levels.pot

diff --git a/levels/bisect/bisect b/levels/en/bisect/bisect
similarity index 97%
rename from levels/bisect/bisect
rename to levels/en/bisect/bisect
index cf7bf6a..0b66edb 100644
--- a/levels/bisect/bisect
+++ b/levels/en/bisect/bisect
@@ -9,7 +9,7 @@ Oh no! You have lost your key at some point during the day!
 
 Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!
 
-First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good" card.
+First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card".
 
 After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?
 
diff --git a/levels/bisect/sequence b/levels/en/bisect/sequence
similarity index 100%
rename from levels/bisect/sequence
rename to levels/en/bisect/sequence
diff --git a/levels/branches/branch-create b/levels/en/branches/branch-create
similarity index 100%
rename from levels/branches/branch-create
rename to levels/en/branches/branch-create
diff --git a/levels/branches/branch-remove b/levels/en/branches/branch-remove
similarity index 100%
rename from levels/branches/branch-remove
rename to levels/en/branches/branch-remove
diff --git a/levels/branches/checkout-commit b/levels/en/branches/checkout-commit
similarity index 89%
rename from levels/branches/checkout-commit
rename to levels/en/branches/checkout-commit
index 258434d..87061d8 100644
--- a/levels/branches/checkout-commit
+++ b/levels/en/branches/checkout-commit
@@ -3,7 +3,7 @@ cards = checkout commit-auto
 
 [description]
 
-The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the "checkout" card! (Try it!)
+The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!)
 
 Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!
 
diff --git a/levels/branches/fork b/levels/en/branches/fork
similarity index 100%
rename from levels/branches/fork
rename to levels/en/branches/fork
diff --git a/levels/branches/grow b/levels/en/branches/grow
similarity index 100%
rename from levels/branches/grow
rename to levels/en/branches/grow
diff --git a/levels/branches/reorder b/levels/en/branches/reorder
similarity index 100%
rename from levels/branches/reorder
rename to levels/en/branches/reorder
diff --git a/levels/branches/sequence b/levels/en/branches/sequence
similarity index 100%
rename from levels/branches/sequence
rename to levels/en/branches/sequence
diff --git a/levels/changing-the-past/rebase b/levels/en/changing-the-past/rebase
similarity index 100%
rename from levels/changing-the-past/rebase
rename to levels/en/changing-the-past/rebase
diff --git a/levels/changing-the-past/reorder b/levels/en/changing-the-past/reorder
similarity index 100%
rename from levels/changing-the-past/reorder
rename to levels/en/changing-the-past/reorder
diff --git a/levels/changing-the-past/sequence b/levels/en/changing-the-past/sequence
similarity index 100%
rename from levels/changing-the-past/sequence
rename to levels/en/changing-the-past/sequence
diff --git a/levels/files/files-add b/levels/en/files/files-add
similarity index 100%
rename from levels/files/files-add
rename to levels/en/files/files-add
diff --git a/levels/files/files-delete b/levels/en/files/files-delete
similarity index 100%
rename from levels/files/files-delete
rename to levels/en/files/files-delete
diff --git a/levels/files/sequence b/levels/en/files/sequence
similarity index 100%
rename from levels/files/sequence
rename to levels/en/files/sequence
diff --git a/levels/index/add b/levels/en/index/add
similarity index 100%
rename from levels/index/add
rename to levels/en/index/add
diff --git a/levels/index/change b/levels/en/index/change
similarity index 100%
rename from levels/index/change
rename to levels/en/index/change
diff --git a/levels/index/checkout b/levels/en/index/checkout
similarity index 100%
rename from levels/index/checkout
rename to levels/en/index/checkout
diff --git a/levels/index/compare b/levels/en/index/compare
similarity index 100%
rename from levels/index/compare
rename to levels/en/index/compare
diff --git a/levels/index/new b/levels/en/index/new
similarity index 100%
rename from levels/index/new
rename to levels/en/index/new
diff --git a/levels/index/reset b/levels/en/index/reset
similarity index 100%
rename from levels/index/reset
rename to levels/en/index/reset
diff --git a/levels/index/rm b/levels/en/index/rm
similarity index 100%
rename from levels/index/rm
rename to levels/en/index/rm
diff --git a/levels/index/sequence b/levels/en/index/sequence
similarity index 100%
rename from levels/index/sequence
rename to levels/en/index/sequence
diff --git a/levels/index/steps b/levels/en/index/steps
similarity index 100%
rename from levels/index/steps
rename to levels/en/index/steps
diff --git a/levels/intro/cli b/levels/en/intro/cli
similarity index 100%
rename from levels/intro/cli
rename to levels/en/intro/cli
diff --git a/levels/intro/commit b/levels/en/intro/commit
similarity index 100%
rename from levels/intro/commit
rename to levels/en/intro/commit
diff --git a/levels/intro/copies b/levels/en/intro/copies
similarity index 100%
rename from levels/intro/copies
rename to levels/en/intro/copies
diff --git a/levels/intro/init b/levels/en/intro/init
similarity index 84%
rename from levels/intro/init
rename to levels/en/intro/init
index 01e6071..ea0426e 100644
--- a/levels/intro/init
+++ b/levels/en/intro/init
@@ -5,7 +5,7 @@ cards = init
 
 You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:
 
-'To do anything with a time machine, you first need to initialize it!'
+"To do anything with a time machine, you first need to initialize it!"
 
 Drag that blue card up to play it!
 
diff --git a/levels/intro/remote b/levels/en/intro/remote
similarity index 100%
rename from levels/intro/remote
rename to levels/en/intro/remote
diff --git a/levels/intro/risky b/levels/en/intro/risky
similarity index 94%
rename from levels/intro/risky
rename to levels/en/intro/risky
index de8560a..a5e7239 100644
--- a/levels/intro/risky
+++ b/levels/en/intro/risky
@@ -3,7 +3,7 @@ cards =
 
 [description]
 
-So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!
+So you have decided to apply for time travel school, to learn how to use this time machine called "Git"!
 
 How exciting!
 
diff --git a/levels/intro/sequence b/levels/en/intro/sequence
similarity index 100%
rename from levels/intro/sequence
rename to levels/en/intro/sequence
diff --git a/levels/intro/who-are-you b/levels/en/intro/who-are-you
similarity index 100%
rename from levels/intro/who-are-you
rename to levels/en/intro/who-are-you
diff --git a/levels/low-level/basics b/levels/en/low-level/basics
similarity index 100%
rename from levels/low-level/basics
rename to levels/en/low-level/basics
diff --git a/levels/low-level/blob-create b/levels/en/low-level/blob-create
similarity index 100%
rename from levels/low-level/blob-create
rename to levels/en/low-level/blob-create
diff --git a/levels/low-level/blob-remove b/levels/en/low-level/blob-remove
similarity index 100%
rename from levels/low-level/blob-remove
rename to levels/en/low-level/blob-remove
diff --git a/levels/low-level/commit-create b/levels/en/low-level/commit-create
similarity index 100%
rename from levels/low-level/commit-create
rename to levels/en/low-level/commit-create
diff --git a/levels/low-level/commit-parents b/levels/en/low-level/commit-parents
similarity index 100%
rename from levels/low-level/commit-parents
rename to levels/en/low-level/commit-parents
diff --git a/levels/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus
similarity index 100%
rename from levels/low-level/commit-rhombus
rename to levels/en/low-level/commit-rhombus
diff --git a/levels/low-level/index-add b/levels/en/low-level/index-add
similarity index 100%
rename from levels/low-level/index-add
rename to levels/en/low-level/index-add
diff --git a/levels/low-level/index-remove b/levels/en/low-level/index-remove
similarity index 100%
rename from levels/low-level/index-remove
rename to levels/en/low-level/index-remove
diff --git a/levels/low-level/index-update b/levels/en/low-level/index-update
similarity index 100%
rename from levels/low-level/index-update
rename to levels/en/low-level/index-update
diff --git a/levels/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse
similarity index 100%
rename from levels/low-level/puzzle-apocalypse
rename to levels/en/low-level/puzzle-apocalypse
diff --git a/levels/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob
similarity index 100%
rename from levels/low-level/puzzle-precious-blob
rename to levels/en/low-level/puzzle-precious-blob
diff --git a/levels/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/low-level/puzzle-trees-all-the-way-down
rename to levels/en/low-level/puzzle-trees-all-the-way-down
diff --git a/levels/low-level/ref-create b/levels/en/low-level/ref-create
similarity index 100%
rename from levels/low-level/ref-create
rename to levels/en/low-level/ref-create
diff --git a/levels/low-level/ref-move b/levels/en/low-level/ref-move
similarity index 100%
rename from levels/low-level/ref-move
rename to levels/en/low-level/ref-move
diff --git a/levels/low-level/ref-remove b/levels/en/low-level/ref-remove
similarity index 100%
rename from levels/low-level/ref-remove
rename to levels/en/low-level/ref-remove
diff --git a/levels/low-level/sequence b/levels/en/low-level/sequence
similarity index 100%
rename from levels/low-level/sequence
rename to levels/en/low-level/sequence
diff --git a/levels/low-level/symref-create b/levels/en/low-level/symref-create
similarity index 100%
rename from levels/low-level/symref-create
rename to levels/en/low-level/symref-create
diff --git a/levels/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref
similarity index 100%
rename from levels/low-level/symref-no-deref
rename to levels/en/low-level/symref-no-deref
diff --git a/levels/low-level/tree-create b/levels/en/low-level/tree-create
similarity index 100%
rename from levels/low-level/tree-create
rename to levels/en/low-level/tree-create
diff --git a/levels/low-level/tree-nested b/levels/en/low-level/tree-nested
similarity index 100%
rename from levels/low-level/tree-nested
rename to levels/en/low-level/tree-nested
diff --git a/levels/low-level/tree-read b/levels/en/low-level/tree-read
similarity index 100%
rename from levels/low-level/tree-read
rename to levels/en/low-level/tree-read
diff --git a/levels/low-level/welcome b/levels/en/low-level/welcome
similarity index 100%
rename from levels/low-level/welcome
rename to levels/en/low-level/welcome
diff --git a/levels/merge/conflict b/levels/en/merge/conflict
similarity index 100%
rename from levels/merge/conflict
rename to levels/en/merge/conflict
diff --git a/levels/merge/merge b/levels/en/merge/merge
similarity index 100%
rename from levels/merge/merge
rename to levels/en/merge/merge
diff --git a/levels/merge/merge-abort b/levels/en/merge/merge-abort
similarity index 100%
rename from levels/merge/merge-abort
rename to levels/en/merge/merge-abort
diff --git a/levels/merge/sequence b/levels/en/merge/sequence
similarity index 100%
rename from levels/merge/sequence
rename to levels/en/merge/sequence
diff --git a/levels/remotes/friend b/levels/en/remotes/friend
similarity index 100%
rename from levels/remotes/friend
rename to levels/en/remotes/friend
diff --git a/levels/remotes/problems b/levels/en/remotes/problems
similarity index 100%
rename from levels/remotes/problems
rename to levels/en/remotes/problems
diff --git a/levels/remotes/sequence b/levels/en/remotes/sequence
similarity index 100%
rename from levels/remotes/sequence
rename to levels/en/remotes/sequence
diff --git a/levels/sandbox/empty b/levels/en/sandbox/empty
similarity index 100%
rename from levels/sandbox/empty
rename to levels/en/sandbox/empty
diff --git a/levels/sandbox/remote b/levels/en/sandbox/remote
similarity index 100%
rename from levels/sandbox/remote
rename to levels/en/sandbox/remote
diff --git a/levels/sandbox/sequence b/levels/en/sandbox/sequence
similarity index 100%
rename from levels/sandbox/sequence
rename to levels/en/sandbox/sequence
diff --git a/levels/sandbox/three-commits b/levels/en/sandbox/three-commits
similarity index 100%
rename from levels/sandbox/three-commits
rename to levels/en/sandbox/three-commits
diff --git a/levels/sequence b/levels/en/sequence
similarity index 100%
rename from levels/sequence
rename to levels/en/sequence
diff --git a/levels/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit
similarity index 100%
rename from levels/shit-happens/bad-commit
rename to levels/en/shit-happens/bad-commit
diff --git a/levels/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken
similarity index 100%
rename from levels/shit-happens/pushed-something-broken
rename to levels/en/shit-happens/pushed-something-broken
diff --git a/levels/shit-happens/reflog b/levels/en/shit-happens/reflog
similarity index 100%
rename from levels/shit-happens/reflog
rename to levels/en/shit-happens/reflog
diff --git a/levels/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file
similarity index 100%
rename from levels/shit-happens/restore-a-file
rename to levels/en/shit-happens/restore-a-file
diff --git a/levels/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past
similarity index 100%
rename from levels/shit-happens/restore-a-file-from-the-past
rename to levels/en/shit-happens/restore-a-file-from-the-past
diff --git a/levels/shit-happens/sequence b/levels/en/shit-happens/sequence
similarity index 100%
rename from levels/shit-happens/sequence
rename to levels/en/shit-happens/sequence
diff --git a/levels/stash/sequence b/levels/en/stash/sequence
similarity index 100%
rename from levels/stash/sequence
rename to levels/en/stash/sequence
diff --git a/levels/stash/stash b/levels/en/stash/stash
similarity index 100%
rename from levels/stash/stash
rename to levels/en/stash/stash
diff --git a/levels/stash/stash-branch b/levels/en/stash/stash-branch
similarity index 100%
rename from levels/stash/stash-branch
rename to levels/en/stash/stash-branch
diff --git a/levels/stash/stash-clear b/levels/en/stash/stash-clear
similarity index 100%
rename from levels/stash/stash-clear
rename to levels/en/stash/stash-clear
diff --git a/levels/stash/stash-merge b/levels/en/stash/stash-merge
similarity index 100%
rename from levels/stash/stash-merge
rename to levels/en/stash/stash-merge
diff --git a/levels/stash/stash-pop b/levels/en/stash/stash-pop
similarity index 100%
rename from levels/stash/stash-pop
rename to levels/en/stash/stash-pop
diff --git a/levels/tags/add-tag b/levels/en/tags/add-tag
similarity index 100%
rename from levels/tags/add-tag
rename to levels/en/tags/add-tag
diff --git a/levels/tags/add-tag-later b/levels/en/tags/add-tag-later
similarity index 100%
rename from levels/tags/add-tag-later
rename to levels/en/tags/add-tag-later
diff --git a/levels/tags/remote-tag b/levels/en/tags/remote-tag
similarity index 100%
rename from levels/tags/remote-tag
rename to levels/en/tags/remote-tag
diff --git a/levels/tags/remove-tag b/levels/en/tags/remove-tag
similarity index 100%
rename from levels/tags/remove-tag
rename to levels/en/tags/remove-tag
diff --git a/levels/tags/sequence b/levels/en/tags/sequence
similarity index 100%
rename from levels/tags/sequence
rename to levels/en/tags/sequence
diff --git a/levels/unused/checkout b/levels/en/unused/checkout
similarity index 100%
rename from levels/unused/checkout
rename to levels/en/unused/checkout
diff --git a/levels/unused/clone b/levels/en/unused/clone
similarity index 100%
rename from levels/unused/clone
rename to levels/en/unused/clone
diff --git a/levels/unused/commit b/levels/en/unused/commit
similarity index 100%
rename from levels/unused/commit
rename to levels/en/unused/commit
diff --git a/levels/unused/commit-a b/levels/en/unused/commit-a
similarity index 100%
rename from levels/unused/commit-a
rename to levels/en/unused/commit-a
diff --git a/levels/unused/fetch b/levels/en/unused/fetch
similarity index 100%
rename from levels/unused/fetch
rename to levels/en/unused/fetch
diff --git a/levels/unused/files-move b/levels/en/unused/files-move
similarity index 100%
rename from levels/unused/files-move
rename to levels/en/unused/files-move
diff --git a/levels/unused/index-mv b/levels/en/unused/index-mv
similarity index 100%
rename from levels/unused/index-mv
rename to levels/en/unused/index-mv
diff --git a/levels/unused/init b/levels/en/unused/init
similarity index 100%
rename from levels/unused/init
rename to levels/en/unused/init
diff --git a/levels/unused/pull-push b/levels/en/unused/pull-push
similarity index 100%
rename from levels/unused/pull-push
rename to levels/en/unused/pull-push
diff --git a/levels/unused/remotes-add b/levels/en/unused/remotes-add
similarity index 100%
rename from levels/unused/remotes-add
rename to levels/en/unused/remotes-add
diff --git a/levels/unused/remotes-delete b/levels/en/unused/remotes-delete
similarity index 100%
rename from levels/unused/remotes-delete
rename to levels/en/unused/remotes-delete
diff --git a/levels/unused/restore b/levels/en/unused/restore
similarity index 100%
rename from levels/unused/restore
rename to levels/en/unused/restore
diff --git a/levels/unused/split b/levels/en/unused/split
similarity index 100%
rename from levels/unused/split
rename to levels/en/unused/split
diff --git a/levels/unused/steps b/levels/en/unused/steps
similarity index 100%
rename from levels/unused/steps
rename to levels/en/unused/steps
diff --git a/levels/unused/who-are-you b/levels/en/unused/who-are-you
similarity index 100%
rename from levels/unused/who-are-you
rename to levels/en/unused/who-are-you
diff --git a/levels/workflows/gitignore b/levels/en/workflows/gitignore
similarity index 100%
rename from levels/workflows/gitignore
rename to levels/en/workflows/gitignore
diff --git a/levels/workflows/pr b/levels/en/workflows/pr
similarity index 65%
rename from levels/workflows/pr
rename to levels/en/workflows/pr
index 2496c1f..1c72510 100644
--- a/levels/workflows/pr
+++ b/levels/en/workflows/pr
@@ -3,8 +3,7 @@ cards = clone commit-auto reset-hard checkout file-new branch
 
 [description]
 
-Your friend has a problem! Clone the repo located in `../friend`, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`.
-
+Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`.
 
 [setup]
 
diff --git a/levels/workflows/sequence b/levels/en/workflows/sequence
similarity index 100%
rename from levels/workflows/sequence
rename to levels/en/workflows/sequence
diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect
new file mode 100644
index 0000000..a80e2e8
--- /dev/null
+++ b/levels/it/bisect/bisect
@@ -0,0 +1,43 @@
+title = Strada di mattoni gialli
+cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad
+
+[description]
+
+(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D)
+
+Oh no! Hai perso la tua chiave da qualche parte durante il giorno!
+
+Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male!
+
+Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd".
+
+Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa?
+
+[setup]
+
+echo "Hai ancora la tua chiave." > you
+
+for i in {1..30}; do
+    if test $i -eq 12; then
+        echo "La tua tasca è vuota." > you
+        echo "E' per terra." > key
+    fi
+    if test $i -eq 13; then
+        echo "Tiene una chiave nel becco." > bird
+        rm key
+    fi
+    if test $i -eq 14; then
+        rm bird
+    fi
+    git add .
+    git commit --allow-empty -m "$i"
+done
+
+[win]
+
+# Trova l'ultimo commit buono
+test "$(git log --pretty=%s main | head -1)" -eq 11
+
+[congrats]
+
+Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo...
diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence
new file mode 100644
index 0000000..e8018fe
--- /dev/null
+++ b/levels/it/bisect/sequence
@@ -0,0 +1 @@
+bisect
diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create
new file mode 100644
index 0000000..2544ead
--- /dev/null
+++ b/levels/it/branches/branch-create
@@ -0,0 +1,44 @@
+title = Creare ramificazioni
+cards = checkout commit-auto branch branch-delete reset-hard
+
+[description]
+
+Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste!
+
+Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs")
+
+[cli]
+
+Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci.
+
+[setup]
+
+echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you
+git add .
+git commit -m "Preparazione serale"
+echo "Vai alla festa di compleanno!" >> you
+git add .
+git commit -m "Vai al compleanno"
+
+git checkout HEAD~1
+echo "Vai al concerto!" > you
+git add .
+git commit -m "Vai al concerto"
+
+git checkout HEAD~1
+
+git branch -D main
+
+[win]
+
+# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno
+git show birthday | grep 'birthday'
+
+# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno
+git show concert | grep 'concert'
+
+[congrats]
+
+Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova!
+
+Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay!
diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove
new file mode 100644
index 0000000..00a2d4c
--- /dev/null
+++ b/levels/it/branches/branch-remove
@@ -0,0 +1,47 @@
+title = Cancellare rami
+cards = checkout commit-auto reset-hard branch-delete
+
+[description]
+
+La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi!
+
+Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro
+
+[setup]
+
+echo Esci di casa e ti incammini verso la scuola. > you
+git add .
+git commit -m "Buon giorno!"
+
+echo Cammini nel lato destro della strada. >> you
+git commit -am "Lato destro"
+
+echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you
+git commit -am "Salto"
+
+git checkout HEAD^ -b friend
+echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you
+git commit -am "Un nuovo amico"
+
+git checkout HEAD~2 -b music
+echo Cammini nel lato sinistro della strada. >> you
+git commit -am "Lato sinistro"
+
+echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you
+git commit -am "Bei suoni"
+
+git checkout HEAD^ -b ice-cream
+echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you
+git commit -am "Yum"
+
+git branch -M main leap
+git checkout leap^^
+
+[win]
+
+# Trova i rami cattivi e cancellali. Tieni solo il migliore.
+test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)"
+
+[congrats]
+
+Ripensandoci preferisci la linea temporale del gelato? :)
diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit
new file mode 100644
index 0000000..3d913df
--- /dev/null
+++ b/levels/it/branches/checkout-commit
@@ -0,0 +1,43 @@
+title = Muoversi attraverso il tempo
+cards = checkout commit-auto
+
+[description]
+
+La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!)
+
+Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit!
+
+[cli]
+
+Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi!
+
+Questo inserirà l'identificatore unico del commit!
+
+[setup]
+
+echo "Questo salvadanaio appartiene alla sorella maggiore.
+Contiene 10 monete." > piggy_bank
+git add .
+git commit -m "L'inizio"
+
+echo "Una giovane donna con capelli, ricci, marroni." > little_sister
+git add .
+git commit -m "La sorella piccola è arrivata"
+
+echo "Ha 10 monete." >> little_sister
+echo "Questo salvadanaio appartiene alla sorella maggiore.
+E' vuoto." > piggy_bank
+git add .
+git commit -m "La sorella piccola ha fatto qualcosa"
+
+git checkout HEAD^^
+git branch -df main
+
+[win]
+
+# Ripristina il salvadanaio della sorella.
+{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; }
+
+[congrats]
+
+Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate...
diff --git a/levels/it/branches/fork b/levels/it/branches/fork
new file mode 100644
index 0000000..46b94c6
--- /dev/null
+++ b/levels/it/branches/fork
@@ -0,0 +1,65 @@
+title = Crea universi paralleli
+cards = checkout commit-auto
+
+[description]
+
+Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero!
+
+Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy!
+
+[cli]
+
+L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale.
+
+Ecco un simpatico trucchetto andare al commit precedente:
+
+    git checkout HEAD^
+
+Puoi anche andare indietro di 2 commit digitando, pre esempio:
+
+    git checkout HEAD~2
+
+[setup]
+
+mkdir cage
+echo "Sembra molto affamato." > cage/lion
+
+echo "Un ragazzino..
+Ama veramente i gatti!" > child
+git add .
+git commit -m "L'inizio"
+
+echo "Tiene in mano un leccalecca." >> child
+git commit -am "Il ragazzo compra qualcosa"
+
+mv child cage
+git add .
+git commit -m "Il bambino si arrampica da qualche parte"
+
+git rm cage/child
+echo "E' felice. :)" > cage/lion
+git add .
+git commit -m "Oh no"
+
+echo "Sta dormendo." > cage/lion
+git add .
+git commit -m "Ora del pisolino!"
+
+git checkout --detach
+git branch -d main
+
+[win]
+
+# Assicurati che il ragazzino sia felice.
+git ls-tree --name-only -r HEAD | grep child
+
+# Assicurati che il leone abbia qualcosa da mangiare.
+git show HEAD:cage/lion | grep -v "molto affamato"
+
+[congrats]
+
+Whew, ottimo lavoro! Questo sembra un risultato molto migliore.
+
+Sentiti libero di aggiungere altre line temporali parallele o allungarle.
+
+Se sei pronto, la prossima missione ci sta aspettando...
diff --git a/levels/it/branches/grow b/levels/it/branches/grow
new file mode 100644
index 0000000..d560682
--- /dev/null
+++ b/levels/it/branches/grow
@@ -0,0 +1,48 @@
+title = I rami crescono con tè!
+cards = checkout commit-auto branch branch-delete reset-hard
+
+[description]
+
+Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale":
+
+Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima.
+
+e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale!
+
+[cli]
+Per viaggire in un ramo, digita `git checkout name_of_the_branch`.
+
+e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`.
+
+[setup]
+
+echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you
+git add .
+git commit -m "Preparazioni della sera"
+echo "Vai alla festa di compleanno!" >> you
+git add .
+git commit -m "Vai alla festa di compleanno"
+git branch birthday
+
+git checkout HEAD~1
+echo "Vai al concerto!" > you
+git add .
+git commit -m "Vai al concerto"
+git branch concert
+
+git checkout HEAD~1
+
+git branch -D main
+
+[win]
+
+# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test $(git rev-parse $commit^) = $(git rev-parse birthday); then
+        return 0
+    fi
+done
+return 1
+
+# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit.
+git show concert^ | grep "Vai al concerto"
diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder
new file mode 100644
index 0000000..d8a0212
--- /dev/null
+++ b/levels/it/branches/reorder
@@ -0,0 +1,89 @@
+title = Muovere i rami
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate!
+
+Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando:
+
+    git checkout
+
+nel nome della branch e poi usare
+
+    git reset --hard
+
+nel commit dove vuoi che la branch vada.
+
+La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch!
+
+[setup]
+
+echo "Tu non hai una baguette.
+
+Non hai un caffe.
+
+Non hai una ciambella." > you
+
+git add .
+git commit -m "L'inizio"
+
+git checkout -b coffee
+echo "Tu hai una baguette.
+
+Non hai un caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri una ciambella"
+
+echo "Mangi una baguette.
+
+Non hai un caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Mangi una baguette"
+
+git checkout -b baguette main
+echo "Non hai una ciambella.
+
+Hai un caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri un pò di caffe"
+
+echo "Non hai una baguette.
+
+Hai bevuto caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Bevi il caffe"
+
+git checkout -b donut main
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Hai una ciambella." > you
+git add .
+git commit -m "Compri una ciambella"
+
+git checkout --detach main
+
+[win]
+
+# Mangi una baguette nella branch delle baguette?
+git show baguette:you | grep "Mangi.*baguette"
+
+# Bevi un caffe nella branch del caffe?
+git show coffee:you | grep "Bevi.*coffe"
+
+# Mangi una ciambella nella branch delle ciambelle?
+git show donut:you | grep "Mangi.*ciambella"
+
+[actions]
+
+test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale."
diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence
new file mode 100644
index 0000000..2619ea0
--- /dev/null
+++ b/levels/it/branches/sequence
@@ -0,0 +1,6 @@
+checkout-commit
+fork
+branch-create
+grow
+branch-remove
+reorder
diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase
new file mode 100644
index 0000000..a704c80
--- /dev/null
+++ b/levels/it/changing-the-past/rebase
@@ -0,0 +1,86 @@
+title = Rebasing
+cards = checkout commit-auto reset-hard rebase
+
+[description]
+
+Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto.
+
+Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi.
+
+Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale!
+
+[setup]
+
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+
+git add .
+git commit -m "L'inizio"
+
+git checkout -b baguette main
+echo "Hai una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri una baguette"
+
+echo "Mangi una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Mangi la baguette"
+
+git checkout -b coffee main
+echo "Non hai una baguette.
+
+Hai del caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri un pò di caffe"
+
+echo "Non hai una baguette.
+
+Hai bevuto caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Bevi il caffe"
+
+git checkout -b donut main
+echo "Non hai una baguette
+
+Non hai caffe.
+
+Hai una ciamebella." > you
+git add .
+git commit -m "Compri una ciambella"
+
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Mangi una ciambella." > you
+git add .
+git commit -m "Mangi la ciambella"
+
+git checkout --detach main
+
+
+[win]
+
+# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale
+{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; }
+
+[congrats]
+
+Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro.
+
+E' davvero difficile *distruggere* le cose con la tua macchina del tempo.
diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder
new file mode 100644
index 0000000..8bbe21a
--- /dev/null
+++ b/levels/it/changing-the-past/reorder
@@ -0,0 +1,77 @@
+title = Riordinare gli eventi
+cards = checkout commit-auto reset-hard rebase-interactive cherry-pick
+
+[description]
+
+Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine?
+
+Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo.
+Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi!
+
+[setup]
+
+echo "Ti sei appena svegliato.
+
+Non indossi biancheria intima.
+
+Non indossi pantaloni.
+
+Non indossi la maglia.
+
+Non indossi le scarpe." > you
+git add .
+
+git commit -m "L'inizio"
+
+echo "Ti sei appena svegliato.
+
+Non indossi biancheria intima.
+
+Non indossi pantaloni.
+
+Non indossi la maglia.
+
+Indossi le scarpe." > you
+git commit -am "Metti le scarpe"
+
+echo "Ti sei appena svegliato.
+
+Non indossi biancheria intima.
+
+Indossi pantaloni.
+
+Non indossi la maglia.
+
+Indossi le scarpe." > you
+git commit -am "Metti i pantaloni"
+
+echo "Ti sei appena svegliato.
+
+Indossi la biancheria intima.
+
+Indossi pantaloni.
+
+Non indossi la maglia.
+
+Indossi le scarpe." > you
+git commit -am "Metti biancheria intima"
+
+echo "Ti sei appena svegliato.
+
+Indossi biancheria intima.
+
+Indossi pantaloni.
+
+Indossi la maglia.
+
+Indossi le scarpe." > you
+git commit -am "Ti metti la maglia"
+
+[win]
+
+# Riordina i commit per vestirti nel modo corretto
+{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; }
+
+[congrats]
+
+Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci?
diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence
new file mode 100644
index 0000000..43c5d08
--- /dev/null
+++ b/levels/it/changing-the-past/sequence
@@ -0,0 +1,2 @@
+rebase
+reorder
diff --git a/levels/it/files/files-add b/levels/it/files/files-add
new file mode 100644
index 0000000..f0149b9
--- /dev/null
+++ b/levels/it/files/files-add
@@ -0,0 +1,31 @@
+title = Arredatore di interni
+cards = file-new file-delete
+
+[description]
+
+Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso,
+vedi che i loro colori corrispondono al colore del tuo letto!
+
+Costruisci i tuoi due mobili usando la carta touch.
+Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi.
+
+Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione.
+Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile.
+
+[setup]
+echo Un accogliente letto giallo. > bed
+
+[win]
+
+# Aggiungi altri due mobili
+NUM_FILES="$(ls | wc -l)"
+test "$NUM_FILES" -ge 3
+
+# Assicurati che i colori corrispondano a quelle del tuo letto
+NUM_FILES="$(ls | wc -l)"
+YELLOW_FILES="$(grep -li giallo * | wc -l)"
+test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES"
+
+[congrats]
+
+Non ti senti già più a casa?
diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete
new file mode 100644
index 0000000..9b207dc
--- /dev/null
+++ b/levels/it/files/files-delete
@@ -0,0 +1,36 @@
+title = Coinquilini inaspettati
+cards = file-delete
+
+[description]
+
+Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza.
+Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque!
+
+Cava tutte le ragnatele che puoi trovare con la carta remove!
+
+[cli]
+
+Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando:
+
+    rm *web
+
+[setup]
+
+echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web
+echo Una grande ragnatela attaccata sopra al tuo letto. > big_web
+echo Un letto accogliente. > bed
+echo Una ragnatela spessa è alla destra della tua porta. > thick_web
+
+[win]
+
+# Rimuovi tutte le ragnatele.
+! ls | grep thick_web &&
+! ls | grep big_web &&
+! ls | grep tiny_web
+
+# Ma assicurati di mantenere il tuo letto!
+ls | grep bed
+
+[congrats]
+
+Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige!
diff --git a/levels/it/files/sequence b/levels/it/files/sequence
new file mode 100644
index 0000000..cb24408
--- /dev/null
+++ b/levels/it/files/sequence
@@ -0,0 +1,3 @@
+files-delete
+files-add
+
diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence#
new file mode 100644
index 0000000..42f7f48
--- /dev/null
+++ b/levels/it/index/#sequence#
@@ -0,0 +1,5 @@
+compare
+new
+change
+reset
+steps
diff --git a/levels/it/index/add b/levels/it/index/add
new file mode 100644
index 0000000..e627917
--- /dev/null
+++ b/levels/it/index/add
@@ -0,0 +1,38 @@
+title = Updating files in the index
+cards = add commit checkout
+
+[description]
+
+So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version.
+
+This allows you to have smaller commits, that describe better what you changed!
+
+The command for this is the same - `git add`!
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+
+[win]
+
+# Make changes to all files!
+test "$(cat a)" != "a" &&
+test "$(cat b)" != "b" &&
+test "$(cat c)" != "c"
+
+# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!
+
+test "$(git show main:a)" != "a" &&
+test "$(git show main:b)" != "b" &&
+test "$(git show main:c)" != "c" &&
+test "$(git show main^:a)" != "a" &&
+test "$(git show main^:b)" == "b" &&
+test "$(git show main^:c)" != "c"
+
+[congrats]
+
+Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again!
diff --git a/levels/it/index/change b/levels/it/index/change
new file mode 100644
index 0000000..970ffd6
--- /dev/null
+++ b/levels/it/index/change
@@ -0,0 +1,31 @@
+title = Aggiornare i file nell'indice
+cards = add commit
+
+[description]
+
+Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file..
+
+Proviamoci!
+
+Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali!
+
+[win]
+
+Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`!
+
+[setup]
+
+echo "La candela brucia con una fiamma blu." > candle
+git add .
+git commit -m "L'inizio"
+
+[win]
+
+# Fai una modifica alla candela
+test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed
+
+# Aggiungi la candella.
+test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
+
+# Fai un commit.
+test "$(git diff --name-only HEAD HEAD^)" = "candle"
diff --git a/levels/it/index/checkout b/levels/it/index/checkout
new file mode 100644
index 0000000..3c01b09
--- /dev/null
+++ b/levels/it/index/checkout
@@ -0,0 +1,25 @@
+title = Checking out files from the index
+cards = add reset-file checkout-file commit
+
+[description]
+
+So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that!
+
+What happens if you have already update the index, like in file c? You have to reset the index first!
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo x > b
+echo x > c
+git add c
+
+[win]
+
+# Remove all changes in your local files!
+test "$(git diff --name-only | wc -l)" -eq 0
diff --git a/levels/it/index/compare b/levels/it/index/compare
new file mode 100644
index 0000000..557b654
--- /dev/null
+++ b/levels/it/index/compare
@@ -0,0 +1,51 @@
+title = Passo dopo passo
+cards = checkout commit-auto
+
+[description]
+
+Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione!
+
+Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo.
+
+[win]
+
+# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo!
+git branch --show-current | grep step-by-step
+
+[setup]
+
+echo "Una piccola ma pesante palla di vetro." > ball
+echo "Un sottile libro che sta in piedi." > book
+echo "Una candela brucia con una fiamma blu." > candle
+echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector
+
+git add .
+git commit -m "L'inizio"
+
+git branch -M all-at-once
+
+echo "La palla adesso tocca il libro." > ball
+echo "Il libro è caduto." > book
+echo "La candella è stata spenta." > candle
+
+git commit -am "La fine"
+
+git checkout HEAD^
+
+git checkout -b step-by-step
+
+echo "La palla adesso tocca il libro." > ball
+git commit -am "La palla rotola verso il libro"
+
+echo "Il libro è caduto." > book
+git commit -am "Il libro è caduto"
+
+echo "La candela è stata spenta." > candle
+git commit -am "Il libro ha spento la candela"
+
+git checkout HEAD~3
+
+[win]
+
+# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo!
+git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso"
diff --git a/levels/it/index/new b/levels/it/index/new
new file mode 100644
index 0000000..4ce39ec
--- /dev/null
+++ b/levels/it/index/new
@@ -0,0 +1,28 @@
+title = Aggiungere nuovi file all'indice
+cards = add commit
+
+[description]
+
+Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero?
+
+Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit!
+
+Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager!
+
+Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo!
+
+[cli]
+
+Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo!
+
+[setup]
+
+echo "La candela brucia con una fiamma blu." > candle
+
+[win]
+
+# Aggiungi la candela.
+test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added
+
+# Crea un commit.
+test "$(git ls-tree --name-only HEAD)" = "candle"
diff --git a/levels/it/index/reset b/levels/it/index/reset
new file mode 100644
index 0000000..fd118fd
--- /dev/null
+++ b/levels/it/index/reset
@@ -0,0 +1,37 @@
+title = Resettare i file nell'indice
+cards = add reset-file commit
+
+[description]
+
+Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit!
+
+Per esempio, queste candele sono state spente e quella modifica è stata aggiunta!
+
+Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit!
+
+Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`!
+
+[setup]
+
+echo "Sta bruciando!" > red_candle
+echo "Sta bruciando!" > green_candle
+echo "Sta bruciando!" > blue_candle
+git add .
+git commit -m "L'inizio"
+
+echo "È stata spenta." > red_candle
+echo "È stata spenta." > green_candle
+echo "È stata spenta." > blue_candle
+git add .
+
+[win]
+
+# Ripristina i cambiamenti nella candela verde e in quella blu!
+git show :green_candle | grep burning &&
+git show :blue_candle | grep burning &&
+git show :red_candle | grep -v burning
+
+# E fai un commit
+git show main:green_candle | grep burning &&
+git show main:blue_candle | grep burning &&
+git show main:red_candle | grep -v burning
diff --git a/levels/it/index/rm b/levels/it/index/rm
new file mode 100644
index 0000000..637fd22
--- /dev/null
+++ b/levels/it/index/rm
@@ -0,0 +1,24 @@
+title = Delete a file in the next commit
+cards = add reset-file checkout-file rm file-delete commit
+
+[description]
+
+If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index.
+
+If a file is modified, you'll need to reset these changes first/reset the files.
+
+[setup]
+
+echo a > a
+echo x > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b > b
+git add b
+
+[win]
+
+# Make a commit where all files are deleted ¯\_(^_^)_/¯
+test "$(git ls-tree main | wc -l)" -eq 0
diff --git a/levels/it/index/sequence b/levels/it/index/sequence
new file mode 100644
index 0000000..42f7f48
--- /dev/null
+++ b/levels/it/index/sequence
@@ -0,0 +1,5 @@
+compare
+new
+change
+reset
+steps
diff --git a/levels/it/index/steps b/levels/it/index/steps
new file mode 100644
index 0000000..8c13af7
--- /dev/null
+++ b/levels/it/index/steps
@@ -0,0 +1,53 @@
+title = Aggiungere le modifice una per volta
+cards = add reset-file commit
+
+[description]
+
+L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit!
+
+[setup]
+
+echo "Un martello, in equilibrio sul suo manico." > hammer
+echo "Una bottiglia contenente un liquido trasparente." > bottle
+echo "Un cubetto di zucchero bianco." > sugar_cube
+
+git add .
+git commit -m "L'inizio"
+
+[win]
+
+# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi!
+test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed
+
+# Aggiungi solo uno dei cambiamenti!
+test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added
+
+# E fai un commit
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 1
+
+# Fai un secondo commit che registri solo un singolo cambiamento.
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 2
+
+# E aggiungine un terzo.
+COUNT=0
+for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do
+    if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then
+        COUNT=$((COUNT+1))
+    fi
+done
+
+test "$COUNT" -ge 3
diff --git a/levels/it/intro/cli b/levels/it/intro/cli
new file mode 100644
index 0000000..c643fc1
--- /dev/null
+++ b/levels/it/intro/cli
@@ -0,0 +1,27 @@
+title = La line di comando
+cards = 
+
+[description]
+
+Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git!
+
+[cli]
+
+Ma c'è un'altra via per interagire con Git:
+
+Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter!
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Inizializza la macchina del tempo!
+test -d .git
+
+[congrats]
+
+Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando!
+
+La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica.
diff --git a/levels/it/intro/commit b/levels/it/intro/commit
new file mode 100644
index 0000000..1141ae1
--- /dev/null
+++ b/levels/it/intro/commit
@@ -0,0 +1,32 @@
+title = Il tuo primo commit!
+cards = commit-auto
+
+[description]
+
+Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica!
+
+(Il tuo insegnante versa un pò di acqua nel bicchiere)
+
+[cli]
+Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! 
+
+Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :)
+
+[setup]
+
+echo "Il bicchiere è pieno di acqua." > glass
+
+[win]
+
+# Crea un'istantanea del bicchiere (un "commit")
+git rev-parse HEAD
+
+# Cambia il contenuto del bicchiere!
+! test "$(cat glass)" = "Il bicchiere è pieno di acqua."
+
+# E crea un secondo "commit"!
+git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua."
+
+[congrats]
+
+Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level".
diff --git a/levels/it/intro/copies b/levels/it/intro/copies
new file mode 100644
index 0000000..8f8d6ce
--- /dev/null
+++ b/levels/it/intro/copies
@@ -0,0 +1,42 @@
+title = Crea una copia
+cards =
+
+[description]
+
+Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra!
+
+[congrats]
+
+Okay, questo è un modo di lavorare.
+
+Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo.
+
+Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale.
+
+Fermati, devi provare questa macchina del tempo!
+
+[setup]
+
+rm -rf .git
+
+echo "~ Perchè voglio imparare Git ~
+
+(Devo ancora scriverlo.)" >> form.txt
+
+
+echo "~ Perchè volgio imparare Git ~
+
+- Così posso annullare gli errori" >> form2.txt
+
+
+echo "~ Perchè volgio imparare Git ~
+
+- Così posso annullare gli errori
+- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt
+
+cp form2_final.txt form2_really_final.txt
+
+[win]
+
+# Aggiungi una nuova line al file form2_really_final.txt!
+test "$(cat form2_really_final.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/init b/levels/it/intro/init
new file mode 100644
index 0000000..260f6e9
--- /dev/null
+++ b/levels/it/intro/init
@@ -0,0 +1,24 @@
+title = Entra nella machina del tempo
+cards = init
+
+[description]
+
+Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega:
+
+"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!"
+
+Trascina quella carta blu verso l'alto per usarla!
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Inizializzazione della macchina del tempo
+test -d .git
+
+[congrats]
+
+Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo!
+
diff --git a/levels/it/intro/remote b/levels/it/intro/remote
new file mode 100644
index 0000000..c0b582a
--- /dev/null
+++ b/levels/it/intro/remote
@@ -0,0 +1,52 @@
+title = Dai lavoriamo tutti assieme
+cards = pull commit-auto push
+
+[description]
+
+Aggiungi il tuo nome nella nostra lista di studenti!
+
+Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme!
+
+[cli]
+
+Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni.
+
+[congrats]
+
+Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione!
+
+[setup]
+
+echo "~ Lista degli attuali studenti ~" > students
+git add .
+git commit -m "Versione iniziale"
+git push -u teacher main
+
+git update-ref -d refs/remotes/teacher/main
+
+[setup teacher]
+
+git reset --hard main
+
+echo " 
+- Sam
+- Alex" >> students
+
+git add .
+git commit -m "Aggiunti due studenti"
+
+[win]
+
+# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`.
+test "$(git log --oneline teacher/main | wc -l)" -ge 2
+
+# Aggiungi il tuo nome alla lista degli studenti.
+test "$(cat students |wc -l)" -ge 5
+
+# Crea un'istantanea dei risultati.
+test "$(git show main:students |wc -l)" -ge 5
+
+[win teacher]
+
+# E usa `git push` per inviarlo al tuo insegnante!
+test "$(git show main:students |wc -l)" -ge 5
diff --git a/levels/it/intro/risky b/levels/it/intro/risky
new file mode 100644
index 0000000..57a52d1
--- /dev/null
+++ b/levels/it/intro/risky
@@ -0,0 +1,42 @@
+title = Vivere è pericoloso
+cards =
+
+[description]
+
+Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"!
+
+Che emozione!
+
+Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git.
+
+[congrats]
+
+All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato!
+
+Devi trovare una buona soluzione.
+
+(Premi "Prossimo livello" appena sei pronto!)
+
+[setup]
+
+rm -rf .git
+
+echo "~ Perchè voglio imparare Git ~
+
+- Così posso cancellare gli errori
+- Per seguire il mio progetto attraverso il tempo" >> form.txt
+
+[actions]
+
+test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.)
+
+
+
+
+
+" > form.txt
+
+[win]
+
+# Aggiungi un'altra line a form.txt!
+test "$(cat form.txt | wc -l )" -ge 5
diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence
new file mode 100644
index 0000000..aa225df
--- /dev/null
+++ b/levels/it/intro/sequence
@@ -0,0 +1,6 @@
+risky
+copies
+init
+cli
+commit
+remote
diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you
new file mode 100644
index 0000000..abb94f3
--- /dev/null
+++ b/levels/it/intro/who-are-you
@@ -0,0 +1,38 @@
+title = Benvenuto nella scuola del viaggio nel tempo!
+cards = config-name commit-auto checkout
+
+[description]
+
+Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo!
+
+Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?"
+
+[setup]
+
+git config --global user.name "TU"
+
+echo "~ Chi vuole imparare come si usa la macchina del tempo? ~
+
+[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro.
+[ ] Così non devo tenere copie di tutti i miei saggi.
+[ ] Per collaborare con altri studenti del viaggio nel tempo.
+[ ] Altro, perfavore specifica:" > form
+
+[actions]
+
+test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo "
+Firma: $(git config user.name)" >> form
+
+[win]
+
+# Presentati.
+test "$(git config user.name)" != "TU"
+
+# Compila l'iscrizione e inviala!
+git show main:form | grep '\[[xX]\]'
+
+[congrats]
+
+"Siamo lieti di averti con noi!
+
+Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!"
diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics
new file mode 100644
index 0000000..55374b5
--- /dev/null
+++ b/levels/it/low-level/basics
@@ -0,0 +1,26 @@
+[description]
+
+For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:
+
+- ls
+- echo content > file
+- cat file
+- mkdir dir
+
+Find the riddle in your current directory and put the answer into the file "answer"!
+
+[congrats]
+
+Omnomnom!
+
+For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :)
+
+[setup]
+
+mkdir riddle
+echo "ppl p" > riddle/consonants
+echo "ae ie" > riddle/vowels
+
+[win]
+
+cat answer | grep -i "apple \\?pie"
diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create
new file mode 100644
index 0000000..86f6254
--- /dev/null
+++ b/levels/it/low-level/blob-create
@@ -0,0 +1,38 @@
+[description]
+
+At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID).
+
+There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text.
+
+Let's create some blobs! To do that, create a file with the desired content, and then use
+
+    git hash-object -w <file>
+
+The flag -w means "write", and tells Git to actually write the new blob to the disk.
+
+Create three new blobs!
+
+[congrats]
+
+Tip: You can also use a command like this to create a blob in a single line:
+
+    echo "awesome content" | git hash-object -w --stdin
+
+Did you already notice that you can drag and drop all objects? :)
+
+[setup]
+
+[setup goal]
+
+echo "Hi" > file1
+echo "Ho" > file2
+echo "Hu" > file3
+git hash-object -w file1
+git hash-object -w file2
+git hash-object -w file3
+
+[win]
+
+BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l)
+
+test "$BLOB_COUNT" -gt 2
diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove
new file mode 100644
index 0000000..bbc1b30
--- /dev/null
+++ b/levels/it/low-level/blob-remove
@@ -0,0 +1,27 @@
+[description]
+
+There's a simple command to remove all objects that are not referenced by anything:
+
+    git prune
+
+Remove all blobs in this repository.
+
+[congrats]
+
+Generally, `git prune` will be useful if you want to clean up some objects you made.
+
+Alternatively, you can also click the "Reload" button to restart a level.
+
+[setup]
+
+echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin
+echo "This blob really should not exist" | git hash-object -w --stdin
+echo "This is a virus" | git hash-object -w --stdin
+
+[setup goal]
+
+[win]
+
+OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l)
+
+test "$OBJECT_COUNT" -eq 0
diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create
new file mode 100644
index 0000000..79a8e52
--- /dev/null
+++ b/levels/it/low-level/commit-create
@@ -0,0 +1,37 @@
+[description]
+
+So a tree describes a directory structure at a specific point in time.
+
+It would be nice if we could remember when that state existed, and who authored it, right?
+
+Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using
+
+    git commit-tree <tree> -m "Description of your commit"
+
+Make a commit from the tree in this repository!
+
+[setup]
+
+touch empty_file
+git add .
+git write-tree
+
+rm empty_file
+git update-index --remove empty_file
+
+[setup goal]
+
+touch empty_file
+git add .
+git write-tree
+
+rm empty_file
+git update-index --remove empty_file
+
+git commit-tree 3185 -m 'Clever commit message'
+
+[win]
+
+COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l)
+
+test "$COMMIT_COUNT" -gt 0
diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents
new file mode 100644
index 0000000..a2efb11
--- /dev/null
+++ b/levels/it/low-level/commit-parents
@@ -0,0 +1,31 @@
+[description]
+
+When using the commit-tree command, you can optionally specify a parent:
+
+    git commit-tree <tree> -m "Description" -p <parent commit>
+
+Make a string of three commits!
+
+Hint: You'll need a tree object. What could be the easiest way to obtain one?
+
+[setup]
+
+[setup goal]
+
+git write-tree
+FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O')
+SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D')
+THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/')
+
+[win]
+
+COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
+
+for COMMIT in $COMMITS; do
+    echo a commit named $COMMIT
+    if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then
+        return 0
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus
new file mode 100644
index 0000000..e320ca0
--- /dev/null
+++ b/levels/it/low-level/commit-rhombus
@@ -0,0 +1,30 @@
+[description]
+
+A commit can have multiple parents! You can specify the -p option multiple times, like this:
+
+    git commit-tree <tree> -m "Description" -p <parent1> -p <parent2>
+
+Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them.
+
+[setup]
+
+[setup goal]
+
+TREE=$(git write-tree)
+SOUTH=$(git commit-tree $TREE -m "South")
+EAST=$(git commit-tree $TREE -m "East" -p $SOUTH)
+WEST=$(git commit-tree $TREE -m "West" -p $SOUTH)
+NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST)
+
+[win]
+
+COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ")
+
+for COMMIT in $COMMITS; do
+    # My first parent's parents has to be the same as my second parent's parent.
+    if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then
+        return 0
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add
new file mode 100644
index 0000000..633245c
--- /dev/null
+++ b/levels/it/low-level/index-add
@@ -0,0 +1,37 @@
+[description]
+
+Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!
+
+Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions.
+
+The most convenient option to add an entry to the index is via an existing file:
+
+    echo "my content" > file
+    git update-index --add file
+
+Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"?
+
+[congrats]
+
+There's another way to add an entry to the index directly:
+
+    git update-index --add --cacheinfo <mode>,<blobhash>,<name>
+
+The first three numbers of the mode describe the type of the entry, "100" is a regular file.
+
+The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported.
+
+You can insert the hash of an object into the terminal by right-clicking on it! :)
+
+[setup]
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[win]
+
+test "$(git ls-files | wc -l)" -ge 3
diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove
new file mode 100644
index 0000000..9816126
--- /dev/null
+++ b/levels/it/low-level/index-remove
@@ -0,0 +1,29 @@
+[description]
+
+To remove an entry from the index, use a command like this:
+
+    git update-index --force-remove <file>
+
+Remove all entries from the index!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+git update-index --force-remove file1
+git update-index --force-remove file2
+git update-index --force-remove file3
+
+[win]
+
+test "$(git ls-files | wc -l)" -eq 0
diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update
new file mode 100644
index 0000000..047493d
--- /dev/null
+++ b/levels/it/low-level/index-update
@@ -0,0 +1,33 @@
+[description]
+
+Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!
+
+Put the content you want in a file with a matching name, and then run
+
+    git update-index <file>
+
+This will create a new blob, and update the hash of the entry to that blob.
+
+Update an entry in the index!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+echo "new content" > file1
+git update-index file1
+
+[win]
+
+# This is not really a good test for the winning condition...
+test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3
diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse
new file mode 100644
index 0000000..119784d
--- /dev/null
+++ b/levels/it/low-level/puzzle-apocalypse
@@ -0,0 +1,41 @@
+[description]
+
+Delete all objects in this repository using git commands only!
+
+Useful commands:
+
+    git prune
+    git reflog expire
+
+[setup]
+
+echo foo > foo
+BLOB=$(git hash-object -w foo)
+echo bar > bar
+git add .
+git commit -m "Initial commit"
+echo blabber >> bar
+git commit -a -m "Second commit"
+git update-ref refs/important HEAD
+git update-ref refs/interesting "$BLOB"
+
+[setup goal]
+
+echo foo > foo
+BLOB=$(git hash-object -w foo)
+echo bar > bar
+git add .
+git commit -m "Initial commit"
+echo blabber >> bar
+git commit -a -m "Second commit"
+git update-ref refs/important HEAD
+git update-ref refs/interesting "$BLOB"
+
+TREE=$(git mktree)
+git read-tree $TREE
+rm -rf .git/refs/*
+rm -rf .git/objects/*
+
+[win]
+
+test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0
diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob
new file mode 100644
index 0000000..865cfdf
--- /dev/null
+++ b/levels/it/low-level/puzzle-precious-blob
@@ -0,0 +1,28 @@
+[description]
+
+Create two trees pointing to the same blob!
+
+[setup]
+
+[setup goal]
+
+BLOB=$(echo "I am precious" | git hash-object -w --stdin)
+git update-index --add --cacheinfo 100644,$BLOB,a
+git write-tree
+git update-index --force-remove a
+git update-index --add --cacheinfo 100644,$BLOB,b
+git write-tree
+git update-index --force-remove b
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+ALL_TREE_CHILDREN=$(for TREE in $TREES; do
+    git cat-file -p $TREE | cut -f1 | cut -f3 -d" "
+done)
+
+NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l)
+UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l)
+
+test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN"
diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down
new file mode 100644
index 0000000..bc3e58a
--- /dev/null
+++ b/levels/it/low-level/puzzle-trees-all-the-way-down
@@ -0,0 +1,34 @@
+[description]
+
+Construct a chain of three trees, which don't point to anything else.
+
+This is hard! The `git mktree` command might be useful.
+
+[setup]
+
+[setup goal]
+
+git mktree
+TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree)
+echo -e "040000 tree $TREE\tdir" | git mktree
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+for TREE in $TREES; do
+    if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then
+        if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
+            # So the tree has exactly one child, and it is a tree!
+            TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ")
+            if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then
+                if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then
+                    # Same for its child! \o/
+                    return 0
+                fi
+            fi
+        fi
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create
new file mode 100644
index 0000000..1cc4bcf
--- /dev/null
+++ b/levels/it/low-level/ref-create
@@ -0,0 +1,42 @@
+[description]
+
+Let's take a look at "refs" (short for "references")! Refs are not objects, but rather very simple *pointers* to objects! They can help you keep track of what's where.
+
+You can create or update a ref with
+
+    git update-ref refs/<refname> <newvalue>
+
+Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref.
+
+Create refs that point to all objects in this repository!
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a $BLOB1
+git update-ref refs/b $BLOB2
+git update-ref refs/c $TREE
+git update-ref refs/d $COMMIT
+
+[win]
+
+OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort)
+REF_TARGETS=$(git show-ref -s | sort | uniq)
+test "$OBJECTS" = "$REF_TARGETS"
diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move
new file mode 100644
index 0000000..e3b29e3
--- /dev/null
+++ b/levels/it/low-level/ref-move
@@ -0,0 +1,41 @@
+[description]
+
+You can point refs to a new location using the same command you use to create them:
+
+    git update-ref refs/<refname> <object>
+
+As an exercise, make all refs in this repository point to the tree object!
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a "$BLOB1"
+git update-ref refs/b "$COMMIT"
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/a "$BLOB1"
+git update-ref refs/b "$COMMIT"
+
+for REF in $(git for-each-ref --format='%(refname)'); do
+    git update-ref "$REF" "$TREE"
+done
+
+[win]
+
+test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e"
diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove
new file mode 100644
index 0000000..d1fa982
--- /dev/null
+++ b/levels/it/low-level/ref-remove
@@ -0,0 +1,41 @@
+[description]
+
+And finally, to delete a ref, use
+
+    git update-ref -d refs/<refname>
+
+Delete all refs! :P (Well, except for HEAD. HEAD is special.)
+
+[setup]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/best_blob_ever "$BLOB1"
+git update-ref refs/beautiful_commit "$COMMIT"
+
+[setup goal]
+
+echo hello > hello
+echo world > world
+BLOB1=$(git hash-object -w hello)
+BLOB2=$(git hash-object -w world)
+git add .
+TREE=$(git write-tree)
+COMMIT=$(git commit-tree $TREE -m "Initial commit")
+
+git update-ref refs/best_blob_ever "$BLOB1"
+git update-ref refs/beautiful_commit "$COMMIT"
+
+for REF in $(git for-each-ref --format='%(refname)'); do
+    git update-ref -d "$REF"
+done
+
+[win]
+
+test "$(git show-ref | wc -l)" -eq 0
diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence
new file mode 100644
index 0000000..5feb0c8
--- /dev/null
+++ b/levels/it/low-level/sequence
@@ -0,0 +1,18 @@
+welcome
+basics
+blob-create
+blob-remove
+index-add
+index-remove
+index-update
+tree-create
+tree-read
+tree-nested
+commit-create
+commit-parents
+commit-rhombus
+ref-create
+ref-move
+ref-remove
+symref-create
+symref-no-deref
diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create
new file mode 100644
index 0000000..da933cb
--- /dev/null
+++ b/levels/it/low-level/symref-create
@@ -0,0 +1,21 @@
+[description]
+
+Instead of pointing directly to objects, refs can also point to other refs!
+
+When that happens, they are called "symbolic refs". You can create or update a symbolic ref using
+
+    git symbolic-ref <name> <ref>
+
+Create a symbolic ref called "refs/rainbow"!
+
+[setup]
+
+[setup goal]
+
+BLOB=$(git hash-object -w --stdin)
+git update-ref refs/double "$BLOB"
+git symbolic-ref refs/rainbow refs/double
+
+[win]
+
+git symbolic-ref refs/rainbow
diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref
new file mode 100644
index 0000000..458e669
--- /dev/null
+++ b/levels/it/low-level/symref-no-deref
@@ -0,0 +1,46 @@
+[description]
+
+When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :)
+
+What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`?
+
+Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`!
+
+Weird, huh?
+
+[congrats]
+
+Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!
+
+You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)
+
+Everything else is just convention and high-level commands that make interacting with the objects more convenient.
+
+We haven't covered:
+
+- tag objects (they are the fourth object type - a bit like refs with a description and an author)
+- configuration (allows you to specify remote repositories, for example)
+- working with local files (which is, uh, arguably pretty important :P)
+
+Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced!
+
+[setup]
+
+BLOB1=$(echo delicious | git hash-object -w --stdin)
+BLOB2=$(echo very | git hash-object -w --stdin)
+git update-ref refs/curly "$BLOB1"
+git symbolic-ref refs/fries refs/curly
+
+[setup goal]
+
+BLOB1=$(echo delicious | git hash-object -w --stdin)
+BLOB2=$(echo very | git hash-object -w --stdin)
+git update-ref refs/curly "$BLOB1"
+git symbolic-ref refs/fries refs/curly
+
+git update-ref --no-deref refs/fries "$BLOB2"
+
+[win]
+
+git symbolic-ref refs/fries && return 1
+test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6"
diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create
new file mode 100644
index 0000000..3da3618
--- /dev/null
+++ b/levels/it/low-level/tree-create
@@ -0,0 +1,35 @@
+[description]
+
+After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?
+
+This is what the second type of objects is for: trees! You can convert the index into a tree using
+
+    git write-tree
+
+Try it! :)
+
+[congrats]
+
+Nice!
+
+Can you make a different tree? Modify the index, then call `git write-tree` again!
+
+[setup]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+[setup goal]
+
+echo "file 1" > file1
+echo "file 2" > file2
+echo "file 3" > file3
+git add .
+
+git write-tree
+
+[win]
+
+git cat-file -p 21a638f28022064c1f1df20844278b494d197979
diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested
new file mode 100644
index 0000000..c7afce8
--- /dev/null
+++ b/levels/it/low-level/tree-nested
@@ -0,0 +1,38 @@
+[description]
+
+Trees can also point to other trees! This way, they can describe nested directory structures.
+
+When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it.
+
+To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs.
+
+[setup]
+
+[setup goal]
+
+echo "I'm the left arm" > arm1
+echo "I'm the right arm" > arm2
+mkdir hip
+echo "I'm the left leg" > hip/leg1
+echo "I'm the right leg" > hip/leg2
+git add .
+git write-tree
+
+[win]
+
+TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ")
+
+for OUTER_TREE in $TREES; do
+    NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l)
+    NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l)
+
+    if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then
+        TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3)
+        NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l)
+        if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then
+            return 0
+        fi
+    fi
+done
+
+return 1
diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read
new file mode 100644
index 0000000..ba8c440
--- /dev/null
+++ b/levels/it/low-level/tree-read
@@ -0,0 +1,51 @@
+[description]
+
+As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called
+
+    git read-tree <tree>
+
+For <tree>, you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!
+
+Try reading some of the trees in this repository into the index!
+
+[setup]
+
+EMPTY_TREE=$(git write-tree)
+
+echo "file 1" > file1
+echo "file 2" > file2
+git add .
+git write-tree
+
+rm *
+echo "file A" > fileA
+echo "file B" > fileB
+echo "file C" > fileC
+git add .
+TRIPLE_TREE=$(git write-tree)
+
+git read-tree "$EMPTY_TREE"
+
+[setup goal]
+
+EMPTY_TREE=$(git write-tree)
+
+echo "file 1" > file1
+echo "file 2" > file2
+git add .
+git write-tree
+
+rm *
+echo "file A" > fileA
+echo "file B" > fileB
+echo "file C" > fileC
+git add .
+TRIPLE_TREE=$(git write-tree)
+
+git read-tree "$EMPTY_TREE"
+
+git read-tree "$TRIPLE_TREE"
+
+[win]
+
+test "$(git ls-files | wc -l)" -gt 0
diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome
new file mode 100644
index 0000000..d669136
--- /dev/null
+++ b/levels/it/low-level/welcome
@@ -0,0 +1,33 @@
+[description]
+
+This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3
+
+You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status.
+
+Let's get started by initializing an empty Git repository in the current directory by typing:
+
+    git init
+
+[congrats]
+
+Well done!
+
+An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later!
+
+But first, let's look at some basics!
+
+(Click "Next Level" as soon as you're ready!)
+
+[setup]
+
+rm -rf .git
+
+[setup goal]
+
+rm -rf .git
+
+git init
+
+[win]
+
+test -d .git
diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict
new file mode 100644
index 0000000..645b5ed
--- /dev/null
+++ b/levels/it/merge/conflict
@@ -0,0 +1,47 @@
+title = Contraddizioni
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+A volte le linee temporali si contraddicono a vicenda.
+
+Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali.
+
+Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione!
+
+La tua linea temporale definitiva è "main".
+
+[setup]
+
+echo "Si è appena svegliato. È affamato." > sam
+git add .
+git commit -m "L'inizio"
+
+git checkout -b pancakes
+echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam
+git add .
+git commit -m "Pancakes!"
+
+echo "
+È al lavoro." >> sam
+git commit -am "Va al lavoro"
+
+git checkout -b muesli main
+echo "Ha fatto colazione con muesli all'avena e fragole." > sam
+git add .
+git commit -m "Muesli!"
+
+echo "
+È al lavoro." >> sam
+git commit -am "Va al lavoro"
+
+git checkout main
+
+[win]
+
+# Crea un compromesso tra le due colazioni nel branch "main".
+git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)"
+
+[congrats]
+
+Yum, questa sembra una buona colazione!
diff --git a/levels/it/merge/merge b/levels/it/merge/merge
new file mode 100644
index 0000000..9050cb7
--- /dev/null
+++ b/levels/it/merge/merge
@@ -0,0 +1,82 @@
+title = Unire le linee temporali
+cards = checkout commit-auto merge
+
+[description]
+
+Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile!
+
+[setup]
+
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+
+git add .
+git commit -m "L'inizio"
+
+echo "Hai una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri una baguette"
+
+echo "Mangi una baguette.
+
+Non hai caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Mangi la baguette"
+
+git checkout HEAD~2
+echo "Non hai una baguette.
+
+Hai caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Compri un pò di caffe"
+
+echo "Non hai una baguette.
+
+Bevi il caffe.
+
+Non hai una ciambella." > you
+git add .
+git commit -m "Bevi il caffe"
+
+git checkout HEAD~2
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Hai una ciambella." > you
+git add .
+git commit -m "Compri una ciambella"
+
+echo "Non hai una baguette.
+
+Non hai caffe.
+
+Mangi una ciambella." > you
+git add .
+git commit -m "Mangi la ciambella"
+
+git checkout --detach
+git branch -D main
+
+[win]
+
+# Crea una situazione dove consumi una baguette, un caffe e una ciambella.
+{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; }
+
+# Crea (e spostati su) un commit di unione.
+test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2
+
+[congrats]
+
+Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele...
diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort
new file mode 100644
index 0000000..efabb5d
--- /dev/null
+++ b/levels/it/merge/merge-abort
@@ -0,0 +1,54 @@
+title = Interrompere un merge
+cards = checkout commit-auto merge merge-abort
+
+[description]
+
+Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. 
+
+In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa
+    git merge --abort
+mentre sei nel processo di merge.
+
+Prova a unire i due commit e interrompi la procedura di merge.
+
+[setup]
+
+echo "Un nuovo giorno sta iniziando" > you
+
+git add .
+git commit -m "Start"
+
+echo "Stai camminando sulla corsia principale." >> you
+
+git add .
+git commit -m "Corsia Principale"
+
+
+git checkout HEAD~1
+
+echo "Stai camminando sulla corsia laterale." >> you
+
+git add .
+git commit -m "Corsia laterale"
+
+git checkout HEAD~1
+
+git branch -D main
+
+[actions]
+
+if test -f .git/MERGE_HEAD; then
+    touch .git/secretfile
+fi
+
+[win]
+
+# Hai provato a fare il merge?
+test -f .git/secretfile
+
+# Hai interrotto il merge?
+test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^
+
+[congrats]
+
+Aaah, faremo il merge più tardi...
diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence
new file mode 100644
index 0000000..2e1aa81
--- /dev/null
+++ b/levels/it/merge/sequence
@@ -0,0 +1,3 @@
+merge
+conflict
+merge-abort
\ No newline at end of file
diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend
new file mode 100644
index 0000000..c6f46c8
--- /dev/null
+++ b/levels/it/remotes/friend
@@ -0,0 +1,47 @@
+title = Amici
+cards = pull push commit-auto checkout
+
+[description]
+
+Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo!
+
+Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee!
+
+[setup yours]
+
+echo "Linea 1" > essay
+git add .
+git commit -m "Una linea"
+
+git push -u friend main
+
+[setup friend]
+
+git checkout main
+echo "Linea 2, gnihihi" >> essay
+git commit -am "Un'altra linea"
+
+[actions friend]
+
+if test "$(git log --oneline | wc -l)" -eq 3; then
+    git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico
+    echo "Linea 4, blurbblubb" >> essay
+    git commit -am "Linea finale"
+    hint "Oh bene, Ho aggiunto la quarta linea!"
+fi
+
+[win]
+
+# Ricevuto la seconda linea dal tuo amico.
+git show HEAD:essay | grep gnihihi
+
+# Ricevuto la quarta linea dal tuo amico.
+git show HEAD:essay | grep blurbblubb
+
+[win friend]
+
+# L'amico ha ricevuto la terza linea da te.
+test "$(git show HEAD:essay | wc -l)" -ge 3
+
+# L'amico ha ricevuto la quinta linea da te.
+test "$(git show HEAD:essay | wc -l)" -ge 5
diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems
new file mode 100644
index 0000000..764a6fc
--- /dev/null
+++ b/levels/it/remotes/problems
@@ -0,0 +1,33 @@
+title = Problemi
+cards = checkout add pull push commit-auto merge
+
+[description]
+
+Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare!
+
+[setup yours]
+
+echo "Il capannone delle bici dovrebbe essere ???" > file
+git add .
+git commit -m "inizio"
+
+git push -u friend main
+
+echo "Il capannone delle bici dovrebbe essere verde" > file
+
+[setup friend]
+
+git checkout main
+
+echo "Il capannone delle bici dovrebbe essere blu" > file
+git commit -a -m "versione dell'amico"
+
+[win]
+
+# Fai il commit delle tue modifiche locali.
+test "$(git status -s)" = ""
+
+[win friend]
+
+# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro.
+git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)"
diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence
new file mode 100644
index 0000000..13c5715
--- /dev/null
+++ b/levels/it/remotes/sequence
@@ -0,0 +1,2 @@
+friend
+problems
diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty
new file mode 100644
index 0000000..1f954a5
--- /dev/null
+++ b/levels/it/sandbox/empty
@@ -0,0 +1,7 @@
+title = Empty sandbox
+
+[description]
+
+This is an empty sandbox you can play around in.
+
+[setup]
diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote
new file mode 100644
index 0000000..f0ca2c0
--- /dev/null
+++ b/levels/it/sandbox/remote
@@ -0,0 +1,22 @@
+title = Sandbox with a remote
+cards = checkout commit-auto pull fetch push
+
+[description]
+
+Here's a sandbox with a remote! Try pulling, fetching, or pushing!
+
+How can you push tags and branches on a remote? How can you delete them again?
+
+[setup yours]
+
+echo "Line 1" > essay
+git add .
+git commit -m "Initial commit"
+
+git push -u friend main
+
+[setup friend]
+
+git checkout main
+echo "Line 2" >> essay
+git commit -am "Another line"
diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence
new file mode 100644
index 0000000..29aa91f
--- /dev/null
+++ b/levels/it/sandbox/sequence
@@ -0,0 +1,3 @@
+empty
+remote
+three-commits
diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits
new file mode 100644
index 0000000..3e5308c
--- /dev/null
+++ b/levels/it/sandbox/three-commits
@@ -0,0 +1,26 @@
+title = Sandbox with three commits
+cards = checkout add reset-file checkout-file commit merge rebase
+
+[setup]
+
+echo "You wake up." > you
+git add .
+git commit -m "The beginning"
+
+echo "You drink coffee." >> you
+git commit -am "First things first"
+
+echo "You hear a knock on the door." >> you
+git commit -am "Who's there?"
+
+git branch not_main
+
+[description]
+
+Here's a sandbox you can play around in.
+
+You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:
+
+- Make a commit that merges three timelines together at once!
+- Create and delete some tags!
+- Make a timeline that's completely independent of the rest!
diff --git a/levels/it/sequence b/levels/it/sequence
new file mode 100644
index 0000000..cefcd7a
--- /dev/null
+++ b/levels/it/sequence
@@ -0,0 +1,13 @@
+intro
+files
+branches
+merge
+index
+remotes
+changing-the-past
+shit-happens
+workflows
+bisect
+stash
+tags
+sandbox
diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit
new file mode 100644
index 0000000..0febbc2
--- /dev/null
+++ b/levels/it/shit-happens/bad-commit
@@ -0,0 +1,31 @@
+title = Annullare un cattivo commit
+cards = reset commit-a
+
+[description]
+
+Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare?
+
+La risposta è usare `git reset [commit]` che fa due cose:
+
+- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato.
+- Reimposta l'indice a quel commit.
+
+Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri.
+
+
+[setup]
+
+echo "1 2 3 4" > numbers
+git add .
+git commit -m "commit iniziale"
+echo "1 2 3 4 5 6 7 8 9 11" > numbers
+git commit -am "Più numerrrrri"
+
+[win]
+
+# Nel primo commit il file numbers contiene i numeri da 1 a 10.
+test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10"
+# Il messaggio di questo commit è "Più numeri".
+git log -1 --oneline | grep "Più numeri"
+# Il commit con l'errore si battitura non fa più parte del ramo principale.
+git log --oneline | grep -v "rrrrr"
diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken
new file mode 100644
index 0000000..cb7f2fb
--- /dev/null
+++ b/levels/it/shit-happens/pushed-something-broken
@@ -0,0 +1,54 @@
+title = Ho fatto il push di qualcosa di rotto
+cards = revert push
+
+[description]
+
+Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert`
+
+[setup]
+
+echo "questo va bene
+
+?
+
+?
+
+?" > text
+git add .
+git commit -m bene
+echo "questo va bene
+
+anche questo va bene
+
+?
+
+?" > text
+git commit -am "anche questo bene"
+echo "questo va bene
+
+anche questo va bene
+
+questo è veramente sbagliato
+
+?" > text
+git commit -am "veramente sbagliato"
+echo "questo va bene
+
+anche questo va bene
+
+questo è veramente sbagliato
+
+questo va nuovamente bene" > text
+git commit -am "nuovamente bene"
+
+git push team main
+git branch -u team/main main
+
+[setup team]
+
+[win team]
+
+# Il ramo main del Team non contiene più niente di sbagliato.
+! { git show main:text | grep -q "veramente sbagliato"; }
+# e la cronologia non è stata modificata.
+git show main^:text | grep -q "veramente sbagliato"
diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog
new file mode 100644
index 0000000..23f7bdc
--- /dev/null
+++ b/levels/it/shit-happens/reflog
@@ -0,0 +1,26 @@
+title = Torna dove eri prima
+cards = checkout reflog
+
+[description]
+
+Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main).
+
+Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo?
+
+C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato:
+
+    git reflog
+
+[setup]
+
+for i in {1..10}; do
+    git commit --allow-empty -m $i
+    git branch $i
+done
+git checkout 3
+git checkout main
+
+[win]
+
+# Trova cosa stavi facendo prima e tornaci!
+test "$(git rev-parse HEAD)" = "$(git rev-parse 3)"
diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file
new file mode 100644
index 0000000..16cf0dc
--- /dev/null
+++ b/levels/it/shit-happens/restore-a-file
@@ -0,0 +1,22 @@
+title = Recuperare un file cancellato
+cards = checkout
+
+[description]
+
+Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte!
+
+Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file!
+
+[setup]
+
+echo importante > essay
+git add .
+git commit -m "Commit iniziale"
+echo "contenuto importante" > essay
+git commit -am "Ottimizzato essay"
+rm essay
+
+[win]
+
+# Recupera il file "essay" che contiene "contenuto importante"
+test "$(cat essay)" = "contenuto importante"
diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past
new file mode 100644
index 0000000..c15f2a3
--- /dev/null
+++ b/levels/it/shit-happens/restore-a-file-from-the-past
@@ -0,0 +1,22 @@
+title = Recuperare un file dal passato
+cards = checkout checkout-from commit
+
+[description]
+
+Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits.
+Così:
+
+    git checkout [commit] [file]
+
+[setup]
+
+echo "versione buona" > essay
+git add .
+git commit -m "commit iniziale"
+echo "versione cattiva" > essay
+git commit -am "\"Migliorato\" essay"
+
+[win]
+
+# Prendi la prima versione di "essay" e crea un nuovo commit con essa.
+test "$(git show main:essay)" = "versione buona"
diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence
new file mode 100644
index 0000000..663d5d9
--- /dev/null
+++ b/levels/it/shit-happens/sequence
@@ -0,0 +1,5 @@
+restore-a-file
+restore-a-file-from-the-past
+bad-commit
+pushed-something-broken
+reflog
diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence
new file mode 100644
index 0000000..9dd02f7
--- /dev/null
+++ b/levels/it/stash/sequence
@@ -0,0 +1,5 @@
+stash
+stash-pop
+stash-clear
+stash-branch
+stash-merge
diff --git a/levels/it/stash/stash b/levels/it/stash/stash
new file mode 100644
index 0000000..6a4bc61
--- /dev/null
+++ b/levels/it/stash/stash
@@ -0,0 +1,45 @@
+title = Stashing
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+You will encounter situations in which you are working on your project but you need to
+put your current changes aside temporarily. To do so, you can use the stash function. Use
+    git stash push 
+to add your current changes to the stash stack.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Apple Pie:" > recipe
+
+git add .
+git commit -m "creating a recipe"
+
+echo "- 4 Apples" >> recipe
+
+git add .
+git commit -m "Adding ingredients"
+
+echo "- 500g Flour" >> recipe
+
+git checkout main
+
+[win]
+
+# Did you stash the current changes?
+test "$(git stash list | wc -l)" -ge 1
+
+[actions]
+
+
+
+[congrats]
+
+Nice stash you got there! :)
diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch
new file mode 100644
index 0000000..e51e4d2
--- /dev/null
+++ b/levels/it/stash/stash-branch
@@ -0,0 +1,47 @@
+title = Ramo dalla scorta
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando
+    git stash branch <branchname> <stash>
+Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione <stash>.
+
+Crea un nuovo ramo dalle modifiche nascoste!!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Torta di mele:" > recipe
+
+git add .
+git commit -m "creata una ricetta"
+
+echo "- 4 Mele" >> recipe
+
+git add .
+git commit -m "Aggiunto ingredienti"
+
+echo "- 500g Farina" >> recipe
+git stash push
+
+git checkout main
+
+[win]
+
+# Hai creato un nuovo ramo dai cambiamenti nascosti?
+test "$(git branch --list| wc -l)" -ge 2
+
+[actions]
+
+
+
+[congrats]
+
+I cambiamenti nascosti sono nel nuovo ramo! :)
diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear
new file mode 100644
index 0000000..32f82cb
--- /dev/null
+++ b/levels/it/stash/stash-clear
@@ -0,0 +1,57 @@
+title = Pulire la scorta
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Se vuoi controllare la tua scorta, usa il comando
+    git stash list
+
+Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con 
+    git stash clear
+Se vuoi solo scartare un certo elemento dalla scorta, puoi usare
+    git stash drop <stash>
+    
+Pulisci la tua pila di scorta!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Torta di mele:" > recipe
+
+git add .
+git commit -m "creata una ricetta"
+
+echo "- 4 Mele" >> recipe
+
+git add .
+git commit -m "Aggiunto ingredienti"
+
+echo "- 500g Farina" >> recipe
+git stash push
+
+echo "- 200g Zucchero" >> recipe
+git stash push
+
+echo "- Pizzico di sale" >> recipe
+git stash push
+
+git checkout main
+
+[win]
+
+# Hai pulito la tua pila di scorta?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Pulito tutto! :)
diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge
new file mode 100644
index 0000000..a4ed759
--- /dev/null
+++ b/levels/it/stash/stash-merge
@@ -0,0 +1,53 @@
+title = Unire la scorta spuntata
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione.
+Fai uscire le modifiche dalla scorta con
+    git stash pop
+e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Torta di mele:" > recipe
+
+git add .
+git commit -m "creata una ricetta"
+
+echo "- 4 Mele" >> recipe
+
+git add .
+git commit -m "Aggiunti ingredienti"
+
+echo "- 500g Farina" >> recipe
+
+git stash push
+
+echo "- Pizzico di sale" >> recipe
+
+git checkout main
+git add recipe
+
+[win]
+
+# Hai rislto i conflitti ed inviato?
+{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; }
+
+# Hai pulito la pila di scorta?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Yay, hai riavuto le tue modifiche in dietro! :)
diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop
new file mode 100644
index 0000000..cffc30d
--- /dev/null
+++ b/levels/it/stash/stash-pop
@@ -0,0 +1,46 @@
+title = Pop dalla scorta
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare
+    git stash pop
+Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa
+    git stash apply
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "Torta di mele:" > recipe
+
+git add .
+git commit -m "creata una ricetta"
+
+echo "- 4 Mele" >> recipe
+
+git add .
+git commit -m "Aggiunto ingredienti"
+
+echo "- 500g Farina" >> recipe
+
+git stash push
+git checkout main
+
+[win]
+
+# Hai pop i cambiamenti dalla pila di scorta?
+test "$(git stash list | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Yay, hai riavuto i tuoi cambiamenti in dietro! :)
diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag
new file mode 100644
index 0000000..2351635
--- /dev/null
+++ b/levels/it/tags/add-tag
@@ -0,0 +1,53 @@
+title = Creare etichette
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione.
+
+Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'.
+
+Scrivi
+
+    git tag <tag-name> 
+    
+per etichettare il tuo commit.
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 1"
+
+echo "event 2" >> elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 2"
+
+echo "event 3" >> elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 3"
+
+git checkout --detach main
+
+[win]
+
+# Hai creato un nuovo tag?
+test "$(git tag -l | wc -l)" -ge 1
+
+[actions]
+
+
+
+[congrats]
+
+Bene! Hai etichettato il tuo primo commit :)
diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later
new file mode 100644
index 0000000..49e17d4
--- /dev/null
+++ b/levels/it/tags/add-tag-later
@@ -0,0 +1,50 @@
+title = Etichettare dopo
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Ma cosa succede se ti dimentichi di etichettare il corrente commit?
+No c'è problema! Puoi etichettare i vecchi commit tramite
+
+    git tag <tag-name> <commit-hash>
+
+Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 1"
+
+echo "event 2" >> elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 2"
+
+echo "event 3" >> elecno-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 3"
+
+git checkout --detach main
+
+[win]
+
+# Hai creato una nuova etichetta?
+test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
+
+[actions]
+
+
+
+[congrats]
+
+Motlo bene :)
diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag
new file mode 100644
index 0000000..0a68035
--- /dev/null
+++ b/levels/it/tags/remote-tag
@@ -0,0 +1,58 @@
+title = Etichette remote
+cards = pull push commit-auto checkout
+
+[description]
+
+Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente.
+
+Puoi inviare un tag con
+    git push <remote> <tag-name>
+O tutti i tags con
+    git push <remote> --tags
+
+Rimuovere i tags nel repository remoto con
+    git push <remote> --delete <tag-name>
+    
+Puoi anche sincronizzare 
+    git fetch <remote> --prune --prune-tags
+
+
+Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale.
+[setup yours]
+
+git checkout main
+
+git checkout main
+echo "Condivisione dello spazzolino" > project-ideas
+git add .
+git commit -m "Prima idea"
+
+echo "Il mio telefono è sottosopra? App" >> project-ideas
+git commit -am "Un'altra idea"
+
+
+
+git push friend main
+
+git branch -u friend/main main
+
+[setup friend]
+
+
+
+[actions friend]
+
+git tag v1 HEAD~1
+
+[win]
+# v1 tag nel tuo repo
+test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)"
+
+# v2 tag nel tuo repo
+test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
+
+
+[win friend]
+
+# v2 tag nel remoto
+test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)"
diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag
new file mode 100644
index 0000000..2d2dfd9
--- /dev/null
+++ b/levels/it/tags/remove-tag
@@ -0,0 +1,53 @@
+title = Rimuovere etichette
+cards = checkout commit-auto merge reset-hard
+
+[description]
+
+Hai aggiunto molte ectichette? Non c'è problema! Cancellali con
+
+    git tag -d <tag-name>
+    
+Rimuovi tutti i tag in questo repository!
+
+---
+tipp1
+---
+tipp2
+---
+tipp3
+
+[setup]
+
+echo "event 1" > elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 1"
+
+echo "event 2" >> elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 2"
+
+echo "event 3" >> elenco-caratteristiche
+
+git add .
+git commit -m "Aggiunta caratteristica 3"
+
+git tag v1 HEAD~2
+git tag v2 HEAD~1
+git tag v3 
+
+git checkout --detach main
+
+[win]
+
+# Hai riosso tutte le etichette?
+test "$(git tag -l | wc -l)" -eq 0
+
+[actions]
+
+
+
+[congrats]
+
+Molto bene :)
diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence
new file mode 100644
index 0000000..fd63d9c
--- /dev/null
+++ b/levels/it/tags/sequence
@@ -0,0 +1,4 @@
+add-tag
+remove-tag
+add-tag-later
+remote-tag
diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout
new file mode 100644
index 0000000..9d9c957
--- /dev/null
+++ b/levels/it/unused/checkout
@@ -0,0 +1,31 @@
+title = Getting the last version
+cards = checkout-file
+
+[description]
+
+You've been working on your essay for a while. But - ughh! Now your cat walks over your keyboard and "helps you", so now it's all messed up! :/
+
+But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`!
+
+[setup]
+
+echo "A" >> essay.txt
+git add .
+git commit -m "Initial commit"
+
+echo "B" >> essay.txt
+git commit -a -m "Improved version"
+
+echo "C" >> essay.txt
+git commit -a -m "Even better version"
+
+echo "D" >> essay.txt
+git commit -a -m "Marvelous version"
+
+echo "blarg
+blaaaargh" > essay.txt
+
+[win]
+
+# Restore the version from the last commit.
+cat essay.txt | grep D
diff --git a/levels/it/unused/clone b/levels/it/unused/clone
new file mode 100644
index 0000000..8459c08
--- /dev/null
+++ b/levels/it/unused/clone
@@ -0,0 +1,20 @@
+title = Cloning a repo
+cards = clone commit-auto pull push
+
+[description]
+
+Get your friend's repo using clone, change something, push it back.
+
+[setup]
+
+rm -rf .git
+
+[setup friend]
+
+echo hi > file
+git add .
+git commit -m "Initial commit"
+
+[win friend]
+
+test "$(git show main:file)" != hi
diff --git a/levels/it/unused/commit b/levels/it/unused/commit
new file mode 100644
index 0000000..fd84cc9
--- /dev/null
+++ b/levels/it/unused/commit
@@ -0,0 +1,27 @@
+title = Make a commit \o/
+cards = add reset checkout commit
+
+[description]
+
+For practice, make a commit where all files contain an "x"!
+
+[setup]
+
+echo a > a
+echo x > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b > b
+git add b
+echo c > c
+
+[win]
+
+# File a contains "x" in the last main commit.
+test "$(git show main:a)" = x
+# File b contains "x" in the last main commit.
+test "$(git show main:b)" = x
+# File c contains "x" in the last main commit.
+test "$(git show main:c)" = x
diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a
new file mode 100644
index 0000000..747a009
--- /dev/null
+++ b/levels/it/unused/commit-a
@@ -0,0 +1,26 @@
+title = Make a commit, but faster!
+cards = add reset checkout commit commit-a
+
+[description]
+
+There is a time-saving trick, where instead of a plain `git commit`, you can use
+
+    git commit -a
+
+This will automatically add all changes you made to local files! Very convenient.
+
+[setup]
+
+echo a > a
+echo b > b
+echo c > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo x > b
+echo x > c
+
+[win]
+
+# Make a commit where all files contain "x".
+test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x
diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch
new file mode 100644
index 0000000..377355a
--- /dev/null
+++ b/levels/it/unused/fetch
@@ -0,0 +1,35 @@
+title = Fetching from remotes
+cards = checkout fetch commit-auto
+
+[description]
+
+Here, you already have two remotes configured! You can list them using `git remote`.
+
+Fetch from both, and look at the suggestions.
+
+Then, make a new commit on top of your original one that introduces a compromise.
+
+[setup]
+
+echo "The bikeshed should be ???" > proposal
+git add .
+git commit -m "What do you think?"
+
+[setup friend1]
+
+git pull yours main
+echo "The bikeshed should be green" > proposal
+git commit -am "Green"
+
+[setup friend2]
+
+git pull yours main
+echo "The bikeshed should be blue" > proposal
+git commit -am "Blue"
+
+[win]
+
+# Your proposal is acceptable for friend1.
+git show main:proposal | git grep green
+# Your proposal is acceptable for friend2.
+git show main:proposal | git grep blue
diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move
new file mode 100644
index 0000000..8f65710
--- /dev/null
+++ b/levels/it/unused/files-move
@@ -0,0 +1,27 @@
+title = No sleep required
+cards = file-new file-delete file-rename
+
+[description]
+
+Actually, you decide that you don't need any sleep.
+
+Because of that, you won't require a bed, and can build some other piece of furniture from the wood!
+
+
+[setup]
+
+echo A yellow cupboard with lots of drawers. > cupboard
+echo A really big yellow shelf. > shelf
+echo A comfortable, yellow bed with yellow cushions. > bed
+
+[win]
+
+# Rename the bed into something else, and give it a new description!
+NUM_FILES="$(ls | wc -l)"
+! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" .
+
+[congrats]
+
+Neat! It even still looks a bit comfortable!
+
+You head out, eager for your first lesson at time travel school!
diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv
new file mode 100644
index 0000000..9ff7270
--- /dev/null
+++ b/levels/it/unused/index-mv
@@ -0,0 +1,26 @@
+title = Rename a file in the next commit
+cards = add reset-file checkout-file mv commit
+
+[description]
+
+Other times, you might want to rename a file in the next commit. Use
+
+    git mv [file] [new name]
+
+for that. The effect is very similar as if you had created a copy with a new name, and removed the old version.
+
+[setup]
+
+echo a > a
+echo SPECIAL > b
+echo x > c
+git add .
+git commit -m "Initial commit"
+echo x > a
+echo b >> b
+git add b
+
+[win]
+
+# Make a commit where you rename the file b to "x".
+test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")"
diff --git a/levels/it/unused/init b/levels/it/unused/init
new file mode 100644
index 0000000..c76daa5
--- /dev/null
+++ b/levels/it/unused/init
@@ -0,0 +1,14 @@
+title = Welcome!
+cards = init
+
+[description]
+
+
+[setup]
+
+rm -rf .git
+
+[win]
+
+# Again, initialize your time machine!
+test -d .git
diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push
new file mode 100644
index 0000000..71ce61d
--- /dev/null
+++ b/levels/it/unused/pull-push
@@ -0,0 +1,51 @@
+title = Helping each other
+cards = checkout commit-auto reset-hard pull push
+
+[description]
+
+The events and timelines you see are always only what your own time machine knows about!
+
+Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine.
+
+Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick!
+
+You can only ever manipulate things in your own time machine (the one on the bottom).
+
+[setup yours]
+
+echo "Just woke up. Is hungry." > sam
+git add .
+git commit -m "The beginning"
+
+git checkout -b pancakes
+echo "Had blueberry pancakes with maple syrup for breakfast." > sam
+git add .
+git commit -m "Pancakes!"
+
+git checkout -b muesli main
+echo "Had muesli with oats and strawberries for breakfast." > sam
+git add .
+git commit -m "Muesli!"
+
+git checkout main
+
+git push -u sidekick main pancakes muesli
+
+[setup sidekick]
+
+git checkout main
+git merge pancakes
+git merge muesli
+
+echo "Had pancakes with strawberries for breakfast." > sam
+git add .
+git commit -m "Let's make this breakfast compromise" --author="Sidekick <sidekick@example.com>"
+
+[win sidekick]
+
+# Below main's parent, there is a rhombus:
+git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)"
+
+[congrats]
+
+In reality, in many cases, a lot of time agents work together to build a really good future together! :)
diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add
new file mode 100644
index 0000000..db24b7d
--- /dev/null
+++ b/levels/it/unused/remotes-add
@@ -0,0 +1,33 @@
+title = Adding a remote
+cards = checkout
+
+[description]
+
+Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using
+
+    git remote add [name] [URL]
+
+where `[name]` is an arbitrary, short name you pick for the remote.
+
+When you've done that, you can get all commits from that remote using
+
+    git pull friend
+
+There's a letter for you!
+
+[setup]
+
+git remote remove friend
+
+[setup friend]
+
+echo "I'm really committed to our friendship! <3" > love_letter
+git add .
+git commit -m "Write a letter"
+
+[win]
+
+# Add a remote that points to ../friend.
+git remote -v | grep '../friend'
+# Pull from the remote.
+git show HEAD:love_letter | grep committed
diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete
new file mode 100644
index 0000000..c026204
--- /dev/null
+++ b/levels/it/unused/remotes-delete
@@ -0,0 +1,23 @@
+title = Deleting and renaming a remote
+cards = checkout
+
+[description]
+
+Here, you already have two remotes configured! You can list them using `git remote`.
+
+[setup]
+
+git remote rename friend frend
+
+[setup friend]
+
+[setup enemy]
+
+[win]
+
+# Rename the remote with the typo (using `git remote rename [old name] [new name]`)
+git remote | grep friend
+# The remote with the typo is gone.
+! grep 'frend' <(git remote)
+# Delete the remote you don't want to keep (using `git remote remove [remote]`)
+! grep 'enemy' <(git remote)
diff --git a/levels/it/unused/restore b/levels/it/unused/restore
new file mode 100644
index 0000000..1f9961e
--- /dev/null
+++ b/levels/it/unused/restore
@@ -0,0 +1,28 @@
+title = Looking into the past
+cards = checkout-from
+
+[description]
+
+You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"!
+
+No problem, you can use the `checkout` card to restore your essay from an older commit!
+
+[setup]
+
+echo "Initial version" > essay.txt
+git add .
+git commit -m "Initial commit"
+
+echo "Improved version" > essay.txt
+git commit -a -m "Improved version"
+
+echo "Best version" > essay.txt
+git commit -a -m "Best version"
+
+echo "Less-good version" > essay.txt
+git commit -a -m "Less-good version"
+
+[win]
+
+# For nostalgic reasons, restore the very first backup you made!
+diff essay.txt <(echo "Best version")
diff --git a/levels/it/unused/split b/levels/it/unused/split
new file mode 100644
index 0000000..274b792
--- /dev/null
+++ b/levels/it/unused/split
@@ -0,0 +1,26 @@
+title = Split a commit!
+cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show
+
+[description]
+
+Here, both changes happened in one commit! Split them to be in two commits instead.
+
+[setup]
+
+echo something > file1
+echo something else > file2
+git add .
+git commit -m "Initial commit"
+
+echo this should happen first >> file1
+echo and this should happen after that >> file2
+git commit -am "Both together"
+
+echo this is some other change >> file1
+echo this is some other change >> file2
+git commit -am "Something else"
+
+[win]
+
+test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file2" &&
+test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M	file1"
diff --git a/levels/it/unused/steps b/levels/it/unused/steps
new file mode 100644
index 0000000..cb84861
--- /dev/null
+++ b/levels/it/unused/steps
@@ -0,0 +1,23 @@
+title = One step after another
+cards = checkout commit reset-hard add
+
+[description]
+
+Sometimes, you might want to record the order in which things changed, instead of making a single commit.
+
+What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense!
+
+[setup]
+
+echo something > file1
+echo something else > file2
+git add .
+git commit -m "Initial commit"
+
+echo this should happen first >> file1
+echo and this should happen after that >> file2
+
+[win]
+
+test "$(git diff-tree --no-commit-id --name-status -r main)" = "M	file2" &&
+test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M	file1"
diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you
new file mode 100644
index 0000000..f06137c
--- /dev/null
+++ b/levels/it/unused/who-are-you
@@ -0,0 +1,23 @@
+title = Nice to meet you!
+cards = config-name config-email
+
+[description]
+
+Introduce yourself using
+
+    git config --global user.name Firstname
+    git config --global user.email "your@mail.com"
+
+[setup]
+
+[actions]
+
+test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!"
+
+[win]
+
+# Have a name configured.
+test "$(git config user.name)" != "You"
+
+# Have an email address configured.
+test "$(git config user.email)" != "you@time.agency"
diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore
new file mode 100644
index 0000000..dc55243
--- /dev/null
+++ b/levels/it/workflows/gitignore
@@ -0,0 +1,18 @@
+title = Ignoring files
+
+[description]
+
+That chicken is running around a lot, and changing often. We don't want to have it in our commits.
+
+Add it to the file .gitignore, and try using `git add .`!
+
+[setup]
+
+touch .gitignore
+echo important > important
+git add important
+git commit -m "Initial commit"
+
+[actions]
+
+echo "$RANDOM" > chicken
diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr
new file mode 100644
index 0000000..98fa95f
--- /dev/null
+++ b/levels/it/workflows/pr
@@ -0,0 +1,25 @@
+title = Clonare un repo
+cards = clone commit-auto reset-hard checkout file-new branch
+
+[description]
+
+Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`.
+
+[setup]
+
+rm -rf .git
+
+[setup friend]
+
+echo "2 + 3 = " > file
+git add .
+git commit -m "Commit iniziale"
+
+[actions friend]
+
+git ls-remote yours | grep pr && git fetch yours && git merge yours/solution
+git show main:file | grep 5 && hint "Grazie!"
+
+[win friend]
+
+git show main:file | grep 5
diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence
new file mode 100644
index 0000000..1be11a8
--- /dev/null
+++ b/levels/it/workflows/sequence
@@ -0,0 +1 @@
+pr
diff --git a/locale/it_IT/it_IT-levels.po b/locale/it_IT/it_IT-levels.po
deleted file mode 100644
index 0f5e4b4..0000000
--- a/locale/it_IT/it_IT-levels.po
+++ /dev/null
@@ -1,1186 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2022 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# Automatically generated, 2022.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-24 12:17+0200\n"
-"Last-Translator: Luca Canali <info@canaliluca.com>\n"
-"Language-Team: none\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"Generated-By: Babel 2.10.3\n"
-"X-Generator: Poedit 3.1\n"
-
-#: TITLE
-msgid "Living dangerously"
-msgstr "Vivere pericolosamente"
-
-#: Command
-msgid "Add another line to form.txt!"
-msgstr "Aggiungi un'ulteriore linea a form.txt!"
-
-msgid "Making backups"
-msgstr "Fare backups"
-
-msgid "Add another line to form2_really_final.txt!"
-msgstr "Aggiungi un'ulteriore linea a form2_really_final.txt!"
-
-msgid "Enter the time machine"
-msgstr "Entra nella macchina del tempo"
-
-msgid "Initialize the time machine!"
-msgstr "Inizializza la macchina del tempo!"
-
-msgid "The command line"
-msgstr "La linea di comando"
-
-msgid "Your first commit"
-msgstr "Il tuo primo commit"
-
-msgid "Make a snapshot of the glass (a 'commit')"
-msgstr "Crea un'istantanea di glass (un 'commit')"
-
-msgid "Change the contents of the glass!"
-msgstr "Cambia il contenuto di glass!"
-
-msgid "And make a second commit!"
-msgstr "E crea un secondo commit!"
-
-msgid "Working together"
-msgstr "Lavoriamo assieme"
-
-msgid "Get the second commit from your teacher using `git pull`."
-msgstr "Recupera il secondo commit dal tuo insegnante usando `git pull`."
-
-msgid "Add your name to the list of students"
-msgstr "Aggiungi il tuo nome alla lista degli studenti"
-
-msgid "Commit your result."
-msgstr "Conferma il risultato."
-
-msgid "And use `git push` to send it to your teacher!"
-msgstr "E usa `git push` per inviarlo al tuo insegnante!"
-
-msgid "Unexpected Roommates"
-msgstr "Coinquilini inaspettati"
-
-msgid "Remove all spider webs."
-msgstr "Rimuovi tutte le ragnatele."
-
-msgid "But make sure you keep your bed!"
-msgstr "Ma accertati di lasciare il tuo letto!"
-
-msgid "Interior design"
-msgstr "Arredatore"
-
-msgid "Add two more pieces of furniture"
-msgstr "Aggiungi altri due mobili"
-
-msgid "Make sure the colors match your bed's color."
-msgstr "Assicurati che i colore corrisponda a quello del letto."
-
-msgid "Moving through time"
-msgstr "Muoversi attraverso il tempo"
-
-msgid "Restore sisterly peace."
-msgstr "Ripristina il salvadanaio della sorella."
-
-msgid "Make parallel commits"
-msgstr "Crea commit paralleli"
-
-msgid "Make sure that the child is happy."
-msgstr "Assicurati che il bambino sia felice."
-
-msgid "Make sure that the lion gets something to eat."
-msgstr "Assicurati che il leone abbia qualcosa da mangiare."
-
-msgid "Creating branches"
-msgstr "Creare branch"
-
-msgid "Create a branch called 'birthday' that points to the birthday timeline."
-msgstr ""
-"Creare una branch chiamata 'birthday' che punti alla timeline del compleanno."
-
-msgid "Create a branch called 'concert' that points to the concert timeline."
-msgstr ""
-"Crare una branch chiamata 'concert' che punti alla timeline del concerto."
-
-msgid "Branches grow with you!"
-msgstr "Le branch crescono con te!"
-
-msgid ""
-"Travel directly to the last yellow commit of the birthday timeline, make a "
-"change to 'you', and make a commit"
-msgstr ""
-"VIaggia direttamente nell'ultimo commit della linea temporale del "
-"compleanno, fai un cambiamento in 'you' e crea un commit"
-
-msgid ""
-"Travel to the blue 'concert' branch, make a change to 'you', and a commit."
-msgstr ""
-"Viaggia nella branch blue 'concert', fai un cambiamento in 'you', e un "
-"commit."
-
-msgid "Deleting branches"
-msgstr "Cancella le branch"
-
-msgid "Find the bad branches and delete them. Keep only the best one."
-msgstr "Trova le brach sbagliate e cancellale. Tieni solo la migliore."
-
-msgid "Moving branches around"
-msgstr "Sposta le branch in giro"
-
-msgid "Did you eat a baguette on the baguette branch?"
-msgstr "Hai mangiato una baguette nella branch 'baguette'?"
-
-msgid "Did you drink a coffee on the coffee branch?"
-msgstr "Hai bevuto un caffe nella branch 'coffee'?"
-
-msgid "Did you eat a donut on the donut branch?"
-msgstr "Hai mangiato una ciambella nella branch 'donut'?"
-
-msgid "Merging timelines"
-msgstr "Unisci le line temporali"
-
-msgid ""
-"Build a situation where you consumed a baguette, a coffee, *and* a donut."
-msgstr ""
-"Crea una condizione dove tu consumi una baguette, un caffe *e* una ciambella."
-
-msgid "Be on a merge commit."
-msgstr "Crea (e spostati su) un commit di unione."
-
-msgid "Contradictions"
-msgstr "Contradizioni"
-
-msgid "Make a breakfast compromise in the 'main' branch."
-msgstr "Fai un compromesso per la colazione nella branch 'main'."
-
-msgid "Step by step"
-msgstr "Passo dopo passo"
-
-msgid "Pick the timeline that's clearer, and make the alarm go off!"
-msgstr "Scegli la linea temporale piu' chiara e fai suonare l'allarme!"
-
-msgid "Add new files to the index"
-msgstr "Aggiungi nuovi file all'indice"
-
-msgid "Add the candle."
-msgstr "Aggiungi la candela."
-
-msgid "Make a commit."
-msgstr "Crea un commit."
-
-msgid "Update files in the index"
-msgstr "Aggiorna i file nell'indice"
-
-msgid "Make a change to the candle."
-msgstr "Fai un cambiamento nella candela."
-
-msgid "Resetting files in the index"
-msgstr "Resetta i file nell'indice"
-
-msgid "Reset the changes in the green and blue candles!"
-msgstr "Resetta i cambiamenti nelle candele verdi e blue!"
-
-msgid "And make a commit!"
-msgstr "E crea un commit!"
-
-msgid "Adding changes step by step"
-msgstr "Aggiungi i cambiamenti passo dopo passo"
-
-msgid ""
-"Make changes to all three objects, to form a logical sequence of events!"
-msgstr ""
-"Crea cambiamenti in tutti e tre gli oggetti, da una sequenza logica di "
-"eventi!"
-
-msgid "Only add one of these changes!"
-msgstr "Aggiungi solo uno di questi cambiamenti!"
-
-msgid "And make a commit."
-msgstr "E crea un commit."
-
-msgid "Make a second commit that only records a single change."
-msgstr "Crea un secondo commit con solo i record con un singolo cambiamento."
-
-msgid "And a third one."
-msgstr "E un terzo."
-
-msgid "Friend"
-msgstr "Amici"
-
-msgid "Got the second line from your friend"
-msgstr "Ottenuta la seconda linea dal tuo amico"
-
-msgid "Got the fourth line from your friend."
-msgstr "Ottenuta la quarta linea dal tuo amico."
-
-msgid "The friend got a third line from you"
-msgstr "Il tuo amico ti ha dato la terza linea"
-
-msgid "The friend got a fifth line from you"
-msgstr "Il tuo amico ti ha dato la quinta linea"
-
-msgid "Problems"
-msgstr "Problemi"
-
-msgid "Commit your local changes."
-msgstr "Committa i tuoi combiamenti."
-
-msgid "Look at your friend's suggestion, make a compromise, and push it back."
-msgstr ""
-"Guarda i suggerimenti del tuo amico, fai un compromesso, e rimadalo in "
-"dietro."
-
-msgid "Rebasing"
-msgstr ""
-
-msgid "Order all tree branches into one and move the main branch ref"
-msgstr "Ordina le tre branch in una e muovi il riferimeto alla branch 'main'"
-
-msgid "Reordering events"
-msgstr "Riordinare gli eventi"
-
-msgid "Reorder the commits to dress yourself in the correct way"
-msgstr "Riordina i commit per vestirti nell'ordine giusto"
-
-msgid "Restore a deleted file"
-msgstr "Recupera un file cancellato"
-
-msgid "Restore the essay to contain 'important content'"
-msgstr ""
-
-msgid "Restore a file from the past"
-msgstr ""
-
-msgid "Get the first version of your essay, and make a new commit with it."
-msgstr ""
-
-msgid "Undo a bad commit"
-msgstr ""
-
-msgid ""
-"In the last main commit, the numbers file contains the numbers from 1 to 10."
-msgstr ""
-
-msgid "The commit message of that commit is 'More numbers'."
-msgstr ""
-
-msgid "The commit with the typo is not part of the main branch anymore."
-msgstr ""
-
-msgid "I pushed something broken"
-msgstr ""
-
-msgid "The team's main branch no longer contains the bad thing."
-msgstr ""
-
-msgid "And the history has not been modified."
-msgstr ""
-
-msgid "Go back to where you were before"
-msgstr ""
-
-msgid "Find out where you've been before, and go back there!"
-msgstr ""
-
-msgid "Cloning a repo"
-msgstr ""
-
-msgid "Yellow brick road"
-msgstr ""
-
-msgid "Find the last good commit"
-msgstr ""
-
-msgid "Stashing"
-msgstr ""
-
-msgid "Did you stash the current changes?"
-msgstr ""
-
-msgid "Pop from Stash"
-msgstr ""
-
-msgid "Did you pop the changes from the stash stack?"
-msgstr ""
-
-msgid "Clear the Stash"
-msgstr ""
-
-msgid "Did you clear your stash stack?"
-msgstr ""
-
-msgid "Branch from stash"
-msgstr ""
-
-msgid "Did you create a new branch from the stashed changes?"
-msgstr ""
-
-msgid "Merging popped stash"
-msgstr ""
-
-msgid "Did you resolve the confict and commit?"
-msgstr ""
-
-msgid "Did you clear stash stack?"
-msgstr ""
-
-msgid "Creating tags"
-msgstr ""
-
-msgid "Did you create a new tag?"
-msgstr ""
-
-msgid "Removing tags"
-msgstr ""
-
-msgid "Did you remove all tags?"
-msgstr ""
-
-msgid "Tagging later"
-msgstr ""
-
-msgid "Remote Tags"
-msgstr ""
-
-msgid "v1 tag in your repo"
-msgstr ""
-
-msgid "v2 tag in your repo"
-msgstr ""
-
-msgid "v2 tag in the remote"
-msgstr ""
-
-msgid "Empty sandbox"
-msgstr ""
-
-msgid "Sandbox with a remote"
-msgstr ""
-
-msgid "Sandbox with three commits"
-msgstr ""
-
-#: DESCRIPTION
-msgid ""
-"So you have decided to apply for time travel school, to learn how to use "
-"this time machine called 'Git'!\n"
-"\n"
-"How exciting!\n"
-"\n"
-"You're almost done with the paperwork! You just need to fill in one more "
-"reason why you want to learn Git."
-msgstr ""
-"Bene hai deciso di fare domanda per la scuola di viaggio nel tempo, per "
-"usare questa macchina del tempo chiamata 'Git'!\n"
-"\n"
-"Che emozione!\n"
-"\n"
-"Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il "
-"quale vuoi imparare Git."
-
-msgid ""
-"This time, you're making a lot of backup copies - you can look at them by "
-"clicking on them!"
-msgstr ""
-"Questa volta hai fatto molti copie di backup - le puoi guardare cliccandoci "
-"sopra!"
-
-msgid ""
-"You've been accepted to time travel school! Yay! It's your first day! Your "
-"teacher explains:\n"
-"\n"
-"'To do anything with a time machine, you first need to initialize it!'\n"
-"\n"
-"Drag that blue card up to play it!"
-msgstr ""
-"Sei stato accettato nella scuola della macchina del tempo! Yay! E' il tuo "
-"primo giorno! Il tuo insegnante spiega;\n"
-"\n"
-"'Prima di fare qualsiasi altra cosa con la macchina del tempo, e' necessario "
-"che la inizializzi!'\n"
-"\n"
-"Trascina verso l'alto la carta blue per usarla!"
-
-msgid ""
-"These playing cards are designed to be easy to use and to remember! We'd "
-"suggest sticking to them if you don't have a lot of experience with Git!"
-msgstr ""
-"Queste carte da gioco sono state disegnate per essere facili da utilizzare e "
-"ricordare! Ti consigliamo di usarle se non hai molta esperienza con Git!"
-
-msgid ""
-"You can use your time machine to make snapshots of objects around you! Here, "
-"let's practice this!\n"
-"\n"
-"(Your teacher pours some water into a glass.)"
-msgstr ""
-"Puoi usare la tua macchina del tempo per creare delle istantanee degli "
-"oggetti che ti circondano! Ecco, facciamo questo!\n"
-"\n"
-"(Il tuo insegnante versa dell'acqua nel bicchiere.)"
-
-msgid ""
-"Let's add your name to our list of students!\n"
-"\n"
-"I already have a second commit of it in my time machine - let's work "
-"together!"
-msgstr ""
-"Aggiungiamo il tuo nome nella nostra lista di studenti!\n"
-"\n"
-"Io ne ho gia' un secondo commit nella mia macchina del tempo - lavoriamo "
-"assieme!"
-
-msgid ""
-"The first day at Time Travel School comes to an end and you receive the key "
-"to your room.\n"
-"Full of excitement you open the door just to find... spider webs! Spider "
-"webs everywhere!\n"
-"\n"
-"Remove all the spider webs you can find with the remove card!"
-msgstr ""
-"Il primo giorno nella scuola del viaggio nel tempo! La scuola finisce e "
-"rivevi le chiavi della tua stanza.\n"
-"Pieno di eccitazione apri la porta per trovare ... ragnatele! Ragnatele "
-"ovunque!\n"
-"\n"
-"Elimina tutte le ragnatele che trovi con la carta cancella!"
-
-msgid ""
-"Now that your room looks tidy, you can start to unpack your stuff. You "
-"brought two new pieces of furniture with you and with a bright smile,\n"
-"you see that their colors match the color of your bed!\n"
-"\n"
-"Build up your two pieces of furniture by playing the touch card.\n"
-"Then name your furniture - you can choose whatever you like.\n"
-"\n"
-"Make sure the colors match! You can find the bed's color in its "
-"description.\n"
-"Don't forget to add a color and description to your new furnitures, too!"
-msgstr ""
-"Adesso che la tua camera è riordinata, puoi iniziare a disfare le valige. Ti "
-"sei portato due nuovi mobili con te e con un felicità,\n"
-"noti che il loro colore si abbina al letto!\n"
-"\n"
-"Monta i tuoi due mobili giocando la carta touch.\n"
-"Quindi dai un nome ai tuoi mobili - puoi scegliere quello che preferisci.\n"
-"\n"
-"Accertati che il colori corrispondano! Puoi trovare il colore del letto "
-"nella sua descrizione.\n"
-"Non ti dimenticare anche di aggiungere il colore e la descrizione ai tuoi "
-"nuovi mobili!"
-
-msgid ""
-"The yellow boxes are frozen points in time, we call them 'commits'! You can "
-"travel between them using the 'checkout' card! (Try it!)\n"
-"\n"
-"Can you find out what happened here? Then, while on the last commit, edit "
-"the files to fix the problem, and make a new commit!"
-msgstr ""
-"La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "
-"\"commits\"! Puoi viaggiare tra loro usando la carta \"checkout\"! "
-"(Provala!)\n"
-"\n"
-"Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i "
-"files per risolvere il problema ed invia un nuovo commit!"
-
-msgid ""
-"Did you know that creating parallel timelines is perfectly legal and safe? "
-"It's true!\n"
-"\n"
-"Can you find out when things went wrong in this zoo? Then, go back to the "
-"last good commit and create a parallel universe where everyone is happy!"
-msgstr ""
-"Sai che creare linee temporali parallele è perfettamente legale e sicuro? E' "
-"vero!\n"
-"\n"
-"Puoi trovare cosa c'è di sbagliato in questo zoo? Bene, torna indietro "
-"all'ultimo commit buono e creane un universo parallelo dove tutti sono "
-"felici!"
-
-msgid ""
-"You were invited to two parties! At one of them, your favorite band is "
-"playing - and the other one is your best friend's birthday party. Where "
-"should you go? No worries - as a time travel agent in training, you can go "
-"to both parties!\n"
-"\n"
-"To make it easier to tell which timeline is which, you can create time "
-"portals! (We call these 'branches'.)"
-msgstr ""
-"Sei stato invitato a due feste! In una di queste, suona la tua band "
-"preferita - e l'altra e' il compleanno del tuo migliore amico. Dove dovresti "
-"andare? Non ti preoccupare - sei un agente del tempo in addestramento, tu "
-"puoi andare ad entrambe le feste!\n"
-"\n"
-"Per rendere piu' facile capire quale sequenza temporale e', puoi creare dei "
-"portali! ( Che chiamiamo 'branches'.)"
-
-msgid ""
-"Note that there are two options to 'travel to the end of a timeline':\n"
-"\n"
-"First, you can directly travel to the commit, like we've done it before.\n"
-"\n"
-"And second, you can travel to the branch label. In this case, when you make "
-"a new commit, the branch will grow with you, and still point at the end of "
-"the timeline!"
-msgstr ""
-
-msgid ""
-"Life is full of dangers, right? Even when walking to school, it seems like "
-"there's a lot of risks!\n"
-"\n"
-"This Monday is especially bad. You made it to school, but there's some "
-"timelines you definitely don't want to keep around."
-msgstr ""
-
-msgid ""
-"One of your colleagues messed up here, and put the branches in the wrong "
-"timelines!\n"
-"\n"
-"You could delete and re-create these branches - but you can also directly "
-"move them to different commits, by using\n"
-"\n"
-"    git checkout\n"
-"\n"
-"on the branch names, and then using\n"
-"\n"
-"    git reset --hard\n"
-"\n"
-"on the commit where you want the branch to be.\n"
-"\n"
-"The donut branch is in the right place, but the timeline is still incomplete "
-"- make you actually *eat* the donut in that branch!"
-msgstr ""
-
-msgid ""
-"Here's a trick so that you can sleep a bit longer: just do all your morning "
-"activities in parallel universes, and then at the end, merge them together!"
-msgstr ""
-
-msgid ""
-"Sometimes, timelines will contradict each other.\n"
-"\n"
-"For example, in this case, one of our clients wants these timelines merged, "
-"but they ate different things for breakfast in both timelines.\n"
-"\n"
-"Try to merge them together! You'll notice that there will be a conflict! The "
-"time machine will leave it up to you how to proceed: you can edit the "
-"problematic item, it will show you the conflicting sections. You can keep "
-"either of the two versions - or create a combination of them! Remove the "
-">>>, <<<, and === markers, and make a new commit to finalize the merge!\n"
-"\n"
-"Let your finalized timeline be the 'main' one."
-msgstr ""
-
-msgid ""
-"Welcome to today's lesson! We're going to learn how to make commits with "
-"more precision!\n"
-"\n"
-"Have a look at these two timelines. They have exactly the same outcome. But "
-"one of them makes it much easier to figure out what happened."
-msgstr ""
-
-msgid ""
-"So far, when we made a commit, we've always recorded the current status of "
-"all objects, right?\n"
-"\n"
-"But Git allows you to pick which changes you want to put in a commit!\n"
-"\n"
-"To learn how that works, we need to learn about the 'index'! In the index, "
-"we can prepare what will be in the next commit. In this game, the index is "
-"represented by a blue aura around icons in the file browser!\n"
-"\n"
-"Initially, the index is empty. To make a commit that contains a new file, we "
-"need to add it!"
-msgstr ""
-
-msgid ""
-"When we change files, the index won't change on its own. We have to use `git "
-"add` to update the index to the changed version of the file.\n"
-"\n"
-"Let's try that!\n"
-"\n"
-"The icons in the file browser show you when the actual file (white) and the "
-"version in the index (blue) are different, and when they are the same!"
-msgstr ""
-
-msgid ""
-"See the dark shadow behind the icons? That's the version of the file in the "
-"last commit!\n"
-"\n"
-"For example, these candles have been blown out, and that change has been "
-"added.\n"
-"\n"
-"But you decide that this was a mistake! You only want to blow out the red "
-"candle in the next commit!\n"
-"\n"
-"If you already have updated the index to a changed file, but want to reset "
-"it, you can use `git reset`!"
-msgstr ""
-
-msgid ""
-"The index is really useful, because it allows us to be precise about which "
-"changes we want to include in each commit!"
-msgstr ""
-
-msgid ""
-"Your friend added another line to your essay! Get it, add a third one and "
-"send it to them!\n"
-"\n"
-"Take turns until you have five lines!"
-msgstr ""
-
-msgid ""
-"Both you and your friend have been working on the file, and want to sync up!"
-msgstr ""
-
-msgid ""
-"Okay - turns out that saving time in the morning by utilizing parallel "
-"universes is against the regulations of the International Time Travel "
-"Association. You'll have to do your tasks in sequence after all.\n"
-"\n"
-"See the 'rebase' card? When you drag it to a commit, it will copy the events "
-"in your current timeline after the specified one! This way, make a clean, "
-"linear timeline where you visit all three shops.\n"
-"\n"
-"Again, we want to make that our base reality - the 'main' branch should "
-"point to that timeline!"
-msgstr ""
-
-msgid ""
-"Oops, looks like there's something messed up here. Can you put the events "
-"back into their correct order?\n"
-"\n"
-"There are two ways to do this: You can drag the 'interactive rebase' card to "
-"the commit before the one you want to change, then reorder the lines in the "
-"file that opens, and save it.\n"
-"\n"
-"Or you can reset the main tag to the very first commit, and then cherry-pick "
-"single commits in the order you want. You have cards for both approaches!"
-msgstr ""
-
-msgid ""
-"Oops - you deleted the 'essay' file, which you worked on all night!\n"
-"\n"
-"Luckily, Git is here to help! You can use `git checkout` to restore the file!"
-msgstr ""
-
-msgid ""
-"Here's a similar problem: you really liked the essay from the very first "
-"commit, and want to have it back! Well, checkout can also restore things "
-"from older commits, Here's how:\n"
-"\n"
-"    git checkout [commit] [file]"
-msgstr ""
-
-msgid ""
-"Oh no, we made a bad commit! How can we undo making the commit, and go back "
-"to a point where we can try again?\n"
-"\n"
-"The answer is using `git reset [commit]`, which does two things:\n"
-"\n"
-"- It resets the current branch ref to the commit you specify.\n"
-"- And it resets the index to that commit.\n"
-"\n"
-"It does not change your working directory in any way, which means that after "
-"that, you can try making the commit you want again."
-msgstr ""
-
-msgid ""
-"We were talking about how to undo a commit, and fix it. This only helps when "
-"you haven't already pushed it to a remote. When that has happened, and you "
-"want to undo the effects of the commit completely, your best option is `git "
-"revert`"
-msgstr ""
-
-msgid ""
-"Say you were looking at something in the past, and then switched back to the "
-"main branch.\n"
-"\n"
-"But then, you got reaaally distracted, and after your lunch break, you can't "
-"remember on which commit in the past you were before. How can you find out?\n"
-"\n"
-"There's a convenient command that shows you all the places your HEAD did "
-"point to in the past:\n"
-"\n"
-"    git reflog"
-msgstr ""
-
-msgid ""
-"Your friend has a problem! Clone the repo, create a branch called "
-"'solution', and fix the problem in this branch. When you're ready, make a "
-"'Pull Request' by using `git tag pr`."
-msgstr ""
-
-msgid ""
-"(Please zoom out a bit using your mouse wheel! :D)\n"
-"\n"
-"Oh no! You have lost your key at some point during the day!\n"
-"\n"
-"Sure, you could look at every single commit in an attempt to find it - but "
-"there's a better way: your time machine has a built-in way to find the point "
-"in time where things went wrong quickly!\n"
-"\n"
-"First, play the 'bisect start' card. Then, go to a commit where you don't "
-"have the key, and play the 'bisect bad' card. Likewise, go to a commit early "
-"on where you have the key *in your pocket*, and play the 'bisect good "
-"card'.\n"
-"\n"
-"After you've found the last good commit, reset the main branch to it. What "
-"happened to the key after you lost it?"
-msgstr ""
-
-msgid ""
-"You will encounter situations in which you are working on your project but "
-"you need to\n"
-"put your current changes aside temporarily. To do so, you can use the stash "
-"function. Use\n"
-"    git stash push \n"
-"to add your current changes to the stash stack.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you stashed your changes and you want to apply them back to your "
-"current working directory, you can use\n"
-"    git stash pop\n"
-"This will remove the changes from the stash stack. If you also want to keep "
-"the changes on the stash stack, use\n"
-"    git stash apply\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"If you want to inspect your stash stack, use the command\n"
-"    git stash list\n"
-"    \n"
-"Oh, you don't want to keep your stashed changes? There are way too many? "
-"Then go ahead and clear the stack with\n"
-"    git stash clear\n"
-"If you only want to discard a certain stash entry, you can use\n"
-"    git stash drop <stash>\n"
-"    \n"
-"Clear your stash stack!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"If you want to keep your changes but they don't belong to the main branch, "
-"you can easily\n"
-"create a new branch from your stashed changes. Just use\n"
-"    git stash branch <branchname> <stash>\n"
-"If you just want to use the latest stash entry, you can leave the <stash> "
-"option empty.\n"
-"\n"
-"Create a new branch from the stashed changes!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you want to reapply your changes but you already continued working on "
-"your file, you might get\n"
-"a merge conflict! Let's practise this situation.\n"
-"Pop the changes from the stash with\n"
-"    git stash pop\n"
-"and resolve the merge conflict. Commit the resolved changes and clear the "
-"stash stack afterwards.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"Some of your commits may be special commits. Maybe you reached a milestone "
-"or a new version number.\n"
-"\n"
-"You can mark these commits with a special flag called 'tag'.\n"
-"\n"
-"Write \n"
-"\n"
-"    git tag <tag-name> \n"
-"    \n"
-"to tag your commit.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"You added way too many tags? No prob! Delete them with\n"
-"\n"
-"    git tag -d <tag-name>\n"
-"    \n"
-"Remove all tags in this repo!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"But what happens if you forgot to tag your current commit?\n"
-"No Prob! You can also tag older commits via\n"
-"\n"
-"    git tag <tag-name> <commit-hash>\n"
-"    \n"
-"Tag the commit 'Adding feature 2' with the name 'v1'!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you work with remote repositories, tags are not pushed or pulled "
-"automatically.\n"
-"\n"
-"You can push a tag with\n"
-"    git push <remote> <tag-name>\n"
-"Or all tags with:\n"
-"    git push <remote> --tags\n"
-"    \n"
-"Deleting tags on your remote works with: \n"
-"    git push <remote> --delete <tag-name>\n"
-"    \n"
-"You can also sync \n"
-"    git fetch <remote> --prune --prune-tags\n"
-"\n"
-"\n"
-"Add a tag named 'v2' to the last commit and push it to the remote. Also pull "
-"the v1 tag to your local repository."
-msgstr ""
-
-msgid "This is an empty sandbox you can play around in."
-msgstr ""
-
-msgid ""
-"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n"
-"\n"
-"How can you push tags and branches on a remote? How can you delete them "
-"again?"
-msgstr ""
-
-msgid ""
-"Here's a sandbox you can play around in.\n"
-"\n"
-"You can use both the playing cards, as well as the terminal. This is a real "
-"Git terminal! Fun things to try:\n"
-"\n"
-"- Make a commit that merges three timelines together at once!\n"
-"- Create and delete some tags!\n"
-"- Make a timeline that's completely independent of the rest!"
-msgstr ""
-
-#: HITS
-msgid ""
-"But there's another way to interact with Git:\n"
-"\n"
-"Try typing `git init` into the black terminal below, and pressing the enter "
-"key!"
-msgstr ""
-"Ma c'e' un'altro modo per interagire con Git:\n"
-"\n"
-"Prova a scrivere `git init` nel terminale sotto, per poi premere il tasto "
-"invio!"
-
-msgid ""
-"Again, instead of using the card, you can also type the commands which are "
-"printed on it into the black terminal below!\n"
-"\n"
-"This is totally optional! But this will be a super useful skill in the real "
-"world - and it will give you a sparkling golden badge! :)"
-msgstr ""
-"Nuovamente, al posto di usare la carta, puoi anche digitare, nel terminale "
-"sotto, i comandi che trovi stampato sulla carta!\n"
-"\n"
-"Questo e' completamente opzionale! Ma questa sara' una skill veramente utile "
-"nel mondo reale - e ti dara' un distintivo scintillante! :)"
-
-msgid ""
-"To go back to old commands, you can press arrow up and down. That way, you "
-"don't have to type in long commands twice."
-msgstr ""
-"Per scorrere i vecchi comandi, puoi premere la freccia su e giu. In questo "
-"modo, non dovrai digitare nuovamente i comandi."
-
-msgid ""
-"On the command line, you can easily delete all files ending in -web using "
-"this command:\n"
-"\n"
-"    rm *web"
-msgstr ""
-"Nella riga di comando, puoi facilmente cancellare tutti i file -web usando "
-"questo comando:\n"
-"\n"
-"   rm *web"
-
-msgid ""
-"To checkout a specific commit, type `git checkout`, then a space, and then "
-"right click on the commit you want!\n"
-"\n"
-"This will insert the commit's unique identifier!"
-msgstr ""
-"Guarda uno specifico commit, digita `git checkout` uno spazio e premi il "
-"tasto destro sopra il commit che vuoi!\n"
-"\n"
-"Questo inserirà l'identificatore unico del commit!"
-
-msgid ""
-"The blue animal represents a concept known as the 'HEAD pointer' in Git: It "
-"shows you which commit is the current one.\n"
-"\n"
-"Here's a cool trick to go to the previous commit: \n"
-"\n"
-"    git checkout HEAD^\n"
-"\n"
-"You can also go back two commits by typing, for example: \n"
-"\n"
-"    git checkout HEAD~2"
-msgstr ""
-"L'animale blue rappresenta un concetto conosciuto come \"HEAD pointer\" in "
-"Git: Ti mostra qual'è il commit attuale.\n"
-"\n"
-"Ecco un simpatico trucchetto andare al commit precedente:\n"
-"\n"
-"    git checkout HEAD^\n"
-"\n"
-"Puoi anche andare indietro di 2 commit digitando, pre esempio:\n"
-"\n"
-"    git checkout HEAD~2"
-
-msgid ""
-"Branches also make it really easy to travel between different places using "
-"the command line! As soon as you have a branch called 'birthday', you can "
-"type `git checkout birthday` to travel to it!"
-msgstr ""
-"Le branch rendono molto facile viaggiare tra luoghi diversi anche usando la "
-"linea di comando! Quando hai una branch chiamata 'birthday', puoi digitare "
-"`git checkout bithday` per raggiungerlo!"
-
-msgid ""
-"To travel to a branch, type `git checkout name_of_the_branch`.\n"
-"\n"
-"And to travel to the last commit, type `git checkout --detach "
-"name_of_the_branch`."
-msgstr ""
-"Per viaggiare in una branch, digita `git checkout nome_della_branch`.\n"
-"\n"
-"Per andare all'ultimo commit, digita `git checkout --detach "
-"nome_della_branch`."
-
-msgid ""
-"You can use tab completion in the terminal! Start typing a filename, then "
-"press the tab key to complete its name. This will often save you some time!"
-msgstr ""
-"Puoi usare la tab completition nel terminale! Inizia a digitare il nome del "
-"file, quindi permi il tasto tab per completare il suo nome. Questo ti "
-"permettera' di risparmiare tempo!"
-
-#: CONGRAT
-msgid ""
-"Good job, you solved the level!\n"
-"\n"
-"Feel free to try a few more things or click 'Next level'."
-msgstr ""
-"Ottimo lavoro, hai risolto il livello!\n"
-" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'."
-
-msgid ""
-"Suddenly, your cat jumps on the table, snatches away the form, and runs "
-"away! Oh no. All your hard work, gone!\n"
-"\n"
-"You clearly need a better solution.\n"
-"\n"
-"(Click 'Next Level' as soon as you're ready!)"
-msgstr ""
-"All'improvviso il tuo gatto salta sul tavolo, strappa via il modulo e scappa "
-"via!Oh no. Tutto il tuo duro lavoro, andato!\n"
-"\n"
-"Devi trovare una buona soluzione\n"
-"\n"
-"(Clicca 'Prossimo livello' appena sei pronto!)"
-
-msgid ""
-"Okay, this kind of works.\n"
-"\n"
-"But you're a bit worried that you'll end up with hundreds of copies of this "
-"form, and it will be hard to keep track of all of them.\n"
-"\n"
-"And especially when working with other people, sending copies back and forth "
-"doesn't seem ideal.\n"
-"\n"
-"You can't wait to try these time machines!"
-msgstr ""
-"Ok, questo cosa può funzionare.\n"
-"\n"
-"Ma sei un pochino preoccupato che alla fine ti troverai con un centinaio di "
-"copie di questo form, ed e' difficile tenerne traccia di tutto loro.\n"
-"\n"
-"Specialmente quando lavorerai con altre persone, inviare copie avanti ed "
-"indietro non sembra l'ideale.\n"
-"\n"
-"Non vedi l'ora di provare questa macchina del tempo!"
-
-msgid ""
-"Nice! See that little owl squirrel that appeared? It will be your companion, "
-"and always show you where you are in time!"
-msgstr ""
-"Bene! Vedi quel piccolo animale che e' apparso? Sara' il tuo compagno e ti "
-"mostrera' dove ti trovi nel tempo!"
-
-msgid ""
-"Cool! Instead of using the playing cards, you can also do everything via the "
-"command line!\n"
-"\n"
-"The command line is pretty powerful! Often, you can use it to solve tasks "
-"faster compared to using a graphical interface."
-msgstr ""
-"Bello! Al posto di usare le carte, puoi anche fare tutto tramite la linea di "
-"comando!\n"
-"\n"
-"La linea di comando e' molto potente! A volte, puoi usarla per svolgere "
-"alcuni compiti piu' velocemente in confronto all'uso dell'interfaccia "
-"grafica."
-
-msgid ""
-"Nice! You can try making some additional commits. When you feel comfortable, "
-"click on 'Next Level'."
-msgstr ""
-"Bene! Puoi provare a creare altri commit aggiuntivi. Quando ti senti a tuo "
-"agio, clicca su 'Prossimo livello'."
-
-msgid ""
-"Welcome to time travel school! :) I'll see you for your first class tomorrow!"
-msgstr ""
-"Benvenuto nella scuola del viaggio nel tempo! :) Ci vediamo domani per la "
-"tua prima lezione!"
-
-msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
-msgstr ""
-"Adesso la tua camera è ordinata ed accogliente! E' ora di disfare le valige!"
-
-msgid "Don't you immediately feel more at home?"
-msgstr "Non ti senti subito a casa?"
-
-msgid ""
-"Wonderful! Now that you're getting familiar with the time machine, let's "
-"look at some more complicated situations..."
-msgstr ""
-"Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo "
-"situazioni più complicate..."
-
-msgid ""
-"Whew, good job! This seems like a *much* better outcome.\n"
-"\n"
-"Feel free to add more parallel timelines, or make them longer.\n"
-"\n"
-"If you're ready, our next mission is already waiting..."
-msgstr ""
-"Whew, ottimo lavoro! Questo sembra un risultato molto migliore.\n"
-"\n"
-"Sentiti libero di aggiungere altre line temporali parallele o allungarle.\n"
-"\n"
-"Se sei pronto, la prossima missione ci sta aspettando..."
-
-msgid ""
-"Now you can travel between those branches easily (using `git checkout`) - "
-"try it!\n"
-"\n"
-"Your friend is happy that you made it to the birthday party and you also got "
-"your concert ticket signed. Yay!"
-msgstr ""
-
-msgid ""
-"On second thought, maybe you even prefer the ice cream timeline to the main "
-"one? :)"
-msgstr ""
-
-msgid ""
-"I wonder if you're more relaxed when you *sleep* in parallel timelines..."
-msgstr ""
-
-msgid "Yum, that sounds like a good breakfast!"
-msgstr ""
-
-msgid ""
-"Notice how the other timelines and commits are still there - if anything "
-"goes wrong, you can also travel back to them.\n"
-"\n"
-"It's really hard to actually *destroy* stuff with your time machine."
-msgstr ""
-
-msgid ""
-"Feel free to reset the level and try the other strategy! Which one do you "
-"like better?"
-msgstr ""
-
-msgid ""
-"Well done! :) The only problem is that you now have to walk all the way back "
-"home, again..."
-msgstr ""
-
-msgid "Nice stash you got there! :)"
-msgstr ""
-
-msgid "Yay, you got your changes back! :)"
-msgstr ""
-
-msgid "All clear! :)"
-msgstr "Tutto chiaro! :)"
-
-msgid "Stashed changes are in a new branch! :)"
-msgstr ""
-
-msgid "Nice! You tagged your first commit :)"
-msgstr "Bello! Hai taggato il tuo primo commit :)"
-
-msgid "Well done :)"
-msgstr "Ben fatto :)"
diff --git a/locale/levels.pot b/locale/levels.pot
deleted file mode 100644
index eeced88..0000000
--- a/locale/levels.pot
+++ /dev/null
@@ -1,1037 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2022 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# Automatically generated, 2022.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2022-08-18 10:39+0200\n"
-"PO-Revision-Date: 2022-08-19 16:53+0200\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"Generated-By: Babel 2.10.3\n"
-"X-Generator: Poedit 3.1\n"
-
-#: TITLE
-msgid "Living dangerously"
-msgstr ""
-
-#: Command
-msgid "Add another line to form.txt!"
-msgstr ""
-
-msgid "Making backups"
-msgstr ""
-
-msgid "Add another line to form2_really_final.txt!"
-msgstr ""
-
-msgid "Enter the time machine"
-msgstr ""
-
-msgid "Initialize the time machine!"
-msgstr ""
-
-msgid "The command line"
-msgstr ""
-
-msgid "Your first commit"
-msgstr ""
-
-msgid "Make a snapshot of the glass (a 'commit')"
-msgstr ""
-
-msgid "Change the contents of the glass!"
-msgstr ""
-
-msgid "And make a second commit!"
-msgstr ""
-
-msgid "Working together"
-msgstr ""
-
-msgid "Get the second commit from your teacher using `git pull`."
-msgstr ""
-
-msgid "Add your name to the list of students"
-msgstr ""
-
-msgid "Commit your result."
-msgstr ""
-
-msgid "And use `git push` to send it to your teacher!"
-msgstr ""
-
-msgid "Unexpected Roommates"
-msgstr ""
-
-msgid "Remove all spider webs."
-msgstr ""
-
-msgid "But make sure you keep your bed!"
-msgstr ""
-
-msgid "Interior design"
-msgstr ""
-
-msgid "Add two more pieces of furniture"
-msgstr ""
-
-msgid "Make sure the colors match your bed's color."
-msgstr ""
-
-msgid "Moving through time"
-msgstr ""
-
-msgid "Restore sisterly peace."
-msgstr ""
-
-msgid "Make parallel commits"
-msgstr ""
-
-msgid "Make sure that the child is happy."
-msgstr ""
-
-msgid "Make sure that the lion gets something to eat."
-msgstr ""
-
-msgid "Creating branches"
-msgstr ""
-
-msgid "Create a branch called 'birthday' that points to the birthday timeline."
-msgstr ""
-
-msgid "Create a branch called 'concert' that points to the concert timeline."
-msgstr ""
-
-msgid "Branches grow with you!"
-msgstr ""
-
-msgid ""
-"Travel directly to the last yellow commit of the birthday timeline, make a "
-"change to 'you', and make a commit"
-msgstr ""
-
-msgid ""
-"Travel to the blue 'concert' branch, make a change to 'you', and a commit."
-msgstr ""
-
-msgid "Deleting branches"
-msgstr ""
-
-msgid "Find the bad branches and delete them. Keep only the best one."
-msgstr ""
-
-msgid "Moving branches around"
-msgstr ""
-
-msgid "Did you eat a baguette on the baguette branch?"
-msgstr ""
-
-msgid "Did you drink a coffee on the coffee branch?"
-msgstr ""
-
-msgid "Did you eat a donut on the donut branch?"
-msgstr ""
-
-msgid "Merging timelines"
-msgstr ""
-
-msgid ""
-"Build a situation where you consumed a baguette, a coffee, *and* a donut."
-msgstr ""
-
-msgid "Be on a merge commit."
-msgstr ""
-
-msgid "Contradictions"
-msgstr ""
-
-msgid "Make a breakfast compromise in the 'main' branch."
-msgstr ""
-
-msgid "Step by step"
-msgstr ""
-
-msgid "Pick the timeline that's clearer, and make the alarm go off!"
-msgstr ""
-
-msgid "Add new files to the index"
-msgstr ""
-
-msgid "Add the candle."
-msgstr ""
-
-msgid "Make a commit."
-msgstr ""
-
-msgid "Update files in the index"
-msgstr ""
-
-msgid "Make a change to the candle."
-msgstr ""
-
-msgid "Resetting files in the index"
-msgstr ""
-
-msgid "Reset the changes in the green and blue candles!"
-msgstr ""
-
-msgid "And make a commit!"
-msgstr ""
-
-msgid "Adding changes step by step"
-msgstr ""
-
-msgid ""
-"Make changes to all three objects, to form a logical sequence of events!"
-msgstr ""
-
-msgid "Only add one of these changes!"
-msgstr ""
-
-msgid "And make a commit."
-msgstr ""
-
-msgid "Make a second commit that only records a single change."
-msgstr ""
-
-msgid "And a third one."
-msgstr ""
-
-msgid "Friend"
-msgstr ""
-
-msgid "Got the second line from your friend"
-msgstr ""
-
-msgid "Got the fourth line from your friend."
-msgstr ""
-
-msgid "The friend got a third line from you"
-msgstr ""
-
-msgid "The friend got a fifth line from you"
-msgstr ""
-
-msgid "Problems"
-msgstr ""
-
-msgid "Commit your local changes."
-msgstr ""
-
-msgid "Look at your friend's suggestion, make a compromise, and push it back."
-msgstr ""
-
-msgid "Rebasing"
-msgstr ""
-
-msgid "Order all tree branches into one and move the main branch ref"
-msgstr ""
-
-msgid "Reordering events"
-msgstr ""
-
-msgid "Reorder the commits to dress yourself in the correct way"
-msgstr ""
-
-msgid "Restore a deleted file"
-msgstr ""
-
-msgid "Restore the essay to contain 'important content'"
-msgstr ""
-
-msgid "Restore a file from the past"
-msgstr ""
-
-msgid "Get the first version of your essay, and make a new commit with it."
-msgstr ""
-
-msgid "Undo a bad commit"
-msgstr ""
-
-msgid ""
-"In the last main commit, the numbers file contains the numbers from 1 to 10."
-msgstr ""
-
-msgid "The commit message of that commit is 'More numbers'."
-msgstr ""
-
-msgid "The commit with the typo is not part of the main branch anymore."
-msgstr ""
-
-msgid "I pushed something broken"
-msgstr ""
-
-msgid "The team's main branch no longer contains the bad thing."
-msgstr ""
-
-msgid "And the history has not been modified."
-msgstr ""
-
-msgid "Go back to where you were before"
-msgstr ""
-
-msgid "Find out where you've been before, and go back there!"
-msgstr ""
-
-msgid "Cloning a repo"
-msgstr ""
-
-msgid "Yellow brick road"
-msgstr ""
-
-msgid "Find the last good commit"
-msgstr ""
-
-msgid "Stashing"
-msgstr ""
-
-msgid "Did you stash the current changes?"
-msgstr ""
-
-msgid "Pop from Stash"
-msgstr ""
-
-msgid "Did you pop the changes from the stash stack?"
-msgstr ""
-
-msgid "Clear the Stash"
-msgstr ""
-
-msgid "Did you clear your stash stack?"
-msgstr ""
-
-msgid "Branch from stash"
-msgstr ""
-
-msgid "Did you create a new branch from the stashed changes?"
-msgstr ""
-
-msgid "Merging popped stash"
-msgstr ""
-
-msgid "Did you resolve the confict and commit?"
-msgstr ""
-
-msgid "Did you clear stash stack?"
-msgstr ""
-
-msgid "Creating tags"
-msgstr ""
-
-msgid "Did you create a new tag?"
-msgstr ""
-
-msgid "Removing tags"
-msgstr ""
-
-msgid "Did you remove all tags?"
-msgstr ""
-
-msgid "Tagging later"
-msgstr ""
-
-msgid "Remote Tags"
-msgstr ""
-
-msgid "v1 tag in your repo"
-msgstr ""
-
-msgid "v2 tag in your repo"
-msgstr ""
-
-msgid "v2 tag in the remote"
-msgstr ""
-
-msgid "Empty sandbox"
-msgstr ""
-
-msgid "Sandbox with a remote"
-msgstr ""
-
-msgid "Sandbox with three commits"
-msgstr ""
-
-#: DESCRIPTION
-msgid ""
-"So you have decided to apply for time travel school, to learn how to use "
-"this time machine called 'Git'!\n"
-"\n"
-"How exciting!\n"
-"\n"
-"You're almost done with the paperwork! You just need to fill in one more "
-"reason why you want to learn Git."
-msgstr ""
-
-msgid ""
-"This time, you're making a lot of backup copies - you can look at them by "
-"clicking on them!"
-msgstr ""
-
-msgid ""
-"You've been accepted to time travel school! Yay! It's your first day! Your "
-"teacher explains:\n"
-"\n"
-"'To do anything with a time machine, you first need to initialize it!'\n"
-"\n"
-"Drag that blue card up to play it!"
-msgstr ""
-
-msgid ""
-"These playing cards are designed to be easy to use and to remember! We'd "
-"suggest sticking to them if you don't have a lot of experience with Git!"
-msgstr ""
-
-msgid ""
-"You can use your time machine to make snapshots of objects around you! Here, "
-"let's practice this!\n"
-"\n"
-"(Your teacher pours some water into a glass.)"
-msgstr ""
-
-msgid ""
-"Let's add your name to our list of students!\n"
-"\n"
-"I already have a second commit of it in my time machine - let's work "
-"together!"
-msgstr ""
-
-msgid ""
-"The first day at Time Travel School comes to an end and you receive the key "
-"to your room.\n"
-"Full of excitement you open the door just to find... spider webs! Spider "
-"webs everywhere!\n"
-"\n"
-"Remove all the spider webs you can find with the remove card!"
-msgstr ""
-
-msgid ""
-"Now that your room looks tidy, you can start to unpack your stuff. You "
-"brought two new pieces of furniture with you and with a bright smile,\n"
-"you see that their colors match the color of your bed!\n"
-"\n"
-"Build up your two pieces of furniture by playing the touch card.\n"
-"Then name your furniture - you can choose whatever you like.\n"
-"\n"
-"Make sure the colors match! You can find the bed's color in its "
-"description.\n"
-"Don't forget to add a color and description to your new furnitures, too!"
-msgstr ""
-
-msgid ""
-"The yellow boxes are frozen points in time, we call them 'commits'! You can "
-"travel between them using the 'checkout' card! (Try it!)\n"
-"\n"
-"Can you find out what happened here? Then, while on the last commit, edit "
-"the files to fix the problem, and make a new commit!"
-msgstr ""
-
-msgid ""
-"Did you know that creating parallel timelines is perfectly legal and safe? "
-"It's true!\n"
-"\n"
-"Can you find out when things went wrong in this zoo? Then, go back to the "
-"last good commit and create a parallel universe where everyone is happy!"
-msgstr ""
-
-msgid ""
-"You were invited to two parties! At one of them, your favorite band is "
-"playing - and the other one is your best friend's birthday party. Where "
-"should you go? No worries - as a time travel agent in training, you can go "
-"to both parties!\n"
-"\n"
-"To make it easier to tell which timeline is which, you can create time "
-"portals! (We call these 'branches'.)"
-msgstr ""
-
-msgid ""
-"Note that there are two options to 'travel to the end of a timeline':\n"
-"\n"
-"First, you can directly travel to the commit, like we've done it before.\n"
-"\n"
-"And second, you can travel to the branch label. In this case, when you make "
-"a new commit, the branch will grow with you, and still point at the end of "
-"the timeline!"
-msgstr ""
-
-msgid ""
-"Life is full of dangers, right? Even when walking to school, it seems like "
-"there's a lot of risks!\n"
-"\n"
-"This Monday is especially bad. You made it to school, but there's some "
-"timelines you definitely don't want to keep around."
-msgstr ""
-
-msgid ""
-"One of your colleagues messed up here, and put the branches in the wrong "
-"timelines!\n"
-"\n"
-"You could delete and re-create these branches - but you can also directly "
-"move them to different commits, by using\n"
-"\n"
-"    git checkout\n"
-"\n"
-"on the branch names, and then using\n"
-"\n"
-"    git reset --hard\n"
-"\n"
-"on the commit where you want the branch to be.\n"
-"\n"
-"The donut branch is in the right place, but the timeline is still incomplete "
-"- make you actually *eat* the donut in that branch!"
-msgstr ""
-
-msgid ""
-"Here's a trick so that you can sleep a bit longer: just do all your morning "
-"activities in parallel universes, and then at the end, merge them together!"
-msgstr ""
-
-msgid ""
-"Sometimes, timelines will contradict each other.\n"
-"\n"
-"For example, in this case, one of our clients wants these timelines merged, "
-"but they ate different things for breakfast in both timelines.\n"
-"\n"
-"Try to merge them together! You'll notice that there will be a conflict! The "
-"time machine will leave it up to you how to proceed: you can edit the "
-"problematic item, it will show you the conflicting sections. You can keep "
-"either of the two versions - or create a combination of them! Remove the "
-">>>, <<<, and === markers, and make a new commit to finalize the merge!\n"
-"\n"
-"Let your finalized timeline be the 'main' one."
-msgstr ""
-
-msgid ""
-"Welcome to today's lesson! We're going to learn how to make commits with "
-"more precision!\n"
-"\n"
-"Have a look at these two timelines. They have exactly the same outcome. But "
-"one of them makes it much easier to figure out what happened."
-msgstr ""
-
-msgid ""
-"So far, when we made a commit, we've always recorded the current status of "
-"all objects, right?\n"
-"\n"
-"But Git allows you to pick which changes you want to put in a commit!\n"
-"\n"
-"To learn how that works, we need to learn about the 'index'! In the index, "
-"we can prepare what will be in the next commit. In this game, the index is "
-"represented by a blue aura around icons in the file browser!\n"
-"\n"
-"Initially, the index is empty. To make a commit that contains a new file, we "
-"need to add it!"
-msgstr ""
-
-msgid ""
-"When we change files, the index won't change on its own. We have to use `git "
-"add` to update the index to the changed version of the file.\n"
-"\n"
-"Let's try that!\n"
-"\n"
-"The icons in the file browser show you when the actual file (white) and the "
-"version in the index (blue) are different, and when they are the same!"
-msgstr ""
-
-msgid ""
-"See the dark shadow behind the icons? That's the version of the file in the "
-"last commit!\n"
-"\n"
-"For example, these candles have been blown out, and that change has been "
-"added.\n"
-"\n"
-"But you decide that this was a mistake! You only want to blow out the red "
-"candle in the next commit!\n"
-"\n"
-"If you already have updated the index to a changed file, but want to reset "
-"it, you can use `git reset`!"
-msgstr ""
-
-msgid ""
-"The index is really useful, because it allows us to be precise about which "
-"changes we want to include in each commit!"
-msgstr ""
-
-msgid ""
-"Your friend added another line to your essay! Get it, add a third one and "
-"send it to them!\n"
-"\n"
-"Take turns until you have five lines!"
-msgstr ""
-
-msgid ""
-"Both you and your friend have been working on the file, and want to sync up!"
-msgstr ""
-
-msgid ""
-"Okay - turns out that saving time in the morning by utilizing parallel "
-"universes is against the regulations of the International Time Travel "
-"Association. You'll have to do your tasks in sequence after all.\n"
-"\n"
-"See the 'rebase' card? When you drag it to a commit, it will copy the events "
-"in your current timeline after the specified one! This way, make a clean, "
-"linear timeline where you visit all three shops.\n"
-"\n"
-"Again, we want to make that our base reality - the 'main' branch should "
-"point to that timeline!"
-msgstr ""
-
-msgid ""
-"Oops, looks like there's something messed up here. Can you put the events "
-"back into their correct order?\n"
-"\n"
-"There are two ways to do this: You can drag the 'interactive rebase' card to "
-"the commit before the one you want to change, then reorder the lines in the "
-"file that opens, and save it.\n"
-"\n"
-"Or you can reset the main tag to the very first commit, and then cherry-pick "
-"single commits in the order you want. You have cards for both approaches!"
-msgstr ""
-
-msgid ""
-"Oops - you deleted the 'essay' file, which you worked on all night!\n"
-"\n"
-"Luckily, Git is here to help! You can use `git checkout` to restore the file!"
-msgstr ""
-
-msgid ""
-"Here's a similar problem: you really liked the essay from the very first "
-"commit, and want to have it back! Well, checkout can also restore things "
-"from older commits, Here's how:\n"
-"\n"
-"    git checkout [commit] [file]"
-msgstr ""
-
-msgid ""
-"Oh no, we made a bad commit! How can we undo making the commit, and go back "
-"to a point where we can try again?\n"
-"\n"
-"The answer is using `git reset [commit]`, which does two things:\n"
-"\n"
-"- It resets the current branch ref to the commit you specify.\n"
-"- And it resets the index to that commit.\n"
-"\n"
-"It does not change your working directory in any way, which means that after "
-"that, you can try making the commit you want again."
-msgstr ""
-
-msgid ""
-"We were talking about how to undo a commit, and fix it. This only helps when "
-"you haven't already pushed it to a remote. When that has happened, and you "
-"want to undo the effects of the commit completely, your best option is `git "
-"revert`"
-msgstr ""
-
-msgid ""
-"Say you were looking at something in the past, and then switched back to the "
-"main branch.\n"
-"\n"
-"But then, you got reaaally distracted, and after your lunch break, you can't "
-"remember on which commit in the past you were before. How can you find out?\n"
-"\n"
-"There's a convenient command that shows you all the places your HEAD did "
-"point to in the past:\n"
-"\n"
-"    git reflog"
-msgstr ""
-
-msgid ""
-"Your friend has a problem! Clone the repo, create a branch called "
-"'solution', and fix the problem in this branch. When you're ready, make a "
-"'Pull Request' by using `git tag pr`."
-msgstr ""
-
-msgid ""
-"(Please zoom out a bit using your mouse wheel! :D)\n"
-"\n"
-"Oh no! You have lost your key at some point during the day!\n"
-"\n"
-"Sure, you could look at every single commit in an attempt to find it - but "
-"there's a better way: your time machine has a built-in way to find the point "
-"in time where things went wrong quickly!\n"
-"\n"
-"First, play the 'bisect start' card. Then, go to a commit where you don't "
-"have the key, and play the 'bisect bad' card. Likewise, go to a commit early "
-"on where you have the key *in your pocket*, and play the 'bisect good "
-"card'.\n"
-"\n"
-"After you've found the last good commit, reset the main branch to it. What "
-"happened to the key after you lost it?"
-msgstr ""
-
-msgid ""
-"You will encounter situations in which you are working on your project but "
-"you need to\n"
-"put your current changes aside temporarily. To do so, you can use the stash "
-"function. Use\n"
-"    git stash push \n"
-"to add your current changes to the stash stack.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you stashed your changes and you want to apply them back to your "
-"current working directory, you can use\n"
-"    git stash pop\n"
-"This will remove the changes from the stash stack. If you also want to keep "
-"the changes on the stash stack, use\n"
-"    git stash apply\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"If you want to inspect your stash stack, use the command\n"
-"    git stash list\n"
-"    \n"
-"Oh, you don't want to keep your stashed changes? There are way too many? "
-"Then go ahead and clear the stack with\n"
-"    git stash clear\n"
-"If you only want to discard a certain stash entry, you can use\n"
-"    git stash drop <stash>\n"
-"    \n"
-"Clear your stash stack!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"If you want to keep your changes but they don't belong to the main branch, "
-"you can easily\n"
-"create a new branch from your stashed changes. Just use\n"
-"    git stash branch <branchname> <stash>\n"
-"If you just want to use the latest stash entry, you can leave the <stash> "
-"option empty.\n"
-"\n"
-"Create a new branch from the stashed changes!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you want to reapply your changes but you already continued working on "
-"your file, you might get\n"
-"a merge conflict! Let's practise this situation.\n"
-"Pop the changes from the stash with\n"
-"    git stash pop\n"
-"and resolve the merge conflict. Commit the resolved changes and clear the "
-"stash stack afterwards.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"Some of your commits may be special commits. Maybe you reached a milestone "
-"or a new version number.\n"
-"\n"
-"You can mark these commits with a special flag called 'tag'.\n"
-"\n"
-"Write \n"
-"\n"
-"    git tag <tag-name> \n"
-"    \n"
-"to tag your commit.\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"You added way too many tags? No prob! Delete them with\n"
-"\n"
-"    git tag -d <tag-name>\n"
-"    \n"
-"Remove all tags in this repo!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"But what happens if you forgot to tag your current commit?\n"
-"No Prob! You can also tag older commits via\n"
-"\n"
-"    git tag <tag-name> <commit-hash>\n"
-"    \n"
-"Tag the commit 'Adding feature 2' with the name 'v1'!\n"
-"\n"
-"---\n"
-"tipp1\n"
-"---\n"
-"tipp2\n"
-"---\n"
-"tipp3"
-msgstr ""
-
-msgid ""
-"When you work with remote repositories, tags are not pushed or pulled "
-"automatically.\n"
-"\n"
-"You can push a tag with\n"
-"    git push <remote> <tag-name>\n"
-"Or all tags with:\n"
-"    git push <remote> --tags\n"
-"    \n"
-"Deleting tags on your remote works with: \n"
-"    git push <remote> --delete <tag-name>\n"
-"    \n"
-"You can also sync \n"
-"    git fetch <remote> --prune --prune-tags\n"
-"\n"
-"\n"
-"Add a tag named 'v2' to the last commit and push it to the remote. Also pull "
-"the v1 tag to your local repository."
-msgstr ""
-
-msgid "This is an empty sandbox you can play around in."
-msgstr ""
-
-msgid ""
-"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n"
-"\n"
-"How can you push tags and branches on a remote? How can you delete them "
-"again?"
-msgstr ""
-
-msgid ""
-"Here's a sandbox you can play around in.\n"
-"\n"
-"You can use both the playing cards, as well as the terminal. This is a real "
-"Git terminal! Fun things to try:\n"
-"\n"
-"- Make a commit that merges three timelines together at once!\n"
-"- Create and delete some tags!\n"
-"- Make a timeline that's completely independent of the rest!"
-msgstr ""
-
-#: HITS
-msgid ""
-"But there's another way to interact with Git:\n"
-"\n"
-"Try typing `git init` into the black terminal below, and pressing the enter "
-"key!"
-msgstr ""
-
-msgid ""
-"Again, instead of using the card, you can also type the commands which are "
-"printed on it into the black terminal below!\n"
-"\n"
-"This is totally optional! But this will be a super useful skill in the real "
-"world - and it will give you a sparkling golden badge! :)"
-msgstr ""
-
-msgid ""
-"To go back to old commands, you can press arrow up and down. That way, you "
-"don't have to type in long commands twice."
-msgstr ""
-
-msgid ""
-"On the command line, you can easily delete all files ending in -web using "
-"this command:\n"
-"\n"
-"    rm *web"
-msgstr ""
-
-msgid ""
-"To checkout a specific commit, type `git checkout`, then a space, and then "
-"right click on the commit you want!\n"
-"\n"
-"This will insert the commit's unique identifier!"
-msgstr ""
-
-msgid ""
-"The blue animal represents a concept known as the 'HEAD pointer' in Git: It "
-"shows you which commit is the current one.\n"
-"\n"
-"Here's a cool trick to go to the previous commit: \n"
-"\n"
-"    git checkout HEAD^\n"
-"\n"
-"You can also go back two commits by typing, for example: \n"
-"\n"
-"    git checkout HEAD~2"
-msgstr ""
-
-msgid ""
-"Branches also make it really easy to travel between different places using "
-"the command line! As soon as you have a branch called 'birthday', you can "
-"type `git checkout birthday` to travel to it!"
-msgstr ""
-
-msgid ""
-"To travel to a branch, type `git checkout name_of_the_branch`.\n"
-"\n"
-"And to travel to the last commit, type `git checkout --detach "
-"name_of_the_branch`."
-msgstr ""
-
-msgid ""
-"You can use tab completion in the terminal! Start typing a filename, then "
-"press the tab key to complete its name. This will often save you some time!"
-msgstr ""
-
-#: CONGRAT
-msgid ""
-"Good job, you solved the level!\n"
-"\n"
-"Feel free to try a few more things or click 'Next level'."
-msgstr ""
-
-msgid ""
-"Suddenly, your cat jumps on the table, snatches away the form, and runs "
-"away! Oh no. All your hard work, gone!\n"
-"\n"
-"You clearly need a better solution.\n"
-"\n"
-"(Click 'Next Level' as soon as you're ready!)"
-msgstr ""
-
-msgid ""
-"Okay, this kind of works.\n"
-"\n"
-"But you're a bit worried that you'll end up with hundreds of copies of this "
-"form, and it will be hard to keep track of all of them.\n"
-"\n"
-"And especially when working with other people, sending copies back and forth "
-"doesn't seem ideal.\n"
-"\n"
-"You can't wait to try these time machines!"
-msgstr ""
-
-msgid ""
-"Nice! See that little owl squirrel that appeared? It will be your companion, "
-"and always show you where you are in time!"
-msgstr ""
-
-msgid ""
-"Cool! Instead of using the playing cards, you can also do everything via the "
-"command line!\n"
-"\n"
-"The command line is pretty powerful! Often, you can use it to solve tasks "
-"faster compared to using a graphical interface."
-msgstr ""
-
-msgid ""
-"Nice! You can try making some additional commits. When you feel comfortable, "
-"click on 'Next Level'."
-msgstr ""
-
-msgid ""
-"Welcome to time travel school! :) I'll see you for your first class tomorrow!"
-msgstr ""
-
-msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!"
-msgstr ""
-
-msgid "Don't you immediately feel more at home?"
-msgstr ""
-
-msgid ""
-"Wonderful! Now that you're getting familiar with the time machine, let's "
-"look at some more complicated situations..."
-msgstr ""
-
-msgid ""
-"Whew, good job! This seems like a *much* better outcome.\n"
-"\n"
-"Feel free to add more parallel timelines, or make them longer.\n"
-"\n"
-"If you're ready, our next mission is already waiting..."
-msgstr ""
-
-msgid ""
-"Now you can travel between those branches easily (using `git checkout`) - "
-"try it!\n"
-"\n"
-"Your friend is happy that you made it to the birthday party and you also got "
-"your concert ticket signed. Yay!"
-msgstr ""
-
-msgid ""
-"On second thought, maybe you even prefer the ice cream timeline to the main "
-"one? :)"
-msgstr ""
-
-msgid ""
-"I wonder if you're more relaxed when you *sleep* in parallel timelines..."
-msgstr ""
-
-msgid "Yum, that sounds like a good breakfast!"
-msgstr ""
-
-msgid ""
-"Notice how the other timelines and commits are still there - if anything "
-"goes wrong, you can also travel back to them.\n"
-"\n"
-"It's really hard to actually *destroy* stuff with your time machine."
-msgstr ""
-
-msgid ""
-"Feel free to reset the level and try the other strategy! Which one do you "
-"like better?"
-msgstr ""
-
-msgid ""
-"Well done! :) The only problem is that you now have to walk all the way back "
-"home, again..."
-msgstr ""
-
-msgid "Nice stash you got there! :)"
-msgstr ""
-
-msgid "Yay, you got your changes back! :)"
-msgstr ""
-
-msgid "All clear! :)"
-msgstr ""
-
-msgid "Stashed changes are in a new branch! :)"
-msgstr ""
-
-msgid "Nice! You tagged your first commit :)"
-msgstr ""
-
-msgid "Well done :)"
-msgstr ""
diff --git a/scenes/Language.gd b/scenes/Language.gd
index 35d96b3..7c0ec82 100644
--- a/scenes/Language.gd
+++ b/scenes/Language.gd
@@ -29,6 +29,7 @@ func _on_item_pressed(id):
 		var value = tr(game.languages[key])
 		if value == lang:
 			game.os_lang = key
+			game.levels_dir = "res://levels/" + key
 	
 	check_current_items()
 	TranslationServer.set_locale(game.os_lang)
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index 9f2abc2..856f59b 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -13,7 +13,7 @@ func load(path):
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open("res://levels/%s" % slug)
+	dir.open(game.levels_dir + "/%s" % slug)
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +28,7 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +42,7 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load("res://levels/%s/%s" % [slug, l])
+		level.load(game.levels_dir + "/%s/%s" % [slug, l])
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/game.gd b/scenes/game.gd
index a336900..cf84db2 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -1,7 +1,8 @@
 extends Node
 
 var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed
-var os_lang = OS.get_locale_language() # Variable for game localization
+var os_lang = OS.get_locale_language() # Variable for game localization (it, en, ecc...)
+var levels_dir = "res://levels/" + os_lang
 
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
 var global_shell
diff --git a/scenes/level.gd b/scenes/level.gd
index 743430f..bb9ba30 100644
--- a/scenes/level.gd
+++ b/scenes/level.gd
@@ -20,9 +20,8 @@ func load(path):
 		# This is a new-style level.
 		var config = helpers.parse(path)
 		
-		title = tr(config.get("title", slug)) # Title of Levels
+		title = config.get("title", slug)
 		description = config.get("description", "(no description)")
-		description = tr(description.replace("\"", "\'")) # Descriptions how to make the level
 		
 		# Surround all lines indented with four spaces with [code] tags.
 		var monospace_regex = RegEx.new()
@@ -31,11 +30,9 @@ func load(path):
 		description = description.split("---")
 		
 		var cli_hints = config.get("cli", "")
-		cli_hints = tr(cli_hints.replace("\"", "\'")) # suggestions to work strong
 		# Also do this substitution in the CLI hints.
 		cli_hints = monospace_regex.sub(cli_hints, "\n      [code][color=#bbbb5d]$1[/color][/code]", true)
 		
-		
 		# Also replace `code` with [code] tags.
 		var monospace_inline_regex = RegEx.new()
 		monospace_inline_regex.compile("`([^`]+)`")
@@ -46,8 +43,6 @@ func load(path):
 			description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]"
 		
 		congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")
-		congrats = congrats.replace("\"", "\'")
-		congrats = tr(congrats) # Congratulations when the level is finish
 		cards = Array(config.get("cards", "").split(" "))
 		if cards == [""]:
 			cards = []
@@ -87,7 +82,6 @@ func load(path):
 			for line in Array(config[k].split("\n")):
 				if line.length() > 0 and line[0] == "#":
 					desc = line.substr(1).strip_edges(true, true)
-					desc = desc.replace("\"", "\'")
 				else:
 					if not repos[repo].win_conditions.has(desc):
 						repos[repo].win_conditions[desc] = ""
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 0efb4dd..518e9fd 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -3,13 +3,14 @@ extends Node
 var chapters
 
 func _ready():
+	print(game.os_lang)
 	reload()
 	
 func reload():
 	chapters = []
 	
 	var dir = Directory.new()
-	dir.open("res://levels/")
+	dir.open(game.levels_dir)
 	dir.list_dir_begin()
 
 	var chapter_names = []
@@ -26,7 +27,7 @@ func reload():
 	
 	var final_chapter_sequence = []
 	
-	var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n"))
+	var chapter_sequence = Array(helpers.read_file(game.levels_dir + "/sequence", "").split("\n"))
 	
 	for chapter in chapter_sequence:
 		if chapter == "":
@@ -40,5 +41,5 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load("res://levels/%s" % c)
+		chapter.load(game.levels_dir + "/%s" % c)
 		chapters.push_back(chapter)

From 9caaddc06efa54d3a9493a1589b272f681ffa4be Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Tue, 13 Sep 2022 17:44:51 +0200
Subject: [PATCH 48/49] Some adjustaments

---
 project.godot    | 2 +-
 scenes/levels.gd | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/project.godot b/project.godot
index f349d1d..fa90c90 100644
--- a/project.godot
+++ b/project.godot
@@ -151,7 +151,7 @@ mute={
 
 [locale]
 
-translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-levels.po", "res://locale/it_IT/it_IT-text.po" )
+translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-text.po" )
 locale_filter=[ 0, [  ] ]
 
 [network]
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 518e9fd..6fff54f 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -3,7 +3,6 @@ extends Node
 var chapters
 
 func _ready():
-	print(game.os_lang)
 	reload()
 	
 func reload():

From b12d0e778f50f30de58aab8a890f32de010f5d6e Mon Sep 17 00:00:00 2001
From: Luca Canali <info@canaliluca.com>
Date: Wed, 5 Oct 2022 11:33:21 +0200
Subject: [PATCH 49/49] first commit for the new structure of directories of
 levels like as @schokotets suggestion

---
 levels/{en/bisect => bisect/en}/bisect         |  0
 levels/{it/bisect => bisect/it}/bisect         |  0
 levels/{en => }/bisect/sequence                |  0
 .../{en/branches => branches/en}/branch-create |  0
 .../{en/branches => branches/en}/branch-remove |  0
 .../branches => branches/en}/checkout-commit   |  0
 levels/{en/branches => branches/en}/fork       |  0
 levels/{en/branches => branches/en}/grow       |  0
 levels/{en/branches => branches/en}/reorder    |  0
 .../{it/branches => branches/it}/branch-create |  0
 .../{it/branches => branches/it}/branch-remove |  0
 .../branches => branches/it}/checkout-commit   |  0
 levels/{it/branches => branches/it}/fork       |  0
 levels/{it/branches => branches/it}/grow       |  0
 levels/{it/branches => branches/it}/reorder    |  0
 levels/{en => }/branches/sequence              |  0
 .../en}/rebase                                 |  0
 .../en}/reorder                                |  0
 .../it}/rebase                                 |  0
 .../it}/reorder                                |  0
 levels/{en => }/changing-the-past/sequence     |  0
 levels/{en/files => files/en}/files-add        |  0
 levels/{en/files => files/en}/files-delete     |  0
 levels/{it/files => files/it}/files-add        |  0
 levels/{it/files => files/it}/files-delete     |  0
 levels/{en => }/files/sequence                 |  0
 levels/{en/index => index/en}/add              |  0
 levels/{en/index => index/en}/change           |  0
 levels/{en/index => index/en}/checkout         |  0
 levels/{en/index => index/en}/compare          |  0
 levels/{en/index => index/en}/new              |  0
 levels/{en/index => index/en}/reset            |  0
 levels/{en/index => index/en}/rm               |  0
 levels/{en/index => index/en}/steps            |  0
 levels/{it/index => index/it}/add              |  0
 levels/{it/index => index/it}/change           |  0
 levels/{it/index => index/it}/checkout         |  0
 levels/{it/index => index/it}/compare          |  0
 levels/{it/index => index/it}/new              |  0
 levels/{it/index => index/it}/reset            |  0
 levels/{it/index => index/it}/rm               |  0
 levels/{it/index => index/it}/steps            |  0
 levels/{en => }/index/sequence                 |  0
 levels/{en/intro => intro/en}/cli              |  0
 levels/{en/intro => intro/en}/commit           |  0
 levels/{en/intro => intro/en}/copies           |  0
 levels/{en/intro => intro/en}/init             |  0
 levels/{en/intro => intro/en}/remote           |  0
 levels/{en/intro => intro/en}/risky            |  0
 levels/{en/intro => intro/en}/who-are-you      |  0
 levels/{it/intro => intro/it}/cli              |  0
 levels/{it/intro => intro/it}/commit           |  0
 levels/{it/intro => intro/it}/copies           |  0
 levels/{it/intro => intro/it}/init             |  0
 levels/{it/intro => intro/it}/remote           |  0
 levels/{it/intro => intro/it}/risky            |  0
 levels/{it/intro => intro/it}/who-are-you      |  0
 levels/{en => }/intro/sequence                 |  0
 levels/it/bisect/sequence                      |  1 -
 levels/it/branches/sequence                    |  6 ------
 levels/it/changing-the-past/sequence           |  2 --
 levels/it/files/sequence                       |  3 ---
 levels/it/index/#sequence#                     |  5 -----
 levels/it/index/sequence                       |  5 -----
 levels/it/intro/sequence                       |  6 ------
 levels/it/low-level/sequence                   | 18 ------------------
 levels/it/merge/sequence                       |  3 ---
 levels/it/remotes/sequence                     |  2 --
 levels/it/sandbox/sequence                     |  3 ---
 levels/it/sequence                             | 13 -------------
 levels/it/shit-happens/sequence                |  5 -----
 levels/it/stash/sequence                       |  5 -----
 levels/it/tags/sequence                        |  4 ----
 levels/it/workflows/sequence                   |  1 -
 levels/{en/low-level => low-level/en}/basics   |  0
 .../{en/low-level => low-level/en}/blob-create |  0
 .../{en/low-level => low-level/en}/blob-remove |  0
 .../low-level => low-level/en}/commit-create   |  0
 .../low-level => low-level/en}/commit-parents  |  0
 .../low-level => low-level/en}/commit-rhombus  |  0
 .../{en/low-level => low-level/en}/index-add   |  0
 .../low-level => low-level/en}/index-remove    |  0
 .../low-level => low-level/en}/index-update    |  0
 .../en}/puzzle-apocalypse                      |  0
 .../en}/puzzle-precious-blob                   |  0
 .../en}/puzzle-trees-all-the-way-down          |  0
 .../{en/low-level => low-level/en}/ref-create  |  0
 levels/{en/low-level => low-level/en}/ref-move |  0
 .../{en/low-level => low-level/en}/ref-remove  |  0
 .../low-level => low-level/en}/symref-create   |  0
 .../low-level => low-level/en}/symref-no-deref |  0
 .../{en/low-level => low-level/en}/tree-create |  0
 .../{en/low-level => low-level/en}/tree-nested |  0
 .../{en/low-level => low-level/en}/tree-read   |  0
 levels/{en/low-level => low-level/en}/welcome  |  0
 levels/{it/low-level => low-level/it}/basics   |  0
 .../{it/low-level => low-level/it}/blob-create |  0
 .../{it/low-level => low-level/it}/blob-remove |  0
 .../low-level => low-level/it}/commit-create   |  0
 .../low-level => low-level/it}/commit-parents  |  0
 .../low-level => low-level/it}/commit-rhombus  |  0
 .../{it/low-level => low-level/it}/index-add   |  0
 .../low-level => low-level/it}/index-remove    |  0
 .../low-level => low-level/it}/index-update    |  0
 .../it}/puzzle-apocalypse                      |  0
 .../it}/puzzle-precious-blob                   |  0
 .../it}/puzzle-trees-all-the-way-down          |  0
 .../{it/low-level => low-level/it}/ref-create  |  0
 levels/{it/low-level => low-level/it}/ref-move |  0
 .../{it/low-level => low-level/it}/ref-remove  |  0
 .../low-level => low-level/it}/symref-create   |  0
 .../low-level => low-level/it}/symref-no-deref |  0
 .../{it/low-level => low-level/it}/tree-create |  0
 .../{it/low-level => low-level/it}/tree-nested |  0
 .../{it/low-level => low-level/it}/tree-read   |  0
 levels/{it/low-level => low-level/it}/welcome  |  0
 levels/{en => }/low-level/sequence             |  0
 levels/{en/merge => merge/en}/conflict         |  0
 levels/{en/merge => merge/en}/merge            |  0
 levels/{en/merge => merge/en}/merge-abort      |  0
 levels/{it/merge => merge/it}/conflict         |  0
 levels/{it/merge => merge/it}/merge            |  0
 levels/{it/merge => merge/it}/merge-abort      |  0
 levels/{en => }/merge/sequence                 |  0
 levels/{en/remotes => remotes/en}/friend       |  0
 levels/{en/remotes => remotes/en}/problems     |  0
 levels/{it/remotes => remotes/it}/friend       |  0
 levels/{it/remotes => remotes/it}/problems     |  0
 levels/{en => }/remotes/sequence               |  0
 levels/{en/sandbox => sandbox/en}/empty        |  0
 levels/{en/sandbox => sandbox/en}/remote       |  0
 .../{en/sandbox => sandbox/en}/three-commits   |  0
 levels/{it/sandbox => sandbox/it}/empty        |  0
 levels/{it/sandbox => sandbox/it}/remote       |  0
 .../{it/sandbox => sandbox/it}/three-commits   |  0
 levels/{en => }/sandbox/sequence               |  0
 levels/{en => }/sequence                       |  0
 .../en}/bad-commit                             |  0
 .../en}/pushed-something-broken                |  0
 .../shit-happens => shit-happens/en}/reflog    |  0
 .../en}/restore-a-file                         |  0
 .../en}/restore-a-file-from-the-past           |  0
 .../it}/bad-commit                             |  0
 .../it}/pushed-something-broken                |  0
 .../shit-happens => shit-happens/it}/reflog    |  0
 .../it}/restore-a-file                         |  0
 .../it}/restore-a-file-from-the-past           |  0
 levels/{en => }/shit-happens/sequence          |  0
 levels/{en/stash => stash/en}/stash            |  0
 levels/{en/stash => stash/en}/stash-branch     |  0
 levels/{en/stash => stash/en}/stash-clear      |  0
 levels/{en/stash => stash/en}/stash-merge      |  0
 levels/{en/stash => stash/en}/stash-pop        |  0
 levels/{it/stash => stash/it}/stash            |  0
 levels/{it/stash => stash/it}/stash-branch     |  0
 levels/{it/stash => stash/it}/stash-clear      |  0
 levels/{it/stash => stash/it}/stash-merge      |  0
 levels/{it/stash => stash/it}/stash-pop        |  0
 levels/{en => }/stash/sequence                 |  0
 levels/{en/tags => tags/en}/add-tag            |  0
 levels/{en/tags => tags/en}/add-tag-later      |  0
 levels/{en/tags => tags/en}/remote-tag         |  0
 levels/{en/tags => tags/en}/remove-tag         |  0
 levels/{it/tags => tags/it}/add-tag            |  0
 levels/{it/tags => tags/it}/add-tag-later      |  0
 levels/{it/tags => tags/it}/remote-tag         |  0
 levels/{it/tags => tags/it}/remove-tag         |  0
 levels/{en => }/tags/sequence                  |  0
 levels/{en/unused => unused/en}/checkout       |  0
 levels/{en/unused => unused/en}/clone          |  0
 levels/{en/unused => unused/en}/commit         |  0
 levels/{en/unused => unused/en}/commit-a       |  0
 levels/{en/unused => unused/en}/fetch          |  0
 levels/{en/unused => unused/en}/files-move     |  0
 levels/{en/unused => unused/en}/index-mv       |  0
 levels/{en/unused => unused/en}/init           |  0
 levels/{en/unused => unused/en}/pull-push      |  0
 levels/{en/unused => unused/en}/remotes-add    |  0
 levels/{en/unused => unused/en}/remotes-delete |  0
 levels/{en/unused => unused/en}/restore        |  0
 levels/{en/unused => unused/en}/split          |  0
 levels/{en/unused => unused/en}/steps          |  0
 levels/{en/unused => unused/en}/who-are-you    |  0
 levels/{it/unused => unused/it}/checkout       |  0
 levels/{it/unused => unused/it}/clone          |  0
 levels/{it/unused => unused/it}/commit         |  0
 levels/{it/unused => unused/it}/commit-a       |  0
 levels/{it/unused => unused/it}/fetch          |  0
 levels/{it/unused => unused/it}/files-move     |  0
 levels/{it/unused => unused/it}/index-mv       |  0
 levels/{it/unused => unused/it}/init           |  0
 levels/{it/unused => unused/it}/pull-push      |  0
 levels/{it/unused => unused/it}/remotes-add    |  0
 levels/{it/unused => unused/it}/remotes-delete |  0
 levels/{it/unused => unused/it}/restore        |  0
 levels/{it/unused => unused/it}/split          |  0
 levels/{it/unused => unused/it}/steps          |  0
 levels/{it/unused => unused/it}/who-are-you    |  0
 .../{en/workflows => workflows/en}/gitignore   |  0
 levels/{en/workflows => workflows/en}/pr       |  0
 .../{it/workflows => workflows/it}/gitignore   |  0
 levels/{it/workflows => workflows/it}/pr       |  0
 levels/{en => }/workflows/sequence             |  0
 scenes/Language.gd                             |  2 +-
 scenes/chapter.gd                              | 14 +++++++++-----
 scenes/game.gd                                 |  2 +-
 scenes/levels.gd                               |  5 +++--
 207 files changed, 14 insertions(+), 91 deletions(-)
 rename levels/{en/bisect => bisect/en}/bisect (100%)
 rename levels/{it/bisect => bisect/it}/bisect (100%)
 rename levels/{en => }/bisect/sequence (100%)
 rename levels/{en/branches => branches/en}/branch-create (100%)
 rename levels/{en/branches => branches/en}/branch-remove (100%)
 rename levels/{en/branches => branches/en}/checkout-commit (100%)
 rename levels/{en/branches => branches/en}/fork (100%)
 rename levels/{en/branches => branches/en}/grow (100%)
 rename levels/{en/branches => branches/en}/reorder (100%)
 rename levels/{it/branches => branches/it}/branch-create (100%)
 rename levels/{it/branches => branches/it}/branch-remove (100%)
 rename levels/{it/branches => branches/it}/checkout-commit (100%)
 rename levels/{it/branches => branches/it}/fork (100%)
 rename levels/{it/branches => branches/it}/grow (100%)
 rename levels/{it/branches => branches/it}/reorder (100%)
 rename levels/{en => }/branches/sequence (100%)
 rename levels/{en/changing-the-past => changing-the-past/en}/rebase (100%)
 rename levels/{en/changing-the-past => changing-the-past/en}/reorder (100%)
 rename levels/{it/changing-the-past => changing-the-past/it}/rebase (100%)
 rename levels/{it/changing-the-past => changing-the-past/it}/reorder (100%)
 rename levels/{en => }/changing-the-past/sequence (100%)
 rename levels/{en/files => files/en}/files-add (100%)
 rename levels/{en/files => files/en}/files-delete (100%)
 rename levels/{it/files => files/it}/files-add (100%)
 rename levels/{it/files => files/it}/files-delete (100%)
 rename levels/{en => }/files/sequence (100%)
 rename levels/{en/index => index/en}/add (100%)
 rename levels/{en/index => index/en}/change (100%)
 rename levels/{en/index => index/en}/checkout (100%)
 rename levels/{en/index => index/en}/compare (100%)
 rename levels/{en/index => index/en}/new (100%)
 rename levels/{en/index => index/en}/reset (100%)
 rename levels/{en/index => index/en}/rm (100%)
 rename levels/{en/index => index/en}/steps (100%)
 rename levels/{it/index => index/it}/add (100%)
 rename levels/{it/index => index/it}/change (100%)
 rename levels/{it/index => index/it}/checkout (100%)
 rename levels/{it/index => index/it}/compare (100%)
 rename levels/{it/index => index/it}/new (100%)
 rename levels/{it/index => index/it}/reset (100%)
 rename levels/{it/index => index/it}/rm (100%)
 rename levels/{it/index => index/it}/steps (100%)
 rename levels/{en => }/index/sequence (100%)
 rename levels/{en/intro => intro/en}/cli (100%)
 rename levels/{en/intro => intro/en}/commit (100%)
 rename levels/{en/intro => intro/en}/copies (100%)
 rename levels/{en/intro => intro/en}/init (100%)
 rename levels/{en/intro => intro/en}/remote (100%)
 rename levels/{en/intro => intro/en}/risky (100%)
 rename levels/{en/intro => intro/en}/who-are-you (100%)
 rename levels/{it/intro => intro/it}/cli (100%)
 rename levels/{it/intro => intro/it}/commit (100%)
 rename levels/{it/intro => intro/it}/copies (100%)
 rename levels/{it/intro => intro/it}/init (100%)
 rename levels/{it/intro => intro/it}/remote (100%)
 rename levels/{it/intro => intro/it}/risky (100%)
 rename levels/{it/intro => intro/it}/who-are-you (100%)
 rename levels/{en => }/intro/sequence (100%)
 delete mode 100644 levels/it/bisect/sequence
 delete mode 100644 levels/it/branches/sequence
 delete mode 100644 levels/it/changing-the-past/sequence
 delete mode 100644 levels/it/files/sequence
 delete mode 100644 levels/it/index/#sequence#
 delete mode 100644 levels/it/index/sequence
 delete mode 100644 levels/it/intro/sequence
 delete mode 100644 levels/it/low-level/sequence
 delete mode 100644 levels/it/merge/sequence
 delete mode 100644 levels/it/remotes/sequence
 delete mode 100644 levels/it/sandbox/sequence
 delete mode 100644 levels/it/sequence
 delete mode 100644 levels/it/shit-happens/sequence
 delete mode 100644 levels/it/stash/sequence
 delete mode 100644 levels/it/tags/sequence
 delete mode 100644 levels/it/workflows/sequence
 rename levels/{en/low-level => low-level/en}/basics (100%)
 rename levels/{en/low-level => low-level/en}/blob-create (100%)
 rename levels/{en/low-level => low-level/en}/blob-remove (100%)
 rename levels/{en/low-level => low-level/en}/commit-create (100%)
 rename levels/{en/low-level => low-level/en}/commit-parents (100%)
 rename levels/{en/low-level => low-level/en}/commit-rhombus (100%)
 rename levels/{en/low-level => low-level/en}/index-add (100%)
 rename levels/{en/low-level => low-level/en}/index-remove (100%)
 rename levels/{en/low-level => low-level/en}/index-update (100%)
 rename levels/{en/low-level => low-level/en}/puzzle-apocalypse (100%)
 rename levels/{en/low-level => low-level/en}/puzzle-precious-blob (100%)
 rename levels/{en/low-level => low-level/en}/puzzle-trees-all-the-way-down (100%)
 rename levels/{en/low-level => low-level/en}/ref-create (100%)
 rename levels/{en/low-level => low-level/en}/ref-move (100%)
 rename levels/{en/low-level => low-level/en}/ref-remove (100%)
 rename levels/{en/low-level => low-level/en}/symref-create (100%)
 rename levels/{en/low-level => low-level/en}/symref-no-deref (100%)
 rename levels/{en/low-level => low-level/en}/tree-create (100%)
 rename levels/{en/low-level => low-level/en}/tree-nested (100%)
 rename levels/{en/low-level => low-level/en}/tree-read (100%)
 rename levels/{en/low-level => low-level/en}/welcome (100%)
 rename levels/{it/low-level => low-level/it}/basics (100%)
 rename levels/{it/low-level => low-level/it}/blob-create (100%)
 rename levels/{it/low-level => low-level/it}/blob-remove (100%)
 rename levels/{it/low-level => low-level/it}/commit-create (100%)
 rename levels/{it/low-level => low-level/it}/commit-parents (100%)
 rename levels/{it/low-level => low-level/it}/commit-rhombus (100%)
 rename levels/{it/low-level => low-level/it}/index-add (100%)
 rename levels/{it/low-level => low-level/it}/index-remove (100%)
 rename levels/{it/low-level => low-level/it}/index-update (100%)
 rename levels/{it/low-level => low-level/it}/puzzle-apocalypse (100%)
 rename levels/{it/low-level => low-level/it}/puzzle-precious-blob (100%)
 rename levels/{it/low-level => low-level/it}/puzzle-trees-all-the-way-down (100%)
 rename levels/{it/low-level => low-level/it}/ref-create (100%)
 rename levels/{it/low-level => low-level/it}/ref-move (100%)
 rename levels/{it/low-level => low-level/it}/ref-remove (100%)
 rename levels/{it/low-level => low-level/it}/symref-create (100%)
 rename levels/{it/low-level => low-level/it}/symref-no-deref (100%)
 rename levels/{it/low-level => low-level/it}/tree-create (100%)
 rename levels/{it/low-level => low-level/it}/tree-nested (100%)
 rename levels/{it/low-level => low-level/it}/tree-read (100%)
 rename levels/{it/low-level => low-level/it}/welcome (100%)
 rename levels/{en => }/low-level/sequence (100%)
 rename levels/{en/merge => merge/en}/conflict (100%)
 rename levels/{en/merge => merge/en}/merge (100%)
 rename levels/{en/merge => merge/en}/merge-abort (100%)
 rename levels/{it/merge => merge/it}/conflict (100%)
 rename levels/{it/merge => merge/it}/merge (100%)
 rename levels/{it/merge => merge/it}/merge-abort (100%)
 rename levels/{en => }/merge/sequence (100%)
 rename levels/{en/remotes => remotes/en}/friend (100%)
 rename levels/{en/remotes => remotes/en}/problems (100%)
 rename levels/{it/remotes => remotes/it}/friend (100%)
 rename levels/{it/remotes => remotes/it}/problems (100%)
 rename levels/{en => }/remotes/sequence (100%)
 rename levels/{en/sandbox => sandbox/en}/empty (100%)
 rename levels/{en/sandbox => sandbox/en}/remote (100%)
 rename levels/{en/sandbox => sandbox/en}/three-commits (100%)
 rename levels/{it/sandbox => sandbox/it}/empty (100%)
 rename levels/{it/sandbox => sandbox/it}/remote (100%)
 rename levels/{it/sandbox => sandbox/it}/three-commits (100%)
 rename levels/{en => }/sandbox/sequence (100%)
 rename levels/{en => }/sequence (100%)
 rename levels/{en/shit-happens => shit-happens/en}/bad-commit (100%)
 rename levels/{en/shit-happens => shit-happens/en}/pushed-something-broken (100%)
 rename levels/{en/shit-happens => shit-happens/en}/reflog (100%)
 rename levels/{en/shit-happens => shit-happens/en}/restore-a-file (100%)
 rename levels/{en/shit-happens => shit-happens/en}/restore-a-file-from-the-past (100%)
 rename levels/{it/shit-happens => shit-happens/it}/bad-commit (100%)
 rename levels/{it/shit-happens => shit-happens/it}/pushed-something-broken (100%)
 rename levels/{it/shit-happens => shit-happens/it}/reflog (100%)
 rename levels/{it/shit-happens => shit-happens/it}/restore-a-file (100%)
 rename levels/{it/shit-happens => shit-happens/it}/restore-a-file-from-the-past (100%)
 rename levels/{en => }/shit-happens/sequence (100%)
 rename levels/{en/stash => stash/en}/stash (100%)
 rename levels/{en/stash => stash/en}/stash-branch (100%)
 rename levels/{en/stash => stash/en}/stash-clear (100%)
 rename levels/{en/stash => stash/en}/stash-merge (100%)
 rename levels/{en/stash => stash/en}/stash-pop (100%)
 rename levels/{it/stash => stash/it}/stash (100%)
 rename levels/{it/stash => stash/it}/stash-branch (100%)
 rename levels/{it/stash => stash/it}/stash-clear (100%)
 rename levels/{it/stash => stash/it}/stash-merge (100%)
 rename levels/{it/stash => stash/it}/stash-pop (100%)
 rename levels/{en => }/stash/sequence (100%)
 rename levels/{en/tags => tags/en}/add-tag (100%)
 rename levels/{en/tags => tags/en}/add-tag-later (100%)
 rename levels/{en/tags => tags/en}/remote-tag (100%)
 rename levels/{en/tags => tags/en}/remove-tag (100%)
 rename levels/{it/tags => tags/it}/add-tag (100%)
 rename levels/{it/tags => tags/it}/add-tag-later (100%)
 rename levels/{it/tags => tags/it}/remote-tag (100%)
 rename levels/{it/tags => tags/it}/remove-tag (100%)
 rename levels/{en => }/tags/sequence (100%)
 rename levels/{en/unused => unused/en}/checkout (100%)
 rename levels/{en/unused => unused/en}/clone (100%)
 rename levels/{en/unused => unused/en}/commit (100%)
 rename levels/{en/unused => unused/en}/commit-a (100%)
 rename levels/{en/unused => unused/en}/fetch (100%)
 rename levels/{en/unused => unused/en}/files-move (100%)
 rename levels/{en/unused => unused/en}/index-mv (100%)
 rename levels/{en/unused => unused/en}/init (100%)
 rename levels/{en/unused => unused/en}/pull-push (100%)
 rename levels/{en/unused => unused/en}/remotes-add (100%)
 rename levels/{en/unused => unused/en}/remotes-delete (100%)
 rename levels/{en/unused => unused/en}/restore (100%)
 rename levels/{en/unused => unused/en}/split (100%)
 rename levels/{en/unused => unused/en}/steps (100%)
 rename levels/{en/unused => unused/en}/who-are-you (100%)
 rename levels/{it/unused => unused/it}/checkout (100%)
 rename levels/{it/unused => unused/it}/clone (100%)
 rename levels/{it/unused => unused/it}/commit (100%)
 rename levels/{it/unused => unused/it}/commit-a (100%)
 rename levels/{it/unused => unused/it}/fetch (100%)
 rename levels/{it/unused => unused/it}/files-move (100%)
 rename levels/{it/unused => unused/it}/index-mv (100%)
 rename levels/{it/unused => unused/it}/init (100%)
 rename levels/{it/unused => unused/it}/pull-push (100%)
 rename levels/{it/unused => unused/it}/remotes-add (100%)
 rename levels/{it/unused => unused/it}/remotes-delete (100%)
 rename levels/{it/unused => unused/it}/restore (100%)
 rename levels/{it/unused => unused/it}/split (100%)
 rename levels/{it/unused => unused/it}/steps (100%)
 rename levels/{it/unused => unused/it}/who-are-you (100%)
 rename levels/{en/workflows => workflows/en}/gitignore (100%)
 rename levels/{en/workflows => workflows/en}/pr (100%)
 rename levels/{it/workflows => workflows/it}/gitignore (100%)
 rename levels/{it/workflows => workflows/it}/pr (100%)
 rename levels/{en => }/workflows/sequence (100%)

diff --git a/levels/en/bisect/bisect b/levels/bisect/en/bisect
similarity index 100%
rename from levels/en/bisect/bisect
rename to levels/bisect/en/bisect
diff --git a/levels/it/bisect/bisect b/levels/bisect/it/bisect
similarity index 100%
rename from levels/it/bisect/bisect
rename to levels/bisect/it/bisect
diff --git a/levels/en/bisect/sequence b/levels/bisect/sequence
similarity index 100%
rename from levels/en/bisect/sequence
rename to levels/bisect/sequence
diff --git a/levels/en/branches/branch-create b/levels/branches/en/branch-create
similarity index 100%
rename from levels/en/branches/branch-create
rename to levels/branches/en/branch-create
diff --git a/levels/en/branches/branch-remove b/levels/branches/en/branch-remove
similarity index 100%
rename from levels/en/branches/branch-remove
rename to levels/branches/en/branch-remove
diff --git a/levels/en/branches/checkout-commit b/levels/branches/en/checkout-commit
similarity index 100%
rename from levels/en/branches/checkout-commit
rename to levels/branches/en/checkout-commit
diff --git a/levels/en/branches/fork b/levels/branches/en/fork
similarity index 100%
rename from levels/en/branches/fork
rename to levels/branches/en/fork
diff --git a/levels/en/branches/grow b/levels/branches/en/grow
similarity index 100%
rename from levels/en/branches/grow
rename to levels/branches/en/grow
diff --git a/levels/en/branches/reorder b/levels/branches/en/reorder
similarity index 100%
rename from levels/en/branches/reorder
rename to levels/branches/en/reorder
diff --git a/levels/it/branches/branch-create b/levels/branches/it/branch-create
similarity index 100%
rename from levels/it/branches/branch-create
rename to levels/branches/it/branch-create
diff --git a/levels/it/branches/branch-remove b/levels/branches/it/branch-remove
similarity index 100%
rename from levels/it/branches/branch-remove
rename to levels/branches/it/branch-remove
diff --git a/levels/it/branches/checkout-commit b/levels/branches/it/checkout-commit
similarity index 100%
rename from levels/it/branches/checkout-commit
rename to levels/branches/it/checkout-commit
diff --git a/levels/it/branches/fork b/levels/branches/it/fork
similarity index 100%
rename from levels/it/branches/fork
rename to levels/branches/it/fork
diff --git a/levels/it/branches/grow b/levels/branches/it/grow
similarity index 100%
rename from levels/it/branches/grow
rename to levels/branches/it/grow
diff --git a/levels/it/branches/reorder b/levels/branches/it/reorder
similarity index 100%
rename from levels/it/branches/reorder
rename to levels/branches/it/reorder
diff --git a/levels/en/branches/sequence b/levels/branches/sequence
similarity index 100%
rename from levels/en/branches/sequence
rename to levels/branches/sequence
diff --git a/levels/en/changing-the-past/rebase b/levels/changing-the-past/en/rebase
similarity index 100%
rename from levels/en/changing-the-past/rebase
rename to levels/changing-the-past/en/rebase
diff --git a/levels/en/changing-the-past/reorder b/levels/changing-the-past/en/reorder
similarity index 100%
rename from levels/en/changing-the-past/reorder
rename to levels/changing-the-past/en/reorder
diff --git a/levels/it/changing-the-past/rebase b/levels/changing-the-past/it/rebase
similarity index 100%
rename from levels/it/changing-the-past/rebase
rename to levels/changing-the-past/it/rebase
diff --git a/levels/it/changing-the-past/reorder b/levels/changing-the-past/it/reorder
similarity index 100%
rename from levels/it/changing-the-past/reorder
rename to levels/changing-the-past/it/reorder
diff --git a/levels/en/changing-the-past/sequence b/levels/changing-the-past/sequence
similarity index 100%
rename from levels/en/changing-the-past/sequence
rename to levels/changing-the-past/sequence
diff --git a/levels/en/files/files-add b/levels/files/en/files-add
similarity index 100%
rename from levels/en/files/files-add
rename to levels/files/en/files-add
diff --git a/levels/en/files/files-delete b/levels/files/en/files-delete
similarity index 100%
rename from levels/en/files/files-delete
rename to levels/files/en/files-delete
diff --git a/levels/it/files/files-add b/levels/files/it/files-add
similarity index 100%
rename from levels/it/files/files-add
rename to levels/files/it/files-add
diff --git a/levels/it/files/files-delete b/levels/files/it/files-delete
similarity index 100%
rename from levels/it/files/files-delete
rename to levels/files/it/files-delete
diff --git a/levels/en/files/sequence b/levels/files/sequence
similarity index 100%
rename from levels/en/files/sequence
rename to levels/files/sequence
diff --git a/levels/en/index/add b/levels/index/en/add
similarity index 100%
rename from levels/en/index/add
rename to levels/index/en/add
diff --git a/levels/en/index/change b/levels/index/en/change
similarity index 100%
rename from levels/en/index/change
rename to levels/index/en/change
diff --git a/levels/en/index/checkout b/levels/index/en/checkout
similarity index 100%
rename from levels/en/index/checkout
rename to levels/index/en/checkout
diff --git a/levels/en/index/compare b/levels/index/en/compare
similarity index 100%
rename from levels/en/index/compare
rename to levels/index/en/compare
diff --git a/levels/en/index/new b/levels/index/en/new
similarity index 100%
rename from levels/en/index/new
rename to levels/index/en/new
diff --git a/levels/en/index/reset b/levels/index/en/reset
similarity index 100%
rename from levels/en/index/reset
rename to levels/index/en/reset
diff --git a/levels/en/index/rm b/levels/index/en/rm
similarity index 100%
rename from levels/en/index/rm
rename to levels/index/en/rm
diff --git a/levels/en/index/steps b/levels/index/en/steps
similarity index 100%
rename from levels/en/index/steps
rename to levels/index/en/steps
diff --git a/levels/it/index/add b/levels/index/it/add
similarity index 100%
rename from levels/it/index/add
rename to levels/index/it/add
diff --git a/levels/it/index/change b/levels/index/it/change
similarity index 100%
rename from levels/it/index/change
rename to levels/index/it/change
diff --git a/levels/it/index/checkout b/levels/index/it/checkout
similarity index 100%
rename from levels/it/index/checkout
rename to levels/index/it/checkout
diff --git a/levels/it/index/compare b/levels/index/it/compare
similarity index 100%
rename from levels/it/index/compare
rename to levels/index/it/compare
diff --git a/levels/it/index/new b/levels/index/it/new
similarity index 100%
rename from levels/it/index/new
rename to levels/index/it/new
diff --git a/levels/it/index/reset b/levels/index/it/reset
similarity index 100%
rename from levels/it/index/reset
rename to levels/index/it/reset
diff --git a/levels/it/index/rm b/levels/index/it/rm
similarity index 100%
rename from levels/it/index/rm
rename to levels/index/it/rm
diff --git a/levels/it/index/steps b/levels/index/it/steps
similarity index 100%
rename from levels/it/index/steps
rename to levels/index/it/steps
diff --git a/levels/en/index/sequence b/levels/index/sequence
similarity index 100%
rename from levels/en/index/sequence
rename to levels/index/sequence
diff --git a/levels/en/intro/cli b/levels/intro/en/cli
similarity index 100%
rename from levels/en/intro/cli
rename to levels/intro/en/cli
diff --git a/levels/en/intro/commit b/levels/intro/en/commit
similarity index 100%
rename from levels/en/intro/commit
rename to levels/intro/en/commit
diff --git a/levels/en/intro/copies b/levels/intro/en/copies
similarity index 100%
rename from levels/en/intro/copies
rename to levels/intro/en/copies
diff --git a/levels/en/intro/init b/levels/intro/en/init
similarity index 100%
rename from levels/en/intro/init
rename to levels/intro/en/init
diff --git a/levels/en/intro/remote b/levels/intro/en/remote
similarity index 100%
rename from levels/en/intro/remote
rename to levels/intro/en/remote
diff --git a/levels/en/intro/risky b/levels/intro/en/risky
similarity index 100%
rename from levels/en/intro/risky
rename to levels/intro/en/risky
diff --git a/levels/en/intro/who-are-you b/levels/intro/en/who-are-you
similarity index 100%
rename from levels/en/intro/who-are-you
rename to levels/intro/en/who-are-you
diff --git a/levels/it/intro/cli b/levels/intro/it/cli
similarity index 100%
rename from levels/it/intro/cli
rename to levels/intro/it/cli
diff --git a/levels/it/intro/commit b/levels/intro/it/commit
similarity index 100%
rename from levels/it/intro/commit
rename to levels/intro/it/commit
diff --git a/levels/it/intro/copies b/levels/intro/it/copies
similarity index 100%
rename from levels/it/intro/copies
rename to levels/intro/it/copies
diff --git a/levels/it/intro/init b/levels/intro/it/init
similarity index 100%
rename from levels/it/intro/init
rename to levels/intro/it/init
diff --git a/levels/it/intro/remote b/levels/intro/it/remote
similarity index 100%
rename from levels/it/intro/remote
rename to levels/intro/it/remote
diff --git a/levels/it/intro/risky b/levels/intro/it/risky
similarity index 100%
rename from levels/it/intro/risky
rename to levels/intro/it/risky
diff --git a/levels/it/intro/who-are-you b/levels/intro/it/who-are-you
similarity index 100%
rename from levels/it/intro/who-are-you
rename to levels/intro/it/who-are-you
diff --git a/levels/en/intro/sequence b/levels/intro/sequence
similarity index 100%
rename from levels/en/intro/sequence
rename to levels/intro/sequence
diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence
deleted file mode 100644
index e8018fe..0000000
--- a/levels/it/bisect/sequence
+++ /dev/null
@@ -1 +0,0 @@
-bisect
diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence
deleted file mode 100644
index 2619ea0..0000000
--- a/levels/it/branches/sequence
+++ /dev/null
@@ -1,6 +0,0 @@
-checkout-commit
-fork
-branch-create
-grow
-branch-remove
-reorder
diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence
deleted file mode 100644
index 43c5d08..0000000
--- a/levels/it/changing-the-past/sequence
+++ /dev/null
@@ -1,2 +0,0 @@
-rebase
-reorder
diff --git a/levels/it/files/sequence b/levels/it/files/sequence
deleted file mode 100644
index cb24408..0000000
--- a/levels/it/files/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-files-delete
-files-add
-
diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence#
deleted file mode 100644
index 42f7f48..0000000
--- a/levels/it/index/#sequence#
+++ /dev/null
@@ -1,5 +0,0 @@
-compare
-new
-change
-reset
-steps
diff --git a/levels/it/index/sequence b/levels/it/index/sequence
deleted file mode 100644
index 42f7f48..0000000
--- a/levels/it/index/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-compare
-new
-change
-reset
-steps
diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence
deleted file mode 100644
index aa225df..0000000
--- a/levels/it/intro/sequence
+++ /dev/null
@@ -1,6 +0,0 @@
-risky
-copies
-init
-cli
-commit
-remote
diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence
deleted file mode 100644
index 5feb0c8..0000000
--- a/levels/it/low-level/sequence
+++ /dev/null
@@ -1,18 +0,0 @@
-welcome
-basics
-blob-create
-blob-remove
-index-add
-index-remove
-index-update
-tree-create
-tree-read
-tree-nested
-commit-create
-commit-parents
-commit-rhombus
-ref-create
-ref-move
-ref-remove
-symref-create
-symref-no-deref
diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence
deleted file mode 100644
index 2e1aa81..0000000
--- a/levels/it/merge/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-merge
-conflict
-merge-abort
\ No newline at end of file
diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence
deleted file mode 100644
index 13c5715..0000000
--- a/levels/it/remotes/sequence
+++ /dev/null
@@ -1,2 +0,0 @@
-friend
-problems
diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence
deleted file mode 100644
index 29aa91f..0000000
--- a/levels/it/sandbox/sequence
+++ /dev/null
@@ -1,3 +0,0 @@
-empty
-remote
-three-commits
diff --git a/levels/it/sequence b/levels/it/sequence
deleted file mode 100644
index cefcd7a..0000000
--- a/levels/it/sequence
+++ /dev/null
@@ -1,13 +0,0 @@
-intro
-files
-branches
-merge
-index
-remotes
-changing-the-past
-shit-happens
-workflows
-bisect
-stash
-tags
-sandbox
diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence
deleted file mode 100644
index 663d5d9..0000000
--- a/levels/it/shit-happens/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-restore-a-file
-restore-a-file-from-the-past
-bad-commit
-pushed-something-broken
-reflog
diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence
deleted file mode 100644
index 9dd02f7..0000000
--- a/levels/it/stash/sequence
+++ /dev/null
@@ -1,5 +0,0 @@
-stash
-stash-pop
-stash-clear
-stash-branch
-stash-merge
diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence
deleted file mode 100644
index fd63d9c..0000000
--- a/levels/it/tags/sequence
+++ /dev/null
@@ -1,4 +0,0 @@
-add-tag
-remove-tag
-add-tag-later
-remote-tag
diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence
deleted file mode 100644
index 1be11a8..0000000
--- a/levels/it/workflows/sequence
+++ /dev/null
@@ -1 +0,0 @@
-pr
diff --git a/levels/en/low-level/basics b/levels/low-level/en/basics
similarity index 100%
rename from levels/en/low-level/basics
rename to levels/low-level/en/basics
diff --git a/levels/en/low-level/blob-create b/levels/low-level/en/blob-create
similarity index 100%
rename from levels/en/low-level/blob-create
rename to levels/low-level/en/blob-create
diff --git a/levels/en/low-level/blob-remove b/levels/low-level/en/blob-remove
similarity index 100%
rename from levels/en/low-level/blob-remove
rename to levels/low-level/en/blob-remove
diff --git a/levels/en/low-level/commit-create b/levels/low-level/en/commit-create
similarity index 100%
rename from levels/en/low-level/commit-create
rename to levels/low-level/en/commit-create
diff --git a/levels/en/low-level/commit-parents b/levels/low-level/en/commit-parents
similarity index 100%
rename from levels/en/low-level/commit-parents
rename to levels/low-level/en/commit-parents
diff --git a/levels/en/low-level/commit-rhombus b/levels/low-level/en/commit-rhombus
similarity index 100%
rename from levels/en/low-level/commit-rhombus
rename to levels/low-level/en/commit-rhombus
diff --git a/levels/en/low-level/index-add b/levels/low-level/en/index-add
similarity index 100%
rename from levels/en/low-level/index-add
rename to levels/low-level/en/index-add
diff --git a/levels/en/low-level/index-remove b/levels/low-level/en/index-remove
similarity index 100%
rename from levels/en/low-level/index-remove
rename to levels/low-level/en/index-remove
diff --git a/levels/en/low-level/index-update b/levels/low-level/en/index-update
similarity index 100%
rename from levels/en/low-level/index-update
rename to levels/low-level/en/index-update
diff --git a/levels/en/low-level/puzzle-apocalypse b/levels/low-level/en/puzzle-apocalypse
similarity index 100%
rename from levels/en/low-level/puzzle-apocalypse
rename to levels/low-level/en/puzzle-apocalypse
diff --git a/levels/en/low-level/puzzle-precious-blob b/levels/low-level/en/puzzle-precious-blob
similarity index 100%
rename from levels/en/low-level/puzzle-precious-blob
rename to levels/low-level/en/puzzle-precious-blob
diff --git a/levels/en/low-level/puzzle-trees-all-the-way-down b/levels/low-level/en/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/en/low-level/puzzle-trees-all-the-way-down
rename to levels/low-level/en/puzzle-trees-all-the-way-down
diff --git a/levels/en/low-level/ref-create b/levels/low-level/en/ref-create
similarity index 100%
rename from levels/en/low-level/ref-create
rename to levels/low-level/en/ref-create
diff --git a/levels/en/low-level/ref-move b/levels/low-level/en/ref-move
similarity index 100%
rename from levels/en/low-level/ref-move
rename to levels/low-level/en/ref-move
diff --git a/levels/en/low-level/ref-remove b/levels/low-level/en/ref-remove
similarity index 100%
rename from levels/en/low-level/ref-remove
rename to levels/low-level/en/ref-remove
diff --git a/levels/en/low-level/symref-create b/levels/low-level/en/symref-create
similarity index 100%
rename from levels/en/low-level/symref-create
rename to levels/low-level/en/symref-create
diff --git a/levels/en/low-level/symref-no-deref b/levels/low-level/en/symref-no-deref
similarity index 100%
rename from levels/en/low-level/symref-no-deref
rename to levels/low-level/en/symref-no-deref
diff --git a/levels/en/low-level/tree-create b/levels/low-level/en/tree-create
similarity index 100%
rename from levels/en/low-level/tree-create
rename to levels/low-level/en/tree-create
diff --git a/levels/en/low-level/tree-nested b/levels/low-level/en/tree-nested
similarity index 100%
rename from levels/en/low-level/tree-nested
rename to levels/low-level/en/tree-nested
diff --git a/levels/en/low-level/tree-read b/levels/low-level/en/tree-read
similarity index 100%
rename from levels/en/low-level/tree-read
rename to levels/low-level/en/tree-read
diff --git a/levels/en/low-level/welcome b/levels/low-level/en/welcome
similarity index 100%
rename from levels/en/low-level/welcome
rename to levels/low-level/en/welcome
diff --git a/levels/it/low-level/basics b/levels/low-level/it/basics
similarity index 100%
rename from levels/it/low-level/basics
rename to levels/low-level/it/basics
diff --git a/levels/it/low-level/blob-create b/levels/low-level/it/blob-create
similarity index 100%
rename from levels/it/low-level/blob-create
rename to levels/low-level/it/blob-create
diff --git a/levels/it/low-level/blob-remove b/levels/low-level/it/blob-remove
similarity index 100%
rename from levels/it/low-level/blob-remove
rename to levels/low-level/it/blob-remove
diff --git a/levels/it/low-level/commit-create b/levels/low-level/it/commit-create
similarity index 100%
rename from levels/it/low-level/commit-create
rename to levels/low-level/it/commit-create
diff --git a/levels/it/low-level/commit-parents b/levels/low-level/it/commit-parents
similarity index 100%
rename from levels/it/low-level/commit-parents
rename to levels/low-level/it/commit-parents
diff --git a/levels/it/low-level/commit-rhombus b/levels/low-level/it/commit-rhombus
similarity index 100%
rename from levels/it/low-level/commit-rhombus
rename to levels/low-level/it/commit-rhombus
diff --git a/levels/it/low-level/index-add b/levels/low-level/it/index-add
similarity index 100%
rename from levels/it/low-level/index-add
rename to levels/low-level/it/index-add
diff --git a/levels/it/low-level/index-remove b/levels/low-level/it/index-remove
similarity index 100%
rename from levels/it/low-level/index-remove
rename to levels/low-level/it/index-remove
diff --git a/levels/it/low-level/index-update b/levels/low-level/it/index-update
similarity index 100%
rename from levels/it/low-level/index-update
rename to levels/low-level/it/index-update
diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/low-level/it/puzzle-apocalypse
similarity index 100%
rename from levels/it/low-level/puzzle-apocalypse
rename to levels/low-level/it/puzzle-apocalypse
diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/low-level/it/puzzle-precious-blob
similarity index 100%
rename from levels/it/low-level/puzzle-precious-blob
rename to levels/low-level/it/puzzle-precious-blob
diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/low-level/it/puzzle-trees-all-the-way-down
similarity index 100%
rename from levels/it/low-level/puzzle-trees-all-the-way-down
rename to levels/low-level/it/puzzle-trees-all-the-way-down
diff --git a/levels/it/low-level/ref-create b/levels/low-level/it/ref-create
similarity index 100%
rename from levels/it/low-level/ref-create
rename to levels/low-level/it/ref-create
diff --git a/levels/it/low-level/ref-move b/levels/low-level/it/ref-move
similarity index 100%
rename from levels/it/low-level/ref-move
rename to levels/low-level/it/ref-move
diff --git a/levels/it/low-level/ref-remove b/levels/low-level/it/ref-remove
similarity index 100%
rename from levels/it/low-level/ref-remove
rename to levels/low-level/it/ref-remove
diff --git a/levels/it/low-level/symref-create b/levels/low-level/it/symref-create
similarity index 100%
rename from levels/it/low-level/symref-create
rename to levels/low-level/it/symref-create
diff --git a/levels/it/low-level/symref-no-deref b/levels/low-level/it/symref-no-deref
similarity index 100%
rename from levels/it/low-level/symref-no-deref
rename to levels/low-level/it/symref-no-deref
diff --git a/levels/it/low-level/tree-create b/levels/low-level/it/tree-create
similarity index 100%
rename from levels/it/low-level/tree-create
rename to levels/low-level/it/tree-create
diff --git a/levels/it/low-level/tree-nested b/levels/low-level/it/tree-nested
similarity index 100%
rename from levels/it/low-level/tree-nested
rename to levels/low-level/it/tree-nested
diff --git a/levels/it/low-level/tree-read b/levels/low-level/it/tree-read
similarity index 100%
rename from levels/it/low-level/tree-read
rename to levels/low-level/it/tree-read
diff --git a/levels/it/low-level/welcome b/levels/low-level/it/welcome
similarity index 100%
rename from levels/it/low-level/welcome
rename to levels/low-level/it/welcome
diff --git a/levels/en/low-level/sequence b/levels/low-level/sequence
similarity index 100%
rename from levels/en/low-level/sequence
rename to levels/low-level/sequence
diff --git a/levels/en/merge/conflict b/levels/merge/en/conflict
similarity index 100%
rename from levels/en/merge/conflict
rename to levels/merge/en/conflict
diff --git a/levels/en/merge/merge b/levels/merge/en/merge
similarity index 100%
rename from levels/en/merge/merge
rename to levels/merge/en/merge
diff --git a/levels/en/merge/merge-abort b/levels/merge/en/merge-abort
similarity index 100%
rename from levels/en/merge/merge-abort
rename to levels/merge/en/merge-abort
diff --git a/levels/it/merge/conflict b/levels/merge/it/conflict
similarity index 100%
rename from levels/it/merge/conflict
rename to levels/merge/it/conflict
diff --git a/levels/it/merge/merge b/levels/merge/it/merge
similarity index 100%
rename from levels/it/merge/merge
rename to levels/merge/it/merge
diff --git a/levels/it/merge/merge-abort b/levels/merge/it/merge-abort
similarity index 100%
rename from levels/it/merge/merge-abort
rename to levels/merge/it/merge-abort
diff --git a/levels/en/merge/sequence b/levels/merge/sequence
similarity index 100%
rename from levels/en/merge/sequence
rename to levels/merge/sequence
diff --git a/levels/en/remotes/friend b/levels/remotes/en/friend
similarity index 100%
rename from levels/en/remotes/friend
rename to levels/remotes/en/friend
diff --git a/levels/en/remotes/problems b/levels/remotes/en/problems
similarity index 100%
rename from levels/en/remotes/problems
rename to levels/remotes/en/problems
diff --git a/levels/it/remotes/friend b/levels/remotes/it/friend
similarity index 100%
rename from levels/it/remotes/friend
rename to levels/remotes/it/friend
diff --git a/levels/it/remotes/problems b/levels/remotes/it/problems
similarity index 100%
rename from levels/it/remotes/problems
rename to levels/remotes/it/problems
diff --git a/levels/en/remotes/sequence b/levels/remotes/sequence
similarity index 100%
rename from levels/en/remotes/sequence
rename to levels/remotes/sequence
diff --git a/levels/en/sandbox/empty b/levels/sandbox/en/empty
similarity index 100%
rename from levels/en/sandbox/empty
rename to levels/sandbox/en/empty
diff --git a/levels/en/sandbox/remote b/levels/sandbox/en/remote
similarity index 100%
rename from levels/en/sandbox/remote
rename to levels/sandbox/en/remote
diff --git a/levels/en/sandbox/three-commits b/levels/sandbox/en/three-commits
similarity index 100%
rename from levels/en/sandbox/three-commits
rename to levels/sandbox/en/three-commits
diff --git a/levels/it/sandbox/empty b/levels/sandbox/it/empty
similarity index 100%
rename from levels/it/sandbox/empty
rename to levels/sandbox/it/empty
diff --git a/levels/it/sandbox/remote b/levels/sandbox/it/remote
similarity index 100%
rename from levels/it/sandbox/remote
rename to levels/sandbox/it/remote
diff --git a/levels/it/sandbox/three-commits b/levels/sandbox/it/three-commits
similarity index 100%
rename from levels/it/sandbox/three-commits
rename to levels/sandbox/it/three-commits
diff --git a/levels/en/sandbox/sequence b/levels/sandbox/sequence
similarity index 100%
rename from levels/en/sandbox/sequence
rename to levels/sandbox/sequence
diff --git a/levels/en/sequence b/levels/sequence
similarity index 100%
rename from levels/en/sequence
rename to levels/sequence
diff --git a/levels/en/shit-happens/bad-commit b/levels/shit-happens/en/bad-commit
similarity index 100%
rename from levels/en/shit-happens/bad-commit
rename to levels/shit-happens/en/bad-commit
diff --git a/levels/en/shit-happens/pushed-something-broken b/levels/shit-happens/en/pushed-something-broken
similarity index 100%
rename from levels/en/shit-happens/pushed-something-broken
rename to levels/shit-happens/en/pushed-something-broken
diff --git a/levels/en/shit-happens/reflog b/levels/shit-happens/en/reflog
similarity index 100%
rename from levels/en/shit-happens/reflog
rename to levels/shit-happens/en/reflog
diff --git a/levels/en/shit-happens/restore-a-file b/levels/shit-happens/en/restore-a-file
similarity index 100%
rename from levels/en/shit-happens/restore-a-file
rename to levels/shit-happens/en/restore-a-file
diff --git a/levels/en/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/en/restore-a-file-from-the-past
similarity index 100%
rename from levels/en/shit-happens/restore-a-file-from-the-past
rename to levels/shit-happens/en/restore-a-file-from-the-past
diff --git a/levels/it/shit-happens/bad-commit b/levels/shit-happens/it/bad-commit
similarity index 100%
rename from levels/it/shit-happens/bad-commit
rename to levels/shit-happens/it/bad-commit
diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/shit-happens/it/pushed-something-broken
similarity index 100%
rename from levels/it/shit-happens/pushed-something-broken
rename to levels/shit-happens/it/pushed-something-broken
diff --git a/levels/it/shit-happens/reflog b/levels/shit-happens/it/reflog
similarity index 100%
rename from levels/it/shit-happens/reflog
rename to levels/shit-happens/it/reflog
diff --git a/levels/it/shit-happens/restore-a-file b/levels/shit-happens/it/restore-a-file
similarity index 100%
rename from levels/it/shit-happens/restore-a-file
rename to levels/shit-happens/it/restore-a-file
diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/it/restore-a-file-from-the-past
similarity index 100%
rename from levels/it/shit-happens/restore-a-file-from-the-past
rename to levels/shit-happens/it/restore-a-file-from-the-past
diff --git a/levels/en/shit-happens/sequence b/levels/shit-happens/sequence
similarity index 100%
rename from levels/en/shit-happens/sequence
rename to levels/shit-happens/sequence
diff --git a/levels/en/stash/stash b/levels/stash/en/stash
similarity index 100%
rename from levels/en/stash/stash
rename to levels/stash/en/stash
diff --git a/levels/en/stash/stash-branch b/levels/stash/en/stash-branch
similarity index 100%
rename from levels/en/stash/stash-branch
rename to levels/stash/en/stash-branch
diff --git a/levels/en/stash/stash-clear b/levels/stash/en/stash-clear
similarity index 100%
rename from levels/en/stash/stash-clear
rename to levels/stash/en/stash-clear
diff --git a/levels/en/stash/stash-merge b/levels/stash/en/stash-merge
similarity index 100%
rename from levels/en/stash/stash-merge
rename to levels/stash/en/stash-merge
diff --git a/levels/en/stash/stash-pop b/levels/stash/en/stash-pop
similarity index 100%
rename from levels/en/stash/stash-pop
rename to levels/stash/en/stash-pop
diff --git a/levels/it/stash/stash b/levels/stash/it/stash
similarity index 100%
rename from levels/it/stash/stash
rename to levels/stash/it/stash
diff --git a/levels/it/stash/stash-branch b/levels/stash/it/stash-branch
similarity index 100%
rename from levels/it/stash/stash-branch
rename to levels/stash/it/stash-branch
diff --git a/levels/it/stash/stash-clear b/levels/stash/it/stash-clear
similarity index 100%
rename from levels/it/stash/stash-clear
rename to levels/stash/it/stash-clear
diff --git a/levels/it/stash/stash-merge b/levels/stash/it/stash-merge
similarity index 100%
rename from levels/it/stash/stash-merge
rename to levels/stash/it/stash-merge
diff --git a/levels/it/stash/stash-pop b/levels/stash/it/stash-pop
similarity index 100%
rename from levels/it/stash/stash-pop
rename to levels/stash/it/stash-pop
diff --git a/levels/en/stash/sequence b/levels/stash/sequence
similarity index 100%
rename from levels/en/stash/sequence
rename to levels/stash/sequence
diff --git a/levels/en/tags/add-tag b/levels/tags/en/add-tag
similarity index 100%
rename from levels/en/tags/add-tag
rename to levels/tags/en/add-tag
diff --git a/levels/en/tags/add-tag-later b/levels/tags/en/add-tag-later
similarity index 100%
rename from levels/en/tags/add-tag-later
rename to levels/tags/en/add-tag-later
diff --git a/levels/en/tags/remote-tag b/levels/tags/en/remote-tag
similarity index 100%
rename from levels/en/tags/remote-tag
rename to levels/tags/en/remote-tag
diff --git a/levels/en/tags/remove-tag b/levels/tags/en/remove-tag
similarity index 100%
rename from levels/en/tags/remove-tag
rename to levels/tags/en/remove-tag
diff --git a/levels/it/tags/add-tag b/levels/tags/it/add-tag
similarity index 100%
rename from levels/it/tags/add-tag
rename to levels/tags/it/add-tag
diff --git a/levels/it/tags/add-tag-later b/levels/tags/it/add-tag-later
similarity index 100%
rename from levels/it/tags/add-tag-later
rename to levels/tags/it/add-tag-later
diff --git a/levels/it/tags/remote-tag b/levels/tags/it/remote-tag
similarity index 100%
rename from levels/it/tags/remote-tag
rename to levels/tags/it/remote-tag
diff --git a/levels/it/tags/remove-tag b/levels/tags/it/remove-tag
similarity index 100%
rename from levels/it/tags/remove-tag
rename to levels/tags/it/remove-tag
diff --git a/levels/en/tags/sequence b/levels/tags/sequence
similarity index 100%
rename from levels/en/tags/sequence
rename to levels/tags/sequence
diff --git a/levels/en/unused/checkout b/levels/unused/en/checkout
similarity index 100%
rename from levels/en/unused/checkout
rename to levels/unused/en/checkout
diff --git a/levels/en/unused/clone b/levels/unused/en/clone
similarity index 100%
rename from levels/en/unused/clone
rename to levels/unused/en/clone
diff --git a/levels/en/unused/commit b/levels/unused/en/commit
similarity index 100%
rename from levels/en/unused/commit
rename to levels/unused/en/commit
diff --git a/levels/en/unused/commit-a b/levels/unused/en/commit-a
similarity index 100%
rename from levels/en/unused/commit-a
rename to levels/unused/en/commit-a
diff --git a/levels/en/unused/fetch b/levels/unused/en/fetch
similarity index 100%
rename from levels/en/unused/fetch
rename to levels/unused/en/fetch
diff --git a/levels/en/unused/files-move b/levels/unused/en/files-move
similarity index 100%
rename from levels/en/unused/files-move
rename to levels/unused/en/files-move
diff --git a/levels/en/unused/index-mv b/levels/unused/en/index-mv
similarity index 100%
rename from levels/en/unused/index-mv
rename to levels/unused/en/index-mv
diff --git a/levels/en/unused/init b/levels/unused/en/init
similarity index 100%
rename from levels/en/unused/init
rename to levels/unused/en/init
diff --git a/levels/en/unused/pull-push b/levels/unused/en/pull-push
similarity index 100%
rename from levels/en/unused/pull-push
rename to levels/unused/en/pull-push
diff --git a/levels/en/unused/remotes-add b/levels/unused/en/remotes-add
similarity index 100%
rename from levels/en/unused/remotes-add
rename to levels/unused/en/remotes-add
diff --git a/levels/en/unused/remotes-delete b/levels/unused/en/remotes-delete
similarity index 100%
rename from levels/en/unused/remotes-delete
rename to levels/unused/en/remotes-delete
diff --git a/levels/en/unused/restore b/levels/unused/en/restore
similarity index 100%
rename from levels/en/unused/restore
rename to levels/unused/en/restore
diff --git a/levels/en/unused/split b/levels/unused/en/split
similarity index 100%
rename from levels/en/unused/split
rename to levels/unused/en/split
diff --git a/levels/en/unused/steps b/levels/unused/en/steps
similarity index 100%
rename from levels/en/unused/steps
rename to levels/unused/en/steps
diff --git a/levels/en/unused/who-are-you b/levels/unused/en/who-are-you
similarity index 100%
rename from levels/en/unused/who-are-you
rename to levels/unused/en/who-are-you
diff --git a/levels/it/unused/checkout b/levels/unused/it/checkout
similarity index 100%
rename from levels/it/unused/checkout
rename to levels/unused/it/checkout
diff --git a/levels/it/unused/clone b/levels/unused/it/clone
similarity index 100%
rename from levels/it/unused/clone
rename to levels/unused/it/clone
diff --git a/levels/it/unused/commit b/levels/unused/it/commit
similarity index 100%
rename from levels/it/unused/commit
rename to levels/unused/it/commit
diff --git a/levels/it/unused/commit-a b/levels/unused/it/commit-a
similarity index 100%
rename from levels/it/unused/commit-a
rename to levels/unused/it/commit-a
diff --git a/levels/it/unused/fetch b/levels/unused/it/fetch
similarity index 100%
rename from levels/it/unused/fetch
rename to levels/unused/it/fetch
diff --git a/levels/it/unused/files-move b/levels/unused/it/files-move
similarity index 100%
rename from levels/it/unused/files-move
rename to levels/unused/it/files-move
diff --git a/levels/it/unused/index-mv b/levels/unused/it/index-mv
similarity index 100%
rename from levels/it/unused/index-mv
rename to levels/unused/it/index-mv
diff --git a/levels/it/unused/init b/levels/unused/it/init
similarity index 100%
rename from levels/it/unused/init
rename to levels/unused/it/init
diff --git a/levels/it/unused/pull-push b/levels/unused/it/pull-push
similarity index 100%
rename from levels/it/unused/pull-push
rename to levels/unused/it/pull-push
diff --git a/levels/it/unused/remotes-add b/levels/unused/it/remotes-add
similarity index 100%
rename from levels/it/unused/remotes-add
rename to levels/unused/it/remotes-add
diff --git a/levels/it/unused/remotes-delete b/levels/unused/it/remotes-delete
similarity index 100%
rename from levels/it/unused/remotes-delete
rename to levels/unused/it/remotes-delete
diff --git a/levels/it/unused/restore b/levels/unused/it/restore
similarity index 100%
rename from levels/it/unused/restore
rename to levels/unused/it/restore
diff --git a/levels/it/unused/split b/levels/unused/it/split
similarity index 100%
rename from levels/it/unused/split
rename to levels/unused/it/split
diff --git a/levels/it/unused/steps b/levels/unused/it/steps
similarity index 100%
rename from levels/it/unused/steps
rename to levels/unused/it/steps
diff --git a/levels/it/unused/who-are-you b/levels/unused/it/who-are-you
similarity index 100%
rename from levels/it/unused/who-are-you
rename to levels/unused/it/who-are-you
diff --git a/levels/en/workflows/gitignore b/levels/workflows/en/gitignore
similarity index 100%
rename from levels/en/workflows/gitignore
rename to levels/workflows/en/gitignore
diff --git a/levels/en/workflows/pr b/levels/workflows/en/pr
similarity index 100%
rename from levels/en/workflows/pr
rename to levels/workflows/en/pr
diff --git a/levels/it/workflows/gitignore b/levels/workflows/it/gitignore
similarity index 100%
rename from levels/it/workflows/gitignore
rename to levels/workflows/it/gitignore
diff --git a/levels/it/workflows/pr b/levels/workflows/it/pr
similarity index 100%
rename from levels/it/workflows/pr
rename to levels/workflows/it/pr
diff --git a/levels/en/workflows/sequence b/levels/workflows/sequence
similarity index 100%
rename from levels/en/workflows/sequence
rename to levels/workflows/sequence
diff --git a/scenes/Language.gd b/scenes/Language.gd
index 7c0ec82..2f94fbf 100644
--- a/scenes/Language.gd
+++ b/scenes/Language.gd
@@ -29,7 +29,7 @@ func _on_item_pressed(id):
 		var value = tr(game.languages[key])
 		if value == lang:
 			game.os_lang = key
-			game.levels_dir = "res://levels/" + key
+#			game.levels_dir = "res://levels/" + key
 	
 	check_current_items()
 	TranslationServer.set_locale(game.os_lang)
diff --git a/scenes/chapter.gd b/scenes/chapter.gd
index 856f59b..f6f09d1 100644
--- a/scenes/chapter.gd
+++ b/scenes/chapter.gd
@@ -8,12 +8,14 @@ var levels
 func load(path):
 	levels = []
 	
-	var parts = path.split("/")
-	slug = parts[parts.size()-1]
+#	var parts = path.split("/")
+#	slug = parts[parts.size()-1]
+	slug = path
 	
 	var level_names = []
 	var dir = Directory.new()
-	dir.open(game.levels_dir + "/%s" % slug)
+#	dir.open(game.levels_dir + "/%s" % slug)
+	dir.open(game.levels_dir + "/" + path + "/" + game.os_lang + "/")
 	dir.list_dir_begin()
 
 	while true:
@@ -28,7 +30,8 @@ func load(path):
 	
 	var final_level_sequence = []
 	
-	var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n"))
+#	var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n"))
+	var level_sequence = Array(helpers.read_file(game.levels_dir + "/" + path + "/sequence").split("\n"))
 	
 	for level in level_sequence:
 		if level == "":
@@ -42,7 +45,8 @@ func load(path):
 	
 	for l in final_level_sequence:
 		var level = Level.new()
-		level.load(game.levels_dir + "/%s/%s" % [slug, l])
+#		level.load(game.levels_dir + "/%s/%s" % [slug, l])
+		level.load(game.levels_dir + "/" + path + "/" + game.os_lang + "/" + l)
 		levels.push_back(level)
 
 func _to_string():
diff --git a/scenes/game.gd b/scenes/game.gd
index cf84db2..7249cb2 100644
--- a/scenes/game.gd
+++ b/scenes/game.gd
@@ -2,7 +2,7 @@ extends Node
 
 var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed
 var os_lang = OS.get_locale_language() # Variable for game localization (it, en, ecc...)
-var levels_dir = "res://levels/" + os_lang
+var levels_dir = "res://levels"
 
 var tmp_prefix = OS.get_user_data_dir() + "/tmp/"
 var global_shell
diff --git a/scenes/levels.gd b/scenes/levels.gd
index 6fff54f..8485ecf 100644
--- a/scenes/levels.gd
+++ b/scenes/levels.gd
@@ -13,7 +13,7 @@ func reload():
 	dir.list_dir_begin()
 
 	var chapter_names = []
-	
+
 	while true:
 		var file = dir.get_next()
 		if file == "":
@@ -40,5 +40,6 @@ func reload():
 	
 	for c in final_chapter_sequence:
 		var chapter = Chapter.new()
-		chapter.load(game.levels_dir + "/%s" % c)
+#		chapter.load(game.levels_dir + "/" + c + "/" + game.os_lang)
+		chapter.load(c)
 		chapters.push_back(chapter)