From 7e9fa0a3e658dcf9e1c4b13aff40fb75d3fa539c Mon Sep 17 00:00:00 2001 From: sweetvvck Date: Sun, 20 Dec 2015 02:03:22 +0800 Subject: [PATCH] Settings for server default language #1614 Add the ability to set the default language for new users. Admin can set server default language in admin/General section. --- client/startup/startup.coffee | 26 +++++++++---------- .../server/startup/settings.coffee | 1 + .../account/accountProfile.coffee | 2 +- .../rocketchat-ui-admin/admin/admin.coffee | 11 ++++++++ packages/rocketchat-ui-admin/admin/admin.html | 8 ++++++ .../side-nav/accountBox.coffee | 3 +++ 6 files changed, 37 insertions(+), 14 deletions(-) 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) ->