✨ add i18n support
This commit is contained in:
61
common/i18n/i18n.go
Normal file
61
common/i18n/i18n.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
i18n2 "github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
func FormatText(ctx context.Context, msgId string, defaultText string) string {
|
||||
return FormatTextWithData(ctx, msgId, defaultText, nil)
|
||||
}
|
||||
|
||||
func FormatTextWithData(ctx context.Context, msgId string, defaultText string, args map[string]interface{}) string {
|
||||
return FormatMessage(ctx, &i18n2.Message{
|
||||
ID: msgId,
|
||||
Other: defaultText,
|
||||
}, args)
|
||||
}
|
||||
|
||||
func FormatMessage(ctx context.Context, message *i18n2.Message, args map[string]interface{}) string {
|
||||
if localizer, ok := getLocalizer(ctx); ok {
|
||||
return localizer.MustLocalize(&i18n2.LocalizeConfig{
|
||||
DefaultMessage: message,
|
||||
TemplateData: args,
|
||||
})
|
||||
}
|
||||
return formatInternalMessage(message, args)
|
||||
}
|
||||
|
||||
func formatInternalMessage(message *i18n2.Message, args map[string]interface{}) string {
|
||||
if args == nil {
|
||||
return message.Other
|
||||
}
|
||||
tpl := i18n2.NewMessageTemplate(message)
|
||||
msg, err := tpl.Execute("other", args, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
func FetchCurrentLanguageFromCtx(ctx context.Context) (*language.Tag, bool) {
|
||||
v := ctx.Value(I18nCurrentLangKey)
|
||||
if l, b := v.(language.Tag); b {
|
||||
return &l, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func LocalizedString(ctx context.Context, defaultValue string, langMap map[language.Tag]string) string {
|
||||
langTag, tagExists := FetchCurrentLanguageFromCtx(ctx)
|
||||
if !tagExists {
|
||||
return defaultValue
|
||||
}
|
||||
str, ok := langMap[*langTag]
|
||||
if !ok {
|
||||
return defaultValue
|
||||
}
|
||||
return str
|
||||
}
|
Reference in New Issue
Block a user