1
0
Fork 0
jf2/lang.go

48 lines
954 B
Go

package jf2
import (
"fmt"
"strconv"
"golang.org/x/text/language"
)
// Lang is the localization language of the containing object and all
// sub-objects, unless overridden by another lang definition. Setting lang at a
// lower level overrides any lang value set at higher levels.
type Lang struct {
language.Tag
}
func (l *Lang) UnmarshalJSON(v []byte) error {
unquoted, err := strconv.Unquote(string(v))
if err != nil {
return fmt.Errorf("JF2: Lang: cannot unquote value: %w", err)
}
parsed, err := language.Parse(unquoted)
if err != nil {
return fmt.Errorf("JF2: Lang: cannot parse value as language tag: %w", err)
}
l.Tag = parsed
return nil
}
func (l Lang) MarshalJSON() ([]byte, error) {
if l.Tag != language.Und {
return []byte(strconv.Quote(l.Tag.String())), nil
}
return nil, nil
}
func (l Lang) String() string {
return l.Tag.String()
}
func (l Lang) GoString() string {
return "jf2.Lang(" + l.String() + ")"
}