diff --git a/service.go b/service.go index bac71c6..8fd85a3 100644 --- a/service.go +++ b/service.go @@ -392,7 +392,13 @@ func (s *Service) resolveDirect(messageID string, data any) string { return text } } - return s.tryResolve(s.fallbackLang, messageID, data) + if text := s.tryResolve(s.fallbackLang, messageID, data); text != "" { + return text + } + if base := baseLanguageTag(s.fallbackLang); base != "" && base != s.fallbackLang { + return s.tryResolve(base, messageID, data) + } + return "" } func (s *Service) resolveWithFallback(messageID string, data any) string { diff --git a/service_test.go b/service_test.go index 7f7a8ad..16f69b4 100644 --- a/service_test.go +++ b/service_test.go @@ -296,6 +296,26 @@ func TestServiceMessageFallbackUsesBaseLanguageTagBeforeConfiguredFallback(t *te } } +func TestServiceMessageFallbackUsesConfiguredFallbackBaseLanguageTag(t *testing.T) { + svc, err := NewWithLoader(messageBaseFallbackLoader{}) + if err != nil { + t.Fatalf("NewWithLoader() failed: %v", err) + } + + svc.AddMessages("fr", map[string]string{ + "greeting": "bonjour", + }) + + if err := svc.SetLanguage("en-GB"); err != nil { + t.Fatalf("SetLanguage(en-GB) failed: %v", err) + } + svc.SetFallback("fr-CA") + + if got := svc.T("greeting"); got != "bonjour" { + t.Fatalf("T(greeting) = %q, want %q", got, "bonjour") + } +} + func TestServiceCommonFallbackUsesBaseLanguageTagBeforeConfiguredFallback(t *testing.T) { svc, err := NewWithLoader(messageBaseFallbackLoader{}) if err != nil {