Files
build-web-application-with-…/zh-tw/14.5.md
2019-06-22 23:41:28 +08:00

131 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- {% raw %} -->
# 14.5 多語言支援
我們在第十章介紹過國際化和本地化,開發了一個 go-i18n 函式庫,這小節我們將把該函式庫整合到 beego 框架裡面來,使得我們的框架支援國際化和本地化。
## i18n 整合
beego 中設定全域性變數如下:
```Go
Translation i18n.IL
Lang string //設定語言套件zh、en
LangPath string //設定語言套件所在位置
```
初始化多語言函式:
```Go
func InitLang(){
beego.Translation:=i18n.NewLocale()
beego.Translation.LoadPath(beego.LangPath)
beego.Translation.SetLocale(beego.Lang)
}
```
為了方便在範本中直接呼叫多語言套件,我們設計了三個函式來處理回應的多語言:
```Go
beegoTplFuncMap["Trans"] = i18n.I18nT
beegoTplFuncMap["TransDate"] = i18n.I18nTimeDate
beegoTplFuncMap["TransMoney"] = i18n.I18nMoney
func I18nT(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return beego.Translation.Translate(s)
}
func I18nTimeDate(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return beego.Translation.Time(s)
}
func I18nMoney(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return beego.Translation.Money(s)
}
```
## 多語言開發使用
1. 設定語言以及語言套件所在位置,然後初始化 i18n 物件:
```Go
beego.Lang = "zh"
beego.LangPath = "views/lang"
beego.InitLang()
```
2. 設計多語言套件
上面講了如何初始化多語言套件,現在設計多語言套件,多語言套件是 json 檔案,如第十章介紹的一樣,我們需要把設計的檔案放在 LangPath 下面,例如 zh.json 或者 en.json
```json
# zh.json
{
"zh": {
"submit": "提交",
"create": "建立"
}
}
# en.json
{
"en": {
"submit": "Submit",
"create": "Create"
}
}
```
3. 使用語言套件
我們可以在 controller 中呼叫翻譯取得回應的翻譯語言,如下所示:
```Go
func (this *MainController) Get() {
this.Data["create"] = beego.Translation.Translate("create")
this.TplNames = "index.tpl"
}
```
我們也可以在範本中直接呼叫回應的翻譯函式:
```Go
//直接文字翻譯
{{.create | Trans}}
//時間翻譯
{{.time | TransDate}}
//貨幣翻譯
{{.money | TransMoney}}
```
## links
* [目錄](<preface.md>)
* 上一節:[使用者認證](<14.4.md>)
* 下一節:[pprof 支援](<14.6.md>)
<!-- {% endraw %} -->