From a1f7bda2d93c51c1e23403a038c0d4af48ccdac0 Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Sun, 5 Jul 2020 14:21:32 -0700 Subject: [PATCH 001/108] Closes #718 -- clarify the two options we can do in our interactive rebase --- src/levels/rampup/interactiveRebase.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/levels/rampup/interactiveRebase.js b/src/levels/rampup/interactiveRebase.js index 7d2775c9..b662311a 100644 --- a/src/levels/rampup/interactiveRebase.js +++ b/src/levels/rampup/interactiveRebase.js @@ -73,11 +73,12 @@ exports.level = { "type": "ModalAlert", "options": { "markdowns": [ - "When the interactive rebase dialog opens, you have the ability to do 3 things:", + "When the interactive rebase dialog opens, you have the ability to do two things in our educational application:", "", "* You can reorder commits simply by changing their order in the UI (in our window this means dragging and dropping with the mouse).", "* You can choose to completely omit some commits. This is designated by `pick` -- toggling `pick` off means you want to drop the commit.", - "* Lastly, you can squash commits. Unfortunately our levels don't support this for a few logistical reasons, so I'll skip over the details of this. Long story short, though -- it allows you to combine commits.", + "", + "*It is worth mentioning that in the real git interactive rebase you can do many more things like squashing (combining) commits, amending commit messages, and even editing the commits themselves. For our purposes though we will focus on these two operations above.*", "", "Great! Let's see an example." ] From 12cdb494573c95acedfb22fc05b60140676d6899 Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Sun, 5 Jul 2020 14:57:21 -0700 Subject: [PATCH 002/108] Resolves #593 -- add alias support with local storage --- src/js/models/commandModel.js | 16 ++++++++++++++-- src/js/sandbox/commands.js | 16 ++++++++++++++++ src/js/stores/LevelStore.js | 25 +++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/js/models/commandModel.js b/src/js/models/commandModel.js index df837412..e9c096a2 100644 --- a/src/js/models/commandModel.js +++ b/src/js/models/commandModel.js @@ -3,6 +3,7 @@ var Backbone = require('backbone'); var Errors = require('../util/errors'); var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall; +var LevelStore = require('../stores/LevelStore'); var intl = require('../intl'); var CommandProcessError = Errors.CommandProcessError; @@ -267,8 +268,19 @@ var Command = Backbone.Model.extend({ }, parseAll: function() { - var str = this.get('rawStr'); - var results = this.get('parseWaterfall').parseAll(str); + var rawInput = this.get('rawStr'); + debugger; + const aliasMap = LevelStore.getAliasMap(); + for (var i = 0; i Date: Thu, 9 Jul 2020 11:27:11 +0800 Subject: [PATCH 003/108] Fix one incomplete translation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "在上一了我们已经提及过这一点了" -> "在上一节课程中我们已经提及过这一点了" --- src/levels/remote/fetch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/levels/remote/fetch.js b/src/levels/remote/fetch.js index 6bd784f3..c9cf239a 100644 --- a/src/levels/remote/fetch.js +++ b/src/levels/remote/fetch.js @@ -560,7 +560,7 @@ exports.level = { "", "本节课我们将学习如何从远程仓库获取数据 —— 命令如其名,它就是 `git fetch`。", "", - "你会看到当我们从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库。在上一了我们已经提及过这一点了。" + "你会看到当我们从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库。在上一节课程中我们已经提及过这一点了。" ] } }, From e5e98a4bf9ad5e29403fdca6abcae23fc77721f3 Mon Sep 17 00:00:00 2001 From: Prof Rafael Date: Fri, 10 Jul 2020 20:30:16 -0300 Subject: [PATCH 004/108] Adding support to Portuguese - remote8 - lockedMaster --- src/levels/remote/lockedMaster.js | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/levels/remote/lockedMaster.js b/src/levels/remote/lockedMaster.js index d8f18fa0..538a7036 100644 --- a/src/levels/remote/lockedMaster.js +++ b/src/levels/remote/lockedMaster.js @@ -8,6 +8,7 @@ exports.level = { "ru_RU": "Создайте новую feature ветвь от master перед тем, как откатить изменения в master до состояния o/master.", "zh_CN": "从本地的master创建一个feature分支, 然后重置master和origin master保持一致。", "es_ES": "Crea la rama feature desde la rama master en local antes de restablecerlo para que sea el mismo que la rama master de origen", + "pt_BR": "Crie o ramo feature a partir do ramo master no local antes de reestabelecê-lo para que seja o mesmo que o ramo master de origem", "fr_FR": "Créer la branche feature à partir du master local, avant de la restaurer dans le même état que o/master", "ko" : "로컬 저장소의 master 브랜치로부터 feature 브랜치를 만드세요. 그리고 o/master와 같아질 수 있도록 로컬 저장소의 master 브랜치를 reset 하세요.", "sl_SI": "Naredi feature branch iz lokalnega masterja preden ga ponastaviš, da bo enak kot origin master.", @@ -19,6 +20,7 @@ exports.level = { "ru_RU": "Заблокированная ветвь master", "zh_CN": "锁定的Master(Locked Master)", "es_ES": "Master bloqueado", + "pt_BR": "Master bloqueado", "fr_FR": "Master verrouillé", "ko" : "잠겨버린 Master", "sl_SI": "Zaklenjen Master", @@ -230,6 +232,46 @@ exports.level = { } ] }, + "pt_BR": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Remote Rejected!", + "", + "Se você trabalha em uma grande equipe colaborativa é provável que o master seja bloqueado e precise de alguns processos de Pull Request para unir mudanças. Se você commitar diretamente para o master localmente e tentar fazer um push você visualizará uma mensagem similar a essa:", + "", + "```", + " ! [remote rejected] master -> master (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.)", + "```" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Por que foi rejeitado?", + "", + "O repositório remoto rejeitou o push dos commits diretamente para o master por causa da política do master necessitando do uso dos pull requests.", + "", + "Você pretendia seguir o processo de criação de uma ramificação, fazendo um push dessa ramificação e fazendo um pull request, mas você esqueceu e commitou diretamente para o master. Agora você está preso e não consegue publicar suas mudanças." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## A solução", + "", + "Crie outro branch chamado feature e faça um push dele para o repositório remoto. Além disso, resete o master de volta a estar sincronizado com o repositório remoto para não ter problemas da próxima vez que fizer um pull e os commits de alguém mais conflitarem com o seu." + ] + } + } + ] + }, "fr_FR": { "childViews": [ { From e689ffde8b49c7da1555806fc4c052f7f65be22a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2020 19:31:23 +0000 Subject: [PATCH 005/108] Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 42281e10..df1ef91c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2982,9 +2982,9 @@ lodash.values@~2.4.1: lodash.keys "~2.4.1" lodash@^4.12.0, lodash@^4.17.13, lodash@~4.17.11: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" From 54b1f546e50f9a36fb978a57d11a2675ecacbea0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2020 12:44:58 +0000 Subject: [PATCH 006/108] Bump elliptic from 6.5.2 to 6.5.3 Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3) Signed-off-by: dependabot[bot] --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index df1ef91c..dad80237 100644 --- a/yarn.lock +++ b/yarn.lock @@ -534,9 +534,9 @@ bl@^1.2.1: safe-buffer "^5.1.1" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== brace-expansion@^1.1.7: version "1.1.11" @@ -1344,9 +1344,9 @@ each-props@^1.3.0: object.defaults "^1.1.0" elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" From 188bda5964ef6cd6c4bf0520671e8a9a31bc1e54 Mon Sep 17 00:00:00 2001 From: yzhang <583181285@qq.com> Date: Mon, 10 Aug 2020 11:18:28 +0800 Subject: [PATCH 007/108] =?UTF-8?q?=F0=9F=92=84=20choose=20proper=20fonts?= =?UTF-8?q?=20for=20all=203=20OSes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/js/visuals/index.js | 2 +- src/js/visuals/visBranch.js | 2 +- src/js/visuals/visNode.js | 2 +- src/js/visuals/visTag.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/js/visuals/index.js b/src/js/visuals/index.js index 668ce91a..77f51439 100644 --- a/src/js/visuals/index.js +++ b/src/js/visuals/index.js @@ -240,7 +240,7 @@ GitVisuals.prototype.finishAnimation = function(speed) { opacity: 0, 'font-weight': 500, 'font-size': '32pt', - 'font-family': 'Monaco, Courier, font-monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', stroke: '#000', 'stroke-width': 2, fill: '#000' diff --git a/src/js/visuals/visBranch.js b/src/js/visuals/visBranch.js index ddac02f4..e07c049c 100644 --- a/src/js/visuals/visBranch.js +++ b/src/js/visuals/visBranch.js @@ -410,7 +410,7 @@ var VisBranch = VisBase.extend({ var text = paper.text(textPos.x, textPos.y, String(name)); text.attr({ 'font-size': 14, - 'font-family': 'Monaco, Courier, font-monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', opacity: this.getTextOpacity() }); this.set('text', text); diff --git a/src/js/visuals/visNode.js b/src/js/visuals/visNode.js index f9952d29..912e71a3 100644 --- a/src/js/visuals/visNode.js +++ b/src/js/visuals/visNode.js @@ -451,7 +451,7 @@ var VisNode = VisBase.extend({ text.attr({ 'font-size': this.getFontSize(this.get('id')), 'font-weight': 'bold', - 'font-family': 'Monaco, Courier, font-monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', opacity: this.getOpacity() }); diff --git a/src/js/visuals/visTag.js b/src/js/visuals/visTag.js index d07f7435..b92472c9 100644 --- a/src/js/visuals/visTag.js +++ b/src/js/visuals/visTag.js @@ -254,7 +254,7 @@ var VisTag = VisBase.extend({ var text = paper.text(textPos.x, textPos.y, String(name)); text.attr({ 'font-size': 14, - 'font-family': 'Monaco, Courier, font-monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', opacity: this.getTextOpacity(), 'text-anchor': 'start' }); From b3a59b8c953caa2e587c0d8a3ac9415968e433a2 Mon Sep 17 00:00:00 2001 From: yzhang <583181285@qq.com> Date: Tue, 11 Aug 2020 07:59:43 +0800 Subject: [PATCH 008/108] follow-up --- src/js/visuals/index.js | 2 +- src/js/visuals/visBranch.js | 2 +- src/js/visuals/visNode.js | 2 +- src/js/visuals/visTag.js | 2 +- src/style/main.css | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/js/visuals/index.js b/src/js/visuals/index.js index 77f51439..54797c83 100644 --- a/src/js/visuals/index.js +++ b/src/js/visuals/index.js @@ -240,7 +240,7 @@ GitVisuals.prototype.finishAnimation = function(speed) { opacity: 0, 'font-weight': 500, 'font-size': '32pt', - 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', monospace', stroke: '#000', 'stroke-width': 2, fill: '#000' diff --git a/src/js/visuals/visBranch.js b/src/js/visuals/visBranch.js index e07c049c..476e9d7c 100644 --- a/src/js/visuals/visBranch.js +++ b/src/js/visuals/visBranch.js @@ -410,7 +410,7 @@ var VisBranch = VisBase.extend({ var text = paper.text(textPos.x, textPos.y, String(name)); text.attr({ 'font-size': 14, - 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', monospace', opacity: this.getTextOpacity() }); this.set('text', text); diff --git a/src/js/visuals/visNode.js b/src/js/visuals/visNode.js index 912e71a3..a3a50612 100644 --- a/src/js/visuals/visNode.js +++ b/src/js/visuals/visNode.js @@ -451,7 +451,7 @@ var VisNode = VisBase.extend({ text.attr({ 'font-size': this.getFontSize(this.get('id')), 'font-weight': 'bold', - 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', monospace', opacity: this.getOpacity() }); diff --git a/src/js/visuals/visTag.js b/src/js/visuals/visTag.js index b92472c9..2f8d4650 100644 --- a/src/js/visuals/visTag.js +++ b/src/js/visuals/visTag.js @@ -254,7 +254,7 @@ var VisTag = VisBase.extend({ var text = paper.text(textPos.x, textPos.y, String(name)); text.attr({ 'font-size': 14, - 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', \'Courier New\', monospace', + 'font-family': 'Menlo, Monaco, Consolas, \'Droid Sans Mono\', monospace', opacity: this.getTextOpacity(), 'text-anchor': 'start' }); diff --git a/src/style/main.css b/src/style/main.css index a4018d7d..1d0f18b2 100644 --- a/src/style/main.css +++ b/src/style/main.css @@ -10,7 +10,7 @@ body { } html, body { - font-family: Monaco, Courier, monospace; + font-family: Menlo, Monaco, Consolas, 'Droid Sans Mono', monospace; color: #eee; } From bb01f4d1dde0586b0ffd89f4c52331621b4ce266 Mon Sep 17 00:00:00 2001 From: Laurent Haas - F6FVY Date: Fri, 21 Aug 2020 15:55:15 +0200 Subject: [PATCH 009/108] Typo in French translation --- src/js/dialogs/sandbox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/dialogs/sandbox.js b/src/js/dialogs/sandbox.js index 8b7c5224..cd348a61 100644 --- a/src/js/dialogs/sandbox.js +++ b/src/js/dialogs/sandbox.js @@ -508,7 +508,7 @@ exports.dialog = { markdowns: [ '## Commandes Git', '', - 'Il existe une large variété de commandes git disponibles dans le mode bac à sable. Sont inclues :', + 'Il existe une large variété de commandes git disponibles dans le mode bac à sable. Sont incluses :', '', ' * commit', ' * branch', From 37c72805cc72e61febf92dfedcfd76970f7a2b43 Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Fri, 21 Aug 2020 11:27:12 -0600 Subject: [PATCH 010/108] Resolves #728 --- src/levels/intro/commits.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/levels/intro/commits.js b/src/levels/intro/commits.js index c2c3e053..ef5c36ca 100644 --- a/src/levels/intro/commits.js +++ b/src/levels/intro/commits.js @@ -47,7 +47,7 @@ exports.level = { "options": { "markdowns": [ "## Git Commits", - "A commit in a git repository records a snapshot of all the files in your directory. It's like a giant copy and paste, but even better!", + "A commit in a git repository records a snapshot of all the (tracked) files in your directory. It's like a giant copy and paste, but even better!", "", "Git wants to keep commits as lightweight as possible though, so it doesn't just blindly copy the entire directory every time you commit. It can (when possible) compress a commit as a set of changes, or a \"delta\", from one version of the repository to the next.", "", From e8d171ef14a734b0a5aafccce4117701bf27bd23 Mon Sep 17 00:00:00 2001 From: Janno Teelem Date: Thu, 27 Aug 2020 10:27:05 +0300 Subject: [PATCH 011/108] Fix: Editing an existing level was broken --- src/js/level/builder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/level/builder.js b/src/js/level/builder.js index 63ebdef9..a47dd7b8 100644 --- a/src/js/level/builder.js +++ b/src/js/level/builder.js @@ -54,7 +54,7 @@ var LevelBuilder = Level.extend({ // if we are editing a level our behavior is a bit different var editLevelJSON; if (options.editLevel) { - LevelStore.getLevel(options.editLevel); + editLevelJSON = LevelStore.getLevel(options.editLevel); options.level = editLevelJSON; } From ec5337faddbde8adb72afed1cc20b74df9b73a4f Mon Sep 17 00:00:00 2001 From: Mariia Paraketsova Date: Mon, 7 Sep 2020 17:22:36 +0200 Subject: [PATCH 012/108] Fix a typo in Russian in branching section --- src/levels/intro/branching.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/levels/intro/branching.js b/src/levels/intro/branching.js index 6882634d..ebf5533f 100644 --- a/src/levels/intro/branching.js +++ b/src/levels/intro/branching.js @@ -918,7 +918,7 @@ exports.level = { "", "Так как создание множества веток никак не отражается на памяти или жестком диске, удобнее и проще разбивать свою работу на много маленьких веток, чем хранить все изменения в одной огромной ветке.", "", - "Чуть позже мы попробуем использовать ветки и коммиты, и вы увидите, как две эти возможности сочетаются. Можно сказать, что созданная ветка хранит изменения текущих коммитов и всех его родителей." + "Чуть позже мы попробуем использовать ветки и коммиты, и вы увидите, как две эти возможности сочетаются. Можно сказать, что созданная ветка хранит изменения текущего коммита и всех его родителей." ] } }, From 11448ed428be865b9b741da7b07ee36e7e9250d7 Mon Sep 17 00:00:00 2001 From: Ulysse ARNAUD Date: Wed, 16 Sep 2020 20:35:07 +0200 Subject: [PATCH 013/108] Added git switch with '-' and '-c' as optional arguments --- src/js/git/commands.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/js/git/commands.js b/src/js/git/commands.js index 008fc48b..1e883ea0 100644 --- a/src/js/git/commands.js +++ b/src/js/git/commands.js @@ -855,6 +855,48 @@ var commandConfig = { command.twoArgsImpliedHead(generalArgs); engine.tag(generalArgs[0], generalArgs[1]); } + }, + + switch: { + sc: /^(gsw|git sw)($|\s)/, + regex: /^git +switch($|\s)/, + options: [ + '-c', + '-' + ], + execute: function(engine, command) { + var generalArgs = command.getGeneralArgs(); + var commandOptions = command.getOptionsMap(); + + var args = null; + if (commandOptions['-c']) { + // the user is really trying to just make a + // branch and then switch to it. so first: + args = commandOptions['-c'].concat(generalArgs); + command.twoArgsImpliedHead(args, '-c'); + + var validId = engine.validateBranchName(args[0]); + engine.branch(validId, args[1]); + engine.checkout(validId); + return; + } + + if (commandOptions['-']) { + // get the heads last location + var lastPlace = engine.HEAD.get('lastLastTarget'); + if (!lastPlace) { + throw new GitError({ + msg: intl.str('git-result-nothing') + }); + } + engine.HEAD.set('target', lastPlace); + return; + } + + command.validateArgBounds(generalArgs, 1, 1); + + engine.checkout(engine.crappyUnescape(generalArgs[0])); + } } }; From c765e476d581108fc1a40d791aafdbc20226e5f2 Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Wed, 16 Sep 2020 11:59:52 -0700 Subject: [PATCH 014/108] Add test coverage for #734 --- __tests__/git.spec.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/__tests__/git.spec.js b/__tests__/git.spec.js index 05e72932..cfe6317d 100644 --- a/__tests__/git.spec.js +++ b/__tests__/git.spec.js @@ -60,6 +60,13 @@ describe('Git', function() { ); }); + it('Switches', function() { + return expectTreeAsync( + 'git switch -c side', + '{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}' + ); + }); + it('Rebases', function() { return expectTreeAsync( 'gc; git checkout -b side C1; gc; git rebase master', @@ -172,6 +179,13 @@ describe('Git', function() { ); }); + it('switches after a rebase ', function() { + return expectTreeAsync( + 'git commit; git switch -c bugFix C1; git commit; git rebase master;git switch master', + '%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D' + ); + }); + it('checks out after an interactive rebase', function() { return expectTreeAsync( 'git commit; git checkout -b bugFix C1; git commit; git rebase -i master --interactive-test;git checkout master', From 7ae2175d2d71df6044e2c609f90948df3fdf73cb Mon Sep 17 00:00:00 2001 From: Francisco Demartino Date: Fri, 25 Sep 2020 11:19:00 -0300 Subject: [PATCH 015/108] increase margin-left for "shell input" Shells usually have a space character on their prompt after the "$" or "#" --- src/style/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style/main.css b/src/style/main.css index 1d0f18b2..48372314 100644 --- a/src/style/main.css +++ b/src/style/main.css @@ -553,7 +553,7 @@ p.commandLine span.prompt { #commandLineBar p.command { margin: 0; - margin-left: 12px; + margin-left: 20px; } #commandLineBar #commandTextField { From 14587f5b6b64daeadc571cc1b8da99bad8744f1d Mon Sep 17 00:00:00 2001 From: jimpanse123 Date: Thu, 1 Oct 2020 10:15:34 +0000 Subject: [PATCH 016/108] fixed typos in german containing "Level" The german version contained the wrong articles and some prepositions for Level". --- src/js/intl/strings.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/js/intl/strings.js b/src/js/intl/strings.js index 4d5fcb0e..5239c35a 100755 --- a/src/js/intl/strings.js +++ b/src/js/intl/strings.js @@ -4,7 +4,7 @@ exports.strings = { '__desc__': 'One of the lines in the next level dialog', 'ja': '最後のレベルをクリアしました!すごい!!', 'en_US': 'Wow! You finished the last level, great!', - 'de_DE': 'Wow! Du hast den letzten Level gelöst, super!', + 'de_DE': 'Wow! Du hast das letzte Level gelöst, super!', 'zh_CN': 'Wow!你通关了!', 'zh_TW': '我的天啊!您解開了最後一關,太強了!', 'es_AR': '¡Ea! Terminaste el último nivel, ¡genial!', @@ -1140,7 +1140,7 @@ exports.strings = { 'level-cant-exit': { '__desc__': 'When the user tries to exit a level when they are not in one', 'en_US': 'You are not in a level! You are in a sandbox, start a level with "levels"', - 'de_DE': 'Du bist nicht in einem Level! Du bist im Sandkasten-Modus, starte einen Level mit "levels"', + 'de_DE': 'Du bist nicht in einem Level! Du bist im Sandkasten-Modus, starte ein Level mit "levels"', 'zh_CN': '您没在关卡中而是在沙盒中,要开始关卡请输入 "levels"', 'zh_TW': '您沒在關卡中!您在沙盒中,要開始關卡請輸入 "levels"', 'es_AR': '¡No estás en un nivel! Estás en el sandbox, comenzá un nivel usando "levels"', @@ -1158,7 +1158,7 @@ exports.strings = { 'level-no-id': { '__desc__': 'When you say an id but that level doesn\'t exist', 'en_US': 'A level for that id "{id}" was not found! Opening up a level selection view', - 'de_DE': 'Konnte keinen Level mit der ID "{id}" finden! Öffne einen Level-Auswahldialog', + 'de_DE': 'Konnte kein Level mit der ID "{id}" finden! Öffne den Level-Auswahldialog', 'zh_CN': '没找到 id 为 "{id}" 的关卡!打开关卡选择框', 'zh_TW': '找不到 id 為 "{id}" 的關卡!開啟關卡選擇視窗', 'es_AR': 'No se encontró ningún nivel {id}. Abriendo la vista de selección de niveles...', @@ -1194,7 +1194,7 @@ exports.strings = { 'already-solved': { '__desc__': 'When you play in a level that is already solved', 'en_US': 'You have already solved this level, try other levels with "levels" or go back to sandbox with "sandbox"', - 'de_DE': 'Du hast diesen Level bereits gelöst, probier einen anderen Level mit "levels" aus oder geh in den Sandkasten-Modus mit "sandbox"', + 'de_DE': 'Du hast dieses Level bereits gelöst, probier ein anderes Level mit "levels" aus oder geh in den Sandkasten-Modus mit "sandbox"', 'zh_CN': '你已经解决了本关,输入 "levels" 尝试其他关卡,或者输入 "sandbox" 回到沙盒中', 'zh_TW': '你已經解决了本關,輸入 "levels" 嘗試其他關卡,或者輸入 "sandbox" 回到沙盒中', 'es_AR': 'Ya resolviste este nivel, probá otros usando "levels" o volvé al sandbox usando "sandbox"', @@ -1227,7 +1227,7 @@ exports.strings = { 'command-disabled': { '__desc__': 'When you try a command that is disabled', 'en_US': 'That git command is disabled for this level!', - 'de_DE': 'Dieser git-Befehl ist für diesen Level deaktiviert!', + 'de_DE': 'Dieser git-Befehl ist für dieses Level deaktiviert!', 'zh_CN': '本关不允许使用该命令!', 'zh_TW': '本關禁止使用該 git 指令!', 'es_AR': '¡Ese comando de git está deshabilitado para este nivel!', @@ -1245,7 +1245,7 @@ exports.strings = { 'share-json': { '__desc__': 'when you have made the level, prompt to share this', 'en_US': 'Here is the JSON for this level! Share it with someone or send it to me on GitHub', - 'de_DE': 'Hier ist das JSON für diesen Level! Teil es mit jemandem or schick es mir über GitHub', + 'de_DE': 'Hier ist das JSON für dieses Level! Teil es mit jemandem or schick es mir über GitHub', 'zh_CN': '这是一个关卡定义 JSON !您可以分享它或者发到我的 GitHub 上', 'zh_TW': '這是本關的 JSON!您可以分享給別人,或是送到 GitHub 上給我', 'es_AR': 'Este es el JSON de este nivel. Compartilo con quien quieras o mandámelo por GitHub', @@ -1299,7 +1299,7 @@ exports.strings = { 'prompt-hint': { '__desc__': 'prompt for hint', 'en_US': 'Enter the hint for this level, or leave this blank if you do not want to include one', - 'de_DE': 'Gib den Hinweis für diesen Level an, oder lass es leer wenn du keinen hinzufügen willst', + 'de_DE': 'Gib den Hinweis für dieses Level an, oder lass es leer wenn du keinen hinzufügen willst', 'zh_CN': '请输入关卡提示,如果没有请留空', 'zh_TW': '請輸入關卡提示,或者故意留空', 'es_AR': 'Ingresá una pista para este nivel, o dejalo en blanco si no querés incluir ninguna', @@ -1317,7 +1317,7 @@ exports.strings = { 'prompt-name': { '__desc__': 'prompt for level name', 'en_US': 'Enter the name for the level', - 'de_DE': 'Gib den Namen für diesen Level an', + 'de_DE': 'Gib den Namen für dieses Level an', 'zh_CN': '请输入关卡名称', 'zh_TW': '請輸入關卡名稱', 'es_AR': 'Ingresá el nombre del nivel', @@ -1371,7 +1371,7 @@ exports.strings = { 'help-vague-level': { '__desc__': 'When you are in a level and you say help, its vague and you need to specify', 'en_US': 'You are in a level, so multiple forms of help are available. Please select either "help level" to learn more about this lesson, "help general" for using Learn GitBranching, or "objective" to learn about how to solve the level.', - 'de_DE': 'Du befindest dich in einem Level, daher gibt es verschiedene Hilfen. Gib "help level" ein um mehr úber diesen Level zu erfahren, "help general" um zu sehen wie Learn Git Branching bedient wird, oder "objective" um das Ziel dieses Levels zu erfahren.', + 'de_DE': 'Du befindest dich in einem Level, daher gibt es verschiedene Hilfen. Gib "help level" ein um mehr úber dieses Level zu erfahren, "help general" um zu sehen wie Learn Git Branching bedient wird, oder "objective" um das Ziel dieses Levels zu erfahren.', 'zh_CN': '您正在关卡中,这里有多种形式的帮助,请选择 "help level" (关卡帮助)或 "help general" (一般帮助)', 'zh_TW': '您正在進行關卡中,這裡有多種不同型式的幫助,請選擇 "help level" 來了解這個關卡,或者是選擇 "help general" 來學習如何使用 Learn GitBranching,或者是選擇 "objective" 來學習如何解決這個關卡', 'es_AR': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elegí entre "help level" para aprender algo más sobre esta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.', @@ -1570,7 +1570,7 @@ exports.strings = { 'no-start-dialog': { '__desc__': 'when the user tries to open a start dialog for a level that does not have one', 'en_US': 'There is no start dialog to show for this level!', - 'de_DE': 'Es gibt keinen Einführungs-Dialog für diesen Level!', + 'de_DE': 'Es gibt keinen Einführungs-Dialog für dieses Level!', 'zh_CN': '这个关卡没有介绍!', 'zh_TW': '這關沒有介紹!', 'es_AR': '¡No hay mensaje de inicio para este nivel!', @@ -1589,7 +1589,7 @@ exports.strings = { 'no-hint': { '__desc__': 'when no hint is available for a level', 'en_US': "Hmm, there doesn't seem to be a hint for this level :-/", - 'de_DE': "Hm, es gibt anscheinend keinen Hinweis für diesen Level :-/", + 'de_DE': "Hm, es gibt anscheinend keinen Hinweis für dieses Level :-/", 'zh_CN': "呃……,这关好像没有提示 :-/", 'zh_TW': "嗯‧‧‧這關沒有提示 :-/", 'es_AR': 'Mmm... Pareciera no haber pistas para este nivel :-/', From dac744a1d8beeaf2ce7460575b045f119f7d72c0 Mon Sep 17 00:00:00 2001 From: Sebastian Kessler Date: Tue, 6 Oct 2020 11:16:08 +0200 Subject: [PATCH 017/108] master Fixed a small typo in the german version of 'remote tracking' --- src/levels/remote/tracking.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/levels/remote/tracking.js b/src/levels/remote/tracking.js index 06e97cdf..7dfecc0d 100644 --- a/src/levels/remote/tracking.js +++ b/src/levels/remote/tracking.js @@ -1070,7 +1070,7 @@ exports.level = { "", " git branch -u o/master foo", "", - "eingibt, wir damit der lokale Branch `foo` so eingestellt, dass er `o/master` trackt. Den Namen des lokalen Branch kannst du auch weglassen, falls du ihn eh aktuell ausgecheckt hast:", + "eingibt, wird damit der lokale Branch `foo` so eingestellt, dass er `o/master` trackt. Den Namen des lokalen Branch kannst du auch weglassen, falls du ihn eh aktuell ausgecheckt hast:", "", " git branch -u o/master", "" From e2e9fce65d75ce455cfd76f43c4c28af877a07c2 Mon Sep 17 00:00:00 2001 From: wd <47643023+wdcoua@users.noreply.github.com> Date: Tue, 13 Oct 2020 17:20:12 +0300 Subject: [PATCH 018/108] Update strings.js --- src/js/intl/strings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/intl/strings.js b/src/js/intl/strings.js index 5239c35a..37650c59 100755 --- a/src/js/intl/strings.js +++ b/src/js/intl/strings.js @@ -724,7 +724,7 @@ exports.strings = { 'gl' : 'Aprende Git Branching', 'fr_FR': 'Apprenez Git Branching', 'ru_RU': 'Изучаем ветвление в git', - 'uk': 'Learn Git Branching', + 'uk': 'Вивчай Git Branching', 'ko': '깃 브랜칭을 배워봅시다.', 'vi': 'Học nhánh Git.', 'sl_SI': 'Nauči se Git Branching' @@ -1185,7 +1185,7 @@ exports.strings = { 'gl' : 'Nonn hai comandos que desfacer', 'fr_FR': 'La pile d\'annulation est vide !', 'ru_RU': 'Некуда откатывать!', - 'uk': 'Нема куди відкатуватися', + 'uk': 'Нема куди відкочуватись!', 'ko': '되돌리기 스택이 비었습니다!', 'vi': 'Không có gì để hoàn tác!', 'sl_SI': 'Undo seznam je prazen!' From e0a751a2e8be6d9c66c675f65d90efba0abc3803 Mon Sep 17 00:00:00 2001 From: wd <47643023+wdcoua@users.noreply.github.com> Date: Tue, 13 Oct 2020 17:51:52 +0300 Subject: [PATCH 019/108] Update lockedMaster.js --- src/levels/remote/lockedMaster.js | 50 +++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/levels/remote/lockedMaster.js b/src/levels/remote/lockedMaster.js index 538a7036..43021e21 100644 --- a/src/levels/remote/lockedMaster.js +++ b/src/levels/remote/lockedMaster.js @@ -6,6 +6,7 @@ exports.level = { "en_US": "Make the feature branch from the local master before resetting it back to be the same as origin's master", "de_DE": "Erstelle einen Feature-Branch ausgehend vom lokalen Master-Branch, bevor du den Master-Branch auf den origin/master zurücksetzt.", "ru_RU": "Создайте новую feature ветвь от master перед тем, как откатить изменения в master до состояния o/master.", + "uk": "Створіть нову feature гілку від локального master перед тим, як відкотити зміни в master до стану o/master.", "zh_CN": "从本地的master创建一个feature分支, 然后重置master和origin master保持一致。", "es_ES": "Crea la rama feature desde la rama master en local antes de restablecerlo para que sea el mismo que la rama master de origen", "pt_BR": "Crie o ramo feature a partir do ramo master no local antes de reestabelecê-lo para que seja o mesmo que o ramo master de origem", @@ -18,6 +19,7 @@ exports.level = { "en_US": "Locked Master", "de_DE": "Gesperrter Master-Branch", "ru_RU": "Заблокированная ветвь master", + "ru_RU": "Заблокована гілка master", "zh_CN": "锁定的Master(Locked Master)", "es_ES": "Master bloqueado", "pt_BR": "Master bloqueado", @@ -185,7 +187,51 @@ exports.level = { "markdowns": [ "## Решение:", "", - "Создайте ещё одну ветвь под названием `feature` и отправьте изменения на удалённый репозиторий. Так же не забудьте вернуть вашу локальную `master` ветвь в исходное состояние (чтобы она была синхронизирована с удалённой). В противном случае у вас могут возникнуть проблемы при следующем выполнении `git pull`." + "Создайте ещё одну ветвь под названием `feature` и отправьте изменения на удалённый репозиторий. Также не забудьте вернуть вашу локальную `master` ветвь в исходное состояние (чтобы она была синхронизирована с удалённой). В противном случае у вас могут возникнуть проблемы при следующем выполнении `git pull`." + ] + } + } + ] + }, + "uk": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Remote Rejected!", + "", + "Коли ви працюєте над проектом в складі великої команди розробників, то, швидше за все, гілка `master` буде _заблокована_. Для внесення до неї змін в git існує поняття запиту на злиття `Pull Request`. В такій ситуації, якщо ви закомітите свої зміни безпосередньо в гілку `master`, а потім виконаєте `git push`, то буде згенероване повідомлення про помилку:", + "", + "```", + " ! [remote rejected] master -> master (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.)", + "```", + "", + "```", + " ! [віддалено відхилено] master -> master (TF402455: Зміни (push-запити) цієї гілки заборонені; ви повинні використовувати pull-запит для оновлення цієї гілки.)", + "```" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Чому мої зміни були відхилені?", + "", + "Віддалений репозиторій відхилив коміти завантажені безпосередньо в гілку `master` через те, що на `master` _налаштована політика_, яка вимагає використання `Pull request` замість звичайного `git push`.", + "", + "Ця політика має на увазі процес створення нової гілки розробки, внесення до неї всіх потрібних комітів, завантаження змін в віддалений репозиторій і _відкриття нового_ `Pull request`. Але ви про це забули (чи не знали) і закомітили свої доробки безпосередньо в гілку `master`. Тепер ви застрягли і не можене запушити свої зміни :(. " + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Рішення:", + "", + "Створіть ще одну гілку з назвою `feature` і відправте зміни у віддалений репозиторій. Також не забудьте повернути вашу локальну гілку `master` в вихідне положення (щоб вона була синхронізована з віддаленою). Інакше у вас можуть виникнути складнощі при наступному виконанні запиту `git pull`." ] } } @@ -434,4 +480,4 @@ exports.level = { ] } } -}; \ No newline at end of file +}; From 947265607d431cafea80ba8f35fd134934e8ce2a Mon Sep 17 00:00:00 2001 From: wd <47643023+wdcoua@users.noreply.github.com> Date: Tue, 13 Oct 2020 18:05:23 +0300 Subject: [PATCH 020/108] Update lockedMaster.js --- src/levels/remote/lockedMaster.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/levels/remote/lockedMaster.js b/src/levels/remote/lockedMaster.js index 43021e21..5b3bd019 100644 --- a/src/levels/remote/lockedMaster.js +++ b/src/levels/remote/lockedMaster.js @@ -231,7 +231,8 @@ exports.level = { "markdowns": [ "## Рішення:", "", - "Створіть ще одну гілку з назвою `feature` і відправте зміни у віддалений репозиторій. Також не забудьте повернути вашу локальну гілку `master` в вихідне положення (щоб вона була синхронізована з віддаленою). Інакше у вас можуть виникнути складнощі при наступному виконанні запиту `git pull`." + "Створіть ще одну гілку з назвою `feature` і відправте зміни у віддалений репозиторій. Також не забудьте повернути вашу локальну гілку `master` в вихідне положення (щоб вона була синхронізована з віддаленою). Інакше у вас можуть виникнути складнощі при наступному виконанні запиту `git pull`, коли коміти інших розробників конфліктуватимуть з вашими." + ] } } From 46d54b2dc7d7682008500823614ac858bb215da7 Mon Sep 17 00:00:00 2001 From: AndreyPootMay Date: Wed, 14 Oct 2020 12:38:37 -0500 Subject: [PATCH 021/108] Adding support to Mexican Spanish Lang --- src/js/dialogs/confirmShowSolution.js | 10 ++++++++++ src/js/dialogs/levelBuilder.js | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/js/dialogs/confirmShowSolution.js b/src/js/dialogs/confirmShowSolution.js index f4b1d50a..108a3409 100644 --- a/src/js/dialogs/confirmShowSolution.js +++ b/src/js/dialogs/confirmShowSolution.js @@ -49,6 +49,16 @@ exports.dialog = { ] } }], + 'es_MX': [{ + type: 'ModalAlert', + options: { + markdowns: [ + '## ¿Estás seguro de que quiere ver la solución?', + '', + '¡Creo en ti! ¡Yo sé que puedes!' + ] + } + }], 'es_ES': [{ type: 'ModalAlert', options: { diff --git a/src/js/dialogs/levelBuilder.js b/src/js/dialogs/levelBuilder.js index 21553a85..0ec4ab1d 100644 --- a/src/js/dialogs/levelBuilder.js +++ b/src/js/dialogs/levelBuilder.js @@ -94,6 +94,25 @@ exports.dialog = { ] } }], + 'es_MX': [{ + type: 'ModalAlert', + options: { + markdowns: [ + '## ¡Bienvenido al constructor de niveles!', + '', + 'Estos son los pasos principales:', + '', + ' * Preparar el entorno inicial usando comandos de Git', + ' * Definir el árbol inicial con ```define start```', + ' * Introducir la serie de comandos de git que representan la solución óptima', + ' * Crear el árbol objetivo con ```define goal```. El objetivo también determina la solución', + ' * Opcionalmente, crea pistas con ```define hint```', + ' * Dale un nombre con ```define name```', + ' * Opcionalmente, crea un mensaje inicial con ```edit dialog```', + ' * ¡Introduce el comando ```finish``` para obtener tu nivel en formato JSON!' + ] + } + }], 'es_ES': [{ type: 'ModalAlert', options: { From ce754be8db0a36b0e74b3d2ba898049a825feef7 Mon Sep 17 00:00:00 2001 From: AndreyPootMay Date: Sun, 18 Oct 2020 17:50:54 -0500 Subject: [PATCH 022/108] feat: Translating in es_MX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I add the translation for confirmShowSolution, nextLevel, sandbox, IntlHelperBarView, étc. Various of the levels. --- src/js/dialogs/confirmShowSolution.js | 2 +- src/js/dialogs/nextLevel.js | 11 +++ src/js/dialogs/sandbox.js | 56 +++++++++++++++ src/js/intl/strings.js | 86 +++++++++++++++++++++++ src/js/react_views/IntlHelperBarView.jsx | 6 ++ src/js/stores/LocaleStore.js | 1 + src/levels/advanced/multipleParents.js | 89 ++++++++++++++++++++++++ src/levels/index.js | 14 ++++ src/levels/intro/branching.js | 80 +++++++++++++++++++++ src/levels/intro/commits.js | 44 ++++++++++++ src/levels/intro/merging.js | 71 +++++++++++++++++++ src/levels/intro/rebasing.js | 69 ++++++++++++++++++ 12 files changed, 528 insertions(+), 1 deletion(-) diff --git a/src/js/dialogs/confirmShowSolution.js b/src/js/dialogs/confirmShowSolution.js index 108a3409..b5f0c2b2 100644 --- a/src/js/dialogs/confirmShowSolution.js +++ b/src/js/dialogs/confirmShowSolution.js @@ -53,7 +53,7 @@ exports.dialog = { type: 'ModalAlert', options: { markdowns: [ - '## ¿Estás seguro de que quiere ver la solución?', + '## ¿Estás seguro de que quieres ver la solución?', '', '¡Creo en ti! ¡Yo sé que puedes!' ] diff --git a/src/js/dialogs/nextLevel.js b/src/js/dialogs/nextLevel.js index f537012a..73205271 100644 --- a/src/js/dialogs/nextLevel.js +++ b/src/js/dialogs/nextLevel.js @@ -67,6 +67,17 @@ exports.dialog = { ] } }], + 'es_MX': [{ + type: 'ModalAlert', + options: { + markdowns: [ + '## ¡Buen trabajo!', + '', + 'Resolviste el nivel en *{numCommands}* comandos; ', + 'nuestra mejor solución usa: {best}.' + ] + } + }], 'es_ES': [{ type: 'ModalAlert', options: { diff --git a/src/js/dialogs/sandbox.js b/src/js/dialogs/sandbox.js index cd348a61..6df5794a 100644 --- a/src/js/dialogs/sandbox.js +++ b/src/js/dialogs/sandbox.js @@ -78,6 +78,62 @@ exports.dialog = { ] } }], + 'es_MX': [{ + type: 'ModalAlert', + options: { + markdowns: [ + '## ¡Bienvenid@ a Learn Git Branching!', + '', + 'Esta aplicación está diseñada para ayudar a los principantes ', + 'a manejar los poderosos conceptos que hay detrás del trabajo ', + 'con ramas (branches) en Git. Esperamos que disfrutes la aplicación ', + 'y tal vez incluso ¡que aprendas algo! ', + '', + '# ¡Demo!', + '', + 'Si no viste la demo, mirala en ésta dirección:', + '', + '[https://pcottle.github.io/learnGitBranching/?demo](https://pcottle.github.io/learnGitBranching/?demo)', + '', + '¿Harto de este mensaje? Agregale `?NODEMO` a la URL para dejar de verlo, como en éste link:', + '', + '[https://pcottle.github.io/learnGitBranching/?NODEMO](?NODEMO)' + ] + } + }, { + type: 'ModalAlert', + options: { + markdowns: [ + '## Comandos de Git', + '', + 'Tienes una gran variedad de comandos de git en este sandbox. He aquí una lista de los incluidos: ', + '', + ' * commit', + ' * branch', + ' * checkout', + ' * cherry-pick', + ' * reset', + ' * revert', + ' * rebase', + ' * merge' + ] + } + }, { + type: 'ModalAlert', + options: { + markdowns: [ + '## ¡Comparte!', + '', + 'Comparte tus árboles con tus amigos usando `export tree` e `import tree`', + '', + '¿Tienes una buena lección que compartir? Prueba construyendo un nivel con `build level` o prueba el nivel de un amigo con `import level`', + '', + 'Para ver todos los comandos disponibles, prueba `show commands`. Hay algunos muy prácticos como `undo` y `reset`', + '', + 'Por ahora, arranquemos con los `levels`...' + ] + } + }], 'es_ES': [{ type: 'ModalAlert', options: { diff --git a/src/js/intl/strings.js b/src/js/intl/strings.js index 5239c35a..05c045f6 100755 --- a/src/js/intl/strings.js +++ b/src/js/intl/strings.js @@ -8,6 +8,7 @@ exports.strings = { 'zh_CN': 'Wow!你通关了!', 'zh_TW': '我的天啊!您解開了最後一關,太強了!', 'es_AR': '¡Ea! Terminaste el último nivel, ¡genial!', + 'es_MX': '¡Enhorabuena! Terminaste el último nivel, ¡genial!', 'es_ES': '¡Felicitaciones! Terminaste el último nivel!', 'pt_BR': 'Uia! Você terminou o último nível, massa!', 'gl' : '¡Yeeeha! Remataches o derradeiro nivel, ¡a tope!', @@ -28,6 +29,7 @@ exports.strings = { 'zh_CN': '要不要试试下一关 *“{nextLevel}”*?', 'zh_TW': '下一關是*「{nextLevel}」*,您要繼續闖關嗎?', 'es_AR': '¿Querés seguir con *"{nextLevel}"*, el próximo nivel?', + 'es_MX': '¿Quieres seguir con *"{nextLevel}"*, el próximo nivel?', 'es_ES': '¿Quieres pasar al nivel *"{nextLevel}"*, el próximo nivel?', 'pt_BR': 'Você gostaria de ir para o próximo nível: *"{nextLevel}"*?', 'gl' : '¿Gustaríache ir o seguinte nivel: *"{nextLevel}"*?', @@ -48,6 +50,7 @@ exports.strings = { 'zh_CN': '太强了!你的答案符合标准答案甚至更好。', 'zh_TW': '太強了,您的答案符合我們的預期甚至更好!', 'es_AR': '¡Fabuloso! Igualaste o superaste nuestra solución.', + 'es_MX': '¡Fabuloso! Igualaste o superaste nuestra solución.', 'es_ES': '¡Fabuloso! Igualaste o superaste nuestra solución.', 'gl' : '¡Fabuloso! Fixécholo igual ou mellor ca nosa solución.', 'fr_FR': 'Fabuleux ! Votre solution a égalé ou surpassé notre solution.', @@ -66,6 +69,7 @@ exports.strings = { 'zh_CN': '试试看你能否在 {best} 步之内搞定 :D', 'zh_TW': '試試看您是否能在 {best} 步内搞定 :D', 'es_AR': 'Fijate si podés bajarlo a usar sólo {best} comandos :D', + 'es_MX': 'Fíjate si puedes bajarlo a usar sólo {best} comandos :D', 'es_ES': 'Trata de usar sólo {best} comandos :D', 'pt_BR': 'Veja se consegue reduzir para somente {best} :D', 'gl' : 'Mira se consigues reducir a solo {best} :D', @@ -83,6 +87,7 @@ exports.strings = { 'zh_CN': '注意! Mercurial 会进行主动垃圾回收,需要将你的提交树縮小。', 'zh_TW': '注意! Mercurial 會積極地做垃圾收集,而且會因此把你的 tree 給縮小。', 'es_AR': '¡Cuidado! Mercurial hace garbage collection agresivamente y necesita eliminar tu árbol', + 'es_MX': '¡Cuidado! Mercurial hace garbage collection agresivamente y necesita eliminar tu árbol', 'es_ES': '¡Cuidado! Mercurial hace la recolección de basura agresivamente (para administrar memoria) y necesita podar tu árbol.', 'pt_BR': 'Cuidado! O Mercurial faz coleção de lixo agressiva e precisa prunar sua árvore', 'gl' : '¡Coidado! Mercurial fai que recolección de lixo agresivamente (para limpar memoria) e precisa podar a túa árbore.', @@ -101,6 +106,7 @@ exports.strings = { 'zh_TW': '對於這個 app 來說,-A 選項並不是必須的,只需要 commit 就好!', 'zh_CN': '对本 App 而言,-A 选项并非必须项,直接 commit 就好!', 'es_AR': 'La opción -A no es necesaria para esta aplicación, simplemente hacé commit', + 'es_MX': 'La opción -A no es necesaria para ésta aplicación, simplemente se hace commit', 'es_ES': 'La opción -A no se necesita para este aplicación, sólo hace un commit!', 'pt_BR': 'A opção -A não é necessária para este aplicativo, simplesmente faça commit', 'gl' : 'A opción -A non se necesita para este aplicativo, ¡fai só un commit!', @@ -119,6 +125,7 @@ exports.strings = { 'zh_CN': '本 App 没有 status 命令哦,因为根本没有 stage 缓存文件。可以用 hg summary 代替哦', 'zh_TW': '本 App 没有 status 命令哦,因为根本没有 stage 缓存文件。可以用 hg summary 代替哦', 'es_AR': 'No hay un comando status para esta aplicación, dado que no hay archivos que indexar. Probá hg summary, en cambio', + 'es_MX': 'No hay un comando status para esta aplicación, dado que no hay archivos que indexar. Prueba `hg summary`, en cambio', 'es_ES': 'No hay un comando status para esta aplicación, porque no hay archivos que indexar. Prueba el comando hg summary', 'pt_BR': 'Não existe um comando status para este aplicativo, já que não há staging de arquivos. Tente hg summary', 'gl' : 'Non hai un comando status para esta aplicación, xa que non hai ficheiros que indexar. Proba hg summary', @@ -137,6 +144,7 @@ exports.strings = { 'zh_CN': '我需要该命令使用 {option} 选项呢。', 'zh_TW': '我需要該命令使用 {option} 選項呢。', 'es_AR': '¡Necesito la opción {opcion} para ese comando!', + 'es_MX': '¡Necesito la opción {opcion} para ese comando!', 'es_ES': '¡Necesito la opción {opcion} para ese comando!', 'pt_BR': 'Eu preciso da opção {option} para esse comando!', 'gl' : 'Preciso da opción {option} para ese comando!', @@ -155,6 +163,7 @@ exports.strings = { 'zh_CN': '暂不支持没有-f 选项的 hg log 命令,请补充 -f 选项吧', 'zh_TW': '暫不支持沒有-f 選項的 hg log 命令,請補充 -f 選項吧', 'es_AR': 'hg log sin el parámetro -f no está soportado, usá -f', + 'es_MX': 'hg log sin el parámetro -f no está soportado, usa -f', 'es_ES': 'Actualmente hg log sin -f no es compatible con esta aplicación. Usa -f.', 'pt_BR': 'hg log sem -f atualmente não é suportado, use -f', 'gl' : 'hg log sen -f actulamente non é soportado, usa -f', @@ -174,6 +183,7 @@ exports.strings = { 'zh_CN': '游离的 Head(Detached head)!', 'zh_TW': '分離 Head!', 'es_AR': '¡Detached HEAD!', + 'es_MX': '¡HEAD separado! (Detached HEAD).', 'es_ES': '¡HEAD separado! (Detached HEAD).', 'pt_BR': 'Detached HEAD!', 'gl' : '¡Detached HEAD!', @@ -192,6 +202,7 @@ exports.strings = { 'zh_CN': '当前分支 {branch}', 'zh_TW': '切換到 branch {branch}', 'es_AR': 'En la rama {branch}', + 'es_MX': 'En la rama {branch}', 'es_ES': 'En la rama {branch}', 'pt_BR': 'No ramo {branch}', 'gl' : 'Non na rama {branch}', @@ -210,6 +221,7 @@ exports.strings = { 'zh_CN': '可以提交啦!(在这个程序中无须修改文件,一直可以提交)', 'zh_TW': '準備 commit!(在這個 demo 裡面可以一直 commit)', 'es_AR': '¡Listo para commitear! (como siempre en esta demo ;-) )', + 'es_MX': '¡Listo para hacer commit! (como siempre en ésta demo)', 'es_ES': '¡Listo para hacer un commit (como siempre en esta demo)!', 'pt_BR': 'Pronto para commitar! (como sempre neste demo ;-) )', 'gl' : '¡Praparado para facer un commit (como sempre nesta demo ;-) )!', @@ -229,6 +241,7 @@ exports.strings = { 'zh_CN': '快速提交。Coding 4ever!', 'zh_TW': '快速 commit。上啊熊!', 'es_AR': 'Otro commit más, y van...', + 'es_MX': 'Otro commit más, y van...', 'es_ES': 'Hagamos un commit. Atlanta, Georgia! Escucha WHATUPRG también.', 'pt_BR': 'Commitando.. Vai Timão!', 'gl' : 'Mesturando.. ¡Alá imos!', @@ -245,6 +258,7 @@ exports.strings = { 'de_DE': 'Bereits aktuell!', 'fr_FR': 'Déjà à jour', 'es_AR': 'Estás en la versión más reciente', + 'es_MX': 'Actualizado en la versión más reciente.', 'es_ES': 'Ya actualizado con la versión más reciente.', 'pt_BR': 'Já estamos na versão mais recente!', 'gl' : 'Xa estamos actualizados ca versión máis recente', @@ -263,6 +277,7 @@ exports.strings = { 'zh_TW': '你的 origin 分支已經失去了與 remote 遠端分支的同步,所以無法執行 fetch 命令', 'de_DE': 'Dein origin Branch ist nicht auf dem Stand des Remote Branches und fetch kann nicht ausgeführt werden', 'es_AR': 'Tu rama origin está desincronizada con la rama remota, por lo que no se puede hacer el fetch', + 'es_MX': 'Tu rama origin está desincronizada con la rama remota, por lo que no se puede hacer el fetch', 'es_ES': 'Tu rama origin no está sicronizada con la rama remota, así que el fetch no se puede realizar.', 'pt_BR': 'O fetch não pode ser realizado pois o ramo de origem está fora de sincronia com o ramo remoto', 'gl' : 'O fetch non pode ser realizado xa que a rama de orixe non está sincronizada ca rama remota', @@ -280,6 +295,7 @@ exports.strings = { 'zh_TW': '遠端倉庫與你的本地倉庫產生了分歧,故此上傳操作無法通過簡單地快進實現(因此你的 push 被拒絕了)。請 pull 下來遠端裡最新的更改,與本地合併之後再試一次。你可以通過 git pull 或 git pull --rebase 實現。', 'de_DE': 'Das entfernte Repository weicht von deinem lokalen Repository ab, daher können deine Änderungen nicht mit einem einfachen fast forward hochgeladen werden (und daher ist dein push abgelehnt worden). Bitte pull erst die neuen Änderungen in das lokale Repository, integriere sie in den Branch und versuch es nochmal. Das kannst du mit git pull oder git pull --rebase machen', 'es_AR': 'El repositorio remoto divergió de tu repositorio local, por lo que subir tus cambios no es un simple fast forward (y por eso se rechazó tu push). Por favor, hacé pull de los nuevos cambios en el repositorio remoto, incorporalos a esta rama y probá de nuevo. Podés hacerlo con git pull o git pull --rebase', + 'es_MX': 'El repositorio remoto divergió de tu repositorio local, por lo que subir tus cambios no es un simple fast forward (y por eso se rechazó tu push). Por favor, hacé pull de los nuevos cambios en el repositorio remoto, incorporalos a esta rama y prueba de nuevo. Puedes hacerlo con `git pull` o `git pull --rebase`', 'es_ES': 'El repositorio remoto se ha desviado del repositorio local. Subir cambios no es un avance en cámara rápida (por eso fue rechazado tu push). Por favor haz pull para descargar los cambios en el repositorio remoto para que los incorpores en la rama actual. Los cambios se pueden hacer pull con el comando "git pull" o "git pull --rebase"', 'pt_BR': 'O repositório remoto divergiu do repositório local, então enviar suas mudanças não é um simples fast forward (e por isso seu push foi rejeitado). Por favor, faça pull das novas mudanças do repositório remoto, incorpore-os a este ramo, e tente novamente. Você pode fazê-lo com git pull ou git pull --rebase', 'gl' : 'O repositorio remoto diverxe do teu repositorio local. Subir os cambios non é un fast-forward (avance rápido) e por iso foi rechazado o teu push. Por favor, fai un pull dos novos cambios do repositorio remoto e inclúeos na túa rama actual. Os cambios pódense facer co comando "git pull" ou "git pull --rebase"', @@ -297,6 +313,7 @@ exports.strings = { 'zh_TW': '你不能在遠端分支上執行這個命令呀。', 'de_DE': 'Du kannst diesen Befehl nicht auf einem Remote Branch ausführen', 'es_AR': 'No podés ejecutar ese comando en una rama remota', + 'es_MX': 'No puedes ejecutar ese comando en una rama remota', 'es_ES': 'No puedes ejecutar ese comando en una rama remota', 'pt_BR': 'Você não pode executar esse comando em um ramo remoto', 'gl' : 'Non podes executar ese comando nunha rama remota', @@ -314,6 +331,7 @@ exports.strings = { 'zh_TW': '該命令需要一個 origin', 'de_DE': 'Für diesen Befehl wird origin benötigt', 'es_AR': 'Necesitás un origen para ese comando', + 'es_MX': 'Se necesita un origen para ese comando', 'es_ES': 'Se requiere un origen para ese comando.', 'pt_BR': 'É necessário informar uma origem para esse comando', 'gl' : 'É necesario informar unha orixe para ese comando', @@ -331,6 +349,7 @@ exports.strings = { 'zh_TW': 'origin 遠端已存在。你不能重複創建', 'de_DE': 'origin existiert bereits! Du kannst es nicht nochmal anlegen', 'es_AR': '¡Ya existe el origen! No podés crear uno nuevo', + 'es_MX': '¡Ya existe un origen! No puedes crear uno nuevo', 'es_ES': '¡Ya existe un origen! No puedes crearlo de nuevo.', 'pt_BR': 'A origem já existe! Você não pode criar uma nova', 'gl' : 'A orixe xa existe! Non podes crear unha nova', @@ -350,6 +369,7 @@ exports.strings = { 'zh_CN': '你不能删除主分支(master),或者你当前所在的分支,或者其它连分支也不是的东西。', 'zh_TW': '你不能刪除 master branch,或者你當前所在的 branch,或者其它連 branch 都不是的東西。', 'es_AR': 'No podés borrar la rama master, la rama en la que estás, o cosas que no son ramas', + 'es_MX': 'No puedes borrar la rama master, la rama en la que estás, o cosas que no son ramas', 'es_ES': 'No puedes eliminar la rama master, la rama en que estás, o cosas que no son ramas.', 'pt_BR': 'Você não pode apagar o ramo master, nem o ramo em que você está, nem coisas que não sejam ramos', 'gl' : 'Non podes borrala rama master, nin a rama na que ti estás, nin cousas que non sexan ramas', @@ -368,6 +388,7 @@ exports.strings = { 'zh_CN': '合并 {target} 到 {current}', 'zh_TW': '將 {target} 併入 {current}', 'es_AR': 'Mergear {target} a {current}', + 'es_MX': 'Mergear {target} a {current}', 'es_ES': 'Incorporar {target} en {current}', 'pt_BR': 'Merge de {target} em {current}', 'gl' : 'Merge de {target} en {current}', @@ -386,6 +407,7 @@ exports.strings = { 'zh_CN': '没有可以 rebase 的提交记录!可能是合并提交,或者已经 rebase 过了。', 'zh_TW': '沒有需要 rebase 的 commit!每個都是一個 merge commit 或者修改已經被寫入了', 'es_AR': '¡No hay commits para rebasear! Son todos commits de merge o cambios ya aplicados', + 'es_MX': '¡No hay commits para hacer rebase! Todo es un merge commit o cambios ya aplicados', 'es_ES': '¡No hay commits para hacer rebase! Todo es un merge commit o cambios ya hecho.', 'pt_BR': 'Não há commits para o rebase! São todos commits de merge ou mudanças já aplicadas', 'gl' : '¡Non hai commits para o rebase! Son todos commits de merge ou cambios xa aplicados', @@ -404,6 +426,7 @@ exports.strings = { 'zh_CN': '什么也没发生...', 'zh_TW': '沒什麼事情要做...', 'es_AR': 'Nada para hacer...', + 'es_MX': 'Nada para hacer...', 'es_ES': 'Nada para hacer...', 'pt_BR': 'Nada a ser feito...', 'gl' : 'Nada para facer...', @@ -422,6 +445,7 @@ exports.strings = { 'zh_CN': '快速前进...', 'zh_TW': '快速前進...', 'es_AR': 'Fast forwardeando...', + 'es_MX': 'Avanzando rápidamente (Fast forwarding)...', 'es_ES': 'Avanzando rápidamente...', 'pt_BR': 'Fast forward...', 'gl' : 'Fast forward...', @@ -440,6 +464,7 @@ exports.strings = { 'zh_CN': '分支已经是最新啦', 'zh_TW': 'branch 已經是最新啦', 'es_AR': 'Rama actualmente actualizada', + 'es_MX': 'La rama ya se ha actualizado.', 'es_ES': 'La rama ya se ha actualizado.', 'pt_BR': 'Ramo já atualizado', 'gl' : 'Rama xa actualizada', @@ -458,6 +483,7 @@ exports.strings = { 'zh_CN': '引用 {ref} 不存在。', 'zh_TW': '索引 {ref} 不存在,或者找不到。', 'es_AR': 'La referencia {ref} no existe o es desconocida', + 'es_MX': 'La referencia {ref} no existe o es desconocida', 'es_ES': 'La referencia {ref} no existe o es desconocida', 'pt_BR': 'A referência {ref} não existe ou é desconhecida', 'gl' : 'A referencia {ref} non existe ou é descoñecida', @@ -476,6 +502,7 @@ exports.strings = { 'zh_CN': '{commit} 提交并没有 {match}', 'zh_TW': 'commit {commit} 並沒有 {match}', 'es_AR': 'El commit {commit} no tiene un {match}', + 'es_MX': 'El commit {commit} no tiene un {match}', 'es_ES': 'El commit {commit} no tiene un {match}', 'pt_BR': 'O commit {commit} não tem um {match}', 'gl' : 'O commit {commit} non ten un {match}', @@ -494,6 +521,7 @@ exports.strings = { 'zh_CN': '警告!现在是分离 HEAD 状态', 'zh_TW': '注意喔!現在的狀態是分離 Head', 'es_AR': '¡Cuidado! Modo de detached HEAD', + 'es_MX': '¡Cuidado! Modo de HEAD separado (detached HEAD)', 'es_ES': '¡Cuidado! Modo de HEAD separado (detached HEAD)', 'pt_BR': 'Cuidado! Modo Detached HEAD', 'gl' : '¡Coidado! Modo Detached HEAD', @@ -512,6 +540,7 @@ exports.strings = { 'zh_CN': '此程序中不需要添加文件', 'zh_TW': '此 demo 中不需要再加入檔案', 'es_AR': 'No es necesario hacer add a los archivos en esta demo', + 'es_MX': 'No es necesario agregar los archivos en ésta demo', 'es_ES': 'No es necesario agregar los archivos en esta demo', 'pt_BR': 'Não é necessário adicionar arquivos neste demo', 'gl' : 'Non é necesario incluír arquivos nesta demo', @@ -531,6 +560,7 @@ exports.strings = { 'zh_TW': '您指定了不相容或錯誤的選項', 'es_ES': 'Las opciones que especificaste son incompatibles o incorrectas.', 'es_AR': 'No es necesario hacer add a los archivos en esta demo', + 'es_MX': 'No es necesario hacer add a los archivos en ésta demo', 'pt_BR': 'As opções que você especificou são incompatíveis ou incorretas', 'gl' : 'As opcións que especificaches son incompatibles ou incorrectas', 'fr_FR': 'Les options que vous avez spécifiées sont incompatibles ou incorrectes', @@ -548,6 +578,7 @@ exports.strings = { 'zh_CN': '{commit} 提交已经存在于你的改动集里,已忽略!', 'zh_TW': 'commit {commit} 已經在你的修改的集合裡,正在停止!', 'es_AR': 'El commit {commit} ya existe en tus cambios, ¡abortando!', + 'es_MX': 'El commit {commit} ya existe en tus cambios, ¡abortando!', 'es_ES': 'El commit {commit} ya existe en tus cambios, ¡abortando!', 'pt_BR': 'O commit {commit} já existe nas suas mudanças, abortando!', 'gl' : 'O commit {commit} xa existe nos seus cambios, ¡abortando!', @@ -566,6 +597,7 @@ exports.strings = { 'zh_CN': '不能在分离的 HEAD 里重置!用 checkout 吧', 'zh_TW': '不能在分離 HEAD 的狀態中重來!用 checkout 來移動吧', 'es_AR': 'No podés hacer reset en el modo detached. Usá checkout si querés moverte', + 'es_MX': 'No puedes hacer reset en el modo separado. Usa checkout si quieres moverte', 'es_ES': 'No puedes hacer reset en el modo separado. Usa checkout si quieres moverte.', 'pt_BR': 'Não se pode fazer reset no modo detached. Use checkout se quiser se mover', 'gl' : 'Non se pode facer reset no modo detached. Use checkout se te queres mover', @@ -586,6 +618,7 @@ exports.strings = { 'zh_CN': '在本程序中默认的行为是 --hard 硬重置,可以尽情省略掉那个选项以避免麻烦!但是要记录 Git 中默认的是 --mixed。', 'zh_TW': '預設的行為是 --hard reset,儘量省略掉那個選項吧!', 'es_AR': 'El comportamiento default es un --hard reset, sentite libre de omitir esa opción!', + 'es_MX': 'El comportamiento default es un --hard reset, siéntete libre de omitir esa opción!', 'es_ES': 'El comportamiento default para reajustes es --hard, pero siéntete libre de omitir esa ' + 'opción si te cansas de escribirla en nuestras lecciones. Recuerda quepor defecto el comportamiento en GitHub es --mixed.', 'pt_BR': 'O comportamento padrão é um reset --hard, fique livre para omitir essa opção!', @@ -610,6 +643,7 @@ exports.strings = { 'zh_CN': '没有添加、缓存文件的必要,所以该选项或者命令是不合法的。', 'zh_TW': '沒有加入、或者暫存 (staging) 文件的必要,所以改選項或者命令是不合法的。', 'es_AR': 'No existe el concepto de agregar/indexar cambios, así que esa opción o comando es inválido', + 'es_MX': 'No existe el concepto de agregar/indexar cambios, así que esa opción o comando es inválido', 'es_ES': 'No existe el concepto de agregar/indexar cambios, así que esa opción o comando es inválido.', 'pt_BR': 'Não existe o conceito de adicionar/indexar mudanças, de forma que essa opção ou comando é inválida', 'gl' : 'Non existe o concepto de agregar/indexar cambios, así que esa opción ou comando é inválido.', @@ -628,6 +662,7 @@ exports.strings = { 'zh_CN': '撤销 {oldCommit}:{oldMsg}', 'zh_TW': '還原 {oldCommit}:{oldMsg}', 'es_AR': 'Revirtiendo {oldCommit}: {oldMsg}', + 'es_MX': 'Revirtiendo {oldCommit}: {oldMsg}', 'es_ES': 'Volviendo a {oldCommit}: {oldMsg}', 'pt_BR': 'Revertendo {oldCommit}: {oldMsg}', 'gl' : 'Revertindo {oldCommit}: {oldMsg}', @@ -646,6 +681,7 @@ exports.strings = { 'zh_CN': '{what} 期望最多 {upper} 个参数', 'zh_TW': '{what} 期望最多 {upper} 個參數', 'es_AR': 'Espero como máximo {upper} parámetros para {what}', + 'es_MX': 'Espero como máximo {upper} parámetros para {what}', 'es_ES': 'Espero al máximo {upper} parámetros para {what}.', 'pt_BR': 'Espero no máximo {upper} parâmetros para {what}', 'gl' : 'Espero ó máximo {upper} parámetros para {what}', @@ -664,6 +700,7 @@ exports.strings = { 'zh_CN': '{what} 期望最少 {lower} 个参数', 'zh_TW': '{what} 期望最少 {lower} 個參數', 'es_AR': 'Espero al menos {lower} parámetros para {what}', + 'es_MX': 'Espero al menos {lower} parámetros para {what}', 'es_ES': 'Espero al menos {lower} parámetros para {what}.', 'pt_BR': 'Espero pelo menos {lower} parâmetros para {what}', 'gl' : 'Agardo polo menos {lower} parámetros para {what}', @@ -682,6 +719,7 @@ exports.strings = { 'zh_CN': '该命令不接收参数', 'zh_TW': '該指令不接受一般參數', 'es_AR': 'Ese comando no acepta parámetros comunes', + 'es_MX': 'Ese comando no acepta parámetros comunes', 'es_ES': 'Ese comando no acepta parámetros generales.', 'pt_BR': 'Este comando não aceita parâmetros gerais', 'gl' : 'Este comando non acepta parámetros xeráis', @@ -700,6 +738,7 @@ exports.strings = { 'zh_CN': '拷贝下面的树字符串', 'zh_TW': '複製下方的樹狀字串', 'es_AR': 'Copiá el código de acá abajo', + 'es_MX': 'Copia el código que se encuentra debajo', 'es_ES': 'Copia el código que sigue.', 'pt_BR': 'Copie o código abaixo', 'gl' : 'Copie o código abaixo', @@ -719,6 +758,7 @@ exports.strings = { 'zh_CN': '学习 Git 分支', 'zh_TW': '學習 git 分支', 'es_AR': 'Aprendé a Branchear en Git', + 'es_MX': 'Aprende Git Branching', 'es_ES': 'Aprende Git Branching', 'pt_BR': 'Learn Git Branching', 'gl' : 'Aprende Git Branching', @@ -737,6 +777,7 @@ exports.strings = { 'zh_CN': '选择一关', 'zh_TW': '選擇其中一關', 'es_AR': 'Seleccioná un nivel', + 'es_MX': 'Selecciona un nivel', 'es_ES': 'Selecciona un nivel', 'pt_BR': 'Selecione um nível', 'gl' : 'Selecciona un nivel', @@ -785,6 +826,7 @@ exports.strings = { 'zh_CN': '抱歉,为了显示的需要,我们需要一个短些的分支名称。您使用的名称将被截断到9个字符,即 "{branch}"', 'zh_TW': '抱歉,為了顯示的需要,我們需要一個短一點的 branch 名稱。您使用的將會被截斷到剩下9個字元,即"{branch}"', 'es_AR': 'Perdón, necesitamos mantener los nombres de los branches cortos para visualizarlos. El nombre de tu rama se truncó a 9 caracteres, resultando en "{branch}"', + 'es_MX': 'Perdón, necesitamos mantener los nombres de las ramas cortos para visualizarlos. El nombre de tu rama se truncó a 9 caracteres, resultando en "{branch}"', 'es_ES': 'Perdón, necesitamos mantener los nombres de las ramas cortos para visualizarlos. El nombre de tu rama se truncó a 9 caracteres, resultando en "{branch}"', 'pt_BR': 'Desculpe, precisamos manter os nomes dos ramos curtos para visualizá-los. O nome do seu ramo foi truncado para 9 caracteres, resultando em "{branch}"', 'gl' : 'Desculpe, precisamos manter os nomes das ramas curtas para poder velas. O nome da súa rama foi truncada a 9 letras, resultado en "{branch}"', @@ -803,6 +845,7 @@ exports.strings = { 'zh_CN': '不能给分支起这个名字 "{branch}"', 'zh_TW': '不能给 branch 起這個名字 "{branch}"', 'es_AR': 'El nombre "{branch}" no está permitido para los branches', + 'es_MX': 'El nombre "{branch}" está prohibido para nombrar una rama', 'es_ES': 'El nombre "{branch}" es prohibido para nombrar una rama.', 'pt_BR': 'Um ramo não pode ser chamado de "{branch}"!', 'gl' : 'Unha rama non pode ser chamada "{branch}', @@ -820,6 +863,7 @@ exports.strings = { 'zh_CN': '该标签名 “{tag}” 不被接受。', 'zh_TW': '該標籤名 “{tag}” 不被接受。', 'es_AR': 'El nombre "{tag}" no está permitido para los tags', + 'es_MX': 'El nombre "{tag}" está prohibido para nombrar un tag', 'es_ES': 'El nombre "{tag}" es prohibido para nombrar un tag.', 'pt_BR': 'Uma tag não pode ser chamada de "{tag}"!', 'gl' : 'Unha etiqueta non pode ser chamada "{tag}"', @@ -839,6 +883,7 @@ exports.strings = { 'zh_CN': '不支持选项 "{option}"', 'zh_TW': '不支援的選項 "{option}"', 'es_AR': 'La opción {option} no está soportada', + 'es_MX': 'La opción {option} no es compatible con ésta demo', 'es_ES': 'La opción {option} no compatible con esta demo.', 'pt_BR': 'A opção {option} não é suportada', 'gl' : 'A opción {option} non está soportada', @@ -857,6 +902,7 @@ exports.strings = { 'zh_CN': 'git <命令> [<参数>]', 'zh_TW': 'git <指令> [<參數>]', 'es_AR': 'git []', + 'es_MX': 'git []', 'es_ES': 'git []', 'pt_BR': 'git []', 'gl' : 'git []', @@ -875,6 +921,7 @@ exports.strings = { 'zh_CN': '支持的命令有:', 'zh_TW': '支援的指令有:', 'es_AR': 'Comandos soportados:', + 'es_MX': 'Comandos compatibles:', 'es_ES': 'Comandos compatibles:', 'pt_BR': 'Comandos suportados:', 'gl' : 'Comandos soportados:', @@ -893,6 +940,7 @@ exports.strings = { 'zh_CN': '使用:', 'zh_TW': '用法:', 'es_AR': 'Uso:', + 'es_MX': 'Uso:', 'es_ES': 'Uso:', 'pt_BR': 'Uso:', 'gl' : 'Uso:', @@ -911,6 +959,7 @@ exports.strings = { 'zh_CN': 'Git 版本 PCOTTLE.1.0', 'zh_TW': 'Git 版本 PCOTTLE.1.0', 'es_AR': 'Git Versión PCOTTLE.1.0', + 'es_MX': 'Git Versión PCOTTLE.1.0', 'es_ES': 'Git Versión PCOTTLE.1.0', 'pt_BR': 'Git versão PCOTTLE.1.0', 'gl' : 'Git versión PCOTTLE.1.0', @@ -929,6 +978,7 @@ exports.strings = { 'zh_CN': '翻转树中...', 'zh_TW': '翻轉樹中...', 'es_AR': 'Invirtiendo el árbol...', + 'es_MX': 'Invirtiendo el árbol...', 'es_ES': 'Invirtiendo el árbol...', 'pt_BR': 'Invertendo a árvore...', 'gl' : 'Invirtindo a árbore...', @@ -947,6 +997,7 @@ exports.strings = { 'zh_CN': '正在刷新树结构...', 'zh_TW': '正在更新樹狀結構...', 'es_AR': 'Refrezcando el árbol...', + 'es_MX': 'Actualizando el árbol...', 'es_ES': 'Actualizando el árbol...', 'pt_BR': 'Atualizando a árvore...', 'gl' : 'Actualizando a árbore...', @@ -965,6 +1016,7 @@ exports.strings = { 'zh_CN': '语言更改为 {locale}', 'zh_TW': '語系設為 {locale}', 'es_AR': 'Localización actualizada a {locale}', + 'es_MX': 'Idioma actualizado a {locale}', 'es_ES': 'Idioma puesto a {locale}', 'pt_BR': 'Língua trocada para {locale}', 'gl' : 'Cambiado o idioma a {locale}', @@ -983,6 +1035,7 @@ exports.strings = { 'zh_CN': '语言重置为默认的 {locale}', 'zh_TW': '還原為預設語系 {locale}', 'es_AR': 'Localización vuelta al default, que es {locale}', + 'es_MX': 'Idioma reestablecido al default, que es {locale}', 'es_ES': 'Idioma reajustado a su valor por defecto ({locale})', 'pt_BR': 'Língua retornada para a padrão, que é {locale}', 'gl' : 'Lingua reaxustada ó seu valor por defecto {locale}', @@ -1001,6 +1054,7 @@ exports.strings = { 'zh_CN': '请使用以下命令以了解更多:', 'de_DE': 'Bitte benutze einen der folgenden Befehle um mehr Informationen zu bekommen:', 'es_AR': 'Usá alguno de estos comandos para tener más información:', + 'es_MX': 'Por favor, utilice alguno de estos comandos para tener más información:', 'es_ES': 'Por favor usa uno de los siguientes comandos para más información:', 'pt_BR': 'Use algum destes comandos para ter mais informações:', 'gl' : 'Usa algún destes comandos para ter máis información:', @@ -1019,6 +1073,7 @@ exports.strings = { 'zh_CN': '该列表列出了所有可用的指令:', 'de_DE': 'Hier ist eine Liste aller verfügbaren Befehle:', 'es_AR': 'Esta es una lista de los comandos disponibles:', + 'es_MX': 'Esta es una lista de todos los comandos disponibles:', 'es_ES': 'Esta es una lista de todos los comandos disponibles:', 'pt_BR': 'Esta é uma lista dos comandos disponíveis:', 'gl' : 'Esta é unha lista dos comando dispoñibles:', @@ -1037,6 +1092,7 @@ exports.strings = { 'zh_CN': '目录切换到 "/directories/dont/matter/in/this/demo"', 'zh_TW': '目錄切換到 "/directories/dont/matter/in/this/demo"', 'es_AR': 'Directorio cambiado a "/los/directorios/no/importan/en/esta/demo"', + 'es_MX': 'Directorio cambiado a "/los/directorios/no/importan/en/esta/demo"', 'es_ES': 'Directorio cambiado a "/los/directorios/no/importan/en/esta/demo"', 'pt_BR': 'Diretório mudado para "/diretorios/nao/importam/neste/demo"', 'gl' : 'Directorio cambiado a "/os/directorios/non/importan/nesta/demo"', @@ -1055,6 +1111,7 @@ exports.strings = { 'zh_CN': '在本程序中无须考虑文件问题.txt', 'zh_TW': 'DontWorryAboutFilesInThisDemo.txt (譯註:在 demo 裡不用擔心檔案)', 'es_AR': 'NoTePreocupesPorLosArchivosEnEstaDemo.txt', + 'es_MX': 'NoTePreocupesPorLosArchivosEnEstaDemo.txt', 'es_ES': 'NoTePreocupesPorLosArchivosEnEstaDemo.txt', 'pt_BR': 'NaoSePreocupeComNomesDeArquivoNesteDemo.txt', 'gl' : 'NonTePreocupesPolosCambiosNestaDemo.txt', @@ -1072,6 +1129,7 @@ exports.strings = { 'zh_CN': '无法在移动设备/平板上调出键盘 :( 请试试桌面版 :D', 'zh_TW': '無法在行動裝置上叫出鍵盤,請改用桌面版!', 'es_AR': 'LGB no puede recibir comandos en dispositivos móviles. Visitanos desde una desktop, ¡lo vale! :D', + 'es_MX': 'LGB no puede recibir comandos en dispositivos móviles. Visítanos en una computadora de escritorio u laptop, ¡Vale la pena! :D', 'es_ES': 'LGB no puede recibir comandos en dispositivos móviles. Visítanos en una computadora de escritorio, ¡lo vale! :D', 'pt_BR': 'Provavelmente você não vai conseguir digitar comandos no celular, neste caso tente acessar de um computador', 'gl' : 'LGB non pode recibir os comandos nos dispositivos móbiles. Visítanos dende un ordenador de escritorio, ¡paga a pena! :D', @@ -1090,6 +1148,7 @@ exports.strings = { 'zh_CN': '与你的好友分享提交树!他们可以用 "import tree" 加载它', 'zh_TW': '與你的好友分享這棵樹!他們可以用 "import tree" 來載入它', 'es_AR': '¡Compartí este árbol con amigos! Pueden cargarlo con "import tree"', + 'es_MX': '¡Comparte éste árbol con amigos! Pueden cargarlo con "import tree"', 'es_ES': '¡Comparte este árbol con amigos! Pueden cargarlo con "import tree"', 'pt_BR': 'Compartilhe esta árvore com seus amigos! Eles podem carregá-la com "import tree"', 'gl' : '¡Comparte esta árbore cos teus amigos! Eles poden cargalo con "import tree"', @@ -1108,6 +1167,7 @@ exports.strings = { 'zh_CN': '在下边粘贴一个 JSON 串', 'zh_TW': '在下方貼上一串 JSON', 'es_AR': '¡Pegá un blob JSON abajo!', + 'es_MX': '¡Pega un blob JSON abajo!', 'es_ES': '¡Pega un blob JSON abajo!', 'pt_BR': 'Cole o JSON abaixo!', 'gl' : 'Pega un JSON abaixo!', @@ -1126,6 +1186,7 @@ exports.strings = { 'zh_CN': '解决列表已重置,您现在可以从头开始了', 'zh_TW': '過關地圖已經重新設置,您現在從零開始了', 'es_AR': 'El mapa resuelto fue eliminado, estás arrancando desde un estado limpio', + 'es_MX': 'El mapa resuelto fue eliminado, estás empezando desde un estado limpio', 'es_ES': 'El mapa resuelto fue eliminado, estás empezando de un estado limpio.', 'pt_BR': 'Mapa de resolvidos descartado, você está começando com ficha limpa!', 'gl' : 'O mapa resolto foi eliminado, estás arrancando dende un estado limpo.', @@ -1144,6 +1205,7 @@ exports.strings = { 'zh_CN': '您没在关卡中而是在沙盒中,要开始关卡请输入 "levels"', 'zh_TW': '您沒在關卡中!您在沙盒中,要開始關卡請輸入 "levels"', 'es_AR': '¡No estás en un nivel! Estás en el sandbox, comenzá un nivel usando "levels"', + 'es_MX': '¡No estás en un nivel! Estás en el sandbox, comienza un nivel con "levels"', 'es_ES': '¡No estás en un nivel! Estás en el sandbox, comienza un nivel con "levels"', 'pt_BR': 'Você não está em um nível! Você está no sandbox, comece um nível com "levels"', 'gl' : '¡Non estás en ningún nivel! Estás nunha caixa de arena, comeza un nivel usando "levels"', @@ -1162,6 +1224,7 @@ exports.strings = { 'zh_CN': '没找到 id 为 "{id}" 的关卡!打开关卡选择框', 'zh_TW': '找不到 id 為 "{id}" 的關卡!開啟關卡選擇視窗', 'es_AR': 'No se encontró ningún nivel {id}. Abriendo la vista de selección de niveles...', + 'es_MX': 'No se encontró ningún nivel {id}. Abriendo la vista de selección de niveles...', 'es_ES': 'No se encontró ningún nivel {id}. Abriendo la vista de selección de niveles...', 'pt_BR': 'O nível "{id}" não existe! Abrindo uma caixa de seleção de nível', 'gl' : 'O nivel "{id}" non existe! Abrindo unha caixa de seleción de nivel', @@ -1180,6 +1243,7 @@ exports.strings = { 'zh_CN': '还没有什么可以撤销', 'zh_TW': '還沒有什麼可以取消', 'es_AR': 'No hay comandos que deshacer', + 'es_MX': 'No hay comandos para deshacer', 'es_ES': 'No hay comandos que deshacer', 'pt_BR': 'Você já desfez tudo!', 'gl' : 'Nonn hai comandos que desfacer', @@ -1198,6 +1262,7 @@ exports.strings = { 'zh_CN': '你已经解决了本关,输入 "levels" 尝试其他关卡,或者输入 "sandbox" 回到沙盒中', 'zh_TW': '你已經解决了本關,輸入 "levels" 嘗試其他關卡,或者輸入 "sandbox" 回到沙盒中', 'es_AR': 'Ya resolviste este nivel, probá otros usando "levels" o volvé al sandbox usando "sandbox"', + 'es_MX': 'Ya resolviste este nivel, prueba otros usando "levels" o vuelve al sandbox usando "sandbox"', 'es_ES': 'Ya resolviste este nivel, prueba otros usando "levels" o vuelve al sandbox usando "sandbox"', 'pt_BR': 'Você já resolveu este nível, tente outros com "levels" ou volte ao sandbox com "sandbox"', 'gl' : 'Xa resolviches este nivel, proba outros usando "levels" ou volve á caixa de area con "sandbox"', @@ -1231,6 +1296,7 @@ exports.strings = { 'zh_CN': '本关不允许使用该命令!', 'zh_TW': '本關禁止使用該 git 指令!', 'es_AR': '¡Ese comando de git está deshabilitado para este nivel!', + 'es_MX': '¡Ese comando de git está deshabilitado para éste nivel!', 'es_ES': '¡Ese comando de git está deshabilitado para este nivel!', 'pt_BR': 'Achou que seria fácil assim? Desabilitamos esse comando durante este nível, só para dificultar ;-)', 'gl' : '¡Ese comando de git está deshabilitado para este nivel!', @@ -1249,6 +1315,7 @@ exports.strings = { 'zh_CN': '这是一个关卡定义 JSON !您可以分享它或者发到我的 GitHub 上', 'zh_TW': '這是本關的 JSON!您可以分享給別人,或是送到 GitHub 上給我', 'es_AR': 'Este es el JSON de este nivel. Compartilo con quien quieras o mandámelo por GitHub', + 'es_MX': 'Este es el JSON de éste nivel. Compártelo con quien quieras o mándamelo por GitHub.', 'es_ES': 'Este es el JSON de este nivel. Compártelo con quien quieras o mandámelo por GitHub.', 'pt_BR': 'Aqui está o JSON para este nível! Compartilhe com alguém ou me envie pelo GitHub', 'gl' : 'Este é o JSON deste nivel. Comparteo con quen queiras ou mándao por GitHub', @@ -1267,6 +1334,7 @@ exports.strings = { 'zh_CN': '您还没有定义一开始的介绍,是否添加一个?', 'zh_TW': '尚未指定開始對話視窗,是否立即新增?', 'es_AR': 'No especificaste un mensaje de inicio, ¿querés agregar uno?', + 'es_MX': 'No especificaste un mensaje de inicio, ¿Quieres agregar uno?', 'es_ES': 'No especificaste un mensaje de inicio, ¿quieres agregar uno?', 'pt_BR': 'Você não especificou uma mensagem de início, quer colocar uma?', 'gl' : 'Non especificaches unha mensaxe de incio. ¿queres agregar un?', @@ -1285,6 +1353,7 @@ exports.strings = { 'zh_CN': '您还没有定义提示,是否添加一个?', 'zh_TW': '尚未指定提示,是否立即新增?', 'es_AR': 'No especificaste ninguna pista, ¿querés agregar alguna?', + 'es_MX': 'No especificaste ninguna pista, ¿Quieres agregar alguna?', 'es_ES': 'No especificaste ninguna pista, ¿quieres agregar alguna?', 'pt_BR': 'Você não especificou uma dica, quer colocar uma?', 'gl' : 'Ti non especificaches unha pista, ¿queres agregar algunha?', @@ -1303,6 +1372,7 @@ exports.strings = { 'zh_CN': '请输入关卡提示,如果没有请留空', 'zh_TW': '請輸入關卡提示,或者故意留空', 'es_AR': 'Ingresá una pista para este nivel, o dejalo en blanco si no querés incluir ninguna', + 'es_MX': 'Ingresa una pista para este nivel, o déjalo en blanco si no quieres incluir ninguna.', 'es_ES': 'Ingresa una pista para este nivel, o déjalo en blanco si no quieres incluir ninguna.', 'pt_BR': 'Colocque uma dica para este nível, ou deixe em branco se não quiser incluir', 'gl' : 'Ingresa unha pista para este nivel, ou déixao en branco se non a queres incluír.', @@ -1321,6 +1391,7 @@ exports.strings = { 'zh_CN': '请输入关卡名称', 'zh_TW': '請輸入關卡名稱', 'es_AR': 'Ingresá el nombre del nivel', + 'es_MX': 'Ingresa el nombre del nivel', 'es_ES': 'Ingresa el nombre del nivel.', 'pt_BR': 'Coloque o nome do nível', 'gl' : 'Coloque o nome do nivel', @@ -1339,6 +1410,7 @@ exports.strings = { 'zh_CN': '你的解法是空的!! 可能是程序出错了', 'zh_TW': '您的解法是空的!這一定是哪裡出錯了', 'es_AR': '¡Tu solución está vacía! Algo hay que hacer', + 'es_MX': '¡Tu solución está vacía! Algo hay que hacer', 'es_ES': '¡Tu solución está vacía! Algo hay que hacer.', 'pt_BR': 'Sua solução está vazia! O aprendiz deveria ter que fazer alguma coisa', 'gl' : '¡Su solución está vacía! Algo haberá que facer.', @@ -1357,6 +1429,7 @@ exports.strings = { 'zh_CN': '定义开始点... 解决方法和目标会被新的替代', 'zh_TW': '正在定義起始點...先前定義的解法和目標會被覆蓋掉', 'es_AR': 'Estableciendo el punto de inicio... La solución y el objetivo serán sobreescritos si ya habían sido definidos', + 'es_MX': 'Estableciendo el punto de inicio... La solución y el objetivo serán sobreescritos si ya habían sido definidos', 'es_ES': 'Estableciendo el punto de inicio... La solución y el objetivo serán sobreescritos si ya habían sido definidos.', 'pt_BR': 'Esbelecendo o ponto de início... a solução e o objetivo serão sobrescritos caso já existirem', 'gl' : 'Establecendo o punto de inicio... A solución e o obxectivo serán sobreescritos se xa foron definidos.', @@ -1375,6 +1448,7 @@ exports.strings = { 'zh_CN': '您正在关卡中,这里有多种形式的帮助,请选择 "help level" (关卡帮助)或 "help general" (一般帮助)', 'zh_TW': '您正在進行關卡中,這裡有多種不同型式的幫助,請選擇 "help level" 來了解這個關卡,或者是選擇 "help general" 來學習如何使用 Learn GitBranching,或者是選擇 "objective" 來學習如何解決這個關卡', 'es_AR': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elegí entre "help level" para aprender algo más sobre esta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.', + 'es_MX': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elige entre "help level" para aprender algo más sobre ésta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.', 'es_ES': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elige "help level" para aprender más sobre esta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.', 'pt_BR': 'Você está em um nível, então há vários tipos de ajuda. Selecione "help level" para aprender mais sobre esta lição, "help general" para aprender a usar o Learn GitBranching, ou "objective" ver como resolver o nível.', 'gl' : 'Estás nun nivel, entón hai varios tipos de axuda. Selecione "help level" para aprender máis sobre esta lección, "gelp general" para aprender a usar o Learn Git Branching, ou "objective" para ver como resolver o nivel.', @@ -1393,6 +1467,7 @@ exports.strings = { 'zh_CN': '您正在进行关卡构建中,这里有多种形式的帮助,请选择 "help general" (一般帮助)或 "help builder" (关卡构建帮助)', 'zh_TW': '您正在進行關卡構建中,這裡有多種不同型式的幫助,請選擇 "help general" (一般幫助)或 "help builder" (製造關卡的幫助)', 'es_AR': 'Estás en el constructor de niveles, por lo que hay varios tipos de ayuda. Elegí entre "help general" para ayuda sobre Learn GitBranching y "help builder" para ayuda sobre el constructor de niveles', + 'es_MX': 'Estás en el constructor de niveles, por lo que hay varios tipos de ayuda. Elige "help general" para ayuda sobre Learn GitBranching y "help builder" para ayuda sobre el constructor de niveles', 'es_ES': 'Estás en un constructor de niveles, por lo que hay varios tipos de ayuda. Elige "help general" para ayuda sobre Learn GitBranching o "help builder" para ayuda sobre el constructor de niveles', 'pt_BR': 'Você está no construtor de nívels, então há vários tipos de ajuda. Selecione "help general" ou "help builder"', 'gl' : 'Estás no constructor de niveis, polo que hai varios tipos de axuda. Elixe "help general" ou "help builder"', @@ -1414,6 +1489,7 @@ exports.strings = { 'pt_BR': 'Mostrar objetivo', 'gl' : 'Amosar obxectivo', 'es_AR': 'Mostrar objetivo', + 'es_MX': 'Mostrar objetivo', 'es_ES': 'Mostrar objetivo', 'ja' : 'ゴールを表示', 'ru_RU': 'Цель уровня', @@ -1433,6 +1509,7 @@ exports.strings = { 'pt_BR': 'Ocultar objetivo', 'gl' : 'Ocultar obxectivo', 'es_AR': 'Ocultar objetivo', + 'es_MX': 'Ocultar objetivo', 'es_ES': 'Ocultar objetivo', 'ja' : 'ゴールを隠す', 'ru_RU': 'Спрятать цель', @@ -1479,6 +1556,7 @@ exports.strings = { 'zh_CN': '目标', 'zh_TW': '目標', 'es_AR': 'Objetivo a cumplir', + 'es_MX': 'Objetivo a cumplir', 'es_ES': 'Objetivo a cumplir', 'pt_BR': 'Objetivo a cumprir', 'gl' : 'Obxectivo a cumprir', @@ -1497,6 +1575,7 @@ exports.strings = { 'fr_FR': 'Note: Dans ce niveau on ne doit faire de git checkout que sur la branche master. Les autres branches représentées ici (entourées d\'un cadre en tirets) doivent être utilisées uniquement comme références. Comme toujours, vous pouvez cacher cette fenêtre avec "Cacher les objectifs"', 'de_DE': 'Hinweis: In diesem Level wird nur der Branch master geprüft. Die anderen Branches dienen nur als Vergleichsbasis (als gestrichelte Bezeichner dargestellt). Wie immer kannst du diese Meldung mit "hide goal" ausblenden', 'es_AR': 'Nota: Sólo la rama master va a ser chequeada en este nivel. Las otras ramas sólo son para referencia. Como siempre, podés ocultar este mensaje con "hide goal"', + 'es_MX': 'Nota: Sólo la rama master va a ser inspeccionada en este nivel. Las otras ramas sólo son para referencia (etiquetados abajo con guión). Como siempre, puedes ocultar éste mensaje con "hide goal"', 'es_ES': 'Nota: Sólo la rama master va a ser inspeccionado en este nivel. Las otras ramas sólo son para referencia (etiquetados abajo con guion). Siempre puedes ocultar este mensaje con "hide goal."', 'pt_BR': 'Nota: Apenas o ramo master será verificado neste nível. Os outros ramos (dentro das caixas clareadas) são somente para referência. Como sempre, você pode ocultar esta janela com "hide goal"', 'gl': 'Nota: Só a rama master será verificada neste nivel. As outras ramas (dentro das caixas clareadas) son soamente de referencia. Coma sempre, podes ocultar está ventá con "hide goal"', @@ -1517,6 +1596,7 @@ exports.strings = { 'zh_CN': '你可以通过 "hide goal" 命令关闭这个窗口', 'zh_TW': '你可以透過 "hide goal" 關閉這個視窗', 'es_AR': 'Podés ocultar esta ventana con "hide goal"', + 'es_MX': 'Puedes ocultar esta ventana con "hide goal"', 'es_ES': 'Puedes ocultar esta ventana con "hide goal."', 'pt_BR': 'Você pode ocultar esta janela com "hide goal"', 'gl' : 'Podes ocultar esta ventá con "hide goal"', @@ -1536,6 +1616,7 @@ exports.strings = { 'zh_CN': '你可以通过 "hide start" 命令关闭这个窗口', 'zh_TW': '你可以透過 "hide start" 關閉這個視窗', 'es_AR': 'Podés ocultar esta ventana con "hide start"', + 'es_MX': 'Puedes ocultar ésta ventana con "hide start"', 'es_ES': 'Puedes ocultar esta ventana con "hide start."', 'pt_BR': 'Você pode ocultar esta janela com "hide start"', 'gl' : 'Podes ocultar esta ventá con "hide start"', @@ -1555,6 +1636,7 @@ exports.strings = { 'zh_CN': '关卡生成器', 'zh_TW': '關卡產生器', 'es_AR': 'Constructor de niveles', + 'es_MX': 'Constructor de niveles', 'es_ES': 'Constructor de niveles', 'pt_BR': 'Construtor de níveis', 'gl' : 'Constructor de nivéis', @@ -1574,6 +1656,7 @@ exports.strings = { 'zh_CN': '这个关卡没有介绍!', 'zh_TW': '這關沒有介紹!', 'es_AR': '¡No hay mensaje de inicio para este nivel!', + 'es_MX': '¡No hay mensaje de inicio para éste nivel!', 'es_ES': '¡No hay mensaje de inicio para este nivel!', 'pt_BR': 'Não há mensagem de início para este nível!', 'gl' : '¡Non hai mensaxe de inicio para este nivel!', @@ -1593,6 +1676,7 @@ exports.strings = { 'zh_CN': "呃……,这关好像没有提示 :-/", 'zh_TW': "嗯‧‧‧這關沒有提示 :-/", 'es_AR': 'Mmm... Pareciera no haber pistas para este nivel :-/', + 'es_MX': 'Mmm... Parece que no hay pistas para éste nivel. :-/', 'es_ES': 'Mmm... Parece que no hay pistas para este nivel. :-/', 'pt_BR': 'Hmm, não existe nenhuma pista para este nível :-/', 'gl' : 'Hmm, non existe ningunha pista para este nivel :-/', @@ -1612,6 +1696,7 @@ exports.strings = { 'zh_CN': '还没翻译 {key} :( 请在 GitHub 上贡献您的翻译!', 'zh_TW': '還沒翻譯 {key} :( 請在 GitHub 上貢獻您的翻譯!', 'es_AR': 'Aún no hay traducción para {key} :( ¡Metete en GitHub y sugerí una! :)', + 'es_MX': 'Aún no existe una traducción para {key}. :( ¡Métete en GitHub y sugiere una! :)', 'es_ES': 'Aún no hay traducción para {key}. :( ¡Métete en GitHub y sugiere una! :)', 'pt_BR': 'Não existe tradução para {key} :( Pule no GitHub e sugira uma! :)', 'gl' : 'Non existe tradución para {key} :( Axúdanos en GitHub e suxire unha! :)', @@ -1631,6 +1716,7 @@ exports.strings = { 'zh_CN': '这段对话还没有被翻译成您的语言 :( 欢迎在 GitHub 上贡献您的翻译!', 'zh_TW': '這段對話尚未翻成您的語言 :( 歡迎到 GitHub 貢獻翻譯!', 'es_AR': 'Este mensaje o texto aún no fue traducido a tu idioma :( ¡Metete en GitHub y ayudanos a traducirlo!', + 'es_MX': 'Este mensaje o texto aún no ha sido traducido en tu idioma. :( ¡Métete en GitHub y ayúdanos a traducirlo!', 'es_ES': 'Este mensaje o texto aún no fue traducido a tu idioma. :( ¡Métete en GitHub y ayúdanos a traducirlo!', 'pt_BR': 'Esta mensagem ou texto não foi traduzida para Português :( Ajude-nos a traduzir no GitHub!', 'gl' : 'Esta mensaxe ou texto non foi traducida ó teu idioma :( Axúdanos a traducir a web en GitHub, é moi doado!', diff --git a/src/js/react_views/IntlHelperBarView.jsx b/src/js/react_views/IntlHelperBarView.jsx index c166e016..b345920d 100644 --- a/src/js/react_views/IntlHelperBarView.jsx +++ b/src/js/react_views/IntlHelperBarView.jsx @@ -66,6 +66,12 @@ class IntlHelperBarView extends React.Component{ onClick: function() { this.fireCommand('locale es_AR; levels'); }.bind(this) + }, { + text: 'mexicano', + testID: 'mexican', + onClick: function() { + this.fireCommand('locale es_MX; levels'); + }.bind(this) }, { text: 'português', testID: 'portuguese', diff --git a/src/js/stores/LocaleStore.js b/src/js/stores/LocaleStore.js index 8dc1b551..ff51165a 100644 --- a/src/js/stores/LocaleStore.js +++ b/src/js/stores/LocaleStore.js @@ -29,6 +29,7 @@ var headerLocaleMap = { 'zh-CN': 'zh_CN', 'zh-TW': 'zh_TW', 'pt-BR': 'pt_BR', + 'es-MX': 'es_MX', 'es-ES': 'es_ES', 'sl-SI': 'sl_SI' }; diff --git a/src/levels/advanced/multipleParents.js b/src/levels/advanced/multipleParents.js index 9039c7b8..5bd67a1a 100644 --- a/src/levels/advanced/multipleParents.js +++ b/src/levels/advanced/multipleParents.js @@ -9,6 +9,7 @@ exports.level = { "de_DE": "Mehrere Vorgänger", "ja" : "複数の親", "es_AR": "Múltiples padres", + "es_MX": "Múltiples padres", "es_ES": "Múltiples padres", "pt_BR": "Múltiplos pais", "gl" : "Múltiples pais", @@ -26,6 +27,7 @@ exports.level = { 'fr_FR': 'Utilisez "git branch bugWork" avec un commit pour créer une référence manquante', "zh_CN": "使用 `git branch bugWork` 加上一个目标提交记录来创建消失的引用。", "es_AR": "Usá `git branch bugWork` sobre algún commit para crear la referencia faltante", + "es_MX": "Use `git branch bugWork` sobre algún commit para crear la referencia faltante", "es_ES": "Usa `git branch bugWork` sobre algún commit para crear la referencia que falta", "pt_BR": "Use `git branch bugWork` com um commit alvo para criar a referência que falta", "gl" : "Usa `git branch bugWork` sobre calquera commit para crear a referencia que falta", @@ -472,6 +474,93 @@ exports.level = { } ] }, + "es_MX": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "### Especificando los padres", + "", + "Como el modificador de `~`, `^` también acepta un número opcional después de él.", + "", + "En lugar de especificar cuántas generaciones hacia atrás ir (como `~`), el modificador de `^` especifica por cuál de las referencias padres seguir en un commit de merge. Recuerda que un commit de merge tiene múltiples padres, por lo que el camino a seguir es ambiguo.", + "", + "Git normalmente sigue el \"primer\" padre de un commit de merge, pero especificando un número junto con `^` cambia este comportamiento predefinido.", + "", + "Demasiada charla, veámoslo en acción.", + "" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Acá tenemos un commit de merge. Si hacemos checkout de `master^`, sin modificadores, vamos a seguir al primer padre después del commit de merge. ", + "", + "(*En nuestras visualizaciones, el primer padre se ubica directamente arriba del commit de merge.*)" + ], + "afterMarkdowns": [ + "Fácil -- esto es a lo que estamos acostumbrados." + ], + "command": "git checkout master^", + "beforeCommand": "git checkout HEAD^; git commit; git checkout master; git merge C2" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Ahora tratemos de especificar el segundo padre, en cambio..." + ], + "afterMarkdowns": [ + "¿Ves? Seguimos al otro padre hacia arriba." + ], + "command": "git checkout master^2", + "beforeCommand": "git checkout HEAD^; git commit; git checkout master; git merge C2" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Los modificadores de `^` y `~` son muy poderosos a la hora de movernos en un árbol:" + ], + "afterMarkdowns": [ + "¡Rapidísimo!" + ], + "command": "git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2", + "beforeCommand": "git commit; git checkout C0; git commit; git commit; git commit; git checkout master; git merge C5; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Más loco aún, ¡Éstos modificadores pueden encadenarse entre sí! Mira esto:" + ], + "afterMarkdowns": [ + "El mismo movimiento que antes, pero todo en uno." + ], + "command": "git checkout HEAD~^2~2", + "beforeCommand": "git commit; git checkout C0; git commit; git commit; git commit; git checkout master; git merge C5; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "### Pongámoslo en práctica", + "", + "Para completar este nivel, crea una nueva rama en la ubicación indicada.", + "", + "Obviamente sería muy fácil especificar el commit directamente (algo como `C6`), pero te reto a usar los modificadores de los que estuvimos hablando, mejor." + ] + } + } + ] + }, "es_ES": { "childViews": [ { diff --git a/src/levels/index.js b/src/levels/index.js index de640572..374ac37f 100644 --- a/src/levels/index.js +++ b/src/levels/index.js @@ -60,6 +60,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : 'まずはここから', 'fr_FR': 'Séquence d\'introduction', 'es_AR': 'Secuencia introductoria', + 'es_MX': 'Secuencia introductoria', 'es_ES': 'Secuencia introductoria', 'pt_BR': 'Sequência introdutória', 'gl' : 'Secuencia introductoria', @@ -77,6 +78,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : 'gitの基本的なコマンド群をほどよいペースで学ぶ', 'fr_FR': 'Une introduction en douceur à la majorité des commandes git', 'es_AR': 'Una breve introducción a la mayoría de los comandos de git', + 'es_MX': 'Una breve introducción a la mayoría de los comandos de git', 'es_ES': 'Una breve introducción a la mayoría de los comandos de git', 'pt_BR': 'Uma breve introdução à maioria dos comandos do git', 'gl' : 'Unha breve introducción á maioría dos comandos de git', @@ -96,6 +98,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '次のレベルに進もう', 'fr_FR': 'Montée en puissance', 'es_AR': 'Acelerando', + 'es_MX': 'Acelerando', 'es_ES': 'Acelerando', 'pt_BR': 'Acelerando', 'gl' : 'Alixeirando', @@ -113,6 +116,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '更にgitの素晴らしさを堪能しよう', 'fr_FR': 'Le prochain excellent plat de pur git. J\'espère que vous êtes affamés', 'es_AR': 'La próxima porción de 100% maravillas git. Espero que estés hambriento', + 'es_MX': 'La próxima ración de git. Espero que estés hambriento', 'es_ES': 'La próxima ración de git. Espero que estés hambriento', 'pt_BR': 'A próxima porção de maravilhas do git. Faminto?', 'gl' : 'A próxima porción das marabillas de git. Agardo que estés esfameado', @@ -133,6 +137,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : 'Push及びPullコマンド -- Gitリモート', 'fr_FR': 'Push & Pull -- dépôts gits distants !', 'es_AR': 'Push & Pull -- Git Remotes!', + 'es_MX': 'Push & Pull -- Repositorios remotos en Git (Git Remotes)!', 'es_ES': 'Push y Pull -- Git Remotes!', 'pt_BR': 'Push & Pull -- repositórios remotos no Git!', 'gl' : 'Push & Pull -- Repositorios remotos no Git!', @@ -150,6 +155,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '自分のコードをより広く公開しましょう', 'de_DE': 'Zeit eure 1en und 0en zu teilen; Coding mit sozialer Komponente', 'es_AR': 'Hora de compartir sus 1\'s y 0\'s, chicos; programar se volvió social!', + 'es_MX': 'Hora de compartir sus 1\'s y 0\'s, chicos; programar se volvió social!', 'es_ES': 'Hora de compartir vuestros 1\'s y 0\'s, chicos; programar se volvió social!', 'pt_BR': 'Hora de compartilhar seus 1\'s e 0\'s, crianças; programar agora é social!', 'gl' : 'Hora de compartilos seus 1\' e 0\'s, rapaces; programar agora é social!', @@ -170,6 +176,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '"origin"とその先へ -- Gitリモート上級編', 'fr_FR': 'Vers l\'infini et au-delà -- dépôts distants version avancée', 'es_AR': 'Hasta el origin y más allá -- Git Remotes avanzado!', + 'es_MX': 'Hasta el origin y más allá -- Git Remotes avanzado!', 'es_ES': 'Hasta el origen y más allá -- Git Remotes avanzado!', 'pt_BR': 'Até a origin e além -- repositórios remotos avançados!', 'gl' : 'Ata á orixe e máis aló -- repositorios remotos avanzados!', @@ -186,6 +193,7 @@ var sequenceInfo = exports.sequenceInfo = { 'fr_FR': 'Et vous pensiez qu\'être un dictateur bienfaisant serait amusant...', 'ja' : '絶えず上級者の仕事は存在する。。。', 'es_AR': 'Y pensabas que ser un dictador benévolo sería divertido...', + 'es_MX': 'Y pensabas que ser un dictador benévolo sería divertido...', 'es_ES': 'Y pensabas que ser un dictador benévolo sería divertido...', 'pt_BR': 'E você achava que ser um déspota esclarecido seria mais divertido...', 'gl' : 'E pensabas que ser un dictador benévolo sería divertido...', @@ -205,6 +213,7 @@ var sequenceInfo = exports.sequenceInfo = { 'de_DE': 'Code umherschieben', 'fr_FR': 'Déplacer le travail', 'es_AR': 'Moviendo el trabajo por ahí', + 'es_MX': 'Moviendo el trabajo por ahí', 'es_ES': 'Moviendo el trabajo por ahí', 'pt_BR': 'Movendo trabalho por aí', 'gl' : 'Movendo o traballo por ahí', @@ -222,6 +231,7 @@ var sequenceInfo = exports.sequenceInfo = { 'de_DE': 'Gewöhn dich daran, den Git-Baum zu verändern', 'fr_FR': 'Soyez à l\'aise pour modifier l\'arbre Git', 'es_AR': 'Ponete cómodo con modificar el directorio fuente', + 'es_MX': 'Ponte cómodo al modificar el directorio fuente :P', 'es_ES': 'Ponte cómodo cuando modifiques el directorio fuente', 'pt_BR': 'Fique confortável em modificar a árvore de códigos', 'gl' : 'Ponte cómodo modificando a árbore de git', @@ -242,6 +252,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '様々なtips', 'fr_FR': 'Un assortiment', 'es_AR': 'Bolsa de gatos', + 'es_MX': 'De todo un poco', 'es_ES': 'Un poco de todo', 'pt_BR': 'Sortidos', 'gl' : 'Todo mesturado', @@ -259,6 +270,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : 'gitを使う上での様々なtipsやテクニックなど', 'fr_FR': 'Un assortiment de techniques et astuces pour utiliser Git', 'es_AR': 'Un rejunte de técnicas, trucos y tips sobre Git', + 'es_MX': 'Un recopilatorio de técnicas, trucos y tips sobre Git', 'es_ES': 'Un batiburrillo de técnicas, trucos y sugerencias sobre Git', 'pt_BR': 'Técnicas, truques e dicas sortidas sobre Git', 'gl' : 'Mestura de técnicas, trucos e consellos', @@ -278,6 +290,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '上級トピック', 'fr_FR': 'Sujets avancés', 'es_AR': 'Temas avanzados', + 'es_MX': 'Temas avanzados', 'es_ES': 'Temas avanzados', 'pt_BR': 'Temas avançados', 'gl' : 'Temas avanzados', @@ -295,6 +308,7 @@ var sequenceInfo = exports.sequenceInfo = { 'ja' : '勇気ある人のみ!', 'fr_FR': 'Pour les plus courageux !', 'es_AR': '¡Para los verdaderos valientes!', + 'es_MX': '¡Para los verdaderos valientes!', 'es_ES': '¡Para los verdaderos valientes!', 'pt_BR': 'Para os verdadeiros valentes!', 'gl' : '¡Para os verdadeiros valerosos!', diff --git a/src/levels/intro/branching.js b/src/levels/intro/branching.js index ebf5533f..12135579 100644 --- a/src/levels/intro/branching.js +++ b/src/levels/intro/branching.js @@ -7,6 +7,7 @@ exports.level = { "ja" : "Gitのブランチ", "ko": "Git에서 브랜치 쓰기", "es_AR": "Brancheando en Git", + "es_MX": "Creando ramas en Git", "es_ES": "Creando ramas en Git", "pt_BR": "Ramos no Git", "gl" : "Ramas en Git", @@ -23,6 +24,7 @@ exports.level = { "de_DE": 'Lege mit "git branch " einen neuen Branch an und checke ihn mit "git checkout aus', "ja" : "ブランチの作成(\"git branch [ブランチ名]\")と、チェックアウト(\"git checkout [ブランチ名]\")", "es_AR": "Hacé una nueva rama con \"git branch [nombre]\" y cambiá a ella con \"git checkout [nombre]\"", + "es_MX": "Crea una nueva rama con \"git branch [nombre]\" y sitúate en ella con \"git checkout [nombre]\"", "es_ES": "Crea una nueva rama con \"git branch [nombre]\" y sitúate en ella con \"git checkout [nombre]\"", "pt_BR": "Crie um novo ramo com \"git branch [nome]\" e mude para ele com \"git checkout [nome]\"", "gl" : "Crea unha nova rama con \"git branch [nome]\" e cambiate a ela facendo \"git checkout [nome]\"", @@ -350,6 +352,84 @@ exports.level = { } ] }, + "es_MX": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Ramas en Git", + "", + "Las ramas (branches) en Git son increíblemente livianas. Son sólo referencias a un commit específico - nada más. Por esto es que tantos entusiastas de Git siguen el mantra:", + "", + "```", + "branchea temprano, y branchea seguido", + "```", + "", + "Como no hay consumo extra de almacenamiento ni memoria al hacer varias ramas, es más fácil dividir lógicamente tu trabajo que tener un par de ramas grandes.", + "", + "Cuando empecemos a mezclar ramas y commits, vamos a ver cómo se combinan estas dos herramientas. Por ahora, en cambio, simplemente recuerda que una rama esencialmente dice \"Quiero incluir el trabajo de este commit y todos su ancestros\"." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Veamos cómo se ven las ramas en práctica.", + "", + "Acá vamos a crear una rama nueva llamada `newImage`." + ], + "afterMarkdowns": [ + "Ahí está, ¡eso es todo lo que hay que hacer para branchear! La rama `newImage` ahora referencia al commit `C1`." + ], + "command": "git branch newImage", + "beforeCommand": "" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Pongamos algo de trabajo en esta nueva rama. Aprieta el botón que se encuentra debajo." + ], + "afterMarkdowns": [ + "¡Uh, no! ¡La rama `master` avanzó, pero `newImage` no! Eso es porque no estábamos \"en\" la rama nueva, y por eso el asterisco (*) estaba en `master`." + ], + "command": "git commit", + "beforeCommand": "git branch newImage" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Digámosle a git que queremos hacer checkout a esa rama con", + "", + "```", + "git checkout [name]", + "```", + "", + "Esto nos situará en esa rama antes de hacer commit a nuestros cambios." + ], + "afterMarkdowns": [ + "¡Ahí estamos! Nuestros cambios se registraron en nuestra nueva rama." + ], + "command": "git checkout newImage; git commit", + "beforeCommand": "git branch newImage" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "¡Ok! Ya estás listo para manejar ramas. Cuando se cierre esta ventana,", + "crea una nueva rama llamada `bugFix` y cámbiate a ella." + ] + } + } + ] + }, "es_ES": { "childViews": [ { diff --git a/src/levels/intro/commits.js b/src/levels/intro/commits.js index ef5c36ca..1f0d7da7 100644 --- a/src/levels/intro/commits.js +++ b/src/levels/intro/commits.js @@ -3,6 +3,7 @@ exports.level = { "en_US": "Introduction to Git Commits", "de_DE": "Einführung in Git Commits", "es_AR": "Introducción a los commits de Git", + "es_MX": "Introducción a los commits de Git", "es_ES": "Introducción a los commits de Git", "pt_BR": "Introdução aos commits no Git", "gl" : "Introducción ós commits de Git", @@ -23,6 +24,7 @@ exports.level = { "en_US": "Just type in 'git commit' twice to finish!", "de_DE": "Gib einfach zweimal 'git commit' ein um den Level abzuschließen", "es_AR": "¡Simplemente tipeá 'git commit' dos veces para terminar!", + "es_MX": "¡Simplemente escribe 'git commit' dos veces para terminar!", "es_ES": "¡Simplemente escribe 'git commit' dos veces para terminar!", "pt_BR": "Simplesmente digite 'git commit' duas vezes para concluir!", "gl" : "Simplemente escribe 'git commit' dúas veces para terminar.", @@ -212,6 +214,48 @@ exports.level = { } ] }, + "es_MX": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Commits de Git", + "Un commit en un repositorio git registra un snapshot de todos los archivos en tu directorio. Es como un _gran_ copy&paste, ¡pero incluso mejor!", + "", + "Git pretende mantener los commits tan livianos como sea posible, por lo que no copia ciegamente el directorio completo cada vez que haces commit. Puede (cuando sea posible) comprimir un commit como un conjunto de cambios (o un _\"delta\"_) entre una versión de tu repositorio y la siguiente.", + "", + "Git mantiene, también, un historial de qué commits se hicieron cuándo. Es por eso que la mayoría de los commits tienen commits ancestros arriba suyo -- designamos esto con flechas en nuestra visualización. ¡Mantener el historial es genial para todos los que trabajan en el proyecto!", + "", + "Hay un montón en lo que ahondar, pero por ahora puedes pensar en los commits como snapshots de tu proyecto. Los commits son muy livianos, y ¡cambiar de uno a otro es terriblemente rápido!" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Veamos cómo se ve esto en la práctica. A la derecha tenemos una visualización de un (pequeño) repositorio git. Hay dos commits ahora: el commit inicial, `C0`, y un commit que lo sigue, `C1`, que podría tener algunos cambios interesantes.", + "", + "Dale al botón de abajo para hacer un nuevo commit." + ], + "afterMarkdowns": [ + "¡Ahí va! Increíble. Acabamos de hacer cambios al repositorio y los guardamos como un commit. El commit que acabamos de crear tiene un padre, `C1`, que referencia al commit en que se basó este." + ], + "command": "git commit", + "beforeCommand": "" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "¡Vamos, inténtalo ahora! Cuando se cierre esta ventana, haz dos commits para completar el nivel." + ] + } + } + ] + }, "es_ES": { "childViews": [ { diff --git a/src/levels/intro/merging.js b/src/levels/intro/merging.js index cb26301e..2216b7a0 100644 --- a/src/levels/intro/merging.js +++ b/src/levels/intro/merging.js @@ -5,6 +5,7 @@ exports.level = { "en_US": "Merging in Git", "de_DE": "Mergen in git", "es_AR": "Mergeando en Git", + "es_MX": "Haciendo merge en Git", "es_ES": "Haciendo merge en Git", "pt_BR": "Merge no Git", "gl" : "Merge en Git", @@ -23,6 +24,7 @@ exports.level = { "de_DE": "Denk dran in der angegebenen Reihenfolge zu committen (erst bugFix, dann master)", "ja"   : "指示された順番でコミットすること(masterの前にbugFixで)", "es_AR": "Acordate de commitear en el orden especificado (bugFix antes de master)", + "es_MX": "Acuérdate de hacer commit en el orden especificado (bugFix antes de master)", "es_ES": "Acuérdate de hacer commit en el orden especificado (bugFix antes de master)", "pt_BR": "Lembre-se de commitar na ordem especificada (bugFix antes de master)", "gl" : "Lembrate de facer commit na orde específica (bugFix antes de master)", @@ -315,6 +317,75 @@ exports.level = { } ] }, + "es_MX": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Mergeando ramas", + "", + "¡Genial! Ya sabemos cómo hacer commit y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad, y después unirla de nuevo con el trabajo principal.", + "", + "El primer método para combinarlas que vamos a explorar es `git merge`. Mergear en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres esencialmente significa \"Quiero incluir todo el trabajo de este padre de acá y este otro padre de acá, *y* del conjunto de todos sus ancestros\"", + "", + "Es más simple visualizarlo, veámoslo a continuación" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Acá tenemos dos ramas, y cada una tiene un commit que le es único. Esto significa que ninguna de las ramas incluye \"todo el trabajo\" que hay en nuestro repositorio. Hagamos un merge para solucionar eso.", + "", + "Vamos a `merge`ar la rama `bugFix` a `master`." + ], + "afterMarkdowns": [ + "¡Wooow! ¿Viste eso? Primero que nada, `master` ahora apunta a un commit que tiene dos padres. Si sigues las flechas por el árbol de commits empezando desde `master` vas a cruzarte con cada commit del repositorio hasta llegar a la raíz. Esto significa que `master` ahora contiene todo el trabajo que hay en el repositorio.", + "", + "Además, ¿Viste cómo cambiaron los colores de los commits? Para ayudar al aprendizaje, incluí algunas convenciones de colores. Cada rama tiene un color propio. Cada commmit se vuelve del color resultante de mezclar los colores de todas las ramas que lo contienen.", + "", + "Así que acá vemos que el color de la rama `master` participa en la mezcla de todos los commits, pero que el de `bugFix` no. Arreglemos eso..." + ], + "command": "git merge bugFix", + "beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Mergeemos `master` a `bugFix`:" + ], + "afterMarkdowns": [ + "Como `bugFix` era un ancestro de `master`, git no tuvo que hacer ningún trabajo; simplemente movió `bugFix` al mismo commit al que estaba anexado `master`.", + "", + "Ahora todos los commits son del mismo color, lo que significa que cada rama contiene todo el trabajo que hay en el repositorio. ¡Súper!" + ], + "command": "git checkout bugFix; git merge master", + "beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit; git merge bugFix" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Para completar este nivel, sigue estos pasos:", + "", + "* Crea una nueva rama, llamada `bugFix`", + "* Cambia a la rama `bugFix` usando `git checkout bugFix`", + "* Haz un commit", + "* Vuelve a `master` con `git checkout`", + "* Haz otro commit", + "* Haz un merge de la rama `bugFix` a `master` usando `git merge`", + "", + "*Recuerda: siempre puedes volver a ver este mensaje usando el comando \"objective\"!*" + ] + } + } + ] + }, "es_ES": { "childViews": [ { diff --git a/src/levels/intro/rebasing.js b/src/levels/intro/rebasing.js index c8914cbf..16746692 100644 --- a/src/levels/intro/rebasing.js +++ b/src/levels/intro/rebasing.js @@ -6,6 +6,7 @@ exports.level = { "de_DE": "Einführung in Rebase", "ja" : "Rebaseの解説", "es_AR": "Introducción a rebase", + "es_MX": "Introducción a rebase", "es_ES": "Introducción a rebase", "pt_BR": "Introdução ao rebase", "gl" : "Introducción a rebase", @@ -24,6 +25,7 @@ exports.level = { "ja" : "初めにbugFixを指した状態でコミットする", "fr_FR": "Assurez-vous de bien faire votre commit sur bugFix en premier", "es_AR": "Asegurate de commitear desde bugFix primero", + "es_MX": "Asegúrate de hacer commit desde bugFix primero", "es_ES": "Asegúrate de hacer commit desde bugFix primero", "pt_BR": "O bugFix precisa ser commitado primeiro", "gl" : "Asegurate de facer o commit dende bugFix primeiro", @@ -307,6 +309,73 @@ exports.level = { } ] }, + "es_MX": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Git Rebase", + "", + "El segundo modo de combinar el trabajo de distintas ramas es el *rebase*. Rebasear esencialmente agarra un conjunto de commits, los \"copia\", y los aplica sobre algún otro lado.", + "", + "Aunque esto pueda sonar confuso, la ventaja de rebasear es que puede usarse para conseguir una secuencia de commits lineal, más bonita. El historial / log de commits del repositorio va a estar mucho más claro si sólo usas rebase.", + "", + "Veámoslo en acción..." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Acá tenemos dos ramas otra vez. Nota que la rama bugFix está actualmente seleccionada (tiene un asterisco)", + "", + "Nos gustaría mover nuestro trabajo de bugFix directamente sobre el trabajo de master. De ese modo, parecería que esas dos tareas se desarrollaron secuencialmente, cuando en realidad se hicieron en paralelo.", + "", + "Hagámoslo usando el comando `git rebase`." + ], + "afterMarkdowns": [ + "¡Genial! Ahora el trabajo de nuestra rama bugFix está justo encima del de master, y tenemos una secuencia lineal de commits.", + "", + "Notá que el commit C3 sigue existiendo en algún lado (aparece medio desvanecido en el árbol), y C3' es la \"copia\" que rebaseamos sobre master.", + "", + "El único problema es que master todavía no se actualizó, resolvámoslo ahora..." + ], + "command": "git rebase master", + "beforeCommand": "git commit; git checkout -b bugFix C1; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Ahora estamos parados sobre la rama `master`. Avancemos y rebaseémosla sobre `bugFix`..." + ], + "afterMarkdowns": [ + "¡Ahí está! Como `master` era un ancestro de `bugFix`, git simplemente movió la referencia de `master` hacia adelante en la historia." + ], + "command": "git rebase bugFix", + "beforeCommand": "git commit; git checkout -b bugFix C1; git commit; git rebase master; git checkout master" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Para completar este nivel, haz lo siguiente:", + "", + "* Cámbiate a una nueva rama llamada `bugFix`", + "* Haz un commit de una vez", + "* Vuelve a master y haz commit de nuevo", + "* Cámbiate a la rama bugFix otra vez y rebaséala sobre master", + "", + "¡Éxitos!" + ] + } + } + ] + }, "es_ES": { "childViews": [ { From 69b6cca9aa50996ddd5c2e77bac8b8bba6fbd967 Mon Sep 17 00:00:00 2001 From: Hamir Mahal Date: Sun, 18 Oct 2020 17:03:31 -0700 Subject: [PATCH 023/108] Close #746 by changing GitHub ribbon to a corner As mentioned in #746, I think it might be neat if we changed the "Fork me on GitHub" ribbon into a GitHub Corner, instead. --- src/template.index.html | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/template.index.html b/src/template.index.html index 8b3af18a..80f84752 100644 --- a/src/template.index.html +++ b/src/template.index.html @@ -444,14 +444,16 @@
- - - Fork me on GitHub - + + + +