Skip to content

Commit a1ed5d7

Browse files
committed
Format and remove 10.2.md spaces
1 parent adafedc commit a1ed5d7

File tree

1 file changed

+75
-75
lines changed

1 file changed

+75
-75
lines changed

zh/10.2.md

Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,46 @@
66

77
```Go
88

9-
package main
10-
11-
import "fmt"
12-
13-
var locales map[string]map[string]string
14-
15-
func main() {
16-
locales = make(map[string]map[string]string, 2)
17-
en := make(map[string]string, 10)
18-
en["pea"] = "pea"
19-
en["bean"] = "bean"
20-
locales["en"] = en
21-
cn := make(map[string]string, 10)
22-
cn["pea"] = "豌豆"
23-
cn["bean"] = "毛豆"
24-
locales["zh-CN"] = cn
25-
lang := "zh-CN"
26-
fmt.Println(msg(lang, "pea"))
27-
fmt.Println(msg(lang, "bean"))
28-
}
29-
30-
func msg(locale, key string) string {
31-
if v, ok := locales[locale]; ok {
32-
if v2, ok := v[key]; ok {
33-
return v2
34-
}
9+
package main
10+
11+
import "fmt"
12+
13+
var locales map[string]map[string]string
14+
15+
func main() {
16+
locales = make(map[string]map[string]string, 2)
17+
en := make(map[string]string, 10)
18+
en["pea"] = "pea"
19+
en["bean"] = "bean"
20+
locales["en"] = en
21+
cn := make(map[string]string, 10)
22+
cn["pea"] = "豌豆"
23+
cn["bean"] = "毛豆"
24+
locales["zh-CN"] = cn
25+
lang := "zh-CN"
26+
fmt.Println(msg(lang, "pea"))
27+
fmt.Println(msg(lang, "bean"))
28+
}
29+
30+
func msg(locale, key string) string {
31+
if v, ok := locales[locale]; ok {
32+
if v2, ok := v[key]; ok {
33+
return v2
3534
}
36-
return ""
3735
}
36+
return ""
37+
}
3838

3939
```
4040
上面示例演示了不同locale的文本翻译,实现了中文和英文对于同一个key显示不同语言的实现,上面实现了中文的文本消息,如果想切换到英文版本,只需要把lang设置为en即可。
4141

4242
有些时候仅是key-value替换是不能满足需要的,例如"I am 30 years old",中文表达是"我今年30岁了",而此处的30是一个变量,该怎么办呢?这个时候,我们可以结合`fmt.Printf`函数来实现,请看下面的代码:
4343
```Go
4444

45-
en["how old"] ="I am %d years old"
46-
cn["how old"] ="我今年%d岁了"
45+
en["how old"] ="I am %d years old"
46+
cn["how old"] ="我今年%d岁了"
4747

48-
fmt.Printf(msg(lang, "how old"), 30)
48+
fmt.Printf(msg(lang, "how old"), 30)
4949
```
5050
上面的示例代码仅用以演示内部的实现方案,而实际数据是存储在JSON里面的,所以我们可以通过`json.Unmarshal`来为相应的map填充数据。
5151

@@ -59,82 +59,82 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为
5959

6060
```Go
6161

62-
en["time_zone"]="America/Chicago"
63-
cn["time_zone"]="Asia/Shanghai"
62+
en["time_zone"]="America/Chicago"
63+
cn["time_zone"]="Asia/Shanghai"
6464

65-
loc,_:=time.LoadLocation(msg(lang,"time_zone"))
66-
t:=time.Now()
67-
t = t.In(loc)
68-
fmt.Println(t.Format(time.RFC3339))
65+
loc,_:=time.LoadLocation(msg(lang,"time_zone"))
66+
t:=time.Now()
67+
t = t.In(loc)
68+
fmt.Println(t.Format(time.RFC3339))
6969

7070
```
7171
我们可以通过类似处理文本格式的方式来解决时间格式的问题,举例如下:
7272
```Go
7373

74-
en["date_format"]="%Y-%m-%d %H:%M:%S"
75-
cn["date_format"]="%Y%m%d%H%M%S"
74+
en["date_format"]="%Y-%m-%d %H:%M:%S"
75+
cn["date_format"]="%Y%m%d%H%M%S"
7676

77-
fmt.Println(date(msg(lang,"date_format"),t))
77+
fmt.Println(date(msg(lang,"date_format"),t))
7878

79-
func date(fomate string,t time.Time) string{
80-
year, month, day = t.Date()
81-
hour, min, sec = t.Clock()
82-
//解析相应的%Y %m %d %H %M %S然后返回信息
83-
//%Y 替换成2012
84-
//%m 替换成10
85-
//%d 替换成24
86-
}
79+
func date(fomate string,t time.Time) string{
80+
year, month, day = t.Date()
81+
hour, min, sec = t.Clock()
82+
//解析相应的%Y %m %d %H %M %S然后返回信息
83+
//%Y 替换成2012
84+
//%m 替换成10
85+
//%d 替换成24
86+
}
8787

8888
```
8989
## 本地化货币值
9090
各个地区的货币表示也不一样,处理方式也与日期差不多,细节请看下面代码:
9191
```Go
9292

93-
en["money"] ="USD %d"
94-
cn["money"] ="%d"
93+
en["money"] ="USD %d"
94+
cn["money"] ="%d"
9595

96-
fmt.Println(date(msg(lang,"date_format"),100))
96+
fmt.Println(date(msg(lang,"date_format"),100))
9797

98-
func money_format(fomate string,money int64) string{
99-
return fmt.Sprintf(fomate,money)
100-
}
98+
func money_format(fomate string,money int64) string{
99+
return fmt.Sprintf(fomate,money)
100+
}
101101

102102
```
103103
## 本地化视图和资源
104104
我们可能会根据Locale的不同来展示视图,这些视图包含不同的图片、css、js等各种静态资源。那么应如何来处理这些信息呢?首先我们应按locale来组织文件信息,请看下面的文件目录安排:
105105
```html
106106

107-
views
108-
|--en //英文模板
109-
|--images //存储图片信息
110-
|--js //存储JS文件
111-
|--css //存储css文件
112-
index.tpl //用户首页
113-
login.tpl //登陆首页
114-
|--zh-CN //中文模板
115-
|--images
116-
|--js
117-
|--css
118-
index.tpl
119-
login.tpl
107+
views
108+
|--en //英文模板
109+
|--images //存储图片信息
110+
|--js //存储JS文件
111+
|--css //存储css文件
112+
index.tpl //用户首页
113+
login.tpl //登陆首页
114+
|--zh-CN //中文模板
115+
|--images
116+
|--js
117+
|--css
118+
index.tpl
119+
login.tpl
120120

121121
```
122122
有了这个目录结构后我们就可以在渲染的地方这样来实现代码:
123123
```Go
124124

125-
s1, _ := template.ParseFiles("views"+lang+"index.tpl")
126-
VV.Lang=lang
127-
s1.Execute(os.Stdout, VV)
125+
s1, _ := template.ParseFiles("views"+lang+"index.tpl")
126+
VV.Lang=lang
127+
s1.Execute(os.Stdout, VV)
128128
```
129129
而对于里面的index.tpl里面的资源设置如下:
130130
```html
131131

132-
// js文件
133-
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
134-
// css文件
135-
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
136-
// 图片文件
137-
<img src="views/{{.VV.Lang}}/images/btn.png">
132+
// js文件
133+
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
134+
// css文件
135+
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
136+
// 图片文件
137+
<img src="views/{{.VV.Lang}}/images/btn.png">
138138
```
139139
采用这种方式来本地化视图以及资源时,我们就可以很容易的进行扩展了。
140140

0 commit comments

Comments
 (0)