Initial commit

This commit is contained in:
2022-10-18 15:44:29 +03:00
commit 3cfda09ced
18 changed files with 1065 additions and 0 deletions

63
error.go Normal file
View File

@@ -0,0 +1,63 @@
package i18n
import (
"context"
"fmt"
"github.com/pkg/errors"
)
type TranslatableError interface {
error
Translatable
}
func TryTranslateError(ctx context.Context, err error) (string, bool) {
var translatable TranslatableError
if errors.As(err, &translatable) {
return translatable.Translate(ctx), true
}
return "", false
}
func NewError(key string) *Error {
return &Error{key: key}
}
type Error struct {
key string
params []interface{}
}
func (e *Error) Error() string {
return e.key
}
func (e *Error) WithParams(params ...interface{}) *Error {
newErr := *e
newErr.params = params
return &newErr
}
func (e *Error) Translate(ctx context.Context) string {
printer := PrinterFromContext(ctx)
translatedParams := make([]interface{}, len(e.params))
for idx, param := range e.params {
switch typed := param.(type) {
case string:
translatedParams[idx] = printer.Sprintf(typed)
case fmt.Stringer:
translatedParams[idx] = printer.Sprintf(typed.String())
default:
translatedParams[idx] = param
}
}
return printer.Sprintf(e.key, translatedParams...)
}