diff --git a/.gitattributes b/.gitattributes
index 6313b56c57..d3877a5382 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
* text=auto eol=lf
+*.svg binary
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index a83b6b68f4..0000000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,11 +0,0 @@
-**目标章节**:例如 1-js/01-getting-started/1-intro
-
-**当前上游最新 commit**:此处填写本项目英文版 https://github.com/javascript-tutorial/en.javascript.info 的最新 commit,例如 https://github.com/javascript-tutorial/zh.javascript.info/commit/b03ca00a992a73aaf213970e71f74ac1c04def33
-
-**本 PR 所做更改如下:**
-
-文件名 | 参考上游 commit | 更改(理由)
--|-|-
-article.md | a23882d | 修改部分错误
-
-> 注意,参考上游 commit 是指你所修改的文件,在英文仓库中同名文件的对应 commit,即你此次提交的修改的依据。如果本 PR 你只是提交一个文字或者语句优化,并非根据上游英文仓库的修改而提交的更新,则请填无。
diff --git a/.gitignore b/.gitignore
index 6f90fd1907..1a71fb7c82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ sftp-config.json
Thumbs.db
+/svgs
\ No newline at end of file
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 6f9db68d48..536fac47ae 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -1,120 +1,122 @@
-# JavaScript 简介
+# An Introduction to JavaScript
-我们一起来聊一下 JavaScript,用它能做什么,它有哪些特性,以及一些跟它配合使用的技术。
+Let's see what's so special about JavaScript, what we can achieve with it, and what other technologies play well with it.
-## 什么是 JavaScript?
+## What is JavaScript?
-**JavaScript** 最初的目的是为了“**赋予网页生命**”。
+*JavaScript* was initially created to "make web pages alive".
-这种编程语言我们称之为**脚本**。它们可以写在 HTML 中,在页面加载的时候会自动执行。
+The programs in this language are called *scripts*. They can be written right in a web page's HTML and run automatically as the page loads.
-脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。
+Scripts are provided and executed as plain text. They don't need special preparation or compilation to run.
-这方面,JavaScript 和 [Java](http://en.wikipedia.org/wiki/Java) 有很大的区别。
+In this aspect, JavaScript is very different from another language called [Java](https://en.wikipedia.org/wiki/Java_(programming_language)).
-```smart header="为什么叫 JavaScript?"
-JavaScript 在刚诞生的时候,它的名字叫 “LiveScript”。但是因为当时 Java 很流行,所以决定将一种新语言定位为 Java 的“弟弟”会有助于它的流行。
+```smart header="Why is it called JavaScript?"
+When JavaScript was created, it initially had another name: "LiveScript". But Java was very popular at that time, so it was decided that positioning a new language as a "younger brother" of Java would help.
-随着 JavaScript 的发展,它已经变成了一门独立的语言,同时也有了自己的语言规范 [ECMAScript](http://en.wikipedia.org/wiki/ECMAScript)。现在,它和 Java 之间没有任何关系。
+But as it evolved, JavaScript became a fully independent language with its own specification called [ECMAScript](http://en.wikipedia.org/wiki/ECMAScript), and now it has no relation to Java at all.
```
-现在,JavaScript 不仅仅是在浏览器内执行,也可以在服务端执行,甚至还能在任意搭载了 [JavaScript 引擎](https://en.wikipedia.org/wiki/JavaScript_engine) 的设备中都可以执行。
+Today, JavaScript can execute not only in the browser, but also on the server, or actually on any device that has a special program called [the JavaScript engine](https://en.wikipedia.org/wiki/JavaScript_engine).
-浏览器中嵌入了 JavaScript 引擎,有时也称作 JavaScript 虚拟机。
+The browser has an embedded engine sometimes called a "JavaScript virtual machine".
-不同的引擎有不同的“代号”,例如:
+Different engines have different "codenames". For example:
-- [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) —— Chrome 和 Opera 中的 JavaScript 引擎。
-- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) —— Firefox 中的 JavaScript 引擎。
-- ……还有其他一些代号,像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft Edge,“Nitro”和“SquirrelFish”用于 Safari,等等。
+- [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) -- in Chrome, Opera and Edge.
+- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- in Firefox.
+- ...There are other codenames like "Chakra" for IE, "JavaScriptCore", "Nitro" and "SquirrelFish" for Safari, etc.
-上面这些名称很容易记忆,因为经常出现在网上开发者的文章中。我们也会用到这些名称。例如:某个新的功能,如果“JavaScript 引擎 V8 是支持的”,那么我们可以认为这个功能大概能在 Chrome 和 Opera 中正常运行。
+The terms above are good to remember because they are used in developer articles on the internet. We'll use them too. For instance, if "a feature X is supported by V8", then it probably works in Chrome, Opera and Edge.
-```smart header="引擎是如何工作的?"
+```smart header="How do engines work?"
-引擎很复杂,但是基本原理很简单。
+Engines are complicated. But the basics are easy.
-1. 引擎(通常嵌入在浏览器中)读取(“解析”)脚本。
-2. 然后将脚本转化(“编译”)为机器语言。
-3. 然后这机器语言代码快速地运行。
+1. The engine (embedded if it's a browser) reads ("parses") the script.
+2. Then it converts ("compiles") the script to the machine language.
+3. And then the machine code runs, pretty fast.
-引擎会对流程中的每个阶段都进行优化。它甚至可以在运行时监视编译的脚本,分析数据流并根据这些进一步优化机器代码。
+The engine applies optimizations at each step of the process. It even watches the compiled script as it runs, analyzes the data that flows through it, and further optimizes the machine code based on that knowledge.
```
-## 浏览器中的 JavaScript 能做什么?
+## What can in-browser JavaScript do?
-现代的 JavaScript 是一种“安全”语言。它不提供对内存或 CPU 的底层访问,因为它最初是为浏览器创建的,不需要这些功能。
+Modern JavaScript is a "safe" programming language. It does not provide low-level access to memory or CPU, because it was initially created for browsers which do not require it.
-JavaScript 的能力很大程度上依赖于它执行的环境。例如:[Node.js](https://wikipedia.org/wiki/Node.js) 允许 JavaScript 读写任意文件、执行网络请求等。
+JavaScript's capabilities greatly depend on the environment it's running in. For instance, [Node.js](https://wikipedia.org/wiki/Node.js) supports functions that allow JavaScript to read/write arbitrary files, perform network requests, etc.
-浏览器中的 JavaScript 可以做与网页操作、用户交互和 Web 服务器相关的所有事情。
+In-browser JavaScript can do everything related to webpage manipulation, interaction with the user, and the webserver.
-例如,浏览器中的 JavaScript 可以完成下面这些事:
+For instance, in-browser JavaScript is able to:
-- 在网页中插入新的 HTML,修改现有的网页内容和网页的样式。
-- 响应用户的行为,响应鼠标的点击或移动、键盘的敲击。
-- 向远程服务器发送网络请求,下载或上传文件(所谓 [AJAX](https://en.wikipedia.org/wiki/Ajax_(programming)) 和 [COMET](https://en.wikipedia.org/wiki/Comet_(programming)) 技术)。
-- 获取或修改 cookie,向访问者提出问题、发送消息。
-- 记住客户端的数据(本地存储)。
+- Add new HTML to the page, change the existing content, modify styles.
+- React to user actions, run on mouse clicks, pointer movements, key presses.
+- Send requests over the network to remote servers, download and upload files (so-called [AJAX](https://en.wikipedia.org/wiki/Ajax_(programming)) and [COMET](https://en.wikipedia.org/wiki/Comet_(programming)) technologies).
+- Get and set cookies, ask questions to the visitor, show messages.
+- Remember the data on the client-side ("local storage").
-## 浏览器中的 JavaScript 不能做什么?
+## What CAN'T in-browser JavaScript do?
-为了用户的(信息)安全,在浏览器中的 JavaScript 的能力是有限的。这样主要是为了阻止邪恶的网站获得或修改用户的私人数据。
+JavaScript's abilities in the browser are limited for the sake of a user's safety. The aim is to prevent an evil webpage from accessing private information or harming the user's data.
-这些限制的例子有:
+Examples of such restrictions include:
-- 网页中的 JavaScript 不能读、写、复制及执行用户磁盘上的文件或程序。它没有直接访问操作系统的功能。
+- JavaScript on a webpage may not read/write arbitrary files on the hard disk, copy them or execute programs. It has no direct access to OS functions.
- 现代浏览器允许 JavaScript 做一些文件相关的操作,但是这个操作是受到限制的。仅当用户使用某个特定的动作,JavaScript 才能操作这个文件。例如,把文件“拖”到浏览器中,或者通过 `` 标签选择文件。
+ Modern browsers allow it to work with files, but the access is limited and only provided if the user does certain actions, like "dropping" a file into a browser window or selecting it via an `` tag.
- JavaScript 有很多方式和照相机/麦克风或者其他设备进行交互,但是这些都需要提前获得用户的授权许可。所以,启用了 JavaScript 的网页应该不会偷偷地启动网络摄像头观察你,并把你的信息发送到[美国国家安全局](https://en.wikipedia.org/wiki/National_Security_Agency)。
-- 不同的浏览器标签页之间基本彼此不相关。有时候,也会有一些关系。例如,一个标签页通过 JavaScript 打开另外一个新的标签页。但即使在这种情况下,如果两个标签页打开的不是同一个网站(域名、协议或者端口任一不相同的网站),他们都不能够相互通信。
+ There are ways to interact with camera/microphone and other devices, but they require a user's explicit permission. So a JavaScript-enabled page may not sneakily enable a web-camera, observe the surroundings and send the information to the [NSA](https://en.wikipedia.org/wiki/National_Security_Agency).
+- Different tabs/windows generally do not know about each other. Sometimes they do, for example when one window uses JavaScript to open the other one. But even in this case, JavaScript from one page may not access the other if they come from different sites (from a different domain, protocol or port).
- 这就是“同源策略”。为了解决“同源策略”问题,两个标签页必须**都**包含一些处理这个问题的特殊的 JavaScript 代码,并均允许数据交换,这样才能够实现两个同源标签页的数据交换。本教程会讲到这部分相关的知识。
+ This is called the "Same Origin Policy". To work around that, *both pages* must agree for data exchange and contain a special JavaScript code that handles it. We'll cover that in the tutorial.
- 这个限制也是为了用户的信息安全。例如,用户打开的 `http://anysite.com` 网页的 JavaScript 肯定不能访问 `http://gmail.com`(另外一个标签页打开的网页)也不能从那里窃取信息。
-- JavaScript 通过互联网可以轻松地和当前网页域名的服务器进行通讯。但是从其他网站/域名的服务器中获取数据的能力是受限的。尽管这可以实现,但是需要来自远程服务器的明确协议(在 HTTP 头中)。这也是为了用户的数据安全。
+ This limitation is, again, for the user's safety. A page from `http://anysite.com` which a user has opened must not be able to access another browser tab with the URL `http://gmail.com` and steal information from there.
+- JavaScript can easily communicate over the net to the server where the current page came from. But its ability to receive data from other sites/domains is crippled. Though possible, it requires explicit agreement (expressed in HTTP headers) from the remote side. Once again, that's a safety limitation.

-浏览器环境外的 JavaScript 一般没有这些限制。例如服务端的 JavaScript 就没有这些限制。现代浏览器还允许安装可能会要求扩展权限的插件或扩展。
+Such limits do not exist if JavaScript is used outside of the browser, for example on a server. Modern browsers also allow plugin/extensions which may ask for extended permissions.
-## 是什么使得 JavaScript 与众不同?
+## What makes JavaScript unique?
-至少有 **3** 件事值得一提:
+There are at least *three* great things about JavaScript:
```compare
-+ 和 HTML/CSS 完全的集成。
-+ 使用简单的工具完成简单的任务。
-+ 被所有的主流浏览器支持,并且默认开启。
++ Full integration with HTML/CSS.
++ Simple things are done simply.
++ Supported by all major browsers and enabled by default.
```
-满足这三条的浏览器技术也只有 JavaScript 了。
+JavaScript is the only browser technology that combines these three things.
-这就是为什么 JavaScript 与众不同!这也是为什么它是创建浏览器界面的最普遍的工具。
+That's what makes JavaScript unique. That's why it's the most widespread tool for creating browser interfaces.
-此外,JavaScript 还支持创建服务器,移动端应用程序等。
+That said, JavaScript also allows to create servers, mobile applications, etc.
-## 比 JavaScript “更好”的语言
+## Languages "over" JavaScript
-不同的人喜欢不同的功能,JavaScript 的语法也不能够满足所有人的需求。
+The syntax of JavaScript does not suit everyone's needs. Different people want different features.
-这是正常的,因为每个人的项目和需求都不一样。
+That's to be expected, because projects and requirements are different for everyone.
-所以,最近出现了很多不同的语言,这些语言在浏览器中执行之前,都会被**编译**(转化)成 JavaScript。
+So recently a plethora of new languages appeared, which are *transpiled* (converted) to JavaScript before they run in the browser.
-现代化的工具使得编译速度非常快速且透明,实际上允许开发人员使用另一种语言编写代码并将其自动转换为 JavaScript。
+Modern tools make the transpilation very fast and transparent, actually allowing developers to code in another language and auto-converting it "under the hood".
-这些编程语言的例子有:
+Examples of such languages:
-- [CoffeeScript](http://coffeescript.org/) 是 JavaScript 的语法糖,它语法简短,明确简洁。通常使用 Ruby 的人喜欢用。
-- [TypeScript](http://www.typescriptlang.org/) 将注意力集中在增加严格的数据类型。这样就能简化开发,也能用于开发复杂的系统。TypeScript 是微软开发的。
-- [Flow](http://flow.org/) 也添加了数据类型,但是以一种不同的方式。由 Facebook 开发。
-- [Dart](https://www.dartlang.org/) 是一门独立的语言。它拥有自己的引擎用于在非浏览器环境中运行(如:手机应用),它也能被编译成 JavaScript 。由 Google 开发。
+- [CoffeeScript](https://coffeescript.org/) is a "syntactic sugar" for JavaScript. It introduces shorter syntax, allowing us to write clearer and more precise code. Usually, Ruby devs like it.
+- [TypeScript](https://www.typescriptlang.org/) is concentrated on adding "strict data typing" to simplify the development and support of complex systems. It is developed by Microsoft.
+- [Flow](https://flow.org/) also adds data typing, but in a different way. Developed by Facebook.
+- [Dart](https://www.dartlang.org/) is a standalone language that has its own engine that runs in non-browser environments (like mobile apps), but also can be transpiled to JavaScript. Developed by Google.
+- [Brython](https://brython.info/) is a Python transpiler to JavaScript that enables the writing of applications in pure Python without JavaScript.
+- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) is a modern, concise and safe programming language that can target the browser or Node.
-还有很多其他的语言。当然,即使我们在使用这些语言,我们也需要知道 JavaScript。因为学习 JavaScript 可以让我们真正明白我们自己在做什么。
+There are more. Of course, even if we use one of transpiled languages, we should also know JavaScript to really understand what we're doing.
-## 总结
+## Summary
-- JavaScript 最开始是为浏览器设计的一门语言,但是现在也被用于很多其他的环境。
-- 现在,JavaScript 是一门在浏览器中使用最广、并且能够很好集成 HTML/CSS 的语言。
-- 有很多其他的语言可以被编译成 JavaScript,这些语言还提供了更多的功能。最好还是了解一下这些语言,至少在掌握了 JavaScript 之后简单地看一下。
+- JavaScript was initially created as a browser-only language, but it is now used in many other environments as well.
+- Today, JavaScript has a unique position as the most widely-adopted browser language, fully integrated with HTML/CSS.
+- There are many languages that get "transpiled" to JavaScript and provide certain features. It is recommended to take a look at them, at least briefly, after mastering JavaScript.
diff --git a/1-js/01-getting-started/1-intro/limitations.svg b/1-js/01-getting-started/1-intro/limitations.svg
index 1239b0196d..76ea43fd7a 100644
--- a/1-js/01-getting-started/1-intro/limitations.svg
+++ b/1-js/01-getting-started/1-intro/limitations.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/1-js/01-getting-started/2-manuals-specifications/article.md b/1-js/01-getting-started/2-manuals-specifications/article.md
index 9e1953265d..3fa2433363 100644
--- a/1-js/01-getting-started/2-manuals-specifications/article.md
+++ b/1-js/01-getting-started/2-manuals-specifications/article.md
@@ -1,41 +1,37 @@
-# 手册与规范
+# Manuals and specifications
-这本书是一个**教程**。它旨在帮助你逐渐掌握 JavaScript 这门语言。但是一旦你已经熟悉了这门语言的基础知识,你就会需要其他资料。
+This book is a *tutorial*. It aims to help you gradually learn the language. But once you're familiar with the basics, you'll need other resources.
-## 规范
+## Specification
-**ECMA-262 规范**包含了大部分深入的、详细的、规范化的关于 JavaScript 的信息。这份规范明确地定义了这门语言。
+[The ECMA-262 specification](https://www.ecma-international.org/publications/standards/Ecma-262.htm) contains the most in-depth, detailed and formalized information about JavaScript. It defines the language.
-但正因其规范化,对于新手来说难以理解。所以如果你需要知道关于这门语言细节最权威的信息来源,这份规范就很适合你(去阅读)。但是它并不适合日常使用。
+But being that formalized, it's difficult to understand at first. So if you need the most trustworthy source of information about the language details, the specification is the right place. But it's not for everyday use.
-最新的规范草案在此 。
+A new specification version is released every year. Between these releases, the latest specification draft is at .
-想要知道最新最前沿且将要“标准化”的功能,请看这里的提案 。
+To read about new bleeding-edge features, including those that are "almost standard" (so-called "stage 3"), see proposals at .
-当然,如果你正在做浏览器相关的开发工作,那么本教程的 [第二节](info:browser-environment) 涵盖了其他规范。
+Also, if you're developing for the browser, then there are other specifications covered in the [second part](info:browser-environment) of the tutorial.
-## 手册
+## Manuals
-- **MDN(Mozilla)JavaScript 索引**是一本带有用例和其他信息的手册。它是一个获取关于个别语言函数、方法等深入信息的很好的来源。
+- **MDN (Mozilla) JavaScript Reference** is the main manual with examples and other information. It's great to get in-depth information about individual language functions, methods etc.
- 你可以在 找到这本手册。
+ You can find it at .
- 虽然,利用互联网搜索通常是最好的选择。只需在查询时输入“MDN [关键字]”,例如 搜索 `parseInt` 函数。
+Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. to search for the `parseInt` function.
-- **MSDN** —— 一本微软的手册,它包含大量的信息,包括 JavaScript(在里面经常被写成 JScript)。如果有人需要关于 Internet Explorer 的规范细节,最好去看:。
+## Compatibility tables
- 我们还可以在使用互联网搜索时使用如 “RegExp MSDN” 或 “RegExp MSDN jscript” 这样的词条。
+JavaScript is a developing language, new features get added regularly.
-## 兼容性表
+To see their support among browser-based and other engines, see:
-JavaScript 还是一门还在发展中的语言,经常会添加一些新的功能。
+- - per-feature tables of support, e.g. to see which engines support modern cryptography functions: .
+- - a table with language features and engines that support those or don't support.
-如果想要获得一些关于浏览器和其他引擎的兼容性信息,请看:
+All these resources are useful in real-life development, as they contain valuable information about language details, their support, etc.
-- —— 每个功能都列有一个支持信息表格,例如想看哪个引擎支持现代加密(cryptography)函数:。
-- —— 一份列有语言功能以及引擎是否支持这些功能的表格。
-
-所有这些资源在实际开发中都有用武之地,因为他们包含了语言细节以及它们被支持的程度等非常有价值的信息。
-
-为了不要让你在真正需要深入了解特定功能的时候捉襟见肘,请记住它们(或者这一页)。
+Please remember them (or this page) for the cases when you need in-depth information about a particular feature.
diff --git a/1-js/01-getting-started/3-code-editors/article.md b/1-js/01-getting-started/3-code-editors/article.md
index 4ff15a45bf..5a86f2a7f1 100644
--- a/1-js/01-getting-started/3-code-editors/article.md
+++ b/1-js/01-getting-started/3-code-editors/article.md
@@ -1,46 +1,44 @@
-# 代码编辑器
+# Code editors
-程序员接触时间最长的就是代码编辑器。
+A code editor is the place where programmers spend most of their time.
-代码编辑器主要分两种:IDE(集成开发环境)和轻量编辑器。很多人喜欢这两种各选一个。
+There are two main types of code editors: IDEs and lightweight editors. Many people use one tool of each type.
## IDE
-[IDE](https://en.wikipedia.org/wiki/Integrated_development_environment)(集成开发环境)是用于管理整个项目具有强大功能的编辑器。顾名思义,它不仅仅是一个编辑器,而且还是个完整的开发环境。
+The term [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) (Integrated Development Environment) refers to a powerful editor with many features that usually operates on a "whole project." As the name suggests, it's not just an editor, but a full-scale "development environment."
-IDE 加载项目(通常包含很多文件),并且允许在不同文件之间切换。IDE 还提供基于整个项目(不仅仅是打开的文件)的自动补全功能,集成版本控制(如 [git](https://git-scm.com/))、集成测试环境等一些其他“项目层面”的东西。
+An IDE loads the project (which can be many files), allows navigation between files, provides autocompletion based on the whole project (not just the open file), and integrates with a version management system (like [git](https://git-scm.com/)), a testing environment, and other "project-level" stuff.
-如果你还没考虑好选哪一款 IDE,可以考虑下面两个:
+If you haven't selected an IDE yet, consider the following options:
-- [Visual Studio Code](https://code.visualstudio.com/)(跨平台,免费)
-- [WebStorm](http://www.jetbrains.com/webstorm/)(跨平台,收费)
+- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free).
+- [WebStorm](https://www.jetbrains.com/webstorm/) (cross-platform, paid).
-对于 Windows 系统来说,也有个叫 “Visual Studio” 的 IDE,请不要跟 “Visual Studio Code” 混淆。“Visual Studio” 是一个收费的、强大的 Windows 专用编辑器,它十分适合于 .NET 开发。用它进行 JavaScript 开发也不错。“Visual Studio” 有个免费的版本 [Visual Studio Community](https://www.visualstudio.com/vs/community/)。
+For Windows, there's also "Visual Studio", not to be confused with "Visual Studio Code". "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. It's also good at JavaScript. There's also a free version [Visual Studio Community](https://www.visualstudio.com/vs/community/).
-大多数 IDE 是收费的,但是他们都可以试用。购买 IDE 的费用对于一名合格的程序员的薪水来说,肯定算不了什么,所以去选一个对你来说最好的吧。
+Many IDEs are paid, but have a trial period. Their cost is usually negligible compared to a qualified developer's salary, so just choose the best one for you.
-## 轻量编辑器
+## Lightweight editors
-“轻量编辑器”没有 IDE 功能那么强大,但是他们一般很快、优雅而且简单。
+"Lightweight editors" are not as powerful as IDEs, but they're fast, elegant and simple.
-“轻量编辑器”主要用于立即打开编辑一个文件。
+They are mainly used to open and edit a file instantly.
-“轻量编辑器”和 IDE 最大的区别是,IDE 一般在项目中使用,这也就意味着在开启的时候要加载很多数据,如果需要的话,在使用的过程中还会分析项目的结构等。如果我们只需要编辑一个文件,那么“轻量编辑器”会更快。
+The main difference between a "lightweight editor" and an "IDE" is that an IDE works on a project-level, so it loads much more data on start, analyzes the project structure if needed and so on. A lightweight editor is much faster if we need only one file.
-实际上,“轻量编辑器”一般都有各种各样的插件,这些插件可以做目录级(directory-level)的语法分析和补全代码。所以“轻量编辑器”和 IDE 也没有严格的界限。
+In practice, lightweight editors may have a lot of plugins including directory-level syntax analyzers and autocompleters, so there's no strict border between a lightweight editor and an IDE.
-下面是一些值得你关注的“轻量编辑器”:
+The following options deserve your attention:
-- [Atom](https://atom.io/)(跨平台,免费)。
-- [Visual Studio Code](https://code.visualstudio.com/)(跨平台,免费)。
-- [Sublime Text](http://www.sublimetext.com)(跨平台,共享软件)。
-- [Notepad++](https://notepad-plus-plus.org/)(Windows,免费)。
-- [Vim](http://www.vim.org/) 和 [Emacs](https://www.gnu.org/software/emacs/) 很棒,前提是你知道怎么用。
+- [Sublime Text](http://www.sublimetext.com) (cross-platform, shareware).
+- [Notepad++](https://notepad-plus-plus.org/) (Windows, free).
+- [Vim](http://www.vim.org/) and [Emacs](https://www.gnu.org/software/emacs/) are also cool if you know how to use them.
-## 不要争吵
+## Let's not argue
-上面列表中的编辑器都是我和我的朋友(他们都是我认为很优秀的开发人员)已经使用了很长时间并且很满意的。
+The editors in the lists above are those that either I or my friends whom I consider good developers have been using for a long time and are happy with.
-世上还有很多其他很好的编辑器,你可以选择一个你最喜欢的。
+There are other great editors in our big world. Please choose the one you like the most.
-选择编辑器就像选择其他工具一样。要看你的项目,以及个人的习惯和喜好。
+The choice of an editor, like any other tool, is individual and depends on your projects, habits, and personal preferences.
diff --git a/1-js/01-getting-started/4-devtools/article.md b/1-js/01-getting-started/4-devtools/article.md
index f3b1d6fef6..50926d4f76 100644
--- a/1-js/01-getting-started/4-devtools/article.md
+++ b/1-js/01-getting-started/4-devtools/article.md
@@ -1,63 +1,63 @@
-# 开发者控制台
+# Developer console
-代码是很容易出现错误的。你也很可能犯错误...... 哦,我在说什么?只要你是人,你一定会犯错误(在写代码的时候),除非你是[机器人](https://en.wikipedia.org/wiki/Bender_(Futurama))。
+Code is prone to errors. You will quite likely make errors... Oh, what am I talking about? You are *absolutely* going to make errors, at least if you're a human, not a [robot](https://en.wikipedia.org/wiki/Bender_(Futurama)).
-但在浏览器中,默认情况下用户是看不到错误的。所以,如果脚本中有错误,我们看不到是什么错误,更不能够修复它。
+But in the browser, users don't see errors by default. So, if something goes wrong in the script, we won't see what's broken and can't fix it.
-为了发现错误并获得一些与脚本相关且有用的信息,浏览器内置了“开发者工具”。
+To see errors and get a lot of other useful information about scripts, "developer tools" have been embedded in browsers.
-通常,开发者倾向于使用 Chrome 或 Firefox 进行开发,因为它们有最好的开发者工具。一些其他的浏览器也提供开发者工具,有时还具有一些特殊的功能,通常它们都是在追赶 Chrome 或 Firefox。所以大多数人都有“最喜欢”的浏览器,当遇到某个浏览器独有的问题的时候,人们就会切换到其他的浏览器。
+Most developers lean towards Chrome or Firefox for development because those browsers have the best developer tools. Other browsers also provide developer tools, sometimes with special features, but are usually playing "catch-up" to Chrome or Firefox. So most developers have a "favorite" browser and switch to others if a problem is browser-specific.
-开发者工具很强大,功能丰富。首先,我们将学习如何打开它们,查找错误和运行 JavaScript 命令。
+Developer tools are potent; they have many features. To start, we'll learn how to open them, look at errors, and run JavaScript commands.
## Google Chrome
-打开网页 [bug.html](bug.html)。
+Open the page [bug.html](bug.html).
-在 JavaScript 代码中有一个错误。一般的访问者看不到这个错误,所以让我们打开开发者工具看看吧。
+There's an error in the JavaScript code on it. It's hidden from a regular visitor's eyes, so let's open developer tools to see it.
-按下 `key:F12` 键,如果你使用 Mac,试试 `key:Cmd+Opt+J`。
+Press `key:F12` or, if you're on Mac, then `key:Cmd+Opt+J`.
-开发者工具会被打开,Console 标签页是默认的标签页。
+The developer tools will open on the Console tab by default.
-就像这样:
+It looks somewhat like this:

-具体什么样,要看你的 Chrome 版本。它随着时间一直在变,但是都很类似。
+The exact look of developer tools depends on your version of Chrome. It changes from time to time but should be similar.
-- 在这我们能看到红色的错误提示信息。这个场景中,脚本里有一个未知的 “lalala” 命令。
-- 在右边,有个可点击的链接 `bug.html:12`。这个链接会链接到错误发生的行号。
+- Here we can see the red-colored error message. In this case, the script contains an unknown "lalala" command.
+- On the right, there is a clickable link to the source `bug.html:12` with the line number where the error has occurred.
-在错误信息的下方,有个 `>` 标志。它代表“命令行”,在“命令行”中,我们可以输入 JavaScript 命令,按下 `key:Enter` 来执行。
+Below the error message, there is a blue `>` symbol. It marks a "command line" where we can type JavaScript commands. Press `key:Enter` to run them.
-现在,我们能看到错误就够了。稍后,在 章节中,我们会重新更加深入地讨论开发者工具。
+Now we can see errors, and that's enough for a start. We'll come back to developer tools later and cover debugging more in-depth in the chapter .
-```smart header="多行输入"
-通常,当我们向控制台输入一行代码后,按 `key:Enter`,这行代码就会立即执行。
+```smart header="Multi-line input"
+Usually, when we put a line of code into the console, and then press `key:Enter`, it executes.
-如果想要插入多行代码,请按 `key:Shift+Enter` 来进行换行。这样就可以输入长片段的 JavaScript 代码了。
+To insert multiple lines, press `key:Shift+Enter`. This way one can enter long fragments of JavaScript code.
```
-## Firefox、Edge 和其他浏览器
+## Firefox, Edge, and others
-大多数其他的浏览器都是通过 `key:F12` 来打开开发者工具。
+Most other browsers use `key:F12` to open developer tools.
-他们的外观和感觉都非常相似,一旦你学会了他们中的一个(可以先尝试 Chrome),其他的也就很快了。
+The look & feel of them is quite similar. Once you know how to use one of these tools (you can start with Chrome), you can easily switch to another.
## Safari
-Safari(Mac 系统中的浏览器,Windows 和 Linux 系统不支持)有一点点不同。我们需要先开启“开发菜单”。
+Safari (Mac browser, not supported by Windows/Linux) is a little bit special here. We need to enable the "Develop menu" first.
-打开“偏好设置”,选择“高级”选项。选中最下方的那个选择框。
+Open Preferences and go to the "Advanced" pane. There's a checkbox at the bottom:

-现在,我们通过 `key:Cmd+Opt+C` 就能打开或关闭控制台了。另外注意,有一个名字为“开发”的顶部菜单出现了。它有很多命令和选项。
+Now `key:Cmd+Opt+C` can toggle the console. Also, note that the new top menu item named "Develop" has appeared. It has many commands and options.
-## 总结
+## Summary
-* 开发者工具允许我们查看错误、执行命令、检查变量等等。
-* 在 Windows 系统中,可以通过 `key:F12` 开启开发者工具。Mac 系统下,Chrome 需要使用 `key:Cmd+Opt+J`,Safari 使用 `key:Cmd+Opt+C`(需要提前开启)。
+- Developer tools allow us to see errors, run commands, examine variables, and much more.
+- They can be opened with `key:F12` for most browsers on Windows. Chrome for Mac needs `key:Cmd+Opt+J`, Safari: `key:Cmd+Opt+C` (need to enable first).
-现在我们的环境准备好了。下一章,我们将正式开始学习 JavaScript。
+Now we have the environment ready. In the next section, we'll get down to JavaScript.
diff --git a/1-js/01-getting-started/4-devtools/chrome.png b/1-js/01-getting-started/4-devtools/chrome.png
index a506389072..4cb3ea2f46 100644
Binary files a/1-js/01-getting-started/4-devtools/chrome.png and b/1-js/01-getting-started/4-devtools/chrome.png differ
diff --git a/1-js/01-getting-started/index.md b/1-js/01-getting-started/index.md
index 14d9223ce1..b327c78603 100644
--- a/1-js/01-getting-started/index.md
+++ b/1-js/01-getting-started/index.md
@@ -1,3 +1,3 @@
-# 简介
+# An introduction
-介绍 JavaScript 语言及其开发环境。
+About the JavaScript language and the environment to develop with it.
diff --git a/1-js/02-first-steps/01-hello-world/1-hello-alert/index.html b/1-js/02-first-steps/01-hello-world/1-hello-alert/index.html
new file mode 100644
index 0000000000..ff1d871b08
--- /dev/null
+++ b/1-js/02-first-steps/01-hello-world/1-hello-alert/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.md b/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.md
index e69de29bb2..77b3abbb53 100644
--- a/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.md
+++ b/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.md
@@ -0,0 +1,2 @@
+
+[html src="index.html"]
diff --git a/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md b/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md
index 07cbf248f1..afed6a91d3 100644
--- a/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md
+++ b/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md
@@ -2,10 +2,11 @@ importance: 5
---
-# 显示一个提示语
+# Show an alert
-创建一个页面,然后显示一个消息 “I'm JavaScript!”。
+Create a page that shows a message "I'm JavaScript!".
-在沙箱中或者在你的硬盘上做这件事都无所谓,只要确保它能运行起来。
+Do it in a sandbox, or on your hard drive, doesn't matter, just ensure that it works.
[demo src="solution"]
+
diff --git a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md
index 48fb62cc22..f42c41e6db 100644
--- a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md
+++ b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md
@@ -1,8 +1,8 @@
-HTML 代码:
+The HTML code:
[html src="index.html"]
-同一个文件夹中的 `alert.js` 文件:
+For the file `alert.js` in the same folder:
[js src="alert.js"]
diff --git a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md
index 38c7deccec..26168d6a76 100644
--- a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md
+++ b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md
@@ -2,8 +2,8 @@ importance: 5
---
-# 使用外部的脚本显示一个提示语
+# Show an alert with an external script
-打开前一个任务 的答案。将脚本的内容提取到一个外部的 `alert.js` 文件中,放置在相同的文件夹中。
+Take the solution of the previous task . Modify it by extracting the script content into an external file `alert.js`, residing in the same folder.
-打开页面,确保它能够工作。
+Open the page, ensure that the alert works.
diff --git a/1-js/02-first-steps/01-hello-world/article.md b/1-js/02-first-steps/01-hello-world/article.md
index 271ede28ba..35f82bf5d7 100644
--- a/1-js/02-first-steps/01-hello-world/article.md
+++ b/1-js/02-first-steps/01-hello-world/article.md
@@ -1,17 +1,17 @@
# Hello, world!
-本教程的这一部分内容是关于 JavaScript 语言本身的。
+This part of the tutorial is about core JavaScript, the language itself.
-但是,我们需要一个工作环境来运行我们的脚本,由于本教程是在线的,所以浏览器是一个不错的选择。我们会尽可能少地使用浏览器特定的命令(比如 `alert`),所以如果你打算专注于另一个环境(比如 Node.js),你就不必多花时间来关心这些特定指令了。我们将在本教程的 [下一部分](/ui) 中专注于浏览器中的 JavaScript。
+But we need a working environment to run our scripts and, since this book is online, the browser is a good choice. We'll keep the amount of browser-specific commands (like `alert`) to a minimum so that you don't spend time on them if you plan to concentrate on another environment (like Node.js). We'll focus on JavaScript in the browser in the [next part](/ui) of the tutorial.
-首先,让我们看看如何将脚本添加到网页上。对于服务器端环境(如 Node.js),你只需要使用诸如 `"node my.js"` 的命令行来执行它。
+So first, let's see how we attach a script to a webpage. For server-side environments (like Node.js), you can execute the script with a command like `"node my.js"`.
-## “script” 标签
+## The "script" tag
-JavaScript 程序可以在 `
*/!*
-