fix(loader): accept grammar aliases
This commit is contained in:
parent
d3a12bfe74
commit
0e914911fa
2 changed files with 65 additions and 1 deletions
10
loader.go
10
loader.go
|
|
@ -277,7 +277,7 @@ func loadGrammarNoun(fullKey, key string, v map[string]any, grammar *GrammarData
|
|||
}
|
||||
|
||||
func loadGrammarSignals(fullKey string, v map[string]any, grammar *GrammarData) bool {
|
||||
if grammar == nil || fullKey != "gram.signal" {
|
||||
if grammar == nil || (fullKey != "gram.signal" && fullKey != "gram.signals") {
|
||||
return false
|
||||
}
|
||||
loadSignalStringList := func(dst *[]string, raw any) {
|
||||
|
|
@ -327,6 +327,14 @@ func loadGrammarArticle(fullKey string, v map[string]any, grammar *GrammarData)
|
|||
}
|
||||
}
|
||||
}
|
||||
if bg, ok := v["byGender"].(map[string]any); ok {
|
||||
grammar.Articles.ByGender = make(map[string]string, len(bg))
|
||||
for g, art := range bg {
|
||||
if s, ok := art.(string); ok {
|
||||
grammar.Articles.ByGender[g] = s
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -683,6 +683,62 @@ func TestNewWithLoader_LoadsGrammarOnlyLocale(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestNewWithLoader_AcceptsGrammarAliases(t *testing.T) {
|
||||
loaderFS := fstest.MapFS{
|
||||
"en.json": &fstest.MapFile{
|
||||
Data: []byte(`{
|
||||
"gram": {
|
||||
"article": {
|
||||
"byGender": { "f": "la", "m": "le" }
|
||||
},
|
||||
"noun": {
|
||||
"user": { "one": "user", "other": "users", "gender": "f" }
|
||||
},
|
||||
"signals": {
|
||||
"noun_determiner": ["the"],
|
||||
"verb_auxiliary": ["will"],
|
||||
"verb_infinitive": ["to"],
|
||||
"verb_negation": ["never"]
|
||||
}
|
||||
}
|
||||
}`),
|
||||
},
|
||||
}
|
||||
|
||||
svc, err := NewWithLoader(NewFSLoader(loaderFS, "."))
|
||||
if err != nil {
|
||||
t.Fatalf("NewWithLoader() failed: %v", err)
|
||||
}
|
||||
|
||||
data := GetGrammarData("en")
|
||||
if data == nil {
|
||||
t.Fatal("alias grammar data was not loaded")
|
||||
}
|
||||
if data.Articles.ByGender["f"] != "la" || data.Articles.ByGender["m"] != "le" {
|
||||
t.Fatalf("article byGender alias not loaded: %+v", data.Articles.ByGender)
|
||||
}
|
||||
if got, want := data.Signals.NounDeterminers, []string{"the"}; !slices.Equal(got, want) {
|
||||
t.Fatalf("signal alias noun_determiner = %v, want %v", got, want)
|
||||
}
|
||||
if got, want := data.Signals.VerbAuxiliaries, []string{"will"}; !slices.Equal(got, want) {
|
||||
t.Fatalf("signal alias verb_auxiliary = %v, want %v", got, want)
|
||||
}
|
||||
if got, want := data.Signals.VerbInfinitive, []string{"to"}; !slices.Equal(got, want) {
|
||||
t.Fatalf("signal alias verb_infinitive = %v, want %v", got, want)
|
||||
}
|
||||
if got, want := data.Signals.VerbNegation, []string{"never"}; !slices.Equal(got, want) {
|
||||
t.Fatalf("signal alias verb_negation = %v, want %v", got, want)
|
||||
}
|
||||
|
||||
if err := svc.SetLanguage("en"); err != nil {
|
||||
t.Fatalf("SetLanguage(en) failed: %v", err)
|
||||
}
|
||||
SetDefault(svc)
|
||||
if got := DefinitePhrase("user"); got != "la user" && got != "la User" {
|
||||
t.Fatalf("DefinitePhrase(user) = %q, want article from byGender alias", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFlattenPluralObject(t *testing.T) {
|
||||
messages := make(map[string]Message)
|
||||
raw := map[string]any{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue