diff --git a/hooks.go b/hooks.go index 113e592..643838b 100644 --- a/hooks.go +++ b/hooks.go @@ -35,11 +35,9 @@ func RegisterLocales(fsys fs.FS, dir string) { registeredLocalesMu.Lock() defer registeredLocalesMu.Unlock() registeredLocales = append(registeredLocales, localeRegistration{fsys: fsys, dir: dir}) - if localesLoaded { - if svc := Default(); svc != nil { - if err := svc.LoadFS(fsys, dir); err != nil { - log.Printf("i18n: RegisterLocales failed to load %q: %v", dir, err) - } + if svc := defaultService.Load(); svc != nil { + if err := svc.LoadFS(fsys, dir); err != nil { + log.Printf("i18n: RegisterLocales failed to load %q: %v", dir, err) } } } diff --git a/hooks_test.go b/hooks_test.go index e8929b8..22bd234 100644 --- a/hooks_test.go +++ b/hooks_test.go @@ -74,6 +74,36 @@ func TestRegisterLocales_Good_AfterLocalesLoaded(t *testing.T) { assert.Equal(t, "arrived late", got) } +func TestRegisterLocales_Good_WithInitializedDefaultService(t *testing.T) { + svc, err := New() + require.NoError(t, err) + SetDefault(svc) + + 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(`{"eager.registration": "loaded immediately"}`), + }, + } + + RegisterLocales(fs, "locales") + + got := svc.T("eager.registration") + assert.Equal(t, "loaded immediately", got) +} + func TestInit_LoadsRegisteredLocales(t *testing.T) { // Save and restore global service state. registeredLocalesMu.Lock()