Если предпочтительный язык пользователя может быть недоступен, вы можете использовать текстовый / языковой пакет Golang для сопоставления запрашиваемых языков с поддерживаемыми языками.
Этот тип соответствия языков является нетривиальной проблемой, как указано в этом прекрасном посте в блоге Go .
Чтобы использовать языковой пакет, создайте сопоставление с кусочком поддерживаемых языков:
var serverLangs = []language.Tag{
language.AmericanEnglish, // en-US fallback
language.German, // de
}
var matcher = language.NewMatcher(serverLangs)
Затем сопоставьте один или несколько предпочитаемых языков. (Предпочтительный язык может основываться на IP-адресе пользователя или заголовке Accept-Language
.)
var userPrefs = []language.Tag{
language.Make("gsw"), // Swiss German
language.Make("fr"), // French
}
tag, index, confidence := matcher.Match(sortLanguageTags(&langs, DescendingQuality)...)
Чтобы получить соответствующий текст для языка, вы можете использовать метод tag.String()
:
type Translation map[string]string
type Translations map[string]Translation
translations := Translations{
"knee": {
language.German.String(): "knie",
language.AmericanEnglish.String(): "knee",
},
}
fmt.Println(translations["knee"][tag.String()]) // prints "knie"