45 lines
1003 B
Go
45 lines
1003 B
Go
package i18n
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
|
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
//go:embed *.json
|
|
var i18nFiles embed.FS
|
|
|
|
type TranslationFunc func(translationId string, defaultMessage string, params ...any) string
|
|
|
|
type Bundle i18n.Bundle
|
|
|
|
func Init() *Bundle {
|
|
bundle := i18n.NewBundle(language.Russian)
|
|
_, _ = bundle.LoadMessageFileFS(i18nFiles, "en.json")
|
|
|
|
return (*Bundle)(bundle)
|
|
}
|
|
|
|
func LocalizerFunc(bundle *Bundle, lang string) TranslationFunc {
|
|
localizer := i18n.NewLocalizer((*i18n.Bundle)(bundle), lang)
|
|
|
|
return func(translationId string, defaultMessage string, params ...any) string {
|
|
if len(params) > 0 {
|
|
return fmt.Sprintf(localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
DefaultMessage: &i18n.Message{
|
|
ID: translationId,
|
|
Other: defaultMessage,
|
|
},
|
|
}), params...)
|
|
}
|
|
return localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
DefaultMessage: &i18n.Message{
|
|
ID: translationId,
|
|
Other: defaultMessage,
|
|
},
|
|
})
|
|
}
|
|
}
|