diff --git a/client/startup/startup.coffee b/client/startup/startup.coffee
index 1d590b55508..157f29fd2f3 100644
--- a/client/startup/startup.coffee
+++ b/client/startup/startup.coffee
@@ -10,7 +10,7 @@ Meteor.startup ->
window.lastMessageWindow = {}
window.lastMessageWindowHistory = {}
- @defaultUserLanguage = ->
+ @defaultAppLanguage = ->
lng = window.navigator.userLanguage || window.navigator.language || 'en'
# Fix browsers having all-lowercase language settings eg. pt-br, en-us
re = /([a-z]{2}-)([a-z]{2})/
@@ -18,6 +18,9 @@ Meteor.startup ->
lng = lng.replace re, (match, parts...) -> return parts[0] + parts[1].toUpperCase()
return lng
+ @defaultUserLanguage = ->
+ return RocketChat.settings.get('Language') || defaultAppLanguage()
+
loadedLaguages = []
setLanguage = (language) ->
@@ -35,17 +38,14 @@ Meteor.startup ->
Function(localeFn)()
moment.locale(language)
- Tracker.autorun (c) ->
- if Meteor.user()?.language?
- c.stop()
-
- if localStorage.getItem('userLanguage') isnt Meteor.user().language
- localStorage.setItem("userLanguage", Meteor.user().language)
- setLanguage Meteor.user().language
- if isRtl localStorage.getItem "userLanguage"
- $('html').addClass "rtl"
+ Meteor.subscribe("userData", () ->
+ userLanguage = Meteor.user()?.language
+ userLanguage ?= defaultUserLanguage()
- userLanguage = localStorage.getItem("userLanguage")
- userLanguage ?= defaultUserLanguage()
+ if localStorage.getItem('userLanguage') isnt userLanguage
+ localStorage.setItem('userLanguage', userLanguage)
+ if isRtl localStorage.getItem 'userLanguage'
+ $('html').addClass "rtl"
- setLanguage userLanguage
+ setLanguage userLanguage
+ )
diff --git a/packages/rocketchat-lib/server/startup/settings.coffee b/packages/rocketchat-lib/server/startup/settings.coffee
index 7f7abc9d663..0393c868e50 100644
--- a/packages/rocketchat-lib/server/startup/settings.coffee
+++ b/packages/rocketchat-lib/server/startup/settings.coffee
@@ -72,6 +72,7 @@ RocketChat.settings.addGroup 'FileUpload', ->
RocketChat.settings.addGroup 'General', ->
@add 'Site_Url', __meteor_runtime_config__?.ROOT_URL, { type: 'string', i18nDescription: 'Site_Url_Description', public: true }
@add 'Site_Name', 'Rocket.Chat', { type: 'string', public: true }
+ @add 'Language', '', { type: 'language', public: true }
@add 'Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean' }
@add 'Disable_Favorite_Rooms', false, { type: 'boolean' }
@add 'CDN_PREFIX', '', { type: 'string' }
diff --git a/packages/rocketchat-ui-account/account/accountProfile.coffee b/packages/rocketchat-ui-account/account/accountProfile.coffee
index 78c1828d504..e0fecee6265 100644
--- a/packages/rocketchat-ui-account/account/accountProfile.coffee
+++ b/packages/rocketchat-ui-account/account/accountProfile.coffee
@@ -7,7 +7,7 @@ Template.accountProfile.helpers
return _.sortBy(result, 'key')
userLanguage: (key) ->
- return (localStorage.getItem('userLanguage') or defaultUserLanguage())?.split('-').shift().toLowerCase() is key
+ return (localStorage.getItem('userLanguage') or Meteor.user().language or defaultUserLanguage())?.split('-').shift().toLowerCase() is key
realname: ->
return Meteor.user().name
diff --git a/packages/rocketchat-ui-admin/admin/admin.coffee b/packages/rocketchat-ui-admin/admin/admin.coffee
index df3c6352c6c..2025c3d4d09 100644
--- a/packages/rocketchat-ui-admin/admin/admin.coffee
+++ b/packages/rocketchat-ui-admin/admin/admin.coffee
@@ -9,6 +9,17 @@
Template.admin.helpers
+ languages: ->
+ languages = TAPi18n.getLanguages()
+ result = []
+ for key, language of languages
+ result.push _.extend(language, { key: key })
+ return _.sortBy(result, 'key')
+
+ appLanguage: (key) ->
+ selected = (RocketChat.settings.get('Language') or defaultUserLanguage())?.split('-').shift().toLowerCase() is key
+ return selected
+
group: ->
group = FlowRouter.getParam('group')
group ?= TempSettings.findOne({ type: 'group' })?._id
diff --git a/packages/rocketchat-ui-admin/admin/admin.html b/packages/rocketchat-ui-admin/admin/admin.html
index 264ac8d168f..beeafd6a11d 100644
--- a/packages/rocketchat-ui-admin/admin/admin.html
+++ b/packages/rocketchat-ui-admin/admin/admin.html
@@ -70,6 +70,14 @@
{{/if}}
+ {{#if $eq type 'language'}}
+
+ {{/if}}
+
{{#if $eq type 'color'}}
{{/if}}
diff --git a/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee b/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee
index b5e470d32de..2f4fffa8872 100644
--- a/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee
+++ b/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee
@@ -36,6 +36,9 @@ Template.accountBox.events
user = Meteor.user()
Meteor.logout ->
FlowRouter.go 'home'
+ # remove userLanguage in localStorage
+ # in case of another account with different language login
+ localStorage.removeItem('userLanguage')
Meteor.call('logoutCleanUp', user)
'click #avatar': (event) ->