Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 131cfb8068 | |||
| 273ce8c7a1 | |||
| 68d90a0496 |
9
error.go
9
error.go
@@ -61,3 +61,12 @@ func (e *Error) Translate(ctx context.Context) string {
|
|||||||
|
|
||||||
return printer.Sprintf(e.key, translatedParams...)
|
return printer.Sprintf(e.key, translatedParams...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Error) Is(other error) bool {
|
||||||
|
switch err := other.(type) {
|
||||||
|
case *Error:
|
||||||
|
return e.key == err.key
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
@@ -16,7 +17,8 @@ import (
|
|||||||
var defaultLanguage = language.Russian
|
var defaultLanguage = language.Russian
|
||||||
|
|
||||||
var (
|
var (
|
||||||
builder *catalog.Builder
|
initOnce sync.Once
|
||||||
|
builder *catalog.Builder
|
||||||
|
|
||||||
supportedLanguages []language.Tag
|
supportedLanguages []language.Tag
|
||||||
supportedLanguagesMap = map[string]struct{}{}
|
supportedLanguagesMap = map[string]struct{}{}
|
||||||
@@ -43,21 +45,27 @@ func TryTranslate(ctx context.Context, obj interface{}) (string, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Init(fs fs.ReadDirFS) error {
|
func Init(fs fs.ReadDirFS) error {
|
||||||
if builder != nil {
|
var err error
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
initCatalog, err := internal.InitBuilder(fs)
|
initOnce.Do(func() {
|
||||||
if err != nil {
|
if builder != nil {
|
||||||
return errors.Wrap(err, "init catalog")
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
builder = initCatalog
|
initCatalog, err := internal.InitBuilder(fs)
|
||||||
|
if err != nil {
|
||||||
|
err = errors.Wrap(err, "init catalog")
|
||||||
|
|
||||||
// Fill the local cache
|
return
|
||||||
GetLanguages()
|
}
|
||||||
|
|
||||||
return nil
|
builder = initCatalog
|
||||||
|
|
||||||
|
// Fill the local cache
|
||||||
|
GetLanguages()
|
||||||
|
})
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPrinter(lang language.Tag) *message.Printer {
|
func GetPrinter(lang language.Tag) *message.Printer {
|
||||||
@@ -77,6 +85,10 @@ func GetPrinter(lang language.Tag) *message.Printer {
|
|||||||
|
|
||||||
func GetLanguages() []language.Tag {
|
func GetLanguages() []language.Tag {
|
||||||
if supportedLanguages == nil {
|
if supportedLanguages == nil {
|
||||||
|
if builder == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
supportedLanguages = builder.Languages()
|
supportedLanguages = builder.Languages()
|
||||||
|
|
||||||
for idx := range supportedLanguages {
|
for idx := range supportedLanguages {
|
||||||
|
|||||||
Reference in New Issue
Block a user