From aeb087895a967c567faa4d49c068131d97cfbbdb Mon Sep 17 00:00:00 2001 From: Aaron Ogle Date: Tue, 22 Sep 2015 17:40:24 -0500 Subject: [PATCH 01/33] joinRoom returns if room is already added. Also throws helpful error if room doesn't exist. --- server/methods/joinRoom.coffee | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/methods/joinRoom.coffee b/server/methods/joinRoom.coffee index a1379507464..81666400b14 100644 --- a/server/methods/joinRoom.coffee +++ b/server/methods/joinRoom.coffee @@ -3,15 +3,21 @@ Meteor.methods room = RocketChat.models.Rooms.findOneById rid + console.log '[methods] joinRoom -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments + + if not room? + throw new Meteor.Error 500, 'No channel with this id' + if room.t isnt 'c' throw new Meteor.Error 403, '[methods] joinRoom -> Not allowed' - # verify if user is already in room - # if room.usernames.indexOf(user.username) is -1 - console.log '[methods] joinRoom -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments - now = new Date() + # Check if user is already in room + subscription = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId rid, Meteor.userId() + if subscription? + return + user = RocketChat.models.Users.findOneById Meteor.userId() RocketChat.callbacks.run 'beforeJoinRoom', user, room From 406edf089cc13d5281d5af33fd941c1ef9f6a0c4 Mon Sep 17 00:00:00 2001 From: Reid Wakida Date: Tue, 22 Sep 2015 21:57:49 -1000 Subject: [PATCH 02/33] Fix bug where username incorrectly passed to findOneByUsername. Also adds arugment validation. --- server/methods/addUserToRoom.coffee | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/methods/addUserToRoom.coffee b/server/methods/addUserToRoom.coffee index 5edcc19e39a..f94226b8bf9 100644 --- a/server/methods/addUserToRoom.coffee +++ b/server/methods/addUserToRoom.coffee @@ -1,7 +1,13 @@ Meteor.methods addUserToRoom: (data) -> fromId = Meteor.userId() - # console.log '[methods] addUserToRoom -> '.green, 'fromId:', fromId, 'data:', data + console.log '[methods] addUserToRoom -> '.green, 'data:', data + + unless Match.test data?.rid, String + throw new Meteor.Error 'invalid-rid' + + unless Match.test data?.username, String + throw new Meteor.Error 'invalid-username' room = RocketChat.models.Rooms.findOneById data.rid @@ -13,7 +19,7 @@ Meteor.methods if room.usernames.indexOf(data.username) isnt -1 return - newUser = RocketChat.models.Users.findOneByUsername username: data.username + newUser = RocketChat.models.Users.findOneByUsername data.username RocketChat.models.Rooms.addUsernameById data.rid, data.username From 0d0c3ef5c1b41f793d68c6c34a89b0a1f56cd98d Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 23 Sep 2015 09:37:27 -0300 Subject: [PATCH 03/33] removed deprecated code --- client/views/app/room.coffee | 18 ------------------ client/views/app/tabBar/membersList.coffee | 5 ----- 2 files changed, 23 deletions(-) diff --git a/client/views/app/room.coffee b/client/views/app/room.coffee index c2c617a5aca..e84f0346c98 100644 --- a/client/views/app/room.coffee +++ b/client/views/app/room.coffee @@ -331,9 +331,6 @@ Template.room.events input.focus() input.get(0).updateAutogrow() - 'click .add-user': (event) -> - toggleAddUser() - 'click .edit-room-title': (event) -> event.preventDefault() Session.set('editRoomTitle', true) @@ -342,10 +339,6 @@ Template.room.events $('#room-title-field').focus().select() , 10 - 'keydown #user-add-search': (event) -> - if event.keyCode is 27 # esc - toggleAddUser() - 'keydown #room-title-field': (event) -> if event.keyCode is 27 # esc Session.set('editRoomTitle', false) @@ -641,14 +634,3 @@ renameRoom = (rid, name) -> toastr.error t('Duplicate_private_group_name', name) return toastr.error error.reason - -toggleAddUser = -> - console.log 'room toggleAddUser' if window.rocketDebug - btn = $('.add-user') - $('.add-user-search').toggleClass('show-search') - if $('i', btn).hasClass('icon-plus') - $('#user-add-search').focus() - $('i', btn).removeClass('icon-plus').addClass('icon-cancel') - else - $('#user-add-search').val('') - $('i', btn).removeClass('icon-cancel').addClass('icon-plus') diff --git a/client/views/app/tabBar/membersList.coffee b/client/views/app/tabBar/membersList.coffee index 425e776587e..529a2c1459e 100644 --- a/client/views/app/tabBar/membersList.coffee +++ b/client/views/app/tabBar/membersList.coffee @@ -67,10 +67,6 @@ Template.membersList.helpers return Meteor.users.findOne({ username: String(username) }) or { username: String(username) } Template.membersList.events - 'keydown #user-add-search': (event) -> - if event.keyCode is 27 # esc - toggleAddUser() - "click .flex-tab .user-image > a" : (e) -> RocketChat.TabBar.openFlex() Session.set('showUserInfo', $(e.currentTarget).data('username')) @@ -91,4 +87,3 @@ Template.membersList.events return Errors.throw error.reason $('#user-add-search').val('') - toggleAddUser() From b14954ab7cc17252316652878ae381c9e18f8147 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Wed, 23 Sep 2015 10:46:35 -0300 Subject: [PATCH 04/33] Close #861; Fix Gitlab oAuth url from API_Gitlab_URL --- .../custom_oauth_client.coffee | 17 ++++++++++------- packages/rocketchat-gitlab/common.coffee | 7 +++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/rocketchat-custom-oauth/custom_oauth_client.coffee b/packages/rocketchat-custom-oauth/custom_oauth_client.coffee index 72ed354f420..4dafb22e3e0 100644 --- a/packages/rocketchat-custom-oauth/custom_oauth_client.coffee +++ b/packages/rocketchat-custom-oauth/custom_oauth_client.coffee @@ -8,6 +8,13 @@ class CustomOAuth if not Match.test @name, String return throw new Meteor.Error 'CustomOAuth: Name is required and must be String' + @configure options + + Accounts.oauth.registerService @name + + @configureLogin() + + configure: (options) -> if not Match.test options, Object return throw new Meteor.Error 'CustomOAuth: Options is required and must be Object' @@ -20,13 +27,9 @@ class CustomOAuth @serverURL = options.serverURL if not /^https?:\/\/.+/.test options.authorizePath - options.authorizePath = @serverURL + options.authorizePath - - @authorizePath = options.authorizePath - - Accounts.oauth.registerService @name - - @configureLogin() + @authorizePath = @serverURL + options.authorizePath + else + @authorizePath = options.authorizePath configureLogin: -> self = @ diff --git a/packages/rocketchat-gitlab/common.coffee b/packages/rocketchat-gitlab/common.coffee index d3654a9ab46..e6980e1115e 100644 --- a/packages/rocketchat-gitlab/common.coffee +++ b/packages/rocketchat-gitlab/common.coffee @@ -1,11 +1,14 @@ -Gitlab = new CustomOAuth 'gitlab', +config = serverURL: 'https://gitlab.com' identityPath: '/api/v3/user' addAutopublishFields: forLoggedInUser: ['services.gitlab'] forOtherUsers: ['services.gitlab.username'] +Gitlab = new CustomOAuth 'gitlab', config + Meteor.startup -> Tracker.autorun -> if RocketChat.settings.get 'API_Gitlab_URL' - Gitlab.serverURL = RocketChat.settings.get 'API_Gitlab_URL' + config.serverURL = RocketChat.settings.get 'API_Gitlab_URL' + Gitlab.configure config From 9f7f3bb51976714b86fcea2ec7f9a461d02a2e10 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Wed, 23 Sep 2015 15:43:32 -0300 Subject: [PATCH 05/33] Remove unused code --- server/stream/messages.coffee | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/server/stream/messages.coffee b/server/stream/messages.coffee index 4812a7e515a..cd90dc5995a 100644 --- a/server/stream/messages.coffee +++ b/server/stream/messages.coffee @@ -20,16 +20,6 @@ msgStream.permissions.read (eventName) -> Meteor.startup -> - filter = - _hidden: { $ne: true } - $or: [ - ts: - $gt: new Date() - , - ets: - $gt: new Date() - ] - options = {} if not RocketChat.settings.get 'Message_ShowEditedStatus' From 300ea9fecf31732814b6644d2c13eeb1aa086dba Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Wed, 23 Sep 2015 16:32:19 -0300 Subject: [PATCH 06/33] Sanitize custom oauth name --- client/stylesheets/base.less | 9 +++++++++ client/views/admin/admin.coffee | 4 +++- client/views/admin/admin.html | 9 +++++++++ i18n/en.i18n.json | 1 + .../settings/server/addOAuthService.coffee | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/client/stylesheets/base.less b/client/stylesheets/base.less index 410e417bd13..74a8797149a 100644 --- a/client/stylesheets/base.less +++ b/client/stylesheets/base.less @@ -1781,6 +1781,15 @@ a.github-fork { border: 1px solid; padding: 20px; border-radius: 5px; + + .section-helper { + padding: 20px 20px 40px; + + pre { + display: inline; + background-color: #eee; + } + } } } h1, diff --git a/client/views/admin/admin.coffee b/client/views/admin/admin.coffee index 0450a3af66c..4cbdcd59784 100644 --- a/client/views/admin/admin.coffee +++ b/client/views/admin/admin.coffee @@ -35,9 +35,11 @@ Template.admin.helpers if description?.indexOf(':') is -1 description = 'project:' + description return TAPi18next.t description - sectionIsCustomOath: (section) -> return /^Custom OAuth:\s.+/.test section + callbackURL: (section) -> + id = s.strRight(section, 'Custom OAuth: ').toLowerCase() + return Meteor.absoluteUrl('_oauth/' + id) Template.admin.events "click .submit .save": (e, t) -> diff --git a/client/views/admin/admin.html b/client/views/admin/admin.html index 0303b9f8e09..6c8c2dca111 100644 --- a/client/views/admin/admin.html +++ b/client/views/admin/admin.html @@ -23,6 +23,15 @@

{{section}}

{{/if}}
+ {{#if section}} + {{#if sectionIsCustomOath section}} +
+ {{#with callbackURL section}} + {{{_ "Custom_oauth_helper" .}}} + {{/with}} +
+ {{/if}} + {{/if}} {{#each settings}} {{#if $eq type 'string'}}
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f1dbd0891f2..468a10c801e 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -81,6 +81,7 @@ "Create_new_public_channel" : "Create a new public channel", "Created_at" : "Created at", "Custom_oauth_unique_name" : "Custom oauth unique name", + "Custom_oauth_helper" : "When setting up your OAuth Provider, you'll have to inform a Callback URL. Use
%s
.", "days" : "days", "Deactivate" : "Deactivate", "Delete_User_Warning" : "Deleting a user will delete all messages from that user as well. This cannot be undone.", diff --git a/packages/rocketchat-lib/settings/server/addOAuthService.coffee b/packages/rocketchat-lib/settings/server/addOAuthService.coffee index fb95f2e4d51..67e28cb50e7 100644 --- a/packages/rocketchat-lib/settings/server/addOAuthService.coffee +++ b/packages/rocketchat-lib/settings/server/addOAuthService.coffee @@ -8,6 +8,7 @@ Meteor.methods unless RocketChat.authz.hasPermission( Meteor.userId(), 'add-oauth-service') is true throw new Meteor.Error 'not-authorized', '[methods] addOAuthService -> Not authorized' + name = name.toLowerCase().replace(/[^a-z0-9]/g, '') name = s.capitalize(name) RocketChat.settings.add "Accounts_OAuth_Custom_#{name}" , false , { type: 'boolean', group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Enable'} RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_url" , '' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_URL'} @@ -29,6 +30,7 @@ Meteor.methods unless RocketChat.authz.hasPermission( Meteor.userId(), 'add-oauth-service') is true throw new Meteor.Error 'not-authorized', '[methods] addOAuthService -> Not authorized' + name = name.toLowerCase().replace(/[^a-z0-9]/g, '') name = s.capitalize(name) RocketChat.settings.removeById "Accounts_OAuth_Custom_#{name}" RocketChat.settings.removeById "Accounts_OAuth_Custom_#{name}_url" From 6e63adb91f902c55109f4ffd7eebbf3ea7b04787 Mon Sep 17 00:00:00 2001 From: Reid Wakida Date: Wed, 23 Sep 2015 14:51:53 -1000 Subject: [PATCH 07/33] Remove deprecated code related to 0d0c3ef5c1b41f793d68c6c34a89b0a1f56cd98d Functionality moved to membersList template. --- client/views/app/room.coffee | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/client/views/app/room.coffee b/client/views/app/room.coffee index e84f0346c98..5f44be0cbb2 100644 --- a/client/views/app/room.coffee +++ b/client/views/app/room.coffee @@ -364,24 +364,6 @@ Template.room.events # Session.set('flexOpened', true) RocketChat.TabBar.setTemplate 'membersList' - 'autocompleteselect #user-add-search': (event, template, doc) -> - roomData = Session.get('roomData' + Session.get('openedRoom')) - - if roomData.t is 'd' - Meteor.call 'createGroupRoom', roomData.usernames, doc.username, (error, result) -> - if error - return Errors.throw error.reason - - if result?.rid? - $('#user-add-search').val('') - else if roomData.t in ['c', 'p'] - Meteor.call 'addUserToRoom', { rid: roomData._id, username: doc.username }, (error, result) -> - if error - return Errors.throw error.reason - - $('#user-add-search').val('') - toggleAddUser() - 'scroll .wrapper': _.throttle (e, instance) -> if RoomHistoryManager.hasMore(@_id) is true and RoomHistoryManager.isLoading(@_id) is false if e.target.scrollTop is 0 From 9b6a7e664b6ca6e62f002a68e473f064e5c18a80 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Wed, 23 Sep 2015 22:01:07 -0300 Subject: [PATCH 08/33] Add host to server statistics --- i18n/en.i18n.json | 4 ++-- server/startup/cron.coffee | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 468a10c801e..ed2d6ec209a 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -215,8 +215,8 @@ "Only_you_can_see_this_message" : "Only you can see this message", "Online" : "Online", "Oops!" : "Oops", - "Opt_out_statistics" : "Don't send my anonymous statistics to Rocket.Chat", - "Opt_out_statistics_warning" : "By sending your anonymous statistics, you'll help us identify how many instances of Rocket.Chat are deployed, as well as how good the system is behaving, so we can further improve it. If you want to continue sending us your anonymous statistics, uncheck the above checkbox. Thank you.", + "Opt_out_statistics" : "Don't send my statistics to Rocket.Chat", + "Opt_out_statistics_warning" : "By sending your statistics, you'll help us identify how many instances of Rocket.Chat are deployed, as well as how good the system is behaving, so we can further improve it. Don't worry, as no user information is sent and all the information we receive is kept confidential. If you want to continue sending us your statistics, uncheck the above checkbox. Thank you.", "others" : "others", "Password" : "Password", "Password_changed_successfully" : "Password changed successfully", diff --git a/server/startup/cron.coffee b/server/startup/cron.coffee index fb431b6bd39..be643bcf42e 100644 --- a/server/startup/cron.coffee +++ b/server/startup/cron.coffee @@ -12,6 +12,7 @@ Meteor.startup -> return parser.text 'every 1 hour' job: -> statistics = RocketChat.statistics.save() + statistics.host = Meteor.absoluteUrl() unless RocketChat.settings.get 'Statistics_opt_out' console.log 'Sending statistics data to Rocket.Chat' HTTP.post 'https://rocket.chat/stats', From 722182ace659cbb4edaadd7c25455b78cac6f3e9 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Thu, 24 Sep 2015 01:28:10 -0300 Subject: [PATCH 09/33] Wordpress oauth package --- .meteor/packages | 1 + .meteor/versions | 1 + client/stylesheets/utils/_colors.import.less | 3 ++ client/views/app/userInfo.html | 1 + client/views/login/services.coffee | 3 ++ .../custom_oauth_server.coffee | 5 +++ packages/rocketchat-wordpress/common.coffee | 14 ++++++++ .../rocketchat-wordpress/i18n/en.i18n.json | 6 ++++ .../rocketchat-wordpress/i18n/pt.i18n.json | 3 ++ .../rocketchat-wordpress/package-tap.i18n | 0 packages/rocketchat-wordpress/package.js | 32 +++++++++++++++++++ packages/rocketchat-wordpress/startup.coffee | 5 +++ .../wordpress-login-button.css | 3 ++ 13 files changed, 77 insertions(+) create mode 100644 packages/rocketchat-wordpress/common.coffee create mode 100644 packages/rocketchat-wordpress/i18n/en.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/pt.i18n.json create mode 100644 packages/rocketchat-wordpress/package-tap.i18n create mode 100644 packages/rocketchat-wordpress/package.js create mode 100644 packages/rocketchat-wordpress/startup.coffee create mode 100644 packages/rocketchat-wordpress/wordpress-login-button.css diff --git a/.meteor/packages b/.meteor/packages index ac1dbedc0d0..2ebba48b6d1 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -30,6 +30,7 @@ rocketchat:emojione rocketchat:favico rocketchat:file rocketchat:gitlab +rocketchat:wordpress rocketchat:highlight rocketchat:ldap rocketchat:logger diff --git a/.meteor/versions b/.meteor/versions index be5c92d0639..9f9137e44a7 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -122,6 +122,7 @@ rocketchat:slashcommands-join@0.0.1 rocketchat:slashcommands-leave@0.0.1 rocketchat:statistics@0.0.1 rocketchat:webrtc@0.0.1 +rocketchat:wordpress@0.0.1 routepolicy@1.0.5 service-configuration@1.0.4 session@1.1.0 diff --git a/client/stylesheets/utils/_colors.import.less b/client/stylesheets/utils/_colors.import.less index a2337cfa7ff..3acb87bbb1d 100644 --- a/client/stylesheets/utils/_colors.import.less +++ b/client/stylesheets/utils/_colors.import.less @@ -258,6 +258,9 @@ label.required:after { &.meteor-developer { background-color: #de4f4f; } + &.wordpress { + background-color: #1e8cbe; + } } .burger { diff --git a/client/views/app/userInfo.html b/client/views/app/userInfo.html index 6eadfa93a37..30c8e280ffc 100644 --- a/client/views/app/userInfo.html +++ b/client/views/app/userInfo.html @@ -49,6 +49,7 @@ {{#if services.linkedin.id}}

{{linkedinUsername}}

{{/if}} {{#if servicesMeteor.id}}

{{servicesMeteor.username}}

{{/if}} {{#if services.twitter.id}}

{{services.twitter.screenName}}

{{/if}} + {{#if services.wordpress.id}}

{{services.wordpress.user_login}}

{{/if}} {{/if}}
diff --git a/client/views/login/services.coffee b/client/views/login/services.coffee index 38244ceeaa2..7e2755a6ef0 100644 --- a/client/views/login/services.coffee +++ b/client/views/login/services.coffee @@ -22,6 +22,9 @@ Template.loginServices.helpers when 'gitlab' serviceName = 'Gitlab' icon = service.service + when 'wordpress' + serviceName = 'WordPress' + icon = service.service else serviceName = _.capitalize service.service icon = service.service diff --git a/packages/rocketchat-custom-oauth/custom_oauth_server.coffee b/packages/rocketchat-custom-oauth/custom_oauth_server.coffee index 61c9e7b86ca..8e46aed1c27 100644 --- a/packages/rocketchat-custom-oauth/custom_oauth_server.coffee +++ b/packages/rocketchat-custom-oauth/custom_oauth_server.coffee @@ -96,6 +96,11 @@ class CustomOAuth console.log 'at:', accessToken identity = self.getIdentity accessToken + + # Fix WordPress-like identities having 'ID' instead of 'id' + if identity?.ID and not identity.id + identity.id = identity.ID + console.log 'id:', JSON.stringify identity, null, ' ' serviceData = diff --git a/packages/rocketchat-wordpress/common.coffee b/packages/rocketchat-wordpress/common.coffee new file mode 100644 index 00000000000..1d69554e9a3 --- /dev/null +++ b/packages/rocketchat-wordpress/common.coffee @@ -0,0 +1,14 @@ +config = + serverURL: '' + identityPath: '/oauth/me' + addAutopublishFields: + forLoggedInUser: ['services.wordpress'] + forOtherUsers: ['services.wordpress.user_login'] + +WordPress = new CustomOAuth 'wordpress', config + +Meteor.startup -> + Tracker.autorun -> + if RocketChat.settings.get 'API_Wordpress_URL' + config.serverURL = RocketChat.settings.get 'API_Wordpress_URL' + WordPress.configure config diff --git a/packages/rocketchat-wordpress/i18n/en.i18n.json b/packages/rocketchat-wordpress/i18n/en.i18n.json new file mode 100644 index 00000000000..bd4ea6b5ab6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/en.i18n.json @@ -0,0 +1,6 @@ +{ + "API_Wordpress_URL" : "WordPress URL", + "Accounts_OAuth_Wordpress": "WordPress Login", + "Accounts_OAuth_Wordpress_id": "WordPress ID", + "Accounts_OAuth_Wordpress_secret": "WordPress Secret" +} \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/pt.i18n.json b/packages/rocketchat-wordpress/i18n/pt.i18n.json new file mode 100644 index 00000000000..a3a4cf1c4e8 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/pt.i18n.json @@ -0,0 +1,3 @@ +{ + "API_Wordpress_URL" : "URL do WordPress" +} \ No newline at end of file diff --git a/packages/rocketchat-wordpress/package-tap.i18n b/packages/rocketchat-wordpress/package-tap.i18n new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/rocketchat-wordpress/package.js b/packages/rocketchat-wordpress/package.js new file mode 100644 index 00000000000..9094b6b9f93 --- /dev/null +++ b/packages/rocketchat-wordpress/package.js @@ -0,0 +1,32 @@ +Package.describe({ + name: 'rocketchat:wordpress', + version: '0.0.1', + summary: 'RocketChat settings for WordPress Oauth Flow' +}); + +// Loads all i18n.json files into tapi18nFiles +var _ = Npm.require('underscore'); +var fs = Npm.require('fs'); +tapi18nFiles = fs.readdirSync('packages/rocketchat-wordpress/i18n').forEach(function(filename) { + if (fs.statSync('packages/rocketchat-wordpress/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + api.use("tap:i18n@1.5.1"); + api.use('coffeescript'); + api.use('rocketchat:lib@0.0.1'); + api.use('rocketchat:custom-oauth'); + api.use('templating', 'client'); + api.addFiles("package-tap.i18n"); + api.addFiles("common.coffee"); + api.addFiles('wordpress-login-button.css', 'client'); + api.addFiles('startup.coffee', 'server'); + api.addFiles(tapi18nFiles); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-wordpress/startup.coffee b/packages/rocketchat-wordpress/startup.coffee new file mode 100644 index 00000000000..feb4dec3cd6 --- /dev/null +++ b/packages/rocketchat-wordpress/startup.coffee @@ -0,0 +1,5 @@ +RocketChat.settings.add 'API_Wordpress_URL', '', { type: 'string', group: 'Accounts', public: true, i18nLabel: 'rocketchat-wordpress:API_Wordpress_URL', section: 'WordPress' } +RocketChat.settings.add 'Accounts_OAuth_Wordpress', false, { type: 'boolean', group: 'Accounts', section: 'WordPress', i18nLabel: 'rocketchat-wordpress:Accounts_OAuth_Wordpress' } +RocketChat.settings.add 'Accounts_OAuth_Wordpress_id', '', { type: 'string', group: 'Accounts', section: 'WordPress', i18nLabel: 'rocketchat-wordpress:Accounts_OAuth_Wordpress_id' } +RocketChat.settings.add 'Accounts_OAuth_Wordpress_secret', '', { type: 'string', group: 'Accounts', section: 'WordPress', i18nLabel: 'rocketchat-wordpress:Accounts_OAuth_Wordpress_secret' } + diff --git a/packages/rocketchat-wordpress/wordpress-login-button.css b/packages/rocketchat-wordpress/wordpress-login-button.css new file mode 100644 index 00000000000..413a3c81323 --- /dev/null +++ b/packages/rocketchat-wordpress/wordpress-login-button.css @@ -0,0 +1,3 @@ +#login-buttons-image-wordpress { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiP…A3LDI3LjUsMjUuOTQsMjMuMjE1LDI4LjQzNHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==); +} \ No newline at end of file From 0c2c3773affe17b32f0e71c9a7f174d31ca4af96 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Thu, 24 Sep 2015 12:18:17 -0300 Subject: [PATCH 10/33] Fix to gitlab / wordpress custom oauth reconfiguring after settings changed --- client/views/admin/admin.coffee | 3 --- packages/rocketchat-gitlab/common.coffee | 20 +++++++++++++++----- packages/rocketchat-wordpress/common.coffee | 20 +++++++++++++++----- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/client/views/admin/admin.coffee b/client/views/admin/admin.coffee index 4cbdcd59784..6bad9f62865 100644 --- a/client/views/admin/admin.coffee +++ b/client/views/admin/admin.coffee @@ -45,7 +45,6 @@ Template.admin.events "click .submit .save": (e, t) -> group = FlowRouter.getParam('group') settings = Settings.find({ group: group }).fetch() - console.log 'will save settings', JSON.stringify settings updateSettings = [] for setting in settings value = null @@ -59,8 +58,6 @@ Template.admin.events if value? updateSettings.push { _id: setting._id, value: value } - console.log 'changed settings', JSON.stringify updateSettings - if not _.isEmpty updateSettings RocketChat.settings.batchSet updateSettings, (err, success) -> return toastr.error TAPi18next.t 'project:Error_updating_settings' if err diff --git a/packages/rocketchat-gitlab/common.coffee b/packages/rocketchat-gitlab/common.coffee index e6980e1115e..d9256e7e21b 100644 --- a/packages/rocketchat-gitlab/common.coffee +++ b/packages/rocketchat-gitlab/common.coffee @@ -7,8 +7,18 @@ config = Gitlab = new CustomOAuth 'gitlab', config -Meteor.startup -> - Tracker.autorun -> - if RocketChat.settings.get 'API_Gitlab_URL' - config.serverURL = RocketChat.settings.get 'API_Gitlab_URL' - Gitlab.configure config +if Meteor.isServer + Meteor.startup -> + RocketChat.models.Settings.find({ _id: 'API_Gitlab_URL' }).observe + added: (record) -> + config.serverURL = RocketChat.settings.get 'API_Gitlab_URL' + Gitlab.configure config + changed: (record) -> + config.serverURL = RocketChat.settings.get 'API_Gitlab_URL' + Gitlab.configure config +else + Meteor.startup -> + Tracker.autorun -> + if RocketChat.settings.get 'API_Gitlab_URL' + config.serverURL = RocketChat.settings.get 'API_Gitlab_URL' + Gitlab.configure config diff --git a/packages/rocketchat-wordpress/common.coffee b/packages/rocketchat-wordpress/common.coffee index 1d69554e9a3..9d18683ab29 100644 --- a/packages/rocketchat-wordpress/common.coffee +++ b/packages/rocketchat-wordpress/common.coffee @@ -7,8 +7,18 @@ config = WordPress = new CustomOAuth 'wordpress', config -Meteor.startup -> - Tracker.autorun -> - if RocketChat.settings.get 'API_Wordpress_URL' - config.serverURL = RocketChat.settings.get 'API_Wordpress_URL' - WordPress.configure config +if Meteor.isServer + Meteor.startup -> + RocketChat.models.Settings.find({ _id: 'API_Wordpress_URL' }).observe + added: (record) -> + config.serverURL = RocketChat.settings.get 'API_Wordpress_URL' + WordPress.configure config + changed: (record) -> + config.serverURL = RocketChat.settings.get 'API_Wordpress_URL' + WordPress.configure config +else + Meteor.startup -> + Tracker.autorun -> + if RocketChat.settings.get 'API_Wordpress_URL' + config.serverURL = RocketChat.settings.get 'API_Wordpress_URL' + WordPress.configure config From 3370e8029600b0ae400775490f55168b70b1f43c Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Thu, 24 Sep 2015 14:15:53 -0300 Subject: [PATCH 11/33] Fix to gitlab / wordpress custom oauth reconfiguring after settings changed --- .../custom_oauth_server.coffee | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/rocketchat-custom-oauth/custom_oauth_server.coffee b/packages/rocketchat-custom-oauth/custom_oauth_server.coffee index 8e46aed1c27..587157e6f00 100644 --- a/packages/rocketchat-custom-oauth/custom_oauth_server.coffee +++ b/packages/rocketchat-custom-oauth/custom_oauth_server.coffee @@ -34,16 +34,15 @@ class CustomOAuth options.identityPath = '/me' @serverURL = options.serverURL - - if not /^https?:\/\/.+/.test options.tokenPath - options.tokenPath = @serverURL + options.tokenPath - - if not /^https?:\/\/.+/.test options.identityPath - options.identityPath = @serverURL + options.identityPath - @tokenPath = options.tokenPath @identityPath = options.identityPath + if not /^https?:\/\/.+/.test @tokenPath + @tokenPath = @serverURL + @tokenPath + + if not /^https?:\/\/.+/.test @identityPath + @identityPath = @serverURL + @identityPath + if Match.test options.addAutopublishFields, Object Accounts.addAutopublishFields options.addAutopublishFields From ba37abf5259e6b68d4bf31bd0508413b1cf530b6 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Thu, 24 Sep 2015 15:00:34 -0300 Subject: [PATCH 12/33] Fix getting user name suggestion from oauth that do not provide a name for the logged in user --- server/methods/getUsernameSuggestion.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/methods/getUsernameSuggestion.coffee b/server/methods/getUsernameSuggestion.coffee index 72133e431a3..afe5b6609d7 100644 --- a/server/methods/getUsernameSuggestion.coffee +++ b/server/methods/getUsernameSuggestion.coffee @@ -17,7 +17,7 @@ usernameIsAvaliable = (username) -> usernames.push slug user.name - nameParts = user.name.split() + nameParts = user?.name?.split() if nameParts.length > 1 first = nameParts[0] last = nameParts[nameParts.length - 1] From 40181db27c332e82cda3eedd1e85227ee44af600 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Thu, 24 Sep 2015 15:11:51 -0300 Subject: [PATCH 13/33] Do not overwrite options on custom oauth --- .../rocketchat-custom-oauth/custom_oauth_client.coffee | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-custom-oauth/custom_oauth_client.coffee b/packages/rocketchat-custom-oauth/custom_oauth_client.coffee index 4dafb22e3e0..6c19320fb8f 100644 --- a/packages/rocketchat-custom-oauth/custom_oauth_client.coffee +++ b/packages/rocketchat-custom-oauth/custom_oauth_client.coffee @@ -25,11 +25,10 @@ class CustomOAuth options.authorizePath = '/oauth/authorize' @serverURL = options.serverURL + @authorizePath = options.authorizePath - if not /^https?:\/\/.+/.test options.authorizePath - @authorizePath = @serverURL + options.authorizePath - else - @authorizePath = options.authorizePath + if not /^https?:\/\/.+/.test @authorizePath + @authorizePath = @serverURL + @authorizePath configureLogin: -> self = @ From 39fe1365b58638e0fa9e66ade8c1705b05ea3692 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Thu, 24 Sep 2015 18:45:56 -0300 Subject: [PATCH 14/33] Closes #849; Setup settings ASAP --- .../settings/server/startup.coffee | 173 +++++++++--------- 1 file changed, 86 insertions(+), 87 deletions(-) diff --git a/packages/rocketchat-lib/settings/server/startup.coffee b/packages/rocketchat-lib/settings/server/startup.coffee index bc87a272a9d..9550898d9c6 100644 --- a/packages/rocketchat-lib/settings/server/startup.coffee +++ b/packages/rocketchat-lib/settings/server/startup.coffee @@ -1,100 +1,99 @@ -Meteor.startup -> - # Insert server unique id if it doesn't exist - if not RocketChat.models.Settings.findOneById 'uniqueID' - RocketChat.models.Settings.createWithIdAndValue 'uniqueID', Random.id() +# Insert server unique id if it doesn't exist +if not RocketChat.models.Settings.findOneById 'uniqueID' + RocketChat.models.Settings.createWithIdAndValue 'uniqueID', Random.id() - RocketChat.settings.addGroup 'Accounts' - RocketChat.settings.add 'Accounts_RegistrationRequired', true, { type: 'boolean', group: 'Accounts', public: true, section: 'Registration' } - RocketChat.settings.add 'Accounts_EmailVerification', false, { type: 'boolean', group: 'Accounts', public: true, section: 'Registration' } - RocketChat.settings.add 'Accounts_ManuallyApproveNewUsers', false, { type: 'boolean', group: 'Accounts', section: 'Registration' } +RocketChat.settings.addGroup 'Accounts' +RocketChat.settings.add 'Accounts_RegistrationRequired', true, { type: 'boolean', group: 'Accounts', public: true, section: 'Registration' } +RocketChat.settings.add 'Accounts_EmailVerification', false, { type: 'boolean', group: 'Accounts', public: true, section: 'Registration' } +RocketChat.settings.add 'Accounts_ManuallyApproveNewUsers', false, { type: 'boolean', group: 'Accounts', section: 'Registration' } - RocketChat.settings.add 'Accounts_AvatarStoreType', 'GridFS', { type: 'string', group: 'Accounts', section: 'Avatar' } - RocketChat.settings.add 'Accounts_AvatarStorePath', '/var/www/rocket.chat/uploads/avatar/', { type: 'string', group: 'Accounts', section: 'Avatar' } - RocketChat.settings.add 'Accounts_AvatarResize', false, { type: 'boolean', group: 'Accounts', section: 'Avatar' } - RocketChat.settings.add 'Accounts_AvatarSize', 200, { type: 'int', group: 'Accounts', section: 'Avatar' } +RocketChat.settings.add 'Accounts_AvatarStoreType', 'GridFS', { type: 'string', group: 'Accounts', section: 'Avatar' } +RocketChat.settings.add 'Accounts_AvatarStorePath', '/var/www/rocket.chat/uploads/avatar/', { type: 'string', group: 'Accounts', section: 'Avatar' } +RocketChat.settings.add 'Accounts_AvatarResize', false, { type: 'boolean', group: 'Accounts', section: 'Avatar' } +RocketChat.settings.add 'Accounts_AvatarSize', 200, { type: 'int', group: 'Accounts', section: 'Avatar' } - RocketChat.settings.add 'Accounts_OAuth_Facebook', false, { type: 'boolean', group: 'Accounts', section: 'Facebook' } - RocketChat.settings.add 'Accounts_OAuth_Facebook_id', '', { type: 'string', group: 'Accounts', section: 'Facebook' } - RocketChat.settings.add 'Accounts_OAuth_Facebook_secret', '', { type: 'string', group: 'Accounts', section: 'Facebook' } - RocketChat.settings.add 'Accounts_OAuth_Google', false, { type: 'boolean', group: 'Accounts', section: 'Google' } - RocketChat.settings.add 'Accounts_OAuth_Google_id', '', { type: 'string', group: 'Accounts', section: 'Google' } - RocketChat.settings.add 'Accounts_OAuth_Google_secret', '', { type: 'string', group: 'Accounts', section: 'Google' } - RocketChat.settings.add 'Accounts_OAuth_Github', false, { type: 'boolean', group: 'Accounts', section: 'Github' } - RocketChat.settings.add 'Accounts_OAuth_Github_id', '', { type: 'string', group: 'Accounts', section: 'Github' } - RocketChat.settings.add 'Accounts_OAuth_Github_secret', '', { type: 'string', group: 'Accounts', section: 'Github' } - RocketChat.settings.add 'Accounts_OAuth_Gitlab', false, { type: 'boolean', group: 'Accounts', section: 'Gitlab' } - RocketChat.settings.add 'Accounts_OAuth_Gitlab_id', '', { type: 'string', group: 'Accounts', section: 'Gitlab' } - RocketChat.settings.add 'Accounts_OAuth_Gitlab_secret', '', { type: 'string', group: 'Accounts', section: 'Gitlab' } - RocketChat.settings.add 'Accounts_OAuth_Linkedin', false, { type: 'boolean', group: 'Accounts', section: 'Linkedin' } - RocketChat.settings.add 'Accounts_OAuth_Linkedin_id', '', { type: 'string', group: 'Accounts', section: 'Linkedin' } - RocketChat.settings.add 'Accounts_OAuth_Linkedin_secret', '', { type: 'string', group: 'Accounts', section: 'Linkedin' } - RocketChat.settings.add 'Accounts_OAuth_Meteor', false, { type: 'boolean', group: 'Accounts', section: 'Meteor' } - RocketChat.settings.add 'Accounts_OAuth_Meteor_id', '', { type: 'string', group: 'Accounts', section: 'Meteor' } - RocketChat.settings.add 'Accounts_OAuth_Meteor_secret', '', { type: 'string', group: 'Accounts', section: 'Meteor' } - RocketChat.settings.add 'Accounts_OAuth_Twitter', false, { type: 'boolean', group: 'Accounts', section: 'Twitter' } - RocketChat.settings.add 'Accounts_OAuth_Twitter_id', '', { type: 'string', group: 'Accounts', section: 'Twitter' } - RocketChat.settings.add 'Accounts_OAuth_Twitter_secret', '', { type: 'string', group: 'Accounts', section: 'Twitter' } +RocketChat.settings.add 'Accounts_OAuth_Facebook', false, { type: 'boolean', group: 'Accounts', section: 'Facebook' } +RocketChat.settings.add 'Accounts_OAuth_Facebook_id', '', { type: 'string', group: 'Accounts', section: 'Facebook' } +RocketChat.settings.add 'Accounts_OAuth_Facebook_secret', '', { type: 'string', group: 'Accounts', section: 'Facebook' } +RocketChat.settings.add 'Accounts_OAuth_Google', false, { type: 'boolean', group: 'Accounts', section: 'Google' } +RocketChat.settings.add 'Accounts_OAuth_Google_id', '', { type: 'string', group: 'Accounts', section: 'Google' } +RocketChat.settings.add 'Accounts_OAuth_Google_secret', '', { type: 'string', group: 'Accounts', section: 'Google' } +RocketChat.settings.add 'Accounts_OAuth_Github', false, { type: 'boolean', group: 'Accounts', section: 'Github' } +RocketChat.settings.add 'Accounts_OAuth_Github_id', '', { type: 'string', group: 'Accounts', section: 'Github' } +RocketChat.settings.add 'Accounts_OAuth_Github_secret', '', { type: 'string', group: 'Accounts', section: 'Github' } +RocketChat.settings.add 'Accounts_OAuth_Gitlab', false, { type: 'boolean', group: 'Accounts', section: 'Gitlab' } +RocketChat.settings.add 'Accounts_OAuth_Gitlab_id', '', { type: 'string', group: 'Accounts', section: 'Gitlab' } +RocketChat.settings.add 'Accounts_OAuth_Gitlab_secret', '', { type: 'string', group: 'Accounts', section: 'Gitlab' } +RocketChat.settings.add 'Accounts_OAuth_Linkedin', false, { type: 'boolean', group: 'Accounts', section: 'Linkedin' } +RocketChat.settings.add 'Accounts_OAuth_Linkedin_id', '', { type: 'string', group: 'Accounts', section: 'Linkedin' } +RocketChat.settings.add 'Accounts_OAuth_Linkedin_secret', '', { type: 'string', group: 'Accounts', section: 'Linkedin' } +RocketChat.settings.add 'Accounts_OAuth_Meteor', false, { type: 'boolean', group: 'Accounts', section: 'Meteor' } +RocketChat.settings.add 'Accounts_OAuth_Meteor_id', '', { type: 'string', group: 'Accounts', section: 'Meteor' } +RocketChat.settings.add 'Accounts_OAuth_Meteor_secret', '', { type: 'string', group: 'Accounts', section: 'Meteor' } +RocketChat.settings.add 'Accounts_OAuth_Twitter', false, { type: 'boolean', group: 'Accounts', section: 'Twitter' } +RocketChat.settings.add 'Accounts_OAuth_Twitter_id', '', { type: 'string', group: 'Accounts', section: 'Twitter' } +RocketChat.settings.add 'Accounts_OAuth_Twitter_secret', '', { type: 'string', group: 'Accounts', section: 'Twitter' } - RocketChat.settings.addGroup 'General' - RocketChat.settings.add 'Site_Name', 'Rocket.Chat', { type: 'string', group: 'General', public: true } - RocketChat.settings.add 'Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean', group: 'General' } +RocketChat.settings.addGroup 'General' +RocketChat.settings.add 'Site_Name', 'Rocket.Chat', { type: 'string', group: 'General', public: true } +RocketChat.settings.add 'Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean', group: 'General' } - RocketChat.settings.addGroup 'API' - RocketChat.settings.add 'API_Analytics', '', { type: 'string', group: 'API', public: true } - RocketChat.settings.add 'API_Embed', true, { type: 'boolean', group: 'API', public: true } +RocketChat.settings.addGroup 'API' +RocketChat.settings.add 'API_Analytics', '', { type: 'string', group: 'API', public: true } +RocketChat.settings.add 'API_Embed', true, { type: 'boolean', group: 'API', public: true } - RocketChat.settings.addGroup 'SMTP' - RocketChat.settings.add 'SMTP_Host', '', { type: 'string', group: 'SMTP' } - RocketChat.settings.add 'SMTP_Port', '', { type: 'string', group: 'SMTP' } - RocketChat.settings.add 'SMTP_Username', '', { type: 'string', group: 'SMTP' } - RocketChat.settings.add 'SMTP_Password', '', { type: 'string', group: 'SMTP' } - RocketChat.settings.add 'From_Email', 'no-reply@rocket.chat', { type: 'string', group: 'SMTP' } +RocketChat.settings.addGroup 'SMTP' +RocketChat.settings.add 'SMTP_Host', '', { type: 'string', group: 'SMTP' } +RocketChat.settings.add 'SMTP_Port', '', { type: 'string', group: 'SMTP' } +RocketChat.settings.add 'SMTP_Username', '', { type: 'string', group: 'SMTP' } +RocketChat.settings.add 'SMTP_Password', '', { type: 'string', group: 'SMTP' } +RocketChat.settings.add 'From_Email', 'no-reply@rocket.chat', { type: 'string', group: 'SMTP' } - RocketChat.settings.add 'Invitation_Subject', 'You have been invited to Rocket.Chat', { type: 'string', group: 'SMTP', section: 'Invitation' } - RocketChat.settings.add 'Invitation_HTML', '

You have been invited to

Rocket.Chat

Go to https://demo.rocket.chat and try the best open source chat solution available today!

', { type: 'string', multiline: true, group: 'SMTP', section: 'Invitation' } +RocketChat.settings.add 'Invitation_Subject', 'You have been invited to Rocket.Chat', { type: 'string', group: 'SMTP', section: 'Invitation' } +RocketChat.settings.add 'Invitation_HTML', '

You have been invited to

Rocket.Chat

Go to https://demo.rocket.chat and try the best open source chat solution available today!

', { type: 'string', multiline: true, group: 'SMTP', section: 'Invitation' } - RocketChat.settings.addGroup 'Message' - RocketChat.settings.add 'Message_AllowEditing', true, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_AllowEditing_BlockEditInMinutes', 0, { type: 'int', group: 'Message', public: true } - RocketChat.settings.add 'Message_AllowDeleting', true, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_AllowPinning', true, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_ShowEditedStatus', true, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_ShowDeletedStatus', false, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_KeepHistory', false, { type: 'boolean', group: 'Message', public: true } - RocketChat.settings.add 'Message_MaxAllowedSize', 5000, { type: 'int', group: 'Message', public: true } +RocketChat.settings.addGroup 'Message' +RocketChat.settings.add 'Message_AllowEditing', true, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_AllowEditing_BlockEditInMinutes', 0, { type: 'int', group: 'Message', public: true } +RocketChat.settings.add 'Message_AllowDeleting', true, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_AllowPinning', true, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_ShowEditedStatus', true, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_ShowDeletedStatus', false, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_KeepHistory', false, { type: 'boolean', group: 'Message', public: true } +RocketChat.settings.add 'Message_MaxAllowedSize', 5000, { type: 'int', group: 'Message', public: true } - RocketChat.settings.addGroup 'Meta' - RocketChat.settings.add 'Meta_language', '', { type: 'string', group: 'Meta' } - RocketChat.settings.add 'Meta_fb_app_id', '', { type: 'string', group: 'Meta' } - RocketChat.settings.add 'Meta_robots', '', { type: 'string', group: 'Meta' } - RocketChat.settings.add 'Meta_google-site-verification', '', { type: 'string', group: 'Meta' } - RocketChat.settings.add 'Meta_msvalidate01', '', { type: 'string', group: 'Meta' } +RocketChat.settings.addGroup 'Meta' +RocketChat.settings.add 'Meta_language', '', { type: 'string', group: 'Meta' } +RocketChat.settings.add 'Meta_fb_app_id', '', { type: 'string', group: 'Meta' } +RocketChat.settings.add 'Meta_robots', '', { type: 'string', group: 'Meta' } +RocketChat.settings.add 'Meta_google-site-verification', '', { type: 'string', group: 'Meta' } +RocketChat.settings.add 'Meta_msvalidate01', '', { type: 'string', group: 'Meta' } - RocketChat.settings.addGroup 'Push' - RocketChat.settings.add 'Push_debug', false, { type: 'boolean', group: 'Push', public: true } - RocketChat.settings.add 'Push_enable', false, { type: 'boolean', group: 'Push', public: true } - RocketChat.settings.add 'Push_production', false, { type: 'boolean', group: 'Push', public: true } - RocketChat.settings.add 'Push_apn_passphrase', '', { type: 'string', group: 'Push' } - RocketChat.settings.add 'Push_apn_key', '', { type: 'string', multiline: true, group: 'Push' } - RocketChat.settings.add 'Push_apn_cert', '', { type: 'string', multiline: true, group: 'Push' } - RocketChat.settings.add 'Push_apn_dev_passphrase', '', { type: 'string', group: 'Push' } - RocketChat.settings.add 'Push_apn_dev_key', '', { type: 'string', multiline: true, group: 'Push' } - RocketChat.settings.add 'Push_apn_dev_cert', '', { type: 'string', multiline: true, group: 'Push' } - RocketChat.settings.add 'Push_gcm_api_key', '', { type: 'string', group: 'Push' } - RocketChat.settings.add 'Push_gcm_project_number', '', { type: 'string', group: 'Push', public: true } +RocketChat.settings.addGroup 'Push' +RocketChat.settings.add 'Push_debug', false, { type: 'boolean', group: 'Push', public: true } +RocketChat.settings.add 'Push_enable', false, { type: 'boolean', group: 'Push', public: true } +RocketChat.settings.add 'Push_production', false, { type: 'boolean', group: 'Push', public: true } +RocketChat.settings.add 'Push_apn_passphrase', '', { type: 'string', group: 'Push' } +RocketChat.settings.add 'Push_apn_key', '', { type: 'string', multiline: true, group: 'Push' } +RocketChat.settings.add 'Push_apn_cert', '', { type: 'string', multiline: true, group: 'Push' } +RocketChat.settings.add 'Push_apn_dev_passphrase', '', { type: 'string', group: 'Push' } +RocketChat.settings.add 'Push_apn_dev_key', '', { type: 'string', multiline: true, group: 'Push' } +RocketChat.settings.add 'Push_apn_dev_cert', '', { type: 'string', multiline: true, group: 'Push' } +RocketChat.settings.add 'Push_gcm_api_key', '', { type: 'string', group: 'Push' } +RocketChat.settings.add 'Push_gcm_project_number', '', { type: 'string', group: 'Push', public: true } - RocketChat.settings.addGroup 'Layout' - RocketChat.settings.add 'Layout_Home_Title', 'Home', { type: 'string', group: 'Layout', public: true, section: 'Content' } - RocketChat.settings.add 'Layout_Home_Body', 'Welcome to Rocket.Chat
Go to APP SETTINGS -> Layout to customize this intro.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } - RocketChat.settings.add 'Layout_Terms_of_Service', 'Terms of Service
Go to APP SETTINGS -> Layout to customize this page.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } - RocketChat.settings.add 'Layout_Privacy_Policy', 'Privacy Policy
Go to APP SETTINGS -> Layout to customize this page.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } - RocketChat.settings.add 'Layout_Sidenav_Footer', '', { type: 'string', group: 'Layout', public: true, i18nDescription: 'Layout_Sidenav_Footer_description' } - RocketChat.settings.add 'Layout_Login_Header', '', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Login' } - RocketChat.settings.add 'Layout_Login_Terms', 'By proceeding to create your account and use Rocket.Chat, you are agreeing to our Terms of Service and Privacy Policy. If you do not agree, you cannot use Rocket.Chat.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Login' } +RocketChat.settings.addGroup 'Layout' +RocketChat.settings.add 'Layout_Home_Title', 'Home', { type: 'string', group: 'Layout', public: true, section: 'Content' } +RocketChat.settings.add 'Layout_Home_Body', 'Welcome to Rocket.Chat
Go to APP SETTINGS -> Layout to customize this intro.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } +RocketChat.settings.add 'Layout_Terms_of_Service', 'Terms of Service
Go to APP SETTINGS -> Layout to customize this page.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } +RocketChat.settings.add 'Layout_Privacy_Policy', 'Privacy Policy
Go to APP SETTINGS -> Layout to customize this page.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Content' } +RocketChat.settings.add 'Layout_Sidenav_Footer', '', { type: 'string', group: 'Layout', public: true, i18nDescription: 'Layout_Sidenav_Footer_description' } +RocketChat.settings.add 'Layout_Login_Header', '', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Login' } +RocketChat.settings.add 'Layout_Login_Terms', 'By proceeding to create your account and use Rocket.Chat, you are agreeing to our Terms of Service and Privacy Policy. If you do not agree, you cannot use Rocket.Chat.', { type: 'string', multiline: true, group: 'Layout', public: true, section: 'Login' } - RocketChat.settings.add 'Statistics_opt_out', false, { type: 'boolean', group: false } +RocketChat.settings.add 'Statistics_opt_out', false, { type: 'boolean', group: false } - if process?.env? and not process.env['MAIL_URL']? and RocketChat.settings.get('SMTP_Host') and RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') - process.env['MAIL_URL'] = "smtp://" + encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + encodeURIComponent(RocketChat.settings.get('SMTP_Host')) - if RocketChat.settings.get('SMTP_Port') - process.env['MAIL_URL'] += ':' + parseInt(RocketChat.settings.get('SMTP_Port')) +if process?.env? and not process.env['MAIL_URL']? and RocketChat.settings.get('SMTP_Host') and RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') + process.env['MAIL_URL'] = "smtp://" + encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + encodeURIComponent(RocketChat.settings.get('SMTP_Host')) + if RocketChat.settings.get('SMTP_Port') + process.env['MAIL_URL'] += ':' + parseInt(RocketChat.settings.get('SMTP_Port')) From 6be262b43be3997dbc2a892a50e5f146b607317c Mon Sep 17 00:00:00 2001 From: Reid Wakida Date: Thu, 24 Sep 2015 15:51:49 -1000 Subject: [PATCH 15/33] Fix #887. Meteor method did not pass boolean to Subscription model. --- server/methods/toogleFavorite.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/methods/toogleFavorite.coffee b/server/methods/toogleFavorite.coffee index a8c4cf5fa99..853bfe00c77 100644 --- a/server/methods/toogleFavorite.coffee +++ b/server/methods/toogleFavorite.coffee @@ -5,4 +5,4 @@ Meteor.methods console.log '[methods] toogleFavorite -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments - RocketChat.models.Subscriptions.setFavoriteByRoomIdAndUserId rid, Meteor.userId() + RocketChat.models.Subscriptions.setFavoriteByRoomIdAndUserId rid, Meteor.userId(), f From dd19e5cfb42d69dbed543581ab93e5b37d814fcb Mon Sep 17 00:00:00 2001 From: George Secrieru Date: Fri, 25 Sep 2015 10:19:05 -0300 Subject: [PATCH 16/33] Disabling Favorites based on settings. --- client/views/app/room.coffee | 14 ++++++++++++-- client/views/app/room.html | 2 +- client/views/app/sideNav/channels.coffee | 13 ++++++++++--- client/views/app/sideNav/sideNav.coffee | 2 ++ client/views/app/sideNav/sideNav.html | 4 +++- i18n/en.i18n.json | 1 + i18n/pt.i18n.json | 1 + .../rocketchat-lib/settings/server/startup.coffee | 1 + 8 files changed, 31 insertions(+), 7 deletions(-) diff --git a/client/views/app/room.coffee b/client/views/app/room.coffee index 5f44be0cbb2..ea3f6154f01 100644 --- a/client/views/app/room.coffee +++ b/client/views/app/room.coffee @@ -1,12 +1,19 @@ +isSubscribed = (_id) -> + return ChatSubscription.find({ rid: _id }).count() > 0 + +favoritesEnabled = -> + return !RocketChat.settings.get 'Disable_Favorite_Rooms' + + # @TODO bug com o botão para "rolar até o fim" (novas mensagens) quando há uma mensagem com texto que gere rolagem horizontal Template.room.helpers favorite: -> sub = ChatSubscription.findOne { rid: this._id }, { fields: { f: 1 } } - return 'icon-star favorite-room' if sub?.f? and sub.f + return 'icon-star favorite-room' if sub?.f? and sub.f and favoritesEnabled return 'icon-star-empty' subscribed: -> - return ChatSubscription.find({ rid: this._id }).count() > 0 + return isSubscribed(this._id) messagesHistory: -> return ChatMessage.find { rid: this._id, t: { '$ne': 't' } }, { sort: { ts: 1 } } @@ -231,6 +238,9 @@ Template.room.helpers adminClass: -> return 'admin' if RocketChat.authz.hasRole(Meteor.userId(), 'admin') + showToggleFavorite: -> + return true if isSubscribed(this._id) and favoritesEnabled() + Template.room.events "touchstart .message": (e, t) -> message = this._arguments[1] diff --git a/client/views/app/room.html b/client/views/app/room.html index f5dbb9470f4..2e7fe76e092 100644 --- a/client/views/app/room.html +++ b/client/views/app/room.html @@ -9,7 +9,7 @@
{{> burger}}

- {{#if subscribed}} + {{#if showToggleFavorite}} {{/if}} diff --git a/client/views/app/sideNav/channels.coffee b/client/views/app/sideNav/channels.coffee index 5d715a1453b..3e4dd131a7a 100644 --- a/client/views/app/sideNav/channels.coffee +++ b/client/views/app/sideNav/channels.coffee @@ -6,15 +6,22 @@ Template.channels.helpers return 'active' if ChatSubscription.findOne({ t: { $in: ['c']}, f: { $ne: true }, open: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } })? rooms: -> - return ChatSubscription.find { t: { $in: ['c']}, f: { $ne: true }, open: true }, { sort: 't': 1, 'name': 1 } + query = + t: { $in: ['c']}, + open: true + + if !RocketChat.settings.get 'Disable_Favorite_Rooms' + query.f = { $ne: true } + + return ChatSubscription.find query, { sort: 't': 1, 'name': 1 } Template.channels.events 'click .add-room': (e, instance) -> if RocketChat.authz.hasAtLeastOnePermission('create-c') SideNav.setFlex "createChannelFlex" SideNav.openFlex() - else - e.preventDefault() + else + e.preventDefault() 'click .more-channels': -> SideNav.setFlex "listChannelsFlex" diff --git a/client/views/app/sideNav/sideNav.coffee b/client/views/app/sideNav/sideNav.coffee index 6038e3608c7..0ad46e0af5b 100644 --- a/client/views/app/sideNav/sideNav.coffee +++ b/client/views/app/sideNav/sideNav.coffee @@ -6,6 +6,8 @@ Template.sideNav.helpers return SideNav.getFlex().data footer: -> return RocketChat.settings.get 'Layout_Sidenav_Footer' + showStarredRooms: -> + return !RocketChat.settings.get 'Disable_Favorite_Rooms' Template.sideNav.events 'click .close-flex': -> diff --git a/client/views/app/sideNav/sideNav.html b/client/views/app/sideNav/sideNav.html index c44e43533bb..89f7112635d 100644 --- a/client/views/app/sideNav/sideNav.html +++ b/client/views/app/sideNav/sideNav.html @@ -9,7 +9,9 @@
- {{> starredRooms }} + {{#if showStarredRooms }} + {{> starredRooms }} + {{/if}} {{> channels }} {{> directMessages }} {{> privateGroups }} diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index ed2d6ec209a..2fe66834223 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -88,6 +88,7 @@ "Delete" : "Delete", "Deleted" : "Deleted!", "Direct_Messages" : "Direct Messages", + "Disable_Favorite_Rooms" : "Disable Favorites", "Disable_New_Message_Notification" : "Disable New Message Notification", "Disable_New_Room_Notification" : "Disable New Room Notification", "Drop_to_upload_file" : "Drop to upload file", diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 0368d191421..58941e9df25 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -81,6 +81,7 @@ "Delete" : "Deletar", "Deleted" : "Deletado!", "Direct_Messages" : "Mensagens Diretas", + "Disable_Favorite_Rooms" : "Desabilitar Favoritos", "Disable_New_Message_Notification" : "Desativar notificações de nova mensagem", "Disable_New_Room_Notification" : "Desativar notificações de nova sala", "Drop_to_upload_file" : "Largue para enviar arquivos", diff --git a/packages/rocketchat-lib/settings/server/startup.coffee b/packages/rocketchat-lib/settings/server/startup.coffee index 9550898d9c6..fa2ee4b028a 100644 --- a/packages/rocketchat-lib/settings/server/startup.coffee +++ b/packages/rocketchat-lib/settings/server/startup.coffee @@ -37,6 +37,7 @@ RocketChat.settings.add 'Accounts_OAuth_Twitter_secret', '', { type: 'string', g RocketChat.settings.addGroup 'General' RocketChat.settings.add 'Site_Name', 'Rocket.Chat', { type: 'string', group: 'General', public: true } RocketChat.settings.add 'Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean', group: 'General' } +RocketChat.settings.add 'Disable_Favorite_Rooms', false, { type: 'boolean', group: 'General' } RocketChat.settings.addGroup 'API' RocketChat.settings.add 'API_Analytics', '', { type: 'string', group: 'API', public: true } From f3d11d1f36a703411ebfcf5fa4df7519c9f32aa5 Mon Sep 17 00:00:00 2001 From: Aaron Ogle Date: Fri, 25 Sep 2015 11:50:02 -0500 Subject: [PATCH 17/33] Changed internal bot to only listen on public rooms --- packages/rocketchat-hubot/hubot.coffee | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-hubot/hubot.coffee b/packages/rocketchat-hubot/hubot.coffee index c427cbd4b56..2101deefab5 100644 --- a/packages/rocketchat-hubot/hubot.coffee +++ b/packages/rocketchat-hubot/hubot.coffee @@ -135,11 +135,15 @@ class RocketChatAdapter extends Hubot.Adapter class RocketBotReceiver constructor: (message) -> - console.log message + #console.log message if message.u.username isnt RocketBot.name - RocketBotUser = new Hubot.User(message.u.username, room: message.rid) - RocketBotTextMessage = new Hubot.TextMessage(RocketBotUser, message.msg, message._id) - RocketBot.adapter.receive RocketBotTextMessage + room = RocketChat.models.Rooms.findOneById message.rid + + if room.t is 'c' + console.log message + RocketBotUser = new Hubot.User(message.u.username, room: message.rid) + RocketBotTextMessage = new Hubot.TextMessage(RocketBotUser, message.msg, message._id) + RocketBot.adapter.receive RocketBotTextMessage return message class HubotScripts From 3e61352f084a3d3c3484225f6fb45f6ce209738a Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Fri, 25 Sep 2015 18:03:03 -0300 Subject: [PATCH 18/33] Settings for allowing bot name change --- .meteor/packages | 2 +- .meteor/versions | 1 + packages/rocketchat-hubot/hubot.coffee | 114 ++++++++++---------- packages/rocketchat-hubot/i18n/en.i18n.json | 5 + packages/rocketchat-hubot/i18n/pt.i18n.json | 5 + packages/rocketchat-hubot/package-tap.i18n | 0 packages/rocketchat-hubot/package.js | 22 +++- packages/rocketchat-hubot/settings.coffee | 4 + 8 files changed, 95 insertions(+), 58 deletions(-) create mode 100644 packages/rocketchat-hubot/i18n/en.i18n.json create mode 100644 packages/rocketchat-hubot/i18n/pt.i18n.json create mode 100644 packages/rocketchat-hubot/package-tap.i18n create mode 100644 packages/rocketchat-hubot/settings.coffee diff --git a/.meteor/packages b/.meteor/packages index 2ebba48b6d1..79e3bf820ea 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -44,7 +44,7 @@ rocketchat:slashcommands-leave rocketchat:statistics rocketchat:webrtc #rocketchat:livechat -#rocketchat:hubot +rocketchat:hubot #rocketchat:irc konecty:change-case diff --git a/.meteor/versions b/.meteor/versions index 9f9137e44a7..91f20e0f3c3 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -110,6 +110,7 @@ rocketchat:favico@0.0.1 rocketchat:file@0.0.1 rocketchat:gitlab@0.0.1 rocketchat:highlight@0.0.1 +rocketchat:hubot@0.0.1 rocketchat:ldap@0.0.1 rocketchat:lib@0.0.1 rocketchat:logger@0.0.1 diff --git a/packages/rocketchat-hubot/hubot.coffee b/packages/rocketchat-hubot/hubot.coffee index c427cbd4b56..642d8fe3b75 100644 --- a/packages/rocketchat-hubot/hubot.coffee +++ b/packages/rocketchat-hubot/hubot.coffee @@ -274,59 +274,61 @@ sendHelper = Meteor.bindEnvironment (robot, envelope, strings, map) -> console.error "Hubot error: #{err}" if DEBUG robot.logger.error "RocketChat send error: #{err}" -RocketBot = new Robot null, null, false, 'rocketbot' -RocketBot.alias = 'bot' -RocketBot.adapter = new RocketChatAdapter RocketBot -HubotScripts(RocketBot) -RocketBot.run() - -# RocketBot.hear /^test/i, (res) -> -# res.send "Test? TESTING? WE DON'T NEED NO TEST, EVERYTHING WORKS!" - -RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW - -# Meteor.startup -> - # console.log RocketBot; - # # what's (the regexp for) my name? - # robot.respond /(?:)/, -> false - # mynameRE = robot.listeners.pop().regex - # # register scripts - # HubotScripts(robot) - # Object.keys(share.hubot).forEach (scriptName) -> - # console.log "Loading hubot script: #{scriptName}" - # share.hubot[scriptName](robot) - # # register our nick - # n = Meteor.call 'newNick', {name: 'rocketbot'} - # Meteor.call 'setTag', {type:'nicks', object:n._id, name:'Gravatar', value:'rocket@printf.net', who:n.canon} - # # register our presence in general chat - # keepalive = -> Meteor.call 'setPresence', - # u: - # username: 'rocketbot' - # rid: 'GENERAL' - # present: true - # foreground: true - # keepalive() - # Meteor.setInterval keepalive, 30*1000 # every 30s refresh presence - # # listen to the chat room, ignoring messages sent before we startup - # startup = true - # ChatMessage.find({}).observe - # added: (message) -> - # return if startup - # return if message.u.username is "rocketbot" or message.u.username is "" - # return if message.system or message.action or message.oplog or message.bodyIsHtml - # console.log "Received from #{message.u.username} in #{message.rid}: #{message.body}"\ - # if DEBUG - # user = new Hubot.User(message.u.username, room: message.rid) - # tm = new Hubot.TextMessage(user, message.body, message._id) - # tm.private = message.to? - # # if private, ensure it's treated as a direct address - # if tm.private and not mynameRE.test(tm.text) - # tm.text = "#{robot.name} #{tm.text}" - # adapter.receive tm - # startup = false - # Meteor.call "sendMessage", - # rid: 'GENERAL' - # msg: 'wakes up' - # u: - # username: "rocketbot" - # action: true +Tracker.autorun -> + if RocketChat.settings.get 'RocketBot_Enabled' + RocketBot = new Robot null, null, false, RocketChat.settings.get 'RocketBot_Name' + RocketBot.alias = 'bot' + RocketBot.adapter = new RocketChatAdapter RocketBot + HubotScripts(RocketBot) + RocketBot.run() + + # RocketBot.hear /^test/i, (res) -> + # res.send "Test? TESTING? WE DON'T NEED NO TEST, EVERYTHING WORKS!" + + RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW + + # Meteor.startup -> + # console.log RocketBot; + # # what's (the regexp for) my name? + # robot.respond /(?:)/, -> false + # mynameRE = robot.listeners.pop().regex + # # register scripts + # HubotScripts(robot) + # Object.keys(share.hubot).forEach (scriptName) -> + # console.log "Loading hubot script: #{scriptName}" + # share.hubot[scriptName](robot) + # # register our nick + # n = Meteor.call 'newNick', {name: 'rocketbot'} + # Meteor.call 'setTag', {type:'nicks', object:n._id, name:'Gravatar', value:'rocket@printf.net', who:n.canon} + # # register our presence in general chat + # keepalive = -> Meteor.call 'setPresence', + # u: + # username: 'rocketbot' + # rid: 'GENERAL' + # present: true + # foreground: true + # keepalive() + # Meteor.setInterval keepalive, 30*1000 # every 30s refresh presence + # # listen to the chat room, ignoring messages sent before we startup + # startup = true + # ChatMessage.find({}).observe + # added: (message) -> + # return if startup + # return if message.u.username is "rocketbot" or message.u.username is "" + # return if message.system or message.action or message.oplog or message.bodyIsHtml + # console.log "Received from #{message.u.username} in #{message.rid}: #{message.body}"\ + # if DEBUG + # user = new Hubot.User(message.u.username, room: message.rid) + # tm = new Hubot.TextMessage(user, message.body, message._id) + # tm.private = message.to? + # # if private, ensure it's treated as a direct address + # if tm.private and not mynameRE.test(tm.text) + # tm.text = "#{robot.name} #{tm.text}" + # adapter.receive tm + # startup = false + # Meteor.call "sendMessage", + # rid: 'GENERAL' + # msg: 'wakes up' + # u: + # username: "rocketbot" + # action: true diff --git a/packages/rocketchat-hubot/i18n/en.i18n.json b/packages/rocketchat-hubot/i18n/en.i18n.json new file mode 100644 index 00000000000..4e031582c84 --- /dev/null +++ b/packages/rocketchat-hubot/i18n/en.i18n.json @@ -0,0 +1,5 @@ +{ + "RocketBot_Enabled": "RocketBot Enabled", + "RocketBot_Name": "RocketBot Name", + "RocketBot_Name_Description": "RocketBot name must be a valid username registered on your server." +} diff --git a/packages/rocketchat-hubot/i18n/pt.i18n.json b/packages/rocketchat-hubot/i18n/pt.i18n.json new file mode 100644 index 00000000000..32348991336 --- /dev/null +++ b/packages/rocketchat-hubot/i18n/pt.i18n.json @@ -0,0 +1,5 @@ +{ + "RocketBot_Enabled": "RocketBot Habilitado", + "RocketBot_Name": "Nome do RocketBot", + "RocketBot_Name_Description": "O nome deve ser um username registrado." +} diff --git a/packages/rocketchat-hubot/package-tap.i18n b/packages/rocketchat-hubot/package-tap.i18n new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/rocketchat-hubot/package.js b/packages/rocketchat-hubot/package.js index 08204907167..fa634e8c216 100644 --- a/packages/rocketchat-hubot/package.js +++ b/packages/rocketchat-hubot/package.js @@ -10,10 +10,30 @@ Package.onUse(function(api) { api.use([ 'coffeescript', + 'tracker', 'rocketchat:lib@0.0.1' ]); - api.addFiles('hubot.coffee', ['server']); + // TAPi18n + api.use('templating', 'client'); + var _ = Npm.require('underscore'); + var fs = Npm.require('fs'); + tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-hubot/i18n'), function(filename) { + if (fs.statSync('packages/rocketchat-hubot/i18n/' + filename).size > 16) { + return 'i18n/' + filename; + } + })); + api.use(["tap:i18n@1.5.1"], ["client", "server"]); + api.imply('tap:i18n'); + api.addFiles("package-tap.i18n", ["client", "server"]); + + api.addFiles([ + 'hubot.coffee', + 'settings.coffee', + ], ['server']); + + // TAPi18n -- needs to be added last + api.addFiles(tapi18nFiles, ["client", "server"]); api.export('Hubot', ['server']); api.export('HubotScripts', ['server']); diff --git a/packages/rocketchat-hubot/settings.coffee b/packages/rocketchat-hubot/settings.coffee new file mode 100644 index 00000000000..cfd35b23386 --- /dev/null +++ b/packages/rocketchat-hubot/settings.coffee @@ -0,0 +1,4 @@ +Meteor.startup -> + RocketChat.settings.addGroup 'RocketBot' + RocketChat.settings.add 'RocketBot_Enabled', true, { type: 'boolean', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Enabled' } + RocketChat.settings.add 'RocketBot_Name', 'Rocket.Cat', { type: 'string', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Name', i18nDescription: 'rocketchat-hubot:RocketBot_Name_Description' } From 17885c58cef8a9f96551a78ea4c0c2c1ca468b6f Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Fri, 25 Sep 2015 18:13:17 -0300 Subject: [PATCH 19/33] Automatically reload RocketBot on name change --- packages/rocketchat-hubot/hubot.coffee | 123 +++++++++++++------------ 1 file changed, 65 insertions(+), 58 deletions(-) diff --git a/packages/rocketchat-hubot/hubot.coffee b/packages/rocketchat-hubot/hubot.coffee index 642d8fe3b75..b4ef7a7a3e1 100644 --- a/packages/rocketchat-hubot/hubot.coffee +++ b/packages/rocketchat-hubot/hubot.coffee @@ -274,61 +274,68 @@ sendHelper = Meteor.bindEnvironment (robot, envelope, strings, map) -> console.error "Hubot error: #{err}" if DEBUG robot.logger.error "RocketChat send error: #{err}" -Tracker.autorun -> - if RocketChat.settings.get 'RocketBot_Enabled' - RocketBot = new Robot null, null, false, RocketChat.settings.get 'RocketBot_Name' - RocketBot.alias = 'bot' - RocketBot.adapter = new RocketChatAdapter RocketBot - HubotScripts(RocketBot) - RocketBot.run() - - # RocketBot.hear /^test/i, (res) -> - # res.send "Test? TESTING? WE DON'T NEED NO TEST, EVERYTHING WORKS!" - - RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW - - # Meteor.startup -> - # console.log RocketBot; - # # what's (the regexp for) my name? - # robot.respond /(?:)/, -> false - # mynameRE = robot.listeners.pop().regex - # # register scripts - # HubotScripts(robot) - # Object.keys(share.hubot).forEach (scriptName) -> - # console.log "Loading hubot script: #{scriptName}" - # share.hubot[scriptName](robot) - # # register our nick - # n = Meteor.call 'newNick', {name: 'rocketbot'} - # Meteor.call 'setTag', {type:'nicks', object:n._id, name:'Gravatar', value:'rocket@printf.net', who:n.canon} - # # register our presence in general chat - # keepalive = -> Meteor.call 'setPresence', - # u: - # username: 'rocketbot' - # rid: 'GENERAL' - # present: true - # foreground: true - # keepalive() - # Meteor.setInterval keepalive, 30*1000 # every 30s refresh presence - # # listen to the chat room, ignoring messages sent before we startup - # startup = true - # ChatMessage.find({}).observe - # added: (message) -> - # return if startup - # return if message.u.username is "rocketbot" or message.u.username is "" - # return if message.system or message.action or message.oplog or message.bodyIsHtml - # console.log "Received from #{message.u.username} in #{message.rid}: #{message.body}"\ - # if DEBUG - # user = new Hubot.User(message.u.username, room: message.rid) - # tm = new Hubot.TextMessage(user, message.body, message._id) - # tm.private = message.to? - # # if private, ensure it's treated as a direct address - # if tm.private and not mynameRE.test(tm.text) - # tm.text = "#{robot.name} #{tm.text}" - # adapter.receive tm - # startup = false - # Meteor.call "sendMessage", - # rid: 'GENERAL' - # msg: 'wakes up' - # u: - # username: "rocketbot" - # action: true +RocketBot = {} + +init = => + RocketBot = new Robot null, null, false, RocketChat.settings.get 'RocketBot_Name' + RocketBot.alias = 'bot' + RocketBot.adapter = new RocketChatAdapter RocketBot + HubotScripts(RocketBot) + RocketBot.run() + + # RocketBot.hear /^test/i, (res) -> + # res.send "Test? TESTING? WE DON'T NEED NO TEST, EVERYTHING WORKS!" + + RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW + + # Meteor.startup -> + # console.log RocketBot; + # # what's (the regexp for) my name? + # robot.respond /(?:)/, -> false + # mynameRE = robot.listeners.pop().regex + # # register scripts + # HubotScripts(robot) + # Object.keys(share.hubot).forEach (scriptName) -> + # console.log "Loading hubot script: #{scriptName}" + # share.hubot[scriptName](robot) + # # register our nick + # n = Meteor.call 'newNick', {name: 'rocketbot'} + # Meteor.call 'setTag', {type:'nicks', object:n._id, name:'Gravatar', value:'rocket@printf.net', who:n.canon} + # # register our presence in general chat + # keepalive = -> Meteor.call 'setPresence', + # u: + # username: 'rocketbot' + # rid: 'GENERAL' + # present: true + # foreground: true + # keepalive() + # Meteor.setInterval keepalive, 30*1000 # every 30s refresh presence + # # listen to the chat room, ignoring messages sent before we startup + # startup = true + # ChatMessage.find({}).observe + # added: (message) -> + # return if startup + # return if message.u.username is "rocketbot" or message.u.username is "" + # return if message.system or message.action or message.oplog or message.bodyIsHtml + # console.log "Received from #{message.u.username} in #{message.rid}: #{message.body}"\ + # if DEBUG + # user = new Hubot.User(message.u.username, room: message.rid) + # tm = new Hubot.TextMessage(user, message.body, message._id) + # tm.private = message.to? + # # if private, ensure it's treated as a direct address + # if tm.private and not mynameRE.test(tm.text) + # tm.text = "#{robot.name} #{tm.text}" + # adapter.receive tm + # startup = false + # Meteor.call "sendMessage", + # rid: 'GENERAL' + # msg: 'wakes up' + # u: + # username: "rocketbot" + # action: true + +RocketChat.models.Settings.find({ _id: 'RocketBot_Name' }).observe + added: (record) -> + init() + changed: (record) -> + init() From 1878bf91adbf7976e677358cb60bbb785f62600f Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Fri, 25 Sep 2015 18:35:42 -0300 Subject: [PATCH 20/33] Removed scripts from hubot --- packages/rocketchat-hubot/hubot.coffee | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/rocketchat-hubot/hubot.coffee b/packages/rocketchat-hubot/hubot.coffee index b4ef7a7a3e1..f3b81a1fd36 100644 --- a/packages/rocketchat-hubot/hubot.coffee +++ b/packages/rocketchat-hubot/hubot.coffee @@ -169,7 +169,6 @@ class HubotScripts 'applause.coffee' 'beerme.coffee' 'botsnack.coffee' - 'calm-down.coffee' 'carlton.coffee' 'chuck-norris.coffee' 'commandlinefu.coffee' @@ -202,7 +201,6 @@ class HubotScripts 'sealab.coffee' 'sheits.coffee' 'shipit.coffee' - 'talklikewarrenellis.coffee' 'url.coffee' 'wits.coffee' 'wordnik.coffee' From 1131e2471b22e4f01e7e136d2cb22af32c03231c Mon Sep 17 00:00:00 2001 From: Gabriel Engel Date: Fri, 25 Sep 2015 23:33:54 +0000 Subject: [PATCH 21/33] Created and pushed by LingoHub. Project: 'Rocket.Chat' by User: 'gabriel.engel@gmail.com'. --- i18n/de.i18n.json | 61 ++++++++++++++++++- i18n/en.i18n.json | 8 +-- i18n/fi.i18n.json | 25 +++++++- i18n/fr.i18n.json | 37 ++++++----- i18n/hr.i18n.json | 23 ++++++- i18n/km.i18n.json | 60 ++++++++++++++++++ i18n/ko.i18n.json | 44 +++++++++++++ i18n/pl.i18n.json | 30 ++++++++- i18n/pt.i18n.json | 37 ++++++++++- packages/rocketchat-gitlab/i18n/km.i18n.json | 4 +- packages/rocketchat-ldap/i18n/zh.i18n.json | 6 +- .../rocketchat-livechat/i18n/ar.i18n.json | 1 + .../rocketchat-livechat/i18n/de.i18n.json | 1 + .../rocketchat-livechat/i18n/el.i18n.json | 1 + .../rocketchat-livechat/i18n/en.i18n.json | 6 +- .../rocketchat-livechat/i18n/es.i18n.json | 1 + .../rocketchat-livechat/i18n/fi.i18n.json | 1 + .../rocketchat-livechat/i18n/fr.i18n.json | 1 + .../rocketchat-livechat/i18n/he.i18n.json | 1 + .../rocketchat-livechat/i18n/hr.i18n.json | 1 + .../rocketchat-livechat/i18n/hu.i18n.json | 1 + .../rocketchat-livechat/i18n/it.i18n.json | 1 + .../rocketchat-livechat/i18n/ja.i18n.json | 1 + .../rocketchat-livechat/i18n/km.i18n.json | 1 + .../rocketchat-livechat/i18n/ko.i18n.json | 1 + .../rocketchat-livechat/i18n/pl.i18n.json | 1 + .../rocketchat-livechat/i18n/pt.i18n.json | 6 +- .../rocketchat-livechat/i18n/ru.i18n.json | 1 + .../rocketchat-livechat/i18n/ta-IN.i18n.json | 1 + .../rocketchat-livechat/i18n/tr.i18n.json | 1 + .../rocketchat-livechat/i18n/ug.i18n.json | 1 + .../rocketchat-livechat/i18n/uk.i18n.json | 1 + .../rocketchat-livechat/i18n/zh.i18n.json | 1 + .../rocketchat-webrtc-ib/i18n/zh.i18n.json | 7 ++- .../rocketchat-wordpress/i18n/ar.i18n.json | 1 + .../rocketchat-wordpress/i18n/de.i18n.json | 1 + .../rocketchat-wordpress/i18n/el.i18n.json | 1 + .../rocketchat-wordpress/i18n/en.i18n.json | 6 +- .../rocketchat-wordpress/i18n/es.i18n.json | 1 + .../rocketchat-wordpress/i18n/fi.i18n.json | 1 + .../rocketchat-wordpress/i18n/fr.i18n.json | 1 + .../rocketchat-wordpress/i18n/he.i18n.json | 1 + .../rocketchat-wordpress/i18n/hr.i18n.json | 1 + .../rocketchat-wordpress/i18n/hu.i18n.json | 1 + .../rocketchat-wordpress/i18n/it.i18n.json | 1 + .../rocketchat-wordpress/i18n/ja.i18n.json | 1 + .../rocketchat-wordpress/i18n/km.i18n.json | 1 + .../rocketchat-wordpress/i18n/ko.i18n.json | 1 + .../rocketchat-wordpress/i18n/pl.i18n.json | 1 + .../rocketchat-wordpress/i18n/ru.i18n.json | 1 + .../rocketchat-wordpress/i18n/ta-IN.i18n.json | 1 + .../rocketchat-wordpress/i18n/tr.i18n.json | 1 + .../rocketchat-wordpress/i18n/ug.i18n.json | 1 + .../rocketchat-wordpress/i18n/uk.i18n.json | 1 + .../rocketchat-wordpress/i18n/zh.i18n.json | 1 + 55 files changed, 360 insertions(+), 40 deletions(-) create mode 100644 packages/rocketchat-livechat/i18n/ar.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/de.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/el.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/es.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/fi.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/fr.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/he.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/hr.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/hu.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/it.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/ja.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/km.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/ko.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/pl.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/ru.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/ta-IN.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/tr.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/ug.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/uk.i18n.json create mode 100644 packages/rocketchat-livechat/i18n/zh.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ar.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/de.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/el.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/es.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/fi.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/fr.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/he.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/hr.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/hu.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/it.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ja.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/km.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ko.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/pl.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ru.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ta-IN.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/tr.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/ug.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/uk.i18n.json create mode 100644 packages/rocketchat-wordpress/i18n/zh.i18n.json diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index bbce8bd19b0..9a81e5f1e82 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "Öffne die online demo", "Access_Online_Demo" : "Öffne die Online Demo", + "Accounts" : "Kontos", "Accounts_denyUnverifiedEmail" : "Nicht verifizierte E-Mails ablehnen", "Accounts_EmailVerification" : "E-Mail-Verifizierung", "Accounts_OAuth_Facebook" : "Facebook Login", @@ -27,13 +28,20 @@ "Accounts_OAuth_Custom_URL" : "URL", "Accounts_OAuth_Custom_Token_Path" : "Token Pfad", "Accounts_OAuth_Custom_Identity_Path" : "Identitäts Pfad", + "Accounts_OAuth_Custom_Authorize_Path" : "Autorisierungspfad", "Accounts_OAuth_Custom_Secret" : "Secret", "Accounts_OAuth_Custom_Enable" : "Aktivieren", + "Accounts_OAuth_Custom_Button_Label_Text" : "Button-Text", + "Accounts_OAuth_Custom_Button_Label_Color" : "Button-Text-Farbe", + "Accounts_OAuth_Custom_Button_Color" : "Buttonfarbe", + "Activate" : "Aktivieren", "Add_Members" : "Mitglieder hinzufügen", "Add_users" : "Benutzer hinzufügen", "Administration" : "Administration", "All_channels" : "Alle Kanäle", + "Allow_Invalid_SelfSigned_Certs" : "Selbstsignierte SSL-Zertifikate zulassen für die Link-Validierung und der Vorschauen", "and" : "und", + "API" : "API", "API_Analytics" : "Analytics", "API_Embed" : "Einbetten", "are_also_typing" : "schreiben auch", @@ -46,6 +54,7 @@ "Away_female" : "Abwesend", "away_male" : "abwesend", "Away_male" : "Abwesend", + "Auto_Load_Images" : "Automatisches Laden der Bilder", "Back_to_login" : "Zurück zum Login", "bold" : "fett", "busy" : "beschäftigt", @@ -64,19 +73,25 @@ "Confirm_password" : "Bestätigen Sie Ihr Passwort", "Contact" : "Kontakt", "Conversation" : "Konversation", + "Convert_Ascii_Emojis" : "Konvertiere ASCII zu Emoji", "Create_new" : "Neu erstellen", "Create_new_direct_message_room" : "Erstellen Sie einen neuen Direktnachrichten-Raum", "Create_new_private_group" : "Erstellen Sie eine neue private Gruppe", "Create_new_public_channel" : "Erstelle einen neuen öffentlichen Channel", "Created_at" : "Erstellt am", "days" : "Tage", + "Deactivate" : "Deaktivieren", "Delete_User_Warning" : "Beim Löschen eines Benutzers, werden alle seine Nachrichten ebenfalls gelöscht. Dies kann nicht rückgängig gemacht werden.", + "Delete" : "Löschen", "Deleted" : "Gelöscht!", "Direct_Messages" : "Private Nachrichten", + "Disable_New_Message_Notification" : "Deaktiviere Benachrichtigung bei neuen Nachrichten", + "Disable_New_Room_Notification" : "Deaktiviere Benachrichtigung bei neuen Raum Nachrichten", "Drop_to_upload_file" : "Ablegen um Datei zu uploaden", "Duplicate_channel_name" : "Ein Kanal mit dem Namen, '%s', existiert", "Duplicate_private_group_name" : "Eine private Gruppe mit dem Namen, '%s', existiert", "E-mail" : "E-Mail", + "Edit" : "Bearbeiten", "edited" : "bearbeitet", "Email_already_exists" : "E-Mail existiert bereits", "Email_or_username" : "Email oder Username", @@ -90,9 +105,12 @@ "Follow_social_profiles" : "Folge uns in sozialen Netzen, fork uns auf github und teile deine Gedanken über die rocket.chat app auf unserem trello board.", "Forgot_password" : "Passwort vergessen?", "Fork_it_on_github" : "Fork es auf GitHub", + "From_Email" : "E-Mail von", + "General" : "Allgemein", "Get_to_know_the_team" : "Lernen Sie das Rocket.Team kennen", "github_no_public_email" : "Sie haben keine öffentliche Email-Adresse in Ihrem Github Account", "Have_your_own_chat" : "Erstelle deinen eigenen web chat. Entwickelt mit Meteor.com, der Rocket.Chat ist eine tolle Lösung für Entwickler, die schnell und einfach einen eigene Chat Plattform aufbauen wollen.", + "Has_more" : "Mehr", "Hide_room" : "Raum verstecken", "History" : "Chronik", "hours" : "Stunden", @@ -104,6 +122,9 @@ "Invalid_room_name" : "%s ist kein zulässiger Raumname.
Benutze nur Buchstaben, Nummern und Bindestriche.", "invisible" : "unsichtbar", "Invisible" : "Unsichtbar", + "Invitation HTML" : "Einladungs HTML", + "Invitation_Subject" : "Einladungs Betreff", + "Invite_Users" : "Benutzer einladen", "is_also_typing" : "schreibt auch", "is_also_typing_female" : "schreibt auch", "is_also_typing_male" : "schreibt auch", @@ -117,13 +138,20 @@ "Language_Version" : "Deutsche Version", "Last_login" : "Letztes login", "Last_message" : "Letzte Nachricht", + "Layout" : "Layout", "Layout_Home_Body" : "Home Body", "Layout_Home_Title" : "Home Title", + "Layout_Login_Header" : "Login Header", + "Layout_Login_Terms" : "Nutzungsbedingungen zu Anmeldung", + "Layout_Privacy_Policy" : "Datenschutzbestimmungen", "Layout_Sidenav_Footer" : "Seiten Navigations Footer", "Layout_Sidenav_Footer_description" : "Die Footer Größe ist 260x70", + "Layout_Terms_of_Service" : "Nutzungsbedingungen", + "LDAP" : "LDAP", "Leave_room" : "Raum verlassen", "line" : "Zeilen", "Load_more" : "Mehr laden", + "Loading_more_from_history" : "Lade mehr aus der Historie", "Loading..." : "Wird geladen ...", "Loading_suggestion" : "Vorschläge werden geladen...", "Login" : "Login", @@ -131,6 +159,7 @@ "login_with" : "Oder melden Sie sich direkt mit folgenden Accounts an", "Logout" : "Abmelden", "Make_Admin" : "zum Admin machen", + "Mark_as_read" : "Als gelesen markieren", "Members" : "Mitglieder", "Members_List" : "Mitgliederliste", "Members_placeholder" : "Mitglieder", @@ -140,12 +169,14 @@ "Message_AllowPinning" : "Erlaube es Nachrichten anzuheften", "Message_deleting_not_allowed" : "Nachrichten löschen nicht erlaubt", "Message_editing_not_allowed" : "Nachrichten bearbeiten nicht erlaubt", + "Message_MaxAllowedSize" : "Maximale Größe der Nachricht", "Message_pinning_not_allowed" : "Nachrichten anheften erlaubt", "Message_KeepHistory" : "Nachrichtenverlauf behalten", "Message_removed" : "Nachricht entfernt", "Message_pinned" : "Nachricht angeheftet", "Message_ShowDeletedStatus" : "Zeige Löschstatus", "Message_ShowEditedStatus" : "Zeige Bearbeitungsstatus", + "Meta" : "Meta", "Meta_fb_app_id" : "Facebook APP ID", "Meta_google-site-verification" : "Google Seiten", "Meta_language" : "Sprache", @@ -153,6 +184,8 @@ "Meta_robots" : "Robots", "minutes" : "Minuten", "More_channels" : "Mehr Channels", + "More_groups" : "Weitere private Gruppen", + "More_unreads" : "Mehr ungelesene", "Msgs" : "Mttl", "multi" : "mehrere", "My_Account" : "Mein Konto", @@ -172,8 +205,11 @@ "Not_found_or_not_allowed" : "Nicht gefunden oder erlaubt", "Nothing_found" : "Nichts gefunden", "Notify_all_in_this_room" : "Alle in diesem Raum benachrichtigen", + "Only_you_can_see_this_message" : "Nur Sie können diese Nachricht sehen", "Online" : "Online", "Oops!" : "Oops", + "Opt_out_statistics" : "Meine anonymen Statitstiken nicht an Rocke.Chat senden", + "Opt_out_statistics_warning" : "Durch das Absenden Ihrer anonymen Statistiken, werden Sie uns helfen, festzustellen, wie viele Instanzen von Rocket.Chat eingesetzt werden, und wie gut das System verhält, so können wir es weiter verbessern. Wenn Sie weiterhin das Senden von anonymen Statistiken möchten, deaktivieren Sie das Kontrollkästchen oben. Danke.", "others" : "andere", "Password" : "Passwort", "Password_changed_successfully" : "Passwort erfolgreich geändert", @@ -181,11 +217,15 @@ "Please_wait_activation" : "Bitte warten. ", "Please_wait_statistics" : "Bitte warten, Statistiken werden generiert.", "Powered_by" : "Powered by", + "Preferences" : "Einstellungen", + "Preferences_saved" : "Einstellungen gespeichert", "Privacy" : "Datenschutz", "Private_Groups" : "Private Gruppen", + "Private_Groups_list" : "Liste der Private Gruppen", "Profile" : "Profil", "Profile_saved_successfully" : "Profil erfolgreich gespeichert", "Proudly_developed" : "Stolz mit Meteor entwickelt", + "Push" : "Push", "Push_apn_cert" : "APN Cert", "Push_apn_dev_cert" : "APN Dev Cert", "Push_apn_dev_key" : "APN Dev Key", @@ -209,9 +249,12 @@ "Room_name_changed_successfully" : "Raumname erfolgreich umbenannt", "Room_not_found" : "Raum nicht gefunden", "room_user_count" : "%s Benutzer", + "Rooms" : "Räume", "Save" : "Speichern", "Save_changes" : "Änderungen speichern", + "Save_Mobile_Bandwidth" : "Mobilfunkbandbreite verringern", "Search" : "Suche", + "Search_Messages" : "Nachrichten suchen", "Search_settings" : "Sucheinstellungen", "seconds" : "Sekunden", "See_all" : "Alle anzeigen", @@ -220,7 +263,13 @@ "Select_file" : "Datei wählen", "Select_service_to_login" : "Wählen Sie einen Service um sich einzuloggen, ein Bild auszuwählen oder eines direkt von Ihrem Computer hochzuladen", "Selected_users" : "Ausgewählte Mitglieder", + "Send" : "Absenden", "Send_confirmation_email" : "Bestätigungsmail versendet", + "Send_invitation_email" : "Einladungs E-Mail senden", + "Send_invitation_email_error" : "Sie haben kein gültige E-Mail-Adresse angegeben.", + "Send_invitation_email_info" : "Sie können mehrere E-Mail-Einladungen auf einmal absenden.", + "Send_invitation_email_success" : "Sie haben erfolgreich eine Einladung per E-Mail an folgende Adressen versendet:", + "Send_invitation_email_warning" : "Um Einladungs-E-Mails zu senden, müssen Sie zuerst die SMTP-Einstellungen konfigurieren.", "Send_Message" : "Nachricht senden", "Settings" : "Einstellungen", "Settings_updated" : "Einstellungen aktualisiert", @@ -229,16 +278,21 @@ "Silence" : "Ruhe", "since_creation" : "seit %s", "Site_Name" : "Seitenname:", + "SAML" : "SAML", + "SMTP" : "SMTP", "SMTP_Host" : "SMTP Host", "SMTP_Password" : "SMTP Passwort", "SMTP_Port" : "SMTP Port", "SMTP_Username" : "SMTP Benutzername", + "Sound" : "Sound", "Start_of_conversation" : "Beginn der Konversation", + "Statistics" : "Statistiken", "Stats_Active_Users" : "Aktive Benutzer", "Stats_Avg_Channel_Users" : "Durchschnittliche Kanal Benutzer", "Stats_Avg_Private_Group_Users" : "Durchschnittliche Benutzer in Privater Gruppe", "Stats_Max_Room_Users" : "Maximale Raum Benutzer", "Stats_Non_Active_Users" : "Ina", + "Stats_Away_Users" : "Beschäftige Benutzer", "Stats_Offline_Users" : "Benutzer offline", "Stats_Online_Users" : "Benutzer online", "Stats_OS_Arch" : "OS Arch", @@ -251,17 +305,19 @@ "Stats_OS_Type" : "OS Typ", "Stats_OS_Uptime" : "OS Uptime", "Stats_Total_Channels" : "Anzahl Kanäle", - "Stats_Total_Direct_Messages" : "Anzahl der Direktnachrichten", + "Stats_Total_Direct_Messages" : "Anzahl der Direktnachrichtenräume", "Stats_Total_Messages" : "Anzahl der Nachrichten", "Stats_Total_Private_Groups" : "Anzahl der Privaten Gruppen", "Stats_Total_Rooms" : "Anzahl der Räume", "Stats_Total_Users" : "Anzahl der Benutzer", "strike" : "durchgestrichen", "Submit" : "Abschicken", + "S_new_messages_since_s" : "%s neue Nachrichten seit %s", "The_field_is_required" : "Das Feld %s ist erforderlich.", "True" : "Wahr", "Unnamed" : "Unbenannt", "Upload_file_question" : "Datei hochladen?", + "Use_Emojis" : "Verwende Emojis", "Use_initials_avatar" : "Benutze deine Initialien", "use_menu" : "Benutze das Seitenmenü um deine Chats zu öffnen", "Use_service_avatar" : "Benutze %s avatar", @@ -269,9 +325,11 @@ "Use_uploaded_avatar" : "Benutze diesen Avatar", "User_added" : "Benutzer __user_added__ wurde hinzugefügt.", "User_added_by" : "Benutzer __user_added__ hinzugefügt von __user_by__.", + "User_Channels" : "Benutzer Kanäle", "User_has_been_activated" : "Benutzer wurde aktiviert", "User_has_been_deactivated" : "Benutzer wurde deaktiviert", "User_has_been_deleted" : "Benutzer wurde gelöscht", + "User_Info" : "Benutzer-Info", "User_is_no_longer_an_admin" : "Der Benutzer ist kein Admin mehr", "User_is_not_activated" : "Benutzer ist nicht aktiviert", "User_is_now_an_admin" : "Benutzer ist jetzt ein Admin", @@ -285,6 +343,7 @@ "User_removed_by" : "Benutzer __user_removed__ entfernt von __user_by__.", "User_Settings" : "Benutzereinstellungen", "User_updated_successfully" : "Benutzer erfolgreich aktualisiert", + "Users" : "Benutzer", "Username" : "Benutzername", "Username_cant_be_empty" : "Der Benutzername darf nicht leer sein", "Username_description" : "Der Benutzername wird dazu benutzt Sie in Nachtichten zu markieren.", diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 2fe66834223..f8f87ad1b52 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -1,7 +1,7 @@ { "Access_online_demo" : "Access the online demo", "Access_Online_Demo" : "Access the Online Demo", - "Accounts": "Accounts", + "Accounts" : "Accounts", "Accounts_denyUnverifiedEmail" : "Deny unverified e-mail", "Accounts_EmailVerification" : "E-mail Verification", "Accounts_OAuth_Facebook" : "Facebook Login", @@ -110,7 +110,7 @@ "Forgot_password" : "Forgot your password", "Fork_it_on_github" : "Fork it on github", "From_Email" : "From Email", - "General": "General", + "General" : "General", "Get_to_know_the_team" : "Get to know the Rocket.Team", "github_no_public_email" : "You don't have any email as public email in your GitHub account", "Give_a_unique_name_for_the_custom_oauth" : "Give a unique name for the custom oauth", @@ -352,7 +352,7 @@ "User_removed_by" : "User __user_removed__ removed by __user_by__.", "User_Settings" : "User Settings", "User_updated_successfully" : "User updated successfully", - "Users": "Users", + "Users" : "Users", "Username" : "Username", "Username_cant_be_empty" : "The username cannot be empty", "Username_description" : "The username is used to allow others to mention you in messages.", @@ -372,4 +372,4 @@ "You_will_not_be_able_to_recover" : "You will not be able to recover!", "Your_entry_has_been_deleted" : "Your entry has been deleted.", "Your_Open_Source_solution" : "Your own Open Source chat solution" -} +} \ No newline at end of file diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 57154289638..27cf59e059b 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "Access the online demo", "Access_Online_Demo" : "Access the Online Demo", + "Accounts" : "Tilit", "Accounts_denyUnverifiedEmail" : "Estä vahvistamaton sähköpostiosoite", "Accounts_EmailVerification" : "Sähköpostiosoitteen varmistaminen", "Accounts_OAuth_Facebook" : "Facebook-tunnus", @@ -33,12 +34,14 @@ "Accounts_OAuth_Custom_Button_Label_Text" : "Painikkeen teksti", "Accounts_OAuth_Custom_Button_Label_Color" : "Painikkeen tekstin väri", "Accounts_OAuth_Custom_Button_Color" : "Painikkeen väri", + "Activate" : "Aktivoi", "Add_Members" : "Lisää osallistujia", "Add_users" : "Lisää käyttäjiä", "Administration" : "Ylläpito", "All_channels" : "Kaikki kanavat", "Allow_Invalid_SelfSigned_Certs" : "Salli virheelliset ja itse allekirjoitetut SSL varmenteet linkin validointiin ja esikatseluihin", "and" : "ja", + "API" : "API", "API_Analytics" : "Analytics", "API_Embed" : "Upota", "are_also_typing" : "kirjoittavat myös", @@ -77,7 +80,9 @@ "Create_new_public_channel" : "Luo uusi julkinen kanava", "Created_at" : "Luotu", "days" : "päivää", + "Deactivate" : "Deaktivoi", "Delete_User_Warning" : "Käyttäjän poistaminen poistaa myös käyttäjän kaikki viestit. Toimintoa ei voi perua.", + "Delete" : "Poista", "Deleted" : "Poistettu!", "Direct_Messages" : "Yksityisviestit", "Disable_New_Message_Notification" : "Poista uuden viestin ilmoitus käytöstä", @@ -86,6 +91,7 @@ "Duplicate_channel_name" : "Kanava nimeltä '%s' on olemassa jo", "Duplicate_private_group_name" : "Privaattiryhmä '%s' on olemassa jo", "E-mail" : "Sähköpostiosoite", + "Edit" : "Muokkaa", "edited" : "muokattu", "Email_already_exists" : "Sähköpostiosoite on jo olemassa", "Email_or_username" : "Sähköpostiosoite tai käyttäjänimi", @@ -100,6 +106,7 @@ "Forgot_password" : "Unohditko salasanasi?", "Fork_it_on_github" : "Forkkaa GitHubissa", "From_Email" : "Sähköpostilta", + "General" : "Yleinen", "Get_to_know_the_team" : "Tutustu Rocket.Teamiin", "github_no_public_email" : "GitHub-tunnukseltasi ei löydy julkisia sähköpostiosoitetietoja", "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", @@ -115,6 +122,9 @@ "Invalid_room_name" : "%s ei ole hyväksyttävä kanavan nimi,
käytä vain kirjaimia, numeroita ja viivaa", "invisible" : "näkymätön", "Invisible" : "Näkymätön", + "Invitation HTML" : "Kutsu HTML", + "Invitation_Subject" : "Kutsu aihe", + "Invite_Users" : "Kutsu käyttäjiä", "is_also_typing" : "kirjoittaa myös", "is_also_typing_female" : "kirjoittaa myös", "is_also_typing_male" : "kirjoittaa myös", @@ -128,6 +138,7 @@ "Language_Version" : "Suomi", "Last_login" : "Viimeisin kirjautuminen", "Last_message" : "Viimeinen viesti", + "Layout" : "Layout", "Layout_Home_Body" : "Etusivun runko", "Layout_Home_Title" : "Etusivun otsikko", "Layout_Login_Header" : "Kirjautumisruudun ylätunniste", @@ -136,6 +147,7 @@ "Layout_Sidenav_Footer" : "Sivunavigoinnin alatunniste", "Layout_Sidenav_Footer_description" : "Alatunnisteen koko on 260x70", "Layout_Terms_of_Service" : "Käyttöehdot", + "LDAP" : "LDAP", "Leave_room" : "Poistu kanavalta", "line" : "viiva", "Load_more" : "Lataa lisää", @@ -157,12 +169,14 @@ "Message_AllowPinning" : "Salli viestien kiinnittäminen", "Message_deleting_not_allowed" : "Viestin poisto ei sallittu", "Message_editing_not_allowed" : "Viestin muokkaus ei sallittu", + "Message_MaxAllowedSize" : "Viestin suurin sallittu koko", "Message_pinning_not_allowed" : "Viestien kiinnittäminen ei sallittu", "Message_KeepHistory" : "Säilytä viestihistoria", "Message_removed" : "Viesti poistettu\n", "Message_pinned" : "Viesti kiinnitetty", "Message_ShowDeletedStatus" : "Näytä poistotila", "Message_ShowEditedStatus" : "Näytä muokkaustila", + "Meta" : "Meta", "Meta_fb_app_id" : "Facebook APP ID", "Meta_google-site-verification" : "Google sivuston vahvistaminen", "Meta_language" : "Kieli", @@ -191,6 +205,7 @@ "Not_found_or_not_allowed" : "Ei löydy tai ei sallittu", "Nothing_found" : "Ei löytynyt", "Notify_all_in_this_room" : "Ilmoita kaikille kanavallaolijoille", + "Only_you_can_see_this_message" : "Vain sinä voit nähdä tämän viestin", "Online" : "Online", "Oops!" : "Oho", "Opt_out_statistics" : "Älä lähetä anonyymejä tilastoja Rocket.Chatille", @@ -210,6 +225,7 @@ "Profile" : "Profiili", "Profile_saved_successfully" : "Profiili tallennettu onnistuneesti", "Proudly_developed" : "Proudly developed with Meteor", + "Push" : "Työnnä", "Push_apn_cert" : "APN Cert", "Push_apn_dev_cert" : "APN Cert (kehitys)", "Push_apn_dev_key" : "APN Avain (kehitys)", @@ -233,6 +249,7 @@ "Room_name_changed_successfully" : "Huoneen nimi vaihdettu", "Room_not_found" : "Huonetta ei löytynyt", "room_user_count" : "%s käyttäjää", + "Rooms" : "Huoneet", "Save" : "Tallenna", "Save_changes" : "Tallenna", "Save_Mobile_Bandwidth" : "Säästä kaistaa mobiilissa", @@ -246,7 +263,9 @@ "Select_file" : "Valitse tiedosto", "Select_service_to_login" : "Valitse kirjautumiseen käytettävä palvelu tai lataa kuvasi suoraan koneeltasi", "Selected_users" : "Valitut käyttäjät", + "Send" : "Lähetä", "Send_confirmation_email" : "Lähetä vahvistussähköposti", + "Send_invitation_email" : "Lähetä kutsu sähköposti", "Send_Message" : "Lähetä viesti", "Settings" : "Asetukset", "Settings_updated" : "Asetukset päivitetty", @@ -255,12 +274,15 @@ "Silence" : "Hiljaisuus", "since_creation" : "%s saakka", "Site_Name" : "Sivuston nimi:", + "SAML" : "SAML", + "SMTP" : "SMTP", "SMTP_Host" : "SMTP-palvelin", "SMTP_Password" : "SMTP Salasana", "SMTP_Port" : "SMTP-portti", "SMTP_Username" : "SMTP Käyttäjätunnus", "Sound" : "Ääni", "Start_of_conversation" : "Keskustelun alku", + "Statistics" : "Tilastot", "Stats_Active_Users" : "Aktiivisia käyttäjiä", "Stats_Avg_Channel_Users" : "Keskimääräinen kanavan käyttäjämäärä", "Stats_Avg_Private_Group_Users" : "Keskimääräinen käyttäjämäärä", @@ -293,7 +315,7 @@ "Upload_file_question" : "Lähetä tiedosto?", "Use_Emojis" : "Käytä Emojia", "Use_initials_avatar" : "Käytä käyttäjätunnuksen nimikirjaimia", - "use_menu" : "Käytä sivuvalikkoa Use the side menu to access your rooms and chats", + "use_menu" : "Käytä sivuvalikkoa käyttääksesi huoneitasi ja chattejasi", "Use_service_avatar" : "Käytä %s avataria", "Use_this_username" : "Käytä tätä käyttäjänimieä", "Use_uploaded_avatar" : "Käytä ladattua avataria", @@ -317,6 +339,7 @@ "User_removed_by" : "Käyttäjä __user_removed__ poistettu __user_by__ toimesta.", "User_Settings" : "Käyttäjä", "User_updated_successfully" : "Käyttäjän tiedot päivitetty", + "Users" : "Käyttäjät", "Username" : "Käyttäjänimi", "Username_cant_be_empty" : "Käyttäjänimi ei voi olla tyhjä", "Username_description" : "Käyttäjänimeä käytetään sinun mainitsemiseen muiden viesteissä.", diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index cb4d3786c41..c52638b205d 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -1,7 +1,7 @@ { "Access_online_demo" : "Accédez à la démo en ligne", "Access_Online_Demo" : "Accédez à la démo en ligne", - "Accounts": "Comptes", + "Accounts" : "Comptes", "Accounts_denyUnverifiedEmail" : "Refuser les emails non vérifiées", "Accounts_EmailVerification" : "Vérification de l'e-mail", "Accounts_OAuth_Facebook" : "Connexion avec Facebook", @@ -26,15 +26,16 @@ "Accounts_OAuth_Twitter_secret" : "Twitter Secret", "Accounts_OAuth_Custom_ID" : "ID", "Accounts_OAuth_Custom_URL" : "URL", - "Accounts_OAuth_Custom_Token_Path" : "Token Path", + "Accounts_OAuth_Custom_Token_Path" : "URL de Token", "Accounts_OAuth_Custom_Identity_Path" : "URL d'identification", - "Accounts_OAuth_Custom_Authorize_Path" : "URL d'authorisation", + "Accounts_OAuth_Custom_Authorize_Path" : "URL d'autorisation", "Accounts_OAuth_Custom_Secret" : "Secret", "Accounts_OAuth_Custom_Enable" : "Activer", "Accounts_OAuth_Custom_Button_Label_Text" : "Texte du bouton", "Accounts_OAuth_Custom_Button_Label_Color" : "Couleur de texte du bouton", "Accounts_OAuth_Custom_Button_Color" : "Couleur du bouton", "Activate" : "Activer", + "Add_custom_oauth" : "Ajouter OAuth personnalisé", "Add_Members" : "Ajouter des membres", "Add_users" : "Ajouter des utilisateurs", "Administration" : "Administration", @@ -73,12 +74,13 @@ "Confirm_password" : "Confirmez votre mot de passe", "Contact" : "Contact", "Conversation" : "Conversation", - "Convert_Ascii_Emojis" : "Convert ASCII to Emoji", + "Convert_Ascii_Emojis" : "Convertir code ASCII vers émoticônes", "Create_new" : "Créer nouveau", "Create_new_direct_message_room" : "Créer un nouveau canal de discussion privé", "Create_new_private_group" : "Créer un nouveau groupe privé", "Create_new_public_channel" : "Créer un nouveau canal publique.", "Created_at" : "Créé le", + "Custom_oauth_unique_name" : "Nom unique OAuth personnalisé", "days" : "jours", "Deactivate" : "Désactiver", "Delete_User_Warning" : "Supprimer un utilisateur va également supprimer tous les messages de celui-ci. Cette action ne peut être annulée.", @@ -98,17 +100,18 @@ "Email_verified" : "Email vérifié", "Enter_info" : "Entrez vos identifiants de connexion", "Enter_to" : "Entrée pour", - "Error_changing_password" : "Mot de passe modifié", - "Esc_to" : "Esc pour", + "Error_changing_password" : "Erreur lors du changement de mot de \npasse", + "Esc_to" : "Échap pour", "False" : "Non", "Favorites" : "Favoris", "Follow_social_profiles" : "Suivez-nous sur les réseaux sociaux, clonez le projet sur GitHub et partagez vos idées à propos de rocket.chat sur notre tableau Trello.", "Forgot_password" : "Mot de passe oublié", "Fork_it_on_github" : "Cloner sur GitHub", "From_Email" : "De", - "General": "Général", + "General" : "Général", "Get_to_know_the_team" : "Venez nous rencontrer", "github_no_public_email" : "Vous n'avez pas d'adresse email public associé à votre compte GitHub", + "Give_a_unique_name_for_the_custom_oauth" : "Indiquez un nom unique pour l'OAuth personnalisé", "Have_your_own_chat" : "Disposez de votre propre salon de discussion en ligne. Développé à l'aide de Meteor.com, Rocket.Chat est une solution pour les développeurs désirant mettre en place et faire évoluer leur propre plate-forme de discussion.", "Has_more" : "a plus de", "Hide_room" : "Cacher le salon", @@ -138,7 +141,7 @@ "Language_Version" : "Version anglaise", "Last_login" : "Dernière connexion", "Last_message" : "Dernier message", - "Layout" : "Contenu", + "Layout" : "Disposition", "Layout_Home_Body" : "Contenu de la page d'accueil", "Layout_Home_Title" : "Titre de la page d'accueil", "Layout_Login_Header" : "Entête de connexion", @@ -151,10 +154,10 @@ "Leave_room" : "Quitter le salon", "line" : "ligne", "Load_more" : "Charger plus", + "Loading_more_from_history" : "Charger plus d'historique", "Loading..." : "Chargement...", - "Loading_more_from_history" : "Chargement plus d'historique", "Loading_suggestion" : "Chargement des suggestions ...", - "Login" : "Nom d'utilisateur", + "Login" : "Se connecter", "Login_with" : "Connectez-vous avec %s", "login_with" : "Ou connectez-vous avec", "Logout" : "Se déconnecter", @@ -166,11 +169,13 @@ "Message" : "Message", "Message_AllowDeleting" : "Autoriser la suppression de messages", "Message_AllowEditing" : "Autoriser la modification de messages", + "Message_AllowEditing_BlockEditInMinutes" : "Bloquer la modification de messages après (en minutes, 0 pour désactiver)", "Message_AllowPinning" : "Autoriser l'épinglement de messages", "Message_deleting_not_allowed" : "Suppression d'un message non autorisée", "Message_editing_not_allowed" : "Modification d'un message non autorisée", + "Message_editing_blocked" : "Ce message ne peut plus être modifié", "Message_MaxAllowedSize" : "Taille maximum de message autorisée", - "Message_pinning_not_allowed" : "L'épinglement de messesage n'est pas autorisé", + "Message_pinning_not_allowed" : "L'épinglement de message n'est pas autorisé", "Message_KeepHistory" : "Conserver l'historique des messages", "Message_removed" : "Message supprimé", "Message_pinned" : "Message épinglé", @@ -191,10 +196,11 @@ "My_Account" : "Mon compte", "n_messages" : "%s messages", "Name" : "Nom", + "Name_cant_be_empty" : "Le nom ne peut pas être vide", "New_messages" : "Nouveaux messages", "New_password" : "Nouveau mot de passe", "No_channels_yet" : "Vous ne faites partie d’aucun canal pour le moment.", - "No_direct_messages_yet" : "Vous n'avez pris part a aucune conversation pour le moment.", + "No_direct_messages_yet" : "Vous n'avez pris part à aucune conversation pour le moment.", "No_favorites_yet" : "Vous n'avez ajouté aucun favoris pour le moment.", "No_groups_yet" : "Vous n'avez pas encore de groupes privés.", "No_permission_to_view_room" : "Vous n'avez pas la permission de voir ce salon", @@ -242,6 +248,7 @@ "Registration_Succeeded" : "Enregistrement réussi", "Remember_me" : "Se souvenir de moi", "Remove" : "Supprimer", + "Remove_custom_oauth" : "Supprimer OAuth personnalisé ", "Remove_Admin" : "Supprimer administrateur", "Reset_password" : "Réinitialiser le mot de passe", "Room" : "Salon", @@ -269,7 +276,7 @@ "Send_invitation_email_error" : "Vous n'avez pas fourni une adresse email valide.", "Send_invitation_email_info" : "Vous pouvez envoyer plusieurs emails d'invitation à la fois.", "Send_invitation_email_success" : "Vous avez envoyé un email d'invitation aux adresses suivantes :", - "Send_invitation_email_warning" : "Afin d'envoyer des emails d'invitation, vous devez premièrement configurer le SMTP.", + "Send_invitation_email_warning" : "Afin d'envoyer des emails d'invitation, vous devez déjà configurer le SMTP.", "Send_Message" : "Envoyer un message", "Settings" : "Paramètres", "Settings_updated" : "Paramètres mis à jour", @@ -292,7 +299,7 @@ "Stats_Avg_Private_Group_Users" : "Nombre moyen d'utilisateurs dans les groupes privés", "Stats_Max_Room_Users" : "Nombre d'utilisateur maximum par salon", "Stats_Non_Active_Users" : "Utilisateurs inactifs", - "Stats_Away_Users" : "Away Users", + "Stats_Away_Users" : "Utilisateurs indisponibles", "Stats_Offline_Users" : "Utilisateurs hors ligne", "Stats_Online_Users" : "Utilisateurs en ligne", "Stats_OS_Arch" : "Architecture", @@ -343,7 +350,7 @@ "User_removed_by" : "L'utilisateur __user_removed__ a été éjecté par __user_by__.", "User_Settings" : "Paramètres utilisateur", "User_updated_successfully" : "Utilisateur mis à jour avec succès", - "Users": "Utilisateurs", + "Users" : "Utilisateurs", "Username" : "Nom d'utilisateur", "Username_cant_be_empty" : "Le nom d'utilisateur doit être renseigné", "Username_description" : "Le nom d'utilisateur est utilisé pour permettre à d'autres personnes de vous mentionner dans leurs messages.", diff --git a/i18n/hr.i18n.json b/i18n/hr.i18n.json index 95f5922c788..068e0df7a4c 100644 --- a/i18n/hr.i18n.json +++ b/i18n/hr.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "Pristupi online demonstraciji", "Access_Online_Demo" : "Pristupi Online demonstraciji", + "Accounts" : "Računi", "Accounts_denyUnverifiedEmail" : "Odbij neprovjereni e-mail", "Accounts_EmailVerification" : "E-mail Verifikacija", "Accounts_OAuth_Facebook" : "Facebook prijava", @@ -15,6 +16,7 @@ "Accounts_OAuth_Custom_Enable" : "Omogući", "Accounts_OAuth_Custom_Button_Label_Text" : "Tekst Gumba", "Accounts_OAuth_Custom_Button_Color" : "Boja Gumba", + "Activate" : "Aktiviraj", "Add_Members" : "Dodaj Članove", "Add_users" : "Dodaj korisnike", "Administration" : "Administracija", @@ -57,7 +59,9 @@ "Create_new_public_channel" : "Stvori novi javni kanal", "Created_at" : "Stvoreno u", "days" : "dana", + "Deactivate" : "Isključi", "Delete_User_Warning" : "Brisanje korisnika će izbrisati i sve poruke od tog korisnika. Ovo se ne može poništiti.", + "Delete" : "Obriši", "Deleted" : "Obrisano!", "Direct_Messages" : "Izravne Poruke", "Disable_New_Message_Notification" : "Onemogući obavijesti o novim porukama", @@ -66,6 +70,7 @@ "Duplicate_channel_name" : "Kanal s nazivom '% s' postoji", "Duplicate_private_group_name" : "Privatna Grupa s nazivom '% s' postoji", "E-mail" : "E-mail", + "Edit" : "Uredi", "edited" : "uređeno", "Email_already_exists" : "Email već postoji", "Email_or_username" : "Email or username", @@ -83,6 +88,7 @@ "Get_to_know_the_team" : "Upoznajte Rocket.Team", "github_no_public_email" : "Nemaš ni1 javni email u svom GitHub računu", "Have_your_own_chat" : "Imaj svoj vlastiti web chat. Razvijen sa Meteor.com, Rocket.Chat je sjajno rješenje za developere koji žele sagraditi i dalje razvijati svoju vlastitu chat platformu.", + "Has_more" : "Ima više", "Hide_room" : "Sakrij sobu", "History" : "Povijest", "hours" : "sati", @@ -113,6 +119,7 @@ "Leave_room" : "Izađi iz sobe", "line" : "linija", "Load_more" : "Učitaj više", + "Loading_more_from_history" : "Učitavanje više iz povijesti", "Loading..." : "Učitavanje ...", "Loading_suggestion" : "Učitavam sugestije...", "Login" : "Prijava", @@ -120,6 +127,7 @@ "login_with" : "Ili se prijavi izravno sa", "Logout" : "Odjava", "Make_Admin" : "Učini Administratorom", + "Mark_as_read" : "Označi kao pročitano", "Members" : "Članovi", "Members_List" : "Lista Članova", "Members_placeholder" : "Članovi", @@ -129,17 +137,21 @@ "Message_AllowPinning" : "Dopusti pribadanje poruka ", "Message_deleting_not_allowed" : "Brisanje poruka nije dopušteno", "Message_editing_not_allowed" : "Uređivanje poruka nije dopušteno", + "Message_MaxAllowedSize" : "Maksimalna dopuštena veličina poruke", "Message_pinning_not_allowed" : "Pribadanje poruka nije dopušteno", "Message_KeepHistory" : "Zadrži Povijest Poruka", "Message_removed" : "Poruka je maknuta", "Message_pinned" : "Poruka je pribodena", "Message_ShowDeletedStatus" : "Pokaži Izbrisan status", "Message_ShowEditedStatus" : "Prikaži uređeni status", + "Meta" : "Meta", "Meta_fb_app_id" : "Facebook App-ID", "Meta_language" : "Jezik", "Meta_robots" : "Roboti", "minutes" : "minuta", "More_channels" : "Više kanala", + "More_groups" : "Više privatnih grupa", + "More_unreads" : "Više nepročitanih", "Msgs" : "Poruke", "multi" : "više", "My_Account" : "Moj Račun", @@ -159,6 +171,7 @@ "Not_found_or_not_allowed" : "Nije Nađeno ili Nije Dozvoljeno", "Nothing_found" : "Ništa nije nađeno", "Notify_all_in_this_room" : "Obavijesti sve u ovoj sobi", + "Only_you_can_see_this_message" : "Samo ti možeš vidjeti ovu poruku", "Online" : "Online", "Oops!" : "Ups", "Opt_out_statistics" : "Ne šalji moje anonimne statistike Rocket.Chatu", @@ -173,6 +186,7 @@ "Preferences_saved" : "Postavke sačuvane", "Privacy" : "Privatnost", "Private_Groups" : "Privatne Grupe", + "Private_Groups_list" : "Lista privatnih grupa", "Profile" : "Profil", "Profile_saved_successfully" : "Profil je uspješno sačuvan", "Proudly_developed" : "Proudly developed by Meteor", @@ -193,9 +207,11 @@ "Room_name_changed_successfully" : "Ime sobe je uspješno izmijenjeno", "Room_not_found" : "Soba nije nađena", "room_user_count" : "% korisnika", + "Rooms" : "Sobe", "Save" : "Sačuvaj", "Save_changes" : "Spremi promjene", "Search" : "Traži", + "Search_Messages" : "Pretraži poruke", "Search_settings" : "Postavke pretraživanja", "seconds" : "se", "See_all" : "Vidi sve", @@ -218,6 +234,7 @@ "SMTP_Username" : "SMTP korisničko ime", "Sound" : "Zvuk", "Start_of_conversation" : "Početak razgovora", + "Statistics" : "Statistike", "Stats_Active_Users" : "Aktivni korisnici", "Stats_Avg_Channel_Users" : "Prosječan broj korisnika kanala", "Stats_Max_Room_Users" : "Maksimalno Korisnika Sobe", @@ -237,6 +254,7 @@ "Stats_Total_Users" : "Ukupno korisnika", "strike" : "precrtaj", "Submit" : "Pošalji", + "S_new_messages_since_s" : "novih poruka od", "The_field_is_required" : "Polje% s je traženo.", "True" : "Da", "Unnamed" : "Neimenovan", @@ -249,9 +267,11 @@ "Use_uploaded_avatar" : "Koristi uploadani avatar", "User_added" : "Korisnik __user_added__ je dodan.", "User_added_by" : "Korisnik __user_added__ dodan od __user_by__.", + "User_Channels" : "Korisnički kanali", "User_has_been_activated" : "Korisnik je aktiviran", "User_has_been_deactivated" : "Korisnik je deaktiviran", "User_has_been_deleted" : "Korisnik je obrisan", + "User_Info" : "Podaci o korisniku", "User_is_no_longer_an_admin" : "Korisnik nije više admin", "User_is_not_activated" : "Korisnik nije aktiviran", "User_is_now_an_admin" : "Korisnik je sada admin", @@ -265,6 +285,7 @@ "User_removed_by" : "Korisnik __user_removed__ maknut od __user_by__.", "User_Settings" : "Korisničke postavke", "User_updated_successfully" : "Korisnik je uspješno ažuriran", + "Users" : "Korisnici", "Username" : "Korisničko ime", "Username_cant_be_empty" : "Korisničko ime ne može ostati prazno.", "Username_description" : "Korisničko ime se koristi kako bi te drugi mogli spomenuti u porukama.", @@ -282,6 +303,6 @@ "you_are_in_preview_mode_of" : "Ti si u preglednom načinu kanala # __room_name__", "You_need_confirm_email" : "Trebaš potvrditi svoj email kako bi se prijavio!", "You_will_not_be_able_to_recover" : "Ovo nećeš moći promijeniti!", - "Your_entry_has_been_deleted" : "Vaš unos je obrisan.", + "Your_entry_has_been_deleted" : "Tvoj unos je obrisan.", "Your_Open_Source_solution" : "Vaše vlastito Open Source chat rješenje" } \ No newline at end of file diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json index e58bb882281..b50a1cd7682 100644 --- a/i18n/km.i18n.json +++ b/i18n/km.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "ចូល​ទៅ​សាក​ល្បងវា​លើ​អ៊ីនធើណិត​ជា​មុន​សិន", "Access_Online_Demo" : "ចូល​ទៅ​សាក​ល្បងវា​លើ​អ៊ីនធើណិត​ជា​មុន​សិន", + "Accounts" : "គណនី", "Accounts_denyUnverifiedEmail" : "រាំងខ្ទប់អ្នកមិនបានផ្ទៀតផ្ទាត់អ៊ីមែល", "Accounts_EmailVerification" : "ការ​ផ្ទៀងផ្ទាត់​តាម​​អ៊ី​ម៉ែ​ល", "Accounts_OAuth_Facebook" : "ចូល​តាម​ហ្វេសប៊ូក", @@ -23,6 +24,14 @@ "Accounts_OAuth_Twitter" : "ចូលតាម Twitter", "Accounts_OAuth_Twitter_id" : "លេខសម្គាល់ Twitter", "Accounts_OAuth_Twitter_secret" : "Twitter សម្ងាត់", + "Accounts_OAuth_Custom_ID" : "លេខសម្គាល់", + "Accounts_OAuth_Custom_URL" : "URL", + "Accounts_OAuth_Custom_Secret" : "ការ​សម្ងាត់", + "Accounts_OAuth_Custom_Enable" : "អនុញ្ញាត", + "Accounts_OAuth_Custom_Button_Label_Text" : "អត្ថបទ​ប៊ូតុង", + "Accounts_OAuth_Custom_Button_Label_Color" : "ពណ៌អត្ថបទប៊ូតុង", + "Accounts_OAuth_Custom_Button_Color" : "ពណ៌ប៊ូតុង", + "Activate" : "ធ្វើ​ឱ្យ​សកម្ម", "Add_Members" : "ថែម​សមាជិក", "Add_users" : "ថែម​អ្នក​ប្រើប្រាស់", "Administration" : "រដ្ឋបាល", @@ -40,6 +49,7 @@ "Away_female" : "ឆ្ងាយ", "away_male" : "ឆ្ងាយ", "Away_male" : "ឆ្ងាយ", + "Auto_Load_Images" : "ផ្ទុក​រូបភាព​ដោយ​ស្វ័យប្រវត្តិ", "Back_to_login" : "ត្រឡប់​មក​ឡុក​ចូល", "bold" : "ក្រាស់", "busy" : "រវល់", @@ -58,19 +68,25 @@ "Confirm_password" : "បញ្ជាក់​ពាក្យ​សម្ងាត់", "Contact" : "ទំនាក់ទំនង", "Conversation" : "កិច្ច​ពិភាក្សា", + "Convert_Ascii_Emojis" : "បម្លែង ASCII នេះ​ទៅ Emoji", "Create_new" : "បង្កើត​ថ្មី", "Create_new_direct_message_room" : "បង្កើត​បន្ទប់​ពិភាក្សា​ដោយ​ផ្ទាល់​", "Create_new_private_group" : "បង្កើត​ក្រុម​ឯកជន", "Create_new_public_channel" : "បង្កើត​ប៉ុស្តិ៍​សាធារណៈ​ថ្មី", "Created_at" : "បាន​បង្កើត​កាល​ពី", "days" : "ថ្ងៃ", + "Deactivate" : "ធ្វើឲ្យមិនសកម្ម", "Delete_User_Warning" : "ការ​លប់​អ្នក​ប្រើប្រាស់ នឹង​ត្រូវ​លប់​​គ្រប់​សារ​​របស់​​គាត់​ផង​ដែរ។ ដូច​នេះ​មិន​អាច​ធ្វើ​បាន​ទេ ។", + "Delete" : "លុប", "Deleted" : "បាន​លប់!", "Direct_Messages" : "សារ​ផ្ទាល់", + "Disable_New_Message_Notification" : "បិទ​ការ​ជូន​ដំណឹង​សារ​ថ្មី", + "Disable_New_Room_Notification" : "បិទ​ការ​ជូន​ដំណឹង​បន្ទប់​ថ្មី", "Drop_to_upload_file" : "ទម្លាក់​ឯកសារ​ដើម្បី​ផ្ទុក​ឡើង", "Duplicate_channel_name" : "ប៉ុស្តិ៍​ដែល​មាន​ឈ្មោះ​, '%s', មាន​ហើយ", "Duplicate_private_group_name" : "ក្រុម​ឯក​ជន​ដែល​មាន​ឈ្មោះ​, '%s', មាន​ហើយ", "E-mail" : "អ៊ីមែល", + "Edit" : "កែ​សម្រួល", "edited" : "បាន​កែ", "Email_already_exists" : "អ៊ី​ម៉ែ​ល​ដែល​មាន​រួច​ហើយ", "Email_or_username" : "អ៊ីមែល ឬឈ្មោះ​សម្ងាត់", @@ -78,11 +94,14 @@ "Enter_info" : "បញ្ចូល​ព័ត៌មាន​របស់​អ្នក", "Enter_to" : "បញ្ចូល", "Error_changing_password" : "ពាក្យ​សម្ងាត់​បាន​ប្តូរ", + "Esc_to" : "Esc ដើម្បី", "False" : "មិន​ពិត", "Favorites" : "ពេញ​ចិត្ត", "Follow_social_profiles" : "តាម​ដាន​​​បណ្តា​គណនីបណ្តាញ​សង្គម​របស់​យើង​, មើល​យើង​លើ​ github និង​ចែក​រំលែក​បទពិសោធន៍​របស់​អ្នក​ជាមួយ​ rocket.chat app នៅ​លើ​ក្តារឃៀន​របស់​យើង", "Forgot_password" : "ភ្លេច​ពាក្យ​សម្ងាត់", "Fork_it_on_github" : "ទៅ​មើល​វា​លើ github", + "From_Email" : "ពី​អ៊ី​ម៉ែ​ល", + "General" : "ទូទៅ", "Get_to_know_the_team" : "ទៅ​ស្គាល់ Rocket.Team", "github_no_public_email" : "អ្នក​មិន​មាន​អ៊ីមែល​សាធារណៈ​ក្នុង​ GitHub នៅ​ឡើយ​ទេ", "Have_your_own_chat" : "អ្នក​មាន Web Chat ផ្ទាល់​ខ្លួនហើ​យឬ។ អភិវឌ្ឃន៍​ជាមួយ​ Meteor.com, Rocket.Chat គឺ​ជា​ដំណោះ​ស្រាយ​ដ៏​ល្អ​បំផុត​សម្រាប់អ្នក​អភិវឌ្ឍន៍ ក្នុង​ការ​បង្កើត Web Chat Plateform។", @@ -110,11 +129,18 @@ "Language_Version" : "ជំនាន់​អង់គ្លេស", "Last_login" : "ចូល​លើក​មុន", "Last_message" : "សារ​ចុង​ក្រោយ", + "Layout" : "ប្លង់", "Layout_Home_Body" : "តួរសេចក្តីទំព័រដើម", "Layout_Home_Title" : "ចំណងជើងទំព័រដើម", + "Layout_Login_Header" : "ក្បាលទំព័រចូល", + "Layout_Login_Terms" : "លក្ខ័ណចូល", + "Layout_Privacy_Policy" : "គោលការណ៍ឯកជនភាព", + "Layout_Sidenav_Footer_description" : "​ទំហំ​បាន​គឺ 260x70", + "Layout_Terms_of_Service" : "ល័ក្ខខ័ណ្ឌ​នៃ​សេវាកម្ម", "Leave_room" : "ចេញ​ពីបន្ទប់", "line" : "ជួរ", "Load_more" : "មើល​ទៀត", + "Loading_more_from_history" : "លោតច្រើនទៀតពីប្រវត្តិ", "Loading..." : "កំពុង​ដំណើរការ...", "Loading_suggestion" : "កំពុង​មើល​ការ​សម្រេច​ចិត្ត...", "Login" : "ឡុក​ចូល", @@ -122,6 +148,7 @@ "login_with" : "ឬ ឡុក​ចូល​ដោយ​ផ្ទាល់​ជាមួយ", "Logout" : "ចាក​ចេញ", "Make_Admin" : "ឲ្យ​ធ្វើ​អ្នក​គ្រប់​គ្រង", + "Mark_as_read" : "សម្គាល់​ថា​បាន​អាន", "Members" : "សាមាជិក", "Members_List" : "បញ្ជី​សមាជិក", "Members_placeholder" : "សាមាជិក", @@ -131,12 +158,15 @@ "Message_AllowPinning" : "អនុញ្ញតិ​ខ្ទស់សារ​", "Message_deleting_not_allowed" : "ការ​លប់សារ​មិន​ត្រូវ​បាន​អនុញ្ញាតិ", "Message_editing_not_allowed" : "ការ​កែ​សម្រួល​សារ​មិន​ត្រូវ​បាន​អនុញ្ញាតិ", + "Message_editing_blocked" : "សារ​នេះ​មិន​អាច​ត្រូវ​បាន​កែប្រែ​ទៀត​ទេ", + "Message_MaxAllowedSize" : "ទំហំអតិបរមាដែលត្រូវបានអនុញ្ញាតសារ", "Message_pinning_not_allowed" : "ការខ្ទាស់​សារ​មិន​អនុញ្ញាតិ​", "Message_KeepHistory" : "រក្សា​​ប្រវត្តិ​សារ", "Message_removed" : "សារ​បាន​លប់", "Message_pinned" : "សារ\n", "Message_ShowDeletedStatus" : "បង្ហាញ​ស្ថានភាព​ដែល​បាន​លុប", "Message_ShowEditedStatus" : "បង្ហាញ​ស្ថានភាព​អត្ថបទ​​ដែល​បាន​កែ​សម្រួល", + "Meta" : "មេតា", "Meta_fb_app_id" : "លេខ​សម្គាល់ កម្មវិធី​ហ្វេស​ប៊ូក", "Meta_google-site-verification" : "ការ​ផ្ទៀង​ផ្ទាត់​ជាមួយ Google Site", "Meta_language" : "ភាសា", @@ -144,11 +174,14 @@ "Meta_robots" : "មនុស្ស​យន្ត", "minutes" : "នាទី", "More_channels" : "ប៉ុស្តិ៍​ច្រើន​ទៀត", + "More_groups" : "ក្រុមឯកជនច្រើនទៀត", + "More_unreads" : "មិនទាន់អានច្រើនទៀត", "Msgs" : "សារ", "multi" : "ច្រើន", "My_Account" : "គណនី​របស់ខ្ញុំ", "n_messages" : "%s សារ", "Name" : "Name", + "Name_cant_be_empty" : "ឈ្មោះ​មិន​អាច​ទទេ", "New_messages" : "សារ​ថ្មី", "New_password" : "ពាក្យ​សម្ងាត់​ថ្មី", "No_channels_yet" : "អ្នក​មិន​មែន​ជា​សមាជិក​នៃ​ប៉ុស្តិ៍​ណា​មួយ​ឡើយ", @@ -156,12 +189,18 @@ "No_favorites_yet" : "អ្នក​មិន​ធ្លាប់​បាន​កំណត់​ត្រា​ពេញ​ចិត្ត​ណាមួយ​ឡើយ", "No_groups_yet" : "អ្នក​មិន​ទាន់​មាន​ក្រុម​ឯកជន​នៅឡើយ", "No_permission_to_view_room" : "អ្នក​មិន​មាន​សិទ្ធ​មើល​បន្ទប់​នេះ​ឡើយ", + "No_channel_with_name_%s_was_found" : "មិន​មាន​ប៉ុស្តិ៍​ឈ្មោះ \"%s\" ឡើយ​", + "No_group_with_name_%s_was_found" : "មិន​មាន​ក្រុម​ឯក​ជន​​ឈ្មោះ \"%s\" ឡើយ", + "No_user_with_username_%s_was_found" : "មិន​មាន​អ្នក​ប្រើប្រាស់​ឈ្មោះ \"%s\" ឡើយ", "Not_allowed" : "មិន​បាន​អនុញ្ញាត្តិ", "Not_found_or_not_allowed" : "មិន​ប្រទះ ឬ​មិន​អនុញ្ញាតិ", "Nothing_found" : "គ្មាន​អ្វី​ប្រទះ", "Notify_all_in_this_room" : "ជូន​ដំណឹង​ទាំង​អស់​នៅ​ក្នុង​បន្ទប់​នេះ", + "Only_you_can_see_this_message" : "មានតែអ្នកដែលអាចឃើញសារនេះ", "Online" : "លើបណ្តាញ", "Oops!" : "អូ!", + "Opt_out_statistics" : "កុំផ្ញើស្ថិតិអនាមិករបស់អ្នកទៅ Rocket.Chat", + "Opt_out_statistics_warning" : "តាមការផ្ញើរស្ថិតិអនាមិនរបស់អ្នក, អ្នកនឹងជួយយើងដើម្បីសម្គាល់ចំនួនករណីនៃ Rocket.Chat ដែលត្រូវបានដាក់ប្រើ ដូចជាករណីចំនួនប្រព័ន្ធ ល្អកំពុងប្រើប្រាស់ ដូចនេះយើងអាចពង្រឹងវាបន្ថែមទៀត។ ប្រសិនបើអ្នកចង់បន្តការផ្ញើរស្ថិតិអនាមិនរបស់អ្នក សូមកុំធិចក្នុងប្រអប់ខាងលើ សូមអរគុណ!", "others" : "ផ្សេងៗ", "Password" : "ពាក្យ​សម្ងាត់", "Password_changed_successfully" : "ពាក្យ​សម្ងាត់​បាន​ប្តូរ​ជោគជ័យ", @@ -169,11 +208,15 @@ "Please_wait_activation" : "សូម​មេត្តារង់​ចាំ ការងារ​នេះ​ត្រូវ​ចំណាយ​ពេល​បន្តិច", "Please_wait_statistics" : "សូម​មេត្តារង់ចាំ ស្ថិតិ​គឺ​កំពុង​គណនា", "Powered_by" : "រក្សាសិទ្ធិ​ដោយ", + "Preferences" : "ចំណង់​ចំណូល​ចិត្ត", + "Preferences_saved" : "ចំណង់​ចំណូល​ចិត្ត​ដែល​បាន​រក្សាទុក", "Privacy" : "ឯកជនភាព", "Private_Groups" : "ក្រុម​ឯកជន", + "Private_Groups_list" : "បញ្ជី​នៃ​ក្រុម​ឯកជន", "Profile" : "ព​ត៌​មាន​ផ្ទាល់​ខ្លួន", "Profile_saved_successfully" : "ព​ត៌​មាន​ផ្ទាល់​ខ្លួន​​បាន​រក្សា​ទុក​ដោយ​ជោគជ័យ", "Proudly_developed" : "បាន​អភិវឌ្ឍ​ដោយ​មោ​ទ​នៈ​ដោយ​មាន​រឿង Meteor", + "Push" : "រុញ", "Push_apn_cert" : "វិញ្ញាបនប័ត្រ APN", "Push_apn_dev_cert" : "វិញ្ញាបនប័ត្រអ្នក​អភិវឌ្ឍន៍ APN", "Push_apn_dev_key" : "សោរអ្នក​អភិវឌ្ឍន៍ APN", @@ -197,9 +240,12 @@ "Room_name_changed_successfully" : "ឈ្មោះ​បន្ទប់​បាន​ប្តូរ​ជោគជ័យ", "Room_not_found" : "រក​មិន​ឃើញ​បន្ទប់", "room_user_count" : "%s អ្នក​ប្រើប្រាស់", + "Rooms" : "បន្ទប់", "Save" : "រក្សាទុក", "Save_changes" : "រក្សា​ទុក​ការ​ផ្លាស់​ប្តូ​រ", + "Save_Mobile_Bandwidth" : "រក្សាទុកកម្រិតបញ្ជូនតាមទូរស័ព្ទដៃ", "Search" : "ស្វែង​រក", + "Search_Messages" : "ស្វែងរក​សារ", "Search_settings" : "កំណត់​ការស្វែង​រក", "seconds" : "វិនាទ", "See_all" : "មើលទាំងអស់", @@ -208,7 +254,11 @@ "Select_file" : "ជ្រើស​ ឯកសារ", "Select_service_to_login" : "ជ្រើស​សេវាកម្ម​ដើម្បីឡុក​ចូល ទាញ​រូប​របស់​អ្នក ឬ​ផ្ទុកឡើង​ផ្ទាល់​ពីកុំព្យូទ័រ", "Selected_users" : "ជ្រើស​សមាជិក", + "Send" : "ផ្ញើ", "Send_confirmation_email" : "ផ្ញើរអ៊ីម៉ែល​បញ្ជាក់", + "Send_invitation_email" : "ផ្ញើ​ការ​អញ្ជើញ​អ៊ីមែល", + "Send_invitation_email_error" : "អ្នកមិនបានផ្តល់អាស័យដ្ឋានអ៊ីមែលត្រឹមត្រូវទេ", + "Send_invitation_email_info" : "អ្នកអាចផ្ញើរច្រើនការអញ្ជើញអ៊ីមែលក្នុងពេលតែមួយ", "Send_Message" : "ផ្ញើរសារ", "Settings" : "ការកំណត់", "Settings_updated" : "ការ​កំណត់​ការ​ធ្វើ​ឱ្យ​ទាន់​សម័យ", @@ -216,16 +266,20 @@ "Showing_results" : "

កំពុង​បង្ហាញ %s លទ្ធផល

", "Silence" : "ស្ងាត់", "since_creation" : "តាំងពី %s", + "Site_Name" : "គេហទំព័រ​ឈ្មោះ", "SMTP_Host" : "ម៉ាស៊ីន SMTP", "SMTP_Password" : "ឃ្លា​សម្ងាត់ SMTP", "SMTP_Port" : "ផែ SMTP", "SMTP_Username" : "ឈ្មោះ​សម្ងាត់ SMTP", + "Sound" : "សំឡេង", "Start_of_conversation" : "ចំនាប់​ផ្តើ​ការ​ពិភាក្សា", + "Statistics" : "ស្ថិតិ", "Stats_Active_Users" : "អ្នក​ប្រើ​ប្រាស់​សកម្ម", "Stats_Avg_Channel_Users" : "ចំនួន​អ្នក​ប្រើប្រាស់​ជា​មធ្យម​ក្នុង​ប៉ុស្តិ៍", "Stats_Avg_Private_Group_Users" : "ចំនួន​អ្នក​ប្រើប្រាស់​ជា​មធ្យម​ក្នុងក្រុម​ឯកជន", "Stats_Max_Room_Users" : "អតិបរិមា​អ្នក​ប្រើប្រាស់​ក្នុង​បន្ទប់", "Stats_Non_Active_Users" : "អ្នក​ប្រើ​អសកម្ម", + "Stats_Away_Users" : "អ្នក​ប្រើ​ដែល​បាន​ចាក​ឆ្ងាយ", "Stats_Offline_Users" : "អ្នក​ប្រើ​ក្រៅ​ប​ណ្តា​ញ", "Stats_Online_Users" : "អ្នក​ប្រើ​លើ​បណ្ដាញ", "Stats_Total_Channels" : "ប៉ុស្តិ៍សរុប", @@ -235,10 +289,12 @@ "Stats_Total_Users" : "អ្នក​ប្រើ​ប្រាស់​សរុប", "strike" : "strike", "Submit" : "បញ្ចូល", + "S_new_messages_since_s" : "%s សារថ្មីចាប់តាំងពី %s", "The_field_is_required" : "ចន្លោះ %s ត្រូវ​បំពេញ", "True" : "ពិត", "Unnamed" : "គ្មាន​ឈ្មោះ", "Upload_file_question" : "ផ្ទុក​ឯកសារ​ឡើង​ឬ?", + "Use_Emojis" : "ប្រើ Emoji", "Use_initials_avatar" : "ប្រើឈ្មោះ​អ្នក​ជា​ពិសេស", "use_menu" : "ប្រើប្រាស់​ផ្ទាំង​នៅ​សង​ខាង​ដើម្បី​ចូល​ទៅ​កាន់បន្ទប់ និង​ពិភាក្សា", "Use_service_avatar" : "ប្រើ %s រូប", @@ -246,9 +302,11 @@ "Use_uploaded_avatar" : "ប្រើ​រូប​បាន​ផ្ទុក​ឡើង", "User_added" : "អ្នក​ប្រើ __user_added__ បាន​បន្ថែម", "User_added_by" : "អ្នក​ប្រើ __user_added__ បាន​ថែម​ដោយ __user_by__.", + "User_Channels" : "ប៉ុស្តិ៍អ្នកប្រើប្រាស់", "User_has_been_activated" : "អ្នក​ប្រើ​ដែល​បាន​ធ្វើ​ឱ្យ​សកម្ម", "User_has_been_deactivated" : "អ្នក​ប្រើ​ដែល​ត្រូវ​បាន​ធ្វើ​ឱ្យ​អសកម្ម", "User_has_been_deleted" : "អ្នក​ប្រើប្រាស់​ដែល​បាន​លប់", + "User_Info" : "ព័ត​មាន​របស់​អ្នក​ប្រើ", "User_is_no_longer_an_admin" : "អ្នក​ប្រើប្រាស់​​គឺ​មិន​មែន​ជា​អ្នក​គ្រប់គ្រង​ទៀត​ទេ", "User_is_not_activated" : "អ្នក​ប្រើ​ដែល​មិន​ត្រូវ​បាន​ធ្វើ​ឱ្យ​សកម្ម", "User_is_now_an_admin" : "បច្ចុប្បន្ន​អ្នក​ប្រើប្រាស់​គឺ​ជា​អ្នក​គ្រប់គ្រង", @@ -262,6 +320,7 @@ "User_removed_by" : "អ្នក​ប្រើ __user_removed__ បាន​ដក​ចេញ​ដោយ __user_by__.", "User_Settings" : "ការ​កំណត់​របស់​អ្នក​ប្រើ", "User_updated_successfully" : "អ្នក​ប្រើប្រាស់​បាន​កែ​សម្រួល​ដោយ​ជោគជ័យ", + "Users" : "អ្នក​ប្រើ​ប្រាស់", "Username" : "ឈ្មោះ​សម្ងាត់", "Username_cant_be_empty" : "ឈ្មោះ​សម្ងាត់​មិនអាចទទេ", "Username_description" : "ឈ្មោះ​សម្ងាត់​បាន​អនុញ្ញាត់​ឲ្យ​អ្នក​ផ្សេង​ដាក់​ស្លាក​ឈ្មោះ​អ្នក​", @@ -269,6 +328,7 @@ "Username_title" : "ចុះ​ឈ្មោះ​សម្ងាត់", "Username_unavaliable" : "%s គឺ​បាន​ប្រើហើយ :(", "View_All" : "មើល​ទាំង​អស់", + "Wait_activation_warning" : "មុន​ពេល​ចូល​ប្រើប្រាស់​គណនី​អ្នក​ត្រូវ​តែ​ទទួល​បាន​ការ​អនុញ្ញាតិ​ពី​អ្នក​គ្រប់​គ្រង​ជាមុន​សិន​", "We_have_sent_password_email" : "យើងបាន​ផ្ញើរ​អ៊ីមែល​ជាមួយ​លំណែនាំ​ក្នុង​ការ​ប្តូរ​ឃ្លា​សម្ងាត់។ ប្រសិន​បើ​អ្នក​មិន​បាន​ទទួល​អ៊ី​មែល​ទេ​សូម​រួស​រាន់​មក​ទីនេះ​ ដើម្បី​ធ្វើ​វា​ម្តង​ទៀត​។", "We_have_sent_registration_email" : "យើង​បាន​ផ្ញើរ​អ៊ីមែល​មួយ​ទៅ​អ្នក​ដើម្បី​បញ្ជាក់​ការ​បាន​ចុះ​ឈ្មោះ​។ ប្រសិន​បើ​អ្នក​មិន​បាន​ទទួល​អ៊ី​មែល​ទេ​សូម​រួស​រាន់​មក​ទីនេះ​ ដើម្បី​ធ្វើ​វា​ម្តង​ទៀត​។", "Welcome" : "ស្វាគមន៍ %s.", diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index 65ec235e2ea..01ab953aab1 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "온라인 데모 접속", "Access_Online_Demo" : "온라인 데모 접속", + "Accounts" : "계정", "Accounts_denyUnverifiedEmail" : "확인되지 않은 이메일 거부", "Accounts_EmailVerification" : "이메일 확인", "Accounts_OAuth_Facebook" : "Facebook 로그인", @@ -23,11 +24,23 @@ "Accounts_OAuth_Twitter" : "트위터 로그인", "Accounts_OAuth_Twitter_id" : "트위터 ID", "Accounts_OAuth_Twitter_secret" : "트위터 암호", + "Accounts_OAuth_Custom_ID" : "ID", + "Accounts_OAuth_Custom_URL" : "URL", + "Accounts_OAuth_Custom_Token_Path" : "Token 경로", + "Accounts_OAuth_Custom_Identity_Path" : "Identity 경로", + "Accounts_OAuth_Custom_Authorize_Path" : "Authorize 경로", + "Accounts_OAuth_Custom_Secret" : "비밀", + "Accounts_OAuth_Custom_Enable" : "사용", + "Accounts_OAuth_Custom_Button_Label_Text" : "버튼 텍스트", + "Accounts_OAuth_Custom_Button_Label_Color" : "버튼 텍스트 색", + "Accounts_OAuth_Custom_Button_Color" : "버튼 색", + "Activate" : "활성화", "Add_Members" : "멤버 추가", "Add_users" : "사용자 추가", "Administration" : "관리", "All_channels" : "모든 채널", "and" : "그리고", + "API" : "API", "API_Analytics" : "분석", "API_Embed" : "포함", "are_also_typing" : "또한 입력중", @@ -40,6 +53,7 @@ "Away_female" : "자리비움", "away_male" : "자리비움", "Away_male" : "자리비움", + "Auto_Load_Images" : "이미지 자동 로드", "Back_to_login" : "로그인으로 돌아가기", "bold" : "굵게", "busy" : "바쁨", @@ -65,7 +79,9 @@ "Create_new_public_channel" : "새 공용 채널 생성", "Created_at" : "제작", "days" : "일", + "Deactivate" : "비활성화", "Delete_User_Warning" : "사용자 삭제시 사용자의 모든 메시지를 삭제합니다. 취소할 수 없습니다.", + "Delete" : "삭제", "Deleted" : "삭제!", "Direct_Messages" : "귓속말", "Disable_New_Message_Notification" : "새 메시지 알림 비활성화", @@ -74,6 +90,7 @@ "Duplicate_channel_name" : "'%s' 채널 이름은 이미 존재합니다.", "Duplicate_private_group_name" : "'%s'는 이미 존재하는 개인 그룹입니다.", "E-mail" : "이메일", + "Edit" : "수정", "edited" : "수정됨", "Email_already_exists" : "이메일이 이미 존재합니다", "Email_or_username" : "이메일 또는 사용자 이름", @@ -88,9 +105,11 @@ "Forgot_password" : "암호를 잊었습니다", "Fork_it_on_github" : "Github에서 포크", "From_Email" : "이메일로부터", + "General" : "일반", "Get_to_know_the_team" : "Rocket.Team 알아보기", "github_no_public_email" : "Github 계정에 공개된 이메일이 없습니다.", "Have_your_own_chat" : "당신만의 웹 채팅을 만드세요. Meteor.com으로 개발한 Rocket.Chat은 자신만의 채팅 플랫폼을 만들고 개선해 나아갈 개발자들을 위한 훌륭한 솔루션입니다.", + "Has_more" : "더 많이", "Hide_room" : "방 숨김", "History" : "이력", "hours" : "시간", @@ -102,6 +121,9 @@ "Invalid_room_name" : "%s은 사용 가능한 방 이름이 아닙니다.
소문자, 숫자, 대시만 사용할 수 있습니다", "invisible" : "보지 않음", "Invisible" : "보지 않음", + "Invitation HTML" : "HTML 초대 페이지", + "Invitation_Subject" : "초대 제목", + "Invite_Users" : "사용자 초대", "is_also_typing" : "또한 입력중", "is_also_typing_female" : "또한 입력중", "is_also_typing_male" : "또한 입력중", @@ -115,6 +137,7 @@ "Language_Version" : "한국어 버전", "Last_login" : "마지막 로그인", "Last_message" : "마지막 메시지", + "Layout" : "레이아웃", "Layout_Home_Body" : "홈 본문 내용", "Layout_Home_Title" : "홈 제목", "Layout_Login_Header" : "로그인 헤더", @@ -123,9 +146,11 @@ "Layout_Sidenav_Footer" : "옆 네비 바닥글", "Layout_Sidenav_Footer_description" : "바닥글 크기는 260x70입니다.", "Layout_Terms_of_Service" : "이용약관", + "LDAP" : "LDAP", "Leave_room" : "방 나가기", "line" : "밑줄", "Load_more" : "더 보기", + "Loading_more_from_history" : "이전 내용에서 가져오기", "Loading..." : "로딩 중 ...", "Loading_suggestion" : "제안 로딩중...", "Login" : "로그인", @@ -133,6 +158,7 @@ "login_with" : "아니면 직접 로그인", "Logout" : "로그아웃", "Make_Admin" : "관리자 권한 생성", + "Mark_as_read" : "읽었음", "Members" : "멤버", "Members_List" : "멤버 리스트", "Members_placeholder" : "멤버", @@ -142,12 +168,14 @@ "Message_AllowPinning" : "허용 메시지 고정", "Message_deleting_not_allowed" : "메시지 삭제를 할 수 없습니다.", "Message_editing_not_allowed" : "메시지 수정을 할 수 없습니다.", + "Message_MaxAllowedSize" : "메시지 최대 허용 크기", "Message_pinning_not_allowed" : "메시지를 고정할 수 없습니다.", "Message_KeepHistory" : "메시지 기록을 유지", "Message_removed" : "메시지 제거", "Message_pinned" : "메시지가 고정되었습니다.", "Message_ShowDeletedStatus" : "삭제된 상태 확인", "Message_ShowEditedStatus" : "수정 상태 확인", + "Meta" : "메타", "Meta_fb_app_id" : "페이스북 APP ID", "Meta_google-site-verification" : "Google 사이트 확인", "Meta_language" : "언어", @@ -155,6 +183,8 @@ "Meta_robots" : "검색 로봇", "minutes" : "분", "More_channels" : "추가 채널", + "More_groups" : "비밀 그룹 더보기", + "More_unreads" : "읽지 않은 메시지 더보기", "Msgs" : "Msgs", "multi" : "다중 밑줄", "My_Account" : "내 계정", @@ -174,6 +204,7 @@ "Not_found_or_not_allowed" : "찾을 수 없거나 허용되지 않았습니다", "Nothing_found" : "찾을 수 없습니다", "Notify_all_in_this_room" : "이 방에 있는 모든이에게 알림", + "Only_you_can_see_this_message" : "이 메시지는 당신만 볼 수 있습니다", "Online" : "온라인", "Oops!" : "아차", "Opt_out_statistics" : "나의 어떤 무기명 통계도 Rocket.chat으로 보내지 마십시오.", @@ -189,9 +220,11 @@ "Preferences_saved" : "설정 저장함.", "Privacy" : "개인정보보호", "Private_Groups" : "개인 그룹", + "Private_Groups_list" : "비밀 그룹 목록", "Profile" : "프로필", "Profile_saved_successfully" : "프로필을 성공적으로 저장", "Proudly_developed" : "Meteor로 개발됨", + "Push" : "푸시", "Push_apn_cert" : "APN Cert", "Push_apn_dev_cert" : "APN 개발 Cert", "Push_apn_dev_key" : "APN 개발 키", @@ -215,9 +248,12 @@ "Room_name_changed_successfully" : "방 이름 변경 완료", "Room_not_found" : "방을 찾을 수 없습니다.", "room_user_count" : "%s 사용자", + "Rooms" : "방", "Save" : "저장", "Save_changes" : "변경사항 저장", + "Save_Mobile_Bandwidth" : "모바일 대역폭 저장", "Search" : "검색", + "Search_Messages" : "메시지 찾기", "Search_settings" : "검색 설정", "seconds" : "초", "See_all" : "모두 보기", @@ -226,7 +262,9 @@ "Select_file" : "파일 선택", "Select_service_to_login" : "서비스 로그인시 불러온 사진이나 컴퓨터에서 직접 올린 사진을 선택합니다.", "Selected_users" : "선택된 멤버", + "Send" : "보내기", "Send_confirmation_email" : "확인 메일 보냄", + "Send_invitation_email" : "초대 메일 보내기", "Send_Message" : "메시지 보내기", "Settings" : "설정", "Settings_updated" : "설정 업데이트", @@ -235,12 +273,15 @@ "Silence" : "무언", "since_creation" : "%s 이후", "Site_Name" : "사이트 이름:", + "SAML" : "SAML", + "SMTP" : "SMTP", "SMTP_Host" : "SMTP 호스트", "SMTP_Password" : "SMTP 암호", "SMTP_Port" : "SMTP 포트", "SMTP_Username" : "SMTP 사용자 이름", "Sound" : "소리", "Start_of_conversation" : "대화 시작", + "Statistics" : "통계", "Stats_Active_Users" : "활성 사용자", "Stats_Avg_Channel_Users" : "채널 사용자 평균", "Stats_Avg_Private_Group_Users" : "비밀 그룹 사용자 평균", @@ -278,9 +319,11 @@ "Use_uploaded_avatar" : "업로드된 아바타 사용", "User_added" : "사용자 __user_added__ 추가함.", "User_added_by" : "사용자 __user_added__을/를 __user_by__에 추가함.", + "User_Channels" : "사용자 채널", "User_has_been_activated" : "사용자가 활성화되었습니다", "User_has_been_deactivated" : "사용자가 비활성화되었습니다", "User_has_been_deleted" : "사용자 삭제되었습니다", + "User_Info" : "사용자 정보", "User_is_no_longer_an_admin" : "사용자는 더 이상 관리자가 아닙니다", "User_is_not_activated" : "사용자는 더 이상 활동하지 않습니다.", "User_is_now_an_admin" : "사용자는 관리자입니다.", @@ -294,6 +337,7 @@ "User_removed_by" : "사용자 __user_removed__을/를 __user_by__에서 삭제됨.", "User_Settings" : "사용자 설정", "User_updated_successfully" : "사용자를 성공적으로 업데이트하였습니다.", + "Users" : "사용자", "Username" : "사용자 이름", "Username_cant_be_empty" : "사용자 이름을 비워둘 수 없습니다", "Username_description" : "사용자 이름은 다른 사람이 메시지에서 언급할 수 있도록 하는데 사용됩니다.", diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index 928b34db0eb..253c5b7c722 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -5,12 +5,23 @@ "Accounts_OAuth_Facebook" : "Facebook Login", "Accounts_OAuth_Facebook_id" : "Facebook App Id", "Accounts_OAuth_Facebook_secret" : "Facebook Secret", + "Accounts_OAuth_Github" : "GitHub Login", + "Accounts_OAuth_Github_id" : "GitHub Id", + "Accounts_OAuth_Github_secret" : "GitHub Secret", + "Accounts_OAuth_Google" : "Google Login", + "Accounts_OAuth_Google_id" : "Google Id", + "Accounts_OAuth_Google_secret" : "Google Secret", + "Accounts_OAuth_Linkedin" : "LinkedIn Login", + "Accounts_OAuth_Linkedin_id" : "LinkedIn Id", + "Accounts_OAuth_Linkedin_secret" : "LinkedIn Secret", "Accounts_OAuth_RegistrationRequired" : "Wymagana rejestracja", + "Activate" : "Aktywować", "Add_Members" : "Dodaj członków", "Add_users" : "Dodaj użytkowników", "Administration" : "Administracja", "All_channels" : "Wszystkie kanały", "and" : "i", + "API" : "API", "API_Analytics" : "Analityka", "API_Embed" : "Osadź", "are_also_typing" : "również piszą", @@ -46,17 +57,20 @@ "Create_new_private_group" : "Utwórz prywatną grupę", "Create_new_public_channel" : "Utwórz kanał publiczny", "Created_at" : "Utworzono", + "Deactivate" : "Dezaktywować", + "Delete" : "Usuń", "Deleted" : "Usunięte!", "Direct_Messages" : "Bezpośrednie wiadomości", "Drop_to_upload_file" : "Przeciągnij, aby przesłać plik", "Duplicate_channel_name" : "Kanał o nazwie \"% s\" istnieje", "Duplicate_private_group_name" : "Grupa Prywatna o nazwie '% s' istnieje", + "Edit" : "Edycja", "edited" : "zmieniono", "Email_already_exists" : "Email już istnieje", "Email_or_username" : "Email lub nazwa użytkownika", "Email_verified" : "E-mail zweryfikowany", - "Enter_info" : "Wpisz dane logowania", - "Error_changing_password" : "Hasło zostało zmienione", + "Enter_info" : "Podaj swoje dane", + "Error_changing_password" : "Błąd zmiany hasła", "False" : "Fałsz", "Favorites" : "Ulubione", "Follow_social_profiles" : "Śledź nasze profile społeczne, widelec do nas na github i podziel się swoimi przemyśleniami na temat rocket.chat aplikacji na naszej trello pokładzie.", @@ -75,6 +89,8 @@ "Invalid_room_name" : "% snie jest poprawną nazwą pokoju,
użyj tylko liter, cyfr i myślników", "invisible" : "niewidoczny", "Invisible" : "Niewidoczny", + "Invitation_Subject" : "Temat zaproszenia", + "Invite_Users" : "Zaproś użytkowników", "is_also_typing" : "również pisze", "is_also_typing_female" : "pisze", "is_also_typing_male" : "również pisze", @@ -131,6 +147,7 @@ "Not_found_or_not_allowed" : "Nie znaleziono lub nie dozwolone", "Nothing_found" : "Nic nie znaleziono", "Notify_all_in_this_room" : "Powiadom wszystkich w pokoju", + "Only_you_can_see_this_message" : "Tylko Ty widzisz tę wiadomość", "Online" : "Online", "Oops!" : "Ups", "others" : "inni", @@ -151,7 +168,7 @@ "Push_apn_passphrase" : "APN Passphrase", "Push_debug" : "Debug", "Push_enable" : "Włącz", - "Push_production" : "Produkcja", + "Push_production" : "Serwer produkcyjny", "Quick_Search" : "Szybkie wyszukiwanie", "quote" : "cytat", "Recents" : "Najnowsze", @@ -163,9 +180,11 @@ "Room_name_changed" : "Nazwa pokoju zmieniona na: __room_name__przez __user_by__", "Room_name_changed_successfully" : "Nazwa pokoju zmieniona", "room_user_count" : "%s użytkowników", + "Rooms" : "Pokoje", "Save" : "Zapisz", "Save_changes" : "Zapisz zmiany", "Search" : "Szukaj", + "Search_Messages" : "Przeszukaj wiadomości", "Search_settings" : "Wyszukaj w ustawieniach", "See_all" : "Zobacz wszystko", "See_only_online" : "Wyłącznie w trybie online", @@ -173,6 +192,7 @@ "Select_file" : "Wybierz plik", "Select_service_to_login" : "Wybierz usługę, aby zalogować się, celem dodania zdjęcia lub prześlij je bezpośrednio z komputera", "Selected_users" : "Wybrani członkowie", + "Send" : "Wyślij", "Send_confirmation_email" : "Wyślij e-mail z potwierdzeniem", "Send_Message" : "Wyślij wiadomość", "Settings" : "Ustawienia", @@ -181,11 +201,14 @@ "Showing_results" : "

Wyświetlono % swyników

", "Silence" : "Cisza", "since_creation" : "od %s", + "SAML" : "SAML", + "SMTP" : "SMTP", "SMTP_Host" : "SMTP Host", "SMTP_Password" : "Hasło SMTP", "SMTP_Port" : "Port SMTP", "SMTP_Username" : "Nazwa użytkownika SMTP", "Start_of_conversation" : "Rozpocznij rozmowę", + "Statistics" : "Statystyka", "strike" : "przekreślenie", "Submit" : "Prześlij", "The_field_is_required" : "Pole %s jest wymagane.", @@ -210,6 +233,7 @@ "User_logged_out" : "Użytkownik jest wylogowany", "User_removed_by" : "Użytkownik __user_removed__usunięty przez __user_by__.", "User_Settings" : "Ustawienia użytkownika", + "Users" : "Użytkownicy", "Username" : "Nazwa użytkownika", "Username_cant_be_empty" : "Nazwa użytkownika nie może być pusta", "Username_description" : "Nazwa użytkownika jest używana, by inni mogli Cię wspomnieć w wiadomości.", diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 58941e9df25..feac9692035 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -1,6 +1,7 @@ { "Access_online_demo" : "Acesse o demo online", "Access_Online_Demo" : "Acesse o Demo Online", + "Accounts" : "Contas", "Accounts_denyUnverifiedEmail" : "Proibir e-mail não verificado", "Accounts_EmailVerification" : "Verificação de E-mail", "Accounts_OAuth_Facebook" : "Login do Facebook", @@ -38,7 +39,9 @@ "Add_users" : "Adicionar usuários", "Administration" : "Administração", "All_channels" : "Todos os canais", + "Allow_Invalid_SelfSigned_Certs" : "Permitir certificados inválidos e auto-assinados para validação de links e previews", "and" : "e", + "API" : "API", "API_Analytics" : "Analytics", "API_Embed" : "Embed", "are_also_typing" : "também estão digitando", @@ -51,6 +54,7 @@ "Away_female" : "Ausente", "away_male" : "ausente", "Away_male" : "ausente", + "Auto_Load_Images" : "Auto Carregar Imagens", "Back_to_login" : "Voltar para o login", "bold" : "negrito", "busy" : "ocupado", @@ -102,9 +106,12 @@ "Follow_social_profiles" : "Siga-nos nas redes sociais, faça fork no github e compartilhe suas ideias sobre o app rocket.chat em nosso trello.", "Forgot_password" : "Esqueceu sua senha", "Fork_it_on_github" : "Fork it on github", + "From_Email" : "Email De", + "General" : "Geral", "Get_to_know_the_team" : "Conheça o Rocket.Team", "github_no_public_email" : "Você não possui um e-mail público em sua conta do GitHub", "Have_your_own_chat" : "Tenha seu próprio web chat. Desenvolvido com Meteor.com, o Rocket.Chat é uma excelente solução para desenvolvedores que querem construir e desenvolver sua própria plataforma de chat.", + "Has_more" : "Há mais", "Hide_room" : "Esconder sala", "History" : "Histórico", "hours" : "horas", @@ -116,6 +123,9 @@ "Invalid_room_name" : "%s não é um nome válido,
utilizar apenas letras, números e hífens", "invisible" : "invisível", "Invisible" : "Invisível", + "Invitation HTML" : "HTML do Convite", + "Invitation_Subject" : "Assunto do Convite", + "Invite_Users" : "Convidar Usuários", "is_also_typing" : "também está digitando", "is_also_typing_female" : "também está digitando", "is_also_typing_male" : "também está digitando", @@ -129,6 +139,7 @@ "Language_Version" : "Versão em Português", "Last_login" : "Último login", "Last_message" : "Última mensagem", + "Layout" : "Layout", "Layout_Home_Body" : "Corpo da Home", "Layout_Home_Title" : "Título da Home", "Layout_Login_Header" : "Header do Login", @@ -137,9 +148,11 @@ "Layout_Sidenav_Footer" : "Rodapé da Navegação Lateral", "Layout_Sidenav_Footer_description" : "Tamanho do rodapé é 260x70", "Layout_Terms_of_Service" : "Termos de Serviço", + "LDAP" : "LDAP", "Leave_room" : "Sair da sala", "line" : "linha", "Load_more" : "Carregar mais", + "Loading_more_from_history" : "Carregando mais a partir do histórico", "Loading..." : "Carregando...", "Loading_suggestion" : "Buscando sugestões...", "Login" : "Entrar", @@ -147,6 +160,7 @@ "login_with" : "Ou faça seu login com", "Logout" : "Sair", "Make_Admin" : "Tornar Administrador", + "Mark_as_read" : "Marcar como lido", "Members" : "Membros", "Members_List" : "Lista de Membros", "Members_placeholder" : "Membros", @@ -158,12 +172,14 @@ "Message_deleting_not_allowed" : "Exclusão de mensagem não permitido", "Message_editing_not_allowed" : "Edição de mensagem não permitido", "Message_editing_blocked" : "Esta mensagem não pode mais ser editada", + "Message_MaxAllowedSize" : "Tamanho máximo de mensagem permitido ", "Message_pinning_not_allowed" : "Não Permitir Fixar Mensagem", "Message_KeepHistory" : "Manter Histórico de Mensagens", "Message_removed" : "Mensagem removida", "Message_pinned" : "Mensagem fixada", "Message_ShowDeletedStatus" : "Mostrar Status Excluído", "Message_ShowEditedStatus" : "Mostrar Status Editado", + "Meta" : "Meta", "Meta_fb_app_id" : "Facebook APP ID", "Meta_google-site-verification" : "Verificação de Site do Google", "Meta_language" : "Idioma", @@ -172,6 +188,7 @@ "minutes" : "minutos", "More_channels" : "Mais canais", "More_groups" : "Mais grupos privados", + "More_unreads" : "Mais não lidos", "Msgs" : "Msgs", "multi" : "multi", "My_Account" : "Minha Conta", @@ -211,6 +228,7 @@ "Profile" : "Perfil", "Profile_saved_successfully" : "Perfil salvo com sucesso", "Proudly_developed" : "Orgulhosamente desenvolvido com Meteor", + "Push" : "Push", "Push_apn_cert" : "APN Cert", "Push_apn_dev_cert" : "APN Dev Cert", "Push_apn_dev_key" : "APN Dev Key", @@ -230,14 +248,16 @@ "Remove_Admin" : "Remover Administrador", "Reset_password" : "Resetar senha", "Room" : "Sala", - "Rooms" : "Salas", "Room_name_changed" : "Nome da sala alterado para: __room_name__ por __user_by__", "Room_name_changed_successfully" : "Nome da sala alterado com sucesso", "Room_not_found" : "Sala não encontrada", "room_user_count" : "%s usuários", + "Rooms" : "Salas", "Save" : "Salvar", "Save_changes" : "Salvar alterações", + "Save_Mobile_Bandwidth" : "Economizar Banda Móvel", "Search" : "Pesquisar", + "Search_Messages" : "Pesquisar Mensagens", "Search_settings" : "Pesquisar configurações", "seconds" : "segundos", "See_all" : "Ver todos", @@ -246,7 +266,13 @@ "Select_file" : "Selecione um arquivo", "Select_service_to_login" : "Selecione um serviço para iniciar sessão e carregar sua imagem ou faça upload de um arquivo de seu computador", "Selected_users" : "Membros selecionados", + "Send" : "Enviar", "Send_confirmation_email" : "Enviar email de confirmação", + "Send_invitation_email" : "Enviar convite por e-mail", + "Send_invitation_email_error" : "Você não forneceu qualquer e-mail válido.", + "Send_invitation_email_info" : "Você pode enviar vários convites por e-mail de uma vez.", + "Send_invitation_email_success" : "Você enviou com sucesso um convite por e-mail para os seguintes endereços:", + "Send_invitation_email_warning" : "Para enviar convites por e-mails, você deve primeiro definir as configurações de SMTP.", "Send_Message" : "Enviar Mensagem", "Settings" : "Configurações", "Settings_updated" : "Configurações atualizadas", @@ -255,6 +281,8 @@ "Silence" : "Silenciar", "since_creation" : "desde %s", "Site_Name" : "Nome do Site:", + "SAML" : "SAML", + "SMTP" : "SMTP", "SMTP_Host" : "Host SMTP", "SMTP_Password" : "Senha SMTP", "SMTP_Port" : "Porta SMTP", @@ -287,6 +315,7 @@ "Stats_Total_Users" : "Quantidade de Usuários", "strike" : "tachado", "Submit" : "Enviar", + "S_new_messages_since_s" : "%s novas mensagens desde %s", "The_field_is_required" : "O campo %s é obrigatório.", "True" : "Verdadeiro", "Unnamed" : "Sem nome", @@ -299,9 +328,11 @@ "Use_uploaded_avatar" : "Use o avatar de upload", "User_added" : "Usuário __user_added__ adicionado à conversa.", "User_added_by" : "Usuário __user_added__ adicionado à conversa por __user_by__.", + "User_Channels" : "Canais do Usuário", "User_has_been_activated" : "Usuário foi ativado", "User_has_been_deactivated" : "Usuário foi desativado", "User_has_been_deleted" : "O usuário foi excluído", + "User_Info" : "Informações do usuário", "User_is_no_longer_an_admin" : "O usuário já não é um administrador", "User_is_not_activated" : "O usuário não está ativo", "User_is_now_an_admin" : "O usuário tornou-se um administrador", @@ -315,13 +346,13 @@ "User_removed_by" : "Usuário __user_removed__ removido da conversa por __user_by__.", "User_Settings" : "Configurações do Usuário", "User_updated_successfully" : "Usuário atualizado com sucesso", + "Users" : "Usuários", "Username" : "Nome de usuário", "Username_cant_be_empty" : "O nome de usuário não pode ser vazio", "Username_description" : "O nome de usuário serve para que outras pessoas possam mencionar você em mensagens", "Username_invalid" : "%s não é um nome de usuário válido,
usar somente letras, números, pontos e traços", "Username_title" : "Cadastre um nome de usuário", "Username_unavaliable" : "%s já está sendo usado :(", - "Users" : "Usuários", "View_All" : "Ver Todos", "Wait_activation_warning" : "Antes que você possa fazer o login, sua conta deve ser manualmente ativada por um administrador.", "We_have_sent_password_email" : "Nós lhe enviamos um e-mail com instruções para redefinir sua senha. Se você não receber um e-mail em breve, por favor retorne e tente novamente.", @@ -335,4 +366,4 @@ "You_will_not_be_able_to_recover" : "Você não será capaz de desfazer!", "Your_entry_has_been_deleted" : "Sua mensagem foi excluída.", "Your_Open_Source_solution" : "Sua própria solução Open Source" -} +} \ No newline at end of file diff --git a/packages/rocketchat-gitlab/i18n/km.i18n.json b/packages/rocketchat-gitlab/i18n/km.i18n.json index 6f31cf5a2e6..8b1b037cbeb 100644 --- a/packages/rocketchat-gitlab/i18n/km.i18n.json +++ b/packages/rocketchat-gitlab/i18n/km.i18n.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "API_Gitlab_URL" : "URL របស់ GitLab" +} \ No newline at end of file diff --git a/packages/rocketchat-ldap/i18n/zh.i18n.json b/packages/rocketchat-ldap/i18n/zh.i18n.json index 6f31cf5a2e6..2d41c6ba40c 100644 --- a/packages/rocketchat-ldap/i18n/zh.i18n.json +++ b/packages/rocketchat-ldap/i18n/zh.i18n.json @@ -1 +1,5 @@ -{ } \ No newline at end of file +{ + "LDAP_Url" : "LDAP URL", + "LDAP_Port" : "LDAP端口", + "LDAP_Dn" : "LDAP DN" +} \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ar.i18n.json b/packages/rocketchat-livechat/i18n/ar.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ar.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/de.i18n.json b/packages/rocketchat-livechat/i18n/de.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/de.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/el.i18n.json b/packages/rocketchat-livechat/i18n/el.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/el.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/en.i18n.json b/packages/rocketchat-livechat/i18n/en.i18n.json index 3df58a37b98..75795c5127b 100644 --- a/packages/rocketchat-livechat/i18n/en.i18n.json +++ b/packages/rocketchat-livechat/i18n/en.i18n.json @@ -1,4 +1,4 @@ { - "Livechat_title": "Livechat title", - "Livechat_title_color": "Livechat title background color" -} + "Livechat_title" : "Livechat title", + "Livechat_title_color" : "Livechat title background color" +} \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/es.i18n.json b/packages/rocketchat-livechat/i18n/es.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/es.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/fi.i18n.json b/packages/rocketchat-livechat/i18n/fi.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/fi.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/fr.i18n.json b/packages/rocketchat-livechat/i18n/fr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/fr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/he.i18n.json b/packages/rocketchat-livechat/i18n/he.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/he.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/hr.i18n.json b/packages/rocketchat-livechat/i18n/hr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/hr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/hu.i18n.json b/packages/rocketchat-livechat/i18n/hu.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/hu.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/it.i18n.json b/packages/rocketchat-livechat/i18n/it.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/it.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ja.i18n.json b/packages/rocketchat-livechat/i18n/ja.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ja.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/km.i18n.json b/packages/rocketchat-livechat/i18n/km.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/km.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ko.i18n.json b/packages/rocketchat-livechat/i18n/ko.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ko.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/pl.i18n.json b/packages/rocketchat-livechat/i18n/pl.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/pl.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/pt.i18n.json b/packages/rocketchat-livechat/i18n/pt.i18n.json index 943e35ef32b..cec5df03770 100644 --- a/packages/rocketchat-livechat/i18n/pt.i18n.json +++ b/packages/rocketchat-livechat/i18n/pt.i18n.json @@ -1,4 +1,4 @@ { - "Livechat_title": "Título Livechat", - "Livechat_title_color": "Cor de fundo do título do Livechat" -} + "Livechat_title" : "Título Livechat", + "Livechat_title_color" : "Cor de fundo do título do Livechat" +} \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ru.i18n.json b/packages/rocketchat-livechat/i18n/ru.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ru.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ta-IN.i18n.json b/packages/rocketchat-livechat/i18n/ta-IN.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ta-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/tr.i18n.json b/packages/rocketchat-livechat/i18n/tr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/tr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/ug.i18n.json b/packages/rocketchat-livechat/i18n/ug.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/ug.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/uk.i18n.json b/packages/rocketchat-livechat/i18n/uk.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/uk.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/zh.i18n.json b/packages/rocketchat-livechat/i18n/zh.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-livechat/i18n/zh.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json b/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json index 6f31cf5a2e6..efbd1904e4b 100644 --- a/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json +++ b/packages/rocketchat-webrtc-ib/i18n/zh.i18n.json @@ -1 +1,6 @@ -{ } \ No newline at end of file +{ + "Video_Chat" : "视频", + "Remote" : "远程", + "Setup" : "设置", + "Stop_Video" : "停止视频" +} \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ar.i18n.json b/packages/rocketchat-wordpress/i18n/ar.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ar.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/de.i18n.json b/packages/rocketchat-wordpress/i18n/de.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/de.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/el.i18n.json b/packages/rocketchat-wordpress/i18n/el.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/el.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/en.i18n.json b/packages/rocketchat-wordpress/i18n/en.i18n.json index bd4ea6b5ab6..315cdb25a08 100644 --- a/packages/rocketchat-wordpress/i18n/en.i18n.json +++ b/packages/rocketchat-wordpress/i18n/en.i18n.json @@ -1,6 +1,6 @@ { "API_Wordpress_URL" : "WordPress URL", - "Accounts_OAuth_Wordpress": "WordPress Login", - "Accounts_OAuth_Wordpress_id": "WordPress ID", - "Accounts_OAuth_Wordpress_secret": "WordPress Secret" + "Accounts_OAuth_Wordpress" : "WordPress Login", + "Accounts_OAuth_Wordpress_id" : "WordPress ID", + "Accounts_OAuth_Wordpress_secret" : "WordPress Secret" } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/es.i18n.json b/packages/rocketchat-wordpress/i18n/es.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/es.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/fi.i18n.json b/packages/rocketchat-wordpress/i18n/fi.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/fi.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/fr.i18n.json b/packages/rocketchat-wordpress/i18n/fr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/fr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/he.i18n.json b/packages/rocketchat-wordpress/i18n/he.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/he.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/hr.i18n.json b/packages/rocketchat-wordpress/i18n/hr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/hr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/hu.i18n.json b/packages/rocketchat-wordpress/i18n/hu.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/hu.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/it.i18n.json b/packages/rocketchat-wordpress/i18n/it.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/it.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ja.i18n.json b/packages/rocketchat-wordpress/i18n/ja.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ja.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/km.i18n.json b/packages/rocketchat-wordpress/i18n/km.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/km.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ko.i18n.json b/packages/rocketchat-wordpress/i18n/ko.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ko.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/pl.i18n.json b/packages/rocketchat-wordpress/i18n/pl.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/pl.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ru.i18n.json b/packages/rocketchat-wordpress/i18n/ru.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ru.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ta-IN.i18n.json b/packages/rocketchat-wordpress/i18n/ta-IN.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ta-IN.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/tr.i18n.json b/packages/rocketchat-wordpress/i18n/tr.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/tr.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/ug.i18n.json b/packages/rocketchat-wordpress/i18n/ug.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/ug.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/uk.i18n.json b/packages/rocketchat-wordpress/i18n/uk.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/uk.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/packages/rocketchat-wordpress/i18n/zh.i18n.json b/packages/rocketchat-wordpress/i18n/zh.i18n.json new file mode 100644 index 00000000000..6f31cf5a2e6 --- /dev/null +++ b/packages/rocketchat-wordpress/i18n/zh.i18n.json @@ -0,0 +1 @@ +{ } \ No newline at end of file From f71a649881abff2b32efd26e8128c498ea3460fb Mon Sep 17 00:00:00 2001 From: westmakaha Date: Fri, 25 Sep 2015 23:20:58 -0400 Subject: [PATCH 22/33] add sandstorm.io description --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 82f04632320..205f564e878 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,11 @@ Get the app for your Android phone: Now compatible with all Android devices as old as version 4.0.x - [dowload here](https://github.com/RocketChat/Rocket.Chat/wiki/Build-the-Android-Cordova-Web-App-and-connect-to-your-own-Rocket.Chat-Server). +Host your own Rocket.Chat server in four seconds flat: + +[![Rocket.Chat on Sandstorm.io](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/sandstorm.png)](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0) + + Try it on Ubuntu: [Deploy on VPS or standalone server](https://github.com/RocketChat/Rocket.Chat/wiki/Deploy-Rocket.Chat-without-docker) From 453dfb2baf2744b53f1580db79220d0c6e402ccf Mon Sep 17 00:00:00 2001 From: westmakaha Date: Fri, 25 Sep 2015 23:31:30 -0400 Subject: [PATCH 23/33] add logo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 205f564e878..8a9aa93c20f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Now compatible with all Android devices as old as version 4.0.x - [dowload here] Host your own Rocket.Chat server in four seconds flat: -[![Rocket.Chat on Sandstorm.io](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/sandstorm.png)](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0) +[![Rocket.Chat on Sandstorm.io](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/sandstorm.jpg)](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0) Try it on Ubuntu: From 4f137830a7704cd9264a344ed6931f8fe76238e2 Mon Sep 17 00:00:00 2001 From: kakawait Date: Sat, 26 Sep 2015 13:10:17 +0200 Subject: [PATCH 24/33] Spotify integrations using following possible links/syntaxes: - https://open.spotify.com/track/34AWo71Ya5gq7wpNnatwr7 - spotify:track:34AWo71Ya5gq7wpNnatwr7 Works with tracks, albums, artists and playlists. --- .meteor/packages | 1 + .meteor/versions | 1 + .../client/baseWidget.coffee | 13 ++++- .../client/oembedSpotifyWidget.html | 13 +++++ packages/rocketchat-oembed/package.js | 1 + packages/rocketchat-spotify/package.js | 22 +++++++++ packages/rocketchat-spotify/spotify.coffee | 48 +++++++++++++++++++ 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 packages/rocketchat-oembed/client/oembedSpotifyWidget.html create mode 100644 packages/rocketchat-spotify/package.js create mode 100644 packages/rocketchat-spotify/spotify.coffee diff --git a/.meteor/packages b/.meteor/packages index 2ebba48b6d1..39b8c2a6a80 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -41,6 +41,7 @@ rocketchat:oembed rocketchat:slashcommands-invite rocketchat:slashcommands-join rocketchat:slashcommands-leave +rocketchat:spotify rocketchat:statistics rocketchat:webrtc #rocketchat:livechat diff --git a/.meteor/versions b/.meteor/versions index 9f9137e44a7..5f4894dfe86 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -120,6 +120,7 @@ rocketchat:oembed@0.0.1 rocketchat:slashcommands-invite@0.0.1 rocketchat:slashcommands-join@0.0.1 rocketchat:slashcommands-leave@0.0.1 +rocketchat:spotify@0.0.1 rocketchat:statistics@0.0.1 rocketchat:webrtc@0.0.1 rocketchat:wordpress@0.0.1 diff --git a/packages/rocketchat-oembed/client/baseWidget.coffee b/packages/rocketchat-oembed/client/baseWidget.coffee index 535df9dcc23..63d628f8f78 100644 --- a/packages/rocketchat-oembed/client/baseWidget.coffee +++ b/packages/rocketchat-oembed/client/baseWidget.coffee @@ -1,3 +1,11 @@ +Template.registerHelper 'replace', (source, find, replace, useRegex) -> + if useRegex is true + find = new RegExp(find) + return source.replace(find, replace) + +Template.registerHelper 'match', (source, regex) -> + return new RegExp(regex).test(source) + Template.oembedBaseWidget.helpers template: -> # console.log this @@ -10,4 +18,7 @@ Template.oembedBaseWidget.helpers if this.parsedUrl?.host is 'www.youtube.com' and this.meta?.twitterPlayer? return 'oembedYoutubeWidget' - return 'oembedUrlWidget' \ No newline at end of file + if this.parsedUrl?.host is 'open.spotify.com' and this.meta?.ogAudio? + return 'oembedSpotifyWidget' + + return 'oembedUrlWidget' diff --git a/packages/rocketchat-oembed/client/oembedSpotifyWidget.html b/packages/rocketchat-oembed/client/oembedSpotifyWidget.html new file mode 100644 index 00000000000..3c56d518347 --- /dev/null +++ b/packages/rocketchat-oembed/client/oembedSpotifyWidget.html @@ -0,0 +1,13 @@ + diff --git a/packages/rocketchat-oembed/package.js b/packages/rocketchat-oembed/package.js index fc9d4ff799c..058a28613a3 100644 --- a/packages/rocketchat-oembed/package.js +++ b/packages/rocketchat-oembed/package.js @@ -23,6 +23,7 @@ Package.onUse(function(api) { api.addFiles('client/oembedAudioWidget.html', 'client'); api.addFiles('client/oembedYoutubeWidget.html', 'client'); + api.addFiles('client/oembedSpotifyWidget.html', 'client'); api.addFiles('client/oembedUrlWidget.html', 'client'); api.addFiles('client/oembedUrlWidget.coffee', 'client'); diff --git a/packages/rocketchat-spotify/package.js b/packages/rocketchat-spotify/package.js new file mode 100644 index 00000000000..8f290aed806 --- /dev/null +++ b/packages/rocketchat-spotify/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: 'rocketchat:spotify', + version: '0.0.1', + summary: 'Message pre-processor that will translate spotify on messages', + git: '' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'underscore', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles('spotify.coffee', ['server','client']); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-spotify/spotify.coffee b/packages/rocketchat-spotify/spotify.coffee new file mode 100644 index 00000000000..63cf5f02665 --- /dev/null +++ b/packages/rocketchat-spotify/spotify.coffee @@ -0,0 +1,48 @@ +### +# Spotify a named function that will process Spotify (ex: spotify:track:1q6IK1l4qpYykOaWaLJkWG) +# @param {Object} message - The message object +### + +class Spotify + process = (message, source, callback) -> + if _.trim source + # Separate text in code blocks and non code blocks + msgParts = source.split(/(```\w*[\n\ ]?[\s\S]*?```+?)/) + + for part, index in msgParts + # Verify if this part is code + codeMatch = part.match(/```(\w*)[\n\ ]?([\s\S]*?)```+?/) + if not codeMatch? + callback message, msgParts, part, index + + @transform: (message) -> + urls = [] + if Array.isArray message.urls + urls = urls.concat message.urls + + changed = false + + process message, message.msg, (message, msgParts, part) -> + re = /spotify:([^:]+):(\S+)/g + while match = re.exec(part) + url = "https://open.spotify.com/" + _.escape match[1] + "/" + _.escape match[2] + urls.push {'url': url} + changed = true + + # Re-mount message + if changed + message.urls = urls + + return message + + @render: (message) -> + process message, message.html, (message, msgParts, part, index) -> + msgParts[index] = part.replace /(^|\s)spotify:([^:]+):(\S+)(\s|$)/g, (match, p1, p2, p3, p4) -> + url = 'https://open.spotify.com/' + _.escape p2 + '/' + _.escape p3 + return p1 + 'spotify:' + p2 + ':' + p3 + '' + p4 + message.html = msgParts.join('') + + return message + +RocketChat.callbacks.add 'beforeSaveMessage', Spotify.transform, RocketChat.callbacks.priority.LOW +RocketChat.callbacks.add 'renderMessage', Spotify.render From cb19364a13d95a16d81924ea7be4f4dd29b8ef4a Mon Sep 17 00:00:00 2001 From: Reid Wakida Date: Sat, 26 Sep 2015 19:51:43 -1000 Subject: [PATCH 25/33] Fix #911. Set MAIL_URL variable at Meteor.startup to ensure RocketChat.settings have been initialized. RocketChat settings are loaded ASAP as of 39fe1365b58638e0fa9e66ade8c1705b05ea3692 RocketChat.settings depends on Meteor.settings under the covers, but Meteor.settings doesn't seem to return values until Meteor is fully started. Thus, we can only call RocketChat.settings.get after Meteor.startup --- packages/rocketchat-lib/settings/server/startup.coffee | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-lib/settings/server/startup.coffee b/packages/rocketchat-lib/settings/server/startup.coffee index fa2ee4b028a..a87e373d619 100644 --- a/packages/rocketchat-lib/settings/server/startup.coffee +++ b/packages/rocketchat-lib/settings/server/startup.coffee @@ -94,7 +94,8 @@ RocketChat.settings.add 'Layout_Login_Terms', 'By proceeding to create your acco RocketChat.settings.add 'Statistics_opt_out', false, { type: 'boolean', group: false } -if process?.env? and not process.env['MAIL_URL']? and RocketChat.settings.get('SMTP_Host') and RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') - process.env['MAIL_URL'] = "smtp://" + encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + encodeURIComponent(RocketChat.settings.get('SMTP_Host')) - if RocketChat.settings.get('SMTP_Port') - process.env['MAIL_URL'] += ':' + parseInt(RocketChat.settings.get('SMTP_Port')) +Meteor.startup -> + if process?.env? and not process.env['MAIL_URL']? and RocketChat.settings.get('SMTP_Host') and RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') + process.env['MAIL_URL'] = "smtp://" + encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + encodeURIComponent(RocketChat.settings.get('SMTP_Host')) + if RocketChat.settings.get('SMTP_Port') + process.env['MAIL_URL'] += ':' + parseInt(RocketChat.settings.get('SMTP_Port')) \ No newline at end of file From ecb2770a305ac3fd34bda810d3b83fd584a3d05e Mon Sep 17 00:00:00 2001 From: kakawait Date: Sun, 27 Sep 2015 15:39:57 +0200 Subject: [PATCH 26/33] Encapsulate spotify integration inside rocketchat:spotify package. No more inside rocketchat:oembed. Remove rocketchat:spotify from default list of packages inside `.meteor/{packages,version}` --- .meteor/packages | 1 - .meteor/versions | 1 - packages/rocketchat-oembed/client/baseWidget.coffee | 8 ++++---- packages/rocketchat-oembed/package.js | 1 - .../client/oembedSpotifyWidget.html | 2 +- packages/rocketchat-spotify/client/widget.coffee | 3 +++ packages/rocketchat-spotify/package.js | 5 +++++ packages/rocketchat-spotify/spotify.coffee | 10 +++++----- 8 files changed, 18 insertions(+), 13 deletions(-) rename packages/{rocketchat-oembed => rocketchat-spotify}/client/oembedSpotifyWidget.html (90%) create mode 100644 packages/rocketchat-spotify/client/widget.coffee diff --git a/.meteor/packages b/.meteor/packages index 39b8c2a6a80..2ebba48b6d1 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -41,7 +41,6 @@ rocketchat:oembed rocketchat:slashcommands-invite rocketchat:slashcommands-join rocketchat:slashcommands-leave -rocketchat:spotify rocketchat:statistics rocketchat:webrtc #rocketchat:livechat diff --git a/.meteor/versions b/.meteor/versions index 5f4894dfe86..9f9137e44a7 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -120,7 +120,6 @@ rocketchat:oembed@0.0.1 rocketchat:slashcommands-invite@0.0.1 rocketchat:slashcommands-join@0.0.1 rocketchat:slashcommands-leave@0.0.1 -rocketchat:spotify@0.0.1 rocketchat:statistics@0.0.1 rocketchat:webrtc@0.0.1 rocketchat:wordpress@0.0.1 diff --git a/packages/rocketchat-oembed/client/baseWidget.coffee b/packages/rocketchat-oembed/client/baseWidget.coffee index 63d628f8f78..d07430193a6 100644 --- a/packages/rocketchat-oembed/client/baseWidget.coffee +++ b/packages/rocketchat-oembed/client/baseWidget.coffee @@ -8,7 +8,10 @@ Template.registerHelper 'match', (source, regex) -> Template.oembedBaseWidget.helpers template: -> - # console.log this + # console.log this + if this._overrideTemplate + return this._overrideTemplate + if this.headers?.contentType?.match(/image\/.*/)? return 'oembedImageWidget' @@ -18,7 +21,4 @@ Template.oembedBaseWidget.helpers if this.parsedUrl?.host is 'www.youtube.com' and this.meta?.twitterPlayer? return 'oembedYoutubeWidget' - if this.parsedUrl?.host is 'open.spotify.com' and this.meta?.ogAudio? - return 'oembedSpotifyWidget' - return 'oembedUrlWidget' diff --git a/packages/rocketchat-oembed/package.js b/packages/rocketchat-oembed/package.js index 058a28613a3..fc9d4ff799c 100644 --- a/packages/rocketchat-oembed/package.js +++ b/packages/rocketchat-oembed/package.js @@ -23,7 +23,6 @@ Package.onUse(function(api) { api.addFiles('client/oembedAudioWidget.html', 'client'); api.addFiles('client/oembedYoutubeWidget.html', 'client'); - api.addFiles('client/oembedSpotifyWidget.html', 'client'); api.addFiles('client/oembedUrlWidget.html', 'client'); api.addFiles('client/oembedUrlWidget.coffee', 'client'); diff --git a/packages/rocketchat-oembed/client/oembedSpotifyWidget.html b/packages/rocketchat-spotify/client/oembedSpotifyWidget.html similarity index 90% rename from packages/rocketchat-oembed/client/oembedSpotifyWidget.html rename to packages/rocketchat-spotify/client/oembedSpotifyWidget.html index 3c56d518347..b1f5384a2b6 100644 --- a/packages/rocketchat-oembed/client/oembedSpotifyWidget.html +++ b/packages/rocketchat-spotify/client/oembedSpotifyWidget.html @@ -3,7 +3,7 @@
Spotify
{{#if match meta.ogAudio "spotify:artist:\\S+"}} - {{{meta.ogTitle}}}
+ {{{meta.ogTitle}}}
{{else}} {{{replace meta.ogDescription ", an? (?:song|album) by (.+?) on Spotify" " - $1" true}}}
{{/if}} diff --git a/packages/rocketchat-spotify/client/widget.coffee b/packages/rocketchat-spotify/client/widget.coffee new file mode 100644 index 00000000000..23b76ca2335 --- /dev/null +++ b/packages/rocketchat-spotify/client/widget.coffee @@ -0,0 +1,3 @@ +Template.oembedBaseWidget.onCreated () -> + if this.data?.parsedUrl?.host is 'open.spotify.com' and this.data?.meta?.ogAudio? + this.data._overrideTemplate = 'oembedSpotifyWidget' diff --git a/packages/rocketchat-spotify/package.js b/packages/rocketchat-spotify/package.js index 8f290aed806..3bf70a29597 100644 --- a/packages/rocketchat-spotify/package.js +++ b/packages/rocketchat-spotify/package.js @@ -10,10 +10,15 @@ Package.onUse(function(api) { api.use([ 'coffeescript', + 'templating', 'underscore', + 'rocketchat:oembed@0.0.1', 'rocketchat:lib@0.0.1' ]); + api.addFiles('client/widget.coffee', 'client'); + api.addFiles('client/oembedSpotifyWidget.html', 'client'); + api.addFiles('spotify.coffee', ['server','client']); }); diff --git a/packages/rocketchat-spotify/spotify.coffee b/packages/rocketchat-spotify/spotify.coffee index 63cf5f02665..921ded82b3b 100644 --- a/packages/rocketchat-spotify/spotify.coffee +++ b/packages/rocketchat-spotify/spotify.coffee @@ -1,5 +1,5 @@ ### -# Spotify a named function that will process Spotify (ex: spotify:track:1q6IK1l4qpYykOaWaLJkWG) +# Spotify a named function that will process Spotify links or syntaxes (ex: spotify:track:1q6IK1l4qpYykOaWaLJkWG) # @param {Object} message - The message object ### @@ -23,7 +23,7 @@ class Spotify changed = false process message, message.msg, (message, msgParts, part) -> - re = /spotify:([^:]+):(\S+)/g + re = /(?:^|\s)spotify:([^:]+):(\S+)(?:\s|$)/g while match = re.exec(part) url = "https://open.spotify.com/" + _.escape match[1] + "/" + _.escape match[2] urls.push {'url': url} @@ -37,9 +37,9 @@ class Spotify @render: (message) -> process message, message.html, (message, msgParts, part, index) -> - msgParts[index] = part.replace /(^|\s)spotify:([^:]+):(\S+)(\s|$)/g, (match, p1, p2, p3, p4) -> - url = 'https://open.spotify.com/' + _.escape p2 + '/' + _.escape p3 - return p1 + 'spotify:' + p2 + ':' + p3 + '' + p4 + msgParts[index] = part.replace /(^|\s)spotify:([^:]+):(\S+)(\s|$)/g, (match, before, type, id, after) -> + url = 'https://open.spotify.com/' + _.escape type + '/' + _.escape id + return before + 'spotify:' + type + ':' + id + '' + after message.html = msgParts.join('') return message From 02ce2bb20a144195aca93f97658c06f89ddf2277 Mon Sep 17 00:00:00 2001 From: kakawait Date: Sun, 27 Sep 2015 16:12:50 +0200 Subject: [PATCH 27/33] Move helpers from `rocketchat:oembed` to `rocketchat:spotify` --- packages/rocketchat-oembed/client/baseWidget.coffee | 8 -------- .../rocketchat-spotify/client/oembedSpotifyWidget.html | 2 +- packages/rocketchat-spotify/client/widget.coffee | 8 ++++++++ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/rocketchat-oembed/client/baseWidget.coffee b/packages/rocketchat-oembed/client/baseWidget.coffee index d07430193a6..41a6f91006c 100644 --- a/packages/rocketchat-oembed/client/baseWidget.coffee +++ b/packages/rocketchat-oembed/client/baseWidget.coffee @@ -1,11 +1,3 @@ -Template.registerHelper 'replace', (source, find, replace, useRegex) -> - if useRegex is true - find = new RegExp(find) - return source.replace(find, replace) - -Template.registerHelper 'match', (source, regex) -> - return new RegExp(regex).test(source) - Template.oembedBaseWidget.helpers template: -> # console.log this diff --git a/packages/rocketchat-spotify/client/oembedSpotifyWidget.html b/packages/rocketchat-spotify/client/oembedSpotifyWidget.html index b1f5384a2b6..aefa8172fd8 100644 --- a/packages/rocketchat-spotify/client/oembedSpotifyWidget.html +++ b/packages/rocketchat-spotify/client/oembedSpotifyWidget.html @@ -5,7 +5,7 @@ {{#if match meta.ogAudio "spotify:artist:\\S+"}} {{{meta.ogTitle}}}
{{else}} - {{{replace meta.ogDescription ", an? (?:song|album) by (.+?) on Spotify" " - $1" true}}}
+ {{{replace meta.ogDescription ", an? (?:song|album) by (.+?) on Spotify" " - $1" regex=true}}}
{{/if}}
diff --git a/packages/rocketchat-spotify/client/widget.coffee b/packages/rocketchat-spotify/client/widget.coffee index 23b76ca2335..abca5becdce 100644 --- a/packages/rocketchat-spotify/client/widget.coffee +++ b/packages/rocketchat-spotify/client/widget.coffee @@ -1,3 +1,11 @@ +Template.registerHelper 'replace', (source, find, replace, option) -> + if option.hash.regex is true + find = new RegExp(find) + return source.replace(find, replace) + +Template.registerHelper 'match', (source, regex) -> + return new RegExp(regex).test(source) + Template.oembedBaseWidget.onCreated () -> if this.data?.parsedUrl?.host is 'open.spotify.com' and this.data?.meta?.ogAudio? this.data._overrideTemplate = 'oembedSpotifyWidget' From d9d2407ec79914dfddcacaf93ab35d80e56bb5f7 Mon Sep 17 00:00:00 2001 From: "S. Li" Date: Sun, 27 Sep 2015 14:54:00 -0400 Subject: [PATCH 28/33] announce blackberry compatibility --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a9aa93c20f..69e5ce98203 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Get the app for your Android phone: [![Rocket.Chat on Google Play](https://developer.android.com/images/brand/en_app_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.konecty.rocket.chat) -Now compatible with all Android devices as old as version 4.0.x - [dowload here](https://github.com/RocketChat/Rocket.Chat/wiki/Build-the-Android-Cordova-Web-App-and-connect-to-your-own-Rocket.Chat-Server). +Now compatible with all Android devices as old as version 4.0.x - [dowload here](https://github.com/RocketChat/Rocket.Chat/wiki/Build-the-Android-Cordova-Web-App-and-connect-to-your-own-Rocket.Chat-Server), even on BlackBerry Passport! Host your own Rocket.Chat server in four seconds flat: From fc447537b5dd4c37d8b06088e6c0874e4180ce15 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 28 Sep 2015 09:11:47 -0300 Subject: [PATCH 29/33] use RocketBot_Enabled settings --- .meteor/packages | 2 +- .meteor/versions | 1 - packages/rocketchat-hubot/hubot.coffee | 13 +++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.meteor/packages b/.meteor/packages index 79e3bf820ea..2ebba48b6d1 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -44,7 +44,7 @@ rocketchat:slashcommands-leave rocketchat:statistics rocketchat:webrtc #rocketchat:livechat -rocketchat:hubot +#rocketchat:hubot #rocketchat:irc konecty:change-case diff --git a/.meteor/versions b/.meteor/versions index 91f20e0f3c3..9f9137e44a7 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -110,7 +110,6 @@ rocketchat:favico@0.0.1 rocketchat:file@0.0.1 rocketchat:gitlab@0.0.1 rocketchat:highlight@0.0.1 -rocketchat:hubot@0.0.1 rocketchat:ldap@0.0.1 rocketchat:lib@0.0.1 rocketchat:logger@0.0.1 diff --git a/packages/rocketchat-hubot/hubot.coffee b/packages/rocketchat-hubot/hubot.coffee index f3b81a1fd36..25be93b0a6c 100644 --- a/packages/rocketchat-hubot/hubot.coffee +++ b/packages/rocketchat-hubot/hubot.coffee @@ -284,7 +284,10 @@ init = => # RocketBot.hear /^test/i, (res) -> # res.send "Test? TESTING? WE DON'T NEED NO TEST, EVERYTHING WORKS!" - RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW + if RocketChat.settings.get 'RocketBot_Enabled' + RocketChat.callbacks.add 'afterSaveMessage', RocketBotReceiver, RocketChat.callbacks.priority.LOW, 'rocketbot-parser' + else + RocketChat.callbacks.remove 'afterSaveMessage', 'rocketbot-parser' # Meteor.startup -> # console.log RocketBot; @@ -332,8 +335,10 @@ init = => # username: "rocketbot" # action: true -RocketChat.models.Settings.find({ _id: 'RocketBot_Name' }).observe - added: (record) -> +RocketChat.models.Settings.find({ _id: { $in: [ 'RocketBot_Name', 'RocketBot_Enabled'] } }).observe + added: -> init() - changed: (record) -> + changed: -> + init() + removed: -> init() From 2fbb9372dced2c4b783d1a9014c356f604d97658 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 28 Sep 2015 10:24:40 -0300 Subject: [PATCH 30/33] Change when settings are added --- packages/rocketchat-hubot/settings.coffee | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-hubot/settings.coffee b/packages/rocketchat-hubot/settings.coffee index cfd35b23386..3af71fce2aa 100644 --- a/packages/rocketchat-hubot/settings.coffee +++ b/packages/rocketchat-hubot/settings.coffee @@ -1,4 +1,3 @@ -Meteor.startup -> - RocketChat.settings.addGroup 'RocketBot' - RocketChat.settings.add 'RocketBot_Enabled', true, { type: 'boolean', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Enabled' } - RocketChat.settings.add 'RocketBot_Name', 'Rocket.Cat', { type: 'string', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Name', i18nDescription: 'rocketchat-hubot:RocketBot_Name_Description' } +RocketChat.settings.addGroup 'RocketBot' +RocketChat.settings.add 'RocketBot_Enabled', true, { type: 'boolean', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Enabled' } +RocketChat.settings.add 'RocketBot_Name', 'Rocket.Cat', { type: 'string', group: 'RocketBot', i18nLabel: 'rocketchat-hubot:RocketBot_Name', i18nDescription: 'rocketchat-hubot:RocketBot_Name_Description' } From bc847d2228f1aabc8cebeefbb5d5dc4fc9beb127 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 28 Sep 2015 10:36:54 -0300 Subject: [PATCH 31/33] Remove package settings if package is not loaded --- .../settings/lib/rocketchat.coffee | 4 +++- .../settings/server/methods.coffee | 23 +++++++++++++++---- server/startup/settings.coffee | 4 ++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/rocketchat-lib/settings/lib/rocketchat.coffee b/packages/rocketchat-lib/settings/lib/rocketchat.coffee index 797b70cd4d2..3bde2ac5d7f 100644 --- a/packages/rocketchat-lib/settings/lib/rocketchat.coffee +++ b/packages/rocketchat-lib/settings/lib/rocketchat.coffee @@ -4,6 +4,8 @@ ### RocketChat.settings = {} +RocketChat.settings.ts = new Date + RocketChat.settings.get = (_id) -> return Meteor.settings?[_id] @@ -20,4 +22,4 @@ RocketChat.settings.batchSet = (settings, callback) -> Meteor.call 'saveSetting', setting._id, setting.value, callback actions = _.map settings, (setting) -> save(setting) - _(actions).reduceRight(_.wrap, (err, success) -> return callback err, success)() \ No newline at end of file + _(actions).reduceRight(_.wrap, (err, success) -> return callback err, success)() diff --git a/packages/rocketchat-lib/settings/server/methods.coffee b/packages/rocketchat-lib/settings/server/methods.coffee index deac2a9bac5..35ee3c35c7a 100644 --- a/packages/rocketchat-lib/settings/server/methods.coffee +++ b/packages/rocketchat-lib/settings/server/methods.coffee @@ -16,15 +16,22 @@ RocketChat.settings.add = (_id, value, options = {}) -> updateSettings = i18nLabel: options.i18nLabel or _id - i18nDescription: options.i18nDescription if options.i18nDescription? + updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? updateSettings.type = options.type if options.type updateSettings.multiline = options.multiline if options.multiline updateSettings.group = options.group if options.group updateSettings.section = options.section if options.section updateSettings.public = options.public if options.public - return RocketChat.models.Settings.upsert { _id: _id }, { $setOnInsert: { value: value }, $set: updateSettings } + upsertChanges = { $setOnInsert: { value: value }, $set: updateSettings } + + if options.persistent is true + upsertChanges.$unset = { ts: true } + else + upsertChanges.$set.ts = new Date + + return RocketChat.models.Settings.upsert { _id: _id }, upsertChanges ### # Add a setting group @@ -38,12 +45,18 @@ RocketChat.settings.addGroup = (_id, options = {}) -> # console.log '[functions] RocketChat.settings.addGroup -> '.green, 'arguments:', arguments updateSettings = - i18nLabel: options.i18nLabel or _id - i18nDescription: options.i18nDescription if options.i18nDescription? type: 'group' + i18nLabel: options.i18nLabel or _id + + updateSettings.i18nDescription = options.i18nDescription if options.i18nDescription? - return RocketChat.models.Settings.upsert { _id: _id }, { $set: updateSettings } + upsertChanges = { $set: updateSettings } + if options.persistent is true + upsertChanges.$unset = { ts: true } + else + upsertChanges.$set.ts = new Date + return RocketChat.models.Settings.upsert { _id: _id }, upsertChanges ### # Remove a setting by id diff --git a/server/startup/settings.coffee b/server/startup/settings.coffee index e69de29bb2d..c7a0e66ccda 100644 --- a/server/startup/settings.coffee +++ b/server/startup/settings.coffee @@ -0,0 +1,4 @@ +# Remove runtime settings (non-persistent) +Meteor.startup -> + RocketChat.models.Settings.remove({ ts: { $lt: RocketChat.settings.ts } }) + From 585c827db11efdb32cb99fa107fc19baa21bc510 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Mon, 28 Sep 2015 13:58:46 -0300 Subject: [PATCH 32/33] Hide instead of deleting unused settings --- packages/rocketchat-lib/settings/server/publication.coffee | 1 + server/startup/settings.coffee | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-lib/settings/server/publication.coffee b/packages/rocketchat-lib/settings/server/publication.coffee index 0c5a2b9161e..3b2aa1c8dda 100644 --- a/packages/rocketchat-lib/settings/server/publication.coffee +++ b/packages/rocketchat-lib/settings/server/publication.coffee @@ -2,6 +2,7 @@ Meteor.publish 'settings', (ids = []) -> console.log '[publish] settings'.green filter = + hidden: { $ne: true } public: true if ids.length > 0 diff --git a/server/startup/settings.coffee b/server/startup/settings.coffee index c7a0e66ccda..83132ad9a0e 100644 --- a/server/startup/settings.coffee +++ b/server/startup/settings.coffee @@ -1,4 +1,4 @@ # Remove runtime settings (non-persistent) Meteor.startup -> - RocketChat.models.Settings.remove({ ts: { $lt: RocketChat.settings.ts } }) + RocketChat.models.Settings.update({ ts: { $lt: RocketChat.settings.ts } }, { $set: { hidden: true } }) From dc4431acf76664ad885b29b2f646df12bd65cc8c Mon Sep 17 00:00:00 2001 From: kakawait Date: Tue, 29 Sep 2015 12:07:41 +0200 Subject: [PATCH 33/33] Enhance Spotify transformer to handle syntax with 4 groups like `spotify:user:spotifydiscover:playlist:2RjlnjirDnFioPelxk0g4M` --- packages/rocketchat-spotify/spotify.coffee | 28 ++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/rocketchat-spotify/spotify.coffee b/packages/rocketchat-spotify/spotify.coffee index 921ded82b3b..b6b1b729e5e 100644 --- a/packages/rocketchat-spotify/spotify.coffee +++ b/packages/rocketchat-spotify/spotify.coffee @@ -13,7 +13,7 @@ class Spotify # Verify if this part is code codeMatch = part.match(/```(\w*)[\n\ ]?([\s\S]*?)```+?/) if not codeMatch? - callback message, msgParts, part, index + callback message, msgParts, index, part @transform: (message) -> urls = [] @@ -22,11 +22,15 @@ class Spotify changed = false - process message, message.msg, (message, msgParts, part) -> - re = /(?:^|\s)spotify:([^:]+):(\S+)(?:\s|$)/g + process message, message.msg, (message, msgParts, index, part) -> + re = /(?:^|\s)spotify:([^:]+):([^:]+)(?::([^:]+))?(?::(\S+))?(?:\s|$)/g while match = re.exec(part) - url = "https://open.spotify.com/" + _.escape match[1] + "/" + _.escape match[2] - urls.push {'url': url} + data = match.slice(1) + path = _.map data, (value) -> + return _.escape(value) + .join '/' + url = 'https://open.spotify.com/' + path + urls.push {'url': url, 'source': 'spotify:' + data.join ':'} changed = true # Re-mount message @@ -36,11 +40,15 @@ class Spotify return message @render: (message) -> - process message, message.html, (message, msgParts, part, index) -> - msgParts[index] = part.replace /(^|\s)spotify:([^:]+):(\S+)(\s|$)/g, (match, before, type, id, after) -> - url = 'https://open.spotify.com/' + _.escape type + '/' + _.escape id - return before + 'spotify:' + type + ':' + id + '' + after - message.html = msgParts.join('') + process message, message.html, (message, msgParts, index, part) -> + if Array.isArray message.urls + for item in message.urls + if item.source + quotedSource = item.source.replace /[\\^$.*+?()[\]{}|]/g, '\\$&' + re = new RegExp '(^|\\s)' + quotedSource + '(\\s|$)', 'g' + part = part.replace re, '$1' + item.source + '$2' + msgParts[index] = part + message.html = msgParts.join '' return message