> For the complete documentation index, see [llms.txt](https://willh.gitbook.io/build-web-application-with-golang-zhtw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://willh.gitbook.io/build-web-application-with-golang-zhtw/14.0/14.5.md).

# 多語言支援

我們在第十章介紹過國際化和本地化，開發了一個 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()
```

1. 設計多語言套件

```
上面講了如何初始化多語言套件，現在設計多語言套件，多語言套件是 json 檔案，如第十章介紹的一樣，我們需要把設計的檔案放在 LangPath 下面，例如 zh.json 或者 en.json
```

```javascript
# zh.json

{
"zh": {
    "submit": "提交",
    "create": "建立"
    }
}

# en.json

{
"en": {
    "submit": "Submit",
    "create": "Create"
    }
}
```

1. 使用語言套件

```
我們可以在 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

* [目錄](https://github.com/doggy8088/build-web-application-with-golang-zhtw/tree/4cbbaa31bdfc3678915eb91f23db2f1bad554a20/preface.md)
* 上一節: [使用者認證](/build-web-application-with-golang-zhtw/14.0/14.4.md)
* 下一節: [pprof 支援](/build-web-application-with-golang-zhtw/14.0/14.6.md)
