home/internal/domain/language.go

69 lines
1.0 KiB
Go

package domain
import (
"strings"
"golang.org/x/text/language"
"golang.org/x/text/language/display"
)
type Language struct {
code string
lang string
name string
dir string
}
var LanguageUnd Language = Language{}
func NewLanguage(raw string) Language {
tag, err := language.BCP47.Parse(raw)
if err != nil || tag == language.Und {
return LanguageUnd
}
out := Language{
code: tag.String(),
dir: "ltr",
name: strings.ToLower(display.Self.Name(tag)),
}
switch tag {
case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
out.dir = "rtl"
}
base, _ := tag.Base()
out.lang = base.String()
return out
}
func (l Language) Lang() string {
return l.lang
}
func (l Language) Code() string {
return l.code
}
func (l Language) Dir() string {
return l.dir
}
func (l Language) Name() string {
return l.name
}
func (l Language) String() string {
if l.code == "" {
return l.code
}
return "und"
}
func (l Language) GoString() string {
return "domain.Language(" + l.String() + ")"
}