114 lines
3.4 KiB
Markdown
114 lines
3.4 KiB
Markdown
# 14.5 多言語サポート
|
||
第10章において国際化とローカライゼーションおよびgo-i18nライブラリの開発についてご紹介しました。この節ではこのライブラリをbeegoフレームワークの中にもってくることで、我々のフレームワークにおいて国際化とローカライゼーションをサポートさせます。
|
||
|
||
## i18nの導入
|
||
beegoにおいて以下のようにグローバル変数を設定します:
|
||
|
||
Translation i18n.IL
|
||
Lang string //言語パッケージの設定、zh、en
|
||
LangPath string //言語パッケージのパスを設定
|
||
|
||
多言語関数を初期化:
|
||
|
||
func InitLang(){
|
||
beego.Translation:=i18n.NewLocale()
|
||
beego.Translation.LoadPath(beego.LangPath)
|
||
beego.Translation.SetLocale(beego.Lang)
|
||
}
|
||
|
||
テンプレートにおいて直接多言語パッケージをコールできるよう、3つの関数によって対応する多言語を設計します:
|
||
|
||
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オブジェクトを初期化します:
|
||
|
||
beego.Lang = "zh"
|
||
beego.LangPath = "views/lang"
|
||
beego.InitLang()
|
||
|
||
2. 多言語パッケージの設計
|
||
|
||
上ではどのようにして多言語パッケージを初期化するかについてご紹介しました。今から多言語パッケージを設計します。多言語パッケージはjsonファイルです。第10章でご紹介したのと同じように、設計する必要のあるファイルをLangPathの下に置きます。例えばzh.jsonまたはen.jsonといったものです。
|
||
|
||
# zh.json
|
||
|
||
{
|
||
"zh": {
|
||
"submit": "送信",
|
||
"create": "新規作成"
|
||
}
|
||
}
|
||
|
||
#en.json
|
||
|
||
{
|
||
"en": {
|
||
"submit": "Submit",
|
||
"create": "Create"
|
||
}
|
||
}
|
||
|
||
3. 多言語パッケージを使用する
|
||
|
||
controllerの中でコンパイラをコールして対応する翻訳言語を取得することができます。以下に示します:
|
||
|
||
func (this *MainController) Get() {
|
||
this.Data["create"] = beego.Translation.Translate("create")
|
||
this.TplNames = "index.tpl"
|
||
}
|
||
|
||
テンプレートの中で直接対応する翻訳関数をコールしてもかまいません:
|
||
|
||
//直接テキスト翻訳
|
||
{{.create | Trans}}
|
||
|
||
//時間の翻訳
|
||
{{.time | TransDate}}
|
||
|
||
//通貨の翻訳
|
||
{{.money | TransMoney}}
|
||
|
||
## links
|
||
* [目次](<preface.md>)
|
||
* 前へ: [ユーザ認証](<14.4.md>)
|
||
* 次へ: [pprofのサポート](<14.6.md>)
|