From 0de12c189bd3f2d497f031325116031528812c25 Mon Sep 17 00:00:00 2001 From: vCaesar Date: Sun, 18 Dec 2016 16:29:14 +0800 Subject: [PATCH] Add 10.2.md syntax highlighting --- zh/10.2.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/zh/10.2.md b/zh/10.2.md index e3ed7a19..5ba4aaa4 100644 --- a/zh/10.2.md +++ b/zh/10.2.md @@ -4,6 +4,8 @@ ## 本地化文本消息 文本信息是编写Web应用中最常用到的,也是本地化资源中最多的信息,想要以适合本地语言的方式来显示文本信息,可行的一种方案是:建立需要的语言相应的map来维护一个key-value的关系,在输出之前按需从适合的map中去获取相应的文本,如下是一个简单的示例: +```Go + package main import "fmt" @@ -34,16 +36,17 @@ return "" } - +``` 上面示例演示了不同locale的文本翻译,实现了中文和英文对于同一个key显示不同语言的实现,上面实现了中文的文本消息,如果想切换到英文版本,只需要把lang设置为en即可。 有些时候仅是key-value替换是不能满足需要的,例如"I am 30 years old",中文表达是"我今年30岁了",而此处的30是一个变量,该怎么办呢?这个时候,我们可以结合`fmt.Printf`函数来实现,请看下面的代码: +```Go en["how old"] ="I am %d years old" cn["how old"] ="我今年%d岁了" fmt.Printf(msg(lang, "how old"), 30) - +``` 上面的示例代码仅用以演示内部的实现方案,而实际数据是存储在JSON里面的,所以我们可以通过`json.Unmarshal`来为相应的map填充数据。 ## 本地化日期和时间 @@ -54,6 +57,8 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为了获得对应于当前locale的时间,我们应首先使用`time.LoadLocation(name string)`获取相应于地区的locale,比如`Asia/Shanghai`或`America/Chicago`对应的时区信息,然后再利用此信息与调用`time.Now`获得的Time对象协作来获得最终的时间。详细的请看下面的例子(该例子采用上面例子的一些变量): +```Go + en["time_zone"]="America/Chicago" cn["time_zone"]="Asia/Shanghai" @@ -62,7 +67,9 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为 t = t.In(loc) fmt.Println(t.Format(time.RFC3339)) +``` 我们可以通过类似处理文本格式的方式来解决时间格式的问题,举例如下: +```Go en["date_format"]="%Y-%m-%d %H:%M:%S" cn["date_format"]="%Y年%m月%d日 %H时%M分%S秒" @@ -78,8 +85,10 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为 //%d 替换成24 } +``` ## 本地化货币值 各个地区的货币表示也不一样,处理方式也与日期差不多,细节请看下面代码: +```Go en["money"] ="USD %d" cn["money"] ="¥%d元" @@ -90,9 +99,10 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为 return fmt.Sprintf(fomate,money) } - +``` ## 本地化视图和资源 我们可能会根据Locale的不同来展示视图,这些视图包含不同的图片、css、js等各种静态资源。那么应如何来处理这些信息呢?首先我们应按locale来组织文件信息,请看下面的文件目录安排: +```html views |--en //英文模板 @@ -108,14 +118,16 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为 index.tpl login.tpl +``` 有了这个目录结构后我们就可以在渲染的地方这样来实现代码: - +```Go s1, _ := template.ParseFiles("views"+lang+"index.tpl") VV.Lang=lang s1.Execute(os.Stdout, VV) - +``` 而对于里面的index.tpl里面的资源设置如下: +```html // js文件 @@ -123,7 +135,7 @@ $GOROOT/lib/time包中的timeinfo.zip含有locale对应的时区的定义,为 // 图片文件 - +``` 采用这种方式来本地化视图以及资源时,我们就可以很容易的进行扩展了。 ## 总结