mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-04 13:52:26 +08:00
56 lines
1016 B
Go
56 lines
1016 B
Go
// Package mid provides ...
|
|
package mid
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// LangOpts 语言选项
|
|
type LangOpts struct {
|
|
CookieName string
|
|
Default string
|
|
Supported []string
|
|
}
|
|
|
|
// isExist language
|
|
func (opts LangOpts) isExist(l string) bool {
|
|
for _, v := range opts.Supported {
|
|
if v == l {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// LangMiddleware set language
|
|
func LangMiddleware(opts LangOpts) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
lang, err := c.Cookie(opts.CookieName)
|
|
// found cookie
|
|
if err == nil {
|
|
c.Set(opts.CookieName, lang)
|
|
return
|
|
}
|
|
// set cookie
|
|
al := strings.ToLower(c.GetHeader("Accept-Language"))
|
|
if al != "" {
|
|
// choose default if not supported
|
|
lang = opts.Default
|
|
|
|
langs := strings.Split(al, ",")
|
|
for _, v := range langs {
|
|
if opts.isExist(v) {
|
|
lang = v
|
|
break
|
|
}
|
|
}
|
|
} else {
|
|
lang = opts.Default
|
|
}
|
|
c.SetCookie(opts.CookieName, lang, 86400*365, "/", "", false, false)
|
|
c.Set(opts.CookieName, lang)
|
|
}
|
|
}
|