diff --git a/hooks_test.go b/hooks_test.go index 31a0fb9..7d628f3 100644 --- a/hooks_test.go +++ b/hooks_test.go @@ -104,6 +104,35 @@ func TestRegisterLocales_Good_WithInitializedDefaultService(t *testing.T) { assert.Equal(t, "loaded immediately", got) } +func TestSetDefault_Good_LoadsQueuedRegisteredLocales(t *testing.T) { + registeredLocalesMu.Lock() + savedLocales := registeredLocales + savedLoaded := localesLoaded + registeredLocales = nil + localesLoaded = false + registeredLocalesMu.Unlock() + defer func() { + registeredLocalesMu.Lock() + registeredLocales = savedLocales + localesLoaded = savedLoaded + registeredLocalesMu.Unlock() + }() + + fs := fstest.MapFS{ + "locales/en.json": &fstest.MapFile{ + Data: []byte(`{"queued.registration": "loaded via setdefault"}`), + }, + } + RegisterLocales(fs, "locales") + + svc, err := New() + require.NoError(t, err) + SetDefault(svc) + + got := svc.T("queued.registration") + assert.Equal(t, "loaded via setdefault", got) +} + func TestInit_LoadsRegisteredLocales(t *testing.T) { // Save and restore global service state. registeredLocalesMu.Lock() diff --git a/service.go b/service.go index d7d1f78..3c83ccf 100644 --- a/service.go +++ b/service.go @@ -184,6 +184,16 @@ func Default() *Service { // Passing nil clears the default service. func SetDefault(s *Service) { defaultService.Store(s) + if s == nil { + return + } + registeredLocalesMu.Lock() + loaded := localesLoaded + hasRegistrations := len(registeredLocales) > 0 + registeredLocalesMu.Unlock() + if !loaded && hasRegistrations { + loadRegisteredLocales(s) + } } // AddLoader loads translations from a Loader into the default service.