28 lines
659 B
Go
28 lines
659 B
Go
package shared
|
|
|
|
import "golang.org/x/text/language"
|
|
|
|
const defaultPreferredLanguage = "en"
|
|
|
|
// ResolvePreferredLanguage returns the first canonical BCP 47 language tag
|
|
// accepted from value, or the stable "en" fallback when the input is absent,
|
|
// malformed, or too unspecific for auth registration purposes.
|
|
func ResolvePreferredLanguage(value string) string {
|
|
tags, _, err := language.ParseAcceptLanguage(value)
|
|
if err != nil {
|
|
return defaultPreferredLanguage
|
|
}
|
|
|
|
for _, tag := range tags {
|
|
canonical := tag.String()
|
|
switch canonical {
|
|
case "", "und", "mul":
|
|
continue
|
|
default:
|
|
return canonical
|
|
}
|
|
}
|
|
|
|
return defaultPreferredLanguage
|
|
}
|