fix(i18n): register runtime messages as languages
Some checks failed
Security Scan / security (push) Successful in 14s
Test / test (push) Has been cancelled

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-02 06:06:45 +00:00
parent 5b139b06f1
commit 885933626d
2 changed files with 31 additions and 1 deletions

View file

@ -791,14 +791,25 @@ func (s *Service) getMessage(lang, key string) (Message, bool) {
// AddMessages adds messages for a language at runtime.
func (s *Service) AddMessages(lang string, messages map[string]string) {
lang = normalizeLanguageTag(lang)
if lang == "" {
return
}
s.mu.Lock()
defer s.mu.Unlock()
if s.messages[lang] == nil {
s.messages[lang] = make(map[string]Message)
}
for key, text := range messages {
s.messages[lang][key] = Message{Text: text}
}
tag := language.Make(lang)
if !slices.Contains(s.availableLangs, tag) {
s.availableLangs = append(s.availableLangs, tag)
}
s.mu.Unlock()
s.autoDetectLanguage()
}
// AddLoader loads translations from an additional Loader, merging messages

View file

@ -677,6 +677,25 @@ func TestServiceAddMessages(t *testing.T) {
}
}
func TestServiceAddMessages_RegistersLanguage(t *testing.T) {
svc, err := New()
if err != nil {
t.Fatalf("New() failed: %v", err)
}
svc.AddMessages("fr_CA", map[string]string{
"custom.greeting": "Salut!",
})
if err := svc.SetLanguage("fr_CA"); err != nil {
t.Fatalf("SetLanguage(fr_CA) failed: %v", err)
}
if got := svc.T("custom.greeting"); got != "Salut!" {
t.Fatalf("T(custom.greeting) = %q, want %q", got, "Salut!")
}
}
func TestServiceHandlers(t *testing.T) {
svc, err := New()
if err != nil {