代码拉取完成,页面将自动刷新
package eztools
import (
"github.com/BurntSushi/toml"
"github.com/Xuanwo/go-locale"
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/text/language"
"golang.org/x/text/language/display"
)
var (
i18nBundle *i18n.Bundle
i18nLocalizer *i18n.Localizer
)
const i18nFmt = "toml"
// InitLanguages initialize resources for i18n
// 1/4
func InitLanguages() {
i18nBundle = i18n.NewBundle(language.English)
i18nBundle.RegisterUnmarshalFunc(i18nFmt, toml.Unmarshal)
}
// AddLanguage add a language resource
// 2*n/4
/* Example: ID = "translated string"
AddLanguage([]byte(`
StrFlw = "flow"
StrAll = "select all"
`), "en"))
*/
func AddLanguage(language, translations string) {
if i18nBundle == nil {
return
}
i18nBundle.MustParseMessageFileBytes([]byte(translations),
language+"."+i18nFmt)
}
// LoadLanguage load language of system
// 3/4
func LoadLanguage(lang string) (string, error) {
if len(lang) < 1 {
tag, err := locale.Detect()
if err != nil {
return "", err
}
lang = tag.String()
}
i18nLocalizer = i18n.NewLocalizer(i18nBundle, lang)
return lang, nil
}
// GetLanguageStr returns translated string by ID
// 4*n/4
func GetLanguageStr(id string) (string, error) {
if i18nLocalizer == nil {
return "", ErrOutOfBound
}
return i18nLocalizer.Localize(&i18n.LocalizeConfig{MessageID: id})
}
// ListLanguages loops all translated languages
// Parameters: name is like "English", id is like "en"
func ListLanguages(fun func(name, id string)) {
if i18nBundle == nil {
return
}
for _, tag := range i18nBundle.LanguageTags() {
fun(display.Self.Name(tag), tag.String())
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。