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

results matching ""

    No results matching ""