diff --git a/service.go b/service.go index 4aafbf7..e30e0e9 100644 --- a/service.go +++ b/service.go @@ -264,7 +264,7 @@ func (s *Service) SetLanguage(lang string) error { matcher := language.NewMatcher(s.availableLangs) bestMatch, bestIndex, confidence := matcher.Match(requestedLang) if confidence == language.No { - return log.E("Service.SetLanguage", "unsupported language: "+lang, nil) + return log.E("Service.SetLanguage", "unsupported language: "+lang+" (available: "+joinAvailableLanguagesLocked(s.availableLangs)+")", nil) } if bestIndex >= 0 && bestIndex < len(s.availableLangs) { s.currentLang = s.availableLangs[bestIndex].String() @@ -336,6 +336,18 @@ func (s *Service) PluralCategory(n int) PluralCategory { return GetPluralCategory(s.currentLang, n) } +func joinAvailableLanguagesLocked(tags []language.Tag) string { + if len(tags) == 0 { + return "" + } + langs := make([]string, len(tags)) + for i, tag := range tags { + langs[i] = tag.String() + } + slices.Sort(langs) + return strings.Join(langs, ", ") +} + func (s *Service) AddHandler(handlers ...KeyHandler) { s.mu.Lock() defer s.mu.Unlock() diff --git a/service_test.go b/service_test.go index a391439..9b623ad 100644 --- a/service_test.go +++ b/service_test.go @@ -1,6 +1,7 @@ package i18n import ( + "strings" "testing" "testing/fstest" "time" @@ -89,6 +90,27 @@ func TestServiceAvailableLanguagesSorted(t *testing.T) { } } +func TestServiceSetLanguageUnsupportedIncludesAvailableLanguages(t *testing.T) { + svc, err := NewWithLoader(messageBaseFallbackLoader{}) + if err != nil { + t.Fatalf("NewWithLoader() failed: %v", err) + } + + err = svc.SetLanguage("es") + if err == nil { + t.Fatal("SetLanguage(es) succeeded, want error") + } + msg := err.Error() + if !strings.Contains(msg, "unsupported language: es") { + t.Fatalf("SetLanguage(es) error = %q, want unsupported language message", msg) + } + for _, want := range []string{"en", "en-GB", "fr"} { + if !strings.Contains(msg, want) { + t.Fatalf("SetLanguage(es) error = %q, want available language %q", msg, want) + } + } +} + func TestServiceT(t *testing.T) { svc, err := New() if err != nil {