diff --git a/app/ui-login/client/login/footer.js b/app/ui-login/client/login/footer.js index 84001103b26..b44d573f4cf 100644 --- a/app/ui-login/client/login/footer.js +++ b/app/ui-login/client/login/footer.js @@ -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; },