funcI18nT(args ...interface{}) string { ok :=falsevar s stringiflen(args) ==1 { s, ok = args[0].(string) }if!ok { s = fmt.Sprint(args...) }return Tr.Translate(s)}
註冊函式如下:
t.Funcs(template.FuncMap{"T": I18nT})
範本中使用如下:
{{.V.Submit | T}}
時間日期
時間日期呼叫Tr.Time函式來實現相應的時間轉換,mapFunc 的實現如下:
funcI18nTimeDate(args ...interface{}) string { ok :=falsevar s stringiflen(args) ==1 { s, ok = args[0].(string) }if!ok { s = fmt.Sprint(args...) }return Tr.Time(s)}
註冊函式如下:
t.Funcs(template.FuncMap{"TD": I18nTimeDate})
範本中使用如下:
{{.V.Now | TD}}
貨幣資訊
貨幣呼叫Tr.Money函式來實現相應的時間轉換,mapFunc 的實現如下:
funcI18nMoney(args ...interface{}) string { ok :=falsevar s stringiflen(args) ==1 { s, ok = args[0].(string) }if!ok { s = fmt.Sprint(args...) }return Tr.Money(s)}
註冊函式如下:
t.Funcs(template.FuncMap{"M": I18nMoney})
範本中使用如下:
{{.V.Money | M}}
總結
透過這小節我們知道了如何實現一個多語言套件的 Web 應用,透過自訂語言套件我們可以方便的實現多語言,而且透過配置檔案能夠非常方便的擴充多語言,預設情況下,go-i18n 會自定載入一些公共的配置資訊,例如時間、貨幣等,我們就可以非常方便的使用,同時為了支援在範本中使用這些函式,也實現了相應的範本函式,這樣就允許我們在開發 Web 應用的時候直接在範本中透過 pipeline 的方式來操作多語言套件。