我正在致力于一个网站,需要交付不同语言的网页,因为用户选择。例如,如果用户选择西班牙语作为首选语言,服务器应该以西班牙语发送网页的文本元素。
围棋中的标准方法是什么?我也很想知道你们在用什么方法。
谢谢。
发布于 2018-07-03 05:14:21
我总是使用一个映射并在它上定义一个函数,它返回给定键的文本:
type Texts map[string]string
func (t *Texts) Get(key string) string{
return (*t)[key]
}
var texts = map[string]Texts{
"de":Texts{
"title":"Deutscher Titel",
},
"en":Texts{
"title":"English title",
},
}
func executeTemplate(lang string){
tmpl, _ := template.New("example").Parse(`Title: {{.Texts.Get "title" }} `)
tmpl.Execute(os.Stdout,struct{
Texts Texts
}{
Texts: texts[lang],
})
}
发布于 2018-07-03 07:58:05
如果用户的首选语言可能不可用,则可以使用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"
https://stackoverflow.com/questions/51146794
复制