diff --git a/client/startup/startup.js b/client/startup/startup.js
index a4e4e35c7175d..14a24f10b94ac 100644
--- a/client/startup/startup.js
+++ b/client/startup/startup.js
@@ -17,8 +17,6 @@ if (window.DISABLE_ANIMATION) {
Meteor.startup(function() {
TimeSync.loggingEnabled = false;
-
-
Session.setDefault('AvatarRandom', 0);
window.lastMessageWindow = {};
@@ -26,7 +24,7 @@ Meteor.startup(function() {
TAPi18n.conf.i18n_files_route = Meteor._relativeToSiteRootUrl('/tap-i18n');
- const defaultAppLanguage = function() {
+ const defaultAppLanguage = () => {
let lng = window.navigator.userLanguage || window.navigator.language || 'en';
// Fix browsers having all-lowercase language settings eg. pt-br, en-us
const re = /([a-z]{2}-)([a-z]{2})/;
@@ -38,9 +36,7 @@ Meteor.startup(function() {
return lng;
};
- window.defaultUserLanguage = function() {
- return RocketChat.settings.get('Language') || defaultAppLanguage();
- };
+ window.defaultUserLanguage = () => RocketChat.settings.get('Language') || defaultAppLanguage();
const availableLanguages = TAPi18n.getLanguages();
const loadedLanguages = [];
@@ -94,7 +90,6 @@ Meteor.startup(function() {
const user = RocketChat.models.Users.findOne(Meteor.userId(), {
fields: {
status: 1,
- language: 1,
'settings.preferences.idleTimeLimit': 1,
'settings.preferences.enableAutoAway': 1
}
@@ -104,12 +99,6 @@ Meteor.startup(function() {
return;
}
- const userLanguage = user.language ? user.language : window.defaultUserLanguage();
- if (localStorage.getItem('userLanguage') !== userLanguage) {
- localStorage.setItem('userLanguage', userLanguage);
- window.setLanguage(userLanguage);
- }
-
if (RocketChat.getUserPreference(user, 'enableAutoAway')) {
const idleTimeLimit = RocketChat.getUserPreference(user, 'idleTimeLimit') || 300;
UserPresence.awayTime = idleTimeLimit * 1000;
@@ -125,4 +114,13 @@ Meteor.startup(function() {
fireGlobalEvent('status-changed', status);
}
});
+
+ Tracker.autorun(() => {
+ const userLanguage = Meteor.user() && Meteor.user().language || RocketChat.settings.get('Language') || 'en';
+
+ if (loadedLanguages.length === 0 || localStorage.getItem('userLanguage') !== userLanguage) {
+ localStorage.setItem('userLanguage', userLanguage);
+ window.setLanguage(userLanguage);
+ }
+ });
});
diff --git a/packages/rocketchat-ui-account/client/accountPreferences.html b/packages/rocketchat-ui-account/client/accountPreferences.html
index 54f5fc161b852..2f708bd0d8b4d 100644
--- a/packages/rocketchat-ui-account/client/accountPreferences.html
+++ b/packages/rocketchat-ui-account/client/accountPreferences.html
@@ -17,10 +17,10 @@
{{_ "Localization"}}
- {{> icon block="rc-select__arrow" icon="arrow-down" }}
+ {{> icon block="rc-select__arrow" icon="arrow-down"}}
diff --git a/packages/rocketchat-ui-account/client/accountPreferences.js b/packages/rocketchat-ui-account/client/accountPreferences.js
index 16bf02b978945..23972e48cb92e 100644
--- a/packages/rocketchat-ui-account/client/accountPreferences.js
+++ b/packages/rocketchat-ui-account/client/accountPreferences.js
@@ -1,4 +1,4 @@
-/*globals defaultUserLanguage, KonchatNotification */
+/*globals KonchatNotification */
import _ from 'underscore';
import s from 'underscore.string';
import toastr from 'toastr';
@@ -37,23 +37,25 @@ Template.accountPreferences.helpers({
languages() {
const languages = TAPi18n.getLanguages();
- const result = Object.keys(languages).map((key) => {
- const language = languages[key];
- return _.extend(language, { key });
+ const result = Object.entries(languages)
+ .map(([ key, language ]) => ({ ...language, key: key.toLowerCase() }))
+ .sort((a, b) => a.key - b.key);
+
+ const appLanguageKey = RocketChat.settings.get('Language') || 'en';
+ const appLanguage = result.filter(({ key }) => key === appLanguageKey.toLowerCase())[0];
+
+ result.unshift({
+ 'name': appLanguage ? `Default (${ appLanguage.name })` : 'Default',
+ 'en': 'Default',
+ 'key': ''
});
- return _.sortBy(result, 'key');
- },
- userLanguage(key) {
- const user = Meteor.user();
- let result = undefined;
- if (user.language) {
- result = user.language === key;
- } else if (defaultUserLanguage()) {
- result = defaultUserLanguage() === key;
- }
return result;
},
+ isUserLanguage(key) {
+ const languageKey = Meteor.user().language;
+ return typeof languageKey === 'string' && languageKey.toLowerCase() === key;
+ },
checked(property, value, defaultValue=undefined) {
return checkedSelected(property, value, defaultValue);
},
diff --git a/packages/rocketchat-ui-admin/client/admin.html b/packages/rocketchat-ui-admin/client/admin.html
index a0c8b5cd21376..2a90fd7492166 100644
--- a/packages/rocketchat-ui-admin/client/admin.html
+++ b/packages/rocketchat-ui-admin/client/admin.html
@@ -92,7 +92,7 @@
{{> icon block="rc-select__arrow" icon="arrow-down" }}
diff --git a/packages/rocketchat-ui-admin/client/admin.js b/packages/rocketchat-ui-admin/client/admin.js
index 43c1c0fa377f4..6baea91ea436e 100644
--- a/packages/rocketchat-ui-admin/client/admin.js
+++ b/packages/rocketchat-ui-admin/client/admin.js
@@ -85,11 +85,9 @@ Template.admin.helpers({
languages() {
const languages = TAPi18n.getLanguages();
- const result = Object.entries(languages).map(language => {
- const obj = language[1];
- obj.key = language[0];
- return obj;
- }).sort((a, b) => a.key - b.key);
+ const result = Object.entries(languages)
+ .map(([ key, language ]) => ({ ...language, key: key.toLowerCase() }))
+ .sort((a, b) => a.key - b.key);
result.unshift({
'name': 'Default',
@@ -99,9 +97,9 @@ Template.admin.helpers({
return result;
},
- appLanguage(key) {
- const setting = RocketChat.settings.get('Language');
- return setting && setting.split('-').shift().toLowerCase() === key;
+ isAppLanguage(key) {
+ const languageKey = RocketChat.settings.get('Language');
+ return typeof languageKey === 'string' && languageKey.toLowerCase() === key;
},
group() {
const groupId = FlowRouter.getParam('group');