diff --git a/pkg/api/index.go b/pkg/api/index.go index 19db36d3217..cda365a9537 100644 --- a/pkg/api/index.go +++ b/pkg/api/index.go @@ -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 } }