♻️ Refactored Language domain initialization

This commit is contained in:
Maxim Lebedev 2023-11-13 05:12:37 +06:00
parent 66dadfe9c3
commit c83a86119e
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
2 changed files with 41 additions and 33 deletions

View File

@ -14,19 +14,25 @@ type Language struct {
dir string
}
func NewLanguage(tag language.Tag) Language {
out := Language{dir: "ltr"}
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.Und:
return out
case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
out.dir = "rtl"
}
out.name = strings.ToLower(display.Self.Name(tag))
out.code = tag.String()
base, _ := tag.Base()
out.lang = base.String()
@ -50,9 +56,13 @@ func (l Language) Name() string {
}
func (l Language) String() string {
return l.code
if l.code == "" {
return l.code
}
return "und"
}
func (l Language) GoString() string {
return "domain.Language(" + l.code + ")"
return "domain.Language(" + l.String() + ")"
}

View File

@ -3,8 +3,6 @@ package domain_test
import (
"testing"
"golang.org/x/text/language"
"source.toby3d.me/toby3d/home/internal/domain"
)
@ -12,13 +10,13 @@ func TestLanguage_Lang(t *testing.T) {
t.Parallel()
for name, tc := range map[string]struct {
input language.Tag
input string
expect string
}{
"2letter": {language.Make("en"), "en"},
"3letter": {language.Make("eng"), "en"},
"region": {language.Make("en-US"), "en"},
"und": {language.Und, ""},
"2letter": {"en", "en"},
"3letter": {"eng", "en"},
"region": {"en-US", "en"},
"und": {"", ""},
} {
name, tc := name, tc
@ -36,13 +34,13 @@ func TestLanguage_Code(t *testing.T) {
t.Parallel()
for name, tc := range map[string]struct {
input language.Tag
input string
expect string
}{
"2letter": {language.Make("en"), "en"},
"3letter": {language.Make("eng"), "en"},
"region": {language.Make("en-US"), "en-US"},
"und": {language.Und, ""},
"2letter": {"en", "en"},
"3letter": {"eng", "en"},
"region": {"en-US", "en-US"},
"und": {"", ""},
} {
name, tc := name, tc
@ -60,14 +58,14 @@ func TestLanguage_Dir(t *testing.T) {
t.Parallel()
for name, tc := range map[string]struct {
input language.Tag
input string
expect string
}{
"2letter": {language.Make("en"), "ltr"},
"rtl": {language.Urdu, "rtl"},
"3letter": {language.Make("eng"), "ltr"},
"region": {language.Make("en-US"), "ltr"},
"und": {language.Und, "ltr"},
"2letter": {"en", "ltr"},
"rtl": {"ur", "rtl"},
"3letter": {"eng", "ltr"},
"region": {"en-US", "ltr"},
"und": {"", ""},
} {
name, tc := name, tc
@ -85,14 +83,14 @@ func TestLanguage_Name(t *testing.T) {
t.Parallel()
for name, tc := range map[string]struct {
input language.Tag
input string
expect string
}{
"localized": {language.Russian, "русский"},
"2letter": {language.Make("en"), "english"},
"3letter": {language.Make("eng"), "english"},
"region": {language.Make("en-US"), "american english"},
"und": {language.Und, ""},
"localized": {"ru", "русский"},
"2letter": {"en", "english"},
"3letter": {"eng", "english"},
"region": {"en-US", "american english"},
"und": {"", ""},
} {
name, tc := name, tc