diff --git a/assets/js/language.js b/assets/js/language.js new file mode 100644 index 0000000..a762136 --- /dev/null +++ b/assets/js/language.js @@ -0,0 +1,34 @@ +(() => { + const $navigator = window.navigator; + const $location = window.location; + const $browser = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage']; + let $language; + + // Only do i18n at root, + // otherwise, redirect immediately. + if ($location.pathname !== '/') { + $location.replace('{{ .Permalink }}'); + return 0; + } + + const getFirstLanguage = function () { + if (Array.isArray($navigator.languages)) { + const $len = $navigator.languages.length; + for (let $i = 0; $i < $len; ++$i) { + $language = $navigator.languages[$i]; + if ($language && $language.length) return $language; + } + } + + // Support for other well known properties in browsers. + const $len = $browser.length; + for (let $i = 0; $i < $len; ++$i) { + $language = $navigator[$browser[$i]]; + if ($language && $language.length) return $language; + } + return 'en'; + } + + const $preferLang = getFirstLanguage(); + ($preferLang.indexOf('ru') !== -1) ? $location.replace('/ru/') : $location.replace('/en/'); +})(); diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index ca6ca22..ac3b71e 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,4 +1,4 @@ - + {{ $lang := ((site.LanguageCode) | default "en-US") }} {{ $type := ((.Type) | default "") }} {{ $home := "" }}{{ $node := "" }}{{ $page := "" }} diff --git a/layouts/alias.html b/layouts/alias.html new file mode 100644 index 0000000..7609ed6 --- /dev/null +++ b/layouts/alias.html @@ -0,0 +1,19 @@ + + + + {{ .Permalink }} + + + + + + {{ $jsLang := (resources.Get "js/language.js") }} + {{ $jsLang = (($jsLang) | resources.ExecuteAsTemplate "js/language.js" .) }} + {{ $jsLang = ((($jsLang) | minify) | resources.Fingerprint) }} + + + + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 671c6fc..5251c37 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -36,7 +36,8 @@ {{ $uiTheme := (((resources.Get "js/theme.js") | minify) | resources.Fingerprint) }} - +