From 7e9fa0a3e658dcf9e1c4b13aff40fb75d3fa539c Mon Sep 17 00:00:00 2001 From: sweetvvck Date: Sun, 20 Dec 2015 02:03:22 +0800 Subject: [PATCH 1/2] 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 1d590b55508e..157f29fd2f3e 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 7f7abc9d6630..0393c868e50d 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 78c1828d504c..e0fecee62653 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 df3c6352c6cc..2025c3d4d098 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 264ac8d168f2..beeafd6a11d1 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 b5e470d32ded..2f4fffa88725 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) -> From 486be9d77a4a540f7eafce63acec7401daa80d3f Mon Sep 17 00:00:00 2001 From: sweetvvck Date: Mon, 21 Dec 2015 22:04:40 +0800 Subject: [PATCH 2/2] add ability to set app language to blank --- packages/rocketchat-ui-admin/admin/admin.coffee | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/rocketchat-ui-admin/admin/admin.coffee b/packages/rocketchat-ui-admin/admin/admin.coffee index 2025c3d4d098..9658968c918b 100644 --- a/packages/rocketchat-ui-admin/admin/admin.coffee +++ b/packages/rocketchat-ui-admin/admin/admin.coffee @@ -14,10 +14,18 @@ Template.admin.helpers result = [] for key, language of languages result.push _.extend(language, { key: key }) - return _.sortBy(result, 'key') + result = _.sortBy(result, 'key') + result.unshift { + "name": "Default", + "en": "Default", + "key": "" + } + return result; appLanguage: (key) -> - selected = (RocketChat.settings.get('Language') or defaultUserLanguage())?.split('-').shift().toLowerCase() is key + if !key + return !RocketChat.settings.get('Language') + selected = (RocketChat.settings.get('Language'))?.split('-').shift().toLowerCase() is key return selected group: ->