From 2195d424130e134f3742adb143623cbbd6f77d23 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 10:29:18 +0000 Subject: [PATCH] feat(i18n): add message helper wrappers Co-Authored-By: Virgil --- core_service.go | 5 +++++ hooks_test.go | 5 +++++ i18n.go | 9 +++++++++ i18n_test.go | 17 +++++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/core_service.go b/core_service.go index ac78543..890a3c9 100644 --- a/core_service.go +++ b/core_service.go @@ -163,6 +163,11 @@ func (s *CoreService) Raw(messageID string, args ...any) string { return s.svc.Raw(messageID, args...) } +// AddMessages adds message strings to the wrapped service. +func (s *CoreService) AddMessages(lang string, messages map[string]string) { + s.svc.AddMessages(lang, messages) +} + // SetLanguage changes the wrapped service language. func (s *CoreService) SetLanguage(lang string) error { return s.svc.SetLanguage(lang) diff --git a/hooks_test.go b/hooks_test.go index b3d5bff..b8093cd 100644 --- a/hooks_test.go +++ b/hooks_test.go @@ -402,6 +402,11 @@ func TestCoreService_DelegatesToWrappedService(t *testing.T) { "locales/en.json": &fstest.MapFile{Data: []byte(`{"core.service.loaded.fs": "loaded via fs"}`)}, }, "locales")) assert.Equal(t, "loaded via fs", coreSvc.T("core.service.loaded.fs")) + + coreSvc.AddMessages("en", map[string]string{ + "core.service.add.messages": "loaded via add messages", + }) + assert.Equal(t, "loaded via add messages", coreSvc.T("core.service.add.messages")) } func TestInit_ReDetectsRegisteredLocales(t *testing.T) { diff --git a/i18n.go b/i18n.go index 1c52e2d..1ed37f0 100644 --- a/i18n.go +++ b/i18n.go @@ -244,6 +244,15 @@ func LoadFS(fsys fs.FS, dir string) { }) } +// AddMessages adds message strings to the default service for a language. +// +// Example: +// +// i18n.AddMessages("en", map[string]string{"custom.greeting": "Hello!"}) +func AddMessages(lang string, messages map[string]string) { + withDefaultService(func(svc *Service) { svc.AddMessages(lang, messages) }) +} + // PrependHandler inserts one or more handlers at the start of the default service's handler chain. // // Example: diff --git a/i18n_test.go b/i18n_test.go index f97b7ea..c2e7e04 100644 --- a/i18n_test.go +++ b/i18n_test.go @@ -108,6 +108,23 @@ func TestLoadFS_Good(t *testing.T) { assert.Equal(t, "loaded via package helper", got) } +func TestAddMessages_Good(t *testing.T) { + svc, err := New() + require.NoError(t, err) + prev := Default() + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prev) + }) + + AddMessages("en", map[string]string{ + "add.messages.key": "loaded via package helper", + }) + + got := T("add.messages.key") + assert.Equal(t, "loaded via package helper", got) +} + // --- SetLanguage / CurrentLanguage --- func TestSetLanguage_Good(t *testing.T) {