From 00440648ab12a7ec3757c0580a1c7a7b198b0c88 Mon Sep 17 00:00:00 2001 From: Hank Yang Date: Thu, 25 Jan 2018 17:10:59 +0800 Subject: [PATCH] imporved cn translation in lesson 1 --- .gitignore | 12 ++++++++++++ zh/1/00-overview.md | 4 ++-- zh/1/arrays.md | 2 +- zh/1/arraysstructs2.md | 2 +- zh/1/contracts.md | 2 +- zh/1/datatypes.md | 4 ++-- zh/1/events.md | 8 ++++---- zh/1/functions.md | 4 ++-- zh/1/functions2.md | 8 ++++---- zh/1/functions3.md | 8 ++++---- zh/1/keccak256.md | 8 ++++---- zh/1/lessoncomplete.md | 12 ++++++------ zh/1/lessonoverview.md | 10 +++++----- zh/1/math.md | 4 ++-- zh/1/puttingittogether.md | 14 +++++++------- zh/1/structs.md | 4 ++-- zh/1/web3js.md | 14 +++++++------- 17 files changed, 66 insertions(+), 54 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..41f6b8b305 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +vendor +.bundle/ +.DS_Store +Thumbs.db +db.json +*.log +node_modules/ +public/ +.deploy*/ +build/ +.tmp +.idea/ diff --git a/zh/1/00-overview.md b/zh/1/00-overview.md index dcc09bcfd5..f8e38cb61b 100644 --- a/zh/1/00-overview.md +++ b/zh/1/00-overview.md @@ -6,6 +6,6 @@ roadmap: roadmap.jpg 你认为你可以当一个合格的**CryptoZombie**, 嗯? -这个教学过程会教你如何搭建一个以太网的游戏 +这个教程会教你如何搭建一个以太网的游戏 -这个课程是为了Solidity初学者而设计的,需要你对其他的程序语言有所了解(如Javascript). +此课程为 Solidity 初学者设计,需要你对其他的程序语言有所了解(如 JavaScript). diff --git a/zh/1/arrays.md b/zh/1/arrays.md index b76722a605..b092871107 100644 --- a/zh/1/arrays.md +++ b/zh/1/arrays.md @@ -72,4 +72,4 @@ Person[] public people; 为了把一个僵尸部队保存在我们的APP里,并且能够让其它APP看到这些僵尸,我们需要一个公共数组。 -1. 创建一个数据类型为`Zombie`的被`public`修饰的结构体数组,命名为:`zombies`. +1. 创建一个数据类型为`Zombie`的结构体数组,用`public`修饰,命名为:`zombies`. diff --git a/zh/1/arraysstructs2.md b/zh/1/arraysstructs2.md index 9ca48a2408..00f4e925b8 100644 --- a/zh/1/arraysstructs2.md +++ b/zh/1/arraysstructs2.md @@ -60,7 +60,7 @@ struct Person { Person[] public people; ``` -现在我们学习创建新的 `Person`结构,然后把它加入到名为`people` 数组中. +现在我们学习创建新的 `Person`结构,然后把它加入到名为`people` 的数组中. ``` // 创建一个新的Person: diff --git a/zh/1/contracts.md b/zh/1/contracts.md index 640fb58bb6..186b55263d 100644 --- a/zh/1/contracts.md +++ b/zh/1/contracts.md @@ -33,7 +33,7 @@ contract HelloWorld { 所有的solidity源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。 -例如: `pragma solidity ^0.4.19;` (此时此刻,solidity 的最新版本是 0.4.19). +例如: `pragma solidity ^0.4.19;` (当前 solidity 的最新版本是 0.4.19). 综上所述, 下面就是一个最基本的合约 — 每次建立一个新的项目时的第一段代码: diff --git a/zh/1/datatypes.md b/zh/1/datatypes.md index 7342e52a33..e380f8271b 100644 --- a/zh/1/datatypes.md +++ b/zh/1/datatypes.md @@ -23,9 +23,9 @@ material: } --- -真棒!我们已经为我们的合同做了一个外壳, 下面学习Solidity时如何使用变量。 +真棒!我们已经为我们的合约做了一个外壳, 下面学习 Solidity 中如何使用变量。 -**_状态变量_** 是被永久地保存在合同中。也就是说它们被写到以太币区块链中. 想象成写入一个数据库。 +**_状态变量_** 是被永久地保存在合约中。也就是说它们被写入以太币区块链中. 想象成写入一个数据库。 ##### 例子: ``` diff --git a/zh/1/events.md b/zh/1/events.md index 4ac76e615c..e26b6c053d 100644 --- a/zh/1/events.md +++ b/zh/1/events.md @@ -73,9 +73,9 @@ material: } --- -我们的合同几乎就要完成了!让我们加上一个**事件**. +我们的合约几乎就要完成了!让我们加上一个**事件**. -**事件** 是合同和区块链通讯的一种机制。你的前端应用‘监听’某些事件,并做出反应。 +**事件** 是合约和区块链通讯的一种机制。你的前端应用‘监听’某些事件,并做出反应。 例子: @@ -91,7 +91,7 @@ function add(uint _x, uint _y) public { } ``` -你的 app 前端可以监听这个事件。javascript实现如下: +你的 app 前端可以监听这个事件。JavaScript 实现如下: ``` YourContract.IntegersAdded(function(error, result) { @@ -107,4 +107,4 @@ YourContract.IntegersAdded(function(error, result) { 2. 修改 `_createZombie` 函数使得当新僵尸造出来并加入`zombies`数组后,生成事件`NewZombie`。 -3. 需要定义僵尸`id`. `array.push()` 返回数组的长度类型是`uint` - 因为数组的第一个元素的索引是 0, `array.push() - 1` 将是我们加入的僵尸的索引。 `zombies.push() - 1` 就是 `id`,数据类型是`uint`。在下一行中你可以把它用到`NewZombie` 事件中。 +3. 需要定义僵尸`id`。 `array.push()` 返回数组的长度类型是`uint` - 因为数组的第一个元素的索引是 0, `array.push() - 1` 将是我们加入的僵尸的索引。 `zombies.push() - 1` 就是 `id`,数据类型是`uint`。在下一行中你可以把它用到`NewZombie` 事件中。 diff --git a/zh/1/functions.md b/zh/1/functions.md index cac846805c..a86c0122fc 100644 --- a/zh/1/functions.md +++ b/zh/1/functions.md @@ -45,7 +45,7 @@ material: } --- -在solidity中函数定义的句法如下: +在 Solidity 中函数定义的句法如下: ``` function eatHamburgers(string _name, uint _amount) { @@ -69,4 +69,4 @@ eatHamburgers("vitalik", 100); 1. 建立一个函数 `createZombie`. 它接受两个输入变量: **名字** (类型`string`), 和 **__dna_** (类型`uint`)。 -暂时让函数空着-我们在后面会增加内容。 \ No newline at end of file +暂时让函数空着——我们在后面会增加内容。 \ No newline at end of file diff --git a/zh/1/functions2.md b/zh/1/functions2.md index 76eac99b58..b6b1921120 100644 --- a/zh/1/functions2.md +++ b/zh/1/functions2.md @@ -47,9 +47,9 @@ material: } --- -Solidity定义的函数的属性缺省为`公共`。 这就意味着任何一方 (或其它合同) 都可以调用你的合同里的函数。 +Solidity 定义的函数的属性缺省为`公共`。 这就意味着任何一方 (或其它合约) 都可以调用你的合约里的函数。 -显然,不是什么时候都需要这样,而且这样的合同易于受到攻击。 所以将自己的函数定义为`私有`是一个编程的好习惯,只有当你需要外部世界调用它时才将它设置为`公共`。 +显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为`私有`是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为`公共`。 如何定义一个私有的函数呢? @@ -61,12 +61,12 @@ function _addToArray(uint _number) private { } ``` -这意味着只有我们合同中的其它函数才能够调用这个函数,给 `numbers` 数组添加新成员。 +这意味着只有我们合约中的其它函数才能够调用这个函数,给 `numbers` 数组添加新成员。 可以看到,在函数名字后面使用关键字 `private` 即可。和函数的输入参数类似, 私有函数的名字用(`_`)起始. # 测试一把 -我们的合同的`createZombie` 的缺省属性是公共,这意味着任何一方都可以调用它去创建一个僵尸。 咱们来把它变成私有吧! +我们的合约的`createZombie` 的缺省属性是公共,这意味着任何一方都可以调用它去创建一个僵尸。 咱们来把它变成私有吧! 1. 变 `createZombie` 为私有函数,不要忘记遵守命名的规矩哦! diff --git a/zh/1/functions3.md b/zh/1/functions3.md index 3cea37f8d0..caab1f0292 100644 --- a/zh/1/functions3.md +++ b/zh/1/functions3.md @@ -67,11 +67,11 @@ function sayHello() public returns (string) { } ``` -Solidity里,函数的定义里可包含返回值的数据类型(如本例中 `string`)。 +Solidity 里,函数的定义里可包含返回值的数据类型(如本例中 `string`)。 ## 函数的修饰符 -上面的函数实际上没有改变Solidity里的状态,即,它没有改变任何值或者写任何东西。 +上面的函数实际上没有改变 Solidity 里的状态,即,它没有改变任何值或者写任何东西。 这种情况下我们可以把函数定义为 **_view_**, 意味着它只读取数据但不更改数据: @@ -79,7 +79,7 @@ Solidity里,函数的定义里可包含返回值的数据类型(如本例中 ` function sayHello() public view returns (string) { ``` -Solidity还支持 **_pure_** 函数, 表明这个函数甚至都没有接触程序里的数据,例如: +Solidity 还支持 **_pure_** 函数, 表明这个函数甚至都没有接触程序里的数据,例如: ``` function _multiply(uint a, uint b) private pure returns (uint) { @@ -97,6 +97,6 @@ function _multiply(uint a, uint b) private pure returns (uint) { 1. 建立一个`private` 函数,命名为 `_generateRandomDna`。它只接收一个输入变量`_str` (类型`string`), 返回一个`uint`类型的数值。 -2. 此函数只读取我们合同中的一些变量,所以标记为`view`。 +2. 此函数只读取我们合约中的一些变量,所以标记为`view`。 3. 函数本身暂时空白,以后我们再添加代码。 diff --git a/zh/1/keccak256.md b/zh/1/keccak256.md index 64cb7d0dfc..6dd8148d60 100644 --- a/zh/1/keccak256.md +++ b/zh/1/keccak256.md @@ -58,9 +58,9 @@ material: 如何让 `_generateRandomDna` 函数返回一个(半) 随机的 `uint`? -Ethereum内部有一个散列函数`keccak256`,它用了SHA3版本。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化,会导致散列数据一个大的变化。 +Ethereum 内部有一个散列函数`keccak256`,它用了SHA3版本。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化会引起散列数据极大变化。 -这在Ethereum中有很多应用,但是现在我们只是用它造一个假想的随机数。 +这在 Ethereum 中有很多应用,但是现在我们只是用它造一个假想的随机数。 例子: @@ -82,9 +82,9 @@ keccak256("aaaac"); ``` uint8 a = 5; uint b = 6; -// throws an error because a * b returns a uint, not uint8: +// 将会跑出错误,因为 a * b 返回 uint, 而不是 uint8: uint8 c = a * b; -// we have to typecast b as a uint8 to make it work: +// 我们需要将 b 转换为 uint8: uint8 c = a * uint8(b); ``` diff --git a/zh/1/lessoncomplete.md b/zh/1/lessoncomplete.md index ab0187016b..5330517417 100644 --- a/zh/1/lessoncomplete.md +++ b/zh/1/lessoncomplete.md @@ -6,15 +6,15 @@ material: answer: 1 --- -祝贺! 你完成了第一课,为你的部队创造了第一个僵尸。 +恭喜! 你完成了第一课,为你的部队创造了第一个僵尸。 -# 下面步骤 +# 后面的步骤 -这只是开始,我们每周都会出版新的CryptoZombies课程, 进一步开发我们的游戏,不断壮大我们的僵尸部队。 -### 1. 登陆能保存你的学习进程 +这只是开始,我们每周都会发布新的 CryptoZombies 课程, 进一步开发我们的游戏,不断壮大我们的僵尸部队。 +### 1. 登录能保存你的学习进程 **_Sign in_** 保存学习进程点击页面顶部的 "Save Progress"。 一旦我们发布新的课程,我们会立即通知你。 -### 2. 让你的朋友共享你的僵尸吧! +### 2. 和你的朋友分享你的僵尸吧! -**_Share_** 在Twitter等等上共享(需要插入图像/链接) +**_Share_** 在微博、Twitter等平台分享(需要插入图像/链接) diff --git a/zh/1/lessonoverview.md b/zh/1/lessonoverview.md index 01bca57619..a9fc1df93f 100644 --- a/zh/1/lessonoverview.md +++ b/zh/1/lessonoverview.md @@ -16,11 +16,11 @@ material: * 工厂会有一个函数能产生新的僵尸 * 每个僵尸会有一个随机的独一无二的面孔 -在后面的课程里,我们会增加功能。比如,让僵尸能攻击人类,或其它僵尸! 但是在实现这些好玩的功能之前,我们先要加入生出新僵尸的基本功能。 +在后面的课程里,我们会增加功能。比如,让僵尸能攻击人类或其它僵尸! 但是在实现这些好玩的功能之前,我们先要加入生出新僵尸的基本功能。 ## 僵尸DNA如何运作 -僵尸的面孔取决于它的DNA。它的DNA很简单由一个16位的整数组成: +僵尸的面孔取决于它的DNA。它的DNA很简单,由一个16位的整数组成: ``` 8356281049284737 @@ -28,9 +28,9 @@ material: 如同真正的DNA, 这个数字的不同部分会对应不同的特点。 前2位代表头型,紧接着的2位代表眼睛,等等。 -> 注: 本教程我们尽量简化。我们的僵尸只有7种头型(虽然2数字允许100种可能性)。 以后我们会加入更多的头型如果我们想增加僵尸的变化。 +> 注: 本教程我们尽量简化。我们的僵尸只有7种头型(虽然2位数字允许100种可能性)。以后我们会加入更多的头型, 如果我们想让僵尸有更多造型。 -例如,前两位数字是 `83`. 计算僵尸的头型,我们做`83 % 7 + 1` = 7 运算, 此僵尸将被赋予第七类头型。 +例如,前两位数字是 `83`, 计算僵尸的头型,我们做`83 % 7 + 1` = 7 运算, 此僵尸将被赋予第七类头型。 在右手页面,移动头基因`head gene` 滑块到第七位置(圣诞老人的帽子)可见`83`所对应的特点。 @@ -38,4 +38,4 @@ material: 1. 玩一下页面右侧的滑块。检验一下不同的数字对应不同的僵尸的长相。 -好了,这已经足够你玩一会儿了。 当你想继续的时候,点击下面的"Next Chapter" ,让我们来钻研Solidity! +好了,这已经足够你玩一会儿了。 当你想继续的时候,点击下面的"下一章" ,让我们来钻研 Solidity! diff --git a/zh/1/math.md b/zh/1/math.md index 8c5be70428..5f2c2e9fd8 100644 --- a/zh/1/math.md +++ b/zh/1/math.md @@ -26,7 +26,7 @@ material: --- -在Solidity中,数学运算很直观明了,于其它程序设计语言相同: +在 Solidity 中,数学运算很直观明了,与其它程序设计语言相同: * 加法: `x + y` * 减法: `x - y`, @@ -34,7 +34,7 @@ material: * 除法: `x / y` * 商 / 余数: `x % y` _(例如, `13 % 5` 余 `3`, 因为13除以5,余3)_ -Solidity 还支持 **_乘方操作_** (如:x 的 y次方) // 例如: 5^2 = 25 +Solidity 还支持 **_乘方操作_** (如:x 的 y次方) // 例如: 5 ** 2 = 25 ``` # 测试一把 diff --git a/zh/1/puttingittogether.md b/zh/1/puttingittogether.md index bfdcd409df..16c3886e28 100644 --- a/zh/1/puttingittogether.md +++ b/zh/1/puttingittogether.md @@ -1,5 +1,5 @@ --- -title: 搭建在一起 +title: 放在一起 actions: ['答案', '提示'] material: editor: @@ -64,16 +64,16 @@ material: } --- -我们接近完成我们的随记僵尸制造器了,让我们写一个公共的函数把所有的部件连接起来。 +我们就快完成我们的随机僵尸制造器了,来写一个公共的函数把所有的部件连接起来。 -我们写一个公共函数,它又一个输入变量僵尸的名字,之后用它生成僵尸的DNA。 +写一个公共函数,它有一个变量,用来输入僵尸的名字,之后用它生成僵尸的DNA。 # 测试一把 -1. 建立一个 `public` 函数,命名为`createRandomZombie`. 它又一个输入变量 `_name` (数据类型是 `string`). _(注: 定义一个公共函数 `public`, 如同你定义一个私有 `private`函数的做法一样)_ +1. 建立一个 `public` 函数,命名为` createRandomZombie`. 它将被传入一个变量 `_name` (数据类型是 `string`). _(注: 定义公共函数 `public` 和定义一个私有 `private` 函数的做法一样)_ -2. 函数的第一行应该调用 `_generateRandomDna` 函数,作用于`_name`, 结果保存在一个类型为 `uint` 的变量里,命名为 `randDna`. +2. 函数的第一行应该调用 `_generateRandomDna` 函数,传入 `_name` 参数, 结果保存在一个类型为 `uint` 的变量里,命名为 `randDna`. -3. 第二行调用 `_createZombie` 函数, 输入参数: `_name` 和 `randDna`. +3. 第二行调用 `_createZombie` 函数, 传入参数: `_name` 和 `randDna`. -4. 结果因该生成4行代码 (包括函数的结束符号 `}` )。 +4. 结果应该生成4行代码 (包括函数的结束符号 `}` )。 diff --git a/zh/1/structs.md b/zh/1/structs.md index b1dd0fbb2c..b0e3456b64 100644 --- a/zh/1/structs.md +++ b/zh/1/structs.md @@ -44,11 +44,11 @@ struct Person { 结构允许你生成一个更复杂的数据类型,它有多个属性。 -> 注:我们刚刚引进了一个新类型, `string`。 字符串用于保存任意长度的UTF-8 编码数据。 如: `string greeting = "Hello world!"` +> 注:我们刚刚引进了一个新类型, `string`。 字符串用于保存任意长度的 UTF-8 编码数据。 如: `string greeting = "Hello world!"` # 测试一把 -在我们的程序中,我们将生出一些僵尸!每个僵尸将拥有多个属性,所以这是一个展示结构的完美的例子。 +在我们的程序中,我们将生出一些僵尸!每个僵尸将拥有多个属性,所以这是一个展示结构的完美例子。 1. 建立一个`struct` 命名为 `Zombie`. diff --git a/zh/1/web3js.md b/zh/1/web3js.md index b70a388a83..6fe7b379ac 100644 --- a/zh/1/web3js.md +++ b/zh/1/web3js.md @@ -10,13 +10,13 @@ material: answer: 1 --- -我们的Solidity合同完工了! 现在我们要写一段 javascript 前端的代码调用这个合同。 +我们的 Solidity 合约完工了! 现在我们要写一段 JavaScript 前端代码来调用这个合约。 -以太坊有一个Javascript库,称为**_Web3.js_**. +以太坊有一个 JavaScript 库,名为**_Web3.js_**. -在后面的课程里,我们会进一步地教你如何安装一个合同,如何设置Web3.js. 但是现在我们看一段代码了解Web3.js是如何和我们安装的合同打交道的吧。 +在后面的课程里,我们会进一步地教你如何安装一个合约,如何设置Web3.js. 但是现在我们通过一段代码来了解 Web3.js 是如何和我们安装的合约打交道的吧。 -不要担心,如果这些看起来毫无意义。 +如果下面的代码你不能全都理解,不用担心。 ``` // Here's how we would access our contract: var abi = /* abi generated by the compiler */ @@ -67,10 +67,10 @@ function generateZombie(id, name, dna) { } ``` -我们的javascript所做的就是获取由`zombieDetails` 产生的数据, 利用浏览器里的javascript 神奇功能 (w我们用 Vue.js),置换出图像并安装CSS过滤器。在后面的课程中,你可以看到全部的代码。 +我们的 JavaScript 所做的就是获取由`zombieDetails` 产生的数据, 利用浏览器里的 JavaScript 神奇功能 (我们用 Vue.js),置换出图像并安装CSS过滤器。在后面的课程中,你可以看到全部的代码。 # 试一下吧! -在右面的输入框里输入你的名字,看看你能得到那种僵尸! +在右面的输入框里输入你的名字,看看你能得到哪种僵尸! -**一旦你得到一个满意的僵尸, 点击下面的 "Next Chapter" 按钮保存你的僵尸,结束第一课!** +**一旦你得到一个满意的僵尸, 点击下面的 "下一章" 按钮保存你的僵尸,结束第一课!**