Merge pull request #129 from jimmyGALLAND/fix-detect-language

fix and improves compatibility with the browser language detector
This commit is contained in:
RustDesk 2023-01-24 23:25:08 +08:00 committed by GitHub
commit e405967397
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,54 +12,81 @@
<script>
document.addEventListener('DOMContentLoaded', function() {
const default_language = 'en'
var root_path = (new URL('{{ site.BaseURL }}')).pathname;
// Only do i18n at root,
// otherwise, redirect immediately
if ( window.location.pathname !== root_path) {
window.location.replace('{{ .Permalink }}')
return
}
var deleteFinalSlash = function(s){
if ( s.substr(-1) == '/' ){
return s.slice(0, -1)
}else{
return s
}
}
const default_language = '{{ site.Language.Lang }}'
const wlp = deleteFinalSlash(window.location.pathname)
const root_path = deleteFinalSlash( (new URL('{{ site.BaseURL }}')).pathname )
var getFirstBrowserLanguage = function () {
var nav = window.navigator,
browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
i,
language
// Only do i18n at root,
// otherwise, redirect immediately
if ( wlp !== root_path) {
window.location.replace('{{ .Permalink }}')
return
}
if (Array.isArray(nav.languages)) {
for (i = 0; i < nav.languages.length; i++) {
language = nav.languages[i]
if (language && language.length) {
return language
var getFirstBrowserLanguage = function () {
var 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.replace('_', '-').toLowerCase()
}
}
}
}
// 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
// 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.replace('_', '-').toLowerCase()
}
}
return default_language
}
return default_language
}
const list_languages = ({{site.Languages}}).map(function(value,index) { return value['Lang']; })
const nav_lang = getFirstBrowserLanguage()
if ( root_path.substr(-1) == '/' ) root_path = root_path.slice(0, -1)
var languages_available = [];
( {{ site.Languages }} ).forEach(
function(value,index) {
if ( value['Disabled'] == false ){
languages_available.push(value['Lang'])
}
}
)
const nav_lang = getFirstBrowserLanguage()
var found_lang = default_language
if ( list_languages.indexOf( nav_lang ) !== -1 ){
window.location.replace(`${root_path}/${nav_lang}/`)
} else {
// fallback to English
window.location.replace(`${root_path}/${default_language}/`)
}
}
);
if ( languages_available.indexOf( nav_lang ) !== -1 ){
found_lang = nav_lang
}else if ( nav_lang.length > 2 ) {
const short_code_lang = nav_lang.slice(0,2)
if ( languages_available.indexOf( short_code_lang ) !== -1 ){
found_lang = short_code_lang
}
}
window.location.replace(`${root_path}/${found_lang}/`)
}
)
</script>
</head>