2026-05-25 12:06:15 +08:00
|
|
|
package i18nx
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func T(ctx *gin.Context, messageID string, data map[string]any) string {
|
|
|
|
|
if ctx != nil {
|
|
|
|
|
if value, exists := ctx.Get(contextLocaleKey); exists {
|
|
|
|
|
if locale, ok := value.(string); ok {
|
|
|
|
|
return TLocale(locale, messageID, data)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-05-31 20:06:44 +08:00
|
|
|
return TLocale(DefaultLocale, messageID, data)
|
2026-05-25 12:06:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TLocale(locale string, messageID string, data map[string]any) string {
|
|
|
|
|
normalized := NormalizeLocale(locale)
|
|
|
|
|
message := localize(normalized, messageID, data)
|
|
|
|
|
if message != "" {
|
|
|
|
|
return message
|
|
|
|
|
}
|
2026-05-31 20:06:44 +08:00
|
|
|
if normalized != DefaultLocale {
|
|
|
|
|
message = localize(DefaultLocale, messageID, data)
|
2026-05-25 12:06:15 +08:00
|
|
|
if message != "" {
|
|
|
|
|
return message
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return messageID
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func localize(locale string, messageID string, data map[string]any) string {
|
2026-05-31 20:06:44 +08:00
|
|
|
localizer := i18n.NewLocalizer(Bundle(), locale, DefaultLocale)
|
2026-05-25 12:06:15 +08:00
|
|
|
message, err := localizer.Localize(&i18n.LocalizeConfig{
|
|
|
|
|
MessageID: messageID,
|
|
|
|
|
TemplateData: data,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
return message
|
|
|
|
|
}
|