From 131cfb80689589eae9aa2545ad7bd5290b038e07 Mon Sep 17 00:00:00 2001 From: derfenix Date: Mon, 26 Dec 2022 15:38:43 +0300 Subject: [PATCH] Init once --- translator.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/translator.go b/translator.go index fd4631f..bf20e6a 100644 --- a/translator.go +++ b/translator.go @@ -4,6 +4,7 @@ import ( "context" "io/fs" "net/http" + "sync" "github.com/pkg/errors" "golang.org/x/text/language" @@ -16,7 +17,8 @@ import ( var defaultLanguage = language.Russian var ( - builder *catalog.Builder + initOnce sync.Once + builder *catalog.Builder supportedLanguages []language.Tag supportedLanguagesMap = map[string]struct{}{} @@ -43,21 +45,27 @@ func TryTranslate(ctx context.Context, obj interface{}) (string, bool) { } func Init(fs fs.ReadDirFS) error { - if builder != nil { - return nil - } + var err error - initCatalog, err := internal.InitBuilder(fs) - if err != nil { - return errors.Wrap(err, "init catalog") - } + initOnce.Do(func() { + if builder != nil { + return + } - builder = initCatalog + initCatalog, err := internal.InitBuilder(fs) + if err != nil { + err = errors.Wrap(err, "init catalog") - // Fill the local cache - GetLanguages() + return + } - return nil + builder = initCatalog + + // Fill the local cache + GetLanguages() + }) + + return err } func GetPrinter(lang language.Tag) *message.Printer {