Skip to content

Instantly share code, notes, and snippets.

@clementbiron
Last active July 25, 2023 15:36
Show Gist options
  • Save clementbiron/6a9bef1675c3d4e04b383ca77ed3e3f8 to your computer and use it in GitHub Desktop.
Save clementbiron/6a9bef1675c3d4e04b383ca77ed3e3f8 to your computer and use it in GitHub Desktop.
Maintain Language Preferences on a Hugo Website, small improvment from https://papasmurf.nl/en/blog/hugo_language/
<!DOCTYPE html>
<html {{ with site.LanguageCode | default site.Language.Lang }} lang="{{ . }}"{{ end }}>
<head>
<title>{{ .Permalink }}</title>
<link rel="canonical" href="{{ .Permalink }}">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<noscript>
<meta http-equiv="refresh" content="0; url={{ .Permalink }}"/>
</noscript>
<script>
;(function () {
// Only do i18n at root,
// otherwise, redirect immediately
if (window.location.pathname !== '/') {
window.location.replace('{{ .Permalink }}')
return
}
const getFirstBrowserLanguage = function () {
let nav = window.navigator,
browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
i,
language;
if (Array.isArray(nav.languages)) {
for (i = 0; i < nav.languages.length; i++) {
language = nav.languages[i]
if (language && language.length) {
return language
}
}
}
// support for other well known properties in browsers
for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
language = nav[browserLanguagePropertyKeys[i]]
if (language && language.length) {
return language
}
}
return 'en'
};
const savedLanguage = localStorage.getItem('selectedlanguage');
const languages = { {{ range site.Languages }}"{{ .Lang }}":"{{ .Lang | relURL }}", {{ end }} };
// if a language has been selected earlier
if (savedLanguage) {
// then reselect that language
window.location.replace(languages[savedLanguage]);
} else {
// check the preferred browser language
const preferLang = getFirstBrowserLanguage().slice(0, 2);
const url = languages[preferLang];
// if that language is available on the website then select it
if (url) {
window.location.replace(url);
} else {
// fallback to English
window.location.replace(languages['en']);
}
}
})()
</script>
</head>
<body>
<h1>Rerouting</h1>
<p>You should be rerouted in a jiff, if not, <a href="{{ .Permalink }}">click here</a>.</p>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment