完成小部分

This commit is contained in:
astaxie
2012-10-22 17:57:17 +08:00
parent 95b5b43cf5
commit 6f42ad94c1

34
10.1.md
View File

@@ -7,9 +7,43 @@ GO语言默认是"UTF-8"字符集所以我们这一章实现的i18n不考虑
>在Linux和Solaris系统中可以通过`locale -a`命令列举所有支持的地区名读者可以看到这些地区名的命名规范。对于BSD等系统没有locale命令但是地区信息存储在/usr/share/locale中。
##设置地区
有了上面对地区的定义,那么我们就需要根据用户的信息(访问信息、个人信息、访问域名等)来设置地区,我们可以通过如下几种方式来设置用户的地区。
###通过域名设置地区
我们设置地区有一个办法就是在应用运行的时候才用域名分级的方式例如我们采用www.asta.com当做我们的英文站(默认站)而把域名www.asta.cn当做中文站点的域名。这样在我们应用里面设置对应的域名和地区的对应关系就可以设置好地区。这样处理有几点好处
- 通过URL就可以很明显的识别
- 用户可以通过域名很直观的知道将访问那种语言的站点
- 在Go程序中实现非常的简单方便通过一个map就可以实现
- 有利于搜索引擎抓取能够提高站点的SEO
我们可以通过下面的代码来实现域名的对应locale
if r.Host == "www.asta.com" {
i18n.SetLocale("en")
} else if r.Host == "www.asta.cn" {
i18n.SetLocale("zh-CN")
} else if r.Host == "www.asta.tw" {
i18n.SetLocale("zh-TW")
}
当然除了整域名设置地区之外,我们还可以通过子域名来设置地区,例如"en.asta.com"表示英文站点,"cn.asta.com"表示中文站点。实现代码如下所示:
prefix := strings.Split(r.Host,".")
if prefix[0] == "en" {
i18n.SetLocale("en")
} else if prefix[0] == "cn" {
i18n.SetLocale("zh-CN")
} else if prefix[0] == "tw" {
i18n.SetLocale("zh-TW")
}
通过域名设置地区有如上所示的优点但是我们一般开发Web应用的时候不会采用这种方式因为首先域名成本比较高开发一个就需要一个域名而且往往统一名称的域名不一定能申请的到其次我们不愿意为每个愿意去本地化一个配置而更多的是采用url后面带参数的方式请看下面的介绍。
###从域名参数设置地区
###从客户端设置地区
- Accept-Language
- IP地址