diff --git a/client/lib/tapi18n.coffee b/client/lib/tapi18n.coffee
index 5f43accaa0080..3d6c91c15bb21 100644
--- a/client/lib/tapi18n.coffee
+++ b/client/lib/tapi18n.coffee
@@ -3,3 +3,7 @@
return TAPi18n.__ key, replaces
else
return TAPi18n.__ key, { postProcess: 'sprintf', sprintf: replaces }
+
+@isRtl = (language) ->
+ # https://en.wikipedia.org/wiki/Right-to-left#cite_note-2
+ return language.split('-').shift().toLowerCase() in ['ar', 'dv', 'fa', 'he', 'ku', 'ps', 'sd', 'ug', 'ur', 'yi']
\ No newline at end of file
diff --git a/client/views/app/layout.coffee b/client/views/app/layout.coffee
index 962285104f24f..c212cc65de1e3 100644
--- a/client/views/app/layout.coffee
+++ b/client/views/app/layout.coffee
@@ -4,5 +4,7 @@ Template.appLayout.helpers
Template.appLayout.rendered = ->
$('html').addClass("noscroll").removeClass "scroll"
+
# RTL Support - Need config option on the UI
- # $('html').addClass("rtl")
+ if isRtl localStorage.getItem "userLanguage"
+ $('html').addClass "rtl"
diff --git a/client/views/app/sideNav/createChannelFlex.html b/client/views/app/sideNav/createChannelFlex.html
index 8dbdb66af91ab..b7153de571dd8 100644
--- a/client/views/app/sideNav/createChannelFlex.html
+++ b/client/views/app/sideNav/createChannelFlex.html
@@ -35,8 +35,8 @@
{{_ "chatRooms.Create_new_channel" }}
{{/if}}
-
-
+
+
diff --git a/client/views/app/sideNav/privateGroupsFlex.html b/client/views/app/sideNav/privateGroupsFlex.html
index 0cd39bc2d2d68..55c4e46f0e18d 100644
--- a/client/views/app/sideNav/privateGroupsFlex.html
+++ b/client/views/app/sideNav/privateGroupsFlex.html
@@ -29,8 +29,8 @@ Create a new private group
{{/if}}
-
-
+
+
diff --git a/client/views/app/sideNav/userSettingsFlex.coffee b/client/views/app/sideNav/userSettingsFlex.coffee
new file mode 100644
index 0000000000000..41bfaec63ddb0
--- /dev/null
+++ b/client/views/app/sideNav/userSettingsFlex.coffee
@@ -0,0 +1,26 @@
+Template.userSettingsFlex.helpers
+ languages: ->
+ languages = TAPi18n.getLanguages()
+ result = []
+ for key, language of languages
+ result.push _.extend(language, { key: key })
+ return _.sortBy(result, 'key')
+
+ userLanguage: (key) ->
+ return localStorage.getItem('userLanguage')?.split('-').shift().toLowerCase() is key
+
+Template.userSettingsFlex.events
+ 'mouseenter header': ->
+ SideNav.overArrow()
+
+ 'mouseleave header': ->
+ SideNav.leaveArrow()
+
+ 'click header': ->
+ SideNav.closeFlex()
+
+ 'click footer .save': ->
+ selectedLanguage = $('#language').val()
+ if localStorage.getItem('userLanguage') isnt selectedLanguage
+ localStorage.setItem 'userLanguage', selectedLanguage
+ Meteor._reload.reload()
\ No newline at end of file
diff --git a/client/views/app/sideNav/userSettingsFlex.html b/client/views/app/sideNav/userSettingsFlex.html
new file mode 100644
index 0000000000000..09066548a416a
--- /dev/null
+++ b/client/views/app/sideNav/userSettingsFlex.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/views/app/sideNav/userStatus.coffee b/client/views/app/sideNav/userStatus.coffee
index 80cb1307f246e..2ebcaf61e829d 100644
--- a/client/views/app/sideNav/userStatus.coffee
+++ b/client/views/app/sideNav/userStatus.coffee
@@ -32,5 +32,9 @@ Template.userStatus.events
'click #avatar': (event) ->
Meteor.call('resetAvatar')
+ 'click #settings': (event) ->
+ SideNav.setFlex "userSettingsFlex"
+ SideNav.openFlex()
+
Template.userStatus.rendered = ->
AccountBox.init()
diff --git a/client/views/app/sideNav/userStatus.html b/client/views/app/sideNav/userStatus.html
index c950b7805a3b7..c7d44b6402fe7 100644
--- a/client/views/app/sideNav/userStatus.html
+++ b/client/views/app/sideNav/userStatus.html
@@ -19,7 +19,7 @@ {{username}}
{{_ "userStatus.Busy"}}
{{_ "userStatus.Invisible"}}
{{_ "userStatus.Change_avatar"}}
- {{_ "userStatus.Settings"}}{{_ "userStatus.coming_soon"}}
+ {{_ "userStatus.Settings"}}
{{_ "userStatus.Privacy"}}{{_ "userStatus.coming_soon"}}
{{_ "userStatus.Logout"}}
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index b4784ecb316ee..9f85468bfcdcc 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -28,8 +28,6 @@
"Name" : "Name",
"Members" : "Members",
"Selected_users" : "Selected members",
- "Save" : "Save",
- "Cancel" : "Cancel",
"No_channels_yet" : "You aren't part of any channel yet.",
"No_direct_messages_yet" : "You haven't started any conversations yet.",
"No_groups_yet" : "You have no private groups yet.",
@@ -72,12 +70,14 @@
"Contact" : "Contact",
"Conversation" : "Conversation",
"History" : "History",
+ "Language" : "Language",
"Load_more" : "Load more",
"Login" : "Login",
"Name" : "Name",
"Please_wait" : "Please wait",
"Remove" : "Remove",
"Reset_password" : "Reset password",
+ "Save" : "Save",
"Search" : "Search",
"Send_confirmation_email" : "Send confirmation email",
"Submit" : "Submit",