Files
build-web-application-with-…/zh-tw/14.5.md
2019-02-26 01:40:54 +08:00

125 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 %} -->