[feature] Allow full BCP 47 in language inputs (#2067)

* Allow full BCP 47 in language inputs

Fixes #2066

* Fuse validation and normalization for languages

* Remove outdated comment line

* Move post language canonicalization test
This commit is contained in:
Vyr Cossont
2023-08-07 01:25:54 -07:00
committed by GitHub
parent 303a6a6b1d
commit 0f812746b7
9 changed files with 132 additions and 70 deletions

View File

@ -99,14 +99,19 @@ func Email(email string) error {
return err
}
// Language checks that the given language string is a 2- or 3-letter ISO 639 code.
// Returns an error if the language cannot be parsed. See: https://pkg.go.dev/golang.org/x/text/language
func Language(lang string) error {
// Language checks that the given language string is a valid, if not necessarily canonical, BCP 47 language tag.
// Returns a canonicalized version of the tag if the language can be parsed.
// Returns an error if the language cannot be parsed.
// See: https://pkg.go.dev/golang.org/x/text/language
func Language(lang string) (string, error) {
if lang == "" {
return errors.New("no language provided")
return "", errors.New("no language provided")
}
_, err := language.ParseBase(lang)
return err
parsed, err := language.Parse(lang)
if err != nil {
return "", err
}
return parsed.String(), err
}
// SignUpReason checks that a sufficient reason is given for a server signup request