Header-based language auto-detection (#11867)
This commit is contained in:
parent
d406b81be8
commit
f4473c17ed
3 changed files with 21 additions and 14 deletions
|
|
@ -1,5 +1,5 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<html lang="[[.DefaultLang]]">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
|
|
|||
|
|
@ -35,15 +35,7 @@ export const LOCALES = {
|
|||
};
|
||||
|
||||
export const DEFAULT_LOCALE = "en";
|
||||
|
||||
function getBrowserLocale() {
|
||||
const navigatorLocale =
|
||||
navigator.languages !== undefined ? navigator.languages[0] : navigator.language;
|
||||
if (!navigatorLocale) {
|
||||
return undefined;
|
||||
}
|
||||
return navigatorLocale.trim().split(/-|_/)[0];
|
||||
}
|
||||
const DEFAULT_BROWSER_LOCALE = document.querySelector("html").getAttribute("lang");
|
||||
|
||||
export function getLocalePreference() {
|
||||
return settings.locale;
|
||||
|
|
@ -51,7 +43,7 @@ export function getLocalePreference() {
|
|||
|
||||
export function removeLocalePreference(i18n) {
|
||||
settings.locale = null;
|
||||
setI18nLanguage(i18n, getBrowserLocale());
|
||||
setI18nLanguage(i18n, DEFAULT_BROWSER_LOCALE);
|
||||
ensureCurrentLocaleMessages(i18n);
|
||||
}
|
||||
|
||||
|
|
@ -66,7 +58,7 @@ export function setLocalePreference(i18n, locale) {
|
|||
}
|
||||
|
||||
function getLocale() {
|
||||
return getLocalePreference() || getBrowserLocale();
|
||||
return getLocalePreference() || DEFAULT_BROWSER_LOCALE;
|
||||
}
|
||||
|
||||
export default function setupI18n() {
|
||||
|
|
|
|||
|
|
@ -18,10 +18,22 @@ import (
|
|||
"github.com/evcc-io/evcc/util/jq"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/itchyny/gojq"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
var ignoreState = []string{"releaseNotes"} // excessive size
|
||||
|
||||
// getPreferredLanguage returns the preferred language as two letter code
|
||||
func getPreferredLanguage(header string) string {
|
||||
languages, _, err := language.ParseAcceptLanguage(header)
|
||||
if err != nil || len(languages) == 0 {
|
||||
return "en"
|
||||
}
|
||||
|
||||
base, _ := languages[0].Base()
|
||||
return base.String()
|
||||
}
|
||||
|
||||
func indexHandler() http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "text/html; charset=UTF-8")
|
||||
|
|
@ -39,9 +51,12 @@ func indexHandler() http.HandlerFunc {
|
|||
log.FATAL.Fatal("httpd: failed to create main page template:", err.Error())
|
||||
}
|
||||
|
||||
defaultLang := getPreferredLanguage(r.Header.Get("Accept-Language"))
|
||||
|
||||
if err := t.Execute(w, map[string]interface{}{
|
||||
"Version": Version,
|
||||
"Commit": Commit,
|
||||
"Version": Version,
|
||||
"Commit": Commit,
|
||||
"DefaultLang": defaultLang,
|
||||
}); err != nil {
|
||||
log.ERROR.Println("httpd: failed to render main page:", err.Error())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue