Skip to content

Commit e9a610c

Browse files
committed
Merge remote-tracking branch 'astaxie/master'
2 parents fb15d35 + 89d8943 commit e9a610c

File tree

17 files changed

+91
-30
lines changed

17 files changed

+91
-30
lines changed

10.1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##10.1 设置默认地区
1+
# 10.1 设置默认地区
22
##什么是Locale
33
Locale是一组描述世界上某一特定区域文本格式和语言习惯的设置的集合。locale名通常由三个部分组成:第一部分,是一个强制性的,表示语言的缩写,例如"en"表示英文或"zh"表示中文。第二部分,跟在一个下划线之后,是一个可选的国家说明符,用于区分讲同一种语言的不同国家,例如"en_US"表示美国英语,而"en_UK"表示英国英语。最后一部分,跟在一个句点之后,是可选的字符集说明符,例如"zh_CN.gb2312"表示中国使用gb2312字符集。
44

@@ -84,4 +84,4 @@ GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三
8484
* 下一节: [本地化资源](<10.2.md>)
8585

8686
## LastModified
87-
* $Id$
87+
* $Id$

10.2.md

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##10.2 本地化资源
1+
# 10.2 本地化资源
22
前面小节我们介绍了如何设置Locale,设置好Locale之后我们需要解决的问题就是如何存储相应的Locale对应的信息呢?这里面的信息包括:文本信息、时间和日期、货币值、图片、包含文件以及视图等资源。那么接下来我们讲对这些信息一一进行介绍,Go语言中我们把这些格式信息存储在JSON中,然后通过合适的方式展现出来。(接下来以中文和英文两种语言对比举例,存储格式文件en.json和zh-CN.json)
33
##本地化文本消息
44
文本信息是我们编写Web应用中最长用到的,也是本地化资源中最多的信息,你想要以适合本地的语言显示文本信息,那么就需要建立相应的map来维护一个key-value的关系,在打印消息之前从map中去获取相应的字符串,例如下面这个例如,一个包含英文和中文的食品名称的简单的map,以及一个从该map中抽取单词的函数。
@@ -90,13 +90,48 @@
9090
}
9191

9292

93-
##本地化视图
94-
我们在展现不同Locale的时候可能会根据不同的Locale采用不同的视图,这些视图里面包含不同的图片、css、js等各种静态资源。那么我们如何来处理这些信息呢?
95-
##管理本地化资源
93+
##本地化视图和资源
94+
我们在展现不同Locale的时候可能会根据不同的Locale采用不同的视图,这些视图里面包含不同的图片、css、js等各种静态资源。那么我们如何来处理这些信息呢?首先我们需要组织对应的locale文件信息,请看下面的文件目录安排:
95+
96+
views
97+
|--en //英文模板
98+
|--images //存储图片信息
99+
|--js //存储JS文件
100+
|--css //存储css文件
101+
index.tpl //用户首页
102+
login.tpl //登陆首页
103+
|--zh-CN //中文模板
104+
|--images
105+
|--js
106+
|--css
107+
index.tpl
108+
login.tpl
109+
110+
有了这个文件安排之后我们就可以在渲染的地方这样来实现代码
111+
112+
113+
s1, _ := template.ParseFiles("views"+lang+"index.tpl")
114+
VV.Lang=lang
115+
s1.Execute(os.Stdout, VV)
116+
117+
而对于里面的index.tpl里面的资源设置如下:
118+
119+
//js文件
120+
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
121+
//css文件
122+
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
123+
//图片文件
124+
<img src="views/{{.VV.Lang}}/images/btn.png">
125+
126+
这样我们在本地化视图以及资源的时候采用这种方式就可以很容易的进行扩展了。
127+
128+
##总结
129+
本小节介绍了如何使用存储本地资源,本地资源有些需要通过转换函数,有些通过lang设置,但是最后都是通过key-value的方式存储了相应的Locale对应数据,然后通过转换函数通过key读取出来相应的Locale信息,如果是文本信息就直接输出了,如果是时间日期或者货币需要结合`fmt.Printf`函数的处理才能转换成正确的信息展示,而对于不同Locale的视图和资源是最简单的,只要在路径里面增加lang就可以实现了。
130+
96131
## links
97132
* [目录](<preface.md>)
98133
* 上一节: [设置默认地区](<10.1.md>)
99134
* 下一节: [国际化站点](<10.3.md>)
100135

101136
## LastModified
102-
* $Id$
137+
* $Id$

10.3.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
##10.3 国际化站点
1+
# 10.3 国际化站点
2+
前面小节介绍了如何处理本地化资源,即Locale一个相应的配置文件,那么如果处理多个的本地化资源呢?而对于一些我们经常用到的例如:简单的文本翻译、时间日期、数字等如果处理呢?本小节将一一解决这些问题。
23
##管理多个本地包
4+
35
##自动加载本地包
4-
##template mapfunc
6+
7+
##template mapfunc
8+
9+
1. 文本信息
10+
2. 时间日期
11+
3. 数字
12+
13+
##总结
514
## links
615
* [目录](<preface.md>)
716
* 上一节: [本地化资源](<10.2.md>)
817
* 下一节: [小结](<10.4.md>)
918

1019
## LastModified
11-
* $Id$
20+
* $Id$

10.4.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
##10.4 小结
1+
# 10.4 小结
22
通过这一章的介绍,读者应该对如何操作i18n有了深入的了解,我也根据这一章介绍的内容实现了一个开源的解决方案go-i18n:https://github.com/astaxie/go-i18n 通过这个开源库我们可以很方便的实现多语言版本的Web应用,使得我们的应用能够轻松的实现国际化。如果你发现这个开源库中的错误或者那些缺失的地方,请一起参与到这个开源项目中来,让我们的这个库争取成为Go的标准库。
33
## links
44
* [目录](<preface.md>)
55
* 上一节: [国际化站点](<10.3.md>)
66
* 下一节: [错误处理,故障排除和测试](<11.md>)
77

88
## LastModified
9-
* $Id$
9+
* $Id$

10.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##10 国际化和本地化
1+
# 10 国际化和本地化
22
为了适应经济的全球一体化,作为开发者,我们需要开发出支持多国语言、国际化的Web应用,即同样的页面在不同的语言环境下需要显示不同的效果,也就是说应用程序在运行时能够根据请求所来自的地域与语言的不同而显示不同的用户界面。这样,当需要在应用程序中添加对新的语言的支持时,无需修改应用程序的代码,只需要增加语言包即可实现。
33

44
国际化与本地化(Internationalization and localization,通常用i18n和L10N表示),国际化是将针对某个地区设计的程序进行重构,以使它能够在更多地区使用,本地化是指在一个面向国际化的程序中增加对新地区的支持。
@@ -27,4 +27,4 @@
2727
* 下一节: [设置默认地区](<10.1.md>)
2828

2929
## LastModified
30-
* $Id$
30+
* $Id$

9.1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##9.1 预防CSRF攻击
1+
# 9.1 预防CSRF攻击
22

33
##什么是CSRF
44
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
@@ -91,4 +91,4 @@ CSRF的防御可以从服务端和客户端两方面着手,防御效果是从
9191
* 下一节: [确保输入过滤](<9.2.md>)
9292

9393
## LastModified
94-
* $Id$
94+
* $Id$

9.2.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##9.2 确保输入过滤
1+
# 9.2 确保输入过滤
22
过滤用户数据是Web应用安全的基础。它是验证数据合法性的过程。通过对所有的输入数据进行过滤,可以避免恶意数据在程序中被误信或误用。大多数Web应用的漏洞都是因为没有对用户输入的数据进行恰当过滤所引起的。
33

44
我们介绍的过滤数据分成三个步骤:
@@ -72,4 +72,4 @@
7272
* 下一节: [避免XSS攻击](<9.3.md>)
7373

7474
## LastModified
75-
* $Id$
75+
* $Id$

9.3.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##9.3 避免XSS攻击
1+
# 9.3 避免XSS攻击
22
随着互联网技术的发展,现在的Web应用都含有大量的动态内容以提高用户体验。所谓动态内容,就是应用程序能够根据用户环境和用户请求,输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响。
33

44
##什么是XSS
@@ -52,4 +52,4 @@ XSS漏洞是相当有危害的,在开发Web应用的时候,一定要记住
5252
* 下一节: [避免SQL注入](<9.4.md>)
5353

5454
## LastModified
55-
* $Id$
55+
* $Id$

9.4.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##9.4 避免SQL注入
1+
# 9.4 避免SQL注入
22
##什么是SQL注入
33
SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。
44

@@ -69,4 +69,4 @@ SQL注入攻击的危害这么大,那么该如何来防治呢?下面这些建
6969
* 下一节: [存储密码](<9.5.md>)
7070

7171
## LastModified
72-
* $Id$
72+
* $Id$

9.5.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
##9.5 存储密码
1+
# 9.5 存储密码
22
过去一段时间以来, 许多的网站遭遇用户密码数据泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN,该事件横扫整个国内互联网,随后又爆出多玩游戏800万用户资料被泄露,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件给用户的网上生活造成巨大的影响,人人自危,因为人们往往习惯在不同网站使用相同的密码,所以一家“暴库”,全部遭殃。
33

44
那么我们作为一个Web应用开发者,在选择密码存储方案时, 容易掉入哪些陷阱, 以及如何避免这些陷阱?
@@ -89,4 +89,4 @@ Go语言对这三种加密算法的实现如下所示:
8989
* 下一节: [加密和解密数据](<9.6.md>)
9090

9191
## LastModified
92-
* $Id$
92+
* $Id$

0 commit comments

Comments
 (0)