From c2ecdeae1c6450b10cd80dbaa71d15a3aa903e73 Mon Sep 17 00:00:00 2001 From: xiemengjun Date: Mon, 22 Oct 2012 22:58:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=B0=8F=E8=8A=82=E7=9A=84=E4=B9=A6=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 15364 bytes 10.1.md | 37 ++++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f5aba3787cba9aff6af413cfc8d0fa1974693911 GIT binary patch literal 15364 zcmeI1J8l#~5QeLFn`Lt)CvOigY3})e~{)x?aeE|KoJWsK2wN zF=={{cXF_GbiBWJbiC*2xDf`zKo|%EVIU0r3kLK%8^`ooiE#}BVIU0rHh}j-rzhg9 zkMk1k)u9(#0%**7+YbG#>i|pB^>Nn6d5M-(^DL`})F(~-5+jx5`u`5N##tZdC6?rp zN^(hk$*EtVBr9Fhb%sltl^EAB5C*&ftlcNFDmU${*Y9|g9_zXM!wySa*jvgwHf>Y( zHf6t1_6}o5&nbJCvR@b2%-c17yTDymZbfs13D>gmcaibhz``$@dVsU>IiaZu`P`tX z3plRwzSP&-)j6r*ikt{)+ic%LFN1BiPCgD=SMqJPjj+v@5tjBc+D6!WtnX~}`1;HyDV@+@^=ZaquKBF1f%Z|3Ej*E&y>O?{bL z&vIXI>sji{+6ko2_mByFtBH+(h7%I)GQgQU`ELSn2@dmaxsji++z#0+&F`>%ls9%Z*0s!jZ{3xSz4lJe7kc6VH!snW=*70FY zjL&*+1rdjSp7n8FqTbQtulyKL_8{my)7GeGgIP>r`8*SARL|0RrmazjY^?vW`wXw# zSFHbS2fkX*mi-Dk7HyrnI~ccrSpVCD7nd*)2EsrX2m@gt41|F&5C+0P7zhJlAPj_o LFc1d*O9MXvN`^+% literal 0 HcmV?d00001 diff --git a/10.1.md b/10.1.md index e54c6b0d..b737a384 100644 --- a/10.1.md +++ b/10.1.md @@ -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 * [目录]()