I18n: Default regional format to Accept-Language header value (#108468)

* I18n: Default regional format to Accept-Language header value

* comment

* rejigger

* rejigger preferences
This commit is contained in:
Josh Hunt
2025-07-23 09:23:05 +01:00
committed by GitHub
parent aedd7b6e34
commit b2688dd5ff
+27 -7
View File
@@ -69,8 +69,18 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV
// Locale is used for some number and date/time formatting, whereas language is used just for
// translating words in the interface
acceptLangHeader := c.Req.Header.Get("Accept-Language")
acceptLangHeaderFirstValue := ""
if len(acceptLangHeader) > 0 {
parts := strings.Split(acceptLangHeader, ",")
acceptLangHeaderFirstValue = parts[0]
}
locale := "en-US" // default to en formatting, but use the accept-lang header or user's preference
var regionalFormat string
if acceptLangHeaderFirstValue != "" {
locale = acceptLangHeaderFirstValue
}
language := "" // frontend will set the default language
urlPrefs := getURLPrefs(c)
@@ -80,17 +90,27 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV
language = prefs.JSONData.Language
}
if len(acceptLangHeader) > 0 {
parts := strings.Split(acceptLangHeader, ",")
locale = parts[0]
}
var regionalFormat string
if hs.Features.IsEnabled(c.Req.Context(), featuremgmt.FlagLocaleFormatPreference) {
regionalFormat = "en" // default to "en", not "en-US", matching the regionalFormat code
regionalFormat = "en"
// We default the regional format (locale) to the Accept-Language header rather than the language preference
// mainly because we want to avoid defaulting to en-US for most users who have not set a preference, and we
// don't have more specific English language preferences yet.
// Regional format preference order (from most-preferred to least):
// 1. URL parameter
// 2. regionalFormat User preference
// 3. Accept-Language header
// 4. Language preference
if urlPrefs.RegionalFormat != "" {
regionalFormat = urlPrefs.RegionalFormat
} else if prefs.JSONData.RegionalFormat != "" {
regionalFormat = prefs.JSONData.RegionalFormat
} else if acceptLangHeaderFirstValue != "" {
regionalFormat = acceptLangHeaderFirstValue
} else if language != "" {
regionalFormat = language
}
}