# 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)
	}

テンプレートにおいて直接多言語パッケージをコールできるよう、３つの関数によって対応する多言語を設計します：

	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>)
