diff --git a/assets/js/preferred-lang/index.ts b/assets/js/preferred-lang/index.ts new file mode 100644 index 00000000..c8f4737b --- /dev/null +++ b/assets/js/preferred-lang/index.ts @@ -0,0 +1,23 @@ +import { default as params } from '@params'; + +(() => { + const lang = navigator.language || navigator.userLanguage + + // match the exact language code. + if (lang in params.homes) { + window.location.href = params.homes[lang] + return + } + + // match the main language code. + const codes = lang.split('-') + for (let lang in params.homes) { + if (lang.indexOf(codes[0]) === 0) { + window.location.href = params.homes[lang] + return + } + } + + // fallback to the default language. + window.location.href = params.fallback +})() diff --git a/layouts/alias.html b/layouts/alias.html index 382852bb..ddb3dd2f 100644 --- a/layouts/alias.html +++ b/layouts/alias.html @@ -4,10 +4,24 @@
{{- partial "assets/init/js" .Page -}} {{- partialCached "assets/main/css" .Page }} + {{- $isHome := eq .Permalink (site.Sites.First.Home.Permalink) }} + {{- if $isHome }} + {{- $homes := newScratch }} + {{- range site.Sites }} + {{- $homes.Set .Home.Lang .Home.Permalink }} + {{- end }} + {{- $opts := dict + "minify" hugo.IsProduction + "targetPath" "js/preferred-lang.js" + "params" (dict "homes" $homes.Values "fallback" .Permalink) + }} + {{- $js := resources.Get "js/preferred-lang/index.ts" | js.Build $opts }} + + {{- end }}