# 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 * [目錄]() * 上一節:[使用者認證](<14.4.md>) * 下一節:[pprof 支援](<14.6.md>)