完成了第一小节的书写

This commit is contained in:
xiemengjun
2012-10-22 22:58:24 +08:00
parent 6f42ad94c1
commit c2ecdeae1c
2 changed files with 32 additions and 5 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

37
10.1.md
View File

@@ -42,12 +42,39 @@ GO语言默认是"UTF-8"字符集所以我们这一章实现的i18n不考虑
通过域名设置地区有如上所示的优点但是我们一般开发Web应用的时候不会采用这种方式因为首先域名成本比较高开发一个就需要一个域名而且往往统一名称的域名不一定能申请的到其次我们不愿意为每个愿意去本地化一个配置而更多的是采用url后面带参数的方式请看下面的介绍。
###从域名参数设置地区
目前最常用的设置地区的方式是在URL里面带上参数例如www.asta.com/hello?locale=zh或者www.asta.com/zh/hello。这样我们就可以设置地区`i18n.SetLocale(params["locale"])`
这种设置地区方式几乎拥有上面通过域名设置地区的优点他采用RESTful的方式这种方式使得我们不需要增加额外的方式来处理他。但是这种方式需要我们在每一个我们的link里面增加相应的参数locale这也许有点复杂而且有时候可能做起来相当的繁琐。不过我们可以写一个通用的函数url让所有的link地址都通过这个函数来生成然后在这个函数里面增加`locale=params["locale"]`参数。
也许我们希望URL地址看上去更加的RESTful一点例如www.asta.com/en/books(英文站点)和www.asta.com/zh/books(中文站点)这种方式的URL更加有利于SEO而且对于用户也比较友好能够通过URL直观的知道访问的站点。那么这样的URL地址可以通过router来获取locale(参考REST小节里面介绍的router插件实现)
mux.Get("/:locale/books", listbook)
###从客户端设置地区
- Accept-Language
- IP地址
- 用户profile
###从客户端设置地区
在一些特殊的情况下我们需要根据客户端的信息来设置地区而不是通过URL这些信息可能来自于客户端设置的喜好语言(浏览器中设置)也可能根据用户访问站点时的IP地址也可能根据用户在注册的时候填写的所在地信息。这种方式比较适合Web为基础的应用。
- Accept-Language
客户端请求的时候在HTTP头信息里面有`Accept-Language`一般的客户端都会设置该信息下面是Go语言实现的一个简单的根据`Accept-Language`实现设置地区的代码:
AL := r.Header.Get("Accept-Language")
if AL == "en" {
i18n.SetLocale("en")
} else if AL == "zh-CN" {
i18n.SetLocale("zh-CN")
} else if AL == "zh-TW" {
i18n.SetLocale("zh-TW")
}
当然在实际应用中,可能需要更加严格的判断来进行设置地区
- IP地址
另一种根据客户端来设定地区就是用户访问的IP我们根据相应的IP库对应访问的IP到地区目前全球比较常用的就是这个库GeoIP Lite Country。这种设置地区的机制非常简单我们只需要根据IP数据库查询用户的IP然后返回国家地区根据返回的结果设置对应的地区。
- 用户profile
当然你也可以在你的Web应用中让用户来设置相应的地区用户根据你提供的下来菜单或者别的选择相应的地区设置Web中保存相应的设置当用户再次登陆的时候把这个设置复写到地区设置中这样就可以保证该用户每次访问都是基于自己先前设置的地区访问。
##总结
通过上面的介绍,设置地区可以有很多种方式,根据应用程序的不同来选择不同的方式设置地区,但是我们最终期望达到的目的就是让用户访问正确的地区语言,让英语用户访问英文站点,让中文用户访问中文站点。
## links
* [目录](<preface.md>)