|
|
|
|
@ -5,24 +5,44 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; |
|
|
|
|
|
|
|
|
|
import { settings } from '../../../settings'; |
|
|
|
|
|
|
|
|
|
Template.loginFooter.onCreated(function() { |
|
|
|
|
this.suggestedLanguage = new ReactiveVar(); |
|
|
|
|
const filterLanguage = (language) => { |
|
|
|
|
// Fix browsers having all-lowercase language settings eg. pt-br, en-us
|
|
|
|
|
const regex = /([a-z]{2,3})-([a-z]{2,4})/; |
|
|
|
|
const matches = regex.exec(language); |
|
|
|
|
if (matches) { |
|
|
|
|
return `${ matches[1] }-${ matches[2].toUpperCase() }`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.suggestAnotherLanguageFor = (language) => { |
|
|
|
|
const loadAndSetSuggestedLanguage = (language) => TAPi18n._loadLanguage(language) |
|
|
|
|
.then(() => this.suggestedLanguage.set(language)); |
|
|
|
|
return language; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const serverLanguage = settings.get('Language'); |
|
|
|
|
Template.loginFooter.onCreated(function() { |
|
|
|
|
this.suggestedLanguage = new ReactiveVar(); |
|
|
|
|
|
|
|
|
|
if (serverLanguage !== language) { |
|
|
|
|
loadAndSetSuggestedLanguage(serverLanguage || 'en'); |
|
|
|
|
} else if (!/^en/.test(language)) { |
|
|
|
|
loadAndSetSuggestedLanguage('en'); |
|
|
|
|
} else { |
|
|
|
|
this.suggestedLanguage.set(undefined); |
|
|
|
|
const loadAndSetSuggestedLanguage = async (language = 'en') => { |
|
|
|
|
const lng = filterLanguage(language); |
|
|
|
|
try { |
|
|
|
|
await TAPi18n._loadLanguage(filterLanguage(lng)); |
|
|
|
|
window.setLanguage(lng); |
|
|
|
|
|
|
|
|
|
const serverLanguage = filterLanguage(settings.get('Language')); |
|
|
|
|
|
|
|
|
|
if (serverLanguage !== lng) { |
|
|
|
|
return serverLanguage; |
|
|
|
|
} |
|
|
|
|
if (serverLanguage !== 'en') { |
|
|
|
|
return 'en'; |
|
|
|
|
} |
|
|
|
|
} catch (e) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
this.suggestAnotherLanguageFor = async (language) => { |
|
|
|
|
const suggest = await loadAndSetSuggestedLanguage(language); |
|
|
|
|
this.suggestedLanguage.set(suggest); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const currentLanguage = Meteor._localStorage.getItem('userLanguage'); |
|
|
|
|
this.suggestAnotherLanguageFor(currentLanguage); |
|
|
|
|
}); |
|
|
|
|
@ -37,7 +57,6 @@ Template.loginFooter.helpers({ |
|
|
|
|
Template.loginFooter.events({ |
|
|
|
|
'click button.js-switch-language'(e, t) { |
|
|
|
|
const language = t.suggestedLanguage.get(); |
|
|
|
|
window.setLanguage(language); |
|
|
|
|
t.suggestAnotherLanguageFor(language); |
|
|
|
|
return false; |
|
|
|
|
}, |
|
|
|
|
|