Files
build-web-application-with-…/ja/14.5.md
2014-12-14 23:27:42 +08:00

114 lines
3.4 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.
# 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>)