From 79c023e0fb6c24d77c9c06a4bb34b5247565e0fb Mon Sep 17 00:00:00 2001 From: Aaron Ogle Date: Tue, 10 Apr 2018 15:09:23 -0500 Subject: [PATCH 01/20] add redhat dockerfile to master (#10408) * add redhat dockerfile to master * Add redhat dockerfile to set-version helper script --- .docker/Dockerfile.rhel | 44 ++++++++++++++++++++++++++++++++++++++++ .docker/licenses/LICENSE | 22 ++++++++++++++++++++ .scripts/set-version.js | 1 + 3 files changed, 67 insertions(+) create mode 100644 .docker/Dockerfile.rhel create mode 100644 .docker/licenses/LICENSE diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel new file mode 100644 index 000000000000..ee41afb5a6d6 --- /dev/null +++ b/.docker/Dockerfile.rhel @@ -0,0 +1,44 @@ +FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 + +ENV RC_VERSION 0.63.1 + +MAINTAINER buildmaster@rocket.chat + +LABEL name="Rocket.Chat" \ + vendor="Rocket.Chat" \ + version="${RC_VERSION}" \ + release="1" \ + url="https://rocket.chat" \ + summary="The Ultimate Open Source Web Chat Platform" \ + description="The Ultimate Open Source Web Chat Platform" \ + run="docker run -d --name ${NAME} ${IMAGE}" + + +# This is ugly... But for some reason npm and node aren't available at this stage. +ENV PATH /opt/rh/rh-nodejs8/root/usr/bin:/opt/app-root/src/node_modules/.bin/:/opt/app-root/src/.npm-global/bin/:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +RUN set -x \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0E163286C20D07B9787EBE9FD7F9D0414FD08104 \ + && curl -SLf "https://releases.rocket.chat/${RC_VERSION}/download" -o rocket.chat.tgz \ + && curl -SLf "https://releases.rocket.chat/${RC_VERSION}/asc" -o rocket.chat.tgz.asc \ + && gpg --verify rocket.chat.tgz.asc \ + && tar -zxf rocket.chat.tgz -C /opt/app-root/src/ \ + && cd /opt/app-root/src/bundle/programs/server \ + && npm install + +COPY licenses /licenses + +VOLUME /opt/app-root/src/uploads + +WORKDIR /opt/app-root/src/bundle + +ENV DEPLOY_METHOD=docker-redhat \ + NODE_ENV=production \ + MONGO_URL=mongodb://mongo:27017/rocketchat \ + HOME=/tmp \ + PORT=3000 \ + ROOT_URL=http://localhost:3000 + +EXPOSE 3000 + +CMD ["node", "main.js"] diff --git a/.docker/licenses/LICENSE b/.docker/licenses/LICENSE new file mode 100644 index 000000000000..b3435a104885 --- /dev/null +++ b/.docker/licenses/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017 Rocket.Chat Technologies Corp. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/.scripts/set-version.js b/.scripts/set-version.js index e21035ee3a99..cad1c3b602da 100644 --- a/.scripts/set-version.js +++ b/.scripts/set-version.js @@ -25,6 +25,7 @@ const files = [ './.circleci/snap.sh', './.circleci/update-releases.sh', './.docker/Dockerfile', + './.docker/Dockerfile.rhel', './packages/rocketchat-lib/rocketchat.info' ]; const readFile = (file) => { From 05ae7d6c44ca00722b610a168dbfd41da26e05b9 Mon Sep 17 00:00:00 2001 From: Bradley Hilton Date: Tue, 17 Apr 2018 02:06:10 -0500 Subject: [PATCH 02/20] Release 0.63.2 (#10476) * [FIX] Even TypeErrors with SAML (#10475) * Bump version to 0.63.2 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 18 ++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 14 ++++++++++++++ package.json | 2 +- packages/meteor-accounts-saml/saml_utils.js | 4 ++-- packages/rocketchat-lib/rocketchat.info | 2 +- 9 files changed, 40 insertions(+), 8 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 08bc27b32bf3..33f6da117eb7 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.63.1 +ENV RC_VERSION 0.63.2 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index ee41afb5a6d6..a342fbb619fd 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.63.1 +ENV RC_VERSION 0.63.2 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 1c523399eede..9a8a304445a7 100644 --- a/.github/history.json +++ b/.github/history.json @@ -12207,5 +12207,23 @@ "web-flow" ] } + ], + "0.63.2": [ + { + "pr": "10475", + "title": "[FIX] Even TypeErrors with SAML", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10408", + "title": "add redhat dockerfile to master", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index e904c24b4384..f6680c7bc61c 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.63.1"), + appMarketingVersion = (defaultText = "0.63.2"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index a0be6fc1e43e..f7d412f91bf9 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.63.1 + RC_VERSION=0.63.2 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index 23102f27536a..d8b67eb2bb48 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,18 @@ +# 0.63.2 +`2018-04-17 · 1 🐛 · 1 🔍` + +### 🐛 Bug fixes + +- Even TypeErrors with SAML ([#10475](https://github.com/RocketChat/Rocket.Chat/pull/10475)) + +
+🔍 Minor changes + +- add redhat dockerfile to master ([#10408](https://github.com/RocketChat/Rocket.Chat/pull/10408)) + +
+ # 0.63.1 `2018-04-07 · 5 🐛 · 3 👩‍💻👨‍💻` diff --git a/package.json b/package.json index f4f231619594..35fa4f0fb14e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.63.1", + "version": "0.63.2", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/meteor-accounts-saml/saml_utils.js b/packages/meteor-accounts-saml/saml_utils.js index 30eec18b57ba..75bf93fb8d2e 100644 --- a/packages/meteor-accounts-saml/saml_utils.js +++ b/packages/meteor-accounts-saml/saml_utils.js @@ -396,9 +396,9 @@ SAML.prototype.validateResponse = function(samlResponse, relayState, callback) { attributes.forEach(function(attribute) { const value = self.getElement(attribute, 'AttributeValue'); if (typeof value[0] === 'string') { - profile[attribute.$.Name] = value[0]; + profile[attribute.$.Name.value] = value[0]; } else { - profile[attribute.$.Name] = value[0]._; + profile[attribute.$.Name.value] = value[0]._; } }); } diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index eb0c811e983b..7cecdbe3af67 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.63.1" + "version": "0.63.2" } From 304bc490c437dde81cb1916cd35642e3f06a7407 Mon Sep 17 00:00:00 2001 From: Nathaniel Suchy Date: Tue, 17 Apr 2018 13:55:07 -0400 Subject: [PATCH 03/20] Added one2mail.info to default blocked domain list (#10218) --- packages/rocketchat-lib/server/lib/defaultBlockedDomainsList.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rocketchat-lib/server/lib/defaultBlockedDomainsList.js b/packages/rocketchat-lib/server/lib/defaultBlockedDomainsList.js index 35e7cf29b8b0..c67721546495 100644 --- a/packages/rocketchat-lib/server/lib/defaultBlockedDomainsList.js +++ b/packages/rocketchat-lib/server/lib/defaultBlockedDomainsList.js @@ -586,6 +586,7 @@ RocketChat.emailDomainDefaultBlackList = [ 'one-time.email', 'oneoffemail.com', 'oneoffmail.com', + 'one2mail.info', 'onewaymail.com', 'onlatedotcom.info', 'online.ms', From 68a2b6d00da7304b60d8e1fbc6a206193fb97096 Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Wed, 18 Apr 2018 00:54:41 -0300 Subject: [PATCH 04/20] [FIX] The 'channel.messages' REST API Endpoint error (#10485) --- packages/rocketchat-api/server/v1/channels.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/v1/channels.js b/packages/rocketchat-api/server/v1/channels.js index 5cf1321164ad..7581a3e63fed 100644 --- a/packages/rocketchat-api/server/v1/channels.js +++ b/packages/rocketchat-api/server/v1/channels.js @@ -519,7 +519,7 @@ RocketChat.API.v1.addRoute('channels.members', { authRequired: true }, { RocketChat.API.v1.addRoute('channels.messages', { authRequired: true }, { get() { - const findResult = findChannelByIdOrName({ params: this.requestParams(), checkedArchived: false }); + const findResult = findChannelByIdOrName({ params: this.requestParams(), checkedArchived: false, returnUsernames: true }); const { offset, count } = this.getPaginationItems(); const { sort, fields, query } = this.parseJsonQuery(); From 3eeab6e1b36ad2b8f32bcecdf58a8e4bcfd8fbb7 Mon Sep 17 00:00:00 2001 From: Bradley Hilton Date: Wed, 18 Apr 2018 23:11:23 -0500 Subject: [PATCH 05/20] Bump version to 0.63.3 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 5 +++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 7 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 33f6da117eb7..29d86348653e 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.63.2 +ENV RC_VERSION 0.63.3 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index a342fbb619fd..ea0cfa69e399 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.63.2 +ENV RC_VERSION 0.63.3 MAINTAINER buildmaster@rocket.chat diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index f6680c7bc61c..6a548f34d4d8 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.63.2"), + appMarketingVersion = (defaultText = "0.63.3"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index f7d412f91bf9..e678fa2fe60c 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.63.2 + RC_VERSION=0.63.3 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index d8b67eb2bb48..6f0e32191556 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,8 @@ + +## 0.63.3 (2018-04-19) + + + # 0.63.2 `2018-04-17 · 1 🐛 · 1 🔍` diff --git a/package.json b/package.json index 35fa4f0fb14e..59dea8552ffb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.63.2", + "version": "0.63.3", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 7cecdbe3af67..cb7cf9f0df19 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.63.2" + "version": "0.63.3" } From 439891225f40998916a8340836b5a1465aadb439 Mon Sep 17 00:00:00 2001 From: Bradley Hilton Date: Wed, 18 Apr 2018 23:20:08 -0500 Subject: [PATCH 06/20] Add the history of v0.63.3 --- .github/history.json | 39 +++++++++++++++++++++++++++++++++++++++ HISTORY.md | 19 +++++++++++++++++-- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/.github/history.json b/.github/history.json index 9a8a304445a7..6fb0b23b0481 100644 --- a/.github/history.json +++ b/.github/history.json @@ -12225,5 +12225,44 @@ "geekgonecrazy" ] } + ], + "0.63.3": [ + { + "pr": "10485", + "title": "[FIX] The 'channel.messages' REST API Endpoint error", + "userLogin": "rafaelks", + "milestone": "0.64.0", + "contributors": [ + "rafaelks", + "web-flow" + ] + }, + { + "pr": "10218", + "title": "Added one2mail.info to default blocked domains list", + "userLogin": "nsuchy", + "milestone": "0.64.0", + "contributors": [ + "nsuchy", + "web-flow" + ] + }, + { + "pr": "10476", + "title": "Release 0.63.2", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336", + "web-flow" + ] + }, + { + "pr": "10475", + "title": "[FIX] Even TypeErrors with SAML", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336" + ] + } ] } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 6f0e32191556..194be181e5ce 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,8 +1,23 @@ - -## 0.63.3 (2018-04-19) +# 0.63.3 +`2018-04-18 · 2 🐛 · 2 🔍 · 1 👩‍💻👨‍💻` +### 🐛 Bug fixes + +- The 'channel.messages' REST API Endpoint error ([#10485](https://github.com/RocketChat/Rocket.Chat/pull/10485)) +- Even TypeErrors with SAML ([#10475](https://github.com/RocketChat/Rocket.Chat/pull/10475)) + +
+🔍 Minor changes + +- Added one2mail.info to default blocked domains list ([#10218](https://github.com/RocketChat/Rocket.Chat/pull/10218) by [@nsuchy](https://github.com/nsuchy)) +- Release 0.63.2 ([#10476](https://github.com/RocketChat/Rocket.Chat/pull/10476)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 +- [@nsuchy](https://github.com/nsuchy) # 0.63.2 `2018-04-17 · 1 🐛 · 1 🔍` From 00972585360946a015c1362a1daed84acf80b36b Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 21 Apr 2018 00:49:31 -0300 Subject: [PATCH 07/20] Bump version to 0.64.0-rc.0 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 746 +++++++++++++++++++++++- .sandstorm/sandstorm-pkgdef.capnp | 2 +- .scripts/set-version.js | 4 +- .travis/snap.sh | 2 +- HISTORY.md | 116 +++- package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 9 files changed, 866 insertions(+), 12 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index f356f252eda5..e99f37a9126f 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-develop +ENV RC_VERSION 0.64.0-rc.0 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 935c47ff829f..fc6ca325de32 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-develop +ENV RC_VERSION 0.64.0-rc.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index f5c429911baf..76c647dd93eb 100644 --- a/.github/history.json +++ b/.github/history.json @@ -12264,5 +12264,749 @@ "graywolf336" ] } + ], + "0.64.0-rc.0": [ + { + "pr": "10532", + "title": "Included missing lib for migrations", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell", + "rodrigok" + ] + }, + { + "pr": "10502", + "title": "[NEW] Option to mute group mentions (@all and @here)", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "9906", + "title": "[NEW] GDPR - Right to access and Data Portability", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "9922", + "title": "[BREAK] Validate incoming message schema", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto", + "ggazzo" + ] + }, + { + "pr": "9950", + "title": "[NEW] Broadcast Channels", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "web-flow", + "sampaiodiego", + "rodrigok" + ] + }, + { + "pr": "10480", + "title": "[FIX] Add user object to responses in /*.files Rest endpoints", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto", + "rodrigok" + ] + }, + { + "pr": "10517", + "title": "[NEW] Option to ignore users on channels", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "gdelavald", + "web-flow", + "karlprieb" + ] + }, + { + "pr": "10110", + "title": "[NEW] Search Provider Framework", + "userLogin": "tkurz", + "milestone": "0.64.0", + "contributors": [ + "tkurz", + "web-flow" + ] + }, + { + "pr": "10473", + "title": "[FIX] Missing user data on files uploaded through the API", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "10498", + "title": "[FIX] Rename method to clean history of messages", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10410", + "title": "[FIX] REST spotlight API wasn't allowing searches with # and @", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10505", + "title": "Develop sync", + "userLogin": "graywolf336", + "contributors": [ + "geekgonecrazy", + "web-flow", + "graywolf336", + "nsuchy", + "rodrigok", + "rafaelks", + "engelgabriel" + ] + }, + { + "pr": "10442", + "title": "[NEW] REST API endpoint `/directory`", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10482", + "title": "[FIX] Dropdown elements were using old styles", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii" + ] + }, + { + "pr": "10513", + "title": "Fix: Remove \"secret\" from REST endpoint /settings.oauth response", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10403", + "title": "[FIX] Directory sort and column sizes were wrong", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "web-flow", + "karlprieb" + ] + }, + { + "pr": "10299", + "title": "[FIX] REST API OAuth services endpoint were missing fields and flag to indicate custom services", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10446", + "title": "[FIX] Error messages weren't been displayed when email verification fails", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10454", + "title": "[FIX] Wrong column positions in the directory search for users", + "userLogin": "sumedh123", + "milestone": "0.64.0", + "contributors": [ + "sumedh123", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10463", + "title": "[FIX] Custom fields was misaligned in registration form", + "userLogin": "dschuan", + "milestone": "0.64.0", + "contributors": [ + "dschuan", + "web-flow" + ] + }, + { + "pr": "10341", + "title": "[FIX] Unique identifier file not really being unique", + "userLogin": "abernix", + "milestone": "0.64.0", + "contributors": [ + "abernix", + "web-flow", + "geekgonecrazy" + ] + }, + { + "pr": "10335", + "title": "[OTHER] More Listeners for Apps & Utilize Promises inside Apps", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10404", + "title": "[FIX] Empty panel after changing a user's username", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "10418", + "title": " [FIX] Russian translation of \"False\"", + "userLogin": "strangerintheq", + "contributors": [ + "strangerintheq", + "web-flow" + ] + }, + { + "pr": "10496", + "title": "[FIX] Links being embedded inside of blockquotes", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10485", + "title": "[FIX] The 'channel.messages' REST API Endpoint error", + "userLogin": "rafaelks", + "milestone": "0.64.0", + "contributors": [ + "rafaelks", + "web-flow" + ] + }, + { + "pr": "10487", + "title": "[OTHER] Develop sync", + "userLogin": "graywolf336", + "contributors": [ + "geekgonecrazy", + "web-flow", + "graywolf336" + ] + }, + { + "pr": "10358", + "title": "[FIX] Button on user info contextual bar scrolling with the content", + "userLogin": "okaybroda", + "milestone": "0.64.0", + "contributors": [ + "okaybroda", + "ggazzo", + "web-flow", + "karlprieb", + "graywolf336" + ] + }, + { + "pr": "9824", + "title": "[FIX] \"Idle Time Limit\" using milliseconds instead of seconds", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii", + "web-flow", + "geekgonecrazy", + "sampaiodiego", + "graywolf336" + ] + }, + { + "pr": "10259", + "title": "[NEW] Body of the payload on an incoming webhook is included on the request object", + "userLogin": "Hudell", + "milestone": "0.64.0", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "10387", + "title": "[FIX] Missing i18n translation key for \"Unread\"", + "userLogin": "Hudell", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "9729", + "title": "[FIX] Owner unable to delete channel or group from APIs", + "userLogin": "c0dzilla", + "milestone": "0.64.0", + "contributors": [ + "c0dzilla", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "10371", + "title": "[NEW] REST endpoint to recover forgotten password", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10354", + "title": "[NEW] REST endpoint to report messages", + "userLogin": "MarcosSpessatto", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10108", + "title": "[NEW] Livechat setting to customize ended conversation message", + "userLogin": "renatobecker", + "milestone": "0.64.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "10369", + "title": "[FIX] Livechat translation files being ignored", + "userLogin": "renatobecker", + "milestone": "0.64.0", + "contributors": [ + "renatobecker", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "7964", + "title": "[NEW] Twilio MMS support for LiveChat integration", + "userLogin": "t3hchipmunk", + "milestone": "0.64.0", + "contributors": [ + "t3hchipmunk", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "6673", + "title": "[FIX] Missing page \"not found\"", + "userLogin": "Prakharsvnit", + "milestone": "0.64.0", + "contributors": [ + "Prakharsvnit", + "web-flow", + "geekgonecrazy", + "karlprieb" + ] + }, + { + "pr": "10083", + "title": "[FIX] \"Highlight Words\" wasn't working with more than one word", + "userLogin": "nemaniarjun", + "milestone": "0.64.0", + "contributors": [ + "nemaniarjun", + "gdelavald", + "web-flow" + ] + }, + { + "pr": "10171", + "title": "[FIX] Missing \"Administration\" menu for user with manage-emoji permission", + "userLogin": "c0dzilla", + "milestone": "0.64.0", + "contributors": [ + "c0dzilla", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10395", + "title": "[FIX] Message view mode setting was missing at user's preferences ", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10399", + "title": "[FIX] Profile image was not being shown in user's directory search", + "userLogin": "sumedh123", + "milestone": "0.64.0", + "contributors": [ + "sumedh123", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10342", + "title": "[NEW] REST API endpoint `rooms.favorite` to favorite and unfavorite rooms", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10428", + "title": "[FIX] Wrong positioning of popover when using RTL languages", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10472", + "title": "[FIX] Messages was grouping wrong some times when server is slow", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10225", + "title": "[FIX] GitLab authentication scope was too open, reduced to read only access", + "userLogin": "rafaelks", + "milestone": "0.64.0", + "contributors": [ + "rafaelks", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "10344", + "title": "[FIX] Renaming agent's username within Livechat's department", + "userLogin": "renatobecker", + "milestone": "0.64.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "10394", + "title": "[FIX] Missing RocketApps input types", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "web-flow", + "graywolf336", + "karlprieb" + ] + }, + { + "pr": "10221", + "title": "[FIX] Livechat desktop notifications not being displayed", + "userLogin": "renatobecker", + "milestone": "0.64.0", + "contributors": [ + "renatobecker", + "web-flow" + ] + }, + { + "pr": "10336", + "title": "Change Docker-Compose to use mmapv1 storage engine for mongo", + "userLogin": "geekgonecrazy", + "milestone": "0.64.0", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "10396", + "title": "[NEW] Add internal API to handle room announcements", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10409", + "title": "[FIX] Autocomplete list when inviting a user was partial hidden", + "userLogin": "karlprieb", + "milestone": "0.64.0", + "contributors": [ + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10423", + "title": "[FIX] Remove a user from the user's list when creating a new channel removes the wrong user", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10430", + "title": "[FIX] Room's name was cutting instead of having ellipses on sidebar", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "10435", + "title": "Add some missing translations", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10437", + "title": "[NEW] Add message preview when quoting another message", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10438", + "title": "[FIX] Button to delete rooms by the owners wasn't appearing", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "karlprieb", + "web-flow" + ] + }, + { + "pr": "10439", + "title": "[NEW] Prevent the browser to autocomplete some setting fields", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10441", + "title": "[OTHER] Removed the developer warning on the rest api", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10444", + "title": "[NEW] Shows user's real name on autocomplete popup", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10414", + "title": "[NEW] Automatically trigger Redhat registry build when tagging new release", + "userLogin": "geekgonecrazy", + "milestone": "0.64.0", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "10397", + "title": "Fix and improve vietnamese translation", + "userLogin": "tttt-conan", + "contributors": [ + "tttt-conan", + "TDiNguyen", + "graywolf336", + "web-flow" + ] + }, + { + "pr": "10411", + "title": "[BREAK] The property \"settings\" is no longer available to regular users via rest api", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "9946", + "title": "[FIX] Updated OpenShift Template to take an Image as a Param", + "userLogin": "christianh814", + "contributors": [ + "christianh814", + "web-flow", + "geekgonecrazy" + ] + }, + { + "pr": "10405", + "title": "Use Node 8.9 for CI build", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "9576", + "title": "[FIX] Incoming integrations being able to trigger an empty message with a GET", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10360", + "title": "Update allowed labels for bot", + "userLogin": "TwizzyDizzy", + "contributors": [ + "TwizzyDizzy", + "web-flow" + ] + }, + { + "pr": "10384", + "title": "Remove @core team mention from Pull Request template", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok", + "web-flow" + ] + }, + { + "pr": "10390", + "title": "[FIX] Snaps installations are breaking on avatar requests", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10234", + "title": "New issue template for *Release Process*", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok", + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "10376", + "title": "Master into Develop Branch Sync", + "userLogin": "graywolf336", + "contributors": [ + "sampaiodiego", + "rodrigok", + "web-flow", + "graywolf336" + ] + }, + { + "pr": "10504", + "title": "Release 0.63.3", + "userLogin": "graywolf336", + "contributors": [ + "rafaelks", + "graywolf336" + ] + }, + { + "pr": "10476", + "title": "Release 0.63.2", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336", + "web-flow" + ] + }, + { + "pr": "10408", + "title": "add redhat dockerfile to master", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy" + ] + } ] -} +} \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index b5e3e9786fe8..16648e66dbc1 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-develop"), + appMarketingVersion = (defaultText = "0.64.0-rc.0"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.scripts/set-version.js b/.scripts/set-version.js index cad1c3b602da..74e98540c618 100644 --- a/.scripts/set-version.js +++ b/.scripts/set-version.js @@ -4,7 +4,7 @@ const path = require('path'); const fs = require('fs'); const semver = require('semver'); const inquirer = require('inquirer'); -const execSync = require('child_process').execSync; +// const execSync = require('child_process').execSync; const git = require('simple-git/promise')(process.cwd()); let pkgJson = {}; @@ -92,7 +92,7 @@ git.status() })); }) .then(() => { - execSync('conventional-changelog --config .github/changelog.js -i HISTORY.md -s'); + // execSync('conventional-changelog --config .github/changelog.js -i HISTORY.md -s'); return inquirer.prompt([{ type: 'confirm', diff --git a/.travis/snap.sh b/.travis/snap.sh index c8a57fb46834..e7eec4aa04d3 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-develop + RC_VERSION=0.64.0-rc.0 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index e4d09df6415b..e55e6d791db6 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,116 @@ - -# 0.64.0-develop (2018-04-07) +# 0.64.0 (Under Release Candidate Process) + +## 0.64.0-rc.0 +`2018-04-21 · 2 ️️️⚠️ · 17 🎉 · 38 🐛 · 17 🔍 · 16 👩‍💻👨‍💻` + +### ⚠️ BREAKING CHANGES + +- Validate incoming message schema ([#9922](https://github.com/RocketChat/Rocket.Chat/pull/9922)) +- The property "settings" is no longer available to regular users via rest api ([#10411](https://github.com/RocketChat/Rocket.Chat/pull/10411)) + +### 🎉 New features + +- Option to mute group mentions (@all and @here) ([#10502](https://github.com/RocketChat/Rocket.Chat/pull/10502)) +- GDPR - Right to access and Data Portability ([#9906](https://github.com/RocketChat/Rocket.Chat/pull/9906)) +- Broadcast Channels ([#9950](https://github.com/RocketChat/Rocket.Chat/pull/9950)) +- Option to ignore users on channels ([#10517](https://github.com/RocketChat/Rocket.Chat/pull/10517)) +- Search Provider Framework ([#10110](https://github.com/RocketChat/Rocket.Chat/pull/10110) by [@tkurz](https://github.com/tkurz)) +- REST API endpoint `/directory` ([#10442](https://github.com/RocketChat/Rocket.Chat/pull/10442)) +- Body of the payload on an incoming webhook is included on the request object ([#10259](https://github.com/RocketChat/Rocket.Chat/pull/10259)) +- REST endpoint to recover forgotten password ([#10371](https://github.com/RocketChat/Rocket.Chat/pull/10371)) +- REST endpoint to report messages ([#10354](https://github.com/RocketChat/Rocket.Chat/pull/10354)) +- Livechat setting to customize ended conversation message ([#10108](https://github.com/RocketChat/Rocket.Chat/pull/10108)) +- Twilio MMS support for LiveChat integration ([#7964](https://github.com/RocketChat/Rocket.Chat/pull/7964) by [@t3hchipmunk](https://github.com/t3hchipmunk)) +- REST API endpoint `rooms.favorite` to favorite and unfavorite rooms ([#10342](https://github.com/RocketChat/Rocket.Chat/pull/10342)) +- Add internal API to handle room announcements ([#10396](https://github.com/RocketChat/Rocket.Chat/pull/10396)) +- Add message preview when quoting another message ([#10437](https://github.com/RocketChat/Rocket.Chat/pull/10437)) +- Prevent the browser to autocomplete some setting fields ([#10439](https://github.com/RocketChat/Rocket.Chat/pull/10439)) +- Shows user's real name on autocomplete popup ([#10444](https://github.com/RocketChat/Rocket.Chat/pull/10444)) +- Automatically trigger Redhat registry build when tagging new release ([#10414](https://github.com/RocketChat/Rocket.Chat/pull/10414)) + +### 🐛 Bug fixes + +- Add user object to responses in /*.files Rest endpoints ([#10480](https://github.com/RocketChat/Rocket.Chat/pull/10480)) +- Missing user data on files uploaded through the API ([#10473](https://github.com/RocketChat/Rocket.Chat/pull/10473)) +- Rename method to clean history of messages ([#10498](https://github.com/RocketChat/Rocket.Chat/pull/10498)) +- REST spotlight API wasn't allowing searches with # and @ ([#10410](https://github.com/RocketChat/Rocket.Chat/pull/10410)) +- Dropdown elements were using old styles ([#10482](https://github.com/RocketChat/Rocket.Chat/pull/10482) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) +- Directory sort and column sizes were wrong ([#10403](https://github.com/RocketChat/Rocket.Chat/pull/10403)) +- REST API OAuth services endpoint were missing fields and flag to indicate custom services ([#10299](https://github.com/RocketChat/Rocket.Chat/pull/10299)) +- Error messages weren't been displayed when email verification fails ([#10446](https://github.com/RocketChat/Rocket.Chat/pull/10446)) +- Wrong column positions in the directory search for users ([#10454](https://github.com/RocketChat/Rocket.Chat/pull/10454) by [@sumedh123](https://github.com/sumedh123)) +- Custom fields was misaligned in registration form ([#10463](https://github.com/RocketChat/Rocket.Chat/pull/10463) by [@dschuan](https://github.com/dschuan)) +- Unique identifier file not really being unique ([#10341](https://github.com/RocketChat/Rocket.Chat/pull/10341) by [@abernix](https://github.com/abernix)) +- Empty panel after changing a user's username ([#10404](https://github.com/RocketChat/Rocket.Chat/pull/10404)) +- Russian translation of "False" ([#10418](https://github.com/RocketChat/Rocket.Chat/pull/10418) by [@strangerintheq](https://github.com/strangerintheq)) +- Links being embedded inside of blockquotes ([#10496](https://github.com/RocketChat/Rocket.Chat/pull/10496)) +- The 'channel.messages' REST API Endpoint error ([#10485](https://github.com/RocketChat/Rocket.Chat/pull/10485)) +- Button on user info contextual bar scrolling with the content ([#10358](https://github.com/RocketChat/Rocket.Chat/pull/10358) by [@okaybroda](https://github.com/okaybroda)) +- "Idle Time Limit" using milliseconds instead of seconds ([#9824](https://github.com/RocketChat/Rocket.Chat/pull/9824) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) +- Missing i18n translation key for "Unread" ([#10387](https://github.com/RocketChat/Rocket.Chat/pull/10387)) +- Owner unable to delete channel or group from APIs ([#9729](https://github.com/RocketChat/Rocket.Chat/pull/9729) by [@c0dzilla](https://github.com/c0dzilla)) +- Livechat translation files being ignored ([#10369](https://github.com/RocketChat/Rocket.Chat/pull/10369)) +- Missing page "not found" ([#6673](https://github.com/RocketChat/Rocket.Chat/pull/6673) by [@Prakharsvnit](https://github.com/Prakharsvnit)) +- "Highlight Words" wasn't working with more than one word ([#10083](https://github.com/RocketChat/Rocket.Chat/pull/10083) by [@nemaniarjun](https://github.com/nemaniarjun)) +- Missing "Administration" menu for user with manage-emoji permission ([#10171](https://github.com/RocketChat/Rocket.Chat/pull/10171) by [@c0dzilla](https://github.com/c0dzilla)) +- Message view mode setting was missing at user's preferences ([#10395](https://github.com/RocketChat/Rocket.Chat/pull/10395) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) +- Profile image was not being shown in user's directory search ([#10399](https://github.com/RocketChat/Rocket.Chat/pull/10399) by [@sumedh123](https://github.com/sumedh123)) +- Wrong positioning of popover when using RTL languages ([#10428](https://github.com/RocketChat/Rocket.Chat/pull/10428)) +- Messages was grouping wrong some times when server is slow ([#10472](https://github.com/RocketChat/Rocket.Chat/pull/10472)) +- GitLab authentication scope was too open, reduced to read only access ([#10225](https://github.com/RocketChat/Rocket.Chat/pull/10225)) +- Renaming agent's username within Livechat's department ([#10344](https://github.com/RocketChat/Rocket.Chat/pull/10344)) +- Missing RocketApps input types ([#10394](https://github.com/RocketChat/Rocket.Chat/pull/10394)) +- Livechat desktop notifications not being displayed ([#10221](https://github.com/RocketChat/Rocket.Chat/pull/10221)) +- Autocomplete list when inviting a user was partial hidden ([#10409](https://github.com/RocketChat/Rocket.Chat/pull/10409)) +- Remove a user from the user's list when creating a new channel removes the wrong user ([#10423](https://github.com/RocketChat/Rocket.Chat/pull/10423)) +- Room's name was cutting instead of having ellipses on sidebar ([#10430](https://github.com/RocketChat/Rocket.Chat/pull/10430)) +- Button to delete rooms by the owners wasn't appearing ([#10438](https://github.com/RocketChat/Rocket.Chat/pull/10438)) +- Updated OpenShift Template to take an Image as a Param ([#9946](https://github.com/RocketChat/Rocket.Chat/pull/9946) by [@christianh814](https://github.com/christianh814)) +- Incoming integrations being able to trigger an empty message with a GET ([#9576](https://github.com/RocketChat/Rocket.Chat/pull/9576)) +- Snaps installations are breaking on avatar requests ([#10390](https://github.com/RocketChat/Rocket.Chat/pull/10390)) + +
+🔍 Minor changes + +- Included missing lib for migrations ([#10532](https://github.com/RocketChat/Rocket.Chat/pull/10532)) +- Develop sync ([#10505](https://github.com/RocketChat/Rocket.Chat/pull/10505) by [@nsuchy](https://github.com/nsuchy)) +- Fix: Remove "secret" from REST endpoint /settings.oauth response ([#10513](https://github.com/RocketChat/Rocket.Chat/pull/10513)) +- [OTHER] More Listeners for Apps & Utilize Promises inside Apps ([#10335](https://github.com/RocketChat/Rocket.Chat/pull/10335)) +- [OTHER] Develop sync ([#10487](https://github.com/RocketChat/Rocket.Chat/pull/10487)) +- Change Docker-Compose to use mmapv1 storage engine for mongo ([#10336](https://github.com/RocketChat/Rocket.Chat/pull/10336)) +- Add some missing translations ([#10435](https://github.com/RocketChat/Rocket.Chat/pull/10435)) +- [OTHER] Removed the developer warning on the rest api ([#10441](https://github.com/RocketChat/Rocket.Chat/pull/10441)) +- Fix and improve vietnamese translation ([#10397](https://github.com/RocketChat/Rocket.Chat/pull/10397) by [@TDiNguyen](https://github.com/TDiNguyen) & [@tttt-conan](https://github.com/tttt-conan)) +- Use Node 8.9 for CI build ([#10405](https://github.com/RocketChat/Rocket.Chat/pull/10405)) +- Update allowed labels for bot ([#10360](https://github.com/RocketChat/Rocket.Chat/pull/10360) by [@TwizzyDizzy](https://github.com/TwizzyDizzy)) +- Remove @core team mention from Pull Request template ([#10384](https://github.com/RocketChat/Rocket.Chat/pull/10384)) +- New issue template for *Release Process* ([#10234](https://github.com/RocketChat/Rocket.Chat/pull/10234)) +- Master into Develop Branch Sync ([#10376](https://github.com/RocketChat/Rocket.Chat/pull/10376)) +- Release 0.63.3 ([#10504](https://github.com/RocketChat/Rocket.Chat/pull/10504)) +- Release 0.63.2 ([#10476](https://github.com/RocketChat/Rocket.Chat/pull/10476)) +- add redhat dockerfile to master ([#10408](https://github.com/RocketChat/Rocket.Chat/pull/10408)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@Prakharsvnit](https://github.com/Prakharsvnit) +- [@TDiNguyen](https://github.com/TDiNguyen) +- [@TwizzyDizzy](https://github.com/TwizzyDizzy) +- [@abernix](https://github.com/abernix) +- [@c0dzilla](https://github.com/c0dzilla) +- [@christianh814](https://github.com/christianh814) +- [@dschuan](https://github.com/dschuan) +- [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) +- [@nemaniarjun](https://github.com/nemaniarjun) +- [@nsuchy](https://github.com/nsuchy) +- [@okaybroda](https://github.com/okaybroda) +- [@strangerintheq](https://github.com/strangerintheq) +- [@sumedh123](https://github.com/sumedh123) +- [@t3hchipmunk](https://github.com/t3hchipmunk) +- [@tkurz](https://github.com/tkurz) +- [@tttt-conan](https://github.com/tttt-conan) # 0.63.3 `2018-04-18 · 2 🐛 · 2 🔍 · 1 👩‍💻👨‍💻` @@ -1957,4 +2067,4 @@ - [@qge](https://github.com/qge) - [@sezinkarli](https://github.com/sezinkarli) - [@szluohua](https://github.com/szluohua) -- [@tgxn](https://github.com/tgxn) +- [@tgxn](https://github.com/tgxn) \ No newline at end of file diff --git a/package.json b/package.json index 338f06f6f129..6c7e439c8d7d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-develop", + "version": "0.64.0-rc.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index d4df12e18636..2106982f5f63 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-develop" + "version": "0.64.0-rc.0" } From bba44acecb2f2cd6bfcde5f430b509207c86552f Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 21 Apr 2018 16:48:35 -0300 Subject: [PATCH 08/20] Bump version to 0.64.0-rc.1 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 31 +++++++++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 12 ++++++++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 49 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index e99f37a9126f..22317a46d64a 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-rc.0 +ENV RC_VERSION 0.64.0-rc.1 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index fc6ca325de32..981fdda92717 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-rc.0 +ENV RC_VERSION 0.64.0-rc.1 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 76c647dd93eb..24ce390d41d3 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13008,5 +13008,36 @@ "geekgonecrazy" ] } + ], + "0.64.0-rc.1": [ + { + "pr": "10545", + "title": "LingoHub based on develop", + "userLogin": "engelgabriel", + "milestone": "0.64.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10544", + "title": "Regression: Revert announcement structure", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald", + "rodrigok", + "web-flow" + ] + }, + { + "pr": "10543", + "title": "Regression: Upload was not working", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 16648e66dbc1..56d655b869b6 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-rc.0"), + appMarketingVersion = (defaultText = "0.64.0-rc.1"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index e7eec4aa04d3..7c107a923b6e 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-rc.0 + RC_VERSION=0.64.0-rc.1 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index e55e6d791db6..98d8b4fd4a78 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,18 @@ # 0.64.0 (Under Release Candidate Process) +## 0.64.0-rc.1 +`2018-04-21 · 3 🔍` + +
+🔍 Minor changes + +- LingoHub based on develop ([#10545](https://github.com/RocketChat/Rocket.Chat/pull/10545)) +- Regression: Revert announcement structure ([#10544](https://github.com/RocketChat/Rocket.Chat/pull/10544)) +- Regression: Upload was not working ([#10543](https://github.com/RocketChat/Rocket.Chat/pull/10543)) + +
+ ## 0.64.0-rc.0 `2018-04-21 · 2 ️️️⚠️ · 17 🎉 · 38 🐛 · 17 🔍 · 16 👩‍💻👨‍💻` diff --git a/package.json b/package.json index 6c7e439c8d7d..28fecae62245 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-rc.0", + "version": "0.64.0-rc.1", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 2106982f5f63..11ded984abec 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-rc.0" + "version": "0.64.0-rc.1" } From 71ab8e42594e9f1ee3e1df58a72f554a04ecfa83 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Mon, 23 Apr 2018 22:05:32 -0300 Subject: [PATCH 09/20] Bump version to 0.64.0-rc.2 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 49 +++++++++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 18 +++++++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 73 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 22317a46d64a..ae67b7ef4243 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-rc.1 +ENV RC_VERSION 0.64.0-rc.2 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 981fdda92717..35ba3866f5f1 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-rc.1 +ENV RC_VERSION 0.64.0-rc.2 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 24ce390d41d3..cce634bc2a92 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13039,5 +13039,54 @@ "rodrigok" ] } + ], + "0.64.0-rc.2": [ + { + "pr": "10549", + "title": "Deps update", + "userLogin": "engelgabriel", + "milestone": "0.64.0", + "contributors": [ + "engelgabriel", + "web-flow" + ] + }, + { + "pr": "10560", + "title": "Regression: /api/v1/settings.oauth not returning clientId for Twitter", + "userLogin": "cardoso", + "milestone": "0.64.0", + "contributors": [ + "cardoso", + "web-flow" + ] + }, + { + "pr": "10555", + "title": "Regression: Webhooks breaking due to restricted test", + "userLogin": "rodrigok", + "milestone": "0.64.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10559", + "title": "Regression: Rooms and Apps weren't playing nice with each other", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10554", + "title": "Regression: Fix announcement bar being displayed without content", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 56d655b869b6..69864b0fafbf 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-rc.1"), + appMarketingVersion = (defaultText = "0.64.0-rc.2"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index 7c107a923b6e..aceb748b17f7 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-rc.1 + RC_VERSION=0.64.0-rc.2 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index 98d8b4fd4a78..fcfcdb2b0ec6 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,24 @@ # 0.64.0 (Under Release Candidate Process) +## 0.64.0-rc.2 +`2018-04-23 · 5 🔍 · 1 👩‍💻👨‍💻` + +
+🔍 Minor changes + +- Deps update ([#10549](https://github.com/RocketChat/Rocket.Chat/pull/10549)) +- Regression: /api/v1/settings.oauth not returning clientId for Twitter ([#10560](https://github.com/RocketChat/Rocket.Chat/pull/10560) by [@cardoso](https://github.com/cardoso)) +- Regression: Webhooks breaking due to restricted test ([#10555](https://github.com/RocketChat/Rocket.Chat/pull/10555)) +- Regression: Rooms and Apps weren't playing nice with each other ([#10559](https://github.com/RocketChat/Rocket.Chat/pull/10559)) +- Regression: Fix announcement bar being displayed without content ([#10554](https://github.com/RocketChat/Rocket.Chat/pull/10554)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@cardoso](https://github.com/cardoso) + ## 0.64.0-rc.1 `2018-04-21 · 3 🔍` diff --git a/package.json b/package.json index da729faa3364..25b454f50c70 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-rc.1", + "version": "0.64.0-rc.2", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 11ded984abec..6021198dbd47 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-rc.1" + "version": "0.64.0-rc.2" } From 198e458d7ef35664cca62532ff1b135637868951 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 24 Apr 2018 17:44:17 -0300 Subject: [PATCH 10/20] Bump version to 0.64.0-rc.3 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 39 +++++++++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 20 +++++++++++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 65 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index ae67b7ef4243..4e8e95e84497 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-rc.2 +ENV RC_VERSION 0.64.0-rc.3 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 35ba3866f5f1..98d5da14867c 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-rc.2 +ENV RC_VERSION 0.64.0-rc.3 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index cce634bc2a92..42152abf5134 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13088,5 +13088,44 @@ "gdelavald" ] } + ], + "0.64.0-rc.3": [ + { + "pr": "10550", + "title": "[FIX] Wordpress oAuth authentication wasn't behaving correctly", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii" + ] + }, + { + "pr": "10553", + "title": "Regression: Inconsistent response of settings.oauth endpoint", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.0", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10571", + "title": "Regression: Remove added mentions on quote/reply", + "userLogin": "gdelavald", + "milestone": "0.64.0", + "contributors": [ + "gdelavald", + "rodrigok" + ] + }, + { + "pr": "10573", + "title": "Regression: Attachments and fields incorrectly failing on validation", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 69864b0fafbf..da6e654c3a76 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-rc.2"), + appMarketingVersion = (defaultText = "0.64.0-rc.3"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index aceb748b17f7..d1de5c713739 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-rc.2 + RC_VERSION=0.64.0-rc.3 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index fcfcdb2b0ec6..690db2bc9052 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,26 @@ # 0.64.0 (Under Release Candidate Process) +## 0.64.0-rc.3 +`2018-04-24 · 1 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` + +### 🐛 Bug fixes + +- Wordpress oAuth authentication wasn't behaving correctly ([#10550](https://github.com/RocketChat/Rocket.Chat/pull/10550) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) + +
+🔍 Minor changes + +- Regression: Inconsistent response of settings.oauth endpoint ([#10553](https://github.com/RocketChat/Rocket.Chat/pull/10553)) +- Regression: Remove added mentions on quote/reply ([#10571](https://github.com/RocketChat/Rocket.Chat/pull/10571)) +- Regression: Attachments and fields incorrectly failing on validation ([#10573](https://github.com/RocketChat/Rocket.Chat/pull/10573)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) + ## 0.64.0-rc.2 `2018-04-23 · 5 🔍 · 1 👩‍💻👨‍💻` diff --git a/package.json b/package.json index 25b454f50c70..320b3f8a2a0e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-rc.2", + "version": "0.64.0-rc.3", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 6021198dbd47..e048a52ba360 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-rc.2" + "version": "0.64.0-rc.3" } From e7e18a74b7313d7760f5bca8181ec6614ff6842d Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Thu, 26 Apr 2018 00:56:56 -0300 Subject: [PATCH 11/20] Bump version to 0.64.0-rc.4 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 41 +++++++++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 2 +- .travis/snap.sh | 2 +- HISTORY.md | 24 +++++++++++++++ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 71 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 4e8e95e84497..cc5cc1212c25 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-rc.3 +ENV RC_VERSION 0.64.0-rc.4 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 98d5da14867c..5d94131affe5 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-rc.3 +ENV RC_VERSION 0.64.0-rc.4 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 42152abf5134..0686d324dfb3 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13127,5 +13127,46 @@ "graywolf336" ] } + ], + "0.64.0-rc.4": [ + { + "pr": "10558", + "title": "[FIX] Switch buttons were cutting in RTL mode", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "10574", + "title": "[NEW] Add information regarding Zapier and Bots to the integrations page", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10575", + "title": "Regression: Rocket.Chat App author link opens in same window", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii", + "web-flow" + ] + }, + { + "pr": "10503", + "title": "[FIX] Stop Firefox announcement overflowing viewport", + "userLogin": "brendangadd", + "milestone": "0.64.0", + "contributors": [ + "brendangadd", + "web-flow" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index da6e654c3a76..2ae3ae090211 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = ( appVersion = 62, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-rc.3"), + appMarketingVersion = (defaultText = "0.64.0-rc.4"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index d1de5c713739..15d1924ddab3 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-rc.3 + RC_VERSION=0.64.0-rc.4 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index 690db2bc9052..90716ae30e25 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,30 @@ # 0.64.0 (Under Release Candidate Process) +## 0.64.0-rc.4 +` · 1 🎉 · 2 🐛 · 1 🔍 · 2 👩‍💻👨‍💻` + +### 🎉 New features + +- Add information regarding Zapier and Bots to the integrations page ([#10574](https://github.com/RocketChat/Rocket.Chat/pull/10574)) + +### 🐛 Bug fixes + +- Switch buttons were cutting in RTL mode ([#10558](https://github.com/RocketChat/Rocket.Chat/pull/10558)) +- Stop Firefox announcement overflowing viewport ([#10503](https://github.com/RocketChat/Rocket.Chat/pull/10503) by [@brendangadd](https://github.com/brendangadd)) + +
+🔍 Minor changes + +- Regression: Rocket.Chat App author link opens in same window ([#10575](https://github.com/RocketChat/Rocket.Chat/pull/10575) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@brendangadd](https://github.com/brendangadd) +- [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) + ## 0.64.0-rc.3 `2018-04-24 · 1 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` diff --git a/package.json b/package.json index 320b3f8a2a0e..cbf812a78352 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-rc.3", + "version": "0.64.0-rc.4", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index e048a52ba360..d02a139ab09f 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-rc.3" + "version": "0.64.0-rc.4" } From 59f88e2c3c2908efd5e2e07e36e54eeffddd5748 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 28 Apr 2018 00:28:44 -0300 Subject: [PATCH 12/20] Bump version to 0.64.0 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 70 ++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 4 +- .travis/snap.sh | 2 +- HISTORY.md | 105 ++++++------------------ package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 104 insertions(+), 85 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index cc5cc1212c25..e6ae34351674 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0-rc.4 +ENV RC_VERSION 0.64.0 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 5d94131affe5..58d204382c25 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0-rc.4 +ENV RC_VERSION 0.64.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 0686d324dfb3..0ad08923e227 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13168,5 +13168,75 @@ "web-flow" ] } + ], + "0.64.0": [ + { + "pr": "10591", + "title": "Regression: Various search provider fixes", + "userLogin": "tkurz", + "milestone": "0.64.0", + "contributors": [ + "tkurz", + "web-flow", + "engelgabriel", + "sampaiodiego" + ] + }, + { + "pr": "10596", + "title": "Regression: /api/v1/settings.oauth not sending needed info for SAML & CAS", + "userLogin": "cardoso", + "milestone": "0.64.0", + "contributors": [ + "cardoso", + "web-flow" + ] + }, + { + "pr": "10598", + "title": "Regression: Apps and Livechats not getting along well with each other", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10551", + "title": " [FIX] Missing \"Administration\" menu for users with some administration permissions", + "userLogin": "kaiiiiiiiii", + "milestone": "0.64.0", + "contributors": [ + "kaiiiiiiiii" + ] + }, + { + "pr": "10599", + "title": "[FIX] Member list search with no results", + "userLogin": "ggazzo", + "milestone": "0.64.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "10586", + "title": "Development: Add Visual Studio Code debugging configuration", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "10576", + "title": "[FIX] Integrations with room data not having the usernames filled in", + "userLogin": "graywolf336", + "milestone": "0.64.0", + "contributors": [ + "graywolf336", + "sampaiodiego", + "web-flow" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 2ae3ae090211..75e3898206e9 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -19,9 +19,9 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Rocket.Chat"), - appVersion = 62, # Increment this for every release. + appVersion = 63, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0-rc.4"), + appMarketingVersion = (defaultText = "0.64.0"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index 15d1924ddab3..500bd78da026 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0-rc.4 + RC_VERSION=0.64.0 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index 90716ae30e25..7c969eecfc4d 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,82 +1,6 @@ -# 0.64.0 (Under Release Candidate Process) - -## 0.64.0-rc.4 -` · 1 🎉 · 2 🐛 · 1 🔍 · 2 👩‍💻👨‍💻` - -### 🎉 New features - -- Add information regarding Zapier and Bots to the integrations page ([#10574](https://github.com/RocketChat/Rocket.Chat/pull/10574)) - -### 🐛 Bug fixes - -- Switch buttons were cutting in RTL mode ([#10558](https://github.com/RocketChat/Rocket.Chat/pull/10558)) -- Stop Firefox announcement overflowing viewport ([#10503](https://github.com/RocketChat/Rocket.Chat/pull/10503) by [@brendangadd](https://github.com/brendangadd)) - -
-🔍 Minor changes - -- Regression: Rocket.Chat App author link opens in same window ([#10575](https://github.com/RocketChat/Rocket.Chat/pull/10575) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) - -
- -### 👩‍💻👨‍💻 Contributors 😍 - -- [@brendangadd](https://github.com/brendangadd) -- [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) - -## 0.64.0-rc.3 -`2018-04-24 · 1 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` - -### 🐛 Bug fixes - -- Wordpress oAuth authentication wasn't behaving correctly ([#10550](https://github.com/RocketChat/Rocket.Chat/pull/10550) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) - -
-🔍 Minor changes - -- Regression: Inconsistent response of settings.oauth endpoint ([#10553](https://github.com/RocketChat/Rocket.Chat/pull/10553)) -- Regression: Remove added mentions on quote/reply ([#10571](https://github.com/RocketChat/Rocket.Chat/pull/10571)) -- Regression: Attachments and fields incorrectly failing on validation ([#10573](https://github.com/RocketChat/Rocket.Chat/pull/10573)) - -
- -### 👩‍💻👨‍💻 Contributors 😍 - -- [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) - -## 0.64.0-rc.2 -`2018-04-23 · 5 🔍 · 1 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Deps update ([#10549](https://github.com/RocketChat/Rocket.Chat/pull/10549)) -- Regression: /api/v1/settings.oauth not returning clientId for Twitter ([#10560](https://github.com/RocketChat/Rocket.Chat/pull/10560) by [@cardoso](https://github.com/cardoso)) -- Regression: Webhooks breaking due to restricted test ([#10555](https://github.com/RocketChat/Rocket.Chat/pull/10555)) -- Regression: Rooms and Apps weren't playing nice with each other ([#10559](https://github.com/RocketChat/Rocket.Chat/pull/10559)) -- Regression: Fix announcement bar being displayed without content ([#10554](https://github.com/RocketChat/Rocket.Chat/pull/10554)) - -
- -### 👩‍💻👨‍💻 Contributors 😍 - -- [@cardoso](https://github.com/cardoso) - -## 0.64.0-rc.1 -`2018-04-21 · 3 🔍` - -
-🔍 Minor changes - -- LingoHub based on develop ([#10545](https://github.com/RocketChat/Rocket.Chat/pull/10545)) -- Regression: Revert announcement structure ([#10544](https://github.com/RocketChat/Rocket.Chat/pull/10544)) -- Regression: Upload was not working ([#10543](https://github.com/RocketChat/Rocket.Chat/pull/10543)) - -
- -## 0.64.0-rc.0 -`2018-04-21 · 2 ️️️⚠️ · 17 🎉 · 38 🐛 · 17 🔍 · 16 👩‍💻👨‍💻` +# 0.64.0 +` · 2 ️️️⚠️ · 18 🎉 · 44 🐛 · 33 🔍 · 18 👩‍💻👨‍💻` ### ⚠️ BREAKING CHANGES @@ -102,9 +26,13 @@ - Prevent the browser to autocomplete some setting fields ([#10439](https://github.com/RocketChat/Rocket.Chat/pull/10439)) - Shows user's real name on autocomplete popup ([#10444](https://github.com/RocketChat/Rocket.Chat/pull/10444)) - Automatically trigger Redhat registry build when tagging new release ([#10414](https://github.com/RocketChat/Rocket.Chat/pull/10414)) +- Add information regarding Zapier and Bots to the integrations page ([#10574](https://github.com/RocketChat/Rocket.Chat/pull/10574)) ### 🐛 Bug fixes +- Missing "Administration" menu for users with some administration permissions ([#10551](https://github.com/RocketChat/Rocket.Chat/pull/10551) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) +- Member list search with no results ([#10599](https://github.com/RocketChat/Rocket.Chat/pull/10599)) +- Integrations with room data not having the usernames filled in ([#10576](https://github.com/RocketChat/Rocket.Chat/pull/10576)) - Add user object to responses in /*.files Rest endpoints ([#10480](https://github.com/RocketChat/Rocket.Chat/pull/10480)) - Missing user data on files uploaded through the API ([#10473](https://github.com/RocketChat/Rocket.Chat/pull/10473)) - Rename method to clean history of messages ([#10498](https://github.com/RocketChat/Rocket.Chat/pull/10498)) @@ -143,10 +71,17 @@ - Updated OpenShift Template to take an Image as a Param ([#9946](https://github.com/RocketChat/Rocket.Chat/pull/9946) by [@christianh814](https://github.com/christianh814)) - Incoming integrations being able to trigger an empty message with a GET ([#9576](https://github.com/RocketChat/Rocket.Chat/pull/9576)) - Snaps installations are breaking on avatar requests ([#10390](https://github.com/RocketChat/Rocket.Chat/pull/10390)) +- Wordpress oAuth authentication wasn't behaving correctly ([#10550](https://github.com/RocketChat/Rocket.Chat/pull/10550) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii)) +- Switch buttons were cutting in RTL mode ([#10558](https://github.com/RocketChat/Rocket.Chat/pull/10558)) +- Stop Firefox announcement overflowing viewport ([#10503](https://github.com/RocketChat/Rocket.Chat/pull/10503) by [@brendangadd](https://github.com/brendangadd))
🔍 Minor changes +- Regression: Various search provider fixes ([#10591](https://github.com/RocketChat/Rocket.Chat/pull/10591) by [@tkurz](https://github.com/tkurz)) +- Regression: /api/v1/settings.oauth not sending needed info for SAML & CAS ([#10596](https://github.com/RocketChat/Rocket.Chat/pull/10596) by [@cardoso](https://github.com/cardoso)) +- Regression: Apps and Livechats not getting along well with each other ([#10598](https://github.com/RocketChat/Rocket.Chat/pull/10598)) +- Development: Add Visual Studio Code debugging configuration ([#10586](https://github.com/RocketChat/Rocket.Chat/pull/10586)) - Included missing lib for migrations ([#10532](https://github.com/RocketChat/Rocket.Chat/pull/10532)) - Develop sync ([#10505](https://github.com/RocketChat/Rocket.Chat/pull/10505) by [@nsuchy](https://github.com/nsuchy)) - Fix: Remove "secret" from REST endpoint /settings.oauth response ([#10513](https://github.com/RocketChat/Rocket.Chat/pull/10513)) @@ -164,6 +99,18 @@ - Release 0.63.3 ([#10504](https://github.com/RocketChat/Rocket.Chat/pull/10504)) - Release 0.63.2 ([#10476](https://github.com/RocketChat/Rocket.Chat/pull/10476)) - add redhat dockerfile to master ([#10408](https://github.com/RocketChat/Rocket.Chat/pull/10408)) +- LingoHub based on develop ([#10545](https://github.com/RocketChat/Rocket.Chat/pull/10545)) +- Regression: Revert announcement structure ([#10544](https://github.com/RocketChat/Rocket.Chat/pull/10544)) +- Regression: Upload was not working ([#10543](https://github.com/RocketChat/Rocket.Chat/pull/10543)) +- Deps update ([#10549](https://github.com/RocketChat/Rocket.Chat/pull/10549)) +- Regression: /api/v1/settings.oauth not returning clientId for Twitter ([#10560](https://github.com/RocketChat/Rocket.Chat/pull/10560) by [@cardoso](https://github.com/cardoso)) +- Regression: Webhooks breaking due to restricted test ([#10555](https://github.com/RocketChat/Rocket.Chat/pull/10555)) +- Regression: Rooms and Apps weren't playing nice with each other ([#10559](https://github.com/RocketChat/Rocket.Chat/pull/10559)) +- Regression: Fix announcement bar being displayed without content ([#10554](https://github.com/RocketChat/Rocket.Chat/pull/10554)) +- Regression: Inconsistent response of settings.oauth endpoint ([#10553](https://github.com/RocketChat/Rocket.Chat/pull/10553)) +- Regression: Remove added mentions on quote/reply ([#10571](https://github.com/RocketChat/Rocket.Chat/pull/10571)) +- Regression: Attachments and fields incorrectly failing on validation ([#10573](https://github.com/RocketChat/Rocket.Chat/pull/10573)) +- Regression: Rocket.Chat App author link opens in same window ([#10575](https://github.com/RocketChat/Rocket.Chat/pull/10575) by [@kaiiiiiiiii](https://github.com/kaiiiiiiiii))
@@ -173,7 +120,9 @@ - [@TDiNguyen](https://github.com/TDiNguyen) - [@TwizzyDizzy](https://github.com/TwizzyDizzy) - [@abernix](https://github.com/abernix) +- [@brendangadd](https://github.com/brendangadd) - [@c0dzilla](https://github.com/c0dzilla) +- [@cardoso](https://github.com/cardoso) - [@christianh814](https://github.com/christianh814) - [@dschuan](https://github.com/dschuan) - [@kaiiiiiiiii](https://github.com/kaiiiiiiiii) diff --git a/package.json b/package.json index 74eccc9ff2a7..5eb5190b7b4d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0-rc.4", + "version": "0.64.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index d02a139ab09f..1f8f89064b53 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0-rc.4" + "version": "0.64.0" } From f8c99e2204070373ac23ef23abc1409435d930b5 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Thu, 3 May 2018 11:23:51 -0300 Subject: [PATCH 13/20] Bump version to 0.64.1 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .github/history.json | 64 +++++++++++++++++++++++++ .sandstorm/sandstorm-pkgdef.capnp | 4 +- .travis/snap.sh | 2 +- HISTORY.md | 27 ++++++++++- package.json | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- 8 files changed, 97 insertions(+), 8 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index e6ae34351674..6be25ee156e0 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.0 +ENV RC_VERSION 0.64.1 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 58d204382c25..85ddcf0b78a3 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.0 +ENV RC_VERSION 0.64.1 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 0ad08923e227..841f01c85e21 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13238,5 +13238,69 @@ "web-flow" ] } + ], + "0.64.1": [ + { + "pr": "10597", + "title": "[NEW] Store the last sent message to show bellow the room's name by default", + "userLogin": "graywolf336", + "milestone": "0.64.1", + "contributors": [ + "graywolf336", + "engelgabriel", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "10529", + "title": "Support passing extra connection options to the Mongo driver", + "userLogin": "saplla", + "milestone": "0.64.1", + "contributors": [ + "saplla", + "web-flow", + "engelgabriel" + ] + }, + { + "pr": "10615", + "title": "[FIX] E-mails were hidden some information", + "userLogin": "rodrigok", + "milestone": "0.64.1", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10611", + "title": "Regression: Updating an App on multi-instance servers wasn't working", + "userLogin": "graywolf336", + "milestone": "0.64.1", + "contributors": [ + "graywolf336", + "engelgabriel", + "web-flow" + ] + }, + { + "pr": "10627", + "title": "[FIX] Regression on 0.64.0 was freezing the application when posting some URLs", + "userLogin": "rodrigok", + "milestone": "0.64.1", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "10648", + "title": "Dependencies update", + "userLogin": "engelgabriel", + "milestone": "0.64.1", + "contributors": [ + "engelgabriel" + ] + } ] } \ No newline at end of file diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 75e3898206e9..4fe2d8db5c1b 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -19,9 +19,9 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Rocket.Chat"), - appVersion = 63, # Increment this for every release. + appVersion = 64, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.0"), + appMarketingVersion = (defaultText = "0.64.1"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index 500bd78da026..8e3c9c444132 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.0 + RC_VERSION=0.64.1 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index 7c969eecfc4d..ef12e8436614 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,31 @@ +# 0.64.1 +` · 1 🎉 · 2 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` + +### 🎉 New features + +- Store the last sent message to show bellow the room's name by default ([#10597](https://github.com/RocketChat/Rocket.Chat/pull/10597)) + +### 🐛 Bug fixes + +- E-mails were hidden some information ([#10615](https://github.com/RocketChat/Rocket.Chat/pull/10615)) +- Regression on 0.64.0 was freezing the application when posting some URLs ([#10627](https://github.com/RocketChat/Rocket.Chat/pull/10627)) + +
+🔍 Minor changes + +- Support passing extra connection options to the Mongo driver ([#10529](https://github.com/RocketChat/Rocket.Chat/pull/10529) by [@saplla](https://github.com/saplla)) +- Regression: Updating an App on multi-instance servers wasn't working ([#10611](https://github.com/RocketChat/Rocket.Chat/pull/10611)) +- Dependencies update ([#10648](https://github.com/RocketChat/Rocket.Chat/pull/10648)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@saplla](https://github.com/saplla) + # 0.64.0 -` · 2 ️️️⚠️ · 18 🎉 · 44 🐛 · 33 🔍 · 18 👩‍💻👨‍💻` +`2018-04-28 · 2 ️️️⚠️ · 18 🎉 · 44 🐛 · 33 🔍 · 18 👩‍💻👨‍💻` ### ⚠️ BREAKING CHANGES diff --git a/package.json b/package.json index 9cd5af9c12c1..d73a855e7497 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.0", + "version": "0.64.1", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index 1f8f89064b53..d20b3b0080fc 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.0" + "version": "0.64.1" } From 105715ef270a49f1cdb7c6fbb266e0453c1b294f Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 18 May 2018 18:56:03 -0300 Subject: [PATCH 14/20] Release 0.64.2 (#10812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * changed saml integration to store data on mongo instead of memory * Update saml_server.js * [FIX] Fix create channel, when created a readonly channel (#10665) [FIX] Channel owner was being set as muted when creating a read-only channel * Correct links to Rocket.Chat documentation (#10674) Correct links in README file * Fix flickering on message-box emoji icon (#10678) [FIX] Message box emoji icon was flickering when typing a text * add `npm run postinstall` into build script (#10524) Add `npm run postinstall` into example build script * [FIX] Improve desktop notification formatting (#10445) * Improved notification formatting * Fixed lint issues * Changed body format * Fixed the problem of missing descriptions on message attachments (#10705) * [BREAK] Improvements to notifications logic (#10686) [NEW] Improvements to notifications logic * LingoHub Update :rocket: (#10691) Manual push by LingoHub User: Rodrigo Nascimento. Project: Rocket.Chat Made with :heart: by https://lingohub.com * [NEW] Setup Wizard (#10523) * welcome * . * stylelint * new ilustration * new layout * . * implements dicts * added all setup wizard settings to wizard * fix some setup wizard css * fix setup wizard js linter errors * remove old setup wizard templaates * setup wizard has just one main tag now * setup wizard registration fields filter is more readable * add register server page to setup wizard * fix setup wizard progress bar on RTL * setup wizard is registering users * Add setup wizard tests, routes and fix batch * fix setup wizard tests * add api test back * comment rocketchat:google-natural-language package and remove logs * add some translation keys for setup wizard * remove old setup wizard template * fix sort code on setup wizard * fix getWizardSetting method * new migration for setupwizard * setup wizard setting migration * fix setupwizard migration * Update versions * fix some setup wizard code logic * fix setup wizard registerServer setting * rever package-lock.json * rever google-natural-language .npm folder * rever meteor packages file and add setup wizard * remove some default values from setup wizard settings * add advocacy option on setup wizard industry setting * change key name to setting to make the filter more readable on setup wizard * change key name to setting to make the filter more readable on setup wizard * add findWizardSettings on models Settings and handle errors of getWizardSettings method * change setting to key to make the filter more readable on setup wizard * fix setup wizard settings filter map * remove serverHasAdminUser method on setup wizard * fix setup wizard tests * fix setup wizard final step workspace link * fix setup wizard tests * [FIX] Improve wordpress OAuth settings (#10724) [NEW] Add more options for Wordpress OAuth configuration * [NEW] Add /api/v1/channels.roles & /api/v1/groups.roles (#10607) [NEW] Add REST endpoints `channels.roles` & `groups.roles` * Changes source of text for announcement modal content (#10733) [FIX] Regression: Empty content on announcement modal * [FIX] Send a message when muted returns inconsistent result in chat.sendMessage (#10720) * Change the message that returns, when a muted or blocked user tries to send a message using that endpoint * Remove origin provide to sendMessage method, simply throwing an error when the user is muted or blocked * More improvements on send notifications logic (#10736) * Denormalize the User’s Highlights * Find subscriptions for each type of notification * Change email preference values * General improvements * Use just one query to get all subscriptions to notify * Get hightlights from subscriptions on method notifyUsersOnMessage * Keep compatibility of emailNotifications preference in subscription save * Prevent group mentions on large rooms * Bump version to 0.64.2-rc.0 * Fix notifications for direct messages (#10760) * Add setting and expose prometheus on port 9100 (#10766) * Add setting and expose prometheus on port 9100 * Prometheus: Add number of connected users * Send statistics to prometheus * Prometheus: Add methods, subscriptions and callbacks data * Prometheus: Add metrics of REST API calls * Prometheus: Record subscriptions time * Add metrics to notifications * Wizard improvements (#10776) * Change wizard state from boolean to `pending`, `in_progress` or `completed` * Add migration to change the wizard setting to new values and fix the old migration * Make the wizard responsive for small screens * Do not publish wizard settings to the client * Do not show wizard for unlogged users after admin was created * Add badge back to push notifications (#10779) * Better metric for notifications (#10786) * Improvement to push notifications on direct messages (#10788) * Prometheus: Improve metric names (#10789) * Bump version to 0.64.2-rc.1 * [FIX] Not escaping special chars on mentions (#10793) * Regression: Fix wrong wizard field name (#10804) * Prometheus: Fix notification metric (#10803) * Regression: Autorun of wizard was not destroyed after completion (#10802) * Prometheus: Add metric to track hooks time (#10798) * Bump version to 0.64.2-rc.2 * Prevent setup wizard redirects (#10811) * Prevent setup wizard redirects * Fix setup wizard layout * Prometheus: Track user agent * Bump version to 0.64.2 --- .docker/Dockerfile | 2 +- .docker/Dockerfile.rhel | 2 +- .eslintrc | 1 + .github/history.json | 276 ++++ .meteor/packages | 1 + .meteor/versions | 1 + .sandstorm/sandstorm-pkgdef.capnp | 4 +- .travis/snap.sh | 2 +- HISTORY.md | 53 +- README.md | 36 +- client/routes/router.js | 16 + client/startup/userSetUtcOffset.js | 2 +- example-build-run.sh | 1 + package.json | 2 +- packages/meteor-accounts-saml/saml_server.js | 27 +- packages/rocketchat-api/package.js | 1 - packages/rocketchat-api/server/api.js | 19 +- .../rocketchat-api/server/default/metrics.js | 8 - packages/rocketchat-api/server/v1/channels.js | 11 + packages/rocketchat-api/server/v1/groups.js | 12 + packages/rocketchat-api/server/v1/users.js | 7 + .../server/converters/messages.js | 8 +- packages/rocketchat-assets/server/assets.js | 7 +- .../server/callbacks.js | 2 +- packages/rocketchat-i18n/i18n/af.i18n.json | 2 - packages/rocketchat-i18n/i18n/ar.i18n.json | 2 - packages/rocketchat-i18n/i18n/az.i18n.json | 2 - packages/rocketchat-i18n/i18n/bg.i18n.json | 2 - packages/rocketchat-i18n/i18n/ca.i18n.json | 31 +- packages/rocketchat-i18n/i18n/cs.i18n.json | 102 +- packages/rocketchat-i18n/i18n/da.i18n.json | 146 +- packages/rocketchat-i18n/i18n/de-AT.i18n.json | 2 - packages/rocketchat-i18n/i18n/de.i18n.json | 71 +- packages/rocketchat-i18n/i18n/el.i18n.json | 2 - packages/rocketchat-i18n/i18n/en.i18n.json | 308 ++++- packages/rocketchat-i18n/i18n/eo.i18n.json | 2 - packages/rocketchat-i18n/i18n/es.i18n.json | 2 - packages/rocketchat-i18n/i18n/fa.i18n.json | 2 - packages/rocketchat-i18n/i18n/fi.i18n.json | 2 - packages/rocketchat-i18n/i18n/fr.i18n.json | 79 +- packages/rocketchat-i18n/i18n/hr.i18n.json | 2 - packages/rocketchat-i18n/i18n/hu.i18n.json | 2 - packages/rocketchat-i18n/i18n/id.i18n.json | 2 - packages/rocketchat-i18n/i18n/it.i18n.json | 2 - packages/rocketchat-i18n/i18n/ja.i18n.json | 2 - packages/rocketchat-i18n/i18n/km.i18n.json | 2 - packages/rocketchat-i18n/i18n/ko.i18n.json | 2 - packages/rocketchat-i18n/i18n/ku.i18n.json | 2 - packages/rocketchat-i18n/i18n/lo.i18n.json | 2 - packages/rocketchat-i18n/i18n/lt.i18n.json | 2 - packages/rocketchat-i18n/i18n/lv.i18n.json | 354 ++--- packages/rocketchat-i18n/i18n/mn.i18n.json | 2 - packages/rocketchat-i18n/i18n/ms-MY.i18n.json | 2 - packages/rocketchat-i18n/i18n/nl.i18n.json | 2 - packages/rocketchat-i18n/i18n/no.i18n.json | 2 - packages/rocketchat-i18n/i18n/pl.i18n.json | 2 - packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 2 - packages/rocketchat-i18n/i18n/pt.i18n.json | 2 - packages/rocketchat-i18n/i18n/ro.i18n.json | 2 - packages/rocketchat-i18n/i18n/ru.i18n.json | 184 +-- packages/rocketchat-i18n/i18n/sk-SK.i18n.json | 250 ++-- packages/rocketchat-i18n/i18n/sl-SI.i18n.json | 2 - packages/rocketchat-i18n/i18n/sq.i18n.json | 2 - packages/rocketchat-i18n/i18n/sr.i18n.json | 2 - packages/rocketchat-i18n/i18n/sv.i18n.json | 4 +- packages/rocketchat-i18n/i18n/ta-IN.i18n.json | 2 - packages/rocketchat-i18n/i18n/th-TH.i18n.json | 2 - packages/rocketchat-i18n/i18n/tr.i18n.json | 2 - packages/rocketchat-i18n/i18n/uk.i18n.json | 2 - packages/rocketchat-i18n/i18n/vi-VN.i18n.json | 72 +- packages/rocketchat-i18n/i18n/zh-HK.i18n.json | 2 - packages/rocketchat-i18n/i18n/zh-TW.i18n.json | 2 - packages/rocketchat-i18n/i18n/zh.i18n.json | 2 - packages/rocketchat-lib/lib/callbacks.js | 17 + .../lib/getUserNotificationPreference.js | 28 + .../rocketchat-lib/lib/roomTypes/direct.js | 6 +- packages/rocketchat-lib/package.js | 2 +- packages/rocketchat-lib/rocketchat.info | 2 +- .../server/functions/createRoom.js | 7 +- .../server/functions/notifications/audio.js | 37 + .../server/functions/notifications/desktop.js | 76 + .../server/functions/notifications/email.js | 178 +++ .../server/functions/notifications/index.js | 64 + .../server/functions/notifications/mobile.js | 90 ++ .../server/lib/PushNotification.js | 1 + packages/rocketchat-lib/server/lib/debug.js | 12 +- packages/rocketchat-lib/server/lib/metrics.js | 147 +- .../server/lib/notifyUsersOnMessage.js | 63 +- .../rocketchat-lib/server/lib/roomTypes.js | 3 + .../server/lib/sendEmailOnMessage.js | 269 ---- .../server/lib/sendNotificationsOnMessage.js | 624 +++------ .../server/methods/sendMessage.js | 4 +- .../rocketchat-lib/server/models/Settings.js | 4 + .../server/models/Subscriptions.js | 180 ++- .../rocketchat-lib/server/startup/settings.js | 1226 ++++++++++++++++- .../.app/i18n/ca.i18n.json | 2 +- .../.app/i18n/cs.i18n.json | 2 +- .../.app/i18n/da.i18n.json | 24 +- .../.app/i18n/fa.i18n.json | 2 +- .../.app/i18n/lv.i18n.json | 34 +- .../.app/i18n/ru.i18n.json | 2 +- .../.app/i18n/sk-SK.i18n.json | 50 +- packages/rocketchat-mentions/Mentions.js | 3 +- .../rocketchat-mentions/server/Mentions.js | 15 +- packages/rocketchat-mentions/server/server.js | 26 +- .../rocketchat-mentions/tests/client.tests.js | 12 +- .../rocketchat-mentions/tests/server.tests.js | 38 +- .../methods/saveNotificationSettings.js | 33 +- .../server/models/Subscriptions.js | 108 +- .../client/setupWizard.html | 196 +++ .../client/setupWizard.js | 304 ++++ packages/rocketchat-setup-wizard/package.js | 17 + .../server/lib/getWizardSettings.js | 9 + .../server/functions/get.js | 22 + .../client/imports/components/message-box.css | 1 + .../imports/components/setup-wizard.css | 477 +++++++ .../client/imports/forms/input.css | 4 + .../client/imports/forms/select.css | 10 +- packages/rocketchat-theme/client/main.css | 1 + .../client/accountPreferences.html | 7 +- .../client/accountPreferences.js | 8 + packages/rocketchat-ui-admin/client/admin.js | 11 +- .../rocketchat-ui-master/client/main.html | 66 +- packages/rocketchat-ui-master/client/main.js | 13 + packages/rocketchat-ui/client/lib/menu.js | 4 + packages/rocketchat-ui/client/lib/tapi18n.js | 2 +- .../rocketchat-ui/client/views/app/room.js | 4 +- packages/rocketchat-wordpress/common.js | 64 +- packages/rocketchat-wordpress/startup.js | 53 + public/images/logo/logo-black.svg | 1 + public/images/setup-wizard-intro.png | Bin 0 -> 17059 bytes server/lib/accounts.js | 3 + server/methods/saveUserPreferences.js | 46 +- server/startup/initialData.js | 7 + server/startup/migrations/v116.js | 88 ++ server/startup/migrations/v117.js | 17 + server/startup/migrations/v118.js | 72 + server/startup/migrations/v119.js | 20 + tests/data/user.js | 2 +- tests/end-to-end/api/02-channels.js | 70 + tests/end-to-end/api/03-groups.js | 70 + tests/end-to-end/api/05-chat.js | 78 +- tests/end-to-end/ui/00-login.js | 78 ++ tests/end-to-end/ui/11-admin.js | 6 +- tests/pageobjects/setup-wizard.page.js | 35 + 145 files changed, 5668 insertions(+), 1767 deletions(-) delete mode 100644 packages/rocketchat-api/server/default/metrics.js create mode 100644 packages/rocketchat-lib/lib/getUserNotificationPreference.js create mode 100644 packages/rocketchat-lib/server/functions/notifications/audio.js create mode 100644 packages/rocketchat-lib/server/functions/notifications/desktop.js create mode 100644 packages/rocketchat-lib/server/functions/notifications/email.js create mode 100644 packages/rocketchat-lib/server/functions/notifications/index.js create mode 100644 packages/rocketchat-lib/server/functions/notifications/mobile.js delete mode 100644 packages/rocketchat-lib/server/lib/sendEmailOnMessage.js create mode 100644 packages/rocketchat-setup-wizard/client/setupWizard.html create mode 100644 packages/rocketchat-setup-wizard/client/setupWizard.js create mode 100644 packages/rocketchat-setup-wizard/package.js create mode 100644 packages/rocketchat-setup-wizard/server/lib/getWizardSettings.js create mode 100644 packages/rocketchat-theme/client/imports/components/setup-wizard.css create mode 100644 public/images/logo/logo-black.svg create mode 100644 public/images/setup-wizard-intro.png create mode 100644 server/startup/migrations/v116.js create mode 100644 server/startup/migrations/v117.js create mode 100644 server/startup/migrations/v118.js create mode 100644 server/startup/migrations/v119.js create mode 100644 tests/pageobjects/setup-wizard.page.js diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 6be25ee156e0..5e5f60c84586 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,6 +1,6 @@ FROM rocketchat/base:8 -ENV RC_VERSION 0.64.1 +ENV RC_VERSION 0.64.2 MAINTAINER buildmaster@rocket.chat diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 85ddcf0b78a3..4fa9f3db97b3 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 0.64.1 +ENV RC_VERSION 0.64.2 MAINTAINER buildmaster@rocket.chat diff --git a/.eslintrc b/.eslintrc index 7b20950289e6..32ba25020b8a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -131,6 +131,7 @@ "parentCall" : false, "Promise" : false, "Random" : false, + "ReactiveDict" : false, "ReactiveVar" : false, "Reload" : false, "RocketChat" : true, diff --git a/.github/history.json b/.github/history.json index 841f01c85e21..27fc85959ff5 100644 --- a/.github/history.json +++ b/.github/history.json @@ -13302,5 +13302,281 @@ "engelgabriel" ] } + ], + "0.64.2-rc.0": [ + { + "pr": "10736", + "title": "More improvements on send notifications logic", + "userLogin": "sampaiodiego", + "milestone": "0.64.2", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "10720", + "title": "[FIX] Send a message when muted returns inconsistent result in chat.sendMessage", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.2", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10733", + "title": "[FIX] Regression: Empty content on announcement modal", + "userLogin": "gdelavald", + "milestone": "0.64.2", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10607", + "title": "[NEW] Add REST endpoints `channels.roles` & `groups.roles`", + "userLogin": "cardoso", + "milestone": "0.64.2", + "contributors": [ + "cardoso", + "web-flow", + "rafaelks" + ] + }, + { + "pr": "10724", + "title": "[NEW] Add more options for Wordpress OAuth configuration", + "userLogin": "Hudell", + "milestone": "0.64.2", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "10523", + "title": "[NEW] Setup Wizard", + "userLogin": "karlprieb", + "milestone": "0.64.2", + "contributors": [ + "karlprieb", + "engelgabriel", + "web-flow" + ] + }, + { + "pr": "10691", + "title": "LingoHub based on develop", + "userLogin": "engelgabriel", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10686", + "title": "[NEW] Improvements to notifications logic", + "userLogin": "sampaiodiego", + "milestone": "0.64.2", + "contributors": [ + "sampaiodiego", + "rodrigok", + "web-flow" + ] + }, + { + "pr": "10705", + "title": "[FIX] Missing attachment description when Rocket.Chat Apps were enabled", + "userLogin": "Hudell", + "milestone": "0.64.2", + "contributors": [ + "Hudell" + ] + }, + { + "pr": "10445", + "title": "[FIX] Improve desktop notification formatting", + "userLogin": "Sameesunkaria", + "milestone": "0.65.0", + "contributors": [ + "Sameesunkaria", + "engelgabriel", + "web-flow" + ] + }, + { + "pr": "10524", + "title": "Add `npm run postinstall` into example build script", + "userLogin": "peccu", + "milestone": "0.64.2", + "contributors": [ + "peccu", + "web-flow", + "engelgabriel" + ] + }, + { + "pr": "10678", + "title": "[FIX] Message box emoji icon was flickering when typing a text", + "userLogin": "gdelavald", + "milestone": "0.64.2", + "contributors": [ + "gdelavald" + ] + }, + { + "pr": "10674", + "title": "Correct links in README file", + "userLogin": "winterstefan", + "milestone": "0.64.2", + "contributors": [ + "winterstefan" + ] + }, + { + "pr": "10665", + "title": "[FIX] Channel owner was being set as muted when creating a read-only channel", + "userLogin": "MarcosSpessatto", + "milestone": "0.64.2", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "10681", + "title": "[FIX] SAML wasn't working correctly when running multiple instances", + "userLogin": "Hudell", + "milestone": "0.64.2", + "contributors": [ + "Hudell", + "rodrigok", + "web-flow" + ] + } + ], + "0.64.2-rc.1": [ + { + "pr": "10789", + "title": "Prometheus: Improve metric names", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10788", + "title": "Improvement to push notifications on direct messages", + "userLogin": "sampaiodiego", + "milestone": "0.64.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "10786", + "title": "Better metric for notifications", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10779", + "title": "Add badge back to push notifications", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "10776", + "title": "Wizard improvements", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10766", + "title": "Add setting and expose prometheus on port 9100", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "10760", + "title": "Regression: Fix notifications for direct messages", + "userLogin": "sampaiodiego", + "milestone": "0.64.2", + "contributors": [ + "sampaiodiego" + ] + } + ], + "0.64.2-rc.2": [ + { + "pr": "10798", + "title": "Prometheus: Add metric to track hooks time", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10802", + "title": "Regression: Autorun of wizard was not destroyed after completion", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10803", + "title": "Prometheus: Fix notification metric", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10804", + "title": "Regression: Fix wrong wizard field name", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "10793", + "title": "[FIX] Not escaping special chars on mentions", + "userLogin": "erhan-", + "milestone": "0.64.2", + "contributors": [ + "erhan-", + "sampaiodiego" + ] + } + ], + "0.64.2": [ + { + "pr": "10811", + "title": "Prevent setup wizard redirects", + "userLogin": "rodrigok", + "milestone": "0.64.2", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + } ] } \ No newline at end of file diff --git a/.meteor/packages b/.meteor/packages index 4e496bd5640a..0cbb854a2016 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -112,6 +112,7 @@ rocketchat:push-notifications rocketchat:reactions rocketchat:apps rocketchat:sandstorm +rocketchat:setup-wizard rocketchat:slackbridge rocketchat:slashcommands-archive rocketchat:slashcommands-asciiarts diff --git a/.meteor/versions b/.meteor/versions index e334e1c48979..d51b6678e431 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -202,6 +202,7 @@ rocketchat:push-notifications@0.0.1 rocketchat:reactions@0.0.1 rocketchat:sandstorm@0.0.1 rocketchat:search@0.0.1 +rocketchat:setup-wizard@0.0.1 rocketchat:slackbridge@0.0.1 rocketchat:slashcommands-archive@0.0.1 rocketchat:slashcommands-asciiarts@0.0.1 diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 4fe2d8db5c1b..2c3076404a80 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -19,9 +19,9 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Rocket.Chat"), - appVersion = 64, # Increment this for every release. + appVersion = 68, # Increment this for every release. - appMarketingVersion = (defaultText = "0.64.1"), + appMarketingVersion = (defaultText = "0.64.2"), # Human-readable representation of appVersion. Should match the way you # identify versions of your app in documentation and marketing. diff --git a/.travis/snap.sh b/.travis/snap.sh index 8e3c9c444132..b4f52e64fc4e 100755 --- a/.travis/snap.sh +++ b/.travis/snap.sh @@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then RC_VERSION=$TRAVIS_TAG else CHANNEL=edge - RC_VERSION=0.64.1 + RC_VERSION=0.64.2 fi echo "Preparing to trigger a snap release for $CHANNEL channel" diff --git a/HISTORY.md b/HISTORY.md index ef12e8436614..4d90d5834415 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,57 @@ +# 0.64.2 +`2018-05-18 · 4 🎉 · 8 🐛 · 16 🔍 · 5 👩‍💻👨‍💻` + +### 🎉 New features + +- Add REST endpoints `channels.roles` & `groups.roles` ([#10607](https://github.com/RocketChat/Rocket.Chat/pull/10607) by [@cardoso](https://github.com/cardoso)) +- Add more options for Wordpress OAuth configuration ([#10724](https://github.com/RocketChat/Rocket.Chat/pull/10724)) +- Setup Wizard ([#10523](https://github.com/RocketChat/Rocket.Chat/pull/10523)) +- Improvements to notifications logic ([#10686](https://github.com/RocketChat/Rocket.Chat/pull/10686)) + +### 🐛 Bug fixes + +- Send a message when muted returns inconsistent result in chat.sendMessage ([#10720](https://github.com/RocketChat/Rocket.Chat/pull/10720)) +- Regression: Empty content on announcement modal ([#10733](https://github.com/RocketChat/Rocket.Chat/pull/10733)) +- Missing attachment description when Rocket.Chat Apps were enabled ([#10705](https://github.com/RocketChat/Rocket.Chat/pull/10705)) +- Improve desktop notification formatting ([#10445](https://github.com/RocketChat/Rocket.Chat/pull/10445) by [@Sameesunkaria](https://github.com/Sameesunkaria)) +- Message box emoji icon was flickering when typing a text ([#10678](https://github.com/RocketChat/Rocket.Chat/pull/10678)) +- Channel owner was being set as muted when creating a read-only channel ([#10665](https://github.com/RocketChat/Rocket.Chat/pull/10665)) +- SAML wasn't working correctly when running multiple instances ([#10681](https://github.com/RocketChat/Rocket.Chat/pull/10681)) +- Not escaping special chars on mentions ([#10793](https://github.com/RocketChat/Rocket.Chat/pull/10793) by [@erhan-](https://github.com/erhan-)) + +
+🔍 Minor changes + +- Prevent setup wizard redirects ([#10811](https://github.com/RocketChat/Rocket.Chat/pull/10811)) +- More improvements on send notifications logic ([#10736](https://github.com/RocketChat/Rocket.Chat/pull/10736)) +- LingoHub based on develop ([#10691](https://github.com/RocketChat/Rocket.Chat/pull/10691)) +- Add `npm run postinstall` into example build script ([#10524](https://github.com/RocketChat/Rocket.Chat/pull/10524) by [@peccu](https://github.com/peccu)) +- Correct links in README file ([#10674](https://github.com/RocketChat/Rocket.Chat/pull/10674) by [@winterstefan](https://github.com/winterstefan)) +- Prometheus: Improve metric names ([#10789](https://github.com/RocketChat/Rocket.Chat/pull/10789)) +- Improvement to push notifications on direct messages ([#10788](https://github.com/RocketChat/Rocket.Chat/pull/10788)) +- Better metric for notifications ([#10786](https://github.com/RocketChat/Rocket.Chat/pull/10786)) +- Add badge back to push notifications ([#10779](https://github.com/RocketChat/Rocket.Chat/pull/10779)) +- Wizard improvements ([#10776](https://github.com/RocketChat/Rocket.Chat/pull/10776)) +- Add setting and expose prometheus on port 9100 ([#10766](https://github.com/RocketChat/Rocket.Chat/pull/10766)) +- Regression: Fix notifications for direct messages ([#10760](https://github.com/RocketChat/Rocket.Chat/pull/10760)) +- Prometheus: Add metric to track hooks time ([#10798](https://github.com/RocketChat/Rocket.Chat/pull/10798)) +- Regression: Autorun of wizard was not destroyed after completion ([#10802](https://github.com/RocketChat/Rocket.Chat/pull/10802)) +- Prometheus: Fix notification metric ([#10803](https://github.com/RocketChat/Rocket.Chat/pull/10803)) +- Regression: Fix wrong wizard field name ([#10804](https://github.com/RocketChat/Rocket.Chat/pull/10804)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@Sameesunkaria](https://github.com/Sameesunkaria) +- [@cardoso](https://github.com/cardoso) +- [@erhan-](https://github.com/erhan-) +- [@peccu](https://github.com/peccu) +- [@winterstefan](https://github.com/winterstefan) + # 0.64.1 -` · 1 🎉 · 2 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` +`2018-05-03 · 1 🎉 · 2 🐛 · 3 🔍 · 1 👩‍💻👨‍💻` ### 🎉 New features diff --git a/README.md b/README.md index 7478c27dc04d..48e1e963b617 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ * [Scalingo](#scalingo) * [Sloppy.io](#sloppyio) * [Docker](#docker) - * [FreeBSD](#freebsd) * [Ansible](#ansible) * [Raspberry Pi 2](#raspberry-pi-2) * [Koozali SME](#koozali-sme) @@ -81,10 +80,7 @@ Download the Native Cross-Platform Desktop Application at [Rocket.Chat.Electron] [![Rocket.Chat on Apple App Store](https://user-images.githubusercontent.com/551004/29770691-a2082ff4-8bc6-11e7-89a6-964cd405ea8e.png)](https://itunes.apple.com/us/app/rocket.chat/id1028869439?mt=8) [![Rocket.Chat on Google Play](https://user-images.githubusercontent.com/551004/29770692-a20975c6-8bc6-11e7-8ab0-1cde275496e0.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 - [download here](https://docs.rocket.chat/developer-guides/mobile-apps/), even on BlackBerry Passport!* - -### Also available as FirefoxOS app -[![Firefox OS app now available](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/firefoxos.png)](https://docs.rocket.chat/installation/mobile-and-desktop-apps/#native-firefox-os-app). +*Now compatible with all Android devices as old as version 4.0.x - [download here](https://rocket.chat/docs/developer-guides/mobile-apps/), even on BlackBerry Passport!* # Deployment @@ -103,7 +99,7 @@ Installing snaps is very quick. By running that command you have your full Rocke Our snap features a built-in reverse proxy that can request and maintain free Let's Encrypt SSL certificates. You can go from zero to a public-facing SSL-secured Rocket.Chat server in less than 5 minutes. -Find out more information about our snaps [here](https://docs.rocket.chat/installation/manual-installation/ubuntu/snaps/). +Find out more information about our snaps [here](https://rocket.chat/docs/installation/manual-installation/ubuntu/snaps/). ## RocketChatLauncher @@ -174,7 +170,7 @@ Host your docker container at [sloppy.io](http://sloppy.io). Get an account and ## Docker -[Deploy with docker compose](https://docs.rocket.chat/installation/docker-containers/docker-compose) +[Deploy with docker compose](https://rocket.chat/docs/installation/docker-containers/docker-compose/) [![Rocket.Chat logo](https://d207aa93qlcgug.cloudfront.net/1.95.5.qa/img/nav/docker-logo-loggedout.png)](https://hub.docker.com/r/rocketchat/rocket.chat/) @@ -195,21 +191,10 @@ OR our [official docker registry image](https://hub.docker.com/_/rocket.chat/), docker pull rocket.chat ``` -## FreeBSD -Run solid five-nines deployment on industry workhorse FreeBSD server. - -[![FreeBSD Daemon](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/freebsd.png)](https://docs.rocket.chat/installation/manual-installation/freebsd/) - -## Windows Server - -Deploy on your own enterprise server, or with Microsoft Azure. - -[![Windows 2012 or 2016 Server](https://github.com/Sing-Li/bbug/blob/master/images/windows.png)](https://docs.rocket.chat/installation/manual-installation/windows-server/) - ## Ansible Automated production-grade deployment in minutes, for RHEL / CentOS 7 or Ubuntu 14.04 LTS / 15.04. -[![Ansible deployment](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/ansible.png)](https://docs.rocket.chat/installation/automation-tools/ansible/) +[![Ansible deployment](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/ansible.png)](https://rocket.chat/docs/installation/automation-tools/ansible/) ## Raspberry Pi 2 Run Rocket.Chat on this world famous $30 quad core server. @@ -223,15 +208,15 @@ Add Rocket.Chat to this world famous time tested small enterprise server today. [![Koozali SME](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/koozali.png)](https://wiki.contribs.org/Rocket_Chat) ## Ubuntu VPS -Follow these [deployment instructions](https://docs.rocket.chat/installation/manual-installation/ubuntu/). +Follow these [deployment instructions](https://rocket.chat/docs/installation/manual-installation/ubuntu/). ## Hyper.sh -Follow their [deployment instructions](https://docs.rocket.chat/installation/paas-deployments/hyper-sh/) to install a per-second billed Rocket.Chat instance on [Hyper.sh](https://docs.rocket.chat/installation/paas-deployments/hyper-sh/). +Follow their [deployment instructions](https://rocket.chat/docs/installation/paas-deployments/hyper-sh/) to install a per-second billed Rocket.Chat instance on [Hyper.sh](https://rocket.chat/docs/installation/paas-deployments/hyper-sh/). ## WeDeploy Install Rocket.Chat on [WeDeploy](https://wedeploy.com): -[![Install](https://avatars3.githubusercontent.com/u/10002920?v=4&s=100)](https://docs.rocket.chat/installation/paas-deployments/wedeploy/) +[![Install](https://avatars3.githubusercontent.com/u/10002920?v=4&s=100)](https://rocket.chat/docs/installation/paas-deployments/wedeploy/) ## D2C.io Deploy Rocket.Chat stack to your server with [D2C](https://d2c.io/). Scale with a single click, check live logs and metrics: @@ -321,7 +306,6 @@ It is a great solution for communities and companies wanting to privately host t - Native Cross-Platform Desktop Application [Windows, macOS, or Linux](https://rocket.chat/) - Mobile app for iPhone, iPad, and iPod touch [Download on App Store](https://geo.itunes.apple.com/us/app/rocket-chat/id1148741252?mt=8) - Mobile app for Android phone, tablet, and TV stick [Available now on Google Play](https://play.google.com/store/apps/details?id=chat.rocket.android) -- Native Firefox OS Application (also for Desktop Firefox and Firefox for Android) - [Check the docs page for install instructions](https://docs.rocket.chat/installation/mobile-and-desktop-apps/#native-firefox-os-app) - Sandstorm.io instant Rocket.Chat server [Now on Sandstorm App Store](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0) - Available on [Cloudron Store](https://cloudron.io/appstore.html#chat.rocket.cloudronapp) @@ -394,7 +378,7 @@ We are developing the APIs based on the competition, so stay tuned and you will ## Documentation -Checkout [Rocket.Chat documentation](https://docs.rocket.chat/). +Checkout [Rocket.Chat documentation](https://rocket.chat/docs/). ## License @@ -416,11 +400,11 @@ cd Rocket.Chat meteor npm start ``` -If you are not a developer and just want to run the server - see [deployment methods](https://docs.rocket.chat/installation/paas-deployments/). +If you are not a developer and just want to run the server - see [deployment methods](https://rocket.chat/docs/installation/paas-deployments/). ## Branching Model -See [Branches and Releases](https://docs.rocket.chat/developer-guides/branches-and-releases/). +See [Branches and Releases](https://rocket.chat/docs/developer-guides/branches-and-releases/). It is based on [Gitflow Workflow](http://nvie.com/posts/a-successful-git-branching-model/), reference section below is derived from Vincent Driessen at nvie. diff --git a/client/routes/router.js b/client/routes/router.js index c3cb3e545735..2f0ad84ee1f1 100644 --- a/client/routes/router.js +++ b/client/routes/router.js @@ -149,6 +149,22 @@ FlowRouter.route('/register/:hash', { } }); +FlowRouter.route('/setup-wizard', { + name: 'setup-wizard', + + action() { + BlazeLayout.render('setupWizard'); + } +}); + +FlowRouter.route('/setup-wizard/final', { + name: 'setup-wizard-final', + + action() { + BlazeLayout.render('setupWizardFinal'); + } +}); + FlowRouter.notFound = { action() { BlazeLayout.render('pageNotFound'); diff --git a/client/startup/userSetUtcOffset.js b/client/startup/userSetUtcOffset.js index d41f644fe67f..14542fede1c2 100644 --- a/client/startup/userSetUtcOffset.js +++ b/client/startup/userSetUtcOffset.js @@ -2,7 +2,7 @@ import moment from 'moment'; Meteor.startup(function() { Tracker.autorun(function() { - const user = Meteor.user(); + const user = RocketChat.models.Users.findOne({_id: Meteor.userId()}, {fields: {statusConnection: 1, utcOffset: 1}}); if (user && user.statusConnection === 'online') { const utcOffset = moment().utcOffset() / 60; if (user.utcOffset !== utcOffset) { diff --git a/example-build-run.sh b/example-build-run.sh index fc57c8632d6a..8e5f66f1c020 100755 --- a/example-build-run.sh +++ b/example-build-run.sh @@ -10,6 +10,7 @@ DEPLOY_DIR=/var/www/rocket.chat ### BUILD meteor npm install +meteor npm run postinstall # on the very first build, meteor build command should fail due to a bug on emojione package (related to phantomjs installation) # the command below forces the error to happen before build command (not needed on subsequent builds) diff --git a/package.json b/package.json index d73a855e7497..e67fb7efb369 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "0.64.1", + "version": "0.64.2", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" diff --git a/packages/meteor-accounts-saml/saml_server.js b/packages/meteor-accounts-saml/saml_server.js index 067bbb765a7f..9ffc945bff32 100644 --- a/packages/meteor-accounts-saml/saml_server.js +++ b/packages/meteor-accounts-saml/saml_server.js @@ -170,17 +170,20 @@ Accounts.registerLoginHandler(function(loginRequest) { } }); -Accounts.saml._loginResultForCredentialToken = {}; - Accounts.saml.hasCredential = function(credentialToken) { - return _.has(Accounts.saml._loginResultForCredentialToken, credentialToken); + return RocketChat.models.CredentialTokens.findOneById(credentialToken) != null; }; Accounts.saml.retrieveCredential = function(credentialToken) { // The credentialToken in all these functions corresponds to SAMLs inResponseTo field and is mandatory to check. - const result = Accounts.saml._loginResultForCredentialToken[credentialToken]; - delete Accounts.saml._loginResultForCredentialToken[credentialToken]; - return result; + const data = RocketChat.models.CredentialTokens.findOneById(credentialToken); + if (data) { + return data.userInfo; + } +}; + +Accounts.saml.storeCredential = function(credentialToken, loginResult) { + RocketChat.models.CredentialTokens.create(credentialToken, loginResult); }; const closePopup = function(res, err) { @@ -334,21 +337,21 @@ const middleware = function(req, res, next) { } const credentialToken = (profile.inResponseToId && profile.inResponseToId.value) || profile.inResponseToId || profile.InResponseTo || samlObject.credentialToken; + const loginResult = { + profile + }; if (!credentialToken) { // No credentialToken in IdP-initiated SSO const saml_idp_credentialToken = Random.id(); - Accounts.saml._loginResultForCredentialToken[saml_idp_credentialToken] = { - profile - }; + Accounts.saml.storeCredential(saml_idp_credentialToken, loginResult); + const url = `${ Meteor.absoluteUrl('home') }?saml_idp_credentialToken=${ saml_idp_credentialToken }`; res.writeHead(302, { 'Location': url }); res.end(); } else { - Accounts.saml._loginResultForCredentialToken[credentialToken] = { - profile - }; + Accounts.saml.storeCredential(credentialToken, loginResult); closePopup(res); } }); diff --git a/packages/rocketchat-api/package.js b/packages/rocketchat-api/package.js index f97043855418..46d6194bdbd0 100644 --- a/packages/rocketchat-api/package.js +++ b/packages/rocketchat-api/package.js @@ -27,7 +27,6 @@ Package.onUse(function(api) { //Add default routes api.addFiles('server/default/info.js', 'server'); - api.addFiles('server/default/metrics.js', 'server'); //Add v1 routes api.addFiles('server/v1/channels.js', 'server'); diff --git a/packages/rocketchat-api/server/api.js b/packages/rocketchat-api/server/api.js index 29bd0c08c844..6d56354ccd40 100644 --- a/packages/rocketchat-api/server/api.js +++ b/packages/rocketchat-api/server/api.js @@ -135,6 +135,8 @@ class API extends Restivus { routes = [routes]; } + const version = this._config.version; + routes.forEach((route) => { //Note: This is required due to Restivus calling `addRoute` in the constructor of itself if (this.hasHelperMethods()) { @@ -146,16 +148,29 @@ class API extends Restivus { //Add a try/catch for each endpoint const originalAction = endpoints[method].action; endpoints[method].action = function _internalRouteActionHandler() { + const rocketchatRestApiEnd = RocketChat.metrics.rocketchatRestApi.startTimer({ + method, + version, + user_agent: this.request.headers['user-agent'], + entrypoint: route + }); + this.logger.debug(`${ this.request.method.toUpperCase() }: ${ this.request.url }`); let result; try { result = originalAction.apply(this); } catch (e) { this.logger.debug(`${ method } ${ route } threw an error:`, e.stack); - return RocketChat.API.v1.failure(e.message, e.error); + result = RocketChat.API.v1.failure(e.message, e.error); } - return result ? result : RocketChat.API.v1.success(); + result = result || RocketChat.API.v1.success(); + + rocketchatRestApiEnd({ + status: result.statusCode + }); + + return result; }; for (const [name, helperMethod] of this.getHelperMethods()) { diff --git a/packages/rocketchat-api/server/default/metrics.js b/packages/rocketchat-api/server/default/metrics.js deleted file mode 100644 index 89b761c199a1..000000000000 --- a/packages/rocketchat-api/server/default/metrics.js +++ /dev/null @@ -1,8 +0,0 @@ -RocketChat.API.default.addRoute('metrics', { authRequired: false }, { - get() { - return { - headers: { 'Content-Type': 'text/plain' }, - body: RocketChat.promclient.register.metrics() - }; - } -}); diff --git a/packages/rocketchat-api/server/v1/channels.js b/packages/rocketchat-api/server/v1/channels.js index eb76ca5a2038..d1aa55331c2e 100644 --- a/packages/rocketchat-api/server/v1/channels.js +++ b/packages/rocketchat-api/server/v1/channels.js @@ -866,3 +866,14 @@ RocketChat.API.v1.addRoute('channels.getAllUserMentionsByChannel', { authRequire } }); +RocketChat.API.v1.addRoute('channels.roles', { authRequired: true }, { + get() { + const findResult = findChannelByIdOrName({ params: this.requestParams() }); + + const roles = Meteor.runAsUser(this.userId, () => Meteor.call('getRoomRoles', findResult._id)); + + return RocketChat.API.v1.success({ + roles + }); + } +}); diff --git a/packages/rocketchat-api/server/v1/groups.js b/packages/rocketchat-api/server/v1/groups.js index 3826a38bca9d..562d7bb4da65 100644 --- a/packages/rocketchat-api/server/v1/groups.js +++ b/packages/rocketchat-api/server/v1/groups.js @@ -649,3 +649,15 @@ RocketChat.API.v1.addRoute('groups.unarchive', { authRequired: true }, { return RocketChat.API.v1.success(); } }); + +RocketChat.API.v1.addRoute('groups.roles', { authRequired: true }, { + get() { + const findResult = findPrivateGroupByIdOrName({ params: this.requestParams(), userId: this.userId }); + + const roles = Meteor.runAsUser(this.userId, () => Meteor.call('getRoomRoles', findResult.rid)); + + return RocketChat.API.v1.success({ + roles + }); + } +}); diff --git a/packages/rocketchat-api/server/v1/users.js b/packages/rocketchat-api/server/v1/users.js index 12ae7a470b87..b871381b81be 100644 --- a/packages/rocketchat-api/server/v1/users.js +++ b/packages/rocketchat-api/server/v1/users.js @@ -363,6 +363,13 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { preferences = _.extend({ _id: userId, settings: { preferences: this.bodyParams.data } }); } + // Keep compatibility with old values + if (preferences.emailNotificationMode === 'all') { + preferences.emailNotificationMode = 'mentions'; + } else if (preferences.emailNotificationMode === 'disabled') { + preferences.emailNotificationMode = 'nothing'; + } + Meteor.runAsUser(this.userId, () => RocketChat.saveUser(this.userId, preferences)); return RocketChat.API.v1.success({ user: RocketChat.models.Users.findOneById(this.bodyParams.userId, { fields: preferences }) }); diff --git a/packages/rocketchat-apps/server/converters/messages.js b/packages/rocketchat-apps/server/converters/messages.js index b762a16f9f19..d62fbccb377e 100644 --- a/packages/rocketchat-apps/server/converters/messages.js +++ b/packages/rocketchat-apps/server/converters/messages.js @@ -129,7 +129,9 @@ export class AppMessagesConverter { image_url: attachment.imageUrl, audio_url: attachment.audioUrl, video_url: attachment.videoUrl, - fields: attachment.fields + fields: attachment.fields, + type: attachment.type, + description: attachment.description }; }).map((a) => { Object.keys(a).forEach((k) => { @@ -178,7 +180,9 @@ export class AppMessagesConverter { imageUrl: attachment.image_url, audioUrl: attachment.audio_url, videoUrl: attachment.video_url, - fields: attachment.fields + fields: attachment.fields, + type: attachment.type, + description: attachment.description }; }); } diff --git a/packages/rocketchat-assets/server/assets.js b/packages/rocketchat-assets/server/assets.js index 69bce7af9e03..297efb79ea47 100644 --- a/packages/rocketchat-assets/server/assets.js +++ b/packages/rocketchat-assets/server/assets.js @@ -22,6 +22,10 @@ const assets = { extensions: ['svg', 'png', 'jpg', 'jpeg'], width: undefined, height: undefined + }, + wizard: { + step: 3, + order: 2 } }, favicon_ico: { @@ -296,7 +300,8 @@ function addAssetToSetting(key, value) { fileConstraints: value.constraints, i18nLabel: value.label, asset: key, - public: true + public: true, + wizard: value.wizard }); } diff --git a/packages/rocketchat-emoji-emojione/server/callbacks.js b/packages/rocketchat-emoji-emojione/server/callbacks.js index 160d902d90ff..e368dc412386 100644 --- a/packages/rocketchat-emoji-emojione/server/callbacks.js +++ b/packages/rocketchat-emoji-emojione/server/callbacks.js @@ -1,6 +1,6 @@ /* globals emojione */ Meteor.startup(function() { - RocketChat.callbacks.add('beforeNotifyUser', (message) => { + RocketChat.callbacks.add('beforeSendMessageNotifications', (message) => { return emojione.shortnameToUnicode(message); }); }); diff --git a/packages/rocketchat-i18n/i18n/af.i18n.json b/packages/rocketchat-i18n/i18n/af.i18n.json index 02065328269e..89a889a47f81 100644 --- a/packages/rocketchat-i18n/i18n/af.i18n.json +++ b/packages/rocketchat-i18n/i18n/af.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Tik in", "Error": "fout", "Error_404": "Fout: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fout: Rocket.Chat vereis oplog tailing wanneer dit in verskeie gevalle uitgevoer word", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Maak asseblief seker dat jou MongoDB op ReplicaSet af is en MONGO_OPLOG_URL omgewingsveranderlike korrek is gedefinieer op die aansoek bediener", "error-action-not-allowed": "__action__ is nie toegelaat nie", "error-application-not-found": "Aansoek nie gevind nie", "error-archived-duplicate-name": "Daar is 'n geargiveerde kanaal met die naam '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/ar.i18n.json b/packages/rocketchat-i18n/i18n/ar.i18n.json index e7c80ce71f96..aea1104c8997 100644 --- a/packages/rocketchat-i18n/i18n/ar.i18n.json +++ b/packages/rocketchat-i18n/i18n/ar.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "زر الإدخال", "Error": "خطأ", "Error_404": "خطأ 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "خطأ: Rocket.Chat يتطلب أوبلوغ تايلينغ عند تشغيل في حالات متعددة", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "الرجاء التأكد من مونغودب الخاص بك على وضع ريبليكاسيت ومتغير البيئة MONGO_OPLOG_URL معرف بشكل صحيح على ملقم التطبيق", "error-action-not-allowed": "__action__ غير مسموح", "error-application-not-found": "التطبيق غير موجود", "error-archived-duplicate-name": "هناك قناة المحفوظة مع اسم '__room_name__ \"", diff --git a/packages/rocketchat-i18n/i18n/az.i18n.json b/packages/rocketchat-i18n/i18n/az.i18n.json index 15ad1479176c..1ca8b830261f 100644 --- a/packages/rocketchat-i18n/i18n/az.i18n.json +++ b/packages/rocketchat-i18n/i18n/az.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Daxil ol", "Error": "Səhv", "Error_404": "Hata: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Hata: Rocket.Chat, birdən çox halında çalışırken oplog kuyruklamasını tələb edir", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "MongoDB-nin ReplicaSet rejimində olduğundan və MONGO_OPLOG_URL ətraf mühitə dəyişənlərin tətbiq serverində düzgün olduğundan əmin olun", "error-action-not-allowed": "__action__ icazə verilmir", "error-application-not-found": "Ərizə tapılmadı", "error-archived-duplicate-name": "'__room_name__' adı ilə arxivləşdirilmiş bir kanal var", diff --git a/packages/rocketchat-i18n/i18n/bg.i18n.json b/packages/rocketchat-i18n/i18n/bg.i18n.json index dbd712236386..340ee179cc50 100644 --- a/packages/rocketchat-i18n/i18n/bg.i18n.json +++ b/packages/rocketchat-i18n/i18n/bg.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Влезте в", "Error": "Грешка", "Error_404": "Грешка: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Грешка: Rocket.Chat изисква oplog tailing, когато се изпълнява в няколко случая", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Моля, уверете се, че вашият MongoDB е в режим ReplicaSet и че променливата на средата MONGO_OPLOG_URL е дефинирана правилно на сървъра на приложения", "error-action-not-allowed": "__action__ не е разрешено", "error-application-not-found": "Приложението не е намерено", "error-archived-duplicate-name": "Има архивиран канал с име \"__ room_name__\"", diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index 435ba088a113..c8e2555bd4f8 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -252,14 +252,14 @@ "API_Wordpress_URL": "URL de WordPress", "Apiai_Key": "Clau Api.ai ", "Apiai_Language": "Idioma Api.ai", - "App_status_unknown": "desconegut", + "App_status_unknown": "Desconegut", "App_status_constructed": "Construït", - "App_status_initialized": "S'ha inicialitzat", + "App_status_initialized": "Inicialitzat", "App_status_auto_enabled": "Actiu", "App_status_manually_enabled": "Actiu", "App_status_compiler_error_disabled": "Desactivat: error del compilador", - "App_status_error_disabled": "S'ha desactivat: error incapaç", - "App_status_manually_disabled": "Deshabilitat: manualment", + "App_status_error_disabled": "Desactivat: error no capturat", + "App_status_manually_disabled": "Desactivat: manualment", "App_status_disabled": "Inactiu", "App_author_homepage": "pàgina d'inici de l'autor", "App_support_url": "URL de suport", @@ -267,7 +267,7 @@ "Application_added": "Aplicació afegida", "Application_Name": "Nom de l'aplicació", "Application_updated": "Aplicació actualitzada", - "Apply": "aplicar", + "Apply": "Aplicar", "Apply_and_refresh_all_clients": "Aplicar i refrescar tots els clients", "Archive": "Arxiu", "archive-room": "Arxivar sala", @@ -341,6 +341,7 @@ "Body": "Cos", "bold": "negreta", "bot_request": "Sol·licitud Bot", + "Bots": "Bots", "BotHelpers_userFields": "Camps d'usuari", "BotHelpers_userFields_Description": "CSV de camps d'usuari que poden ser accedits pels mètodes helper dels bots.", "Branch": "Branca", @@ -395,10 +396,10 @@ "Chatpal_HTTP_Headers_Description": "Llista de encapçalats HTTP, un encapçalament per línia. Format: nom: valor", "Chatpal_API_Key": "Clau API", "Chatpal_API_Key_Description": "Encara no tens una clau de l'API? Obteniu-ne un!", - "Chatpal_no_search_results": "Sense resultat", + "Chatpal_no_search_results": "Sense resultats", "Chatpal_one_search_result": "S'ha trobat 1 resultat", - "Chatpal_search_results": "S'han trobat resultats de% s", - "Chatpal_search_page_of": "Pàgina% s de% s", + "Chatpal_search_results": "S'han trobat %s resultats", + "Chatpal_search_page_of": "Pàgina %s de %s", "Chatpal_go_to_message": "Vés", "Chatpal_Welcome": "Gaudeix de la teva cerca!", "Chatpal_go_to_user": "Enviar missatge directe", @@ -407,7 +408,7 @@ "Chatpal_Backend_Description": "Seleccioneu si voleu utilitzar Chatpal com a servei o com a instal·lació al lloc", "Chatpal_Suggestion_Enabled": "Suggeriments habilitats", "Chatpal_Base_URL": "Base Url", - "Chatpal_Base_URL_Description": "Trobeu una descripció sobre com executar una instància local a github. L'URL ha de ser absolut i assenyalar el nucli chatpal, p. Ex. http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Més informació sobre com executar una instància local a github. L'URL ha de ser absolut i apuntar al nucli de chatpal. Exemple: http://localhost:8983/solr/chatpal", "Chatpal_Main_Language": "Idioma principal", "Chatpal_Main_Language_Description": "L'idioma que més s'utilitza a les converses", "Chatpal_Default_Result_Type": "Tipus de resultat per defecte", @@ -430,6 +431,7 @@ "Chatpal_created_key_successfully": "La clau de l'API s'ha creat correctament", "Chatpal_run_search": "Cerca", "CDN_PREFIX": "Prefix CDN", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Més informació sobre Chatpal a http://chatpal.io!", "Certificates_and_Keys": "Certificats i claus", "Change_Room_Type": "Canvi de tipus de sala", "Changing_email": "Canvi de correu-e", @@ -696,8 +698,6 @@ "Enter_to": "Entra a", "Error": "Error", "Error_404": "Error: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Error: El Rocket.Chat requereix oplog tailing quan corre en múltiples instàncies", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Si us plau, assegureu-vos que MongoDB és en mode ReplicaSet i la variable d'entorn MONGO_OPLOG_URL està definida correctament al servidor d'aplicacions", "error-action-not-allowed": "__action__ no permès", "error-application-not-found": "Aplicació no trobada", "error-archived-duplicate-name": "Ja hi ha un canal arxivat amb el nom '__room_name__'", @@ -905,7 +905,7 @@ "Hide_counter": "Amaga comptador", "Hide_flextab": "Amaga la barra lateral dreta amb un clic", "Hide_Group_Warning": "Segur que voleu ocultar el grup \"%s\"?", - "Hide_Livechat_Warning": "Esteu segur que voleu ocultar el xat en viu amb \"% s\"?", + "Hide_Livechat_Warning": "Esteu segurs de voler amagar el xat en viu amb \"%s\"?", "Hide_Private_Warning": "Segur que voleu ocultar la discussió amb \"%s\"?", "Hide_roles": "Amaga rols", "Hide_room": "Oculta sala", @@ -1028,9 +1028,8 @@ "InternalHubot_ScriptsToLoad": "Seqüències d'ordres (scripts) per carregar", "InternalHubot_ScriptsToLoad_Description": "Si us plau, introduiu una llista separada per comes de scripts per carregar des de la carpeta personalitzada", "InternalHubot_Username_Description": "Ha de ser un nom d'usuari vàlid d'un bot registrat al servidor.", - "InternalHubot_EnableForChannels": "Activa els canals públics", - "InternalHubot_EnableForDirectMessages": "Activa els missatges directes", - "InternalHubot_EnableForPrivateGroups": "Activa els canals privats", + "InternalHubot_EnableForChannels": "Activa per als canals públics", + "InternalHubot_EnableForDirectMessages": "Activa per als missatges directes", "Invalid_confirm_pass": "La confirmació de la contrasenya no coincideix amb la contrasenya", "Invalid_email": "L'adreça de correu-e és invàlida", "Invalid_Export_File": "L'arxiu pujat no és un fitxer d'exportació %s vàlid.", @@ -1077,7 +1076,7 @@ "Issue_Links": "Comença els enllaços del seguiment", "IssueLinks_Incompatible": "Advertència: no activeu aquesta opció i la \"Vista preliminar de color Hex\" al mateix temps.", "IssueLinks_LinkTemplate": "Plantilla per a enllaços d'emissió", - "IssueLinks_LinkTemplate_Description": "Plantilla per enllaços d'emissió; % s se substituirà pel número d'emissió.", + "IssueLinks_LinkTemplate_Description": "Plantilla per enllaços d'emissió; %s se substituirà pel número d'emissió.", "It_works": "Funciona", "Idle_Time_Limit": "Límit de temps inactiu", "Idle_Time_Limit_Description": "Període de temps fins que l'estat canvia de distància. El valor ha de ser en segons.", diff --git a/packages/rocketchat-i18n/i18n/cs.i18n.json b/packages/rocketchat-i18n/i18n/cs.i18n.json index 0d67c22e3f69..ad3efe1589ca 100644 --- a/packages/rocketchat-i18n/i18n/cs.i18n.json +++ b/packages/rocketchat-i18n/i18n/cs.i18n.json @@ -146,7 +146,7 @@ "Accounts_SearchFields": "Pole zohledněná ve vyhledávání", "Accounts_SetDefaultAvatar": "Nastavit výchozí avatar", "Accounts_SetDefaultAvatar_Description": "Pokusí se určit výchozí avatar na základě OAuth účtu nebo gravataru", - "Accounts_ShowFormLogin": "Zobrazit formulářové přihlášení", + "Accounts_ShowFormLogin": "Zobrazit výchozí formulář přihlášení", "Accounts_TwoFactorAuthentication_MaxDelta": "Maximální Delta", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Maximální hodnota Delta určuje, kolik tokenů je v daném okamžiku platných. Tokeny jsou generovány každých 30 sekund a platí (30 * Maximální Delta) sekund.
Příklad: Pokud je maximální Delta nastavena na 10, může být každý token použit až do 300 sekund před nebo po jeho časovém razítku. Tato funkce se může hodit, pokud nejsou hodiny klienta správně synchronizovány se serverem.", "Accounts_UseDefaultBlockedDomainsList": "Použít výchozí seznam blokovaných domén", @@ -181,6 +181,8 @@ "Adding_user": "Přidání uživatelů", "Additional_emails": "Další e-maily", "Additional_Feedback": "Dodatečný Feedback", + "additional_integrations_Zapier": " Chcete integrovat software či aplikaci s Rocket.Chat ale nevíte jak na to? Doporučujeme použít Zapier, který plně podporujeme. Pro více informací si přečtěte naši dokumentaci https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", + "additional_integrations_Bots": "Hledáte způsob jak implementovat vlastního bota? Nehledejte dál a podívejte se na náš Hubot adaptér https://github.com/RocketChat/hubot-rocketchat", "Administration": "Administrace", "Adult_images_are_not_allowed": "Obrázky nevhodné pro mladistvé nejsou povoleny", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po ověření OAuth2, budou uživatelé přesměrováni na tuto adresu URL", @@ -252,22 +254,22 @@ "API_Wordpress_URL": "WordPress URL", "Apiai_Key": "Api.ai Klíč", "Apiai_Language": "Api.ai Jazyk", - "App_status_unknown": "Neznámo", - "App_status_constructed": "Postaveno", + "App_status_unknown": "Neznámý", + "App_status_constructed": "Vytvořeno", "App_status_initialized": "Inicializováno", "App_status_auto_enabled": "Povoleno", "App_status_manually_enabled": "Povoleno", - "App_status_compiler_error_disabled": "Zakázáno: chyba kompilátoru", - "App_status_error_disabled": "Zakázáno: Uncaught Error", + "App_status_compiler_error_disabled": "Zakázáno: chyba kompilace", + "App_status_error_disabled": "Zakázáno: Nezachycená výjimka", "App_status_manually_disabled": "Zakázáno: Ručně", "App_status_disabled": "Zakázáno", - "App_author_homepage": "autorská domovská stránka", - "App_support_url": "podpora url", + "App_author_homepage": "Domovská stránka autora", + "App_support_url": "URL podpory", "Appearance": "Vzhled", "Application_added": "Aplikace přidána", "Application_Name": "Název aplikace", "Application_updated": "Aplikace aktualizována", - "Apply": "Aplikovat", + "Apply": "Použít", "Apply_and_refresh_all_clients": "Použít a aktualizovat všechny klienty", "Archive": "Archiv", "archive-room": "Archivovat místnost", @@ -341,11 +343,12 @@ "Body": "Obsah", "bold": "tučný", "bot_request": "Request bota", + "Bots": "Boti", "BotHelpers_userFields": "Uživatelská pole", "BotHelpers_userFields_Description": "CSV uživatelských polí, která budou přístupná botům", "Branch": "Větev", - "Broadcast_channel": "Vysílaný kanál", - "Broadcast_channel_Description": "Pouze autorizovaní uživatelé mohou psát nové zprávy, ale ostatní uživatelé budou moci odpovědět", + "Broadcast_channel": "Vysílací Místnost", + "Broadcast_channel_Description": "Pouze autorizovaní uživatelé mohou psát nové zprávy, ostatní uživatelé můžou odpovídat.", "Broadcast_Connected_Instances": "Připojené instance", "Bugsnag_api_key": "Bugsnag API klíč", "Build_Environment": "Vytvořit prostředí", @@ -391,36 +394,36 @@ "Chatpal_Search_Results": "Výsledky vyhledávání", "Chatpal_All_Results": "Všechno", "Chatpal_Messages_Only": "Zprávy", - "Chatpal_HTTP_Headers": "Http Headers", - "Chatpal_HTTP_Headers_Description": "Seznam záhlaví HTTP, jeden záhlaví na jeden řádek. Formát: jméno: hodnota", - "Chatpal_API_Key": "klíč API", - "Chatpal_API_Key_Description": "Zatím nemáte klíček API ? Získejte jeden!", - "Chatpal_no_search_results": "Žádný výsledek", - "Chatpal_one_search_result": "Nalezeno 1 výsledek", - "Chatpal_search_results": "Nalezeny výsledky% s", - "Chatpal_search_page_of": "Stránka% s z% s", + "Chatpal_HTTP_Headers": "HTTP Hlavičky", + "Chatpal_HTTP_Headers_Description": "Seznam HTTP hlaviček, každá na vlastní řádek. Formát: jméno:hodnota", + "Chatpal_API_Key": "Klíč API", + "Chatpal_API_Key_Description": "Zatím nemáte žádný API klíč. Vytvořit!", + "Chatpal_no_search_results": "Žádné výsledky", + "Chatpal_one_search_result": "Nalezen 1 výsledek", + "Chatpal_search_results": "Nalezeno %s výsledků", + "Chatpal_search_page_of": "Stránka %s z %s", "Chatpal_go_to_message": "Přejít", "Chatpal_Welcome": "Užijte si vyhledávání!", "Chatpal_go_to_user": "Odeslat přímou zprávu", "Chatpal_go_to_room": "Přejít", - "Chatpal_Backend": "Typ zálohování", - "Chatpal_Backend_Description": "Vyberte, zda chcete používat službu Chatpal jako službu nebo jako instalaci na místě", + "Chatpal_Backend": "Typ backendu", + "Chatpal_Backend_Description": "Vyberte, zda chcete používat službu Chatpal jako službu nebo jako instalaci na svém serveru", "Chatpal_Suggestion_Enabled": "Návrhy jsou povoleny", "Chatpal_Base_URL": "Základní adresa URL", - "Chatpal_Base_URL_Description": "Najděte nějaký popis, jak spustit místní instanci na adrese github. Adresa URL musí být absolutní a odkazovat na jádro chatovacího jádra, např. http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Návod jak spustit lokální instanci naleznete na githubu. Adresa URL musí být absolutní a odkazovat na zdroj chatpal, např. http://localhost:8983/solr/chatpal.", "Chatpal_Main_Language": "Hlavní jazyk", "Chatpal_Main_Language_Description": "Jazyk, který se nejčastěji používá v konverzacích", "Chatpal_Default_Result_Type": "Výchozí typ výsledku", - "Chatpal_Default_Result_Type_Description": "Definuje, který typ výsledku se zobrazí výsledkem. Vše znamená, že je k dispozici přehled pro všechny typy.", - "Chatpal_AdminPage": "Stránka administrátora Chatpal", + "Chatpal_Default_Result_Type_Description": "Definuje, který typ výsledku se zobrazí. Vše znamená, že je k dispozici přehled všech typů.", + "Chatpal_AdminPage": "Stránka administrace Chatpal", "Chatpal_Email_Address": "Emailová adresa", "Chatpal_Terms_and_Conditions": "Pravidla a podmínky", "Chatpal_TAC_read": "Přečetl jsem si smluvní podmínky", "Chatpal_create_key": "Vytvořit klíč", - "Chatpal_Batch_Size": "Velikost šarže indexu", + "Chatpal_Batch_Size": "Velikost dávky indexu", "Chatpal_Timeout_Size": "Časový limit indexu", - "Chatpal_Window_Size": "Velikost okna indexu", - "Chatpal_Batch_Size_Description": "Velikost šarže indexových dokumentů (při bootstrapování)", + "Chatpal_Window_Size": "Velikost časového okna indexu", + "Chatpal_Batch_Size_Description": "Velikost dávky indexových dokumentů (při bootstrapování)", "Chatpal_Timeout_Size_Description": "Čas mezi dvěma indexovými okny v ms (při bootstrapování)", "Chatpal_Window_Size_Description": "Velikost indexových oken v hodinách (při bootstrapování)", "Chatpal_ERROR_TAC_must_be_checked": "Podmínky a podmínky musí být zkontrolovány", @@ -430,6 +433,7 @@ "Chatpal_created_key_successfully": "Klíč API byl úspěšně vytvořen", "Chatpal_run_search": "Vyhledávání", "CDN_PREFIX": "CDN Prefix", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Pro více informací o Chatpal navštivte http://chatpal.io", "Certificates_and_Keys": "Certifikáty a klíče", "Change_Room_Type": "Změna typu místnosti", "Changing_email": "Změna e-mailu", @@ -493,7 +497,7 @@ "Content": "Obsah", "Conversation": "Konverzace", "Conversation_closed": "Konverzace uzavřena: __comment__.", - "Conversation_finished_message": "Zpráva konverzace skončila", + "Conversation_finished_message": "Konverzace ukončena", "Convert_Ascii_Emojis": "Převod ASCII na Emoji", "Copied": "Zkopírováno", "Copy": "Kopírovat", @@ -614,8 +618,8 @@ "Disable_Notifications": "Zakázat notifikace", "Disable_two-factor_authentication": "Zakázat dvoufázové ověření", "Disabled": "Zakázáno", - "Disallow_reacting": "Zakázat reakci", - "Disallow_reacting_Description": "Nepovolí reakci", + "Disallow_reacting": "Zakázat reakce", + "Disallow_reacting_Description": "Zakáže reakce", "Display_unread_counter": "Zobrazit počet nepřečtených zpráv", "Display_offline_form": "Zobrazit offline formulář", "Displays_action_text": "Zobrazuje text akce", @@ -627,7 +631,7 @@ "Domain_removed": "Doména odebrána", "Domains": "Domény", "Domains_allowed_to_embed_the_livechat_widget": "Čárkou oddělený seznam domén, kde se smí zobrazovat livechat. Pro povolení všech domén nechte prázdné", - "Download_My_Data": "Stáhněte si Moje data", + "Download_My_Data": "Stáhnout Má data", "Download_Snippet": "Stáhnout", "Drop_to_upload_file": "Pusťe soubor do okna pro jeho nahrání", "Dry_run": "Zkouška", @@ -695,9 +699,7 @@ "Enter_Normal": "Normální mód (odeslání po stisku klávesy enter)", "Enter_to": "Enter", "Error": "Chyba", - "Error_404": "Chyba: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Chyba: Rocket.Chat vyžaduje tail oplogu pokud běží na více instancích.", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Prověřte, že je MongoDB v ReplicaSet módu a proměnná prostředí MONGO_OPLOG_URL je na aplikačním serveru nastavena správně", + "Error_404": "Chyba: 404 nenalezeno", "error-action-not-allowed": "__action__ není povolena", "error-application-not-found": "Aplikace nenalezena", "error-archived-duplicate-name": "Existuje archivovaná místnost s názvem '__room_name__'", @@ -783,7 +785,7 @@ "Example_s": "Příklad: %s", "Exclude_Botnames": "Vyloučit boty", "Exclude_Botnames_Description": "Nepřevádět v potaz zprávy botu, jejichž jména odpovídají výše uvedenému regulárnímu výrazu. Pokud je pole prázdné, budou převedeny zprávy všech botů", - "Export_My_Data": "Exportovat mé údaje", + "Export_My_Data": "Exportovat má data", "External_Service": "Externí služba", "External_Queue_Service_URL": "URL Externí služby front", "Facebook_Page": "Facebook stránka", @@ -1080,7 +1082,7 @@ "IssueLinks_LinkTemplate_Description": "Šablona pro odkazy na issue; %s bude nahrazeno číslem issue.", "It_works": "Funguje to", "Idle_Time_Limit": "Limit času nepřítomnosti", - "Idle_Time_Limit_Description": "Období, dokud se stav nezmění. Hodnota musí být v sekundách.", + "Idle_Time_Limit_Description": "Doba po které se stav změní na nepřítomen. Hodnota musí být v sekundách.", "italics": "kurzíva", "Jitsi_Chrome_Extension": "ID Chrome rozšíření", "Jitsi_Enable_Channels": "Povolit v místnostech", @@ -1123,7 +1125,7 @@ "Label": "Štítek", "Language": "Jazyk", "Language_Version": "Anglická verze", - "Language_Not_set": "Žádné specifické", + "Language_Not_set": "Nespecifikováno", "Last_login": "Poslední přihlášení", "Last_Message_At": "Poslední zpráva v", "Last_seen": "Naposledy viděn/a", @@ -1419,7 +1421,7 @@ "multi": "multi", "multi_line": "více řádků", "Mute_all_notifications": "Vypnout všechna upozornění", - "Mute_Group_Mentions": "Ztlumit @all a @vše zmínka", + "Mute_Group_Mentions": "Ztlumit @all a @here zmínky", "mute-user": "Ztišit uživatele", "mute-user_description": "Právo ztišit jiné uživatele v aktuální místnosti", "Mute_Focused_Conversations": "Vypnout upozornění na aktuální konverzaci", @@ -1655,7 +1657,7 @@ "Reason_To_Join": "Důvod připojení", "RealName_Change_Disabled": "Váš administrátor zakázal změnu jmen", "Receive_alerts": "Dostávat upozornění", - "Receive_Group_Mentions": "Přijměte @all a @známky", + "Receive_Group_Mentions": "Obdržet všechny @all a @here zmínky", "Record": "Záznam", "Redirect_URI": "URI Přesměrování", "Refresh_keys": "Obnovit klíče", @@ -1779,8 +1781,8 @@ "Search_Private_Groups": "Vyhledávání soukromých skupin", "Search_Provider": "Poskytovatel vyhledávání", "Search_Page_Size": "Velikost stránky", - "Search_current_provider_not_active": "Poskytovatel aktuálního vyhledávání není aktivní", - "Search_message_search_failed": "Žádost vyhledávání selhala", + "Search_current_provider_not_active": "Aktuální poskytovatel vyhledávání není aktivní", + "Search_message_search_failed": "Požadavek na vyhledávání selhal", "seconds": "sekundy", "Secret_token": "Tajný token", "Security": "Zabezpečení", @@ -2090,7 +2092,7 @@ "unarchive-room_description": "Právo odarchivovat místnost", "Unblock_User": "Odblokovat uživatele", "Uninstall": "Odinstalovat", - "Unignore": "Vynechat", + "Unignore": "Odignorovat", "Unmute_someone_in_room": "Zrušit ztlumení někoho v místnosti", "Unmute_user": "Zrušit ztlumení uživatele", "Unnamed": "Nepojmenovaný", @@ -2177,17 +2179,17 @@ "User_uploaded_image": "Nahrát obrázek", "User_Presence": "Přítomný uživatel", "UserDataDownload": "Stáhnout uživatelská data", - "UserData_EnableDownload": "Aktivovat stahování dat uživatelem", - "UserData_FileSystemPath": "Cesta systému (exportované soubory)", + "UserData_EnableDownload": "Povolit stahování dat uživatelem", + "UserData_FileSystemPath": "Systémová cesta (exportované soubory)", "UserData_FileSystemZipPath": "Systémová cesta (komprimovaný soubor)", "UserData_ProcessingFrequency": "Frekvence zpracování (minuty)", - "UserData_MessageLimitPerRequest": "Limit zprávy na žádost", + "UserData_MessageLimitPerRequest": "Limit zpráv na žádost", "UserDataDownload_EmailSubject": "Datový soubor je připraven k stažení", - "UserDataDownload_EmailBody": "Váš datový soubor je nyní připraven ke stažení. Klikněte na zdea stáhněte si ji.", - "UserDataDownload_Requested": "Stáhnout soubor požadovaný", - "UserDataDownload_Requested_Text": "Váš datový soubor bude generován. Odkaz na stažení bude po odeslání zaslán na vaši e-mailovou adresu.", - "UserDataDownload_RequestExisted_Text": "Váš datový soubor je již generován. Odkaz na stažení bude po odeslání zaslán na vaši e-mailovou adresu.", - "UserDataDownload_CompletedRequestExisted_Text": "Váš datový soubor byl již vytvořen. Podívejte se na svůj e-mailový účet pro odkaz ke stažení.", + "UserDataDownload_EmailBody": "Váš datový soubor je nyní připraven ke stažení. Klikněte zdea stáhněte si ji.", + "UserDataDownload_Requested": "Stáhnutí souboru vyžádáno", + "UserDataDownload_Requested_Text": "Váš datový soubor je právě generován. Odkaz na stažení bude zaslán na vaši e-mailovou adresu.", + "UserDataDownload_RequestExisted_Text": "Váš datový soubor je již generován. Odkaz na stažení bude zaslán na vaši e-mailovou adresu.", + "UserDataDownload_CompletedRequestExisted_Text": "Váš datový soubor byl již vytvořen. Ve svém e-mailu naleznete odkaz ke stažení.", "Username": "Uživatelské jméno", "Username_and_message_must_not_be_empty": "Uživatelské jméno a zpráva nesmí být prázdné.", "Username_cant_be_empty": "Uživatelské jméno nemůže být prázdné", @@ -2310,7 +2312,7 @@ "You_are_logged_in_as": "Jste přihlášeni jako", "You_are_not_authorized_to_view_this_page": "Nemáte oprávnění k zobrazení této stránky.", "You_can_change_a_different_avatar_too": "Můžete změnit avatar pro zprávy z této integrace.", - "You_can_search_using_RegExp_eg": "Můžete vyhledávat pomocí regulárních výrazů např.", + "You_can_search_using_RegExp_eg": "Můžete vyhledávat pomocí regulárních výrazů např. /^text$/i", "You_can_use_an_emoji_as_avatar": "Můžete také použít emotikonu jako avatar.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Webhooky můžete použít pro jednoduchou integraci s Vaším CRM", "You_cant_leave_a_livechat_room_Please_use_the_close_button": "LiveChat místnost nelze opustit. Použijte prosím tlačítko zavřít.", diff --git a/packages/rocketchat-i18n/i18n/da.i18n.json b/packages/rocketchat-i18n/i18n/da.i18n.json index 451551db9b07..a071f87466d3 100644 --- a/packages/rocketchat-i18n/i18n/da.i18n.json +++ b/packages/rocketchat-i18n/i18n/da.i18n.json @@ -24,92 +24,92 @@ "Accounts_AllowAnonymousRead": "Tillad anonym læsning", "Accounts_AllowAnonymousWrite": "Tillad anonym skrivning", "Accounts_AllowDeleteOwnAccount": "Lad brugere slette deres egen konto", - "Accounts_AllowedDomainsList": "Tilladt domæne liste", + "Accounts_AllowedDomainsList": "Liste over tilladte domæner", "Accounts_AllowedDomainsList_Description": "Kommasepareret liste over tilladte domæner", "Accounts_AllowEmailChange": "Tillad ændring af e-mail", "Accounts_AllowPasswordChange": "Tillad adgangskodeændring", - "Accounts_AllowUserAvatarChange": "Tillad brugernes Avatar Skift", - "Accounts_AllowRealNameChange": "Tillad navnændring", - "Accounts_AllowUsernameChange": "Tillad brugernavnskift", + "Accounts_AllowUserAvatarChange": "Tillad, at brugerne skifter avatar", + "Accounts_AllowRealNameChange": "Tillad navneændring", + "Accounts_AllowUsernameChange": "Tillad brugernavneændring", "Accounts_AllowUserProfileChange": "Tillad ændring af brugerprofil", "Accounts_AvatarResize": "Ændre størrelsen på avatarer", - "Accounts_AvatarSize": "Avatar Størrelse", + "Accounts_AvatarSize": "Avatar-størrelse", "Accounts_BlockedDomainsList": "Liste over blokerede domæner", "Accounts_BlockedDomainsList_Description": "Kommasepareret liste over blokerede domæner", - "Accounts_BlockedUsernameList": "Blokeret brugernavnsliste", - "Accounts_BlockedUsernameList_Description": "Kommasepareret liste over blokerede brugernavne (case-sensitive)", - "Accounts_CustomFields_Description": "Skal være et gyldigt JSON, hvor nøgler er feltnavne, der indeholder en ordbog med feltindstillinger. Eksempel:
{\n\"rolle\": {\n\"type\": \"vælg\",\n\"defaultValue\": \"student\",\n\"muligheder\": [\"lærer\", \"studerende\"],\n\"kræves\": sandt,\n\"modifyRecordField\": {\n\"array\": sandt,\n\"felt\": \"roller\"\n}\n},\n\"twitter\": {\n\"type\": \"tekst\",\n\"kræves\": sandt,\n\"minLength\": 2,\n\"maxlængde\": 10\n}\n}", + "Accounts_BlockedUsernameList": "Liste over blokerede brugernavne", + "Accounts_BlockedUsernameList_Description": "Kommasepareret liste over blokerede brugernavne (der er ikke forskel på store og små bogstaver)", + "Accounts_CustomFields_Description": "Skal være gyldigt JSON, hvor nøgler er feltnavne, der indeholder en ordbog med feltindstillinger. Eksempel:
{\n\"role\": {\n\"type\": \"select\",\n\"defaultValue\": \"student\",\n\"options\": [\"lærer\", \"studerende\"],\n\"required\": true,\n\"modifyRecordField\": {\n\"array\": true,\n\"felt\": \"roller\"\n}\n},\n\"twitter\": {\n\"type\": \"text\",\n\"required\": sandt,\n\"minLength\": 2,\n\"maxLength\": 10\n}\n}", "Accounts_CustomFieldsToShowInUserInfo": "Brugerdefinerede felter, der skal vises i brugerinfo", - "Accounts_DefaultUsernamePrefixSuggestion": "Standard brugernavn Prefix Forslag", - "Accounts_Default_User_Preferences": "Standard brugerindstillinger", - "Accounts_Default_User_Preferences_audioNotifications": "Lydvarsler Standardvarsel", - "Accounts_Default_User_Preferences_desktopNotifications": "Standardmeddelelse til skrivebordsmeddelelser", - "Accounts_Default_User_Preferences_mobileNotifications": "Standardvarsling for mobilmeddelelser", - "Accounts_Default_User_Preferences_not_available": "Kunne ikke hente brugerindstillinger, fordi de endnu ikke er konfigureret af brugeren", + "Accounts_DefaultUsernamePrefixSuggestion": "Forslag til standard-præfiks til brugernavne", + "Accounts_Default_User_Preferences": "Standard-brugerindstillinger", + "Accounts_Default_User_Preferences_audioNotifications": "Standardlyd for lydnotifikationer", + "Accounts_Default_User_Preferences_desktopNotifications": "Standardbesked for skrivebordsnotifikationer", + "Accounts_Default_User_Preferences_mobileNotifications": "Standardbesked for mobilnotifikationer", + "Accounts_Default_User_Preferences_not_available": "Kunne ikke hente brugerindstillingerne, fordi de endnu ikke er konfigureret af brugeren", "Accounts_denyUnverifiedEmail": "Afvis ubekræftet e-mail", - "Accounts_EmailVerification": "Email Verifikation", + "Accounts_EmailVerification": "E-mail-bekræftelse", "Accounts_EmailVerification_Description": "Sørg for, at du har korrekte SMTP-indstillinger for at bruge denne funktion", - "Accounts_Email_Approved": "[navn]

Din konto blev godkendt.

", - "Accounts_Email_Activated": "[navn]

Din konto blev aktiveret.

", + "Accounts_Email_Approved": "[name]

Din konto er godkendt.

", + "Accounts_Email_Activated": "[name]

Din konto er aktiveret.

", "Accounts_Email_Deactivated": "[navn]

Din konto blev deaktiveret.

", "Accounts_Email_Approved_Subject": "Konto godkendt", "Accounts_Email_Activated_Subject": "Konto aktiveret", "Accounts_Email_Deactivated_Subject": "Konto deaktiveret", - "Accounts_Enrollment_Email": "Tilmelding Email", - "Accounts_Enrollment_Email_Default": "

Velkommen til

[SITE_NAME]

Gå til [SITE_URL]og prøv den bedste open source chat løsning, der er tilgængelig i dag!

", - "Accounts_Enrollment_Email_Description": "Du kan bruge følgende pladsholdere:
  • [navn], [fname], [lname] for brugerens fulde navn, fornavn eller efternavn.
  • [email] for brugerens e-mail.
  • [Site_Name] og [Site_URL] for henholdsvis Applikationsnavn og URL.
", + "Accounts_Enrollment_Email": "Tilmeldings-e-mail", + "Accounts_Enrollment_Email_Default": "

Velkommen til

[SITE_NAME]

Gå til [SITE_URL] for at prøve den bedste opensource-chatløsning, du kan få i dag!

", + "Accounts_Enrollment_Email_Description": "Du kan bruge følgende pladsholdere:
  • [navn], [fname], [lname] for brugerens fulde navn, fornavn eller efternavn.
  • [email] for brugerens e-mail.
  • [Site_Name] og [Site_URL] for henholdsvis applikationsnavn og url.
", "Accounts_Enrollment_Email_Subject_Default": "Velkommen til [Site_Name]", - "Accounts_Admin_Email_Approval_Needed_Default": "

Brugeren [navn] ([email])er blevet registreret.

Kontroller venligst \"Administration ->Brugere\" for at aktivere eller slette den.

", - "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

Brugeren [navn] ([email])er blevet registreret.

Årsag: [årsag]

Kontroller venligst \"Administration ->Brugere\" for at aktivere eller slette den.

", - "Accounts_Admin_Email_Approval_Needed_Subject_Default": "En ny bruger er registreret og har brug for godkendelse", - "Accounts_ForgetUserSessionOnWindowClose": "Glem brugersession i vinduet Luk", - "Accounts_Iframe_api_method": "Api Metode", - "Accounts_Iframe_api_url": "API-URL", + "Accounts_Admin_Email_Approval_Needed_Default": "

Brugeren [navn] ([email])er blevet registreret.

Vær venlig at aktivere eller slette denne bruger under \"Administration -> Brugere\".

", + "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

Brugeren [navn] ([email])er blevet registreret.

Årsag: [reason]

Vær venlig at aktivere eller slette denne bruger under \"Administration -> Brugere\".

", + "Accounts_Admin_Email_Approval_Needed_Subject_Default": "En ny bruger har registreret sig og har brug for godkendelse", + "Accounts_ForgetUserSessionOnWindowClose": "Glem brugersessionen, når vinduet lukkes", + "Accounts_Iframe_api_method": "API-metode", + "Accounts_Iframe_api_url": "API-url", "Accounts_iframe_enabled": "Aktiveret", - "Accounts_iframe_url": "Iframe-URL", - "Accounts_LoginExpiration": "Login Expiration in Days", - "Accounts_ManuallyApproveNewUsers": "Godkendelse af nye brugere manuelt", - "Accounts_OAuth_Custom_Authorize_Path": "Godkendelse af sti", - "Accounts_OAuth_Custom_Button_Color": "Knap Farve", - "Accounts_OAuth_Custom_Button_Label_Color": "Knappen Tekstfarve", - "Accounts_OAuth_Custom_Button_Label_Text": "Knappen Tekst", - "Accounts_OAuth_Custom_Enable": "Muliggøre", + "Accounts_iframe_url": "Iframe-url", + "Accounts_LoginExpiration": "Login udløber efter så mange dage", + "Accounts_ManuallyApproveNewUsers": "Nye brugere skal godkendes manuelt", + "Accounts_OAuth_Custom_Authorize_Path": "Autorisationssti", + "Accounts_OAuth_Custom_Button_Color": "Farve på knap", + "Accounts_OAuth_Custom_Button_Label_Color": "Tekstfarve på knap", + "Accounts_OAuth_Custom_Button_Label_Text": "Tekst på knap", + "Accounts_OAuth_Custom_Enable": "Aktivér", "Accounts_OAuth_Custom_id": "Id", - "Accounts_OAuth_Custom_Identity_Path": "Identitetsvej", - "Accounts_OAuth_Custom_Login_Style": "Login Style", - "Accounts_OAuth_Custom_Merge_Users": "Flette brugere", + "Accounts_OAuth_Custom_Identity_Path": "Identitetssti", + "Accounts_OAuth_Custom_Login_Style": "Loginstil", + "Accounts_OAuth_Custom_Merge_Users": "Sammenflet brugere", "Accounts_OAuth_Custom_Scope": "Anvendelsesområde", "Accounts_OAuth_Custom_Secret": "Hemmelighed", - "Accounts_OAuth_Custom_Token_Path": "Tokenbane", - "Accounts_OAuth_Custom_Token_Sent_Via": "Token Sendt Via", - "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identitets Token Sendt Via", - "Accounts_OAuth_Custom_Username_Field": "Brugernavn felt", - "Accounts_OAuth_Drupal": "Drupal login aktiveret", - "Accounts_OAuth_Drupal_callback_url": "Drupal oAuth2 Omdirigere URI", - "Accounts_OAuth_Drupal_id": "Drupal oAuth2 Client ID", - "Accounts_OAuth_Drupal_secret": "Drupal oAuth2 Client Secret", - "Accounts_OAuth_Facebook": "Facebook Login", - "Accounts_OAuth_Facebook_callback_url": "Facebook-tilbagekaldswebadresse", - "Accounts_OAuth_Facebook_id": "Facebook App ID", - "Accounts_OAuth_Facebook_secret": "Facebook Secret", - "Accounts_OAuth_Github": "OAuth Aktiveret", - "Accounts_OAuth_Github_callback_url": "Github Tilbagekaldelses URL", - "Accounts_OAuth_GitHub_Enterprise": "OAuth Aktiveret", - "Accounts_OAuth_GitHub_Enterprise_callback_url": "GitHub Enterprise Tilbagekaldsadresse", + "Accounts_OAuth_Custom_Token_Path": "Tokensti", + "Accounts_OAuth_Custom_Token_Sent_Via": "Token sendt via", + "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identitets-token sendt via", + "Accounts_OAuth_Custom_Username_Field": "Brugernavnefelt", + "Accounts_OAuth_Drupal": "Drupal-login aktiveret", + "Accounts_OAuth_Drupal_callback_url": "Omdirigerings-uri for Drupals oAuth2", + "Accounts_OAuth_Drupal_id": "Klient-id for Drupals oAuth2", + "Accounts_OAuth_Drupal_secret": "Klienthemmelighed for Drupals oAuth2", + "Accounts_OAuth_Facebook": "Facebook-login", + "Accounts_OAuth_Facebook_callback_url": "Facebooks tilbagekalds-url", + "Accounts_OAuth_Facebook_id": "Facebooks app-id", + "Accounts_OAuth_Facebook_secret": "Facebook-hemmelighed", + "Accounts_OAuth_Github": "OAuth aktiveret", + "Accounts_OAuth_Github_callback_url": "Tilbagekalds-url for Github", + "Accounts_OAuth_GitHub_Enterprise": "OAuth aktiveret", + "Accounts_OAuth_GitHub_Enterprise_callback_url": "Tilbagekalds-url for GitHub Enterprise", "Accounts_OAuth_GitHub_Enterprise_id": "Klient-id", - "Accounts_OAuth_GitHub_Enterprise_secret": "Client Secret", + "Accounts_OAuth_GitHub_Enterprise_secret": "Klienthemmelighed", "Accounts_OAuth_Github_id": "Klient-id", - "Accounts_OAuth_Github_secret": "Client Secret", - "Accounts_OAuth_Gitlab": "OAuth Aktiveret", - "Accounts_OAuth_Gitlab_callback_url": "GitLab-tilbagekaldelses-URL", - "Accounts_OAuth_Gitlab_id": "GitLab Id", - "Accounts_OAuth_Gitlab_secret": "Client Secret", - "Accounts_OAuth_Google": "Google Login", - "Accounts_OAuth_Google_callback_url": "Google tilbagekaldswebadresse", + "Accounts_OAuth_Github_secret": "Klienthemmelighed", + "Accounts_OAuth_Gitlab": "OAuth aktiveret", + "Accounts_OAuth_Gitlab_callback_url": "Tilbagekalds-url for GitLab", + "Accounts_OAuth_Gitlab_id": "GitLab-id", + "Accounts_OAuth_Gitlab_secret": "Klienthemmelighed", + "Accounts_OAuth_Google": "Google-login", + "Accounts_OAuth_Google_callback_url": "Tilbagekalds-url for Google", "Accounts_OAuth_Google_id": "Google-id", - "Accounts_OAuth_Google_secret": "Google Secret", - "Accounts_OAuth_Linkedin": "LinkedIn Login", - "Accounts_OAuth_Linkedin_callback_url": "Linkedin Tilbagekaldelses URL", + "Accounts_OAuth_Google_secret": "Google-hemmelighed", + "Accounts_OAuth_Linkedin": "LinkedIn-login", + "Accounts_OAuth_Linkedin_callback_url": "TilbaegLinkedin Tilbagekaldelses URL", "Accounts_OAuth_Linkedin_id": "LinkedIn Id", "Accounts_OAuth_Linkedin_secret": "LinkedIn Secret", "Accounts_OAuth_Meteor": "Meteor Login", @@ -128,11 +128,11 @@ "Accounts_OAuth_Twitter_secret": "Twitter Secret", "Accounts_OAuth_Wordpress": "WordPress Login", "Accounts_OAuth_Wordpress_callback_url": "WordPress-tilbagekaldelses-URL", - "Accounts_OAuth_Wordpress_id": "WordPress Id", - "Accounts_OAuth_Wordpress_secret": "WordPress Secret", + "Accounts_OAuth_Wordpress_id": "WordPress-id", + "Accounts_OAuth_Wordpress_secret": "WordPress-hemmelighed", "Accounts_PasswordReset": "Nulstil kodeord", "Accounts_Registration_AuthenticationServices_Default_Roles": "Standardroller til godkendelsestjenester", - "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Standardroller (kommaseparerede) brugere vil blive givet, når de registreres via autentificeringstjenester", + "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Standardroller (kommaseparerede), som brugere får, når de registrerer sig via autentificeringstjenester", "Accounts_Registration_AuthenticationServices_Enabled": "Registrering med godkendelsestjenester", "Accounts_RegistrationForm": "Tilmeldingsblanket", "Accounts_RegistrationForm_Disabled": "Handicappet", @@ -696,8 +696,6 @@ "Enter_to": "Indtast til", "Error": "Fejl", "Error_404": "Fejl: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fejl: Rocket.Chat kræver oplog tailing, når du kører i flere tilfælde", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Sørg for, at din MongoDB er i ReplicaSet-tilstand og MONGO_OPLOG_URL miljøvariabel er defineret korrekt på applikationsserveren", "error-action-not-allowed": "__action__ er ikke tilladt", "error-application-not-found": "Programmet blev ikke fundet", "error-archived-duplicate-name": "Der er en arkiveret kanal med navnet '__room_name__'", @@ -972,7 +970,7 @@ "Incoming_Livechats": "Indkommende Livechats", "Incoming_WebHook": "Indkommende WebHook", "initials_avatar": "Initials Avatar", - "inline_code": "inline kode", + "inline_code": "inline-kode", "Install_Extension": "Installer forlængelse", "Install_FxOs": "Installer Rocket.Chat på din Firefox", "Install_FxOs_done": "Store! Du kan nu bruge Rocket.Chat via ikonet på din startskærm. Hav det sjovt med Rocket.Chat!", @@ -1419,7 +1417,7 @@ "Move_end_message": "`% s` - Flyt til slutningen af ​​meddelelsen", "Msgs": "besk", "multi": "multi", - "multi_line": "multi line", + "multi_line": "flere linjer", "Mute_all_notifications": "Sluk alle meddelelser", "Mute_Group_Mentions": "Mute @all og @here nævner", "mute-user": "Sluk bruger", @@ -1647,7 +1645,7 @@ "RDStation_Token": "RD Station Token", "React_when_read_only": "Tillad reaktion", "React_when_read_only_changed_successfully": "Tillad, at reagere, når kun læsning er ændret", - "Reacted_with": "Reageret med", + "Reacted_with": "Reagerede med", "Reactions": "Reaktioner", "Read_by": "Læs af", "Read_only": "Læs kun", @@ -1762,7 +1760,7 @@ "SAML_Custom_Public_Cert": "Offentligt certificeret indhold", "Sandstorm_Powerbox_Share": "Del en Sandstorm korn", "Saturday": "lørdag", - "Save": "Spare", + "Save": "Gem", "save-others-livechat-room-info": "Gem andre Livechat Room Info", "save-others-livechat-room-info_description": "Tilladelse til at gemme information fra andre livechat kanaler", "Save_changes": "Gem ændringer", @@ -1945,7 +1943,7 @@ "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Stream Cast-adresse", "Stream_Cast_Address_Description": "IP eller vært på din Rocket.Chat Central Stream Cast. F.eks. `192.168.1.1: 3000` eller` localhost: 4000`", - "strike": "strejke", + "strike": "gennemstreget", "Subject": "Emne", "Submit": "Indsend", "Success": "Succes", diff --git a/packages/rocketchat-i18n/i18n/de-AT.i18n.json b/packages/rocketchat-i18n/i18n/de-AT.i18n.json index cf2f05c7d110..4c87031138d2 100644 --- a/packages/rocketchat-i18n/i18n/de-AT.i18n.json +++ b/packages/rocketchat-i18n/i18n/de-AT.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter-Taste: ", "Error": "Fehler", "Error_404": "Fehler 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fehler: Rocket.Chat erfordert einen oplog-Tailing, wenn er in mehreren Instanzen ausgeführt wird", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Stellen Sie sicher, dass sich Ihre MongoDB im ReplicaSet-Modus befindet und die Umgebungsvariable MONGO_OPLOG_URL auf dem Anwendungsserver korrekt definiert ist", "error-action-not-allowed": "__action__ ist nicht erlaubt", "error-application-not-found": "Anwendung nicht gefunden", "error-archived-duplicate-name": "Es gibt einen archivierten Raum mit dem Namen '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/de.i18n.json b/packages/rocketchat-i18n/i18n/de.i18n.json index cd75b051b442..85108d4e8b3b 100644 --- a/packages/rocketchat-i18n/i18n/de.i18n.json +++ b/packages/rocketchat-i18n/i18n/de.i18n.json @@ -146,9 +146,9 @@ "Accounts_SearchFields": "Felder, die in der Suche berücksichtigt werden sollen", "Accounts_SetDefaultAvatar": "Standard-Avatar setzen", "Accounts_SetDefaultAvatar_Description": "Versuche Standard-Avatar über OAuth oder Gravatar zu bestimmen", - "Accounts_ShowFormLogin": "Anmeldeformular zeigen", + "Accounts_ShowFormLogin": "Standard Anmeldeformular zeigen", "Accounts_TwoFactorAuthentication_MaxDelta": "Maximales Delta", - "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Das maximale Delta bestimmt, wie viele Token zu einem bestimmten Zeitpunkt gültig sind. Token werden alle 30 Sekunden generiert und gelten für (30 * Maximum Delta) Sekunden.
Beispiel: Wenn ein maximales Delta auf 10 gesetzt ist, kann jedes Token bis zu 300 Sekunden vor oder nach dem Zeitstempel verwendet werden. Dies ist nützlich, wenn die Uhr des Clients nicht richtig mit dem Server synchronisiert ist.", + "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Das maximale Delta bestimmt, wie viele Token zu einem bestimmten Zeitpunkt gültig sind. Token werden alle 30 Sekunden generiert und gelten für (30 * Maximum Delta) Sekunden.
Beispiel: Wenn ein maximales Delta auf 10 gesetzt ist, kann jedes Token bis zu 300 Sekunden vor oder nach dem Zeitstempel verwendet werden. Dies ist nützlich, wenn die Uhr des Clients nicht richtig mit dem Server synchronisiert ist.", "Accounts_UseDefaultBlockedDomainsList": "Standardliste für blockierte Domains verwenden", "Accounts_UseDNSDomainCheck": "DNS-Domain-Check verwenden", "Accounts_UserAddedEmail_Default": "

Willkommen zu

[Site_Name]

Besuche [Site_URL] und probiere noch heute die beste Open-Source-Chat-Lösung aus.

Du kannst Dich mit den folgenden Daten anmelden: E-Mail-Adresse: [email] Passwort: [password]Es kann sein, dass Du Dein Passwort nach der ersten Anmeldung ändern musst.", @@ -201,7 +201,7 @@ "All_users_in_the_channel_can_write_new_messages": "Alle Benutzer in diesem Kanal dürfen Nachrichten schreiben", "Allow_Invalid_SelfSigned_Certs": "Ungültige und selbstsignierte SSL-Zertifikate erlauben", "Allow_Invalid_SelfSigned_Certs_Description": "Ungültige und selbstsignierte SSL-Zertifikate für die Link-Validierung und die Vorschau zulassen.", - "Alphabetical": "Alphabetisch", + "Alphabetical": "alphabetisch", "Allow_switching_departments": "Erlaube Besuchern, Abteilungen zu wechseln", "Always_open_in_new_window": "Immer in neuem Fenster öffnen", "Analytics_features_enabled": "Aktivierte Funktionen", @@ -245,7 +245,7 @@ "API_Shield_Types_Description": "Shields-Typen. Konfiguration mit einer Komma-separierten-Liste. Optionen: `online`, `channel` oder `*` für \"Alles\"", "API_Token": "API-Token", "API_Tokenpass_URL": "Url des Tokenpass Servers", - "API_Tokenpass_URL_Description": "Beispiel: https://domain.com (ohne abschließenden /)", + "API_Tokenpass_URL_Description": "Beispiel: http://domain.com (ohne Schrägstrich am Ende)", "API_Upper_Count_Limit": "Maximales Limit", "API_Upper_Count_Limit_Description": "Max. Anzahl an Einträgen, die das REST API zurückliefen soll (sofern nicht weiter eingeschränkt)", "API_User_Limit": "Limit für das Hinzufügen aller Benutzer zu einem Kanal", @@ -424,12 +424,11 @@ "Chatpal_Timeout_Size_Description": "Zeit zwischen 2 Indexfenster in ms (beim Bootstrapping)", "Chatpal_Window_Size_Description": "Größe der Indexfenster in h (beim Bootstrapping)", "Chatpal_ERROR_TAC_must_be_checked": "Die Geschäftsbedingungen müssen akzeptiert werden", - "Chatpal_ERROR_Email_must_be_set": "ine E-Mail Adresse muss angegeben werden", - "Chatpal_ERROR_Email_must_be_valid": "ine E-Mail Adresse mussvalide sein", + "Chatpal_ERROR_Email_must_be_set": "E-Mail Adresse muss angegeben werden", + "Chatpal_ERROR_Email_must_be_valid": "E-Mail Adresse muss valide sein", "Chatpal_ERROR_username_already_exists": "Benutzername existiert bereits", "Chatpal_created_key_successfully": "API-Key erfolgreich erstellt", "Chatpal_run_search": "Suche", - "Chatpal_Get_more_information_about_chatpal_on_our_website": "Finden Sie mehr über Chatpal heraus, unter http://chatpal.io!", "CDN_PREFIX": "CDN-Präfix", "Certificates_and_Keys": "Zertifikate und Schlüssel", "Change_Room_Type": "Ändere den Typ des Raums", @@ -442,7 +441,7 @@ "Channel_Archived": "Kanal mit dem Namen '#%s' wurde erfolgreich archiviert", "Channel_created": "Kanal `#%s` wurde angelegt.", "Channel_doesnt_exist": "Der Kanal `#%s` existiert nicht.", - "Channel_name": "Kanalname", + "Channel_name": "Kanal Name", "Channel_Name_Placeholder": "Bitte geben Sie einen Namen für den Kanal ein", "Channel_to_listen_on": "Kanal, auf dem gehört werden soll", "Channel_Unarchived": "Kanal mit dem Namen '#%s' ist nicht länger archiviert", @@ -616,11 +615,11 @@ "Disable_two-factor_authentication": "Zwei-Faktor-Authentifizierung deaktivieren", "Disabled": "deaktiviert", "Disallow_reacting": "Reaktion nicht zulassen", - "Disallow_reacting_Description": "Nicht reagieren", + "Disallow_reacting_Description": "lässt Reaktion nicht zu", "Display_unread_counter": "Anzahl der ungelesenen Nachrichten anzeigen", "Display_offline_form": "Formular für Offline-Kontakt anzeigen", "Displays_action_text": "Zeigt den Aktionstext", - "Do_not_display_unread_counter": "Keinen Zähler für diesen Kanal anzeigen", + "Do_not_display_unread_counter": "Keinerlei Zähler für diesen Kanal anzeigen", "Do_you_want_to_accept": "Willst du akzeptieren?", "Do_you_want_to_change_to_s_question": "Möchtest Du dies zu %s ändern?", "Domain": "Domain", @@ -628,7 +627,7 @@ "Domain_removed": "Domäne entfernt", "Domains": "Domains", "Domains_allowed_to_embed_the_livechat_widget": "Komma-separierte Liste der Domänen, in denen das Livechat-Widget eingebettet werden darf. Leer lassen, um keine Einschränkung vorzunehmen.", - "Download_My_Data": "Laden Sie Meine Daten herunter", + "Download_My_Data": "Lade Meine Daten herunter", "Download_Snippet": "Download", "Drop_to_upload_file": "Ablegen, um Datei hochzuladen", "Dry_run": "Probelauf", @@ -642,7 +641,7 @@ "edit-message": "Nachricht bearbeiten", "edit-message_description": "Berechtigung, eine Nachricht in einem Raum zu bearbeiten", "edit-other-user-active-status": "Online-Status anderer Benutzer ändern", - "edit-other-user-active-status_description": "Berechtigung, den Online-Status anderer Benutzer zu ändern", + "edit-other-user-active-status_description": "Berechtigung andere Benutzerkonten zu aktivieren oder zu deaktivieren", "edit-other-user-info": "Benutzer-Informationen Anderer ändern", "edit-other-user-info_description": "Berechtigung, Benutzer-Informationen (Namen, Benutzernamen, E-Mail-Adresse) anderer Personen zu ändern", "edit-other-user-password": "Passwort anderer Benutzer ändern", @@ -662,7 +661,7 @@ "Email_address_to_send_offline_messages": "E-Mail-Adresse zum Senden von Offline-Nachrichten", "Email_already_exists": "Die E-Mail-Adresse existiert bereits.", "Email_body": "E-Mail Textkörper", - "Email_Change_Disabled": "Der Rocket.Chat-Administrator hat das Ändern der E-Mail-Adresse deaktiviert.", + "Email_Change_Disabled": "Der Administrator hat das Ändern der E-Mail-Adresse deaktiviert.", "Email_Footer_Description": "Sie können die folgenden Platzhalter verwenden:

  • [Site_Name] und [Site_URL] für den Anwendungsname und die URL.
", "Email_from": "Absender", "Email_Header_Description": "Sie können die folgenden Platzhalter verwenden:
  • [Site_Name] und [Site_URL] für den Anwendungsname und die URL.
", @@ -682,7 +681,7 @@ "Enable_Svg_Favicon": "SVG Favicon", "Enable_two-factor_authentication": "Zwei-Faktor-Authentifizierung aktivieren", "Enabled": "Aktiviert", - "Enable_Auto_Away": "Verfügbarkeit automatisch umstellen", + "Enable_Auto_Away": "\"Abwesend\" automatisch aktivieren", "Encrypted_message": "Verschlüsselte Nachricht", "End_OTR": "OTR beenden", "Enter_a_regex": "Regulären Ausdruck eingeben", @@ -696,9 +695,7 @@ "Enter_Normal": "Normaler Modus (mit Eingabetaste senden)", "Enter_to": "Eingabetaste: ", "Error": "Fehler", - "Error_404": "Fehler 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fehler: Rocket.Chat erfordert Oplog-Tailing, wenn es auf mehreren Instanzen läuft", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Bitte stellen Sie sicher, dass die MongoDB als Replicaset konfiguriert ist und die Umgebungsvariable MONGO_OPLOG_URL korrekt auf Ihren Anwendungsservern gesetzt wurde.", + "Error_404": "Fehler: 404(nicht gefunden)", "error-action-not-allowed": "__action__ ist nicht erlaubt", "error-application-not-found": "Anwendung nicht gefunden", "error-archived-duplicate-name": "Es gibt bereits einen archivierten Kanal mit dem Namen '__room_name__'", @@ -760,20 +757,20 @@ "error-not-allowed": "Nicht erlaubt", "error-not-authorized": "Nicht berechtigt", "error-push-disabled": "Push-Benachrichtigungen sind deaktiviert", - "error-remove-last-owner": "Das ist der letzte Besitzer. Bitte bestimmen Sie einen neuen Besitzer, bevor Sie diesen entfernen.", + "error-remove-last-owner": "Dies ist der letzte Besitzer. Bitte einen neuen Besitzer bestimmen, bevor Sie diesen entfernen.", "error-role-in-use": "Die Rolle kann nicht gelöscht werden, da sie gerade verwendet wird.", "error-role-name-required": "Ein Rollenname muss angegeben werden", "error-the-field-is-required": "Das Feld __field__ ist erforderlich.", "error-too-many-requests": "Fehler, zu viele Anfragen. Bitte fahren Sie langsamer fort. Sie müssen __seconds__ Sekunden warten, bevor Sie es erneut versuchen können.", "error-user-is-not-activated": "Der Benutzer ist nicht aktiviert.", - "error-user-has-no-roles": "Der Benutzer ist keinen Rollen zugewiesen.", + "error-user-has-no-roles": "Dem Benutzer sind keine Rollen zugewiesen.", "error-user-limit-exceeded": "Die Anzahl der Benutzer, die Sie hinzufügen wollen, übersteigt das vom Administrator gesetzte Limit.", "error-user-not-in-room": "Der Benutzer ist nicht in diesem Raum.", "error-user-registration-disabled": "Benutzerregistrierung ist deaktiviert", "error-user-registration-secret": "Benutzerregistrierung ist nur über geheime URL erlaubt", "error-you-are-last-owner": "Du bist der letzte Besitzer. Bitte bestimme einen neuen Besitzer, bevor Du den Raum verlässt.", "Error_changing_password": "Fehler beim Ändern des Passwortes", - "Error_loading_pages": "Fehler beim laden der Seite", + "Error_loading_pages": "Fehler beim laden der Seiten", "Esc_to": "Esc: ", "Event_Trigger": "Event Trigger", "Event_Trigger_Description": "Bitte wählen Sie aus, welche Eventarten diesen ausgehenden Webhook auslösen", @@ -903,18 +900,18 @@ "Hex_Color_Preview": "Farbvorschau (Hex)", "Hidden": "Versteckt", "Hide_Avatars": "Avatare verstecken", - "Hide_counter": "Zähler verstecken", - "Hide_flextab": "Rechte Seitenleiste über Klick verstecken", - "Hide_Group_Warning": "Sind Sie sicher, dass Sie die Gruppe \"%s\" verstecken wollen?", + "Hide_counter": "Zähler ausblenden", + "Hide_flextab": "Rechte Seitenleiste mit Klick ausblenden", + "Hide_Group_Warning": "Sind Sie sicher, dass Sie die Gruppe \"%s\" ausblenden wollen?", "Hide_Livechat_Warning": "Sind Sie sich sicher, dass Sie den Livechat mit \"%s\" ausblenden wollen?", - "Hide_Private_Warning": "Sind Sie sicher, dass Sie das Gespräch mit \"%s\" verstecken wollen?", - "Hide_roles": "Rollen nicht anzeigen", + "Hide_Private_Warning": "Sind Sie sicher, dass Sie das Gespräch mit \"%s\" ausblenden wollen?", + "Hide_roles": "Rollen ausblenden", "Hide_room": "Raum verstecken", "Hide_Room_Warning": "Sind Sie sicher, dass Sie den Raum \"%s\" verstecken wollen?", "Hide_Unread_Room_Status": "Ungelesen-Status des Raums nicht anzeigen", "Hide_usernames": "Benutzernamen ausblenden", "Highlights": "Hervorhebungen", - "Highlights_How_To": "Um benachrichtigt zu werden, wenn ein Wort oder Ausdruck erwähnt wird, fügen Sie ihn hier hinzu. Sie können Wörter und Ausdrücke mit Kommata trennen. Groß- und Kleinschreibung wird hierbei nicht berücksichtig.", + "Highlights_How_To": "Um benachrichtigt zu werden, wenn ein Wort oder Ausdruck erwähnt wird, fügen Sie ihn hier hinzu. Sie können Wörter und Ausdrücke mit Kommata trennen. Groß- und Kleinschreibung wird hierbei nicht berücksichtigt.", "Highlights_List": "Wörter hervorheben", "History": "Chronik", "Host": "Host", @@ -1124,7 +1121,7 @@ "Label": "Bezeichnung", "Language": "Sprache", "Language_Version": "Deutsche Version", - "Language_Not_set": "Keine spezifische", + "Language_Not_set": "nicht spezifisch", "Last_login": "Letzte Anmeldung", "Last_Message_At": "Letzte Nachricht am", "Last_seen": "Zuletzt online", @@ -1656,7 +1653,7 @@ "Read_only_channel": "Kanal schreibgeschützt", "Read_only_group": "Schreibgeschützte Gruppe", "Reason_To_Join": "Grund zu Join", - "RealName_Change_Disabled": "Der Rocket.Chat Administrator hat das ändern von Namen deaktiviert", + "RealName_Change_Disabled": "Der Administrator hat das ändern von Namen deaktiviert", "Receive_alerts": "Empfange Alarme", "Receive_Group_Mentions": "Empfange @all und @here Erwähnungen", "Record": "Aufnehmen", @@ -1755,7 +1752,7 @@ "SAML_Custom_Generate_Username": "Benutzernamen generieren", "SAML_Custom_IDP_SLO_Redirect_URL": "IDP SLO Redirect URL", "SAML_Custom_Issuer": "Benutzerdefinierter Aussteller", - "SAML_Custom_Logout_Behaviour": "Logout-Verhalten", + "SAML_Custom_Logout_Behaviour": "Verhalten beim Abmelden", "SAML_Custom_Logout_Behaviour_Terminate_SAML_Session": "SAML-Session beenden", "SAML_Custom_Logout_Behaviour_End_Only_RocketChat": "Nur von Rocket.Chat abmelden", "SAML_Custom_Private_Key": "Privater Schlüssel", @@ -1768,7 +1765,7 @@ "save-others-livechat-room-info_description": "Berechtigung, die Livechat-Informationen anderer Konversationen zu speichern", "Save_changes": "Änderungen speichern", "Save_Mobile_Bandwidth": "Mobiles Datenvolumen sparen", - "Save_to_enable_this_action": "Speichern Sie, um die Aktion zu aktivieren", + "Save_to_enable_this_action": "Speichern Sie, um diese Aktion zu aktivieren", "Saved": "Gespeichert", "Saving": "Speichern", "Scan_QR_code": "Scanne den QR-Code mit einer Authenticator-App (wie Google Authenticator, Authy oder Duo). Danach wird ein sechsstelliger Code angezeigt, den Sie unten eingeben müssen.", @@ -1780,7 +1777,7 @@ "Search_by_username": "Anhand des Nutzernamens suchen", "Search_Messages": "Nachrichten durchsuchen", "Search_Private_Groups": "Durchsuche private Kanäle", - "Search_Provider": "Anbieter suchen", + "Search_Provider": "Suchanbieter", "Search_Page_Size": "Seitengröße", "Search_current_provider_not_active": "Aktueller Suchanbieter ist nicht aktiv", "Search_message_search_failed": "Suchanfrage fehlgeschlagen", @@ -1806,8 +1803,8 @@ "Send_email": "E-Mail senden", "Send_invitation_email": "Einladung per E-Mail senden", "Send_invitation_email_error": "Du hast keine gültige E-Mail-Adresse angegeben.", - "Send_invitation_email_info": "Sie können mehrere Einladungen per E-Mail gleichzeitig absenden", - "Send_invitation_email_success": "Sie haben eine Einladung an folgende E-Mail-Adressen versendet:", + "Send_invitation_email_info": "Sie können mehrere Einladungen gleichzeitig per E-Mail absenden", + "Send_invitation_email_success": "Sie haben eine erfolgreich Einladung an folgende E-Mail-Adressen versendet:", "Send_request_on_chat_close": "Nach dem Schließen des Chatraums einen Webhook anstoßen", "Send_request_on_lead_capture": "Anfrage senden bei Lead Capture", "Send_request_on_offline_messages": "Webhook bei Offline-Nachrichten anstoßen", @@ -1817,7 +1814,7 @@ "Send_welcome_email": "Willkommens-E-Mail senden", "Send_your_JSON_payloads_to_this_URL": "Senden Sie Ihre JSON-Nutzlasten an diese URL", "Sending": "Senden...", - "Sent_an_attachment": "Als Anhang gesendet", + "Sent_an_attachment": "Anhang gesendet", "Served_By": "Bedient von", "Service": "Service", "Service_account_key": "Service Account Schlüssel", @@ -1846,7 +1843,7 @@ "Show_more": "Weitere Nutzer zeigen", "show_offline_users": "Zeige Benutzer an, die offline sind", "Show_on_registration_page": "Auf der Registrierungsseite anzeigen", - "Show_only_online": "Nur Online-Benutzer anzeigen", + "Show_only_online": "Nur Benutzer anzeigen welche Online sind", "Show_preregistration_form": "Vorregistrierungsformular anzeigen", "Show_queue_list_to_all_agents": "Die Warteschlange allen Agenten anzeigen", "Show_the_keyboard_shortcut_list": "Zeige die Liste der Keyboard-Shortcuts", @@ -1854,7 +1851,7 @@ "Showing_online_users": "__total_showing__ von __total__ Benutzern werden angezeigt", "Showing_results": "

%s Ergebnisse

", "Sidebar": "Seitenleiste", - "Sidebar_list_mode": "Sidebar-Kanallisten-Modus", + "Sidebar_list_mode": "Seitenleiste Kanallisten-Modus", "Sign_in_to_start_talking": "Anmelden, um mit dem Chatten zu beginnen", "since_creation": "seit %s", "Site_Name": "Seitenname", @@ -2344,4 +2341,4 @@ "your_message_optional": "Ihre optionale Nachricht", "Your_password_is_wrong": "Falsches Passwort", "Your_push_was_sent_to_s_devices": "Eine Push-Nachricht wurde an %s Geräte gesendet." -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/el.i18n.json b/packages/rocketchat-i18n/i18n/el.i18n.json index ad821fbc70f9..0cfb88aea548 100644 --- a/packages/rocketchat-i18n/i18n/el.i18n.json +++ b/packages/rocketchat-i18n/i18n/el.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter για να", "Error": "Λάθος", "Error_404": "Σφάλμα 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Σφάλμα: Το Rocket.Chat απαιτεί oplog tailing όταν εκτελείται σε πολλαπλές περιπτώσεις", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Βεβαιωθείτε ότι το MongoDB βρίσκεται στη λειτουργία ReplicaSet και ότι η μεταβλητή περιβάλλοντος MONGO_OPLOG_URL ορίζεται σωστά στον διακομιστή εφαρμογών", "error-action-not-allowed": "__action__ δεν επιτρέπεται", "error-application-not-found": "Η εφαρμογή δεν βρέθηκε", "error-archived-duplicate-name": "Υπάρχει ένα αρχειοθετημένο κανάλι με το όνομα «__room_name__»", diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index ac0942786afc..34bbacfe2a7c 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -130,6 +130,14 @@ "Accounts_OAuth_Wordpress_callback_url": "WordPress Callback URL", "Accounts_OAuth_Wordpress_id": "WordPress Id", "Accounts_OAuth_Wordpress_secret": "WordPress Secret", + "Accounts_OAuth_Wordpress_server_type_wordpress_com": "Wordpress.com", + "Accounts_OAuth_Wordpress_server_type_wp_oauth_server": "WP OAuth Server Plugin", + "Accounts_OAuth_Wordpress_server_type_custom": "Custom", + "Accounts_OAuth_Wordpress_identity_path": "Identity Path", + "Accounts_OAuth_Wordpress_identity_token_sent_via": "Identity Token Sent Via", + "Accounts_OAuth_Wordpress_token_path": "Token Path", + "Accounts_OAuth_Wordpress_authorize_path": "Authorize Path", + "Accounts_OAuth_Wordpress_scope": "Scope", "Accounts_PasswordReset": "Password Reset", "Accounts_Registration_AuthenticationServices_Default_Roles": "Default Roles for Authentication Services", "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Default roles (comma-separated) users will be given when registering through authentication services", @@ -184,7 +192,9 @@ "additional_integrations_Zapier": "Are you looking to integrate other software and applications with Rocket.Chat but you don't have the time to manually do it? Then we suggest using Zapier which we fully support. Read more about it on our documentation. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", "additional_integrations_Bots": "If you are looking for how to integrate your own bot, then look no further than our Hubot adapter. https://github.com/RocketChat/hubot-rocketchat", "Administration": "Administration", + "Admin_Info": "Admin Info", "Adult_images_are_not_allowed": "Adult images are not allowed", + "Advocacy": "Advocacy", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "After OAuth2 authentication, users will be redirected to this URL", "Agent": "Agent", "Agent_added": "Agent added", @@ -340,6 +350,7 @@ "ban-user_description": "Permission to ban a user from a channel", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Beta feature. Depends on Video Conference to be enabled.", "Block_User": "Block User", + "Blockchain": "Blockchain", "Body": "Body", "bold": "bold", "bot_request": "Bot request", @@ -432,8 +443,8 @@ "Chatpal_ERROR_username_already_exists": "Username already exists", "Chatpal_created_key_successfully": "API-Key created successfully", "Chatpal_run_search": "Search", - "Chatpal_Get_more_information_about_chatpal_on_our_website": "Get more information about Chatpal on http://chatpal.io!", "CDN_PREFIX": "CDN Prefix", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Get more information about Chatpal on http://chatpal.io!", "Certificates_and_Keys": "Certificates and Keys", "Change_Room_Type": "Changing the Room Type", "Changing_email": "Changing email", @@ -488,12 +499,16 @@ "Collapse_Embedded_Media_By_Default": "Collapse Embedded Media by Default", "Color": "Color", "Contains_Security_Fixes": "Contains Security Fixes", + "Continue": "Continue", "Commands": "Commands", "Comment_to_leave_on_closing_session": "Comment to Leave on Closing Session", "Common_Access": "Common Access", + "Community": "Community", "Compact": "Compact", "Computer": "Computer", "Confirm_password": "Confirm your password", + "Consulting": "Consulting", + "Consumer_Goods": "Consumer Goods", "Content": "Content", "Conversation": "Conversation", "Conversation_closed": "Conversation closed: __comment__.", @@ -504,6 +519,7 @@ "Copy_to_clipboard": "Copy to clipboard", "COPY_TO_CLIPBOARD": "COPY TO CLIPBOARD", "Count": "Count", + "Country": "Country", "Cozy": "Cozy", "Create": "Create", "create-c": "Create Public Channels", @@ -661,6 +677,7 @@ "edited": "edited", "Editing_room": "Editing room", "Editing_user": "Editing user", + "Education": "Education", "Email": "Email", "Email_address_to_send_offline_messages": "Email Address to Send Offline Messages", "Email_already_exists": "Email already exists", @@ -698,6 +715,8 @@ "Enter_name_here": "Enter name here", "Enter_Normal": "Normal mode (send with Enter)", "Enter_to": "Enter to", + "Entertainment": "Entertainment", + "Enterprise": "Enterprise", "Error": "Error", "Error_404": "Error:404", "error-action-not-allowed": "__action__ is not allowed", @@ -840,6 +859,7 @@ "FileUpload_Storage_Type": "Storage Type", "First_Channel_After_Login": "First Channel After Login", "Flags": "Flags", + "Financial_Services": "Financial Services", "Follow_social_profiles": "Follow our social profiles, fork us on github and share your thoughts about the rocket.chat app on our trello board.", "Fonts": "Fonts", "Food_and_Drink": "Food & Drink", @@ -867,6 +887,7 @@ "From": "From", "From_Email": "From Email", "From_email_warning": "Warning: The field From is subject to your mail server settings.", + "Gaming": "Gaming", "General": "General", "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", @@ -893,14 +914,19 @@ "GoogleVision_Type_Properties": "Properties (Color) Detection", "GoogleVision_Type_SafeSearch": "SafeSearch Detection", "GoogleVision_Type_Similar": "Search Similar Images", + "Go_to_your_workspace": "Go to your workspace", + "Government": "Government", "Group_by_Type": "Group by Type", "Group_favorites": "Group favorites", + "Group_mentions_disabled_x_members": "Group mentions `@all` and `@here` have been disabled for rooms with more than __total__ members.", "Group_mentions_only": "Group mentions only", "Guest_Pool": "Guest Pool", "Hash": "Hash", "Header": "Header", "Header_and_Footer": "Header and Footer", + "Healthcare_and_Pharmaceutical": "Healthcare/Pharmaceutical", "Helpers": "Helpers", + "Help_Center": "Help Center", "Hex_Color_Preview": "Hex Color Preview", "Hidden": "Hidden", "Hide_Avatars": "Hide Avatars", @@ -973,6 +999,7 @@ "Importer_Source_File": "Source File Selection", "Incoming_Livechats": "Incoming Livechats", "Incoming_WebHook": "Incoming WebHook", + "Industry": "Industry", "initials_avatar": "Initials Avatar", "inline_code": "inline code", "Install_Extension": "Install Extension", @@ -985,6 +1012,7 @@ "Installed_at": "Installed at", "Instance_Record": "Instance Record", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructions to your visitor fill the form to send a message", + "Insurance": "Insurance", "Integration_added": "Integration has been added", "Integration_Advanced_Settings": "Advanced Settings", "Integration_disabled": "Integration disabled", @@ -1086,6 +1114,7 @@ "italics": "italics", "Jitsi_Chrome_Extension": "Chrome Extension Id", "Jitsi_Enable_Channels": "Enable in Channels", + "Job_Title": "Job Title", "join": "Join", "join-without-join-code": "Join Without Join Code", "join-without-join-code_description": "Permission to bypass the join code in channels with join code enabled", @@ -1129,6 +1158,7 @@ "Last_login": "Last login", "Last_Message_At": "Last Message At", "Last_seen": "Last seen", + "Launched_successfully": "Launched successfully", "Layout": "Layout", "Layout_Home_Body": "Home Body", "Layout_Home_Title": "Home Title", @@ -1270,6 +1300,7 @@ "Logged_out_of_other_clients_successfully": "Logged out of other clients successfully", "Login": "Login", "Login_with": "Login with %s", + "Logistics": "Logistics", "Logout": "Logout", "Logout_Others": "Logout From Other Logged In Locations", "mail-messages": "Mail Messages", @@ -1303,6 +1334,7 @@ "Manager_removed": "Manager removed", "Managing_assets": "Managing assets", "Managing_integrations": "Managing integrations", + "Manufacturing": "Manufacturing", "MapView_Enabled": "Enable Mapview", "MapView_Enabled_Description": "Enabling mapview will display a location share button on the left of the chat input field.", "MapView_GMapsAPIKey": "Google Static Maps API Key", @@ -1320,6 +1352,7 @@ "Markdown_SupportSchemesForLink": "Markdown Support Schemes for Link", "Markdown_SupportSchemesForLink_Description": "Comma-separated list of allowed schemes", "Max_length_is": "Max length is %s", + "Media": "Media", "Members_List": "Members List", "mention-all": "Mention All", "mention-all_description": "Permission to use the @all mention", @@ -1374,7 +1407,7 @@ "Message_Ignored": "This message was ignored", "Message_info": "Message info", "Message_KeepHistory": "Keep Per Message Editing History", - "Message_MaxAll": "Maximum Channel Size for ALL Message", + "Message_MaxAll": "Maximum Channel Size for Group Mentions (@all and @here)", "Message_MaxAllowedSize": "Maximum Allowed Characters Per Message", "Message_pinning": "Message pinning", "Message_QuoteChainLimit": "Maximum Number of Chained Quotes", @@ -1476,6 +1509,7 @@ "Nobody_available": "Nobody available", "Node_version": "Node Version", "None": "None", + "Nonprofit": "Nonprofit", "Normal": "Normal", "Not_authorized": "Not authorized", "Not_Available": "Not Available", @@ -1538,6 +1572,10 @@ "Oops_page_not_found": "Oops, page not found", "Or_talk_as_anonymous": "Or talk as anonymous", "Order": "Order", + "Organization_Email": "Organization Email", + "Organization_Info": "Organization Info", + "Organization_Name": "Organization Name", + "Organization_Type": "Organization Type", "Original": "Original", "OS_Arch": "OS Arch", "OS_Cpus": "OS CPU Count", @@ -1548,6 +1586,7 @@ "OS_Totalmem": "OS Total Memory", "OS_Type": "OS Type", "OS_Uptime": "OS Uptime", + "Other": "Other", "others": "others", "OTR": "OTR", "OTR_is_only_available_when_both_users_are_online": "OTR is only available when both users are online", @@ -1617,12 +1656,15 @@ "Private_Group": "Private Group", "Private_Groups": "Private Groups", "Private_Groups_list": "List of Private Groups", + "Private_Team": "Private Team", "Profile": "Profile", "Profile_details": "Profile Details", "Profile_picture": "Profile Picture", "Profile_saved_successfully": "Profile saved successfully", "Public": "Public", "Public_Channel": "Public Channel", + "Public_Community": "Public Community", + "Public_Relations": "Public Relations", "Push": "Push", "Push_apn_cert": "APN Cert", "Push_apn_dev_cert": "APN Dev Cert", @@ -1658,6 +1700,7 @@ "Read_only_group": "Read Only Group", "Reason_To_Join": "Reason to Join", "RealName_Change_Disabled": "Your Rocket.Chat administrator has disabled the changing of names", + "Real_Estate": "Real Estate", "Receive_alerts": "Receive alerts", "Receive_Group_Mentions": "Receive @all and @here mentions", "Record": "Record", @@ -1667,11 +1710,13 @@ "Refresh_your_page_after_install_to_enable_screen_sharing": "Refresh your page after install to enable screen sharing", "Regenerate_codes": "Regenerate codes", "Register": "Register a new account", + "Register_Server": "Register Server", "Registration": "Registration", "Registration_Succeeded": "Registration Succeeded", "Registration_via_Admin": "Registration via Admin", "Regular_Expressions": "Regular Expressions", "Release": "Release", + "Religious": "Religious", "Reload": "Reload", "Reload_Pages": "Reload Pages", "Remove": "Remove", @@ -1702,6 +1747,7 @@ "Reset_section_settings": "Reset Section Settings", "Restart": "Restart", "Restart_the_server": "Restart the server", + "Retail": "Retail", "Retry_Count": "Retry Count", "Apps": "Apps", "App_Information": "App Information", @@ -1774,6 +1820,8 @@ "Saving": "Saving", "Scan_QR_code": "Using an authenticator app like Google Authenticator, Authy or Duo, scan the QR code. It will display a 6 digit code which you need to enter below.", "Scan_QR_code_alternative_s": "If you can't scan the QR code, you may enter code manually instead: __code__", + "Setup_Wizard": "Setup Wizard", + "Setup_Wizard_Info": "We’ll guide you through setting up your first admin user, configuring your organisation and registering your server to receive free push notifications and more.", "Scope": "Scope", "Screen_Share": "Screen Share", "Script_Enabled": "Script Enabled", @@ -1820,6 +1868,8 @@ "Sending": "Sending...", "Sent_an_attachment": "Sent an attachment", "Served_By": "Served By", + "Server_Info": "Server Info", + "Server_Type": "Server Type", "Service": "Service", "Service_account_key": "Service account key", "set-moderator": "Set Moderator", @@ -1861,6 +1911,7 @@ "Site_Name": "Site Name", "Site_Url": "Site URL", "Site_Url_Description": "Example: https://chat.domain.com/", + "Size": "Size", "Skip": "Skip", "SlackBridge_error": "SlackBridge got an error while importing your messages at %s: %s", "SlackBridge_finish": "SlackBridge has finished importing the messages at %s. Please reload to view all messages.", @@ -1901,6 +1952,7 @@ "Snippet_Added": "Created on %s", "Snippet_Messages": "Snippet Messages", "Snippeted_a_message": "Created a snippet __snippetLink__", + "Social_Network": "Social Network", "Sorry_page_you_requested_does_not_exists_or_was_deleted": "Sorry, page you requested does not exists or was deleted!", "Sort_by_activity": "Sort by Activity", "Sound": "Sound", @@ -1941,6 +1993,7 @@ "Stats_Total_Rooms": "Total Rooms", "Stats_Total_Users": "Total Users", "Status": "Status", + "Step": "Step", "Stop_Recording": "Stop Recording", "Store_Last_Message": "Store Last Message", "Store_Last_Message_Sent_per_Room": "Store last message sent on each room.", @@ -1965,7 +2018,10 @@ "Take_it": "Take it!", "TargetRoom": "Target Room", "TargetRoom_Description": "The room where messages will be sent which are a result of this event being fired. Only one target room is allowed and it must exist.", + "Telecom": "Telecom", "Team": "Team", + "Technology_Provider": "Technology Provider", + "Technology_Services": "Technology Services", "Test_Connection": "Test Connection", "Test_Desktop_Notifications": "Test Desktop Notifications", "Thank_you_exclamation_mark": "Thank you!", @@ -2059,6 +2115,7 @@ "Tokens_Required_Input_Error": "Invalid typed tokens.", "Tokens_Required_Input_Placeholder": "Tokens asset names", "Topic": "Topic", + "Tourism": "Tourism", "Transcript_Enabled": "Ask Visitor if They Would Like a Transcript After Chat Closed", "Transcript_message": "Message to Show When Asking About Transcript", "Transcript_of_your_livechat_conversation": "Transcript of your livechat conversation.", @@ -2079,9 +2136,12 @@ "Two-factor_authentication_native_mobile_app_warning": "WARNING: Once you enable this, you will not be able to login on the native mobile apps (Rocket.Chat+) using your password until they implement the 2FA.", "Type": "Type", "Type_your_email": "Type your email", + "Type_your_job_title": "Type your job title", "Type_your_message": "Type your message", "Type_your_name": "Type your name", "Type_your_new_password": "Type your new password", + "Type_your_password": "Type your password", + "Type_your_username": "Type your username", "UI_Allow_room_names_with_special_chars": "Allow Special Characters in Room Names", "UI_Click_Direct_Message": "Click to Create Direct Message", "UI_Click_Direct_Message_Description": "Skip opening profile tab, instead go straight to conversation", @@ -2344,5 +2404,247 @@ "your_message": "your message", "your_message_optional": "your message (optional)", "Your_password_is_wrong": "Your password is wrong!", - "Your_push_was_sent_to_s_devices": "Your push was sent to %s devices" + "Your_push_was_sent_to_s_devices": "Your push was sent to %s devices", + "Your_server_link": "Your server link", + "Your_workspace_is_ready": "Your workspace is ready to use 🎉", + "Worldwide": "Worldwide", + "Country_Afghanistan": "Afghanistan", + "Country_Albania": "Albania", + "Country_Algeria": "Algeria", + "Country_American_Samoa": "American Samoa", + "Country_Andorra": "Andorra", + "Country_Angola": "Angola", + "Country_Anguilla": "Anguilla", + "Country_Antarctica": "Antarctica", + "Country_Antigua_and_Barbuda": "Antigua and Barbuda", + "Country_Argentina": "Argentina", + "Country_Armenia": "Armenia", + "Country_Aruba": "Aruba", + "Country_Australia": "Australia", + "Country_Austria": "Austria", + "Country_Azerbaijan": "Azerbaijan", + "Country_Bahamas": "Bahamas", + "Country_Bahrain": "Bahrain", + "Country_Bangladesh": "Bangladesh", + "Country_Barbados": "Barbados", + "Country_Belarus": "Belarus", + "Country_Belgium": "Belgium", + "Country_Belize": "Belize", + "Country_Benin": "Benin", + "Country_Bermuda": "Bermuda", + "Country_Bhutan": "Bhutan", + "Country_Bolivia": "Bolivia", + "Country_Bosnia_and_Herzegovina": "Bosnia and Herzegovina", + "Country_Botswana": "Botswana", + "Country_Bouvet_Island": "Bouvet Island", + "Country_Brazil": "Brazil", + "Country_British_Indian_Ocean_Territory": "British Indian Ocean Territory", + "Country_Brunei_Darussalam": "Brunei Darussalam", + "Country_Bulgaria": "Bulgaria", + "Country_Burkina_Faso": "Burkina Faso", + "Country_Burundi": "Burundi", + "Country_Cambodia": "Cambodia", + "Country_Cameroon": "Cameroon", + "Country_Canada": "Canada", + "Country_Cape_Verde": "Cape Verde", + "Country_Cayman_Islands": "Cayman Islands", + "Country_Central_African_Republic": "Central African Republic", + "Country_Chad": "Chad", + "Country_Chile": "Chile", + "Country_China": "China", + "Country_Christmas_Island": "Christmas Island", + "Country_Cocos_Keeling_Islands": "Cocos (Keeling) Islands", + "Country_Colombia": "Colombia", + "Country_Comoros": "Comoros", + "Country_Congo": "Congo", + "Country_Congo_The_Democratic_Republic_of_The": "Congo, The Democratic Republic of The", + "Country_Cook_Islands": "Cook Islands", + "Country_Costa_Rica": "Costa Rica", + "Country_Cote_Divoire": "Cote D'ivoire", + "Country_Croatia": "Croatia", + "Country_Cuba": "Cuba", + "Country_Cyprus": "Cyprus", + "Country_Czech_Republic": "Czech Republic", + "Country_Denmark": "Denmark", + "Country_Djibouti": "Djibouti", + "Country_Dominica": "Dominica", + "Country_Dominican_Republic": "Dominican Republic", + "Country_Ecuador": "Ecuador", + "Country_Egypt": "Egypt", + "Country_El_Salvador": "El Salvador", + "Country_Equatorial_Guinea": "Equatorial Guinea", + "Country_Eritrea": "Eritrea", + "Country_Estonia": "Estonia", + "Country_Ethiopia": "Ethiopia", + "Country_Falkland_Islands_Malvinas": "Falkland Islands (Malvinas)", + "Country_Faroe_Islands": "Faroe Islands", + "Country_Fiji": "Fiji", + "Country_Finland": "Finland", + "Country_France": "France", + "Country_French_Guiana": "French Guiana", + "Country_French_Polynesia": "French Polynesia", + "Country_French_Southern_Territories": "French Southern Territories", + "Country_Gabon": "Gabon", + "Country_Gambia": "Gambia", + "Country_Georgia": "Georgia", + "Country_Germany": "Germany", + "Country_Ghana": "Ghana", + "Country_Gibraltar": "Gibraltar", + "Country_Greece": "Greece", + "Country_Greenland": "Greenland", + "Country_Grenada": "Grenada", + "Country_Guadeloupe": "Guadeloupe", + "Country_Guam": "Guam", + "Country_Guatemala": "Guatemala", + "Country_Guinea": "Guinea", + "Country_Guinea_bissau": "Guinea-bissau", + "Country_Guyana": "Guyana", + "Country_Haiti": "Haiti", + "Country_Heard_Island_and_Mcdonald_Islands": "Heard Island and Mcdonald Islands", + "Country_Holy_See_Vatican_City_State": "Holy See (Vatican City State)", + "Country_Honduras": "Honduras", + "Country_Hong_Kong": "Hong Kong", + "Country_Hungary": "Hungary", + "Country_Iceland": "Iceland", + "Country_India": "India", + "Country_Indonesia": "Indonesia", + "Country_Iran_Islamic_Republic_of": "Iran, Islamic Republic of", + "Country_Iraq": "Iraq", + "Country_Ireland": "Ireland", + "Country_Israel": "Israel", + "Country_Italy": "Italy", + "Country_Jamaica": "Jamaica", + "Country_Japan": "Japan", + "Country_Jordan": "Jordan", + "Country_Kazakhstan": "Kazakhstan", + "Country_Kenya": "Kenya", + "Country_Kiribati": "Kiribati", + "Country_Korea_Democratic_Peoples_Republic_of": "Korea, Democratic People's Republic of", + "Country_Korea_Republic_of": "Korea, Republic of", + "Country_Kuwait": "Kuwait", + "Country_Kyrgyzstan": "Kyrgyzstan", + "Country_Lao_Peoples_Democratic_Republic": "Lao People's Democratic Republic", + "Country_Latvia": "Latvia", + "Country_Lebanon": "Lebanon", + "Country_Lesotho": "Lesotho", + "Country_Liberia": "Liberia", + "Country_Libyan_Arab_Jamahiriya": "Libyan Arab Jamahiriya", + "Country_Liechtenstein": "Liechtenstein", + "Country_Lithuania": "Lithuania", + "Country_Luxembourg": "Luxembourg", + "Country_Macao": "Macao", + "Country_Macedonia_The_Former_Yugoslav_Republic_of": "Macedonia, The Former Yugoslav Republic of", + "Country_Madagascar": "Madagascar", + "Country_Malawi": "Malawi", + "Country_Malaysia": "Malaysia", + "Country_Maldives": "Maldives", + "Country_Mali": "Mali", + "Country_Malta": "Malta", + "Country_Marshall_Islands": "Marshall Islands", + "Country_Martinique": "Martinique", + "Country_Mauritania": "Mauritania", + "Country_Mauritius": "Mauritius", + "Country_Mayotte": "Mayotte", + "Country_Mexico": "Mexico", + "Country_Micronesia_Federated_States_of": "Micronesia, Federated States of", + "Country_Moldova_Republic_of": "Moldova, Republic of", + "Country_Monaco": "Monaco", + "Country_Mongolia": "Mongolia", + "Country_Montserrat": "Montserrat", + "Country_Morocco": "Morocco", + "Country_Mozambique": "Mozambique", + "Country_Myanmar": "Myanmar", + "Country_Namibia": "Namibia", + "Country_Nauru": "Nauru", + "Country_Nepal": "Nepal", + "Country_Netherlands": "Netherlands", + "Country_Netherlands_Antilles": "Netherlands Antilles", + "Country_New_Caledonia": "New Caledonia", + "Country_New_Zealand": "New Zealand", + "Country_Nicaragua": "Nicaragua", + "Country_Niger": "Niger", + "Country_Nigeria": "Nigeria", + "Country_Niue": "Niue", + "Country_Norfolk_Island": "Norfolk Island", + "Country_Northern_Mariana_Islands": "Northern Mariana Islands", + "Country_Norway": "Norway", + "Country_Oman": "Oman", + "Country_Pakistan": "Pakistan", + "Country_Palau": "Palau", + "Country_Palestinian_Territory_Occupied": "Palestinian Territory, Occupied", + "Country_Panama": "Panama", + "Country_Papua_New_Guinea": "Papua New Guinea", + "Country_Paraguay": "Paraguay", + "Country_Peru": "Peru", + "Country_Philippines": "Philippines", + "Country_Pitcairn": "Pitcairn", + "Country_Poland": "Poland", + "Country_Portugal": "Portugal", + "Country_Puerto_Rico": "Puerto Rico", + "Country_Qatar": "Qatar", + "Country_Reunion": "Reunion", + "Country_Romania": "Romania", + "Country_Russian_Federation": "Russian Federation", + "Country_Rwanda": "Rwanda", + "Country_Saint_Helena": "Saint Helena", + "Country_Saint_Kitts_and_Nevis": "Saint Kitts and Nevis", + "Country_Saint_Lucia": "Saint Lucia", + "Country_Saint_Pierre_and_Miquelon": "Saint Pierre and Miquelon", + "Country_Saint_Vincent_and_The_Grenadines": "Saint Vincent and The Grenadines", + "Country_Samoa": "Samoa", + "Country_San_Marino": "San Marino", + "Country_Sao_Tome_and_Principe": "Sao Tome and Principe", + "Country_Saudi_Arabia": "Saudi Arabia", + "Country_Senegal": "Senegal", + "Country_Serbia_and_Montenegro": "Serbia and Montenegro", + "Country_Seychelles": "Seychelles", + "Country_Sierra_Leone": "Sierra Leone", + "Country_Singapore": "Singapore", + "Country_Slovakia": "Slovakia", + "Country_Slovenia": "Slovenia", + "Country_Solomon_Islands": "Solomon Islands", + "Country_Somalia": "Somalia", + "Country_South_Africa": "South Africa", + "Country_South_Georgia_and_The_South_Sandwich_Islands": "South Georgia and The South Sandwich Islands", + "Country_Spain": "Spain", + "Country_Sri_Lanka": "Sri Lanka", + "Country_Sudan": "Sudan", + "Country_Suriname": "Suriname", + "Country_Svalbard_and_Jan_Mayen": "Svalbard and Jan Mayen", + "Country_Swaziland": "Swaziland", + "Country_Sweden": "Sweden", + "Country_Switzerland": "Switzerland", + "Country_Syrian_Arab_Republic": "Syrian Arab Republic", + "Country_Taiwan_Province_of_China": "Taiwan, Province of China", + "Country_Tajikistan": "Tajikistan", + "Country_Tanzania_United_Republic_of": "Tanzania, United Republic of", + "Country_Thailand": "Thailand", + "Country_Timor_leste": "Timor-leste", + "Country_Togo": "Togo", + "Country_Tokelau": "Tokelau", + "Country_Tonga": "Tonga", + "Country_Trinidad_and_Tobago": "Trinidad and Tobago", + "Country_Tunisia": "Tunisia", + "Country_Turkey": "Turkey", + "Country_Turkmenistan": "Turkmenistan", + "Country_Turks_and_Caicos_Islands": "Turks and Caicos Islands", + "Country_Tuvalu": "Tuvalu", + "Country_Uganda": "Uganda", + "Country_Ukraine": "Ukraine", + "Country_United_Arab_Emirates": "United Arab Emirates", + "Country_United_Kingdom": "United Kingdom", + "Country_United_States": "United States", + "Country_United_States_Minor_Outlying_Islands": "United States Minor Outlying Islands", + "Country_Uruguay": "Uruguay", + "Country_Uzbekistan": "Uzbekistan", + "Country_Vanuatu": "Vanuatu", + "Country_Venezuela": "Venezuela", + "Country_Viet_Nam": "Viet Nam", + "Country_Virgin_Islands_British": "Virgin Islands, British", + "Country_Virgin_Islands_US": "Virgin Islands, U.S.", + "Country_Wallis_and_Futuna": "Wallis and Futuna", + "Country_Western_Sahara": "Western Sahara", + "Country_Yemen": "Yemen", + "Country_Zambia": "Zambia", + "Country_Zimbabwe": "Zimbabwe" } diff --git a/packages/rocketchat-i18n/i18n/eo.i18n.json b/packages/rocketchat-i18n/i18n/eo.i18n.json index 13bed7049fe2..b7906035fc09 100644 --- a/packages/rocketchat-i18n/i18n/eo.i18n.json +++ b/packages/rocketchat-i18n/i18n/eo.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Eniri al", "Error": "Eraro", "Error_404": "Eraro: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Eraro: Rocket.Chat postulas oplog-fiksi kiam kurante en multaj petskriboj", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Bonvolu certigi, ke via MongoDB estas en ReplicaSet mode kaj MONGO_OPLOG_URL-medio-variablo estas difinita ĝuste en la servilo de aplikaĵoj", "error-action-not-allowed": "__action__ ne estas permesata", "error-application-not-found": "Apliko ne trovita", "error-archived-duplicate-name": "Estas arkivita kanalo kun nomo '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index 1a19a8825b48..3e59db6a3212 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Entrar a", "Error": "Error", "Error_404": "Error 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Error: Rocket.Chat requiere oplog tail cuando se ejecuta en varias instancias", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Asegúrese de que su MongoDB esté en modo ReplicaSet y que la variable de entorno MONGO_OPLOG_URL esté definida correctamente en el servidor de aplicaciones.", "error-action-not-allowed": "__action__ no está permitido", "error-application-not-found": "Aplicación no encontrada", "error-archived-duplicate-name": "Hay un canal archivado con el nombre '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/fa.i18n.json b/packages/rocketchat-i18n/i18n/fa.i18n.json index 5e9155b38004..c96719549d36 100644 --- a/packages/rocketchat-i18n/i18n/fa.i18n.json +++ b/packages/rocketchat-i18n/i18n/fa.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "ورود به ", "Error": "خطا", "Error_404": "خطای 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "خطا: Rocket.Chat در هنگام اجرا در چندین مرحله نیاز به oplog tailing دارد", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "لطفا مطمئن شوید MongoDB شما در حالت ReplicaSet است و متغیر محدوده MONGO_OPLOG_URL به طور صحیح در سرور برنامه تعریف شده است", "error-action-not-allowed": "__action__ مجاز نیست", "error-application-not-found": "برنامه یافت نشد", "error-archived-duplicate-name": "یک کانال بایگانی شده با نام '__room_name__' وجود دارد", diff --git a/packages/rocketchat-i18n/i18n/fi.i18n.json b/packages/rocketchat-i18n/i18n/fi.i18n.json index b590e3d83c28..60467f9e952b 100644 --- a/packages/rocketchat-i18n/i18n/fi.i18n.json +++ b/packages/rocketchat-i18n/i18n/fi.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Astu sisään", "Error": "Virhe", "Error_404": "Virhe: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Virhe: Rocket.Chat vaatii oplog tailing -toimintoa useissa tapauksissa", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Varmista, että MongoDB on ReplicaSet-tilassa ja että MONGO_OPLOG_URL ympäristömuuttuja määritetään oikein sovelluspalvelimella", "error-action-not-allowed": "__action__ ei ole sallittu", "error-application-not-found": "Sovellusta ei löytynyt", "error-archived-duplicate-name": "Kanavan nimi \"__room_name__\" on arkistoitu", diff --git a/packages/rocketchat-i18n/i18n/fr.i18n.json b/packages/rocketchat-i18n/i18n/fr.i18n.json index 603c000d749a..700f24b4ef80 100644 --- a/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -56,11 +56,11 @@ "Accounts_Email_Activated_Subject": "Compte activé", "Accounts_Email_Deactivated_Subject": "Compte désactivé", "Accounts_Enrollment_Email": "E-mail d'inscription", - "Accounts_Enrollment_Email_Default": "

Bienvenue à

[Site_Name]

Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui!

", + "Accounts_Enrollment_Email_Default": "

Bienvenue à

[Site_Name]

Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui !

", "Accounts_Enrollment_Email_Description": "Vous pouvez utiliser, respectivement,
  • [name], [fname], [lname] pour le nom complet , le prénom et le nom de famille de l'utilisateur.
  • Vous pouvez utiliser [email] pour l'adresse e-mail de l'utilisateur.
  • [Site_Name] et [Site_URL] pour les noms de l'application et l'URL.
", "Accounts_Enrollment_Email_Subject_Default": "Bienvenue sur [Site_Name]", "Accounts_Admin_Email_Approval_Needed_Default": "

L'utilisateur [nom] ([email])a été enregistré.

Veuillez cocher \"Administration ->Utilisateurs\" pour l'activer ou le supprimer.

", - "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

L'utilisateur [nom] ([email])a été enregistré.

Raison: [raison]

Veuillez cocher \"Administration ->Users\" pour l'activer ou le supprimer.

", + "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

L'utilisateur [nom] ([email])a été enregistré.

Raison : [raison]

Veuillez cocher \"Administration ->Utilisateurs\" pour l'activer ou le supprimer.

", "Accounts_Admin_Email_Approval_Needed_Subject_Default": "Un nouvel utilisateur enregistré et doit être approuvé", "Accounts_ForgetUserSessionOnWindowClose": "Ne pas se souvenir de la session utilisateur lors de la fermeture de la fenêtre", "Accounts_Iframe_api_method": "Méthode de l'API", @@ -132,7 +132,7 @@ "Accounts_OAuth_Wordpress_secret": "Secret WordPress", "Accounts_PasswordReset": "Réinitialisation du mot de passe", "Accounts_Registration_AuthenticationServices_Default_Roles": "Rôles par défaut pour les services d'authentification", - "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Les utilisateurs par défaut (séparés par des virgules) seront donnés lors de l'enregistrement via les services d'authentification", + "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Les rôles par défaut (séparés par des virgules) seront donnés lors de l'enregistrement via les services d'authentification", "Accounts_Registration_AuthenticationServices_Enabled": "Inscription avec les services d'authentification", "Accounts_RegistrationForm": "Formulaire d'inscription", "Accounts_RegistrationForm_Disabled": "Désactivé", @@ -140,18 +140,18 @@ "Accounts_RegistrationForm_Public": "Public", "Accounts_RegistrationForm_Secret_URL": "URL secrète", "Accounts_RegistrationForm_SecretURL": "URL secrète du formulaire d'inscription", - "Accounts_RegistrationForm_SecretURL_Description": "Vous devez fournir une chaîne de caractères aléatoire qui sera ajoutée à votre URL d'inscription. Exemple: https://open.rocket.chat/register/[secret_hash]", + "Accounts_RegistrationForm_SecretURL_Description": "Vous devez fournir une chaîne de caractères aléatoire qui sera ajoutée à votre URL d'inscription. Exemple : https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Exiger un nom pour s'inscrire", "Accounts_RequirePasswordConfirmation": "Confirmation du mot de passe requise", "Accounts_SearchFields": "Champs à prendre en compte dans la recherche", "Accounts_SetDefaultAvatar": "Définir l'avatar par défaut", "Accounts_SetDefaultAvatar_Description": "Tente de définir l'avatar par défaut en se basant sur le compte OAuth ou Gravatar", - "Accounts_ShowFormLogin": "Afficher le formulaire de connexion", + "Accounts_ShowFormLogin": "Afficher le formulaire de connexion par défaut", "Accounts_TwoFactorAuthentication_MaxDelta": "Delta maximum", "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Le delta maximum détermine combien de jetons sont valides à un moment donné. Les jetons sont générés toutes les 30 secondes et sont valides pour les secondes (30 * Delta maximum).
Exemple: Avec un Delta maximum défini sur 10, chaque jeton peut être utilisé jusqu'à 300 secondes avant ou après l'horodatage. Ceci est utile lorsque l'horloge du client n'est pas correctement synchronisée avec le serveur.", "Accounts_UseDefaultBlockedDomainsList": "Utiliser la liste de domaines bloqués par défaut ", "Accounts_UseDNSDomainCheck": "Utiliser la vérification de Domaine du DNS", - "Accounts_UserAddedEmail_Default": "

Bienvenue sur

[Site_Name]

Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui!

Vous pouvez vous connecter en utilisant votre email: [email] et mot de passe: [password]. Vous pouvez être amené à le changer après votre première connexion.", + "Accounts_UserAddedEmail_Default": "

Bienvenue sur

[Site_Name]

Allez sur [Site_URL] et essayer la meilleure solution de chat open source disponible aujourd'hui !

Vous pouvez vous connecter en utilisant votre email: [email] et mot de passe : [password]. Vous pouvez être amené à le changer après votre première connexion.", "Accounts_UserAddedEmail_Description": "Vous pouvez utiliser les variables suivantes :

  • [name], [fname], [lname] respectivement pour le nom complet de l'utilisateur, son prénom ou son nom,
  • [email] pour son adresse e-mail de l'utilisateur,
  • [password] pour sson mot de passe,
  • [Site_Name] et [Site_URL] pour le nom de l'application et son URL respectivement.
", "Accounts_UserAddedEmailSubject_Default": "Vous avez été ajouté à [Site_Name]", "Activate": "Activer", @@ -167,7 +167,7 @@ "add-user-to-joined-room": "Ajouter un utilisateur à une chaîne jointe", "add-user-to-joined-room_description": "Autorisation d'ajouter un utilisateur à un canal actuellement joint", "add-user_description": "Autorisation d'ajouter de nouveaux utilisateurs au serveur via l'écran des utilisateurs", - "Add_agent": "Ajouter un assistant", + "Add_agent": "Ajouter un agent", "Add_custom_oauth": "Ajouter un OAuth personnalisé", "Add_Domain": "Ajouter un domaine", "Add_files_from": "Ajouter des fichiers depuis", @@ -198,11 +198,11 @@ "All_messages": "Tous les messages", "All_users": "Tous les utilisateurs", "All_added_tokens_will_be_required_by_the_user": "Tous les jetons ajoutés seront requis par l'utilisateur", - "All_users_in_the_channel_can_write_new_messages": "Tous les utilisateur peuvent écrire des nouveaux messages", + "All_users_in_the_channel_can_write_new_messages": "Tous les utilisateurs dans ce canal peuvent écrire des nouveaux messages", "Allow_Invalid_SelfSigned_Certs": "Autoriser les certificats auto-signés invalides", "Allow_Invalid_SelfSigned_Certs_Description": "Autoriser les certificats SSL invalides et auto-signés pour la validation des liens et leurs prévisualisations.", "Alphabetical": "Alphabétique", - "Allow_switching_departments": "Autoriser les visiteurs a changé de département", + "Allow_switching_departments": "Autoriser les visiteurs à changer de département", "Always_open_in_new_window": "Toujours ouvrir dans une nouvelle fenêtre", "Analytics_features_enabled": "Fonctionnalités activées", "Analytics_features_messages_Description": "Suivre les événements personnalisés liés aux actions d'un utilisateur sur des messages.", @@ -225,7 +225,6 @@ "API_Drupal_URL_Description": "Exemple : https://domaine.com (ne pas mettre le / de fin)", "API_Embed": "Aperçu des liens intégrés", "API_Embed_Description": "Détermine si les prévisualisations de liens sont activées ou non lorsqu'un utilisateur publie un lien vers un site web.", - "API_Embed_UserAgent": "Embed Demander un agent utilisateur", "API_EmbedCacheExpirationDays": "Durée d'expiration du cache embarqué (en jours)", "API_EmbedDisabledFor": "Désactiver l'intégration pour les utilisateurs", "API_EmbedDisabledFor_Description": "Liste de noms d'utilisateurs séparés par des virgules pour désactiver les aperçus de liens intégrés.", @@ -237,7 +236,7 @@ "API_Enable_Direct_Message_History_EndPoint": "Activer le point de terminaison de l'historique des messages directs", "API_Enable_Direct_Message_History_EndPoint_Description": "Ceci active `/api/v1/im.history.others`qui permet la visualisation des messages privés envoyés par tous les utilisateurs.", "API_Enable_Shields": "Activer les boucliers", - "API_Enable_Shields_Description": "Activer les boucliers disponibles dans `/ api / v1 / shield.svg`", + "API_Enable_Shields_Description": "Activer les boucliers disponibles dans `/api/v1/shield.svg`", "API_GitHub_Enterprise_URL": "URL du serveur", "API_GitHub_Enterprise_URL_Description": "Exemple : http://domain.com (sans slash final)", "API_Gitlab_URL": "URL GitLab", @@ -245,7 +244,7 @@ "API_Shield_Types_Description": "Types de boucliers à activer en tant que liste séparée par des virgules, choisissez parmi `online`,` channel` ou `*` pour tout", "API_Token": "Jeton API", "API_Tokenpass_URL": "URL du serveur Tokenpass", - "API_Tokenpass_URL_Description": "Exemple: https://domain.com (excluant la barre oblique)", + "API_Tokenpass_URL_Description": "Exemple : https://domain.com (ne pas mettre le / de fin)", "API_Upper_Count_Limit": "Nombre maximum d'enregistrements", "API_Upper_Count_Limit_Description": "Quel est le nombre maximum d'enregistrements qu'un appel REST API doit retourner (si pas défini en tant qu'illimité) ?", "API_User_Limit": "Limite de l'utilisateur pour ajouter tous les utilisateurs au canal", @@ -257,9 +256,9 @@ "App_status_initialized": "Initialisé", "App_status_auto_enabled": "Activé", "App_status_manually_enabled": "Activé", - "App_status_compiler_error_disabled": "Désactivé: erreur du compilateur", - "App_status_error_disabled": "Désactivé: erreur non interceptée", - "App_status_manually_disabled": "Désactivé: manuellement", + "App_status_compiler_error_disabled": "Désactivé : erreur du compilateur", + "App_status_error_disabled": "Désactivé : erreur non interceptée", + "App_status_manually_disabled": "Désactivé : manuellement", "App_status_disabled": "Désactivé", "App_author_homepage": "page d'accueil de l'auteur", "App_support_url": "support url", @@ -270,7 +269,7 @@ "Apply": "Appliquer", "Apply_and_refresh_all_clients": "Appliquer et rafraîchir tous les clients", "Archive": "Archiver", - "archive-room": "Archiver un canal", + "archive-room": "Archiver un salon", "archive-room_description": "Permission d'archiver un canal", "are_also_typing": "sont également en train d'écrire", "are_typing": "sont en train d'écrire", @@ -394,7 +393,7 @@ "Chatpal_HTTP_Headers": "Http Headers", "Chatpal_HTTP_Headers_Description": "Liste des en-têtes HTTP, un en-tête par ligne. Format: nom: valeur", "Chatpal_API_Key": "Clé API", - "Chatpal_API_Key_Description": "Vous n'avez pas encore de clé d'API? Obtenez-en un!", + "Chatpal_API_Key_Description": "Vous n'avez pas encore de clé d'API? Obtenez-en un!", "Chatpal_no_search_results": "Pas de résultat", "Chatpal_one_search_result": "Trouvé 1 résultat", "Chatpal_search_results": "Résultats trouvés de% s", @@ -407,7 +406,7 @@ "Chatpal_Backend_Description": "Sélectionnez si vous souhaitez utiliser Chatpal en tant que service ou en tant qu'installation sur site", "Chatpal_Suggestion_Enabled": "Suggestions activées", "Chatpal_Base_URL": "Url de base", - "Chatpal_Base_URL_Description": "Trouver une description de la façon d'exécuter une instance locale sur github. L'URL doit être absolue et pointer vers le noyau chatpal, par ex. http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Trouver une description de la façon d'exécuter une instance locale sur github. L'URL doit être absolue et pointer vers le noyau chatpal, par ex. http: // localhost: 8983 / solr / chatpal.", "Chatpal_Main_Language": "Langage principal", "Chatpal_Main_Language_Description": "La langue la plus utilisée dans les conversations", "Chatpal_Default_Result_Type": "Type de résultat par défaut", @@ -474,7 +473,7 @@ "Clients_will_refresh_in_a_few_seconds": "Les clients vont être rechargés dans quelques secondes", "close": "fermer", "Close": "Fermeture", - "close-livechat-room": "Ferme", + "close-livechat-room": "Fermer le chat en direct", "close-livechat-room_description": "Autorisation de fermer le canal LiveChat actuel", "close-others-livechat-room": "Fermer le chat en direct", "close-others-livechat-room_description": "Autorisation de fermer d'autres canaux LiveChat", @@ -565,7 +564,7 @@ "delete-d": "Supprimer les messages directs", "delete-d_description": "Permission de supprimer des messages directs", "delete-message": "Supprimer le message", - "delete-message_description": "Permission de supprimer un message dans une pièce", + "delete-message_description": "Permission de supprimer un message dans un salon", "delete-p": "Supprimer les chaînes privées", "delete-p_description": "Autorisation de supprimer des chaînes privées", "delete-user": "Supprimer l'utilisateur", @@ -639,7 +638,7 @@ "Duration": "Durée", "Edit": "Modifier", "edit-message": "Modifier le message", - "edit-message_description": "Permission de modifier un message dans une pièce", + "edit-message_description": "Permission de modifier un message dans un salon", "edit-other-user-active-status": "Modifier l'état actif d'un autre utilisateur", "edit-other-user-active-status_description": "Permission d'activer ou de désactiver d'autres comptes", "edit-other-user-info": "Modifier d'autres informations utilisateur", @@ -648,8 +647,8 @@ "edit-other-user-password_description": "Permission de modifier les mots de passe d'autres utilisateurs. Nécessite l'autorisation edit-other-user-info.", "edit-privileged-setting": "Modifier le paramètre privilégié", "edit-privileged-setting_description": "Permission de modifier les paramètres", - "edit-room": "Modifier la pièce", - "edit-room_description": "Permission de modifier le nom, le sujet, le type (privé ou public) d'une pièce et son statut (actif ou archivé)", + "edit-room": "Modifier le salon", + "edit-room_description": "Permission de modifier le nom, le sujet, le type (privé ou public) d'un salon et son statut (actif ou archivé)", "Edit_Custom_Field": "Modifier le champ personnalisé", "Edit_Department": "Éditer le service", "Edit_previous_message": "`% s` - Modifier le message précédent", @@ -696,8 +695,6 @@ "Enter_to": "Entrée pour", "Error": "Erreur", "Error_404": "Erreur 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Erreur: Rocket.chat requiert l'activation de la fonction \"oplog tailing\" lorsqu'il fonctionne sur plusieurs instances", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Veuillez vous assurer que MongoDB est en mode ReplicaSet et que la variable d'environnement MONGO_OPLOG_URL est définie correctement sur le serveur de l'application", "error-action-not-allowed": "__action__ n'est pas autorisée", "error-application-not-found": "Application introuvable", "error-archived-duplicate-name": "Il y a un canal archivé avec le nom '__room_name__'", @@ -852,7 +849,7 @@ "Force_SSL": "Forcer l'utilisation de SSL", "Force_SSL_Description": "*Attention !* _ForceSSL_ ne devrait jamais être utilisé avec un reverse proxy. Si vous utilisez un reverse proxy, vous devriez y gérer la redirection. Cette option existe pour des déploiements tels que Heroku, qui n'autorisent pas la configuration de redirection au niveau des reverse proxy.", "Forgot_password": "Mot de passe oublié", - "Forgot_Password_Description": "Vous pouvez utiliser les espaces réservés suivants:
  • [Forgot_Password_Url] pour l'URL de récupération du mot de passe.
  • [nom], [fname], [lname] pour le nom complet, le prénom ou le nom de famille de l'utilisateur, respectivement.
  • [email] pour l'adresse e-mail de l'utilisateur.
  • [Site_Name] et [Site_URL] pour le nom de l'application et l'URL, respectivement.
", + "Forgot_Password_Description": "Vous pouvez utiliser les espaces réservés suivants :
  • [Forgot_Password_Url] pour l'URL de récupération du mot de passe.
  • [nom], [fname], [lname] pour le nom complet, le prénom ou le nom de famille de l'utilisateur, respectivement.
  • [email] pour l'adresse e-mail de l'utilisateur.
  • [Site_Name] et [Site_URL] pour le nom de l'application et l'URL, respectivement.
", "Forgot_Password_Email": "Cliquez ici pour remettre à zéro votre mot de passe.", "Forgot_Password_Email_Subject": "[Site_Name] - Récupération du mot de passe", "Forgot_password_section": "Mot de passe oublié", @@ -910,7 +907,7 @@ "Hide_roles": "Masquer les rôles", "Hide_room": "Masquer le salon", "Hide_Room_Warning": "Êtes-vous sûr(e) de vouloir masquer le salon \"%s\" ?", - "Hide_Unread_Room_Status": "Masquer le statut de la pièce non lu", + "Hide_Unread_Room_Status": "Masquer le statut des salons non lus", "Hide_usernames": "Masquer les noms d'utilisateur", "Highlights": "Mises en avant", "Highlights_How_To": "Pour être notifié(e) lorsque quelqu'un écrit un mot ou une phrase spécifique, ajoutez le/la ici. Vous pouvez les séparer par des virgules. Les termes surveillés ne sont pas sensibles à la casse.", @@ -1488,7 +1485,7 @@ "Notifications_Always_Notify_Mobile_Description": "Choisissez de toujours informer l'appareil mobile, quel que soit l'état de présence.", "Notifications_Duration": "Notifications_Duration", "Notifications_Max_Room_Members": "Max Room Membres avant de désactiver toutes les notifications de message", - "Notifications_Max_Room_Members_Description": "Nombre maximal de membres dans la pièce lorsque les notifications pour tous les messages sont désactivées. Les utilisateurs peuvent toujours modifier les paramètres de la salle pour recevoir toutes les notifications individuellement. (0 pour désactiver)", + "Notifications_Max_Room_Members_Description": "Nombre maximal de membres dans le salon lorsque les notifications pour tous les messages sont désactivées. Les utilisateurs peuvent toujours modifier les paramètres du salon pour recevoir toutes les notifications individuellement. (0 pour désactiver)", "Notifications_Muted_Description": "Si vous choisissez de tout couper, vous ne verrez pas la surbrillance de la pièce dans la liste lorsqu'il y a de nouveaux messages, sauf pour les mentions. Les notifications d'inhibition remplaceront les paramètres de notification.", "Notifications_Preferences": "Préférences de notifications", "Notifications_Sound_Volume": "Notifications volume sonore", @@ -1507,7 +1504,7 @@ "Office_hours_updated": "Heures de bureau modifiées", "Offline": "Hors ligne", "Offline_DM_Email": "Vous avez reçu des messages privés de __user__", - "Offline_Email_Subject_Description": "Vous pouvez utiliser les espaces réservés suivants:
  • [Nom_du_site], [Site_URL], [Utilisateur] & [Chambre] pour le nom de l'application, l'URL, le nom d'utilisateur et le nom de la salle, respectivement.
", + "Offline_Email_Subject_Description": "Vous pouvez utiliser les espaces réservés suivants:
  • [Site_Name], [Site_URL], [User] & [Room] pour le nom de l'application, l'URL, le nom d'utilisateur et le nom du salon, respectivement.
", "Offline_form": "Formulaire hors ligne", "Offline_form_unavailable_message": "Message indisponible du formulaire hors ligne", "Offline_Link_Message": "ALLER AU MESSAGE", @@ -1674,7 +1671,7 @@ "Reload_Pages": "Recharger les pages", "Remove": "Retirer", "remove-user": "Retirer l'utilisateur", - "remove-user_description": "Permission de retirer un utilisateur d'une pièce", + "remove-user_description": "Permission de retirer un utilisateur d'un salon", "Remove_Admin": "Supprimer administrateur", "Remove_as_leader": "Supprimer en tant que leader", "Remove_as_moderator": "Supprimer de la liste des modérateurs", @@ -1723,7 +1720,7 @@ "Room_has_been_archived": "Le salon a été archivé", "Room_has_been_deleted": "Le salon a été supprimé", "Room_has_been_unarchived": "Le salon a été désarchivé", - "Room_tokenpass_config_changed_successfully": "La configuration de tokenpass de pièce a bien été modifiée", + "Room_tokenpass_config_changed_successfully": "La configuration de tokenpass du salon a bien été modifiée", "Room_Info": "Informations sur le salon", "room_is_blocked": "Le salon est bloqué", "room_is_read_only": "Le salon est en lecture seule", @@ -1841,7 +1838,7 @@ "Show_all": "Afficher tout", "Show_Avatars": "Afficher les Avatars", "Show_counter": "Afficher le compteur", - "Show_room_counter_on_sidebar": "Afficher le compteur de la pièce dans la barre latérale", + "Show_room_counter_on_sidebar": "Afficher le compteur du salon dans la barre latérale", "Show_more": "Afficher plus", "show_offline_users": "montrer les utilisateur hors-ligne", "Show_on_registration_page": "Afficher sur la page d'enregistrement", @@ -1941,7 +1938,7 @@ "Status": "Statut", "Stop_Recording": "Arrêter l'enregistrement", "Store_Last_Message": "Stocker le dernier message", - "Store_Last_Message_Sent_per_Room": "Stocker le dernier message envoyé sur chaque pièce.", + "Store_Last_Message_Sent_per_Room": "Stocker le dernier message envoyé sur chaque salon.", "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Stream Cast Adresse", "Stream_Cast_Address_Description": "IP ou Hôte de votre Rocket.Chat Central Stream Cast. Par exemple. `192.168.1.1: 3000` ou` localhost: 4000`", @@ -1961,8 +1958,8 @@ "System_messages": "Messages système", "Tag": "Tag", "Take_it": "Je prends !", - "TargetRoom": "Salle de la cible", - "TargetRoom_Description": "La pièce où seront envoyés les messages résultant du déclenchement de cet événement. Une seule pièce cible est autorisée et doit exister.", + "TargetRoom": "Salon cible", + "TargetRoom_Description": "Le salon où seront envoyés les messages résultant du déclenchement de cet événement. Un seul salon cible est autorisé et doit exister.", "Team": "Équipe", "Test_Connection": "Tester la connexion", "Test_Desktop_Notifications": "Tester les notifications sur le bureau", @@ -2080,7 +2077,7 @@ "Type_your_message": "Entrez votre message", "Type_your_name": "Entrez votre nom", "Type_your_new_password": "Entrez votre nouveau mot de passe", - "UI_Allow_room_names_with_special_chars": "Autoriser les caractères spéciaux dans les noms de pièce", + "UI_Allow_room_names_with_special_chars": "Autoriser les caractères spéciaux dans les noms de salon", "UI_Click_Direct_Message": "Cliquer pour commercer une discussion privée", "UI_Click_Direct_Message_Description": "N'ouvrez pas les onglets de profils, allez directement à la discussion", "UI_DisplayRoles": "Afficher les rôles", @@ -2089,7 +2086,7 @@ "UI_Use_Name_Avatar": "Utiliser les initiales du nom complet pour générer un avatar par défaut", "UI_Use_Real_Name": "Utiliser le vrai nom", "Unarchive": "Désarchiver", - "unarchive-room": "Salle d'archivage", + "unarchive-room": "Désarchivé le salon", "unarchive-room_description": "Autorisation de désarchiver les chaînes", "Unblock_User": "Débloquer", "Uninstall": "Désinstaller", @@ -2116,7 +2113,7 @@ "Uploading_file": "Envoi du fichier en cours...", "Uptime": "Durée de fonctionnement", "URL": "URL", - "URL_room_prefix": "URL Préfixe de pièce", + "URL_room_prefix": "URL Préfixe de salon", "Use_account_preference": "Préférence du compte utilisateur", "Use_Emojis": "Utiliser les émoticônes", "Use_Global_Settings": "Utiliser les paramètres globaux", @@ -2218,7 +2215,7 @@ "UTF8_Names_Validation_Description": "Expression régulière utilisée pour valider les noms des utilisateurs et des canaux", "Validate_email_address": "Valider l'adresse e-mail", "Verification": "Vérification", - "Verification_Description": "Vous pouvez utiliser les espaces réservés suivants:
  • [Verification_Url] pour l'URL de vérification.
  • [nom], [fname], [lname] pour le nom complet, le prénom ou le nom de famille de l'utilisateur, respectivement.
  • [email] pour l'adresse e-mail de l'utilisateur.
  • [Site_Name] et [Site_URL] pour le nom de l'application et l'URL, respectivement.
", + "Verification_Description": "Vous pouvez utiliser les espaces réservés suivants :
  • [Verification_Url] pour l'URL de vérification.
  • [nom], [fname], [lname] pour le nom complet, le prénom ou le nom de famille de l'utilisateur, respectivement.
  • [email] pour l'adresse e-mail de l'utilisateur.
  • [Site_Name] et [Site_URL] pour le nom de l'application et l'URL, respectivement.
", "Verification_Email": "Cliquez ici pour vérifier votre compte.", "Verification_email_sent": "E-mail de vérification envoyé", "Verification_Email_Subject": "[Nom_du_site] - Vérifiez votre compte", @@ -2240,7 +2237,7 @@ "view-history_description": "Permission d'afficher l'historique des canaux", "view-join-code": "Voir le code de jointure", "view-join-code_description": "Permission d'afficher le code de jointure de canal", - "view-joined-room": "Voir la salle jointe", + "view-joined-room": "Voir le salon rejoint", "view-joined-room_description": "Permission d'afficher les chaînes actuellement jointes", "view-l-room": "Voir les chambres Livechat", "view-l-room_description": "Permission d'afficher les chaînes de livechat", @@ -2253,7 +2250,7 @@ "view-other-user-channels": "Afficher d'autres canaux utilisateur", "view-other-user-channels_description": "Autorisation d'afficher les chaînes appartenant à d'autres utilisateurs", "view-outside-room": "Voir la pièce extérieure", - "view-p-room": "Voir la salle privée", + "view-p-room": "Voir le salon privé", "view-p-room_description": "Permission d'afficher les chaînes privées", "view-privileged-setting": "Afficher le paramètre privilégié", "view-privileged-setting_description": "Autorisation d'affichage des paramètres", diff --git a/packages/rocketchat-i18n/i18n/hr.i18n.json b/packages/rocketchat-i18n/i18n/hr.i18n.json index 6436e87c01a3..fbb2a58acf32 100644 --- a/packages/rocketchat-i18n/i18n/hr.i18n.json +++ b/packages/rocketchat-i18n/i18n/hr.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Uđi u ", "Error": "Pogreška", "Error_404": "Pogreška: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Pogreška: Rocket.Chat zahtijeva oplog repanje kada se izvodi u više slučajeva", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Provjerite je li vaš MongoDB na načinu ReplicaSet i da je varijabla okruženja MONGO_OPLOG_URL pravilno definirana na aplikacijskom poslužitelju", "error-action-not-allowed": "__action__ nije dopušteno", "error-application-not-found": "Aplikacija nije pronađena", "error-archived-duplicate-name": "Postoji arhivirana soba s nazivom '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/hu.i18n.json b/packages/rocketchat-i18n/i18n/hu.i18n.json index 62fa41c8dfbe..565411442149 100644 --- a/packages/rocketchat-i18n/i18n/hu.i18n.json +++ b/packages/rocketchat-i18n/i18n/hu.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "az Enter", "Error": "Hiba", "Error_404": "404-es hibakód", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Hiba: A Rocket.Chat több példányban történő futáskor kényelmesen követel", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Győződjön meg róla, hogy a MongoDB ReplicaSet módban van és a MONGO_OPLOG_URL környezeti változó helyesen van definiálva az alkalmazáskiszolgálón", "error-action-not-allowed": "__action__ nem engedélyezett", "error-application-not-found": "Alkalmazás nem található", "error-archived-duplicate-name": "Van egy archivált csatorna neve '__room_name__ \"", diff --git a/packages/rocketchat-i18n/i18n/id.i18n.json b/packages/rocketchat-i18n/i18n/id.i18n.json index 41150ec9b77f..376d6dc76c05 100644 --- a/packages/rocketchat-i18n/i18n/id.i18n.json +++ b/packages/rocketchat-i18n/i18n/id.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Masuk ke", "Error": "Kesalahan", "Error_404": "Kesalahan 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Kesalahan: Rocket.Chat membutuhkan oplog tailing saat berjalan dalam beberapa contoh", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Pastikan MongoDB Anda ada pada mode ReplicaSet dan variabel lingkungan MONGO_OPLOG_URL didefinisikan dengan benar di server aplikasi.", "error-action-not-allowed": "__action__ tidak diperbolehkan", "error-application-not-found": "Aplikasi tidak ditemukan", "error-archived-duplicate-name": "Ada saluran diarsipkan dengan nama '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/it.i18n.json b/packages/rocketchat-i18n/i18n/it.i18n.json index f07a7d3e1249..cbf51a39b2b3 100644 --- a/packages/rocketchat-i18n/i18n/it.i18n.json +++ b/packages/rocketchat-i18n/i18n/it.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Invio per", "Error": "Errore", "Error_404": "Errore 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Errore: Rocket.Chat richiede la coda oplog quando in esecuzione su diverse instanze", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Verifica che il tuo MongoDB è in modalità ReplicaSet e la variabile di sistema MONGO_OPLOG_URL è definita correttamente sul server dell'applicativo", "error-action-not-allowed": "__action__ non è permesso", "error-application-not-found": "Applicazione non trovata", "error-archived-duplicate-name": "C'è un canale archiviato con il nome '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/ja.i18n.json b/packages/rocketchat-i18n/i18n/ja.i18n.json index d1cfa2716603..4b032db28cde 100644 --- a/packages/rocketchat-i18n/i18n/ja.i18n.json +++ b/packages/rocketchat-i18n/i18n/ja.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter キーで", "Error": "エラーが発生しました", "Error_404": "エラー404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "エラー:Rocket.Chatは、複数のインスタンスで実行しているときにoplog tailingが必要です", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "MongoDBがReplicaSetモードで、MONGO_OPLOG_URL環境変数がアプリケーションサーバー上で正しく定義されていることを確認してください", "error-action-not-allowed": "__action__許可されていません", "error-application-not-found": "アプリケーションは見つかりませんでした", "error-archived-duplicate-name": "名前のアーカイブされたチャンネルがあります」__room_name__」", diff --git a/packages/rocketchat-i18n/i18n/km.i18n.json b/packages/rocketchat-i18n/i18n/km.i18n.json index 7ff34b76cc25..0246106bad76 100644 --- a/packages/rocketchat-i18n/i18n/km.i18n.json +++ b/packages/rocketchat-i18n/i18n/km.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "បញ្ចូល", "Error": "កំហុសក្នុងការ", "Error_404": "កំហុស: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "កំហុស: Rocket.Chat តម្រូវឱ្យមានកន្ទុយអុកនៅពេលកំពុងរត់ក្នុងករណីច្រើន", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "សូមប្រាកដថាម៉ុង MongDB របស់អ្នកស្ថិតនៅលើទម្រង់ ReplicaSet ហើយអថេរបរិស្ថាន MONGO_OPLOG_URL ត្រូវបានកំណត់យ៉ាងត្រឹមត្រូវលើម៉ាស៊ីនមេ។", "error-action-not-allowed": "__action__ មិនត្រូវបានអនុញ្ញាត", "error-application-not-found": "រកមិនឃើញកម្មវិធី", "error-archived-duplicate-name": "មានឆានែលបានទុកក្នុងប័ណ្ណសារដែលមានឈ្មោះ \"__room_name__\" ជាការ", diff --git a/packages/rocketchat-i18n/i18n/ko.i18n.json b/packages/rocketchat-i18n/i18n/ko.i18n.json index 24f1c2743ed1..e727a3acbeb0 100644 --- a/packages/rocketchat-i18n/i18n/ko.i18n.json +++ b/packages/rocketchat-i18n/i18n/ko.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter to", "Error": "오류", "Error_404": "오류 : 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "오류 : 여러 인스턴스에서 실행할 때 Rocket.Chat에서 oplog tailing이 필요합니다.", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "MongoDB가 ReplicaSet 모드에 있고 MONGO_OPLOG_URL 환경 변수가 응용 프로그램 서버에 올바르게 정의되어 있는지 확인하십시오.", "error-action-not-allowed": "__action__ 허용되지 않습니다", "error-application-not-found": "응용 프로그램을 찾을 수 없습니다", "error-archived-duplicate-name": "보관된 '__room_name__' 채널이 있습니다.", diff --git a/packages/rocketchat-i18n/i18n/ku.i18n.json b/packages/rocketchat-i18n/i18n/ku.i18n.json index 830796b64048..cb8c24189765 100644 --- a/packages/rocketchat-i18n/i18n/ku.i18n.json +++ b/packages/rocketchat-i18n/i18n/ku.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "binivîse", "Error": "Şaşî", "Error_404": "Çewt: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Çewtiya: Rocket. Dema ku di gelek rewşan de diçin dema hewlkirina oplogê hewce dike", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Ji kerema xwe re bisekinin ku MongoDB di modela ReplicaSet de ye û mongo_OPLOG_URL pîvana hawirdora rasteqîn li ser serverê pirtûk hatiye diyarkirin.", "error-action-not-allowed": "__action__ nayê ne bi destûr", "error-application-not-found": "Application not found", "error-archived-duplicate-name": "ye kanala trendê bi navê '__room_name__' hene", diff --git a/packages/rocketchat-i18n/i18n/lo.i18n.json b/packages/rocketchat-i18n/i18n/lo.i18n.json index a171f6001138..24d1e2dce53d 100644 --- a/packages/rocketchat-i18n/i18n/lo.i18n.json +++ b/packages/rocketchat-i18n/i18n/lo.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "ກະລຸນາໃສ່ທີ່", "Error": "Error", "Error_404": "ຂໍ້ຜິດພາດ: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "ຂໍ້ຜິດພາດ: RocketChat ຮຽກຮ້ອງ oplog tailing ໃນເວລາທີ່ແລ່ນໃນຫຼາຍໆກໍລະນີ", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "ກະລຸນາໃຫ້ແນ່ໃຈວ່າ MongoDB ຂອງທ່ານຢູ່ໃນຮູບແບບ ReplicaSet ແລະ MONGO_OPLOG_URL ຕົວແປສະພາບແວດລ້ອມຖືກກໍານົດຢ່າງຖືກຕ້ອງໃນເຄື່ອງແມ່ຂ່າຍຂອງແອັບພລິເຄຊັນ", "error-action-not-allowed": "__action__ ບໍ່ໄດ້ຮັບອະນຸຍາດ", "error-application-not-found": "ຄໍາຮ້ອງສະຫມັກບໍ່ໄດ້ພົບເຫັນ", "error-archived-duplicate-name": "ມີຊ່ອງທາງທີ່ບັນທຶກໄວ້ມີຊື່ '__room_name__' ເປັນ", diff --git a/packages/rocketchat-i18n/i18n/lt.i18n.json b/packages/rocketchat-i18n/i18n/lt.i18n.json index 75243f557087..0fe6ae50eb43 100644 --- a/packages/rocketchat-i18n/i18n/lt.i18n.json +++ b/packages/rocketchat-i18n/i18n/lt.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Įeiti į", "Error": "Klaida", "Error_404": "Klaida: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Klaida: \"Rocket.Chat\" reikalauja \"oplog tailing\" paleidžiant kelis kartus", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Įsitikinkite, kad jūsų MongoDB yra \"ReplicaSet\" režime, o aplinkos kintamasis MONGO_OPLOG_URL yra tinkamai apibrėžtas programų serveryje", "error-action-not-allowed": "__action__ neleidžiama", "error-application-not-found": "Paraiška nerasta", "error-archived-duplicate-name": "Yra archyvuotas kanalas su pavadinimu \"__room_name__\"", diff --git a/packages/rocketchat-i18n/i18n/lv.i18n.json b/packages/rocketchat-i18n/i18n/lv.i18n.json index 0ea75bf64876..08746717f9ea 100644 --- a/packages/rocketchat-i18n/i18n/lv.i18n.json +++ b/packages/rocketchat-i18n/i18n/lv.i18n.json @@ -1,21 +1,21 @@ { - "#channel": "#channel", - "0_Errors_Only": "0 - tikai kļūdas", - "1_Errors_and_Information": "1 - kļūdas un informācija", + "#channel": "#kanāls", + "0_Errors_Only": "0 - Tikai kļūdas", + "1_Errors_and_Information": "1 - Kļūdas un informācija", "2_Erros_Information_and_Debug": "2 - Kļūdas, informācija un atkļūdošana", "403": "Aizliegts", "500": "Iekšējā servera kļūda", "@username": "@ lietotājvārds", "@username_message": "@ lietotājvārds ", - "__username__is_no_longer__role__defined_by__user_by_": "__username__ vairs nav __role__ ar __user_by__", - "__username__was_set__role__by__user_by_": "__username__ tika iestatīts __role__ ar __user_by__", - "Accept": "akceptēt", - "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Pieņemt ienākošos livechat pieprasījumus, pat ja nav tiešsaistes aģentu", - "Accept_with_no_online_agents": "Pieņemt bez tiešsaistes aģenta", - "access-mailer": "Piekļuves Mailer ekrāns", + "__username__is_no_longer__role__defined_by__user_by_": "__lietotājvārds__ vairs nav __loma__ ar __lietotājs_ar__", + "__username__was_set__role__by__user_by_": "__lietotājvārds__ tika iestatīts __role__ ar __lietotājs_ar__", + "Accept": "Apstiprināt", + "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Pieņemt ienākošos livechat pieprasījumus, pat ja tiešsaistē nav neviena aģenta", + "Accept_with_no_online_agents": "Pieņemt bez tiešsaistē esošiem aģentiem", + "access-mailer": "Piekļūt Mailer ekrānam", "access-mailer_description": "Atļauja nosūtīt masu e-pastu visiem lietotājiem.", - "access-permissions": "Piekļuves atļauju ekrāns", - "access-permissions_description": "Mainīt atļaujas dažādām lomām.", + "access-permissions": "Piekļūt Atļauju ekrānam", + "access-permissions_description": "Mainīt Atļaujas dažādām lomām.", "Access_not_authorized": "Piekļuve nav atļauta", "Access_Token_URL": "Piekļuves koda URL", "Accessing_permissions": "Piekļūšana atļaujām", @@ -23,35 +23,35 @@ "Accounts": "Konti", "Accounts_AllowAnonymousRead": "Atļaut anonīmu lasīšanu", "Accounts_AllowAnonymousWrite": "Atļaut anonīmu rakstīšanu", - "Accounts_AllowDeleteOwnAccount": "Atļaut lietotājiem dzēst pašu kontu", - "Accounts_AllowedDomainsList": "Atļauts domēnu saraksts", - "Accounts_AllowedDomainsList_Description": "Atļauto domēnu saraksts ar komatu atdalītu sarakstu", + "Accounts_AllowDeleteOwnAccount": "Atļaut lietotājiem dzēst viņu personīgo kontu", + "Accounts_AllowedDomainsList": "Atļauto domēnu saraksts", + "Accounts_AllowedDomainsList_Description": "Atļauto domēnu ar komatu atdalīts saraksts", "Accounts_AllowEmailChange": "Atļaut e-pasta maiņu", "Accounts_AllowPasswordChange": "Atļaut mainīt paroli", - "Accounts_AllowUserAvatarChange": "Atļaut lietotāja amatiņu mainīt", - "Accounts_AllowRealNameChange": "Atļaut nosaukuma maiņu", + "Accounts_AllowUserAvatarChange": "Atļaut lietotāja avatāra maiņu", + "Accounts_AllowRealNameChange": "Atļaut nomaint vārdu", "Accounts_AllowUsernameChange": "Atļaut lietotājvārdu maiņu", "Accounts_AllowUserProfileChange": "Atļaut lietotāja profila maiņu", - "Accounts_AvatarResize": "Atjaunot izmērus", + "Accounts_AvatarResize": "Atjaunot avatāra izmērus", "Accounts_AvatarSize": "Avatar izmērs", "Accounts_BlockedDomainsList": "Bloķēto domēnu saraksts", - "Accounts_BlockedDomainsList_Description": "Bloķēto domēnu saraksts ar komatu atdalītu sarakstu", - "Accounts_BlockedUsernameList": "Bloķēts lietotāju saraksts", - "Accounts_BlockedUsernameList_Description": "Bloķēto lietotājvārdu (ar maziem gadījumiem) saraksts ar komatu atdalītu sarakstu", - "Accounts_CustomFields_Description": "Jābūt derīgam JSON, kur taustiņi ir lauku nosaukumi, kuros ir lauku iestatījumu vārdnīca. Piemērs:
{\n\"loma\": {\n\"tips\": \"izvēlēties\"\n\"defaultValue\": \"students\"\n\"iespējas\": [\"skolotājs\", \"students\"],\n\"nepieciešams\": patiess\n\"modifyRecordField\": {\n\"masīvs\": patiess\n\"lauks\": \"lomas\"\n}\n},\n\"twitter\": {\n\"tips\": \"teksts\",\n\"nepieciešams\": patiess\n\"minLength\": 2,\n\"maxLength\": 10\n}\n}", + "Accounts_BlockedDomainsList_Description": "Bloķēto domēnu ar komatu atdalītais sarakstu", + "Accounts_BlockedUsernameList": "Bloķēto lietotājvādu saraksts", + "Accounts_BlockedUsernameList_Description": "Bloķēto lietotājvārdu (ar maziem gadījumiem) ar komatu atdalīts saraksts", + "Accounts_CustomFields_Description": "Jābūt derīgam JSON, kur taustiņi ir lauku nosaukumi, kuros ir lauku iestatījumu vārdnīca. Piemērs:
{\n\"loma\": {\n\"tips\": \"izvēlēties\"\n\"noklusējumavērtba\": \"students\"\n\"iespējas\": [\"skolotājs\", \"students\"],\n\"nepieciešams\": patiess\n\"pārveidotierakstalauku\": {\n\"masīvs\": patiess\n\"lauks\": \"lomas\"\n}\n},\n\"twitter\": {\n\"tips\": \"teksts\",\n\"nepieciešams\": patiess\n\"mingarums\": 2,\n\"maksLength\": 10\n}\n}", "Accounts_CustomFieldsToShowInUserInfo": "Pielāgotie lauki, lai parādītu lietotāja informāciju", - "Accounts_DefaultUsernamePrefixSuggestion": "Noklusējuma lietotāja priekšfiksa ieteikums", + "Accounts_DefaultUsernamePrefixSuggestion": "Noklusējuma lietotājvārda prefiksa ieteikums", "Accounts_Default_User_Preferences": "Noklusējuma lietotāja preferences", - "Accounts_Default_User_Preferences_audioNotifications": "Paziņojumi par noklusējuma brīdinājumiem", - "Accounts_Default_User_Preferences_desktopNotifications": "Desktop paziņojumi noklusējuma brīdinājums", - "Accounts_Default_User_Preferences_mobileNotifications": "Paziņojums par noklusēto brīdinājumu mobilajam tālrunim", - "Accounts_Default_User_Preferences_not_available": "Neizdevās izgūt lietotāja preferences, jo lietotājs to vēl nav iestatījis", - "Accounts_denyUnverifiedEmail": "Noraidīt nepārbaudītu e-pastu", - "Accounts_EmailVerification": "E-pasta verifikācija", + "Accounts_Default_User_Preferences_audioNotifications": "Audio paziņojumi noklusējuma brīdinājums", + "Accounts_Default_User_Preferences_desktopNotifications": "Darbvirsmas paziņojumi noklusējuma brīdinājums", + "Accounts_Default_User_Preferences_mobileNotifications": "Paziņojumi mobilajā tālrunī noklusējuma brīdinājums", + "Accounts_Default_User_Preferences_not_available": "Neizdevās iegūt lietotāja preferences, jo lietotājs tās vēl nav iestatījis", + "Accounts_denyUnverifiedEmail": "Noraidīt neapstiprinātu e-pastu", + "Accounts_EmailVerification": "E-pasta apstiprināšana", "Accounts_EmailVerification_Description": "Lai izmantotu šo funkciju, pārliecinieties, ka jums ir pareizi SMTP iestatījumi", - "Accounts_Email_Approved": "[vārds]

Jūsu konts tika apstiprināts.

", - "Accounts_Email_Activated": "[vārds]

Jūsu konts tika aktivizēts.

", - "Accounts_Email_Deactivated": "[vārds]

Jūsu konts tika deaktivizēts.

", + "Accounts_Email_Approved": "[vārds]

Jūsu konts ir apstiprināts.

", + "Accounts_Email_Activated": "[vārds]

Jūsu konts ir aktivizēts.

", + "Accounts_Email_Deactivated": "[vārds]

Jūsu konts ir deaktivizēts.

", "Accounts_Email_Approved_Subject": "Konts ir apstiprināts", "Accounts_Email_Activated_Subject": "Konts ir aktivizēts", "Accounts_Email_Deactivated_Subject": "Konts ir deaktivizēts", @@ -93,78 +93,78 @@ "Accounts_OAuth_Facebook_id": "Facebook lietotņu ID", "Accounts_OAuth_Facebook_secret": "Facebook noslēpums", "Accounts_OAuth_Github": "OAuth ir iespējots", - "Accounts_OAuth_Github_callback_url": "Github atzvana URL", + "Accounts_OAuth_Github_callback_url": "Github Callback URL", "Accounts_OAuth_GitHub_Enterprise": "OAuth ir iespējots", - "Accounts_OAuth_GitHub_Enterprise_callback_url": "GitHub Enterprise atzvana URL", + "Accounts_OAuth_GitHub_Enterprise_callback_url": "GitHub Enterprise Callback URL", "Accounts_OAuth_GitHub_Enterprise_id": "Klienta ID", "Accounts_OAuth_GitHub_Enterprise_secret": "Klienta noslēpums", "Accounts_OAuth_Github_id": "Klienta ID", "Accounts_OAuth_Github_secret": "Klienta noslēpums", "Accounts_OAuth_Gitlab": "OAuth ir iespējots", - "Accounts_OAuth_Gitlab_callback_url": "GitLab atzvana URL", + "Accounts_OAuth_Gitlab_callback_url": "GitLab Callback URL", "Accounts_OAuth_Gitlab_id": "GitLab Id", "Accounts_OAuth_Gitlab_secret": "Klienta noslēpums", "Accounts_OAuth_Google": "Google pieteikšanās", - "Accounts_OAuth_Google_callback_url": "Google atzvana URL", - "Accounts_OAuth_Google_id": "Google Id", + "Accounts_OAuth_Google_callback_url": "Google Callback URL", + "Accounts_OAuth_Google_id": "Google ID", "Accounts_OAuth_Google_secret": "Google Secret", - "Accounts_OAuth_Linkedin": "LinkedIn Ieiet", - "Accounts_OAuth_Linkedin_callback_url": "Linkedin atzvana URL", - "Accounts_OAuth_Linkedin_id": "LinkedIn Id", + "Accounts_OAuth_Linkedin": "LinkedIn pieteikšanās", + "Accounts_OAuth_Linkedin_callback_url": "Linkedin Callback URL", + "Accounts_OAuth_Linkedin_id": "LinkedIn ID", "Accounts_OAuth_Linkedin_secret": "LinkedIn Secret", - "Accounts_OAuth_Meteor": "Meteora pieteikšanās", - "Accounts_OAuth_Meteor_callback_url": "Meteor atzvana URL", - "Accounts_OAuth_Meteor_id": "Meteor id", - "Accounts_OAuth_Meteor_secret": "Meteoru noslēpums", + "Accounts_OAuth_Meteor": "Meteor pieteikšanās", + "Accounts_OAuth_Meteor_callback_url": "Meteor Callback URL", + "Accounts_OAuth_Meteor_id": "Meteor ID", + "Accounts_OAuth_Meteor_secret": "Meteor Secret", "Accounts_OAuth_Tokenpass": "Tokenpass pieteikšanās", - "Accounts_OAuth_Tokenpass_callback_url": "Tokenpass atzvana URL", - "Accounts_OAuth_Tokenpass_id": "Tokenpass Id", + "Accounts_OAuth_Tokenpass_callback_url": "Tokenpass Callback URL", + "Accounts_OAuth_Tokenpass_id": "Tokenpass ID", "Accounts_OAuth_Tokenpass_secret": "Tokenpass Secret", - "Accounts_OAuth_Proxy_host": "Starpniekserveris", - "Accounts_OAuth_Proxy_services": "Proxy pakalpojumi", - "Accounts_OAuth_Twitter": "Čivināt pieteikties", - "Accounts_OAuth_Twitter_callback_url": "Twitter atzvana URL", - "Accounts_OAuth_Twitter_id": "Čivināt Id", + "Accounts_OAuth_Proxy_host": "Starpniekservera saimnieks", + "Accounts_OAuth_Proxy_services": "Starpniekservera pakalpojumi", + "Accounts_OAuth_Twitter": "Twitter pieteikšanās", + "Accounts_OAuth_Twitter_callback_url": "Twitter Callback URL", + "Accounts_OAuth_Twitter_id": "Twitter ID", "Accounts_OAuth_Twitter_secret": "Twitter Secret", - "Accounts_OAuth_Wordpress": "WordPress pieslēgšanās", - "Accounts_OAuth_Wordpress_callback_url": "WordPress atzvana URL", + "Accounts_OAuth_Wordpress": "WordPress pieteikšanās", + "Accounts_OAuth_Wordpress_callback_url": "WordPress Callback URL", "Accounts_OAuth_Wordpress_id": "WordPress ID", "Accounts_OAuth_Wordpress_secret": "WordPress Secret", - "Accounts_PasswordReset": "Paroles atiestatīšana", + "Accounts_PasswordReset": "Paroles atjaunošana", "Accounts_Registration_AuthenticationServices_Default_Roles": "Noklusējuma lomas autentifikācijas pakalpojumiem", - "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Noklusētās lomas (ar komatu atdalītie) lietotāji tiks doti, reģistrējoties, izmantojot autentifikācijas pakalpojumus", - "Accounts_Registration_AuthenticationServices_Enabled": "Reģistrācija ar autentifikācijas pakalpojumiem", - "Accounts_RegistrationForm": "Reģistrācijas forma", - "Accounts_RegistrationForm_Disabled": "Invalīds", + "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Noklusējuma lomas (ar komatu atdalītie) lietotājiem tiks dotas reģistrējoties, izmantojot autentifikācijas pakalpojumus", + "Accounts_Registration_AuthenticationServices_Enabled": "Reģistrācija ar Autentifikācijas pakalpojumiem", + "Accounts_RegistrationForm": "Reģistrācijas veidlapa", + "Accounts_RegistrationForm_Disabled": "Atspējots", "Accounts_RegistrationForm_LinkReplacementText": "Reģistrācijas veidlapas saites aizstāšanas teksts", "Accounts_RegistrationForm_Public": "Publisks", - "Accounts_RegistrationForm_Secret_URL": "Slepenais URL", - "Accounts_RegistrationForm_SecretURL": "Reģistrācijas veidlapa, slepenais URL", - "Accounts_RegistrationForm_SecretURL_Description": "Jums jānorāda nejauša virkne, kas tiks pievienota jūsu reģistrācijas vietrādim URL. Piemērs: https://open.rocket.chat/register/[secret_hash]", + "Accounts_RegistrationForm_Secret_URL": "Secret URL", + "Accounts_RegistrationForm_SecretURL": "Reģistrācijas veidlapa, Secret URL", + "Accounts_RegistrationForm_SecretURL_Description": "Jums jānorāda nejauša virkne, kas tiks pievienota jūsu reģistrācijas URL. Piemērs: https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Pieprasīt vārdu reģistrācijai", "Accounts_RequirePasswordConfirmation": "Pieprasīt paroles apstiprināšanu", "Accounts_SearchFields": "Lauki, kas jāņem vērā meklēšanā", "Accounts_SetDefaultAvatar": "Iestatīt noklusējuma avataru", - "Accounts_SetDefaultAvatar_Description": "Mēģina noteikt noklusējuma iemiesojumu, pamatojoties uz OAuth kontu vai Gravatar", - "Accounts_ShowFormLogin": "Rādīt veidlapas pieteikšanos", - "Accounts_TwoFactorAuthentication_MaxDelta": "Maksimālais deltā", - "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Maximum Delta nosaka, cik daudz žetonu ir derīgi jebkurā brīdī. Žetoni tiek ģenerēti ik pēc 30 sekundēm un ir derīgas (30 * Maksimālā delta) sekundēs.
Piemērs: ja Maksimālais Delta iestatījums ir 10, katrs marķieris var tikt izmantots līdz 300 sekundēm pirms vai pēc tā laika atzīmes. Tas ir noderīgi, ja klienta pulkstenis nav pareizi sinhronizēts ar serveri.", - "Accounts_UseDefaultBlockedDomainsList": "Izmantojiet noklusējuma bloķēto domēnu sarakstu", + "Accounts_SetDefaultAvatar_Description": "Mēģina noteikt noklusējuma avataru, pamatojoties uz OAuth kontu vai Gravatar", + "Accounts_ShowFormLogin": "Rādīt noklusējuma pieteikšanās veidlapu", + "Accounts_TwoFactorAuthentication_MaxDelta": "Maximum Delta", + "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Maximum Delta nosaka, cik daudz žetonu ir derīgi jebkurā brīdī. Žetoni tiek ģenerēti ik pēc 30 sekundēm un ir derīgi (30 * MAximum Delta) sekundes.
Piemērs: ja Maximum Delta iestatījums ir 10, katrs žetons var tikt izmantots līdz 300 sekundēm pirms vai pēc tā laika zīmoga. Tas ir noderīgi, ja klienta pulkstenis nav pareizi sinhronizēts ar serveri.", + "Accounts_UseDefaultBlockedDomainsList": "Izmantojiet noklusējuma Bloķēto domēnu sarakstu", "Accounts_UseDNSDomainCheck": "Izmantojiet DNS domēna pārbaudi", - "Accounts_UserAddedEmail_Default": "

Laipni lūdzam

[SITE_NAME]

Iet uz [SITE_URL]un izmēģināt labāko atvērtā pirmkoda chat risinājumu pieejams jau šodien!

Jūs varat pieteikties, izmantojot savu e-pastu: [e-pasts] un parole: [parole]. Jums var būt nepieciešams mainīt to pēc pirmās pieteikšanās.", - "Accounts_UserAddedEmail_Description": "Lietotāja vārdu, uzvārdu vai uzvārdu attiecīgi varat izmantot šādiem vietējiem:

  • [vārds], [fname], [lname].
  • [e-pasts] lietotāja e-pastam.
  • [parole] lietotāja parolē.
  • [Vietnes nosaukums] un [Site_URL] attiecīgi lietojumprogrammas nosaukums un URL.
", + "Accounts_UserAddedEmail_Default": "

Laipni lūdzam

[SITE_NAME]

Iet uz [SITE_URL]un izmēģināt labāko atvērtā avota tērzešanas risinājumu kas pieejams šodien!

Jūs varat pieteikties, izmantojot savu e-pastu: [e-pasts] un paroli: [parole]. Pēc pirmās pieteikšanās Jums var būt nepieciešams to mainīt.", + "Accounts_UserAddedEmail_Description": "Lietotāja pilnam vārdam, vārdam vai uzvārdam, attiecīgi varat izmantot šādus vietturus:

  • [vārds], [fname], [lname].
  • [e-pasts] lietotāja e-pastam.
  • [parole] lietotāja parolē.
  • [Vietnes nosaukums] un [Site_URL] attiecīgi lietojumprogrammas nosaukums un URL.
", "Accounts_UserAddedEmailSubject_Default": "Jūs esat pievienots [Site_Name]", "Activate": "Aktivizēt", "Activity": "Aktivitāte", "Add": "Pievienot", - "add-oauth-service": "Pievienot Oauth servisu", + "add-oauth-service": "Pievienot Oauth pakalpojumu", "add-oauth-service_description": "Atļauja pievienot jaunu Oauth pakalpojumu", "add-user": "Pievienot lietotāju", - "add-user-to-any-c-room": "Pievienot lietotāju jebkuram publiskam kanālam", + "add-user-to-any-c-room": "Pievienot lietotāju pie jebkura publiska kanāla", "add-user-to-any-c-room_description": "Atļauja pievienot lietotāju jebkuram publiskam kanālam", - "add-user-to-any-p-room": "Pievienot lietotāju jebkuram privātam kanālam", + "add-user-to-any-p-room": "Pievienot lietotāju pie jebkura privāta kanāla", "add-user-to-any-p-room_description": "Atļauja pievienot lietotāju jebkuram privātam kanālam", - "add-user-to-joined-room": "Pievienot lietotāju ikvienam pievienotajam kanālam", + "add-user-to-joined-room": "Pievienot lietotāju pie jebkura pievienotā kanāla", "add-user-to-joined-room_description": "Atļauja pievienot lietotāju pašlaik pievienotajam kanālam", "add-user_description": "Atļauja pievienot jaunus lietotājus serverim, izmantojot lietotāju ekrānu", "Add_agent": "Pievienot aģentu", @@ -177,182 +177,184 @@ "Add_User": "Pievienot lietotāju", "Add_users": "Pievienot lietotājus", "Adding_OAuth_Services": "OAuth pakalpojumu pievienošana", - "Adding_permission": "Pievienojot atļauju", + "Adding_permission": "Atļaujas pievienošana", "Adding_user": "Lietotāja pievienošana", "Additional_emails": "Papildu e-pasta ziņojumi", "Additional_Feedback": "Papildu atsauksmes", + "additional_integrations_Zapier": "Vai Jūs vēlaties integrēt citu programmatūru un lietotnes ar Rocket.Chat, bet jums nav laika to izdarīt manuāli? Tad mēs iesakām izmantot Zapier, kuru mēs pilnībā atbalstām. Uzziniet vairāk par to mūsu dokumentācijā. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", + "additional_integrations_Bots": "Ja Jūs meklējat, kā integrēt savu botu, tad varat nemeklēt tālāk par mūsu Hubot adapteri. https://github.com/RocketChat/hubot-rocketchat ", "Administration": "Administrācija", - "Adult_images_are_not_allowed": "Pieaugušiem attēliem nav atļauts", + "Adult_images_are_not_allowed": "Pieauguša satura attēli nav atļauti", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Pēc OAuth2 autentifikācijas lietotāji tiks novirzīti uz šo URL", "Agent": "Aģents", "Agent_added": "Aģents ir pievienots", "Agent_removed": "Aģents ir noņemts", "Alerts": "Brīdinājumi", - "Alias": "Alias", - "Alias_Format": "Alias ​​formāts", - "Alias_Format_Description": "Importēt ziņojumus no Slack ar aizstājvārdu; % s tiek aizstāts ar lietotāja lietotājvārdu. Ja tukšs, neviens pseidonīms netiek izmantots.", - "Alias_Set": "Alias ​​komplekts", + "Alias": "Aizstājvārds", + "Alias_Format": "Aizstājvārda formāts", + "Alias_Format_Description": "Importēt ziņojumus no Slack ar aizstājvārdu; % s tiek aizstāts ar lietotāja lietotājvārdu. Ja tukšs, neviens aizstājvārds netiek izmantots.", + "Alias_Set": "Aizstājvārds iestatīts", "All": "Visi", "All_channels": "Visi kanāli", "All_logs": "Visi žurnāli", "All_messages": "Visi ziņojumi", "All_users": "Visi lietotāji", - "All_added_tokens_will_be_required_by_the_user": "Visi pievienotie žetoni būs vajadzīgi lietotājam", + "All_added_tokens_will_be_required_by_the_user": "Visi pievienotie žetoni būs nepieciešami lietotājam", "All_users_in_the_channel_can_write_new_messages": "Visi kanāla lietotāji var rakstīt jaunus ziņojumus", "Allow_Invalid_SelfSigned_Certs": "Atļaut nederīgus pašpārliecinātos sertifikātus", - "Allow_Invalid_SelfSigned_Certs_Description": "Atļaut nederīgu un pašnodarbinātu SSL sertifikātu saites apstiprināšanai un priekšskatījumiem.", - "Alphabetical": "Alfabēta", + "Allow_Invalid_SelfSigned_Certs_Description": "Atļaut nederīgu pašrakstītus SSL sertifikātus saites apstiprināšanai un priekšskatījumiem.", + "Alphabetical": "Alfabētiskā kārtībā", "Allow_switching_departments": "Ļaujiet apmeklētājam pārslēgt nodaļas", "Always_open_in_new_window": "Vienmēr atvērt jaunā logā", - "Analytics_features_enabled": "Iespējas ir iespējotas", - "Analytics_features_messages_Description": "Dzēš pielāgotos notikumus, kas saistīti ar darbībām, ko lietotājs veic ziņojumos.", - "Analytics_features_rooms_Description": "Dzēš pielāgotus notikumus, kas saistīti ar darbībām kanālā vai grupā (izveidojiet, atstājiet, izdzēsiet).", - "Analytics_features_users_Description": "Izseko pielāgotus notikumus, kas saistīti ar darbībām, kas saistītas ar lietotājiem (paroles atiestatīšanas laiks, profila attēlu maiņa utt.).", + "Analytics_features_enabled": "Iespējas ir aktivizētas", + "Analytics_features_messages_Description": "Izseko pielāgotos notikumus, kas saistīti ar darbībām, ko lietotājs veic ziņojumos.", + "Analytics_features_rooms_Description": "Izseko pielāgotus notikumus, kas saistīti ar darbībām kanālā vai grupā (izveidojiet, atstājiet, izdzēsiet).", + "Analytics_features_users_Description": "Izseko pielāgotus notikumus ar darbībām, kas saistītas ar lietotājiem (paroles atiestatīšanas laiks, profila attēlu maiņa utt.).", "Analytics_Google": "Google Analytics", - "Analytics_Google_id": "Izsekošanas ID", + "Analytics_Google_id": "Tracking ID", "and": "un", - "And_more": "Un __length__ vairāk", + "And_more": "And __length__ more", "Animals_and_Nature": "Dzīvnieki un daba", "Announcement": "Paziņojums", "API": "API", - "API_Allow_Infinite_Count": "Ļaujiet visu iegūt", - "API_Allow_Infinite_Count_Description": "Vai zvaniem uz REST API būtu jāatļauj viss vienā zvans atgriezties?", - "API_Analytics": "Analytics", + "API_Allow_Infinite_Count": "Atļaut visa iegūšanu", + "API_Allow_Infinite_Count_Description": "Vai zvaniem uz REST API būtu jāatļauj visu atgriezt ar vienu zvanu?", + "API_Analytics": "Analzes", "API_CORS_Origin": "CORS izcelsme", "API_Default_Count": "Noklusējuma skaits", - "API_Default_Count_Description": "REST API rezultātu noklusējuma skaits, ja patērētājs to nav iesniedzis.", + "API_Default_Count_Description": "REST API rezultātu noklusējuma skaits, ja patērētājs tos nav iesniedzis.", "API_Drupal_URL": "Drupal servera URL", "API_Drupal_URL_Description": "Piemērs: https://domain.com (izņemot aizmugures slīpsvītru)", "API_Embed": "Embed Link priekšskatījumi", "API_Embed_Description": "Vai ieslēgta saišu priekšskatījumi ir iespējoti vai nav, kad lietotājs ievieto saiti uz vietni.", - "API_Embed_UserAgent": "Ievietot ielūgumu lietotāja pārstāvi", - "API_EmbedCacheExpirationDays": "Iegult kešatmiņas beigu dienas", - "API_EmbedDisabledFor": "Atspējot Ievietot lietotājiem", + "API_Embed_UserAgent": "Iegulta lietotāja aģenta prasība", + "API_EmbedCacheExpirationDays": "Iegulta kešatmiņas beigu dienas", + "API_EmbedDisabledFor": "Atspējot Iegult lietotājiem", "API_EmbedDisabledFor_Description": "Lietotājvārdu saraksts ar komatu atdalītu sarakstu, lai atspējotu iegulto saišu priekšskatījumus.", - "API_EmbedIgnoredHosts": "Ignorēto saimnieku Ieguldīšana", - "API_EmbedIgnoredHosts_Description": "Komatu atdalītu sarakstu ar saimniekiem vai CIDR adresēm, piem. localhost, 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16", - "API_EmbedSafePorts": "Drošas ostas", - "API_EmbedSafePorts_Description": "Priekšskatīšanai atļauto ostu saraksts ar komatu atdalītu sarakstu.", - "API_Enable_CORS": "Iespējot CORS", + "API_EmbedIgnoredHosts": "Iegultie Ignorētie saimnieki", + "API_EmbedIgnoredHosts_Description": "Ar komatu atdalīts saraksts ar saimniekiem vai CIDR adresēm, piem. localhost, 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16", + "API_EmbedSafePorts": "Droši porti", + "API_EmbedSafePorts_Description": " Ar komatu atdalīts saraksts ar portiem atļauts priekšskatīšanai.", + "API_Enable_CORS": "Aktivizēt CORS", "API_Enable_Direct_Message_History_EndPoint": "Iespējot tiešo ziņojumu vēsturi", - "API_Enable_Direct_Message_History_EndPoint_Description": "Tas ļauj lietot `/ api / v1 / im.history.otherers ', kas ļauj citu lietotāju sūtītos tiešos ziņojumus skatīt, ka zvanītājs nav daļa no tiem.", - "API_Enable_Shields": "Iespējot aizsargāšanu", - "API_Enable_Shields_Description": "Iespējot vairogs, kas pieejams pie / / api / v1 / shield.svg \"", + "API_Enable_Direct_Message_History_EndPoint_Description": "Tas aktivizē `/ api / v1 / im.history.otherers ', kas ļauj skatīt citu lietotāju sūtītos tiešos ziņojumus kur zvanītājs nav daļa no tiem.", + "API_Enable_Shields": "Aktivizēt Shields", + "API_Enable_Shields_Description": "Aktivizēt shields, kas pieejami pie / / api / v1 / shield.svg \"", "API_GitHub_Enterprise_URL": "Servera URL", "API_GitHub_Enterprise_URL_Description": "Piemērs: http://domain.com (izņemot aizmugures slīpsvītru)", "API_Gitlab_URL": "GitLab URL", - "API_Shield_Types": "Shield Types", + "API_Shield_Types": "Shield tipi", "API_Shield_Types_Description": "Aizsardzības veidi, kurus var izmantot kā komatu atdalītu sarakstu, izvēlieties no \"online\", \"channel\" vai * * visiem", "API_Token": "API Token", "API_Tokenpass_URL": "Tokenpass servera URL", "API_Tokenpass_URL_Description": "Piemērs: https://domain.com (izņemot aizmugures slīpsvītru)", - "API_Upper_Count_Limit": "Max Record Amount", - "API_Upper_Count_Limit_Description": "Kāds ir maksimālais ierakstu skaits, uz kuru jāatgriežas REST API (ja tas nav neierobežots)?", - "API_User_Limit": "Lietotāja limits, lai pievienotu visus lietotājus kanālam", + "API_Upper_Count_Limit": "Maksimālais ierakstu daudzums", + "API_Upper_Count_Limit_Description": "Kāds ir maksimālais ierakstu skaits, pie kura jāatgriežas REST API (ja tas nav neierobežots)?", "API_Wordpress_URL": "WordPress URL", "Apiai_Key": "Api.ai atslēga", "Apiai_Language": "Api.ai valoda", "App_status_unknown": "Nezināms", - "App_status_constructed": "Uzcelta", - "App_status_initialized": "Inicializēts", - "App_status_auto_enabled": "Iespējots", + "App_status_constructed": "Izveidots", + "App_status_initialized": "Uzsākts", + "App_status_auto_enabled": "Aktivizēts", "App_status_manually_enabled": "Iespējots", - "App_status_compiler_error_disabled": "Atspējots: kompilēšanas kļūda", - "App_status_error_disabled": "Atspējots: nesāpināta kļūda", + "App_status_compiler_error_disabled": "Atspējots: Izpildes kļūda", + "App_status_error_disabled": "Atspējots: neezināma kļūda", "App_status_manually_disabled": "Atspējots: manuāli", - "App_status_disabled": "Invalīds", + "App_status_disabled": "Atspējots", "App_author_homepage": "autora mājas lapa", - "App_support_url": "atbalsta vietni", + "App_support_url": "atbalsta url", "Appearance": "Izskats", "Application_added": "Pieteikums pievienots", - "Application_Name": "Lietojuma nosaukums", + "Application_Name": "Pieteikuma nosaukums", "Application_updated": "Pieteikums ir atjaunināts", "Apply": "Pieteikties", - "Apply_and_refresh_all_clients": "Piesakieties un atsvaidziniet visus klientus", - "Archive": "Arhīvs", - "archive-room": "Arhīvu telpa", + "Apply_and_refresh_all_clients": "Pieteikties un atsvaidzināt visus klientus", + "Archive": "Arhīvēt", + "archive-room": "Arhīva istaba", "archive-room_description": "Atļauja arhivēt kanālu", - "are_also_typing": "arī rakstīt", - "are_typing": "ir rakstīšanas", + "are_also_typing": "arī raksta", + "are_typing": "raksta", "Are_you_sure": "Vai tu esi pārliecināts?", "Are_you_sure_you_want_to_delete_your_account": "Vai tiešām vēlaties dzēst savu kontu?", "Are_you_sure_you_want_to_disable_Facebook_integration": "Vai tiešām vēlaties atspējot Facebook integrāciju?", "assign-admin-role": "Piešķirt administratora lomu", "assign-admin-role_description": "Atļauja piešķirt administratora lomu citiem lietotājiem", - "Assign_admin": "Administratora piešķiršana", + "Assign_admin": "Administratora noteikšana", "at": "pie", - "At_least_one_added_token_is_required_by_the_user": "Lietotājs ir pieprasījis vismaz vienu pievienoto marķieri", + "At_least_one_added_token_is_required_by_the_user": "Lietotājam nepieciešams vismaz viens pievienotais žetons", "AtlassianCrowd": "Atlassian Crowd", - "Attachment_File_Uploaded": "Augšupielādēts fails", + "Attachment_File_Uploaded": "Fails augšupielādēts", "Attribute_handling": "Atribūtu apstrāde", "Audio": "Audio", "Audio_message": "Audio ziņa", - "Audio_Notification_Value_Description": "Var būt jebkura pielāgota skaņa vai noklusējuma iestatījumi: pīkstiens, chelle, ding, piliens, highbell, sezonas", - "Audio_Notifications_Default_Alert": "Paziņojumi par noklusējuma brīdinājumiem", - "Audio_Notifications_Value": "Paziņojuma noklusējuma paziņojums Audio", - "Auth_Token": "Auth Token", + "Audio_Notification_Value_Description": "Var būt jebkura pielāgota skaņa vai noklusējuma skaņa: beep, chelle, ding, droplet, highbell, seasons", + "Audio_Notifications_Default_Alert": "Audio paziņojumi noklusējuma brīdinājumi", + "Audio_Notifications_Value": "Noklusējuma paziņojuma audio", + "Auth_Token": "Auth žetons", "Author": "Autors", "Author_Information": "Autora informācija", "Authorization_URL": "Autorizācijas URL", - "Authorize": "Atļaut", + "Authorize": "Autorizēt", "auto-translate": "Automātiskā tulkošana", "auto-translate_description": "Atļauja izmantot automātiskās tulkošanas rīku", - "Auto_Load_Images": "Auto ielādēt attēlus", + "Auto_Load_Images": "Automātiski ielādēt attēlus", "Auto_Translate": "Automātiskā tulkošana", "AutoLinker_Email": "AutoLinker e-pasts", "AutoLinker_Phone": "AutoLinker tālrunis", - "AutoLinker_Phone_Description": "Automātiski saistīta ar tālruņa numuriem. piem., `(123) 456-7890`", + "AutoLinker_Phone_Description": "Automātiski saistīti ar tālruņa numuriem. piem., `(123) 456-7890`", "AutoLinker_StripPrefix": "AutoLinker Strip prefikss", - "AutoLinker_StripPrefix_Description": "Īss displejs piem., https://rocket.chat => rocket.chat", - "AutoLinker_Urls_Scheme": "AutoLinker shēma: // URL", - "AutoLinker_Urls_TLD": "AutoLinker TLD URL", - "AutoLinker_Urls_www": "AutoLinker \"www\" URL", + "AutoLinker_StripPrefix_Description": "Īss attainojums piem., https://rocket.chat => rocket.chat", + "AutoLinker_Urls_Scheme": "AutoLinker shēma: // URLs", + "AutoLinker_Urls_TLD": "AutoLinker TLD URLs", + "AutoLinker_Urls_www": "AutoLinker \"www\" URLs", "AutoLinker_UrlsRegExp": "AutoLinker URL regulārā izteiksme", - "Automatic_Translation": "Automātiskā tulkošana", - "AutoTranslate_Change_Language_Description": "Automātiskās tulkošanas valodas maiņa neveic iepriekšējo ziņojumu tulkošanu.", + "Automatic_Translation": "Automātisks tulkojums", + "AutoTranslate_Change_Language_Description": "Nomainot automātiskās tulkošanas valodu, iepriekšējie ziņojumi netiek tulkoti.", "AutoTranslate_Enabled": "Iespējot automātisko tulkošanu", "AutoTranslate_Enabled_Description": "Iespējojot automātisko tulkošanu, lietotāji, kuriem ir automātiski tulkot, ļaus lietotājiem automātiski tulkot visus ziņojumus izvēlētajā valodā. Var tikt piemērota maksa, skatiet Google dokumentācija", - "AutoTranslate_GoogleAPIKey": "Google API atslēga", + "AutoTranslate_GoogleAPIKey": "Google API Key", "Available": "Pieejams", "Available_agents": "Pieejamie aģenti", "Avatar": "Avatars", - "Avatar_changed_successfully": "Avatārs ir mainījies veiksmīgi", + "Avatar_changed_successfully": "Avatārs ir nomaints veiksmīgi", "Avatar_URL": "Avatāra URL", - "Avatar_url_invalid_or_error": "Iesniegtais urls nav derīgs vai nav pieejams. Lūdzu, mēģiniet vēlreiz, bet ar citu URL.", + "Avatar_url_invalid_or_error": "Iesniegtais url nav derīgs vai nav pieejams. Lūdzu, mēģiniet vēlreiz ar citu URL.", "away": "prom", "Away": "Prom", "away_female": "prom", "Away_female": "Prom", "away_male": "prom", "Away_male": "Prom", - "Back": "atpakaļ", - "Back_to_applications": "Atpakaļ uz lietojumprogrammām", + "Back": "Atgriezies", + "Back_to_applications": "Atpakaļ uz ", "Back_to_chat": "Atpakaļ uz tērzēšanu", - "Back_to_integration_detail": "Atpakaļ uz integrācijas detaļām", - "Back_to_integrations": "Atpakaļ uz integrāciju", + "Back_to_integration_detail": "Atpakaļ uz integrēšanas detaļām", + "Back_to_integrations": "Atpakaļ uz integrēšanu", "Back_to_login": "Atpakaļ uz pieteikšanos", - "Back_to_Manage_Apps": "Atpakaļ uz lietojumprogrammu pārvaldību", + "Back_to_Manage_Apps": "Atpakaļ uz lietotņu pārvaldi", "Back_to_permissions": "Atgriezties pie atļaujām", "Backup_codes": "Rezerves kodi", "ban-user": "Bloķēt lietotāju", - "ban-user_description": "Atļauja aizliegt lietotāju no kanāla", + "ban-user_description": "Atļauja bloķēt lietotāju no kanāla", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "Beta funkcija. Atkarīgs no video konferences iespējošanas.", "Block_User": "Bloķēt lietotāju", - "Body": "Ķermenis", - "bold": "treknrakstā", - "bot_request": "Bot pieprasījums", + "Body": "Pamatteksts", + "bold": "treknraksts", + "bot_request": "Bota pieprasījums", + "Bots": "Boti", "BotHelpers_userFields": "Lietotāja lauki", - "BotHelpers_userFields_Description": "Lietotāja lauku CSV, kuriem var piekļūt robotu palīgu metodes.", + "BotHelpers_userFields_Description": "Lietotāja lauku CSV, kuriem var piekļūt ar bota palīdzbas metodēm.", "Branch": "Filiāle", - "Broadcast_channel": "Broadcast Channel", - "Broadcast_channel_Description": "Tikai pilnvaroti lietotāji var ierakstīt jaunus ziņojumus, bet citi lietotāji varēs atbildēt", + "Broadcast_channel": "Pārraides kanāls", + "Broadcast_channel_Description": "Tikai pilnvaroti lietotāji var rakstīt jaunus ziņojumus, bet citi lietotāji varēs atbildēt", "Broadcast_Connected_Instances": "Pārraidīt saistītos gadījumus", - "Bugsnag_api_key": "Bugsnag API atslēga", - "Build_Environment": "Veidot vidi", - "bulk-create-c": "Lielapjoma izveides kanāli", - "bulk-create-c_description": "Atļauja izveidot vairumā kanālus", - "bulk-register-user": "Lielapjoma izveides kanāli", - "bulk-register-user_description": "Atļauja izveidot vairumā kanālus", + "Bugsnag_api_key": "Bugsnag API Key", + "Build_Environment": "Izveidot vidi", + "bulk-create-c": "Vairāku kanālu izveide", + "bulk-create-c_description": "Atļauja izveidot vairāku kanālu kopu", + "bulk-register-user": "Vairāku kanālu izveide", + "bulk-register-user_description": "Atļauja izveidot vairāku kanālu kopu", "busy": "aizņemts", "Busy": "Aizņemts", "busy_female": "aizņemts", @@ -360,14 +362,14 @@ "busy_male": "aizņemts", "Busy_male": "Aizņemts", "by": "ar", - "cache_cleared": "Kešatmiņa ir notīrīta", + "cache_cleared": "Kešatmiņa iztīrīta", "Cancel": "Atcelt", "Cancel_message_input": "Atcelt", - "Cannot_invite_users_to_direct_rooms": "Nevar uzaicināt lietotājus uz tiešām telpām", - "Cannot_open_conversation_with_yourself": "Nevar tieši sazināties ar sevi", - "CAS_autoclose": "Automātiska pieteikšanās logs", + "Cannot_invite_users_to_direct_rooms": "Nevar uzaicināt lietotājus uz tiešajām istabām", + "Cannot_open_conversation_with_yourself": "Nevar nosūtīt ziņojumu sev", + "CAS_autoclose": "Automātiski aizvērt pieteikšanās uznirstošo logu", "CAS_base_url": "SSO bāzes URL", - "CAS_base_url_Description": "Jūsu ārējā SSO pakalpojuma bāzes URL, piem., Https: //sso.example.undef/sso/", + "CAS_base_url_Description": "Jūsu ārējā SSO pakalpojuma bāzes URL, piem.: https: //sso.example.undef/sso/", "CAS_button_color": "Pieteikšanās pogas fona krāsa", "CAS_button_label_color": "Pieteikšanās pogas teksta krāsa", "CAS_button_label_text": "Pieteikšanās pogas marķējums", @@ -375,16 +377,16 @@ "CAS_Login_Layout": "CAS pieteikšanās izkārtojums", "CAS_login_url": "SSO pieteikšanās URL", "CAS_login_url_Description": "Jūsu ārējā SSO pakalpojuma pieteikšanās URL, piemēram, https: //so.example.undef/sso/login", - "CAS_popup_height": "Pieteikšanās loga augstums", - "CAS_popup_width": "Pieteikšanās loga platums", + "CAS_popup_height": "Pieteikšanās uznirstošā loga augstums", + "CAS_popup_width": "Pieteikšanās uznirstošā loga platums", "CAS_Sync_User_Data_Enabled": "Vienmēr sinhronizēt lietotāja datus", - "CAS_Sync_User_Data_Enabled_Description": "Vienmēr pieslēdzoties, vienmēr sinhronizējiet ārējos CAS lietotāja datus pieejamos atribūtos. Piezīme. Atšķirības vienmēr tiek sinhronizētas konta izveidošanas gadījumā.", - "CAS_Sync_User_Data_FieldMap": "Atribūtu karte", - "CAS_Sync_User_Data_FieldMap_Description": "Izmantojiet šo JSON ievade, lai izveidotu iekšējos atribūtus (atslēgu) no ārējiem atribūtiem (vērtība).
Piemērs, `{\" e-pasts \":\"% email% \",\" name \":\"% firstname%,% lastname% \"}`

Atribūtu karte vienmēr tiek interpolēta. CAS 1.0 ir pieejams tikai atribūts `username`. Pieejamie iekšējie atribūti ir: lietotājvārds, vārds, e-pasts, telpas; telpas ir ar komatu atdalītu istabu saraksts, kas jāveido pēc lietotāju izveidošanas, piemēram: {\"telpas\": \"% team%,% department%\"} pievienosies CAS lietotājiem izveidē savām komandu un nodaļu kanālam.", + "CAS_Sync_User_Data_Enabled_Description": "Pieslēdzoties, vienmēr sinhronizējiet ārējos CAS lietotāja datus pieejamos rekvizītus. Piezīme - Rekvizīti vienmēr tiek sinhronizēti pie konta izveides.", + "CAS_Sync_User_Data_FieldMap": "Rekvizītu karte", + "CAS_Sync_User_Data_FieldMap_Description": "Izmantojiet šo JSON ievadi, lai izveidotu iekšējos rekvizītus (atslēgu) no ārējiem rekvizītiem (vērtība).
Piemērs, `{\"e pastsmail\":\"% email% \",\" name \":\"% firstname%,% lastname% \"}`

Rekvizītu karte vienmēr tiek interpolēta. Iekš CAS 1.0 ir pieejami tikai `lietotājvārda`rekvizīti. Pieejamie iekšējie rekvizīti ir: lietotājvārds, vārds, e-pasts, istabas; istabas ir ar komatu atdalītu istabu saraksts, kas jāveido pēc lietotāju izveidošanas, piemēram: {\"istabas\": \"%komanda%,% departments%\"} CAS lietotāji pievienotos izveidojot savu komandu un departamentu kanālus.", "CAS_version": "CAS versija", "CAS_version_Description": "Izmantojiet tikai atbalstīto CAS versiju, kuru atbalsta jūsu CAS SSO pakalpojums.", "Chatpal_No_Results": "Nav rezultātu", - "Chatpal_More": "vairāk", + "Chatpal_More": "Vairāk", "Chatpal_Messages": "Ziņojumi", "Chatpal_Rooms": "Istabas", "Chatpal_Users": "Lietotāji", @@ -392,22 +394,22 @@ "Chatpal_All_Results": "Visi", "Chatpal_Messages_Only": "Ziņojumi", "Chatpal_HTTP_Headers": "Http galvenes", - "Chatpal_HTTP_Headers_Description": "HTTP galvenes, viens rindiņas virsraksts. Formāts: nosaukums: vērtība", + "Chatpal_HTTP_Headers_Description": "HTTP galvenes, viena galvene rindiņā. Formāts: nosaukums: vērtība", "Chatpal_API_Key": "API atslēga", - "Chatpal_API_Key_Description": "Jums vēl nav API atslēgas? Iegūstiet vienu!", + "Chatpal_API_Key_Description": "Jums vēl nav API atslēgas? Iegādājieties!", "Chatpal_no_search_results": "Nav rezultātu", "Chatpal_one_search_result": "Atrasts 1 rezultāts", - "Chatpal_search_results": "Atrasti% s rezultāti", - "Chatpal_search_page_of": "% S no% s", - "Chatpal_go_to_message": "Lēkt", + "Chatpal_search_results": "Atrasti %s rezultāti", + "Chatpal_search_page_of": "Lapa %S no %s", + "Chatpal_go_to_message": "Lekt", "Chatpal_Welcome": "Izbaudiet meklēšanu!", - "Chatpal_go_to_user": "Nosūtiet tiešo ziņojumu", - "Chatpal_go_to_room": "Lēkt", + "Chatpal_go_to_user": "Nosūtiet ziņojumu", + "Chatpal_go_to_room": "Lekt", "Chatpal_Backend": "Aizmugurstāva tips", - "Chatpal_Backend_Description": "Izvēlieties, vai vēlaties izmantot Chatal kā pakalpojumu vai kā instalāciju uz vietas", + "Chatpal_Backend_Description": "Izvēlieties, vai vēlaties izmantot Chatpal kā pakalpojumu vai kā instalāciju uz vietas", "Chatpal_Suggestion_Enabled": "Ieteikumi ir iespējoti", "Chatpal_Base_URL": "Bāzes url", - "Chatpal_Base_URL_Description": "Atrodiet aprakstu, kā palaist vietējo gadījumu par github. Vietrādim URL jābūt absolūtai un norāda uz chatpal kodolu, piemēram, http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Atrodiet aprakstu, kā palaist vietējo gadījumu uz github. Vietrādim URL jābūt absolūtai un norāda uz chatpal kodolu, piemēram, http: // localhost: 8983 / solr / chatpal.", "Chatpal_Main_Language": "Galvenā valoda", "Chatpal_Main_Language_Description": "Valoda, kuru visbiežāk izmanto sarunās", "Chatpal_Default_Result_Type": "Noklusējuma rezultātu veids", @@ -696,8 +698,6 @@ "Enter_to": "Ieiet uz", "Error": "Kļūda", "Error_404": "Kļūda: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Kļūda: Rocket.Chat prasa oplog tailing, kad darbojas vairākos gadījumos", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Lūdzu, pārliecinieties, ka jūsu MongoDB ir iekļauts ReplicaSet režīmā, un vides mainīgais MONGO_OPLOG_URL ir pareizi noteikts pieteikumu serverī.", "error-action-not-allowed": "__action__ nav atļauts", "error-application-not-found": "Pieteikums nav atrasts", "error-archived-duplicate-name": "Ir arhivēts kanāls ar nosaukumu \"__room_name__\"", diff --git a/packages/rocketchat-i18n/i18n/mn.i18n.json b/packages/rocketchat-i18n/i18n/mn.i18n.json index 5793e77ec917..00ed77771d5a 100644 --- a/packages/rocketchat-i18n/i18n/mn.i18n.json +++ b/packages/rocketchat-i18n/i18n/mn.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Руу оруулна уу", "Error": "Алдаа", "Error_404": "Алдаа: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Алдаа: Rocket.Chat олон тохиолдол дээр ажиллаж байхдаа oplog tailing шаарддаг", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "MongoDB нь ReplicaSet горимд байгаа эсэхийг шалгаарай, мөн MONGO_OPLOG_URL орчны хувьсагч нь програмын сервер дээр зөвөөр тодорхойлогдсон эсэхийг шалгана уу.", "error-action-not-allowed": "__action__ зөвшөөрөгдөөгүй", "error-application-not-found": "Програм байхгүй байна", "error-archived-duplicate-name": "'__room_name__' нэртэй архивлагдсан суваг байна.", diff --git a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json index 769755f7eb51..e9325a1d3d69 100644 --- a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json +++ b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Masuk ke", "Error": "ralat", "Error_404": "Ralat: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Ralat: Rocket.Chat memerlukan tailing oplog apabila berjalan dalam beberapa keadaan", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Sila pastikan MongoDB anda berada pada mod ReplicaSet dan pembolehubah persekitaran MONGO_OPLOG_URL ditakrifkan dengan betul pada pelayan aplikasi", "error-action-not-allowed": "__action__ tidak dibenarkan", "error-application-not-found": "Permohonan tidak dijumpai", "error-archived-duplicate-name": "Ada satu saluran yang diarkibkan dengan nama '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/nl.i18n.json b/packages/rocketchat-i18n/i18n/nl.i18n.json index 30dcf9f11f84..6f6aa629558e 100644 --- a/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Ga binnen bij", "Error": "Fout", "Error_404": "Foutmelding 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fout: Rocket.Chat vereist oplog-tailing bij uitvoering in meerdere instanties", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Zorg ervoor dat uw MongoDB in de ReplicaSet-modus staat en de omgevingsvariabele MONGO_OPLOG_URL correct is gedefinieerd op de toepassingsserver", "error-action-not-allowed": "__action__ is niet toegestaan", "error-application-not-found": "Applicatie niet gevonden", "error-archived-duplicate-name": "Er is een gearchiveerd kanaal met de naam '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/no.i18n.json b/packages/rocketchat-i18n/i18n/no.i18n.json index 946cb0bee486..301621b03783 100644 --- a/packages/rocketchat-i18n/i18n/no.i18n.json +++ b/packages/rocketchat-i18n/i18n/no.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Skriv inn til", "Error": "Feil", "Error_404": "Feil: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Feil: Rocket.Chat krever oplog tailing når du kjører i flere tilfeller", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Sørg for at MongoDB er på ReplicaSet-modus og MONGO_OPLOG_URL miljøvariabel er definert riktig på applikasjonsserveren", "error-action-not-allowed": "__action__ er ikke tillatt", "error-application-not-found": "Søknad ikke funnet", "error-archived-duplicate-name": "Det er en arkivert kanal med navn '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/pl.i18n.json b/packages/rocketchat-i18n/i18n/pl.i18n.json index 520651a2d27f..4454c43ada1b 100644 --- a/packages/rocketchat-i18n/i18n/pl.i18n.json +++ b/packages/rocketchat-i18n/i18n/pl.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Naciśnij Enter: ", "Error": "Błąd", "Error_404": "Błąd 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Błąd: Rocket.Chat wymaga oględzin oplog podczas uruchamiania w wielu instancjach", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Upewnij się, że MongoDB jest w trybie ReplicaSet, a zmienna środowiskowa MONGO_OPLOG_URL jest poprawnie zdefiniowana na serwerze aplikacji", "error-action-not-allowed": "__action__ jest niedozwolone", "error-application-not-found": "Aplikacja nie znaleziona", "error-archived-duplicate-name": "Istnieje zarchiwizowany kanał o nazwie '__room_name__ '", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index a1549395f3d4..de0f4f4cf510 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter para", "Error": "Erro", "Error_404": "Erro 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Erro: Rocket.Chat requer oplog tailing quando executado em várias instâncias", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Certifique-se de que seu MongoDB esteja no modo ReplicaSet e a variável de ambiente MONGO_OPLOG_URL esteja definida corretamente no servidor de aplicativos", "error-action-not-allowed": "__action__ não é permitido", "error-application-not-found": "Aplicação não encontrada", "error-archived-duplicate-name": "Já há um canal arquivado com o nome '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index 3affa6dfe214..4b1ffea67c0f 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter para", "Error": "Erro", "Error_404": "Erro 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Erro: Rocket.Chat requer oplog tailing quando executado em várias instâncias", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Certifique-se de que seu MongoDB esteja no modo ReplicaSet e a variável de ambiente MONGO_OPLOG_URL esteja definida corretamente no servidor de aplicativos", "error-action-not-allowed": "__action__ não é permitido", "error-application-not-found": "Aplicação não encontrada", "error-archived-duplicate-name": "Já há um canal arquivado com o nome '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/ro.i18n.json b/packages/rocketchat-i18n/i18n/ro.i18n.json index fc0ae2124226..0297136ad28b 100644 --- a/packages/rocketchat-i18n/i18n/ro.i18n.json +++ b/packages/rocketchat-i18n/i18n/ro.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter pentru a", "Error": "Eroare", "Error_404": "Eroare 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Eroare: Rocket.Chat necesită tăiere oplog atunci când rulează în mai multe instanțe", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Asigurați-vă că MongoDB este în modul ReplicaSet și că variabila de mediu MONGO_OPLOG_URL este definită corect pe serverul de aplicații", "error-action-not-allowed": "__action__ nu este permisă", "error-application-not-found": "Aplicatia nu a fost gasita", "error-archived-duplicate-name": "Există un canal de arhivat cu numele '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/ru.i18n.json b/packages/rocketchat-i18n/i18n/ru.i18n.json index 6f297f97ef58..0f7397387055 100644 --- a/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -164,13 +164,13 @@ "add-user-to-any-c-room_description": "Разрешение на добавление пользователя к любому публичному каналу", "add-user-to-any-p-room": "Добавить пользователя к любому приватному каналу", "add-user-to-any-p-room_description": "Разрешение на добавление пользователя к любому приватному каналу", - "add-user-to-joined-room": "Добавить пользователя к любому каналу, к которому присоединён", + "add-user-to-joined-room": "Добавление пользователя к любому доступному каналу", "add-user-to-joined-room_description": "Разрешение на добавление пользователя к каналу, к которому имеет доступ текущий пользователь", "add-user_description": "Разрешение на добавление новых пользователей на сервер на странице пользователей", "Add_agent": "Добавить представителя", "Add_custom_oauth": "Добавить собственный OAuth", "Add_Domain": "Добавить домен", - "Add_files_from": "Добавить файлы", + "Add_files_from": "Добавить файлы из", "Add_manager": "Добавить менеджера", "Add_Role": "Добавить роль", "Add_user": "Добавить пользователя", @@ -206,7 +206,7 @@ "Always_open_in_new_window": "Всегда открывать в новом окне", "Analytics_features_enabled": "Включенные функции", "Analytics_features_messages_Description": "Отслеживать пользовательские события, связанные с сообщениями.", - "Analytics_features_rooms_Description": "Отслеживать пользовательские события, связанные с действиями в чатах (создать, покинуть, удалить).", + "Analytics_features_rooms_Description": "Отслеживает пользовательские события, связанные с действиями в публичных и закрытых каналах (создать, покинуть, удалить).", "Analytics_features_users_Description": "Отслеживать пользовательские события, связанные с пользователями (время сброса пароля, изменение аватара и т. д.).", "Analytics_Google": "Google Analytics", "Analytics_Google_id": "Идентификатор отслеживания", @@ -235,30 +235,30 @@ "API_EmbedSafePorts_Description": "Список портов, разделенных запятыми, разрешенных для предварительного просмотра.", "API_Enable_CORS": "Включить CORS", "API_Enable_Direct_Message_History_EndPoint": "Включить конечную точку истории личных сообщений", - "API_Enable_Direct_Message_History_EndPoint_Description": "Эта настройка включает `/api/v1/im.history.others`. Это разрешает просмотр сообщений из личных диалогов, в которых не участвует вызывающий.", - "API_Enable_Shields": "Включить бэйджики", + "API_Enable_Direct_Message_History_EndPoint_Description": "Эта настройка включает метод `/api/v1/im.history.others`, который разрешает просмотр сообщений из личных диалогов, в которых не участвует вызывающий.", + "API_Enable_Shields": "Включить бейджи", "API_Enable_Shields_Description": "Включить бейджи, доступные в `/api/v1/shield.svg`", "API_GitHub_Enterprise_URL": "URL-адрес сервера", "API_GitHub_Enterprise_URL_Description": "Пример: http://domain.com (без завершающего слеша)", "API_Gitlab_URL": "GitLab URL", "API_Shield_Types": "Типы бейджей", - "API_Shield_Types_Description": "Типы бэйджикив виде списка с разделением запятой, выбирайте из `online`, `channel` либо используйте `*` для всех", + "API_Shield_Types_Description": "Типы бейджей в виде списка с разделением запятой, выберите `online`, `channel` либо используйте `*` для выбора всех", "API_Token": "API Токен", "API_Tokenpass_URL": "Tokenpass Server URL", "API_Tokenpass_URL_Description": "Пример: https://domain.com (без слеша на конце)", "API_Upper_Count_Limit": "Максимальное число записей", "API_Upper_Count_Limit_Description": "Какое максимальное число записей REST API должен возвращать (если не снято ограничение)?", - "API_User_Limit": "Лимит пользователя для добавления всех пользователей к чату", + "API_User_Limit": "Лимит пользователей при добавлении всех пользователей на канал.", "API_Wordpress_URL": "WordPress URL", "Apiai_Key": "Ключ Api.ai", "Apiai_Language": "Api.ai Язык", "App_status_unknown": "Неизвестный", "App_status_constructed": "построенный", - "App_status_initialized": "Initialized", + "App_status_initialized": "Инициализировано", "App_status_auto_enabled": "Включено", "App_status_manually_enabled": "Включено", "App_status_compiler_error_disabled": "Отключено: ошибка компилятора", - "App_status_error_disabled": "Отключено: ошибка при отсутствии", + "App_status_error_disabled": "Отключено: неизвестная ошибка", "App_status_manually_disabled": "Отключено: вручную", "App_status_disabled": "Отключено", "App_author_homepage": "домашняя страница автора", @@ -287,7 +287,7 @@ "Attribute_handling": "Обработка атрибутов", "Audio": "Аудио", "Audio_message": "Звуковое сообщение", - "Audio_Notification_Value_Description": "Может быть любой выборочный звук или один из звуков по умолчанию: beep, chelle, ding, droplet, highbell, seasons", + "Audio_Notification_Value_Description": "Может быть любой из загруженных звуков или один из звуков по умолчанию: beep, chelle, ding, droplet, highbell, seasons", "Audio_Notifications_Default_Alert": "Звуковые уведомления", "Audio_Notifications_Value": "Сообщение по умолчанию для аудио уведомления", "Auth_Token": "Токен авторизации", @@ -341,6 +341,7 @@ "Body": "Тело", "bold": "жирный", "bot_request": "Запрос бота", + "Bots": "Боты", "BotHelpers_userFields": "Пользовательские поля", "BotHelpers_userFields_Description": "CSV полей пользователя, к которым можно получить доступ с помощью методов ботов помощников.", "Branch": "Ветка", @@ -382,39 +383,39 @@ "CAS_Sync_User_Data_FieldMap": "Атрибуты карты", "CAS_Sync_User_Data_FieldMap_Description": "Используйте этот JSON для создания внутренних атрибутов (ключ) из внешних атрибутов (значение). Имена внешних атрибутов, обрамленные '%', будут интерполированы в строки значений.
Например, `{\"email\":\"%email%\", \"name\":\"%firstname%, %lastname%\"}`

Map атрибутов всегда интерполируется. В CAS 1.0 доступен только атрибут `username`. Из внутренних атрибутов доступны: логин (username), имя (name), адрес электронной почты (email), комнаты (rooms); комнаты - это список комнат, к которым присоединить пользователя после создания, разделенный запятой, например: {\"rooms\": \"%team%,%department%\"} присоединит пользователей CAS при создании к каналам их команды и отдела.", "CAS_version": "Версия CAS", - "CAS_version_Description": "Используйте только поддерживаемую версию CAS, поддерживаемую вашим сервисом CAS SSO.", + "CAS_version_Description": "Используйте только версию CAS, поддерживаемую вашим сервисом CAS SSO.", "Chatpal_No_Results": "Нет результатов", "Chatpal_More": "Больше", "Chatpal_Messages": "Сообщения", "Chatpal_Rooms": "Комнаты", "Chatpal_Users": "Пользователи", - "Chatpal_Search_Results": "результаты поиска", + "Chatpal_Search_Results": "Результаты поиска", "Chatpal_All_Results": "Все", "Chatpal_Messages_Only": "Сообщения", - "Chatpal_HTTP_Headers": "Заголовки Http", + "Chatpal_HTTP_Headers": "Заголовки HTTP", "Chatpal_HTTP_Headers_Description": "Список заголовков HTTP, по одному заголовку в строке. Формат: имя: значение", - "Chatpal_API_Key": "Ключ API", - "Chatpal_API_Key_Description": "У вас еще нет ключа API ? Получить один!", - "Chatpal_no_search_results": "Безрезультатно", - "Chatpal_one_search_result": "Найдено 1 результат", - "Chatpal_search_results": "Найдено% s результатов", - "Chatpal_search_page_of": "Страница% s% s", + "Chatpal_API_Key": "API ключ", + "Chatpal_API_Key_Description": "У вас еще нет ключа API? Получите его!", + "Chatpal_no_search_results": "Ничего не найдено", + "Chatpal_one_search_result": "Найден 1 результат", + "Chatpal_search_results": "Найдено %s результатов", + "Chatpal_search_page_of": "Страница %s из %s", "Chatpal_go_to_message": "Перейти", "Chatpal_Welcome": "Наслаждайтесь поиском!", - "Chatpal_go_to_user": "Отправить прямое сообщение", + "Chatpal_go_to_user": "Отправить личное сообщение", "Chatpal_go_to_room": "Перейти", - "Chatpal_Backend": "Тип бэкэнд", + "Chatpal_Backend": "Тип бэкэнда", "Chatpal_Backend_Description": "Выберите, если вы хотите использовать Chatpal как услугу или как установку на месте", "Chatpal_Suggestion_Enabled": "Предложения включены", - "Chatpal_Base_URL": "Базовый адрес", - "Chatpal_Base_URL_Description": "Найдите некоторое описание запуска локального экземпляра в github. URL-адрес должен быть абсолютным и указывать на ядро ​​chatpal, например. HTTP: // локальный: 8983 / Solr / chatpal.", - "Chatpal_Main_Language": "Главный язык", + "Chatpal_Base_URL": "Базовый URL", + "Chatpal_Base_URL_Description": "Вы сможете найти описание запуска локального экземпляра в github. URL-адрес должен быть абсолютным и указывать на ядро chatpal, например. http://localhost:8983/ solr/chatpal.", + "Chatpal_Main_Language": "Основной язык", "Chatpal_Main_Language_Description": "Язык, который больше всего используется в разговорах", "Chatpal_Default_Result_Type": "Тип результата по умолчанию", "Chatpal_Default_Result_Type_Description": "Определяет, какой результат будет показан по результату. Все означает, что предоставляется общий обзор для всех типов.", - "Chatpal_AdminPage": "Страница администрации чатпала", + "Chatpal_AdminPage": "Страница администрирования Chatpal", "Chatpal_Email_Address": "Адрес электронной почты", - "Chatpal_Terms_and_Conditions": "Сроки и условия", + "Chatpal_Terms_and_Conditions": "Условия", "Chatpal_TAC_read": "Я прочитал условия", "Chatpal_create_key": "Создать ключ", "Chatpal_Batch_Size": "Индексный размер партии", @@ -423,13 +424,14 @@ "Chatpal_Batch_Size_Description": "Размер партии индексных документов (при начальной загрузке)", "Chatpal_Timeout_Size_Description": "Время между двумя окнами индекса в мс (при начальной загрузке)", "Chatpal_Window_Size_Description": "Размер индексных окон в часах (при начальной загрузке)", - "Chatpal_ERROR_TAC_must_be_checked": "Условия и условия должны быть проверены", - "Chatpal_ERROR_Email_must_be_set": "Необходимо установить адрес электронной почты", + "Chatpal_ERROR_TAC_must_be_checked": "Вы должны дать свое согласие с условиями", + "Chatpal_ERROR_Email_must_be_set": "Необходимо указать адрес электронной почты", "Chatpal_ERROR_Email_must_be_valid": "Email должен быть действительным", "Chatpal_ERROR_username_already_exists": "Имя пользователя уже занято", - "Chatpal_created_key_successfully": "API-ключ успешно создан", + "Chatpal_created_key_successfully": "API ключ успешно создан", "Chatpal_run_search": "Поиск", "CDN_PREFIX": "CDN префикс", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Больше информации по Chatpal на http://chatpal.io", "Certificates_and_Keys": "Ключи и сертификаты", "Change_Room_Type": "Изменение типа канала", "Changing_email": "Изменение адреса электронной почты", @@ -459,7 +461,7 @@ "Choose_a_room": "Выберите комнату", "Choose_messages": "Выбрать сообщения", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Выберите псевдоним, который появится перед логином в сообщениях.", - "Choose_the_username_that_this_integration_will_post_as": "Выберите логин, под которым эта интеграция будет постить.", + "Choose_the_username_that_this_integration_will_post_as": "Выберите имя пользователя, от которого будет отправлять сообщения эта интеграция.", "clean-channel-history": "Очистить историю канала", "clean-channel-history_description": "Разрешение удалять историю на каналах", "clear": "Очистить", @@ -534,8 +536,8 @@ "Custom_Fields": "Пользовательские поля", "Custom_oauth_helper": "Настраивая вашего поставщика OAuth, вам необходимо сообщить обратный URL-адрес. Используйте
%s
.", "Custom_oauth_unique_name": "Имя OAuth сервиса", - "Custom_Script_Logged_In": "Пользовательский скрипт для зарегистрированных пользователей", - "Custom_Script_Logged_Out": "Пользовательский скрипт для незарегистрированных пользователей", + "Custom_Script_Logged_In": "Пользовательский скрипт для авторизованных пользователей", + "Custom_Script_Logged_Out": "Пользовательский скрипт для неавторизованных пользователей", "Custom_Scripts": "Пользовательские скрипты", "Custom_Sound_Add": "Добавить свой звук", "Custom_Sound_Delete_Warning": "Удаление звука нельзя отменить", @@ -643,7 +645,7 @@ "edit-other-user-active-status": "Редактировать статус активности другого пользователя", "edit-other-user-active-status_description": "Разрешение на блокировку и разблокировку аккаунтов", "edit-other-user-info": "Редактировать информацию другого пользователя", - "edit-other-user-info_description": "Разрешить изменять имя, логин или адрес электронной почты другого пользователя.", + "edit-other-user-info_description": "Разрешение изменять имя, логин или адрес электронной почты другого пользователя.", "edit-other-user-password": "Редактировать пароль другого пользователя", "edit-other-user-password_description": "Разрешение на редактирование пароля другого пользователя. Требует разрешения на редактирование информации другого пользователя.", "edit-privileged-setting": "Изменить привилегированные параметры", @@ -666,7 +668,7 @@ "Email_from": "От", "Email_Header_Description": "Вы можете использовать следующие подстановки:
  • [Site_Name] и [Site_URL] для имени приложения и его URL соответственно.
", "Email_Notification_Mode": "Офлайн уведомления по Email", - "Email_Notification_Mode_All": "Каждое упоминание", + "Email_Notification_Mode_All": "Каждое упоминание/ЛС", "Email_Notification_Mode_Disabled": "Отключено", "Email_or_username": "Адрес email или логин", "Email_Placeholder": "Пожалуйста, введите ваш email адрес...", @@ -693,11 +695,9 @@ "Enter_Behaviour_Description": "Эта настройка определяет, будет Enter отправлять сообщение или добавлять новую строку", "Enter_name_here": "Введите название", "Enter_Normal": "Обычный режим (отправка по Enter)", - "Enter_to": "Выйти и ", + "Enter_to": "Войти в", "Error": "Ошибка", "Error_404": "Ошибка 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Ошибка: требуется слежение за Oplog при запуске Rocket.Chat на виртуальных машинах", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Пожалуйста, убедитесь, что ваш MongoDB находится в режиме ReplicaSet, а переменная среды MONGO_OPLOG_URL правильно определена на сервере приложений.", "error-action-not-allowed": "__action__ не разрешено", "error-application-not-found": "Приложение не найдено", "error-archived-duplicate-name": "Существует архивный канал с именем '__room_name__'", @@ -709,17 +709,17 @@ "error-could-not-change-username": "Не удалось изменить логин", "error-delete-protected-role": "Нельзя удалить защищённую роль", "error-department-not-found": "Отдел не найден", - "error-direct-message-file-upload-not-allowed": "Передача файлов не разрешена в личных сообщениях", + "error-direct-message-file-upload-not-allowed": "Обмен файлами не разрешен в личных сообщениях", "error-duplicate-channel-name": "Канал с именем '__channel_name__' уже существует", "error-email-domain-blacklisted": "Домен адреса электронной почты находится в черном списке", "error-email-send-failed": "Ошибка отправки электронного сообщения: __message__", "error-field-unavailable": "__field__ уже используется :(", "error-file-too-large": "Размер файл слишком большой", - "error-importer-not-defined": "Импортер не был определен правильно, не хватает классификации импорта.", + "error-importer-not-defined": "Импортер не был определен правильно, отсутствует класс импорта.", "error-input-is-not-a-valid-field": "__input__ недопустимое __field__", "error-invalid-actionlink": "Недействительная ссылка", "error-invalid-arguments": "Недопустимые аргументы", - "error-invalid-asset": "Недействительный актив", + "error-invalid-asset": "Недействительный ресурс", "error-invalid-channel": "Недопустимый канал.", "error-invalid-channel-start-with-chars": "Недопустимый канал. Начните с @ или #", "error-invalid-custom-field": "Неверное пользовательское поле", @@ -773,7 +773,7 @@ "error-you-are-last-owner": "Вы последний владелец комнаты. Пожалуйста, назначьте нового владельца до выхода из этой комнаты.", "Error_changing_password": "Ошибка при изменении пароля", "Error_loading_pages": "Ошибка при загрузке страниц", - "Esc_to": "Выйти и", + "Esc_to": "Выйти в", "Event_Trigger": "Событие", "Event_Trigger_Description": "Выберите тим события который будет запускать этот webhook", "every_30_minutes": "Раз в 30 минут", @@ -801,7 +801,7 @@ "FileUpload": "Загрузка файла", "FileUpload_Disabled": "Загрузка файлов отключена.", "FileUpload_Enabled": "Загрузка файла включена", - "FileUpload_Enabled_Direct": "Включить загрузку файлов в личных сообщениях", + "FileUpload_Enabled_Direct": "Загрузка файлов включена в личных сообщениях", "FileUpload_File_Empty": "Пустой файл", "FileUpload_FileSystemPath": "Системный путь", "FileUpload_GoogleStorage_AccessId": "Идентификатор доступа Google Storage", @@ -843,7 +843,7 @@ "Food_and_Drink": "Еда и питьё", "Footer": "Нижний колонтитул", "Footer_Direct_Reply": "Подвал, когда прямой ответ включен", - "For_more_details_please_check_our_docs": "Для получения дополнительной информации посмотрите нашу документацию", + "For_more_details_please_check_our_docs": "Для получения дополнительной информации, пожалуйста, посмотрите нашу документацию", "For_your_security_you_must_enter_your_current_password_to_continue": "Для вашей же безопасности, вы должны повторно ввести свой пароль, чтобы продолжить", "force-delete-message": "Принудительное удаление сообщений", "force-delete-message_description": "Разрешение на удаление сообщений в обход всех ограничений", @@ -993,7 +993,7 @@ "Integration_Outgoing_WebHook_History": "История исходящих webhook-интеграций", "Integration_Outgoing_WebHook_History_Data_Passed_To_Trigger": "Данные, переданные в интеграцию", "Integration_Outgoing_WebHook_History_Data_Passed_To_URL": "Данные, переданные по URL", - "Integration_Outgoing_WebHook_History_Error_Stacktrace": "Стек ошибки", + "Integration_Outgoing_WebHook_History_Error_Stacktrace": "Трассировка ошибки", "Integration_Outgoing_WebHook_History_Http_Response": "HTTP ответ", "Integration_Outgoing_WebHook_History_Http_Response_Error": "Ошибка ответа HTTP", "Integration_Outgoing_WebHook_History_Messages_Sent_From_Prepare_Script": "Сообщения, отправленные с этапа подготовки", @@ -1086,7 +1086,7 @@ "Jitsi_Enable_Channels": "Включить на канале", "join": "Присоединиться", "join-without-join-code": "Присоединяться к публичным чатам без кода входа", - "join-without-join-code_description": "Разрешение на обход кода входа для публичных чатов с включенным кодом входа", + "join-without-join-code_description": "Разрешение пропускать код присоединения для публичных чатов с включенным кодом входа", "Join_audio_call": "Присоединиться к аудиозвонку", "Join_Chat": "Присоединиться к чату", "Join_default_channels": "Присоединить к публичным каналам по умолчанию", @@ -1130,7 +1130,7 @@ "Layout": "Внешний вид", "Layout_Home_Body": "Текст на главной странице", "Layout_Home_Title": "Заголовок на главной странице", - "Layout_Login_Terms": "Правила составления логина", + "Layout_Login_Terms": "Правила составления имения пользователя", "Layout_Privacy_Policy": "Политика конфиденциальности", "Layout_Sidenav_Footer": "Колонтитул навигационной панели", "Layout_Sidenav_Footer_description": "Размер колонтитула 260 на 70 пикселей", @@ -1155,19 +1155,19 @@ "LDAP_Enable": "Включить LDAP", "LDAP_Enable_Description": "Попытка использовать LDAP для аутентификации.", "LDAP_Encryption": "Шифрование", - "LDAP_Encryption_Description": "Метод шифрования раньше обеспечивал безопасность коммуникаций с сервером LDAP. Примеры содержат `plain` (без шифрования), `SSL/LDAPS`(зашифрованный с начала), а также `StartTLS`(модернизируйте до зашифрованной коммуникации после подключения).", + "LDAP_Encryption_Description": "Метод шифрования, используемый для обеспечения связи с сервером LDAP. Примеры включают в себя «plain» (без шифрования), «SSL / LDAPS» (зашифрованные с самого начала) и «StartTLS» (обновление до зашифрованной связи после подключения).", "LDAP_Internal_Log_Level": "Уровень внутреннего логирования", "LDAP_Group_Filter_Enable": "Включить фильтр групп пользователей LDAP", - "LDAP_Group_Filter_Enable_Description": "Ограничить доступ к пользователям в группе LDAP
Полезно для серверов OpenLDAP без наложений, которые не позволяют * memberOf * filter", + "LDAP_Group_Filter_Enable_Description": "Ограничить доступ к пользователям в группе LDAP
Полезно для серверов OpenLDAP без оверлеев, которые не разрешают фильтр *memberOf*", "LDAP_Group_Filter_Group_Id_Attribute": "Атрибуты Group ID", "LDAP_Group_Filter_Group_Id_Attribute_Description": "Например: *OpenLDAP:*cn", - "LDAP_Group_Filter_Group_Member_Attribute": "Атрибут члена группы", + "LDAP_Group_Filter_Group_Member_Attribute": "Group Member Attribute", "LDAP_Group_Filter_Group_Member_Attribute_Description": "Например: *OpenLDAP:*uniqueMember", - "LDAP_Group_Filter_Group_Member_Format": "Формат участника группы", + "LDAP_Group_Filter_Group_Member_Format": "Group Member Format", "LDAP_Group_Filter_Group_Member_Format_Description": "Например, *OpenLDAP:*uid=#{username},ou=users,o=Company,c=com", "LDAP_Group_Filter_Group_Name": "Имя группы", "LDAP_Group_Filter_Group_Name_Description": "Имя группы, к которой принадлежит пользователь", - "LDAP_Group_Filter_ObjectClass": "Группа ObjectClass", + "LDAP_Group_Filter_ObjectClass": "Group ObjectClass", "LDAP_Group_Filter_ObjectClass_Description": "*Objectclass*, идентифицирует группы.
Например: OpenLDAP: groupOfUniqueNames", "LDAP_Host": "Хост", "LDAP_Host_Description": "Хост LDAP, например `ldap.example.com` или `10.0.0.30`.", @@ -1308,12 +1308,12 @@ "Mark_as_read": "Пометить как прочитанное", "Mark_as_unread": "Пометить как непрочитанное", "Markdown_Headers": "Разрешить заголовки Markdown в сообщениях", - "Markdown_Marked_Breaks": "Включить отмеченные перерывы", - "Markdown_Marked_GFM": "Включить отмеченные GFM", - "Markdown_Marked_Pedantic": "Включить отмеченные педантичные", - "Markdown_Marked_SmartLists": "Включить отмеченные интеллектуальные списки", - "Markdown_Marked_Smartypants": "Включить отмеченные Smartypants", - "Markdown_Marked_Tables": "Включить отмеченные таблицы", + "Markdown_Marked_Breaks": "Enable Marked Breaks", + "Markdown_Marked_GFM": "Enable Marked GFM", + "Markdown_Marked_Pedantic": "Enable Marked Pedantic", + "Markdown_Marked_SmartLists": "Enable Marked Smart Lists", + "Markdown_Marked_Smartypants": "Enable Marked Smartypants", + "Markdown_Marked_Tables": "Enable Marked Tables", "Markdown_Parser": "Парсер Markdown", "Markdown_SupportSchemesForLink": "Поддерживать Markdown систему ссылок", "Markdown_SupportSchemesForLink_Description": "Разрешённые Markdown системы через запятую", @@ -1421,7 +1421,7 @@ "multi": "несколько", "multi_line": "несколько строк", "Mute_all_notifications": "Отключить все уведомления", - "Mute_Group_Mentions": "Отключить звук @all и @here", + "Mute_Group_Mentions": "Отключить звук для упоминаний @all и @here", "mute-user": "Заглушить пользователя", "mute-user_description": "Разрешение на заглушение других пользователей в этом же канале", "Mute_Focused_Conversations": "Отключение сфокусированных разговоров", @@ -1551,7 +1551,7 @@ "OTR_is_only_available_when_both_users_are_online": "Конфиденциальная беседа доступна, когда оба пользователя в сети.", "Outgoing_WebHook": "Исходящий WebHook", "Outgoing_WebHook_Description": "Получать данные из Rocket.Chat в режиме реального времени", - "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Отклонить URL-адрес, на который загружены файлы. Этот URL-адрес также используется для загрузок в том случае, если указан CDN.", + "Override_URL_to_which_files_are_uploaded_This_url_also_used_for_downloads_unless_a_CDN_is_given": "Переопределить URL-адрес, на который загружены файлы. Этот URL-адрес также используется для загрузок до тех пор, пока не указан CDN.", "Page_title": "Заголовок страницы", "Page_URL": "URL страницы", "Password": "Пароль", @@ -1561,7 +1561,7 @@ "Payload": "Тело запроса", "People": "Люди", "Permalink": "Постоянная ссылка", - "Permissions": "Настройка прав", + "Permissions": "Права доступа", "pin-message": "Прикрепить сообщение", "pin-message_description": "Разрешение прикреплять сообщение на канале", "Pin_Message": "Прикрепить сообщение", @@ -1575,10 +1575,10 @@ "PiwikAnalytics_domains_Description": "В отчете «Outlinks» спрячьте клики с известными URL-адресами псевдонимов. Вставьте один домен в строку и не используйте разделители.", "PiwikAnalytics_prependDomain": "Добавить имя домена", "PiwikAnalytics_prependDomain_Description": "Подготовьте домен сайта к заголовку страницы при отслеживании", - "PiwikAnalytics_siteId_Description": "Идентификатор. Используетя для идентификации этого сайта. Пример: 17", + "PiwikAnalytics_siteId_Description": "Идентификатор. Используется для идентификации текущего сайта. Пример: 17", "PiwikAnalytics_url_Description": "URL, где находится Piwik, обязательно должен содержать слэш в конце. Пример: //piwik.rocket.chat/", - "Placeholder_for_email_or_username_login_field": "Подсказка адреса электронной почты или логина пользователя для поля при входе", - "Placeholder_for_password_login_field": "Подсказка для поля пароля при входе", + "Placeholder_for_email_or_username_login_field": "Подсказка для поля Email или имени пользователя при входе", + "Placeholder_for_password_login_field": "Подсказка для поля пароль при входе", "Please_add_a_comment": "Пожалуйста, добавьте комментарий", "Please_add_a_comment_to_close_the_room": "Пожалуйста, добавьте комментарий, чтобы закрыть комнату", "Please_answer_survey": "Пожалуйста, уделите минуту для того, чтобы ответить на несколько вопросов об этом чате", @@ -1633,10 +1633,10 @@ "Push_enable_gateway": "Включить шлюз", "Push_gateway": "Шлюз", "Push_gcm_api_key": "Ключ GCM API", - "Push_gcm_project_number": "GCM номер проекта", + "Push_gcm_project_number": "GCM Project Number", "Push_production": "Продакшн", "Push_show_message": "Показать сообщение в уведомлении", - "Push_show_username_room": "Показать имя чата/логин пользователя в уведомлении", + "Push_show_username_room": "Показывать канал/группу/имя пользователя в уведомлении", "Push_test_push": "Тест", "Query": "Запрос", "Query_description": "Дополнительные условия для определения того, каким пользователям отправлять электронную почту. Отписавшиеся пользователи, автоматически удаляются из запроса. Должен быть валидным JSON. Например: \"{\"createdAt\":{\"$gt\":{\"$date\": \"2015-01-01T00:00:00.000Z\"}}}\"", @@ -1657,7 +1657,7 @@ "Reason_To_Join": "Причина присоединения", "RealName_Change_Disabled": "Ваш администратор отключил возможность смены имени", "Receive_alerts": "Получать уведомления", - "Receive_Group_Mentions": "Получать сообщения @all и @here", + "Receive_Group_Mentions": "Получать упоминания @all и @here", "Record": "Запись", "Redirect_URI": "Redirect URI", "Refresh_keys": "Обновить клавиши", @@ -1713,7 +1713,7 @@ "Room_archivation_state": "Статус", "Room_archivation_state_false": "В сети", "Room_archivation_state_true": "Архивировать", - "Room_archived": "Комната в архиве", + "Room_archived": "Канал архивирован", "room_changed_announcement": "Пользователь __user_by__ изменил объявление комнаты на __room_announcement__ ", "room_changed_description": "Пользователь __user_by__ изменил описание комнаты на __room_description__", "room_changed_privacy": "Пользователь __user_by__ изменил тип комнаты на __room_type__", @@ -1722,7 +1722,7 @@ "Room_description_changed_successfully": "Описание канала было успешно обновлено", "Room_has_been_archived": "Комната была архивирована", "Room_has_been_deleted": "Комната была удалена", - "Room_has_been_unarchived": "Чат был разархивирован", + "Room_has_been_unarchived": "Канал был восстановлен", "Room_tokenpass_config_changed_successfully": "Изменена конфигурация номера порта", "Room_Info": "Информация о чате", "room_is_blocked": "Комната была заблокирована", @@ -1835,7 +1835,7 @@ "Settings_updated": "Настройки обновлены", "Share_Location_Title": "Поделиться местоположением?", "Shared_Location": "Предоставленное местоположение", - "Should_be_a_URL_of_an_image": "Введите URL изображения.", + "Should_be_a_URL_of_an_image": "Должен быть URL-адрес изображения.", "Should_exists_a_user_with_this_username": "Пользователь уже должен существовать.", "Show_agent_email": "Показать электронный адрес агента", "Show_all": "Показать всех", @@ -1868,7 +1868,7 @@ "SlackBridge_Out_Channels_Description": "Выберите с каких каналов отправлять сообщения обратно в Slack", "SlackBridge_Out_Enabled": "Включить SlackBridge Out", "SlackBridge_Out_Enabled_Description": "Должен ли SlackBridge также отправлять ваши сообщения обратно в Slack", - "SlackBridge_start": "@%s начал импорт через SlackBridge в \"#%s\". Вы получите уведомление после завершения.", + "SlackBridge_start": "@%s начал импорт SlackBridge в \"#%s\". Вы получите уведомление, когда все будет завершено.", "Slack_Users": "Пользователи Slack", "Slash_Gimme_Description": "Показывает (つ ◕_◕) つ перед сообщением", "Slash_LennyFace_Description": "Показывает (͡ ° ͜ʖ ͡ °) после сообщения", @@ -1918,7 +1918,7 @@ "Started_a_video_call": "Начать видеозвонок", "Statistics": "Статистика", "Statistics_reporting": "Отправлять статистику в Rocket.Chat", - "Statistics_reporting_Description": "Отправляя свою статистику, вы поможете нам определить, сколько Rocket.Chat развернуты, а также насколько хорошо ведет себя система, таким образом, мы можем дополнительно улучшить его. Не беспокойтесь, поскольку никакой информации о пользователях не передается, а вся информация, что мы получаем, конфиденциальна.", + "Statistics_reporting_Description": "Отправляя свою статистику, вы поможете нам определить, сколько серверов Rocket.Chat развернуто, а также насколько хорошо ведет себя система, чтобы мы могли работать над ее улучшением. Не беспокойтесь, поскольку никакой информации о пользователях не передается, а вся информация, что мы получаем, конфиденциальна.", "Stats_Active_Users": "Активные пользователи", "Stats_Avg_Channel_Users": "Среднее число пользователей на каналах", "Stats_Avg_Private_Group_Users": "Среднее число пользователей в приватных группах", @@ -2027,7 +2027,7 @@ "There_are_no_applications": "Приложения oAuth еще не добавлены.", "There_are_no_integrations": "Интеграций нет", "There_are_no_users_in_this_role": "Пользователей этой роле не найдено.", - "There_are_no_applications_installed": "В настоящее время не установлены приложения Rocket.Chat.", + "There_are_no_applications_installed": "В настоящее время у вас нет установленных приложений Rocket.Chat.", "This_conversation_is_already_closed": "Беседа уже закрыта.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Такой адрес электронной почты уже использовался и не был подтверждён. Пожалуйста, смените ваш пароль.", "This_is_a_desktop_notification": "Это уведомление компьютера", @@ -2117,11 +2117,11 @@ "Uptime": "Аптайм", "URL": "URL", "URL_room_prefix": "Префикс URL комнаты", - "Use_account_preference": "Параметры профиля", + "Use_account_preference": "Использовать настройки профиля", "Use_Emojis": "Использовать эмодзи ", "Use_Global_Settings": "Использовать глобальные настройки", "Use_initials_avatar": "Использовать инициалы имени пользователя", - "Use_minor_colors": "Используйте небольшую цветовую палитру (по умолчанию наследуют основные цвета)", + "Use_minor_colors": "Используйте малую цветовую палитру (по умолчанию наследует основные цвета)", "Use_service_avatar": "Использовать %s аватар", "Use_this_username": "Использовать этот логин", "Use_uploaded_avatar": "Использовать загруженный аватар", @@ -2139,7 +2139,7 @@ "User_added": "Пользователь __user_added__ добавлен.", "User_added_by": "Пользователь __user_added__ добавлен __user_by__.", "User_added_successfully": "Пользователь успешно добавлен", - "User_and_group_mentions_only": "Только уведомления пользователя и группы", + "User_and_group_mentions_only": "Только упоминания пользователей и групп", "User_default": "Пользователь по умолчанию", "User_doesnt_exist": "Пользователя с логином \"@%s\" не существует.", "User_has_been_activated": "Пользователь был активирован", @@ -2179,18 +2179,18 @@ "User_uploaded_file": "Загрузил файл", "User_uploaded_image": "Загрузил изображение", "User_Presence": "Присутствие пользователя", - "UserDataDownload": "Загрузка пользовательских данных", - "UserData_EnableDownload": "Включить загрузку данных пользователя", - "UserData_FileSystemPath": "Путь к системе (экспортированные файлы)", - "UserData_FileSystemZipPath": "Путь к системе (сжатый файл)", + "UserDataDownload": "Выгрузка пользовательских данных", + "UserData_EnableDownload": "Включить выгрузку данных пользователя", + "UserData_FileSystemPath": "Системный путь (экспортированные файлы)", + "UserData_FileSystemZipPath": "Системный путь (сжатый файл)", "UserData_ProcessingFrequency": "Частота обработки (минуты)", "UserData_MessageLimitPerRequest": "Предел сообщения на запрос", "UserDataDownload_EmailSubject": "Ваш файл данных готов к загрузке", - "UserDataDownload_EmailBody": "Теперь ваш файл данных готов к загрузке. Нажмите здесь, чтобы загрузить его.", + "UserDataDownload_EmailBody": "Теперь ваш файл данных готов к загрузке. Нажмите здесь, чтобы загрузить его.", "UserDataDownload_Requested": "Загрузить файл", - "UserDataDownload_Requested_Text": "Будет создан ваш файл данных. Ссылка на скачивание будет отправлена ​​на ваш адрес электронной почты, когда будет готова.", - "UserDataDownload_RequestExisted_Text": "Файл данных уже создан. Ссылка на скачивание будет отправлена ​​на ваш адрес электронной почты, когда будет готова.", - "UserDataDownload_CompletedRequestExisted_Text": "Файл данных уже сгенерирован. Проверьте свою учетную запись электронной почты для ссылки для загрузки.", + "UserDataDownload_Requested_Text": "Будет создан файл с вашими данными. Ссылка на скачивание будет отправлена на ваш адрес электронной почты, когда будет готова.", + "UserDataDownload_RequestExisted_Text": "Файл с вашими данными находится в процессе создания. Ссылка на скачивание будет отправлена на ваш адрес электронной почты, когда будет готова.", + "UserDataDownload_CompletedRequestExisted_Text": "Файл с вашими данными уже создан. Проверьте свою учетную запись электронной почты для получения ссылки на скачивание.", "Username": "Логин", "Username_and_message_must_not_be_empty": "Логин и сообщение не должны быть пустыми", "Username_cant_be_empty": "Логин не может быть пустым", @@ -2238,8 +2238,8 @@ "view-full-other-user-info_description": "Разрешение на просмотр полных профилей других пользователей, включая дату создания аккаунта, последнего входа и т. д.", "view-history": "Просматривать историю", "view-history_description": "Разрешение на просмотр истории канала", - "view-join-code": "Посмотреть код", - "view-join-code_description": "Разрешение на просмотр кода присоединения канала", + "view-join-code": "Просмотр кода присоединения", + "view-join-code_description": "Разрешение на просмотр кода присоединения к каналу", "view-joined-room": "Просматривать чаты, к которым присоединился", "view-joined-room_description": "Разрешение на просмотр чатов, к которым сейчас присоединён", "view-l-room": "Просматривать LiveChat комнаты", @@ -2281,10 +2281,10 @@ "We_have_sent_registration_email": "Чтобы подтвердить вашу регистрацию, мы отправили вам электронное сообщение. Пожалуйста, следуйте инструкциям в этом сообщении. Если вы не получили электронное сообщение, попробуйте ещё раз позже.", "Webhook_URL": "URL Webhook", "Webhooks": "Webhooks", - "WebRTC_direct_audio_call_from_%s": "Прямой звуковой вызов из% s", - "WebRTC_direct_video_call_from_%s": "Прямой видеозвонок из% s", - "WebRTC_group_audio_call_from_%s": "Групповой звуковой вызов из% s", - "WebRTC_group_video_call_from_%s": "Групповой видеозвонок из% s", + "WebRTC_direct_audio_call_from_%s": "Входящий аудио вызов от %s", + "WebRTC_direct_video_call_from_%s": "Входящий видеозвонок от %s", + "WebRTC_group_audio_call_from_%s": "Групповой аудио вызов от %s", + "WebRTC_group_video_call_from_%s": "Групповой видеозвонок от %s", "WebRTC_monitor_call_from_%s": "Мониторинг вызова из% s", "WebRTC_Enable_Channel": "Включить для каналов", "WebRTC_Enable_Direct": "Включить для личных сообщений", @@ -2296,7 +2296,7 @@ "Welcome": "Добро пожаловать, %s.", "Welcome_to_the": "Добро пожаловать в", "Why_do_you_want_to_report_question_mark": "Почему вы хотите сообщить?", - "will_be_able_to": "в состоянии", + "will_be_able_to": "сможет", "Would_you_like_to_return_the_inquiry": "Вы хотите вернуть запрос?", "Yes": "Да", "Yes_archive_it": "Да, архивировать!", @@ -2313,7 +2313,7 @@ "You_are_logged_in_as": "Вы вошли как", "You_are_not_authorized_to_view_this_page": "Недостаточно прав для просмотра страницы.", "You_can_change_a_different_avatar_too": "Вы можете заменить аватар, используемый в интеграции.", - "You_can_search_using_RegExp_eg": "Искать можно используя RegExp, например: /^text$/i", + "You_can_search_using_RegExp_eg": "Для поиска вы можете использовать RegExp, например: /^text$/i", "You_can_use_an_emoji_as_avatar": "Вы также можете использовать эмодзи в качестве аватара.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Вы можете использовать webhooks, чтобы легко Livechat с вашей CRM.", "You_cant_leave_a_livechat_room_Please_use_the_close_button": "Вы не можете покинуть Livechat комнату. Пожалуйста, используйте кнопку закрыть.", @@ -2321,7 +2321,7 @@ "You_have_n_codes_remaining": "У вас__number__ кодов осталось.", "You_have_not_verified_your_email": "Вы не подтвердили ваш адрес электронной почты.", "You_have_successfully_unsubscribed": "Вы успешно отписаны от нашей почтовой рассылки.", - "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "Сначала вы должны установить маркер API, чтобы использовать интеграцию.", + "You_have_to_set_an_API_token_first_in_order_to_use_the_integration": "Сначала вы должны настроить API токен, чтобы использовать интеграцию.", "You_must_join_to_view_messages_in_this_channel": "Вы должны присоединиться, чтобы просматривать сообщения на этом канале", "You_need_confirm_email": "Необходимо подтвердить ваш адрес электронной почты для входа!", "You_need_install_an_extension_to_allow_screen_sharing": "Для демонстрации экрана вам необходимо установить расширение", diff --git a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json index 17f97cf4983b..77523d1578c6 100644 --- a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json +++ b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json @@ -1,161 +1,161 @@ { - "#channel": "# kanál", + "#channel": "#kanál", "0_Errors_Only": "0 - Len chyby", "1_Errors_and_Information": "1 - Chyby a informácie", "2_Erros_Information_and_Debug": "2 - Chyby, informácie a ladenie", - "403": "zakázaný", + "403": "Zakázané", "500": "Interná chyba servera", - "@username": "@ užívateľ", - "@username_message": "@ username ", - "__username__is_no_longer__role__defined_by__user_by_": "__username__ už __role__ od __user_by__", - "__username__was_set__role__by__user_by_": "__username__ bol nastavený __role__ podľa __user_by__", + "@username": "@používateľ", + "@username_message": "@používateľ ", + "__username__is_no_longer__role__defined_by__user_by_": "používateľovi __username__ bola zrušená funkcia __role__ používateľom __user_by__", + "__username__was_set__role__by__user_by_": "používateľovi __username__ bola nastavená funkcia __role__ používateľom __user_by__", "Accept": "Akceptovať", - "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Akceptujte prichádzajúce žiadosti o livechat, aj keď nie sú agenti online", - "Accept_with_no_online_agents": "Prijať bez agentov online", - "access-mailer": "Prístup k obrazovke Mailer", + "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Akceptujte prichádzajúce žiadosti o živú diskusiu, aj keď nie sú agenti online", + "Accept_with_no_online_agents": "Prijať aj bez online agentov", + "access-mailer": "Prístup k obrazovke mailového klienta", "access-mailer_description": "Povolenie na posielanie hromadného e-mailu všetkým používateľom.", - "access-permissions": "Obrazovka povolenia prístupu", - "access-permissions_description": "Upravte povolenia pre rôzne úlohy.", - "Access_not_authorized": "Prístup nie je povolený", - "Access_Token_URL": "Prístupová adresa Token", + "access-permissions": "Obrazovka povoľovania prístupov", + "access-permissions_description": "Upravte povolenia pre rôzne funkcie.", + "Access_not_authorized": "Prístup nie je schválený", + "Access_Token_URL": "Prístupová URL adresa Známky", "Accessing_permissions": "Prístup k povoleniam", - "Account_SID": "Account SID", - "Accounts": "účty", + "Account_SID": "SID konta", + "Accounts": "Účty", "Accounts_AllowAnonymousRead": "Povoliť anonymné čítanie", "Accounts_AllowAnonymousWrite": "Povoliť anonymný zápis", "Accounts_AllowDeleteOwnAccount": "Povoliť používateľom vymazať vlastný účet", "Accounts_AllowedDomainsList": "Zoznam povolených domén", - "Accounts_AllowedDomainsList_Description": "Zoznam povolených domén oddelený čiarkami", + "Accounts_AllowedDomainsList_Description": "Čiarkami oddelený zoznam povolených domén", "Accounts_AllowEmailChange": "Povoliť zmenu e-mailu", "Accounts_AllowPasswordChange": "Povoliť zmenu hesla", - "Accounts_AllowUserAvatarChange": "Povoliť zmenu používateľského avatara", + "Accounts_AllowUserAvatarChange": "Povoliť zmenu profilového obrázku", "Accounts_AllowRealNameChange": "Povoliť zmenu mena", "Accounts_AllowUsernameChange": "Povoliť zmenu používateľského mena", - "Accounts_AllowUserProfileChange": "Povoliť zmenu profilu používateľa", - "Accounts_AvatarResize": "Zmena veľkosti avatarov", - "Accounts_AvatarSize": "Veľkosť obrázka", + "Accounts_AllowUserProfileChange": "Povoliť zmenu používateľského profilu ", + "Accounts_AvatarResize": "Zmena veľkosti profilových obrázkov", + "Accounts_AvatarSize": "Veľkosť profilového obrázka", "Accounts_BlockedDomainsList": "Zoznam blokovaných domén", - "Accounts_BlockedDomainsList_Description": "Zoznam blokovaných domén oddelený čiarkami", + "Accounts_BlockedDomainsList_Description": "Čiarkami oddelený zoznam blokovaných domén", "Accounts_BlockedUsernameList": "Zoznam blokovaných používateľov", - "Accounts_BlockedUsernameList_Description": "Zoznam blokovaných používateľských mien oddelených čiarkou (nepodstatné pre malé a veľké písmená)", - "Accounts_CustomFields_Description": "Mala by byť platná JSON, kde sú kľúče názvy polí obsahujúce slovník nastavenia polí. Príklad:
{\n\"role\": {\n\"typ\": \"vyberte\",\n\"defaultValue\": \"študent\",\n\"možnosti\": [\"učiteľ\", \"študent\"],\n\"povinné\": true,\n\"modifyRecordField\": {\n\"pole\": true,\n\"pole\": \"role\"\n}\n},\n\"twitter\": {\n\"typ\": \"text\",\n\"povinné\": true,\n\"minLength\": 2,\n\"maxLength\": 10\n}\n}", - "Accounts_CustomFieldsToShowInUserInfo": "Vlastné polia sa zobrazia v informáciách o používateľovi", - "Accounts_DefaultUsernamePrefixSuggestion": "Predvolené predpona pre užívateľské meno", + "Accounts_BlockedUsernameList_Description": "Čiarkami oddelený zoznam blokovaných používateľských mien (bez rozoznávania malých a veľkých písmen)", + "Accounts_CustomFields_Description": "Malo by ísť o platný JSON, kde kľúčami sú názvy polí obsahujúce slovník nastavenia polí. \nPríklad:
{\n\"role\": {\n  \"type\": \"select\",\n  \"defaultValue\": \"student\",\n  \"options\": [\"teacher\", \"student\"],\n  \"required\": true,\n  \"modifyRecordField\": {\n   \"array\": true,\n   \"field\": \"roles\"\n  }\n },\n \"twitter\": {\n  \"type\": \"text\",\n  \"required\": true,\n  \"minLength\": 2,\n  \"maxLength\": 10\n }\n}", + "Accounts_CustomFieldsToShowInUserInfo": "Vlastné polia na zobrazenie v informáciách o používateľovi", + "Accounts_DefaultUsernamePrefixSuggestion": "Predvolený prefix pred používateľským menom", "Accounts_Default_User_Preferences": "Predvolené používateľské nastavenia", - "Accounts_Default_User_Preferences_audioNotifications": "Zvukové upozornenia Predvolené upozornenie", - "Accounts_Default_User_Preferences_desktopNotifications": "Predvolená upozornenie na pracovnú plochu", + "Accounts_Default_User_Preferences_audioNotifications": "Predvolené zvukové upozornenie ", + "Accounts_Default_User_Preferences_desktopNotifications": "Predvolené upozornenie na pracovnej ploche", "Accounts_Default_User_Preferences_mobileNotifications": "Upozornenie pre mobilné upozornenia", "Accounts_Default_User_Preferences_not_available": "Nepodarilo sa načítať predvoľby používateľa, pretože ešte neboli používateľom nastavené", "Accounts_denyUnverifiedEmail": "Odmietnuť neoverený e-mail", "Accounts_EmailVerification": "Overenie e-mailu", "Accounts_EmailVerification_Description": "Uistite sa, že máte správne nastavenia SMTP na používanie tejto funkcie", - "Accounts_Email_Approved": "[name]

Váš účet bol schválený.

", - "Accounts_Email_Activated": "[name]

Váš účet bol aktivovaný.

", - "Accounts_Email_Deactivated": "[name]

Váš účet bol deaktivovaný.

", - "Accounts_Email_Approved_Subject": "Účet bol schválený", + "Accounts_Email_Approved": "[name]

Váš účet bol schválený.

", + "Accounts_Email_Activated": "[name]

Váš účet bol aktivovaný.

", + "Accounts_Email_Deactivated": "[name]

Váš účet bol deaktivovaný.

", + "Accounts_Email_Approved_Subject": "Účet je schválený", "Accounts_Email_Activated_Subject": "Účet je aktivovaný", - "Accounts_Email_Deactivated_Subject": "Účet bol deaktivovaný", - "Accounts_Enrollment_Email": "Prihlasovací e-mail", - "Accounts_Enrollment_Email_Default": "

Vitajte na

[SITE_NAME]

Choď na [SITE_URL]a vyskúšajte najlepšie riešenie pre chat s otvoreným zdrojom, ktoré je k dispozícii dnes!

", - "Accounts_Enrollment_Email_Description": "Môžete použiť nasledujúce zástupné symboly:
  • [meno], [fname], [lname] pre celé meno používateľa, krstné meno alebo priezvisko.
  • [email] pre e-mail používateľa.
  • [Site_Name] a [Site_URL] pre názov aplikácie a adresu URL.
", + "Accounts_Email_Deactivated_Subject": "Účet je deaktivovaný", + "Accounts_Enrollment_Email": "Registračný e-mail", + "Accounts_Enrollment_Email_Default": "

Vitajte na lokalite

[SITE_NAME]

Choďte na adresu [SITE_URL]a vyskúšajte najlepšie diskusné open source riešenie, aké je dnes k dispozícii!

", + "Accounts_Enrollment_Email_Description": "Môžete použiť nasledujúce zástupné symboly:
  • [name], [fname], [lname] pre celé meno používateľa, krstné meno alebo priezvisko.
  • [email] pre e-mail používateľa.
  • [Site_Name] a [Site_URL] pre názov aplikácie a adresu URL.
", "Accounts_Enrollment_Email_Subject_Default": "Vitajte na lokalite [Site_Name]", - "Accounts_Admin_Email_Approval_Needed_Default": "

Používateľ [name] ([email])bol zaregistrovaný.

Ak chcete túto položku aktivovať alebo odstrániť, začiarknite políčko Administrácia ->Používatelia.

", - "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

Používateľ [name] ([email])bol zaregistrovaný.

Dôvod: [dôvod]

Začiarknite políčko \"Administrácia ->

", - "Accounts_Admin_Email_Approval_Needed_Subject_Default": "Registrovaný nový používateľ a schválenie potrebuje", - "Accounts_ForgetUserSessionOnWindowClose": "Zabudnite používateľské relácie na zatvorení okna", - "Accounts_Iframe_api_method": "Metóda Api", + "Accounts_Admin_Email_Approval_Needed_Default": "

Používateľ [name] ([email])bol zaregistrovaný.

Ak ho chcete aktivovať alebo odstrániť, choďte do menu \"Administrácia ->Používatelia\".

", + "Accounts_Admin_Email_Approval_Needed_With_Reason_Default": "

Používateľ [name] ([email])bol zaregistrovaný.

Dôvod: [dôvod]

Ak ho chcete aktivovať alebo odstrániť, choďte do menu \"Administrácia ->Používatelia\".

", + "Accounts_Admin_Email_Approval_Needed_Subject_Default": "Bol zaregistrovaný nový používateľ a potrebuje schválenie", + "Accounts_ForgetUserSessionOnWindowClose": "Zabudnúť používateľskú reláciu pri zatvorení okna", + "Accounts_Iframe_api_method": "Metóda API", "Accounts_Iframe_api_url": "Adresa URL rozhrania API", - "Accounts_iframe_enabled": "povolené", + "Accounts_iframe_enabled": "Povolené", "Accounts_iframe_url": "Adresa URL rámca", - "Accounts_LoginExpiration": "Platnosť prihlásenia v dňoch", - "Accounts_ManuallyApproveNewUsers": "Ručne schvaľujte nových používateľov", - "Accounts_OAuth_Custom_Authorize_Path": "Povolenie cesty", - "Accounts_OAuth_Custom_Button_Color": "Tlačidlo Farba", + "Accounts_LoginExpiration": "Dĺžka platnosti prihlásenia v dňoch", + "Accounts_ManuallyApproveNewUsers": "Ručne schváľte nových používateľov", + "Accounts_OAuth_Custom_Authorize_Path": "Povoliť cestu", + "Accounts_OAuth_Custom_Button_Color": "Farba tlačidla", "Accounts_OAuth_Custom_Button_Label_Color": "Farba textu tlačidla", "Accounts_OAuth_Custom_Button_Label_Text": "Text tlačidla", - "Accounts_OAuth_Custom_Enable": "umožniť", - "Accounts_OAuth_Custom_id": "id", + "Accounts_OAuth_Custom_Enable": "Povoliť", + "Accounts_OAuth_Custom_id": "ID", "Accounts_OAuth_Custom_Identity_Path": "Cesta k identite", "Accounts_OAuth_Custom_Login_Style": "Prihlasovací štýl", "Accounts_OAuth_Custom_Merge_Users": "Zlúčiť používateľov", "Accounts_OAuth_Custom_Scope": "Rozsah", - "Accounts_OAuth_Custom_Secret": "tajomstvo", - "Accounts_OAuth_Custom_Token_Path": "Token cesta", - "Accounts_OAuth_Custom_Token_Sent_Via": "Token odoslaný cez", - "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Identifikátor Token odoslaný cez", - "Accounts_OAuth_Custom_Username_Field": "Pole užívateľského mena", - "Accounts_OAuth_Drupal": "Drupal Login Enabled", - "Accounts_OAuth_Drupal_callback_url": "URI presmerovania Drupal oAuth2", - "Accounts_OAuth_Drupal_id": "ID klienta Drupal oAuth2", - "Accounts_OAuth_Drupal_secret": "Drupal oAuth2 Client Secret", - "Accounts_OAuth_Facebook": "Facebook prihlásenie", - "Accounts_OAuth_Facebook_callback_url": "Adresa URL spätného volania Facebook", - "Accounts_OAuth_Facebook_id": "ID aplikácie Facebook", - "Accounts_OAuth_Facebook_secret": "Facebook Secret", - "Accounts_OAuth_Github": "Povolená možnosť OAuth", - "Accounts_OAuth_Github_callback_url": "Adresa URL spätného volania Github", - "Accounts_OAuth_GitHub_Enterprise": "Povolená možnosť OAuth", - "Accounts_OAuth_GitHub_Enterprise_callback_url": "Adresa URL služby GitHub Enterprise Callback", + "Accounts_OAuth_Custom_Secret": "Tajnosť", + "Accounts_OAuth_Custom_Token_Path": "Cesta k Známke", + "Accounts_OAuth_Custom_Token_Sent_Via": "Známka odoslaná cez", + "Accounts_OAuth_Custom_Identity_Token_Sent_Via": "Známka identity odoslaná cez", + "Accounts_OAuth_Custom_Username_Field": "Pole používateľského mena", + "Accounts_OAuth_Drupal": "Prihlásenie k službe Drupal je povolené", + "Accounts_OAuth_Drupal_callback_url": "Adresa URI presmerovania k službe Drupal oAuth2", + "Accounts_OAuth_Drupal_id": "ID klienta služby Drupal oAuth2", + "Accounts_OAuth_Drupal_secret": "Klientska Tajnosť služby Drupal oAuth2", + "Accounts_OAuth_Facebook": "Prihlásenie k službe Facebook", + "Accounts_OAuth_Facebook_callback_url": "Adresa URL spätného volania v službe Facebook", + "Accounts_OAuth_Facebook_id": "ID aplikácie služby Facebook", + "Accounts_OAuth_Facebook_secret": "Facebook Tajnosť", + "Accounts_OAuth_Github": "Služba OAuth je povolená", + "Accounts_OAuth_Github_callback_url": "Adresa URL spätného volania v službe Github", + "Accounts_OAuth_GitHub_Enterprise": "Služba OAuth je povolená", + "Accounts_OAuth_GitHub_Enterprise_callback_url": "Adresa URL spätného volania v službe GitHub Enterprise", "Accounts_OAuth_GitHub_Enterprise_id": "ID klienta", - "Accounts_OAuth_GitHub_Enterprise_secret": "Klientské tajomstvo", + "Accounts_OAuth_GitHub_Enterprise_secret": "Klientska Tajnosť", "Accounts_OAuth_Github_id": "ID klienta", - "Accounts_OAuth_Github_secret": "Klientské tajomstvo", - "Accounts_OAuth_Gitlab": "Povolená možnosť OAuth", - "Accounts_OAuth_Gitlab_callback_url": "GitLab Callback URL", - "Accounts_OAuth_Gitlab_id": "Identifikátor GitLab", - "Accounts_OAuth_Gitlab_secret": "Klientské tajomstvo", - "Accounts_OAuth_Google": "Prihlásenie Google", - "Accounts_OAuth_Google_callback_url": "Adresa URL spätného volania Google", - "Accounts_OAuth_Google_id": "Id Google", - "Accounts_OAuth_Google_secret": "Google Secret", + "Accounts_OAuth_Github_secret": "Klientska Tajnosť", + "Accounts_OAuth_Gitlab": "Služba OAuth je povolená", + "Accounts_OAuth_Gitlab_callback_url": "Adresa URL spätného volania v službe Github", + "Accounts_OAuth_Gitlab_id": "ID služby GitLab", + "Accounts_OAuth_Gitlab_secret": "Klientska Tajnosť", + "Accounts_OAuth_Google": "Prihlásenie do služby Google", + "Accounts_OAuth_Google_callback_url": "Adresa URL spätného volania v službe Google", + "Accounts_OAuth_Google_id": "ID služby Google", + "Accounts_OAuth_Google_secret": "Google Tajnosť", "Accounts_OAuth_Linkedin": "Prihlásenie do služby LinkedIn", "Accounts_OAuth_Linkedin_callback_url": "Adresa URL pre spätné volanie v službe Linkedin", - "Accounts_OAuth_Linkedin_id": "Identifikátor LinkedIn", - "Accounts_OAuth_Linkedin_secret": "LinkedIn Secret", - "Accounts_OAuth_Meteor": "Meteor Prihlásenie", - "Accounts_OAuth_Meteor_callback_url": "Meteor Callback URL", - "Accounts_OAuth_Meteor_id": "Meteor Id", - "Accounts_OAuth_Meteor_secret": "Meteor Secret", - "Accounts_OAuth_Tokenpass": "Prihlásenie Tokenpass", - "Accounts_OAuth_Tokenpass_callback_url": "Adresa URL spätného volania Tokenpass", - "Accounts_OAuth_Tokenpass_id": "Tokenpass Id", - "Accounts_OAuth_Tokenpass_secret": "Tokenpass Secret", - "Accounts_OAuth_Proxy_host": "Proxy Host", + "Accounts_OAuth_Linkedin_id": "ID služby LinkedIn", + "Accounts_OAuth_Linkedin_secret": "LinkedIn Tajnosť", + "Accounts_OAuth_Meteor": "Prihlásenie do služby Meteor", + "Accounts_OAuth_Meteor_callback_url": "Adresa URL pre spätné volanie v službe Meteor", + "Accounts_OAuth_Meteor_id": "ID služby Meteor", + "Accounts_OAuth_Meteor_secret": "Meteor Tajnosť", + "Accounts_OAuth_Tokenpass": "Prihlásenie do služby Tokenpass", + "Accounts_OAuth_Tokenpass_callback_url": "Adresa URL spätného volania služby Tokenpass", + "Accounts_OAuth_Tokenpass_id": "ID služby Tokenpass", + "Accounts_OAuth_Tokenpass_secret": "Tokenpass Tajnosť", + "Accounts_OAuth_Proxy_host": "Hostiteľ proxy", "Accounts_OAuth_Proxy_services": "Služby proxy", "Accounts_OAuth_Twitter": "Prihlásenie do služby Twitter", "Accounts_OAuth_Twitter_callback_url": "Adresa URL spätného volania v službe Twitter", - "Accounts_OAuth_Twitter_id": "ID č. Twitteru", - "Accounts_OAuth_Twitter_secret": "Twitter Secret", - "Accounts_OAuth_Wordpress": "Prihlásenie do systému WordPress", - "Accounts_OAuth_Wordpress_callback_url": "Adresa URL spätného volania WordPress", - "Accounts_OAuth_Wordpress_id": "WordPress Id", - "Accounts_OAuth_Wordpress_secret": "WordPress Secret", + "Accounts_OAuth_Twitter_id": "ID služby Twitter", + "Accounts_OAuth_Twitter_secret": "Twitter Tajnosť", + "Accounts_OAuth_Wordpress": "Prihlásenie do služby WordPress", + "Accounts_OAuth_Wordpress_callback_url": "Adresa URL spätného volania v službe WordPress", + "Accounts_OAuth_Wordpress_id": "ID služby WordPress", + "Accounts_OAuth_Wordpress_secret": "WordPress Tajnosť", "Accounts_PasswordReset": "Resetovanie hesla", - "Accounts_Registration_AuthenticationServices_Default_Roles": "Predvolené úlohy pre služby overovania", - "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Predvolené roly (oddelené čiarkami) budú používané pri registrácii prostredníctvom autentifikačných služieb", - "Accounts_Registration_AuthenticationServices_Enabled": "Registrácia s autentizačnými službami", + "Accounts_Registration_AuthenticationServices_Default_Roles": "Predvolené funkcie pre služby overovania", + "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Predvolené používateľské funkcie (oddelené čiarkami) budú používané pri registrácii prostredníctvom autentifikačných služieb", + "Accounts_Registration_AuthenticationServices_Enabled": "Registrácia s autentifikačnými službami", "Accounts_RegistrationForm": "Registračný formulár", - "Accounts_RegistrationForm_Disabled": "invalidný", - "Accounts_RegistrationForm_LinkReplacementText": "Formulár na nahrávanie odkazových formulárov", - "Accounts_RegistrationForm_Public": "verejnosť", + "Accounts_RegistrationForm_Disabled": "Nepovolený", + "Accounts_RegistrationForm_LinkReplacementText": "Text registračného formuláru pre zmenu odkazu", + "Accounts_RegistrationForm_Public": "Verejný", "Accounts_RegistrationForm_Secret_URL": "Tajná adresa URL", - "Accounts_RegistrationForm_SecretURL": "Tajná webová adresa registračného formulára", + "Accounts_RegistrationForm_SecretURL": "Tajná adresa URL registračného formulára", "Accounts_RegistrationForm_SecretURL_Description": "Musíte uviesť náhodný reťazec, ktorý sa pridá k vašej registračnej adrese URL. Príklad: https://open.rocket.chat/register/[secret_hash]", "Accounts_RequireNameForSignUp": "Vyžadovať meno pre registráciu", "Accounts_RequirePasswordConfirmation": "Vyžadovať potvrdenie hesla", "Accounts_SearchFields": "Polia, ktoré je potrebné zvážiť vo vyhľadávaní", - "Accounts_SetDefaultAvatar": "Nastaviť predvolený avatar", - "Accounts_SetDefaultAvatar_Description": "Snaží sa určiť predvolený avatar na základe účtu OAuth alebo Gravatar", - "Accounts_ShowFormLogin": "Zobraziť prihlásenie založené na formulároch", + "Accounts_SetDefaultAvatar": "Nastaviť predvolený profilový obrázok", + "Accounts_SetDefaultAvatar_Description": "Snaží sa určiť predvolený profilový obrázok na základe účtu OAuth alebo Gravatar", + "Accounts_ShowFormLogin": "Zobraziť prednastavený formulár prihlásenia", "Accounts_TwoFactorAuthentication_MaxDelta": "Maximálna Delta", - "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Maximálna Delta určuje, koľko žetónov je platných v danom čase. Tokeny sa generujú každých 30 sekúnd a platia pre (30 * maximálne Delta) sekúnd.
Príklad: Ak je maximálna Delta nastavená na 10, každý token môže byť použitý až 300 sekúnd pred alebo po jeho časovej pečiatke. Je to užitočné, keď nie sú správne synchronizované hodiny klienta so serverom.", + "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Maximálna Delta určuje, koľko Známok je platných v danom čase. Známky sa generujú každých 30 sekúnd a platia pre (30 * maximálna Delta) sekúnd.
Príklad: Ak je maximálna Delta nastavená na 10, každá Známka môže byť použitá až 300 sekúnd pred alebo po jeho časovej pečiatke. Je to užitočné, keď nie sú správne synchronizované hodiny klienta so serverom.", "Accounts_UseDefaultBlockedDomainsList": "Použiť predvolený zoznam blokovaných domén", - "Accounts_UseDNSDomainCheck": "Použite Kontrola domény DNS", - "Accounts_UserAddedEmail_Default": "

Vitajte na

[SITE_NAME]

Choď na [SITE_URL]a skúste to najlepšie open source chatu riešenia sú dnes k dispozícii!

Môžete sa prihlásiť pomocou e-mailu: [email] a heslo: [heslo]. Možno vás bude musieť zmeniť po prvom prihlásení.", - "Accounts_UserAddedEmail_Description": "Môžete použiť nasledujúce zástupné symboly:

  • [meno], [fname], [lname] pre celé meno používateľa, krstné meno alebo priezvisko.
  • [email] pre e-mail používateľa.
  • [heslo] pre heslo používateľa.
  • [Site_Name] a [Site_URL] pre názov aplikácie a adresu URL.
", - "Accounts_UserAddedEmailSubject_Default": "Boli ste pridané do stránky [Site_Name]", + "Accounts_UseDNSDomainCheck": "Použiť kontrolu domény DNS", + "Accounts_UserAddedEmail_Default": "

Vitajte na lokalite

[SITE_NAME]

Choďte na adresu [SITE_URL]a vyskúšajte najlepšie diskusné open source riešenie, aké je dnes k dispozícii!

Môžete sa prihlásiť pomocou e-mailu: [email] a hesla: [heslo]. Možno bude potrebné toto heslo zmeniť po prvom prihlásení.", + "Accounts_UserAddedEmail_Description": "Môžete použiť nasledujúce zástupné symboly:

  • [meno], [fname], [lname] pre celé meno používateľa, krstné meno alebo priezvisko.
  • [email] pre e-mail používateľa.
  • [password] pre heslo používateľa.
  • [Site_Name] a [Site_URL] pre názov aplikácie a adresu URL.
", + "Accounts_UserAddedEmailSubject_Default": "Boli ste pridaný na lokalitu [Site_Name]", "Activate": "Aktivovať", - "Activity": "aktivita", + "Activity": "Aktivita", "Add": "Pridať", "add-oauth-service": "Pridať službu Oauth", "add-oauth-service_description": "Povolenie na pridanie novej služby Oauth", @@ -166,42 +166,44 @@ "add-user-to-any-p-room_description": "Povolenie pridať používateľa do ľubovoľného súkromného kanála", "add-user-to-joined-room": "Pridať používateľa do akéhokoľvek pripojeného kanála", "add-user-to-joined-room_description": "Povolenie pridať používateľa do aktuálne pripojeného kanála", - "add-user_description": "Povolenie pridávať nových používateľov na server cez obrazovku používateľov", + "add-user_description": "Povolenie pridávať nových používateľov na server cez používateľskú obrazovku", "Add_agent": "Pridať agenta", "Add_custom_oauth": "Pridať vlastné oauth", "Add_Domain": "Pridať doménu", "Add_files_from": "Pridať súbory z", "Add_manager": "Pridať správcu", - "Add_Role": "Pridať úlohu", + "Add_Role": "Pridať funkciu", "Add_user": "Pridať používateľa", "Add_User": "Pridať používateľa", "Add_users": "Pridať používateľov", "Adding_OAuth_Services": "Pridávanie služieb OAuth", "Adding_permission": "Pridanie povolenia", - "Adding_user": "Pridávanie používateľa", + "Adding_user": "Pridať používateľa", "Additional_emails": "Ďalšie e-maily", "Additional_Feedback": "Ďalšia spätná väzba", - "Administration": "podávanie", + "additional_integrations_Zapier": "Hľadáte integráciu iného softvéru a aplikácií s Rocket.Chat, ale nemáte čas to manuálne zariadiť? V takom prípade odporúčame použiť Zapier, ktorý plne podporujeme. Prečítajte si viac o ňom v našej dokumentácii. https://rocket.chat/docs/administrator-guides/integrations/zapier/using-zaps/", + "additional_integrations_Bots": "Ak hľadáte spôsob, ako integrovať svojho vlastného bota, potom nehľadajte nič iné než náš adaptér Hubot. https://github.com/RocketChat/hubot-rocketchat ", + "Administration": "Administrácia", "Adult_images_are_not_allowed": "Obrázky pre dospelých nie sú povolené", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Po overení OAuth2 budú používatelia presmerovaní na túto adresu URL", - "Agent": "agent", - "Agent_added": "Pridal agent", + "Agent": "Agent", + "Agent_added": "Agent bol pridaný", "Agent_removed": "Agent bol odstránený", - "Alerts": "výstrahy", - "Alias": "prezývka", - "Alias_Format": "Alias ​​formát", - "Alias_Format_Description": "Importovanie správ z Slack pomocou aliasu; % s sa nahrádza používateľským menom používateľa. Ak je prázdny, nebude použitý žiadny alias.", - "Alias_Set": "Alias ​​Set", - "All": "všetko", + "Alerts": "Výstrahy", + "Alias": "Prezývka", + "Alias_Format": "Formát prezývky", + "Alias_Format_Description": "Importovanie správ zo služby Slack pomocou prezývky; %s sa nahrádza menom používateľa. Ak je prázdne, nebude použitý žiaden alias.", + "Alias_Set": "Nastavenie prezývky", + "All": "Všetko", "All_channels": "Všetky kanály", "All_logs": "Všetky záznamy", "All_messages": "Všetky správy", "All_users": "Všetci používatelia", - "All_added_tokens_will_be_required_by_the_user": "Všetky pridané žetóny budú vyžadované používateľom", + "All_added_tokens_will_be_required_by_the_user": "Všetky pridané Známky budú požadované používateľom", "All_users_in_the_channel_can_write_new_messages": "Všetci používatelia v kanáli môžu písať nové správy", - "Allow_Invalid_SelfSigned_Certs": "Nepovolené neplatné certifikáty s vlastným podpisom", - "Allow_Invalid_SelfSigned_Certs_Description": "Povoliť neplatné a certifikáty SSL s vlastným podpisom na overenie odkazov a ukážky.", - "Alphabetical": "abecedne", + "Allow_Invalid_SelfSigned_Certs": "Povoliť neplatné vlastnoručne podpísané certifikáty", + "Allow_Invalid_SelfSigned_Certs_Description": "Povoliť neplatné a vlastnoručne podpísané SSL certifikáty na overenie odkazov a ukážok.", + "Alphabetical": "Abecedný", "Allow_switching_departments": "Umožniť návštevníkom prepínať oddelenia", "Always_open_in_new_window": "Otvoriť vždy v novom okne", "Analytics_features_enabled": "Funkcie povolené", @@ -696,8 +698,6 @@ "Enter_to": "Zadajte do", "Error": "Chyba", "Error_404": "Chyba: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Chyba: Rocket.Chat vyžaduje oplog tailing pri spustení vo viacerých inštanciách", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Uistite sa, že váš MongoDB je v režime ReplicaSet a že premenná prostredia MONGO_OPLOG_URL je správne definovaná na aplikačnom serveri", "error-action-not-allowed": "__action__ nie je povolené", "error-application-not-found": "Aplikácia nebola nájdená", "error-archived-duplicate-name": "K dispozícii je archivovaný kanál s názvom \"__room_name__\"", diff --git a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json index d157d50ba4bc..04ac239d1c2a 100644 --- a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json +++ b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json @@ -695,8 +695,6 @@ "Enter_to": "Enter za", "Error": "Napaka", "Error_404": "Napaka: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Napaka: Rocket.Chat zahteva oplog tailing, ko teče na več primerih", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Poskrbite, da je naš MongoDB v načinu ReplicaSet in da je spremenljivka okolja MONGO_OPLOG_URL pravilno definirana na programskem strežniku", "error-action-not-allowed": "_action_ ni dovoljeno", "error-application-not-found": "Aplikacija ni bila najdena", "error-archived-duplicate-name": "Obstaja arhiviran kanal z imenom '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/sq.i18n.json b/packages/rocketchat-i18n/i18n/sq.i18n.json index 7d4fc1e290ca..d4a3831627d8 100644 --- a/packages/rocketchat-i18n/i18n/sq.i18n.json +++ b/packages/rocketchat-i18n/i18n/sq.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter për të", "Error": "gabim", "Error_404": "Error: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Gabim: Rocket.Chat kërkon oplog tailing kur kandidon në raste të shumta", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Ju lutemi sigurohuni që MongoDB juaj është në modalitetin ReplicaSet dhe vargu i mjedisit MONGO_OPLOG_URL është përcaktuar saktë në serverin e aplikacionit", "error-action-not-allowed": "__action__ nuk lejohet", "error-application-not-found": "Aplikimi nuk u gjet", "error-archived-duplicate-name": "Ka një kanal arkivuar me '__room_name__' për emrin", diff --git a/packages/rocketchat-i18n/i18n/sr.i18n.json b/packages/rocketchat-i18n/i18n/sr.i18n.json index e5c11c03986d..2397c78e9499 100644 --- a/packages/rocketchat-i18n/i18n/sr.i18n.json +++ b/packages/rocketchat-i18n/i18n/sr.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Ентер да", "Error": "грешка", "Error_404": "Грешка: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Грешка: Роцкет.Цхат захтева оплог таилинг када ради у више инстанци", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Проверите да ли је ваш МонгоДБ на режиму РеплицаСет, а варијабла окружења МОНГО_ОПЛОГ_УРЛ је исправно дефинирана на серверу апликација", "error-action-not-allowed": "__ацтион__ није дозвољено", "error-application-not-found": "Апликација није пронађена", "error-archived-duplicate-name": "Ту је архивирана канал под називом '__роом_наме__'", diff --git a/packages/rocketchat-i18n/i18n/sv.i18n.json b/packages/rocketchat-i18n/i18n/sv.i18n.json index 993e6345dd93..687ec626552d 100644 --- a/packages/rocketchat-i18n/i18n/sv.i18n.json +++ b/packages/rocketchat-i18n/i18n/sv.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Enter för att", "Error": "Fel", "Error_404": "Fel 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Fel: Rocket.Chat kräver upplogning när det körs i flera instanser", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Se till att din MongoDB är på ReplicaSet-läge och MONGO_OPLOG_URL miljövariabel definieras korrekt på applikationsservern", "error-action-not-allowed": "__action__ är inte tillåtet", "error-application-not-found": "Applikation kunde ej hittas", "error-archived-duplicate-name": "Det finns en arkiverad kanal med namnet \"__room_name__\"", @@ -1854,7 +1852,7 @@ "Showing_results": "

Visar %s resultat

", "Sidebar": "Sidebar", "Sidebar_list_mode": "Sidpanel Kanallista läge", - "Sign_in_to_start_talking": "Logga in för att börja prata", + "Sign_in_to_start_talking": "Logga in för att diskutera", "since_creation": "sedan %s", "Site_Name": "Sidnamn", "Site_Url": "webbadress", diff --git a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json index 05bbbfa32a08..7bbfbe0903c5 100644 --- a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "க்கு சேர்க்கவும்", "Error": "பிழை", "Error_404": "பிழை: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "பிழை: பல நிகழ்வுகளில் இயங்கும் போது ராக்கெட்", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "தயவுசெய்து உங்கள் மோங்கோ DB என்பது ReplicaSet முறைமை மற்றும் MONGO_OPLOG_URL சூழல் மாறி பயன்பாட்டு சேவையகத்தில் சரியாக வரையறுக்கப்பட்டுள்ளது", "error-action-not-allowed": "__action__ அனுமதி இல்லை", "error-application-not-found": "விண்ணப்ப காணவில்லை", "error-archived-duplicate-name": "பெயர் '__room_name__' கொண்டு ஒரு ஆவண சேனல் இல்லை", diff --git a/packages/rocketchat-i18n/i18n/th-TH.i18n.json b/packages/rocketchat-i18n/i18n/th-TH.i18n.json index 512195c40c14..762c32665692 100644 --- a/packages/rocketchat-i18n/i18n/th-TH.i18n.json +++ b/packages/rocketchat-i18n/i18n/th-TH.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "เข้าสู่", "Error": "ความผิดพลาด", "Error_404": "ข้อผิดพลาด: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "ข้อผิดพลาด: Rocket.Chat ต้องใช้งาน oplog tailing เมื่อทำงานในหลาย ๆ กรณี", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "โปรดตรวจสอบให้แน่ใจว่า MongoDB ของคุณอยู่ในโหมด ReplicaSet และ MONGO_OPLOG_URL ตัวแปรสภาพแวดล้อมถูกกำหนดไว้อย่างถูกต้องบนเซิร์ฟเวอร์แอ็พพลิเคชัน", "error-action-not-allowed": "__action__ ไม่ได้รับอนุญาต", "error-application-not-found": "ไม่พบแอ็พพลิเคชัน", "error-archived-duplicate-name": "มีช่องที่เก็บถาวรซึ่งมีชื่อ '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/tr.i18n.json b/packages/rocketchat-i18n/i18n/tr.i18n.json index 6ce0ec5739a1..85a4a7e6ab5f 100644 --- a/packages/rocketchat-i18n/i18n/tr.i18n.json +++ b/packages/rocketchat-i18n/i18n/tr.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "için Enter", "Error": "Hata", "Error_404": "Hata 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Hata: Rocket.Chat, birden çok örnekte çalışırken oplog tailing gerektirir", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Lütfen MongoDB'nizin ReplicaSet modunda olduğundan ve MONGO_OPLOG_URL ortam değişkeninin uygulama sunucusunda doğru tanımlandığından emin olun", "error-action-not-allowed": "__action__ izin verilmez", "error-application-not-found": "Uygulama bulunamadı", "error-archived-duplicate-name": "Adı '__room_name__' ile arşivlenmiş bir kanal var", diff --git a/packages/rocketchat-i18n/i18n/uk.i18n.json b/packages/rocketchat-i18n/i18n/uk.i18n.json index 1e9bc9486e64..f9f543fdfa64 100644 --- a/packages/rocketchat-i18n/i18n/uk.i18n.json +++ b/packages/rocketchat-i18n/i18n/uk.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "Введіть в", "Error": "помилка", "Error_404": "Помилка: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Помилка: Rocket.Chat вимагає закриття при роботі в декількох випадках", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Будь ласка, переконайтеся, що ваш MongoDB знаходиться в режимі ReplicaSet, і змінна середовища MONGO_OPLOG_URL правильно визначена на сервері додатків", "error-action-not-allowed": "__action__ не допускається", "error-application-not-found": "Додаток не знайдено", "error-archived-duplicate-name": "Там в архівний канал з ім'ям '__room_name__'", diff --git a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json index 7c7f2c7b38bc..a1dd101e6d2d 100644 --- a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json +++ b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json @@ -172,6 +172,8 @@ "Adding_user": "Thêm người dùng", "Additional_emails": "Email bổ sung", "Additional_Feedback": "Phản hồi bổ sung", + "additional_integrations_Zapier": "Có phải bạn đang tìm cách tích hợp các phần mềm và ứng dụng khác vào Rocket.Chat nhưng lại không có thời gian để tự tay thực hiện nó? Nếu đúng như thế, chúng tôi nghĩ bạn nên sử dụng một công cụ được chúng tôi hỗ trợ đó là Zapier. Bạn có thể đọc thêm về Zapier ở đây ", + "additional_integrations_Bots": "Nếu bạn đang tìm cách để tích hợp Bot của riêng bạn vậy thì bạn nên xem qua phần Hubot adapter. https://github.com/RocketChat/hubot-rocketchat", "Administration": "Quản trị", "Adult_images_are_not_allowed": "Hình ảnh người lớn không được phép", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Sau khi xác thực OAuth2, người dùng sẽ được chuyển hướng đến URL này", @@ -183,7 +185,7 @@ "Alias_Format": "Định dạng Alias", "Alias_Format_Description": "Nhập dữ liệu tin nhắn từ Slack với Alias; % s được thay thế bằng tên của người dùng. Nếu trống, không Alias nào sẽ được sử dụng.", "Alias_Set": "Đặt bí danh", - "All": "Tất cả các", + "All": "Tất cả", "All_channels": "Tất cả các kênh", "All_logs": "Tất cả nhật ký", "All_messages": "Tất cả các tin nhắn", @@ -243,13 +245,13 @@ "API_Wordpress_URL": "URL WordPress", "Apiai_Key": "Khóa Api.ai", "Apiai_Language": "Ngôn ngữ Api.ai", - "App_status_unknown": "không xác định", - "App_status_constructed": "Được xây dựng", + "App_status_unknown": "Không xác định", + "App_status_constructed": "Được khởi tạo", "App_status_initialized": "Đã khởi tạo", "App_status_auto_enabled": "Đã bật", "App_status_manually_enabled": "Đã bật", "App_status_compiler_error_disabled": "Đã tắt: Lỗi trình biên dịch", - "App_status_error_disabled": "Đã tắt: Lỗi không bắt buộc", + "App_status_error_disabled": "Đã tắt: lỗi", "App_status_manually_disabled": "Đã tắt: Theo cách thủ công", "App_status_disabled": "Đã tắt", "App_author_homepage": "trang chủ tác giả", @@ -258,7 +260,7 @@ "Application_added": "Đã thêm ứng dụng", "Application_Name": "Tên ứng dụng", "Application_updated": "Đã cập nhật ứng dụng", - "Apply": "Ứng dụng", + "Apply": "Áp dụng", "Apply_and_refresh_all_clients": "Áp dụng và làm mới tất cả các khách hàng", "Archive": "Lưu trữ", "archive-room": "Phòng lưu trữ", @@ -310,12 +312,12 @@ "Avatar_changed_successfully": "Avatar đã thay đổi thành công", "Avatar_URL": "URL Avatar", "Avatar_url_invalid_or_error": "URL cung cấp không hợp lệ hoặc không thể truy cập. Vui lòng thử lại, nhưng với một url khác.", - "away": "cách xa", - "Away": "Xa", - "away_female": "cách xa", - "Away_female": "Xa", - "away_male": "cách xa", - "Away_male": "Xa", + "away": "vắng mặt", + "Away": "Vắng mặt", + "away_female": "vắng mặt", + "Away_female": "Vắng mặt", + "away_male": "vắng mặt", + "Away_male": "Vắng mặt", "Back": "Trở lại", "Back_to_applications": "Quay lại ứng dụng", "Back_to_chat": "Quay lại trò chuyện", @@ -332,6 +334,7 @@ "Body": "Thân", "bold": "Dũng cảm", "bot_request": "Yêu cầu Bot", + "Bots": "Bots", "BotHelpers_userFields": "Trường người dùng", "BotHelpers_userFields_Description": "CSV của các trường người dùng có thể được truy cập bằng phương pháp trợ giúp bots.", "Branch": "Nhánh", @@ -374,18 +377,18 @@ "CAS_Sync_User_Data_FieldMap_Description": "Sử dụng đầu vào JSON này để xây dựng thuộc tính nội bộ (khóa) từ các thuộc tính bên ngoài (giá trị). Tên thuộc tính bên ngoài được bao gồm '%' sẽ được dịch trong chuỗi giá trị.
Ví dụ, `{\" email \":\"% email% \",\" name \":\"% firstname%,% lastname% \"}`

Bản đồ thuộc tính luôn được nội suy. Trong CAS 1.0 chỉ có sẵn thuộc tính `username`. Các thuộc tính nội bộ có sẵn là: tên người dùng, tên, email, phòng; phòng là danh sách phòng được cách nhau bằng dấu phẩy để tham gia vào việc tạo người dùng, ví dụ: {\"rooms\": \"% team%,% department%\"} sẽ tham gia vào người dùng CAS khi tạo nhóm của họ và đội.", "CAS_version": "Phiên bản CAS", "CAS_version_Description": "Chỉ sử dụng phiên bản CAS được hỗ trợ được hỗ trợ bởi dịch vụ SS SS của bạn.", - "Chatpal_No_Results": "Ko có kết quả", - "Chatpal_More": "Hơn", + "Chatpal_No_Results": "Không có kết quả", + "Chatpal_More": "Thêm", "Chatpal_Messages": "Tin nhắn", "Chatpal_Rooms": "Phòng", "Chatpal_Users": "Người dùng", - "Chatpal_Search_Results": "kết quả tìm kiếm", + "Chatpal_Search_Results": "Kết quả tìm kiếm", "Chatpal_All_Results": "Tất cả các", "Chatpal_Messages_Only": "Tin nhắn", "Chatpal_HTTP_Headers": "Http Headers", - "Chatpal_HTTP_Headers_Description": "Danh sách Tiêu đề HTTP, một tiêu đề trên mỗi dòng. Định dạng: tên: giá trị", - "Chatpal_API_Key": "Mã API", - "Chatpal_API_Key_Description": "Bạn chưa có Khóa API? Nhận một!", + "Chatpal_HTTP_Headers_Description": "Danh sách Tiêu đề HTTP, một tiêu đề trên mỗi dòng. Định dạng: tên:giá-trị", + "Chatpal_API_Key": "Khóa API", + "Chatpal_API_Key_Description": "Bạn chưa có Khóa API? Nhận tại đây!", "Chatpal_no_search_results": "Không kết quả", "Chatpal_one_search_result": "Tìm thấy 1 kết quả", "Chatpal_search_results": "Đã tìm thấy kết quả% s", @@ -398,7 +401,7 @@ "Chatpal_Backend_Description": "Chọn nếu bạn muốn sử dụng Chatpal làm Dịch vụ hoặc khi cài đặt trên trang web", "Chatpal_Suggestion_Enabled": "Đã bật đề xuất", "Chatpal_Base_URL": "Url cơ sở", - "Chatpal_Base_URL_Description": "Tìm một số mô tả cách chạy một cá thể cục bộ trên github. URL phải tuyệt đối và trỏ đến lõi trò chuyện, ví dụ: http: // localhost: 8983 / solr / chatpal.", + "Chatpal_Base_URL_Description": "Tìm một số mô tả cách chạy một local instance trên github. URL phải là tuyệt đối và trỏ đến Chatpal core, ví dụ: http: // localhost: 8983 / solr / chatpal.", "Chatpal_Main_Language": "Ngôn ngữ chính", "Chatpal_Main_Language_Description": "Ngôn ngữ được sử dụng nhiều nhất trong các cuộc trò chuyện", "Chatpal_Default_Result_Type": "Loại kết quả mặc định", @@ -408,8 +411,8 @@ "Chatpal_Terms_and_Conditions": "Các điều khoản và điều kiện", "Chatpal_TAC_read": "Tôi đã đọc các điều khoản và điều kiện", "Chatpal_create_key": "Tạo khóa", - "Chatpal_Batch_Size": "Kích thước hàng loạt chỉ mục", - "Chatpal_Timeout_Size": "Thời gian chờ của chỉ mục", + "Chatpal_Batch_Size": "Kích thước Index Batch", + "Chatpal_Timeout_Size": "Thời gian chờ của Index", "Chatpal_Window_Size": "Kích thước cửa sổ chỉ mục", "Chatpal_Batch_Size_Description": "Kích thước lô tài liệu chỉ mục (khi khởi động)", "Chatpal_Timeout_Size_Description": "Thời gian giữa 2 cửa sổ chỉ mục trong ms (khi khởi động)", @@ -421,6 +424,7 @@ "Chatpal_created_key_successfully": "Đã tạo thành công Khóa API", "Chatpal_run_search": "Tìm kiếm", "CDN_PREFIX": "Tiền CDN", + "Chatpal_Get_more_information_about_chatpal_on_our_website": "Bạn có thể xem thêm thông tin về Chatpal tại ", "Certificates_and_Keys": "Giấy chứng nhận và Khoá", "Change_Room_Type": "Thay đổi loại phòng", "Changing_email": "Thay đổi email", @@ -605,8 +609,8 @@ "Disable_Notifications": "Vô hiệu hóa thông báo", "Disable_two-factor_authentication": "Tắt xác thực hai yếu tố", "Disabled": "Đã tắt", - "Disallow_reacting": "Không cho phép Phản hồi", - "Disallow_reacting_Description": "Không cho phép phản ứng", + "Disallow_reacting": "Không cho phép biểu cảm", + "Disallow_reacting_Description": "Không cho phép biểu cảm", "Display_unread_counter": "Hiển thị số tin nhắn chưa đọc", "Display_offline_form": "Hiển thị biểu mẫu ngoại tuyến", "Displays_action_text": "Hiển thị văn bản hành động", @@ -687,8 +691,6 @@ "Enter_to": "Nhập vào", "Error": "lỗi", "Error_404": "Lỗi: 404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "Lỗi: Rocket.Chat yêu cầu oplog tailing khi chạy trong nhiều trường hợp", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "Hãy đảm bảo rằng MongoDB của bạn ở chế độ ReplicaSet và biến môi trường MONGO_OPLOG_URL được định nghĩa chính xác trên máy chủ ứng dụng", "error-action-not-allowed": "__action__ không được phép", "error-application-not-found": "Không tìm thấy ứng dụng", "error-archived-duplicate-name": "Có kênh lưu trữ có tên '__room_name__'", @@ -1105,8 +1107,8 @@ "Keyboard_Shortcuts_Keys_5": "Command(hoặc Alt) + Mũi tên phải", "Keyboard_Shortcuts_Keys_6": "Command(hoặc Alt) + Mũi tên xuống", "Keyboard_Shortcuts_Keys_7": "Shift+ Nhập", - "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "Di chuyển đến đầu tin nhắn", - "Keyboard_Shortcuts_Move_To_End_Of_Message": "Di chuyển đến cuối tin nhắn", + "Keyboard_Shortcuts_Move_To_Beginning_Of_Message": "Chuyển đến tin đầu tiên chưa đọc", + "Keyboard_Shortcuts_Move_To_End_Of_Message": "Chuyển đến tin cuối cùng chưa đọc", "Keyboard_Shortcuts_New_Line_In_Message": "Dòng mới trong phần soạn tin", "Keyboard_Shortcuts_Open_Channel_Slash_User_Search": "Mở kênh / Tìm kiếm người dùng", "Keyboard_Shortcuts_Title": "Các phím tắt bàn phím", @@ -1406,8 +1408,8 @@ "More_direct_messages": "Thêm tin nhắn trực tiếp", "More_groups": "Thêm các nhóm riêng", "More_unreads": "Thêm unreads", - "Move_beginning_message": "`% s` - Di chuyển đến đầu tin nhắn", - "Move_end_message": "`% s` - Di chuyển đến cuối tin nhắn", + "Move_beginning_message": "`% s` - Chuyển đến tin đầu tiên chưa đọc", + "Move_end_message": "`% s` - Chuyển đến tin cuối cùng chưa đọc", "Msgs": "Tin nhắn", "multi": "đa", "multi_line": "nhiều dòng", @@ -1596,7 +1598,7 @@ "Post_as": "Đăng dưới", "Post_to_Channel": "Đăng lên Kênh", "Post_to_s_as_s": "Đăng lên % slàm % s", - "Preferences": "Sở thích", + "Preferences": "Tùy chọn", "Preferences_saved": "Tuỳ chọn đã lưu", "preview-c-room": "Xem trước kênh công cộng", "preview-c-room_description": "Cho phép xem nội dung của kênh công cộng trước khi tham gia", @@ -1636,10 +1638,10 @@ "Quote": "Trích dẫn", "Random": "Ngẫu nhiên", "RDStation_Token": "RD Station Token", - "React_when_read_only": "Cho phép phản ứng", - "React_when_read_only_changed_successfully": "Cho phép phản ứng khi đọc chỉ được thay đổi thành công", - "Reacted_with": "Phản ứng với", - "Reactions": "Phản ứng", + "React_when_read_only": "Cho phép biểu cảm", + "React_when_read_only_changed_successfully": "Cho phép biểu cảm khi đọc chỉ được thay đổi thành công", + "Reacted_with": "Biểu cảm với", + "Reactions": "Biểu cảm", "Read_by": "Đọc bởi", "Read_only": "Chỉ đọc", "Read_only_changed_successfully": "Đã đọc thành công chỉ đọc", @@ -2079,7 +2081,7 @@ "UI_Unread_Counter_Style": "Kiểu truy cập chưa đọc", "UI_Use_Name_Avatar": "Sử dụng Tên đầy đủ để tạo Hình đại diện Mặc định", "UI_Use_Real_Name": "Sử dụng tên thật", - "Unarchive": "Không lưu trữ", + "Unarchive": "Hủy lưu trữ", "unarchive-room": "Phòng chưa lưu trữ", "unarchive-room_description": "Cho phép hủy bỏ các kênh", "Unblock_User": "Mở khoá người dùng", @@ -2213,7 +2215,7 @@ "Verification_Email": "Nhấp vào ở đâyđể xác minh tài khoản của bạn.", "Verification_email_sent": "Gửi email xác minh", "Verification_Email_Subject": "[Site_Name] - Xác minh tài khoản của bạn", - "Verified": "Xác minh", + "Verified": "Đã xác minh", "Verify": "Kiểm chứng", "Version": "Phiên bản", "Video_Chat_Window": "Trò chuyện Video", diff --git a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json index 3653288dfdf2..d62c7396d858 100644 --- a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "进入", "Error": "错误", "Error_404": "错误:404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "错误:Rocket.Chat在多个实例中运行时需要oplog拖尾", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "请确保您的MongoDB处于ReplicaSet模式,并且MONGO_OPLOG_URL环境变量已在应用程序服务器上正确定义", "error-action-not-allowed": "__action__是不允许的", "error-application-not-found": "应用程序未找到", "error-archived-duplicate-name": "有一个名为'__room_name__'的归档频道", diff --git a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json index e85b4b86ec97..105feea452e9 100644 --- a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "進入", "Error": "錯誤", "Error_404": "錯誤:404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "錯誤:Rocket.Chat在多個實例中運行時需要oplog拖尾", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "請確保您的MongoDB處於ReplicaSet模式,並且MONGO_OPLOG_URL環境變量已在應用程序服務器上正確定義", "error-action-not-allowed": "__action__不允許", "error-application-not-found": "找不到應用程式", "error-archived-duplicate-name": "已有一個名為「'__room_name__'」的封存中通道", diff --git a/packages/rocketchat-i18n/i18n/zh.i18n.json b/packages/rocketchat-i18n/i18n/zh.i18n.json index 8eaa2a6a24ba..2b3a314f5545 100644 --- a/packages/rocketchat-i18n/i18n/zh.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh.i18n.json @@ -696,8 +696,6 @@ "Enter_to": "进入", "Error": "错误", "Error_404": "错误:404", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances": "错误:Rocket.Chat在多个实例中运行时需要oplog拖尾", - "Error_RocketChat_requires_oplog_tailing_when_running_in_multiple_instances_details": "请确保您的MongoDB处于ReplicaSet模式,并且MONGO_OPLOG_URL环境变量已在应用程序服务器上正确定义", "error-action-not-allowed": "__action__ 不允许", "error-application-not-found": "应用程序未找到", "error-archived-duplicate-name": "有一个名为“__room_name__'的已归档频道", diff --git a/packages/rocketchat-lib/lib/callbacks.js b/packages/rocketchat-lib/lib/callbacks.js index f4f8e70865ac..a1a2fee70878 100644 --- a/packages/rocketchat-lib/lib/callbacks.js +++ b/packages/rocketchat-lib/lib/callbacks.js @@ -76,10 +76,20 @@ RocketChat.callbacks.remove = function(hookName, id) { RocketChat.callbacks.run = function(hook, item, constant) { const callbacks = RocketChat.callbacks[hook]; if (callbacks && callbacks.length) { + + let rocketchatHooksEnd; + if (Meteor.isServer) { + rocketchatHooksEnd = RocketChat.metrics.rocketchatHooks.startTimer({hook, callbacks_length: callbacks.length}); + } + let totalTime = 0; const result = _.sortBy(callbacks, function(callback) { return callback.priority || RocketChat.callbacks.priority.MEDIUM; }).reduce(function(result, callback) { + let rocketchatCallbacksEnd; + if (Meteor.isServer) { + rocketchatCallbacksEnd = RocketChat.metrics.rocketchatCallbacks.startTimer({hook, callback: callback.id}); + } let time = 0; if (RocketChat.callbacks.showTime === true || RocketChat.callbacks.showTotalTime === true) { time = Date.now(); @@ -90,6 +100,7 @@ RocketChat.callbacks.run = function(hook, item, constant) { totalTime += currentTime; if (RocketChat.callbacks.showTime === true) { if (Meteor.isServer) { + rocketchatCallbacksEnd(); RocketChat.statsTracker.timing('callbacks.time', currentTime, [`hook:${ hook }`, `callback:${ callback.id }`]); } else { let stack = callback.stack && typeof callback.stack.split === 'function' && callback.stack.split('\n'); @@ -100,6 +111,11 @@ RocketChat.callbacks.run = function(hook, item, constant) { } return (typeof callbackResult === 'undefined') ? result : callbackResult; }, item); + + if (Meteor.isServer) { + rocketchatHooksEnd(); + } + if (RocketChat.callbacks.showTotalTime === true) { if (Meteor.isServer) { RocketChat.statsTracker.timing('callbacks.totalTime', totalTime, [`hook:${ hook }`]); @@ -107,6 +123,7 @@ RocketChat.callbacks.run = function(hook, item, constant) { console.log(`${ hook }:`, totalTime); } } + return result; } else { return item; diff --git a/packages/rocketchat-lib/lib/getUserNotificationPreference.js b/packages/rocketchat-lib/lib/getUserNotificationPreference.js new file mode 100644 index 000000000000..27ae25337cc0 --- /dev/null +++ b/packages/rocketchat-lib/lib/getUserNotificationPreference.js @@ -0,0 +1,28 @@ +RocketChat.getUserNotificationPreference = function _getUserNotificationPreference(user, pref) { + if (typeof user === 'string') { + user = RocketChat.models.Users.findOneById(user); + } + + let preferenceKey; + switch (pref) { + case 'desktop': preferenceKey = 'desktopNotifications'; break; + case 'mobile': preferenceKey = 'mobileNotifications'; break; + case 'email': preferenceKey = 'emailNotificationMode'; break; + } + + if (user && user.settings && user.settings.preferences && user.settings.preferences[preferenceKey] !== 'default') { + return { + value: user.settings.preferences[preferenceKey], + origin: 'user' + }; + } + const serverValue = RocketChat.settings.get(`Accounts_Default_User_Preferences_${ preferenceKey }`); + if (serverValue) { + return { + value: serverValue, + origin: 'server' + }; + } + + return null; +}; diff --git a/packages/rocketchat-lib/lib/roomTypes/direct.js b/packages/rocketchat-lib/lib/roomTypes/direct.js index 44078e0e9190..a1e32f1a536a 100644 --- a/packages/rocketchat-lib/lib/roomTypes/direct.js +++ b/packages/rocketchat-lib/lib/roomTypes/direct.js @@ -34,14 +34,14 @@ export class DirectMessageRoomType extends RoomTypeConfig { name: identifier }; - const subscription = ChatSubscription.findOne(query); + const subscription = RocketChat.models.Subscriptions.findOne(query); if (subscription && subscription.rid) { return ChatRoom.findOne(subscription.rid); } } roomName(roomData) { - const subscription = ChatSubscription.findOne({rid: roomData._id}, {fields: {name: 1, fname: 1}}); + const subscription = RocketChat.models.Subscriptions.findOne({rid: roomData._id}, {fields: {name: 1, fname: 1}}); if (!subscription) { return ''; } @@ -55,7 +55,7 @@ export class DirectMessageRoomType extends RoomTypeConfig { secondaryRoomName(roomData) { if (RocketChat.settings.get('UI_Use_Real_Name')) { - const subscription = ChatSubscription.findOne({rid: roomData._id}, {fields: {name: 1}}); + const subscription = RocketChat.models.Subscriptions.findOne({rid: roomData._id}, {fields: {name: 1}}); return subscription && subscription.name; } } diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index 9f3ba06887f2..cfc092292f67 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -68,6 +68,7 @@ Package.onUse(function(api) { api.addFiles('lib/MessageTypes.js'); api.addFiles('lib/templateVarHandler.js'); + api.addFiles('lib/getUserNotificationPreference.js'); api.addFiles('lib/getUserPreference.js'); api.addFiles('server/lib/bugsnag.js', 'server'); @@ -112,7 +113,6 @@ Package.onUse(function(api) { api.addFiles('server/lib/notifyUsersOnMessage.js', 'server'); api.addFiles('server/lib/processDirectEmail.js', 'server'); api.addFiles('server/lib/roomTypes.js', 'server'); - api.addFiles('server/lib/sendEmailOnMessage.js', 'server'); api.addFiles('server/lib/sendNotificationsOnMessage.js', 'server'); api.addFiles('server/lib/validateEmailDomain.js', 'server'); diff --git a/packages/rocketchat-lib/rocketchat.info b/packages/rocketchat-lib/rocketchat.info index d20b3b0080fc..320582c2205a 100644 --- a/packages/rocketchat-lib/rocketchat.info +++ b/packages/rocketchat-lib/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "0.64.1" + "version": "0.64.2" } diff --git a/packages/rocketchat-lib/server/functions/createRoom.js b/packages/rocketchat-lib/server/functions/createRoom.js index 8f78788af264..d028294354b0 100644 --- a/packages/rocketchat-lib/server/functions/createRoom.js +++ b/packages/rocketchat-lib/server/functions/createRoom.js @@ -64,13 +64,14 @@ RocketChat.createRoom = function(type, name, owner, members, readOnly, extraData room = RocketChat.models.Rooms.createWithFullRoomData(room); for (const username of members) { - const member = RocketChat.models.Users.findOneByUsername(username, { fields: { username: 1 }}); + const member = RocketChat.models.Users.findOneByUsername(username, { fields: { username: 1, 'settings.preferences': 1 }}); + const isTheOwner = username === owner.username; if (!member) { continue; } - // make all room members muted by default, unless they have the post-readonly permission - if (readOnly === true && !RocketChat.authz.hasPermission(member._id, 'post-readonly')) { + // make all room members (Except the owner) muted by default, unless they have the post-readonly permission + if (readOnly === true && !RocketChat.authz.hasPermission(member._id, 'post-readonly') && !isTheOwner) { RocketChat.models.Rooms.muteUsernameByRoomId(room._id, username); } diff --git a/packages/rocketchat-lib/server/functions/notifications/audio.js b/packages/rocketchat-lib/server/functions/notifications/audio.js new file mode 100644 index 000000000000..5553e7aa96fd --- /dev/null +++ b/packages/rocketchat-lib/server/functions/notifications/audio.js @@ -0,0 +1,37 @@ +export function shouldNotifyAudio({ + disableAllMessageNotifications, + status, + audioNotifications, + hasMentionToAll, + hasMentionToHere, + isHighlighted, + hasMentionToUser, + roomType +}) { + if (disableAllMessageNotifications && audioNotifications == null) { + return false; + } + + if (status === 'busy' || audioNotifications === 'nothing') { + return false; + } + + if (!audioNotifications && RocketChat.settings.get('Accounts_Default_User_Preferences_audioNotifications') === 'all') { + return true; + } + + return roomType === 'd' || (!disableAllMessageNotifications && (hasMentionToAll || hasMentionToHere)) || isHighlighted || audioNotifications === 'all' || hasMentionToUser; +} + +export function notifyAudioUser(userId, message, room) { + RocketChat.metrics.notificationsSent.inc({ notification_type: 'audio' }); + RocketChat.Notifications.notifyUser(userId, 'audioNotification', { + payload: { + _id: message._id, + rid: message.rid, + sender: message.u, + type: room.t, + name: room.name + } + }); +} diff --git a/packages/rocketchat-lib/server/functions/notifications/desktop.js b/packages/rocketchat-lib/server/functions/notifications/desktop.js new file mode 100644 index 000000000000..bb58be4ec0ba --- /dev/null +++ b/packages/rocketchat-lib/server/functions/notifications/desktop.js @@ -0,0 +1,76 @@ +/** + * Send notification to user + * + * @param {string} userId The user to notify + * @param {object} user The sender + * @param {object} room The room send from + * @param {object} message The message object + * @param {number} duration Duration of notification + * @param {string} notificationMessage The message text to send on notification body + */ +export function notifyDesktopUser({ + userId, + user, + message, + room, + duration, + notificationMessage +}) { + const UI_Use_Real_Name = RocketChat.settings.get('UI_Use_Real_Name') === true; + + let title = ''; + let text = ''; + if (room.t === 'd') { + title = UI_Use_Real_Name ? user.name : `@${ user.username }`; + text = notificationMessage; + } else if (room.name) { + title = `#${ room.name }`; + text = `${ UI_Use_Real_Name ? user.name : user.username }: ${ notificationMessage }`; + } else { + return; + } + + RocketChat.metrics.notificationsSent.inc({ notification_type: 'desktop' }); + RocketChat.Notifications.notifyUser(userId, 'notification', { + title, + text, + duration, + payload: { + _id: message._id, + rid: message.rid, + sender: message.u, + type: room.t, + name: room.name + } + }); +} + +export function shouldNotifyDesktop({ + disableAllMessageNotifications, + status, + desktopNotifications, + hasMentionToAll, + hasMentionToHere, + isHighlighted, + hasMentionToUser, + roomType +}) { + if (disableAllMessageNotifications && desktopNotifications == null) { + return false; + } + + if (status === 'busy' || desktopNotifications === 'nothing') { + return false; + } + + if (!desktopNotifications) { + if (RocketChat.settings.get('Accounts_Default_User_Preferences_desktopNotifications') === 'all') { + return true; + } + if (RocketChat.settings.get('Accounts_Default_User_Preferences_desktopNotifications') === 'nothing') { + return false; + } + } + + return roomType === 'd' || (!disableAllMessageNotifications && (hasMentionToAll || hasMentionToHere)) || isHighlighted || desktopNotifications === 'all' || hasMentionToUser; +} diff --git a/packages/rocketchat-lib/server/functions/notifications/email.js b/packages/rocketchat-lib/server/functions/notifications/email.js new file mode 100644 index 000000000000..11531192f200 --- /dev/null +++ b/packages/rocketchat-lib/server/functions/notifications/email.js @@ -0,0 +1,178 @@ +import s from 'underscore.string'; + +let contentHeader; +RocketChat.settings.get('Email_Header', (key, value) => { + contentHeader = RocketChat.placeholders.replace(value || ''); +}); + +let contentFooter; +RocketChat.settings.get('Email_Footer', (key, value) => { + contentFooter = RocketChat.placeholders.replace(value || ''); +}); + +const divisorMessage = '
'; + +function getEmailContent({ message, user, room }) { + const lng = user && user.language || RocketChat.settings.get('language') || 'en'; + + const roomName = s.escapeHTML(`#${ RocketChat.roomTypes.getRoomName(room.t, room) }`); + const userName = s.escapeHTML(RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name || message.u.username : message.u.username); + + const header = TAPi18n.__(room.t === 'd' ? 'User_sent_a_message_to_you' : 'User_sent_a_message_on_channel', { + username: userName, + channel: roomName, + lng + }); + + if (message.msg !== '') { + let messageContent = s.escapeHTML(message.msg); + message = RocketChat.callbacks.run('renderMessage', message); + if (message.tokens && message.tokens.length > 0) { + message.tokens.forEach((token) => { + token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2'); + messageContent = messageContent.replace(token.token, token.text); + }); + } + return `${ header }

${ messageContent.replace(/\n/gm, '
') }`; + } + + if (message.file) { + const fileHeader = TAPi18n.__(room.t === 'd' ? 'User_uploaded_a_file_to_you' : 'User_uploaded_a_file_on_channel', { + username: userName, + channel: roomName, + lng + }); + + let content = `${ TAPi18n.__('Attachment_File_Uploaded') }: ${ s.escapeHTML(message.file.name) }`; + + if (message.attachments && message.attachments.length === 1 && message.attachments[0].description !== '') { + content += `

${ s.escapeHTML(message.attachments[0].description) }`; + } + + return `${ fileHeader }

${ content }`; + } + + if (message.attachments.length > 0) { + const [ attachment ] = message.attachments; + + let content = ''; + + if (attachment.title) { + content += `${ s.escapeHTML(attachment.title) }
`; + } + if (attachment.text) { + content += `${ s.escapeHTML(attachment.text) }
`; + } + + return `${ header }

${ content }`; + } + + return header; +} + +function getMessageLink(room, sub) { + const roomPath = RocketChat.roomTypes.getRouteLink(room.t, sub); + const path = Meteor.absoluteUrl(roomPath ? roomPath.replace(/^\//, '') : ''); + const style = [ + 'color: #fff;', + 'padding: 9px 12px;', + 'border-radius: 4px;', + 'background-color: #04436a;', + 'text-decoration: none;' + ].join(' '); + const message = TAPi18n.__('Offline_Link_Message'); + return `

${ message }`; +} + +export function sendEmail({ message, user, subscription, room, emailAddress, toAll }) { + let emailSubject; + const username = RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name : message.u.username; + + if (room.t === 'd') { + emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_DM_Email'), { + user: username, + room: RocketChat.roomTypes.getRoomName(room.t, room) + }); + } else if (toAll) { + emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_Mention_All_Email'), { + user: username, + room: RocketChat.roomTypes.getRoomName(room.t, room) + }); + } else { + emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_Mention_Email'), { + user: username, + room: RocketChat.roomTypes.getRoomName(room.t, room) + }); + } + const content = getEmailContent({ + message, + user, + room + }); + + const link = getMessageLink(room, subscription); + + if (RocketChat.settings.get('Direct_Reply_Enable')) { + contentFooter = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer_Direct_Reply') || ''); + } + + const email = { + to: emailAddress, + subject: emailSubject, + html: contentHeader + content + divisorMessage + link + contentFooter + }; + + // using user full-name/channel name in from address + if (room.t === 'd') { + email.from = `${ String(message.u.name).replace(/@/g, '%40').replace(/[<>,]/g, '') } <${ RocketChat.settings.get('From_Email') }>`; + } else { + email.from = `${ String(room.name).replace(/@/g, '%40').replace(/[<>,]/g, '') } <${ RocketChat.settings.get('From_Email') }>`; + } + // If direct reply enabled, email content with headers + if (RocketChat.settings.get('Direct_Reply_Enable')) { + email.headers = { + // Reply-To header with format "username+messageId@domain" + 'Reply-To': `${ RocketChat.settings.get('Direct_Reply_Username').split('@')[0].split(RocketChat.settings.get('Direct_Reply_Separator'))[0] }${ RocketChat.settings.get('Direct_Reply_Separator') }${ message._id }@${ RocketChat.settings.get('Direct_Reply_Username').split('@')[1] }` + }; + } + + Meteor.defer(() => { + RocketChat.metrics.notificationsSent.inc({ notification_type: 'email' }); + Email.send(email); + }); +} + +export function shouldNotifyEmail({ + disableAllMessageNotifications, + statusConnection, + emailNotifications, + isHighlighted, + hasMentionToUser, + hasMentionToAll, + roomType +}) { + + // use connected (don't need to send him an email) + if (statusConnection === 'online') { + return false; + } + + // user/room preference to nothing + if (emailNotifications === 'nothing') { + return false; + } + + // no user or room preference + if (emailNotifications == null) { + if (disableAllMessageNotifications) { + return false; + } + + // default server preference is disabled + if (RocketChat.settings.get('Accounts_Default_User_Preferences_emailNotificationMode') === 'nothing') { + return false; + } + } + + return roomType === 'd' || isHighlighted || emailNotifications === 'all' || hasMentionToUser || (!disableAllMessageNotifications && hasMentionToAll); +} diff --git a/packages/rocketchat-lib/server/functions/notifications/index.js b/packages/rocketchat-lib/server/functions/notifications/index.js new file mode 100644 index 000000000000..f5974f48e7fc --- /dev/null +++ b/packages/rocketchat-lib/server/functions/notifications/index.js @@ -0,0 +1,64 @@ +import s from 'underscore.string'; + +/** +* This function returns a string ready to be shown in the notification +* +* @param {object} message the message to be parsed +*/ +export function parseMessageTextPerUser(message, receiver) { + if (!message.msg && message.attachments && message.attachments[0]) { + const lng = receiver.language || RocketChat.settings.get('language') || 'en'; + + return message.attachments[0].image_type ? TAPi18n.__('User_uploaded_image', {lng}) : TAPi18n.__('User_uploaded_file', {lng}); + } + + return message; +} + +/** + * Replaces @username with full name + * + * @param {string} message The message to replace + * @param {object[]} mentions Array of mentions used to make replacements + * + * @returns {string} + */ +export function replaceMentionedUsernamesWithFullNames(message, mentions) { + if (!mentions || !mentions.length) { + return message; + } + mentions.forEach((mention) => { + if (mention.name) { + message = message.replace(new RegExp(s.escapeRegExp(`@${ mention.username }`), 'g'), mention.name); + } + }); + return message; +} + +/** + * Checks if a message contains a user highlight + * + * @param {string} message + * @param {array|undefined} highlights + * + * @returns {boolean} + */ +export function messageContainsHighlight(message, highlights) { + if (! highlights || highlights.length === 0) { return false; } + + return highlights.some(function(highlight) { + const regexp = new RegExp(s.escapeRegExp(highlight), 'i'); + return regexp.test(message.msg); + }); +} + +export function callJoinRoom(user, rid) { + return new Promise((resolve, reject) => { + Meteor.runAsUser(user._id, () => Meteor.call('joinRoom', rid, (error, result) => { + if (error) { + return reject(error); + } + return resolve(result); + })); + }); +} diff --git a/packages/rocketchat-lib/server/functions/notifications/mobile.js b/packages/rocketchat-lib/server/functions/notifications/mobile.js new file mode 100644 index 000000000000..685b17a75c6a --- /dev/null +++ b/packages/rocketchat-lib/server/functions/notifications/mobile.js @@ -0,0 +1,90 @@ +const CATEGORY_MESSAGE = 'MESSAGE'; +const CATEGORY_MESSAGE_NOREPLY = 'MESSAGE_NOREPLY'; + +let alwaysNotifyMobileBoolean; +RocketChat.settings.get('Notifications_Always_Notify_Mobile', (key, value) => { + alwaysNotifyMobileBoolean = value; +}); + +let SubscriptionRaw; +Meteor.startup(() => { + SubscriptionRaw = RocketChat.models.Subscriptions.model.rawCollection(); +}); + +async function getBadgeCount(userId) { + const [ result ] = await SubscriptionRaw.aggregate([ + { $match: { 'u._id': userId } }, + { + $group: { + _id: 'total', + total: { $sum: '$unread' } + } + } + ]).toArray(); + + const { total } = result; + return total; +} + +function canSendMessageToRoom(room, username) { + return !((room.muted || []).includes(username)); +} + +export async function sendSinglePush({ room, message, userId, receiverUsername, senderUsername, senderName, notificationMessage }) { + let username = ''; + if (RocketChat.settings.get('Push_show_username_room')) { + username = RocketChat.settings.get('UI_Use_Real_Name') === true ? senderName : senderUsername; + } + + RocketChat.PushNotification.send({ + roomId: message.rid, + payload: { + host: Meteor.absoluteUrl(), + rid: message.rid, + sender: message.u, + type: room.t, + name: room.name + }, + roomName: RocketChat.settings.get('Push_show_username_room') && room.t !== 'd' ? `#${ RocketChat.roomTypes.getRoomName(room.t, room) }` : '', + username, + message: RocketChat.settings.get('Push_show_message') ? notificationMessage : ' ', + badge: await getBadgeCount(userId), + usersTo: { + userId + }, + category: canSendMessageToRoom(room, receiverUsername) ? CATEGORY_MESSAGE : CATEGORY_MESSAGE_NOREPLY + }); +} + +export function shouldNotifyMobile({ + disableAllMessageNotifications, + mobilePushNotifications, + hasMentionToAll, + isHighlighted, + hasMentionToUser, + statusConnection, + roomType +}) { + if (disableAllMessageNotifications && mobilePushNotifications == null) { + return false; + } + + if (mobilePushNotifications === 'nothing') { + return false; + } + + if (!alwaysNotifyMobileBoolean && statusConnection === 'online') { + return false; + } + + if (!mobilePushNotifications) { + if (RocketChat.settings.get('Accounts_Default_User_Preferences_mobileNotifications') === 'all') { + return true; + } + if (RocketChat.settings.get('Accounts_Default_User_Preferences_mobileNotifications') === 'nothing') { + return false; + } + } + + return roomType === 'd' || (!disableAllMessageNotifications && hasMentionToAll) || isHighlighted || mobilePushNotifications === 'all' || hasMentionToUser; +} diff --git a/packages/rocketchat-lib/server/lib/PushNotification.js b/packages/rocketchat-lib/server/lib/PushNotification.js index 15e50c780fe0..c99976903cb9 100644 --- a/packages/rocketchat-lib/server/lib/PushNotification.js +++ b/packages/rocketchat-lib/server/lib/PushNotification.js @@ -47,6 +47,7 @@ class PushNotification { }; } + RocketChat.metrics.notificationsSent.inc({ notification_type: 'mobile' }); return Push.send(config); } } diff --git a/packages/rocketchat-lib/server/lib/debug.js b/packages/rocketchat-lib/server/lib/debug.js index 1a000e44b17a..103675dd5fb9 100644 --- a/packages/rocketchat-lib/server/lib/debug.js +++ b/packages/rocketchat-lib/server/lib/debug.js @@ -14,10 +14,13 @@ const logger = new Logger('Meteor', { const wrapMethods = function(name, originalHandler, methodsMap) { methodsMap[name] = function() { + const end = RocketChat.metrics.meteorMethods.startTimer({method: name}); const args = name === 'ufsWrite' ? Array.prototype.slice.call(arguments, 1) : arguments; logger.method(name, '-> userId:', Meteor.userId(), ', arguments: ', args); - return originalHandler.apply(this, arguments); + const result = originalHandler.apply(this, arguments); + end(); + return result; }; }; @@ -35,6 +38,13 @@ const originalMeteorPublish = Meteor.publish; Meteor.publish = function(name, func) { return originalMeteorPublish(name, function() { logger.publish(name, '-> userId:', this.userId, ', arguments: ', arguments); + const end = RocketChat.metrics.meteorSubscriptions.startTimer({subscription: name}); + + const originalReady = this.ready; + this.ready = function() { + end(); + return originalReady.apply(this, arguments); + }; return func.apply(this, arguments); }); diff --git a/packages/rocketchat-lib/server/lib/metrics.js b/packages/rocketchat-lib/server/lib/metrics.js index 43cf6590f7b2..fc50e9cb812d 100644 --- a/packages/rocketchat-lib/server/lib/metrics.js +++ b/packages/rocketchat-lib/server/lib/metrics.js @@ -1,9 +1,154 @@ import client from 'prom-client'; +import connect from 'connect'; +import http from 'http'; +import _ from 'underscore'; RocketChat.promclient = client; +client.collectDefaultMetrics(); RocketChat.metrics = {}; // one sample metrics only - a counter -RocketChat.metrics.messagesSent = new client.Counter({'name': 'message_sent', 'help': 'cumulated number of messages sent'}); +RocketChat.metrics.meteorMethods = new client.Summary({ + name: 'rocketchat_meteor_methods', + help: 'summary of meteor methods count and time', + labelNames: ['method'] +}); + +RocketChat.metrics.rocketchatCallbacks = new client.Summary({ + name: 'rocketchat_callbacks', + help: 'summary of rocketchat callbacks count and time', + labelNames: ['hook', 'callback'] +}); + +RocketChat.metrics.rocketchatHooks = new client.Summary({ + name: 'rocketchat_hooks', + help: 'summary of rocketchat hooks count and time', + labelNames: ['hook', 'callbacks_length'] +}); + +RocketChat.metrics.rocketchatRestApi = new client.Summary({ + name: 'rocketchat_rest_api', + help: 'summary of rocketchat rest api count and time', + labelNames: ['method', 'entrypoint', 'user_agent', 'status', 'version'] +}); + +RocketChat.metrics.meteorSubscriptions = new client.Summary({ + name: 'rocketchat_meteor_subscriptions', + help: 'summary of meteor subscriptions count and time', + labelNames: ['subscription'] +}); + +RocketChat.metrics.messagesSent = new client.Counter({'name': 'rocketchat_message_sent', 'help': 'cumulated number of messages sent'}); +RocketChat.metrics.notificationsSent = new client.Counter({'name': 'rocketchat_notification_sent', labelNames: ['notification_type'], 'help': 'cumulated number of notifications sent'}); + +RocketChat.metrics.ddpSessions = new client.Gauge({'name': 'rocketchat_ddp_sessions_count', 'help': 'number of open ddp sessions'}); +RocketChat.metrics.ddpAthenticatedSessions = new client.Gauge({'name': 'rocketchat_ddp_sessions_auth', 'help': 'number of authenticated open ddp sessions'}); +RocketChat.metrics.ddpConnectedUsers = new client.Gauge({'name': 'rocketchat_ddp_connected_users', 'help': 'number of unique connected users'}); + +RocketChat.metrics.version = new client.Gauge({'name': 'rocketchat_version', labelNames: ['version'], 'help': 'Rocket.Chat version'}); +RocketChat.metrics.migration = new client.Gauge({'name': 'rocketchat_migration', 'help': 'migration versoin'}); +RocketChat.metrics.instanceCount = new client.Gauge({'name': 'rocketchat_instance_count', 'help': 'instances running'}); +RocketChat.metrics.oplogEnabled = new client.Gauge({'name': 'rocketchat_oplog_enabled', labelNames: ['enabled'], 'help': 'oplog enabled'}); + +// User statistics +RocketChat.metrics.totalUsers = new client.Gauge({'name': 'rocketchat_users_total', 'help': 'total of users'}); +RocketChat.metrics.activeUsers = new client.Gauge({'name': 'rocketchat_users_active', 'help': 'total of active users'}); +RocketChat.metrics.nonActiveUsers = new client.Gauge({'name': 'rocketchat_users_non_active', 'help': 'total of non active users'}); +RocketChat.metrics.onlineUsers = new client.Gauge({'name': 'rocketchat_users_online', 'help': 'total of users online'}); +RocketChat.metrics.awayUsers = new client.Gauge({'name': 'rocketchat_users_away', 'help': 'total of users away'}); +RocketChat.metrics.offlineUsers = new client.Gauge({'name': 'rocketchat_users_offline', 'help': 'total of users offline'}); + +// Room statistics +RocketChat.metrics.totalRooms = new client.Gauge({'name': 'rocketchat_rooms_total', 'help': 'total of rooms'}); +RocketChat.metrics.totalChannels = new client.Gauge({'name': 'rocketchat_channels_total', 'help': 'total of public rooms/channels'}); +RocketChat.metrics.totalPrivateGroups = new client.Gauge({'name': 'rocketchat_private_groups_total', 'help': 'total of private rooms'}); +RocketChat.metrics.totalDirect = new client.Gauge({'name': 'rocketchat_direct_total', 'help': 'total of direct rooms'}); +RocketChat.metrics.totalLivechat = new client.Gauge({'name': 'rocketchat_livechat_total', 'help': 'total of livechat rooms'}); + +// Message statistics +RocketChat.metrics.totalMessages = new client.Gauge({'name': 'rocketchat_messages_total', 'help': 'total of messages'}); +RocketChat.metrics.totalChannelMessages = new client.Gauge({'name': 'rocketchat_channel_messages_total', 'help': 'total of messages in public rooms'}); +RocketChat.metrics.totalPrivateGroupMessages = new client.Gauge({'name': 'rocketchat_private_group_messages_total', 'help': 'total of messages in private rooms'}); +RocketChat.metrics.totalDirectMessages = new client.Gauge({'name': 'rocketchat_direct_messages_total', 'help': 'total of messages in direct rooms'}); +RocketChat.metrics.totalLivechatMessages = new client.Gauge({'name': 'rocketchat_livechat_messages_total', 'help': 'total of messages in livechat rooms'}); + +client.register.setDefaultLabels({ + uniqueId: RocketChat.settings.get('uniqueID'), + siteUrl: RocketChat.settings.get('Site_Url') +}); + +const setPrometheusData = () => { + const date = new Date(); + + client.register.setDefaultLabels({ + unique_id: RocketChat.settings.get('uniqueID'), + site_url: RocketChat.settings.get('Site_Url'), + version: RocketChat.Info.version + }); + + const sessions = Object.values(Meteor.server.sessions); + const authenticatedSessions = sessions.filter(s => s.userId); + RocketChat.metrics.ddpSessions.set(sessions.length, date); + RocketChat.metrics.ddpAthenticatedSessions.set(authenticatedSessions.length, date); + RocketChat.metrics.ddpConnectedUsers.set(_.unique(authenticatedSessions.map(s => s.userId)).length, date); + + const statistics = RocketChat.models.Statistics.findLast(); + if (!statistics) { + return; + } + + RocketChat.metrics.version.set({version: statistics.version}, 1, date); + RocketChat.metrics.migration.set(RocketChat.Migrations._getControl().version, date); + RocketChat.metrics.instanceCount.set(statistics.instanceCount, date); + RocketChat.metrics.oplogEnabled.set({enabled: statistics.oplogEnabled}, 1, date); + + // User statistics + RocketChat.metrics.totalUsers.set(statistics.totalUsers, date); + RocketChat.metrics.activeUsers.set(statistics.activeUsers, date); + RocketChat.metrics.nonActiveUsers.set(statistics.nonActiveUsers, date); + RocketChat.metrics.onlineUsers.set(statistics.onlineUsers, date); + RocketChat.metrics.awayUsers.set(statistics.awayUsers, date); + RocketChat.metrics.offlineUsers.set(statistics.offlineUsers, date); + + // Room statistics + RocketChat.metrics.totalRooms.set(statistics.totalRooms, date); + RocketChat.metrics.totalChannels.set(statistics.totalChannels, date); + RocketChat.metrics.totalPrivateGroups.set(statistics.totalPrivateGroups, date); + RocketChat.metrics.totalDirect.set(statistics.totalDirect, date); + RocketChat.metrics.totalLivechat.set(statistics.totlalLivechat, date); + + // Message statistics + RocketChat.metrics.totalMessages.set(statistics.totalMessages, date); + RocketChat.metrics.totalChannelMessages.set(statistics.totalChannelMessages, date); + RocketChat.metrics.totalPrivateGroupMessages.set(statistics.totalPrivateGroupMessages, date); + RocketChat.metrics.totalDirectMessages.set(statistics.totalDirectMessages, date); + RocketChat.metrics.totalLivechatMessages.set(statistics.totalLivechatMessages, date); +}; + +const app = connect(); + +// const compression = require('compression'); +// app.use(compression()); + +app.use('/metrics', (req, res) => { + res.setHeader('Content-Type', 'text/plain'); + res.end(RocketChat.promclient.register.metrics()); +}); + +const server = http.createServer(app); + +let timer; +RocketChat.settings.get('Prometheus_Enabled', (key, value) => { + if (value === true) { + server.listen({ + port: 9100, + host: process.env.BIND_IP || '0.0.0.0' + }); + timer = Meteor.setInterval(setPrometheusData, 5000); + } else { + server.close(); + Meteor.clearInterval(timer); + } +}); diff --git a/packages/rocketchat-lib/server/lib/notifyUsersOnMessage.js b/packages/rocketchat-lib/server/lib/notifyUsersOnMessage.js index f673c56ec103..739e797a115a 100644 --- a/packages/rocketchat-lib/server/lib/notifyUsersOnMessage.js +++ b/packages/rocketchat-lib/server/lib/notifyUsersOnMessage.js @@ -2,7 +2,25 @@ import _ from 'underscore'; import s from 'underscore.string'; import moment from 'moment'; -RocketChat.callbacks.add('afterSaveMessage', function(message, room) { +/** + * Chechs if a messages contains a user highlight + * + * @param {string} message + * @param {array|undefined} highlights + * + * @returns {boolean} + */ + +export function messageContainsHighlight(message, highlights) { + if (! highlights || highlights.length === 0) { return false; } + + return highlights.some(function(highlight) { + const regexp = new RegExp(s.escapeRegExp(highlight), 'i'); + return regexp.test(message.msg); + }); +} + +function notifyUsersOnMessage(message, room) { // skips this callback if the message was edited and increments it if the edit was way in the past (aka imported) if (message.editedAt && Math.abs(moment(message.editedAt).diff()) > 60000) { //TODO: Review as I am not sure how else to get around this as the incrementing of the msgs count shouldn't be in this callback @@ -22,36 +40,12 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { return message; } - /** - * Chechs if a messages contains a user highlight - * - * @param {string} message - * @param {array|undefined} highlights - * - * @returns {boolean} - */ - function messageContainsHighlight(message, highlights) { - if (! highlights || highlights.length === 0) { return false; } - - let has = false; - highlights.some(function(highlight) { - const regexp = new RegExp(s.escapeRegExp(highlight), 'i'); - if (regexp.test(message.msg)) { - has = true; - return true; - } - }); - - return has; - } - if (room != null) { let toAll = false; let toHere = false; const mentionIds = []; const highlightsIds = []; - const highlights = RocketChat.models.Users.findUsersByUsernamesWithHighlights(room.usernames, { fields: { '_id': 1, 'settings.preferences.highlights': 1 }}).fetch(); - + const highlights = RocketChat.models.Subscriptions.findByRoomWithUserHighlights(room._id, { fields: {'userHighlights': 1, 'u._id': 1 }}).fetch(); if (message.mentions != null) { message.mentions.forEach(function(mention) { if (!toAll && mention._id === 'all') { @@ -66,11 +60,10 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { }); } - highlights.forEach(function(user) { - const userHighlights = RocketChat.getUserPreference(user, 'highlights'); - if (userHighlights && messageContainsHighlight(message, userHighlights)) { - if (user._id !== message.u._id) { - highlightsIds.push(user._id); + highlights.forEach(function(subscription) { + if (subscription.userHighlights && messageContainsHighlight(message, subscription.userHighlights)) { + if (subscription.u._id !== message.u._id) { + highlightsIds.push(subscription.u._id); } } }); @@ -94,6 +87,7 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { incUnread = 1; } RocketChat.models.Subscriptions.incGroupMentionsAndUnreadForRoomIdExcludingUserId(room._id, message.u._id, 1, incUnread); + } else if ((mentionIds && mentionIds.length > 0) || (highlightsIds && highlightsIds.length > 0)) { let incUnread = 0; if (['all_messages', 'user_mentions_only', 'user_and_group_mentions_only'].includes(unreadCount)) { @@ -107,12 +101,15 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { } // Update all the room activity tracker fields + // This method take so long to execute on gient rooms cuz it will trugger the cache rebuild for the releations of that room RocketChat.models.Rooms.incMsgCountAndSetLastMessageById(message.rid, 1, message.ts, RocketChat.settings.get('Store_Last_Message') && message); - // Update all other subscriptions to alert their owners but witout incrementing // the unread counter, as it is only for mentions and direct messages + // We now set alert and open properties in two separate update commands. This proved to be more efficient on MongoDB - because it uses a more efficient index. RocketChat.models.Subscriptions.setAlertForRoomIdExcludingUserId(message.rid, message.u._id); + RocketChat.models.Subscriptions.setOpenForRoomIdExcludingUserId(message.rid, message.u._id); return message; +} -}, RocketChat.callbacks.priority.LOW, 'notifyUsersOnMessage'); +RocketChat.callbacks.add('afterSaveMessage', notifyUsersOnMessage, RocketChat.callbacks.priority.LOW, 'notifyUsersOnMessage'); diff --git a/packages/rocketchat-lib/server/lib/roomTypes.js b/packages/rocketchat-lib/server/lib/roomTypes.js index 68aec9b5ef6f..e6ee83c8bf70 100644 --- a/packages/rocketchat-lib/server/lib/roomTypes.js +++ b/packages/rocketchat-lib/server/lib/roomTypes.js @@ -31,6 +31,9 @@ RocketChat.roomTypes = new class roomTypesServer extends RoomTypesCommon { return this.roomTypes[roomType] && this.roomTypes[roomType].roomFind; } + getRoomName(roomType, roomData) { + return this.roomTypes[roomType] && this.roomTypes[roomType].roomName && this.roomTypes[roomType].roomName(roomData); + } /** * Run the publish for a room type diff --git a/packages/rocketchat-lib/server/lib/sendEmailOnMessage.js b/packages/rocketchat-lib/server/lib/sendEmailOnMessage.js deleted file mode 100644 index 860f2232860a..000000000000 --- a/packages/rocketchat-lib/server/lib/sendEmailOnMessage.js +++ /dev/null @@ -1,269 +0,0 @@ -import moment from 'moment'; -import s from 'underscore.string'; - -function getEmailContent({ messageContent, message, user, room }) { - const lng = user && user.language || RocketChat.settings.get('language') || 'en'; - - const roomName = s.escapeHTML(`#${ RocketChat.settings.get('UI_Allow_room_names_with_special_chars') ? room.fname || room.name : room.name }`); - - const userName = s.escapeHTML(RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name || message.u.username : message.u.username); - - const header = TAPi18n.__(room.t === 'd' ? 'User_sent_a_message_to_you' : 'User_sent_a_message_on_channel', { - username: userName, - channel: roomName, - lng - }); - - if (messageContent) { - return `${ header }

${ messageContent }`; - } - - if (message.file) { - const fileHeader = TAPi18n.__(room.t === 'd' ? 'User_uploaded_a_file_to_you' : 'User_uploaded_a_file_on_channel', { - username: userName, - channel: roomName, - lng - }); - - let content = `${ TAPi18n.__('Attachment_File_Uploaded') }: ${ s.escapeHTML(message.file.name) }`; - - if (message.attachments && message.attachments.length === 1 && message.attachments[0].description !== '') { - content += `

${ s.escapeHTML(message.attachments[0].description) }`; - } - - return `${ fileHeader }

${ content }`; - } - - if (message.attachments.length > 0) { - const [ attachment ] = message.attachments; - - let content = ''; - - if (attachment.title) { - content += `${ s.escapeHTML(attachment.title) }
`; - } - if (attachment.text) { - content += `${ s.escapeHTML(attachment.text) }
`; - } - - return `${ header }

${ content }`; - } - - return header; -} - -RocketChat.callbacks.add('afterSaveMessage', function(message, room) { - // skips this callback if the message was edited - if (message.editedAt) { - return message; - } - - if (message.ts && Math.abs(moment(message.ts).diff()) > 60000) { - return message; - } - - const getMessageLink = (room, sub) => { - const roomPath = RocketChat.roomTypes.getRouteLink(room.t, sub); - const path = Meteor.absoluteUrl(roomPath ? roomPath.replace(/^\//, '') : ''); - const style = [ - 'color: #fff;', - 'padding: 9px 12px;', - 'border-radius: 4px;', - 'background-color: #04436a;', - 'text-decoration: none;' - ].join(' '); - const message = TAPi18n.__('Offline_Link_Message'); - return `

${ message }`; - }; - - const divisorMessage = '


'; - - let messageHTML; - - if (message.msg !== '') { - messageHTML = s.escapeHTML(message.msg); - message = RocketChat.callbacks.run('renderMessage', message); - if (message.tokens && message.tokens.length > 0) { - message.tokens.forEach((token) => { - token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2'); - messageHTML = messageHTML.replace(token.token, token.text); - }); - } - messageHTML = messageHTML.replace(/\n/gm, '
'); - } - - const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || ''); - let footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || ''); - - const usersToSendEmail = {}; - if (room.t === 'd') { - usersToSendEmail[message.rid.replace(message.u._id, '')] = 'direct'; - } else { - let isMentionAll = message.mentions.find(mention => mention._id === 'all'); - - if (isMentionAll) { - const maxMembersForNotification = RocketChat.settings.get('Notifications_Max_Room_Members'); - if (maxMembersForNotification !== 0 && room.usernames.length > maxMembersForNotification) { - isMentionAll = undefined; - } - } - - let query; - if (isMentionAll) { - // Query all users in room limited by the max room members setting - query = RocketChat.models.Subscriptions.findByRoomId(room._id); - } else { - // Query only mentioned users, will be always a few users - const userIds = message.mentions.map(mention => mention._id); - query = RocketChat.models.Subscriptions.findByRoomIdAndUserIdsOrAllMessages(room._id, userIds); - } - - query.forEach(sub => { - if (sub.disableNotifications) { - return delete usersToSendEmail[sub.u._id]; - } - - const { emailNotifications, muteGroupMentions } = sub; - - if (emailNotifications === 'nothing') { - return delete usersToSendEmail[sub.u._id]; - } - - if (isMentionAll && muteGroupMentions) { - return delete usersToSendEmail[sub.u._id]; - } - - const mentionedUser = isMentionAll || message.mentions.find(mention => mention._id === sub.u._id); - - if (emailNotifications === 'default' || emailNotifications == null) { - if (mentionedUser) { - return usersToSendEmail[sub.u._id] = 'default'; - } - return delete usersToSendEmail[sub.u._id]; - } - - if (emailNotifications === 'mentions' && mentionedUser) { - return usersToSendEmail[sub.u._id] = 'mention'; - } - - if (emailNotifications === 'all') { - return usersToSendEmail[sub.u._id] = 'all'; - } - }); - } - const userIdsToSendEmail = Object.keys(usersToSendEmail); - - let defaultLink; - - const linkByUser = {}; - if (RocketChat.roomTypes.hasCustomLink(room.t)) { - RocketChat.models.Subscriptions.findByRoomIdAndUserIds(room._id, userIdsToSendEmail).forEach((sub) => { - linkByUser[sub.u._id] = getMessageLink(room, sub); - }); - } else { - defaultLink = getMessageLink(room, { - name: room.name - }); - } - - if (userIdsToSendEmail.length > 0) { - const usersOfMention = RocketChat.models.Users.getUsersToSendOfflineEmail(userIdsToSendEmail).fetch(); - - if (usersOfMention && usersOfMention.length > 0) { - usersOfMention.forEach((user) => { - const emailNotificationMode = RocketChat.getUserPreference(user, 'emailNotificationMode'); - if (usersToSendEmail[user._id] === 'default') { - if (emailNotificationMode === 'all') { //Mention/DM - usersToSendEmail[user._id] = 'mention'; - } else { - return; - } - } - - if (usersToSendEmail[user._id] === 'direct') { - const userEmailPreferenceIsDisabled = emailNotificationMode === 'disabled'; - const directMessageEmailPreference = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(message.rid, message.rid.replace(message.u._id, '')).emailNotifications; - - if (directMessageEmailPreference === 'nothing') { - return; - } - - if ((directMessageEmailPreference === 'default' || directMessageEmailPreference == null) && userEmailPreferenceIsDisabled) { - return; - } - } - - // Checks if user is in the room he/she is mentioned (unless it's public channel) - if (room.t !== 'c' && room.usernames.indexOf(user.username) === -1) { - return; - } - - // Footer in case direct reply is enabled. - if (RocketChat.settings.get('Direct_Reply_Enable')) { - footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer_Direct_Reply') || ''); - } - - let emailSubject; - const username = RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name : message.u.username; - const roomName = RocketChat.settings.get('UI_Allow_room_names_with_special_chars') ? room.fname : room.name; - switch (usersToSendEmail[user._id]) { - case 'all': - emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_Mention_All_Email'), { - user: username, - room: roomName || room.label - }); - break; - case 'direct': - emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_DM_Email'), { - user: username, - room: roomName - }); - break; - case 'mention': - emailSubject = RocketChat.placeholders.replace(RocketChat.settings.get('Offline_Mention_Email'), { - user: username, - room: roomName - }); - break; - } - user.emails.some((email) => { - if (email.verified) { - const content = getEmailContent({ - messageContent: messageHTML, - message, - user, - room - }); - email = { - to: email.address, - subject: emailSubject, - html: header + content + divisorMessage + (linkByUser[user._id] || defaultLink) + footer - }; - // using user full-name/channel name in from address - if (room.t === 'd') { - email.from = `${ String(message.u.name).replace(/@/g, '%40').replace(/[<>,]/g, '') } <${ RocketChat.settings.get('From_Email') }>`; - } else { - email.from = `${ String(room.name).replace(/@/g, '%40').replace(/[<>,]/g, '') } <${ RocketChat.settings.get('From_Email') }>`; - } - // If direct reply enabled, email content with headers - if (RocketChat.settings.get('Direct_Reply_Enable')) { - email.headers = { - // Reply-To header with format "username+messageId@domain" - 'Reply-To': `${ RocketChat.settings.get('Direct_Reply_Username').split('@')[0].split(RocketChat.settings.get('Direct_Reply_Separator'))[0] }${ RocketChat.settings.get('Direct_Reply_Separator') }${ message._id }@${ RocketChat.settings.get('Direct_Reply_Username').split('@')[1] }` - }; - } - - Meteor.defer(() => { - Email.send(email); - }); - - return true; - } - }); - }); - } - } - - return message; - -}, RocketChat.callbacks.priority.LOW, 'sendEmailOnMessage'); diff --git a/packages/rocketchat-lib/server/lib/sendNotificationsOnMessage.js b/packages/rocketchat-lib/server/lib/sendNotificationsOnMessage.js index aee2caa865ff..b8823a330416 100644 --- a/packages/rocketchat-lib/server/lib/sendNotificationsOnMessage.js +++ b/packages/rocketchat-lib/server/lib/sendNotificationsOnMessage.js @@ -1,157 +1,148 @@ -/* globals Push */ -import _ from 'underscore'; -import s from 'underscore.string'; import moment from 'moment'; -const CATEGORY_MESSAGE = 'MESSAGE'; -const CATEGORY_MESSAGE_NOREPLY = 'MESSAGE_NOREPLY'; - -/** - * Replaces @username with full name - * - * @param {string} message The message to replace - * @param {object[]} mentions Array of mentions used to make replacements - * - * @returns {string} - */ -function replaceMentionedUsernamesWithFullNames(message, mentions) { - if (!mentions || !mentions.length) { - return message; +import { callJoinRoom, messageContainsHighlight, parseMessageTextPerUser, replaceMentionedUsernamesWithFullNames } from '../functions/notifications/'; +import { sendEmail, shouldNotifyEmail } from '../functions/notifications/email'; +import { sendSinglePush, shouldNotifyMobile } from '../functions/notifications/mobile'; +import { notifyDesktopUser, shouldNotifyDesktop } from '../functions/notifications/desktop'; +import { notifyAudioUser, shouldNotifyAudio } from '../functions/notifications/audio'; + +const sendNotification = ({ + subscription, + sender, + hasMentionToAll, + hasMentionToHere, + message, + notificationMessage, + room, + mentionIds, + disableAllMessageNotifications +}) => { + + // don't notify the sender + if (subscription.u._id === sender._id) { + return; } - mentions.forEach((mention) => { - const user = RocketChat.models.Users.findOneById(mention._id); - if (user && user.name) { - message = message.replace(`@${ mention.username }`, user.name); - } - }); - return message; -} -function canSendMessageToRoom(room, username) { - return !((room.muted || []).includes(username)); -} - -/** - * This function returns a string ready to be shown in the notification - * - * @param {object} message the message to be parsed - */ -function parseMessageText(message, userId) { - const user = RocketChat.models.Users.findOneById(userId); - const lng = user && user.language || RocketChat.settings.get('language') || 'en'; - - if (!message.msg && message.attachments && message.attachments[0]) { - message.msg = message.attachments[0].image_type ? TAPi18n.__('User_uploaded_image', {lng}) : TAPi18n.__('User_uploaded_file', {lng}); + // notifications disabled + if (subscription.disableNotifications) { + return; } - message.msg = RocketChat.callbacks.run('beforeNotifyUser', message.msg); - return message.msg; -} -/** - * Send notification to user - * - * @param {string} userId The user to notify - * @param {object} user The sender - * @param {object} room The room send from - * @param {number} duration Duration of notification - */ -function notifyDesktopUser(userId, user, message, room, duration) { - - const UI_Use_Real_Name = RocketChat.settings.get('UI_Use_Real_Name') === true; - message.msg = parseMessageText(message, userId); - - if (UI_Use_Real_Name) { - message.msg = replaceMentionedUsernamesWithFullNames(message.msg, message.mentions); + // dont send notification to users who ignored the sender + if (Array.isArray(subscription.ignored) && subscription.ignored.find(sender._id)) { + return; } - let title = UI_Use_Real_Name ? user.name : `@${ user.username }`; - if (room.t !== 'd' && room.name) { - title += ` @ #${ room.name }`; + + const hasMentionToUser = mentionIds.includes(subscription.u._id); + + // mute group notifications (@here and @all) if not directly mentioned as well + if (!hasMentionToUser && subscription.muteGroupMentions && (hasMentionToAll || hasMentionToHere)) { + return; } - RocketChat.Notifications.notifyUser(userId, 'notification', { - title, - text: message.msg, - duration, - payload: { - _id: message._id, - rid: message.rid, - sender: message.u, - type: room.t, - name: room.name - } - }); -} -function notifyAudioUser(userId, message, room) { - RocketChat.Notifications.notifyUser(userId, 'audioNotification', { - payload: { - _id: message._id, - rid: message.rid, - sender: message.u, - type: room.t, - name: room.name - } - }); -} + const receiver = RocketChat.models.Users.findOneById(subscription.u._id); -/** - * Checks if a message contains a user highlight - * - * @param {string} message - * @param {array|undefined} highlights - * - * @returns {boolean} - */ -function messageContainsHighlight(message, highlights) { - if (! highlights || highlights.length === 0) { return false; } - - let has = false; - highlights.some(function(highlight) { - const regexp = new RegExp(s.escapeRegExp(highlight), 'i'); - if (regexp.test(message.msg)) { - has = true; - return true; - } - }); + if (!receiver || !receiver.active) { + return; + } - return has; -} + notificationMessage = parseMessageTextPerUser(notificationMessage, receiver); + + const isHighlighted = messageContainsHighlight(message, subscription.userHighlights); + + const roomType = room.t; + + const { + audioNotifications, + desktopNotifications, + mobilePushNotifications, + emailNotifications + } = subscription; + + let notificationSent = false; + + // busy users don't receive audio notification + if (shouldNotifyAudio({ + disableAllMessageNotifications, + status: receiver.status, + audioNotifications, + hasMentionToAll, + hasMentionToHere, + isHighlighted, + hasMentionToUser, + roomType + })) { + notifyAudioUser(subscription.u._id, message, room); + } -function getBadgeCount(userId) { - const subscriptions = RocketChat.models.Subscriptions.findUnreadByUserId(userId).fetch(); + // busy users don't receive desktop notification + if (shouldNotifyDesktop({ + disableAllMessageNotifications, + status: receiver.status, + desktopNotifications, + hasMentionToAll, + hasMentionToHere, + isHighlighted, + hasMentionToUser, + roomType + })) { + notificationSent = true; + notifyDesktopUser({ + notificationMessage, + userId: subscription.u._id, + user: sender, + message, + room, + duration: subscription.desktopNotificationDuration + }); + } - return subscriptions.reduce((unread, sub) => { - return sub.unread + unread; - }, 0); -} + if (shouldNotifyMobile({ + disableAllMessageNotifications, + mobilePushNotifications, + hasMentionToAll, + isHighlighted, + hasMentionToUser, + statusConnection: receiver.statusConnection, + roomType + })) { + notificationSent = true; + + sendSinglePush({ + notificationMessage, + room, + message, + userId: subscription.u._id, + senderUsername: sender.username, + senderName: sender.name, + receiverUsername: receiver.username + }); + } -const sendPushNotifications = (userIdsToPushNotify = [], message, room, push_room, push_username, push_message, pushUsernames) => { - if (userIdsToPushNotify.length > 0 && Push.enabled === true) { - // send a push notification for each user individually (to get his/her badge count) - userIdsToPushNotify.forEach((userIdToNotify) => { - RocketChat.PushNotification.send({ - roomId: message.rid, - roomName: push_room, - username: push_username, - message: push_message, - badge: getBadgeCount(userIdToNotify), - payload: { - host: Meteor.absoluteUrl(), - rid: message.rid, - sender: message.u, - type: room.t, - name: room.name - }, - usersTo: { - userId: userIdToNotify - }, - category: canSendMessageToRoom(room, pushUsernames[userIdToNotify]) ? CATEGORY_MESSAGE : CATEGORY_MESSAGE_NOREPLY - }); + if (receiver.emails && shouldNotifyEmail({ + disableAllMessageNotifications, + statusConnection: receiver.statusConnection, + emailNotifications, + isHighlighted, + hasMentionToUser, + hasMentionToAll, + roomType + })) { + receiver.emails.some((email) => { + if (email.verified) { + sendEmail({ message, receiver, subscription, room, emailAddress: email.address }); + + return true; + } }); } + + if (notificationSent) { + RocketChat.Sandstorm.notify(message, [subscription.u._id], `@${ sender.username }: ${ message.msg }`, room.t === 'p' ? 'privateMessage' : 'message'); + } }; -const callJoin = (user, rid) => user.active && Meteor.runAsUser(user._id, () => Meteor.call('joinRoom', rid)); -RocketChat.callbacks.add('afterSaveMessage', function(message, room, userId) { +function sendAllNotifications(message, room) { // skips this callback if the message was edited if (message.editedAt) { @@ -162,312 +153,111 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room, userId) { return message; } - const pushUsernames = {}; - - const user = (room.t !== 'l') ? RocketChat.models.Users.findOneById(message.u._id) : room.v; + if (!room || room.t == null) { + return message; + } - if (!user) { + const sender = (room.t !== 'l') ? RocketChat.models.Users.findOneById(message.u._id) : room.v; + if (!sender) { return message; } - /* - Increment unread couter if direct messages - */ - const settings = { - alwaysNotifyDesktopUsers: [], - dontNotifyDesktopUsers: [], - alwaysNotifyMobileUsers: [], - dontNotifyMobileUsers: [], - desktopNotificationDurations: {}, - alwaysNotifyAudioUsers: [], - dontNotifyAudioUsers: [], - audioNotificationValues: {}, - dontNotifyUsersOnGroupMentions: [] - }; + const mentionIds = (message.mentions || []).map(({_id}) => _id); + const mentionIdsWithoutGroups = mentionIds.filter((_id) => _id !== 'all' && _id !== 'here'); + const hasMentionToAll = mentionIds.includes('all'); + const hasMentionToHere = mentionIds.includes('here'); - /** - * Checks if a given user can be notified - * - * @param {string} id - * @param {string} type - mobile|desktop - * - * @returns {boolean} - */ - function canBeNotified(id, type) { - const types = { - desktop: [ 'dontNotifyDesktopUsers', 'alwaysNotifyDesktopUsers' ], - mobile: [ 'dontNotifyMobileUsers', 'alwaysNotifyMobileUsers' ], - audio: [ 'dontNotifyAudioUsers', 'alwaysNotifyAudioUsers' ] - }; - - return (settings[types[type][0]].indexOf(id) === -1 || settings[types[type][1]].indexOf(id) !== -1); + let notificationMessage = RocketChat.callbacks.run('beforeSendMessageNotifications', message.msg); + if (mentionIds.length > 0 && RocketChat.settings.get('UI_Use_Real_Name')) { + notificationMessage = replaceMentionedUsernamesWithFullNames(message.msg, message.mentions); } // Don't fetch all users if room exceeds max members const maxMembersForNotification = RocketChat.settings.get('Notifications_Max_Room_Members'); const disableAllMessageNotifications = room.usernames.length > maxMembersForNotification && maxMembersForNotification !== 0; - const subscriptions = RocketChat.models.Subscriptions.findNotificationPreferencesByRoom(room._id, disableAllMessageNotifications) || []; - const userIds = []; - subscriptions.forEach(s => userIds.push(s.u._id)); - const users = {}; - - RocketChat.models.Users.findUsersByIds(userIds, { fields: { 'settings.preferences': 1 } }).forEach((user) => { - users[user._id] = user; - }); - - subscriptions.forEach(subscription => { - if (subscription.disableNotifications) { - settings.dontNotifyDesktopUsers.push(subscription.u._id); - settings.dontNotifyMobileUsers.push(subscription.u._id); - settings.dontNotifyAudioUsers.push(subscription.u._id); - return; - } - - if (Array.isArray(subscription.ignored) && subscription.ignored.find(message.u._id)) { - return; - } - - const { - audioNotifications = RocketChat.getUserPreference(users[subscription.u._id], 'audioNotifications'), - desktopNotifications = RocketChat.getUserPreference(users[subscription.u._id], 'desktopNotifications'), - mobilePushNotifications = RocketChat.getUserPreference(users[subscription.u._id], 'mobileNotifications') - } = subscription; - - if (audioNotifications === 'all' && !disableAllMessageNotifications) { - settings.alwaysNotifyAudioUsers.push(subscription.u._id); - } - if (desktopNotifications === 'all' && !disableAllMessageNotifications) { - settings.alwaysNotifyDesktopUsers.push(subscription.u._id); - } else if (desktopNotifications === 'nothing') { - settings.dontNotifyDesktopUsers.push(subscription.u._id); - } - if (mobilePushNotifications === 'all' && !disableAllMessageNotifications) { - settings.alwaysNotifyMobileUsers.push(subscription.u._id); - } else if (mobilePushNotifications === 'nothing') { - settings.dontNotifyMobileUsers.push(subscription.u._id); - } - settings.audioNotificationValues[subscription.u._id] = subscription.audioNotificationValue; - settings.desktopNotificationDurations[subscription.u._id] = subscription.desktopNotificationDuration; - - if (subscription.muteGroupMentions) { - settings.dontNotifyUsersOnGroupMentions.push(subscription.u._id); - } - }); - let userIdsForAudio = []; - let userIdsToNotify = []; - let userIdsToPushNotify = []; - const mentions = []; - const alwaysNotifyMobileBoolean = RocketChat.settings.get('Notifications_Always_Notify_Mobile'); - - const usersWithHighlights = RocketChat.models.Users.findUsersByUsernamesWithHighlights(room.usernames, { fields: { '_id': 1, 'settings.preferences.highlights': 1 }}).fetch() - .filter(user => messageContainsHighlight(message, user.settings.preferences.highlights)); - - let push_message = ' '; - //Set variables depending on Push Notification settings - if (RocketChat.settings.get('Push_show_message')) { - push_message = parseMessageText(message, userId); - } - - let push_username = ''; - let push_room = ''; - if (RocketChat.settings.get('Push_show_username_room')) { - push_username = user.username; - push_room = `#${ room.name }`; - } - - if (room.t == null || room.t === 'd') { - const userOfMentionId = message.rid.replace(message.u._id, ''); - const userOfMention = RocketChat.models.Users.findOne({ - _id: userOfMentionId - }, { - fields: { - username: 1, - statusConnection: 1 - } - }); + const query = { + rid: room._id, + $or: [{ + 'userHighlights.0': { $exists: 1 } + }] + }; - // Always notify Sandstorm - if (userOfMention != null) { - RocketChat.Sandstorm.notify(message, [userOfMention._id], - `@${ user.username }: ${ message.msg }`, 'privateMessage'); + ['audio', 'desktop', 'mobile', 'email'].map((kind) => { + const notificationField = `${ kind === 'mobile' ? 'mobilePush' : kind }Notifications`; - if (canBeNotified(userOfMentionId, 'desktop')) { - const duration = settings.desktopNotificationDurations[userOfMention._id]; - notifyDesktopUser(userOfMention._id, user, message, room, duration); - } + const filter = { [notificationField]: 'all' }; - if (canBeNotified(userOfMentionId, 'mobile')) { - if (Push.enabled === true && (userOfMention.statusConnection !== 'online' || alwaysNotifyMobileBoolean === true)) { - RocketChat.PushNotification.send({ - roomId: message.rid, - username: push_username, - message: push_message, - badge: getBadgeCount(userOfMention._id), - payload: { - host: Meteor.absoluteUrl(), - rid: message.rid, - sender: message.u, - type: room.t, - name: room.name - }, - usersTo: { - userId: userOfMention._id - }, - category: canSendMessageToRoom(room, userOfMention.username) ? CATEGORY_MESSAGE : CATEGORY_MESSAGE_NOREPLY - }); - return message; - } - } + if (disableAllMessageNotifications) { + filter[`${ kind }PrefOrigin`] = { $ne: 'user' }; } - } else { - const mentionIds = (message.mentions || []).map(({_id}) => _id); - const toAll = mentionIds.includes('all'); - const toHere = mentionIds.includes('here'); - - if (mentionIds.length + settings.alwaysNotifyDesktopUsers.length > 0) { - let desktopMentionIds = _.union(mentionIds, settings.alwaysNotifyDesktopUsers); - desktopMentionIds = _.difference(desktopMentionIds, settings.dontNotifyDesktopUsers); - - let usersOfDesktopMentions = RocketChat.models.Users.find({ - _id: { - $in: desktopMentionIds - } - }, { - fields: { - _id: 1, - username: 1, - active: 1 - } - }).fetch(); - mentions.push(...usersOfDesktopMentions); - if (room.t !== 'c') { - usersOfDesktopMentions = _.reject(usersOfDesktopMentions, (usersOfMentionItem) => { - return room.usernames.indexOf(usersOfMentionItem.username) === -1; - }); - } + query.$or.push(filter); - userIdsToNotify = _.pluck(usersOfDesktopMentions, '_id'); + if (mentionIdsWithoutGroups.length > 0) { + query.$or.push({ + [notificationField]: 'mentions', + 'u._id': { $in: mentionIdsWithoutGroups } + }); } - if (mentionIds.length + settings.alwaysNotifyMobileUsers.length > 0) { - let mobileMentionIds = _.union(mentionIds, settings.alwaysNotifyMobileUsers); - mobileMentionIds = _.difference(mobileMentionIds, settings.dontNotifyMobileUsers); - - const usersOfMobileMentionsQuery = { - _id: { - $in: mobileMentionIds - } - }; - - if (alwaysNotifyMobileBoolean !== true) { - usersOfMobileMentionsQuery.statusConnection = { $ne: 'online' }; - } - - let usersOfMobileMentions = RocketChat.models.Users.find(usersOfMobileMentionsQuery, { - fields: { - _id: 1, - username: 1, - statusConnection: 1, - active: 1 - } - }).fetch(); - - mentions.push(...usersOfMobileMentions); - if (room.t !== 'c') { - usersOfMobileMentions = _.reject(usersOfMobileMentions, usersOfMentionItem => !room.usernames.includes(usersOfMentionItem.username)); - } - - userIdsToPushNotify = usersOfMobileMentions.map(userMobile => { - pushUsernames[userMobile._id] = userMobile.username; - return userMobile._id; + const serverField = kind === 'email' ? 'emailNotificationMode' : `${ kind }Notifications`; + const serverPreference = RocketChat.settings.get(`Accounts_Default_User_Preferences_${ serverField }`); + if ((room.t === 'd' && serverPreference === 'mentions') || (serverPreference === 'all' && !disableAllMessageNotifications)) { + query.$or.push({ + [notificationField]: { $exists: false } + }); + } else if (serverPreference === 'mentions' && mentionIdsWithoutGroups.length) { + query.$or.push({ + [notificationField]: { $exists: false }, + 'u._id': { $in: mentionIdsWithoutGroups } }); } + }); - if (mentionIds.length + settings.alwaysNotifyAudioUsers.length > 0) { - let audioMentionIds = _.union(mentionIds, settings.alwaysNotifyAudioUsers); - audioMentionIds = _.difference(audioMentionIds, userIdsToNotify); - - let usersOfAudioMentions = RocketChat.models.Users.find({ _id: { $in: audioMentionIds }, statusConnection: { - $ne:'offline' - } }, { - fields: { - _id: 1, - username: 1, - active: 1 - } - }).fetch(); - mentions.push(...usersOfAudioMentions); - if (room.t !== 'c') { - usersOfAudioMentions = _.reject(usersOfAudioMentions, (usersOfMentionItem) => { - return room.usernames.indexOf(usersOfMentionItem.username) === -1; + // the find bellow is crucial. all subscription records returned will receive at least one kind of notification. + // the query is defined by the server's default values and Notifications_Max_Room_Members setting. + const subscriptions = RocketChat.models.Subscriptions.findNotificationPreferencesByRoom(query); + subscriptions.forEach((subscription) => sendNotification({ + subscription, + sender, + hasMentionToAll, + hasMentionToHere, + message, + notificationMessage, + room, + mentionIds, + disableAllMessageNotifications + })); + + // on public channels, if a mentioned user is not member of the channel yet, he will first join the channel and then be notified based on his preferences. + if (room.t === 'c') { + Promise.all(message.mentions + .filter(({ _id, username }) => _id !== 'here' && _id !== 'all' && !room.usernames.includes(username)) + .map(async(user) => { + await callJoinRoom(user, room._id); + + return user._id; + }) + ).then((users) => { + users.forEach((userId) => { + const subscription = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(room._id, userId); + + sendNotification({ + subscription, + sender, + hasMentionToAll, + hasMentionToHere, + message, + notificationMessage, + room, + mentionIds }); - } - - userIdsForAudio = _.pluck(usersOfAudioMentions, '_id'); - } - - if (room.t === 'c') { - mentions.filter(user => !room.usernames.includes(user.username)) - .forEach(user =>callJoin(user, room._id)); - } - - if ([toAll, toHere].some(e => e) && room.usernames && room.usernames.length > 0) { - RocketChat.models.Users.find({ - username: { $in: room.usernames }, - _id: { $ne: user._id } - }, { - fields: { - _id: 1, - username: 1, - status: 1, - statusConnection: 1 - } - }).forEach(function({ status, _id, username, statusConnection }) { // user - if (Array.isArray(settings.dontNotifyUsersOnGroupMentions) && settings.dontNotifyUsersOnGroupMentions.includes(_id)) { - return; - } - - if (['online', 'away', 'busy'].includes(status) && !(settings.dontNotifyDesktopUsers || []).includes(_id)) { - userIdsToNotify.push(_id); - userIdsForAudio.push(_id); - } - if (toAll && statusConnection !== 'online' && !(settings.dontNotifyMobileUsers || []).includes(_id)) { - pushUsernames[_id] = username; - return userIdsToPushNotify.push(_id); - } - if (toAll && statusConnection !== 'online') { - userIdsForAudio.push(_id); - } }); - } - - if (usersWithHighlights.length > 0) { - const highlightsIds = _.pluck(usersWithHighlights, '_id'); - userIdsForAudio = userIdsForAudio.concat(highlightsIds); - userIdsToNotify = userIdsToNotify.concat(highlightsIds); - userIdsToPushNotify = userIdsToPushNotify.concat(highlightsIds); - } - - userIdsToNotify = _.without(_.compact(_.unique(userIdsToNotify)), message.u._id); - userIdsToPushNotify = _.without(_.compact(_.unique(userIdsToPushNotify)), message.u._id); - userIdsForAudio = _.without(_.compact(_.unique(userIdsForAudio)), message.u._id); - - for (const usersOfMentionId of userIdsToNotify) { - const duration = settings.desktopNotificationDurations[usersOfMentionId]; - notifyDesktopUser(usersOfMentionId, user, message, room, duration); - } - for (const usersOfMentionId of userIdsForAudio) { - notifyAudioUser(usersOfMentionId, message, room); - } - sendPushNotifications(userIdsToPushNotify, message, room, push_room, push_username, push_message, pushUsernames); - - const allUserIdsToNotify = _.unique(userIdsToNotify.concat(userIdsToPushNotify)); - RocketChat.Sandstorm.notify(message, allUserIdsToNotify, - `@${ user.username }: ${ message.msg }`, room.t === 'p' ? 'privateMessage' : 'message'); + }); } return message; +} -}, RocketChat.callbacks.priority.LOW, 'sendNotificationOnMessage'); +RocketChat.callbacks.add('afterSaveMessage', sendAllNotifications, RocketChat.callbacks.priority.LOW, 'sendNotificationsOnMessage'); diff --git a/packages/rocketchat-lib/server/methods/sendMessage.js b/packages/rocketchat-lib/server/methods/sendMessage.js index ff2b1e5a1c4d..03b65736150f 100644 --- a/packages/rocketchat-lib/server/methods/sendMessage.js +++ b/packages/rocketchat-lib/server/methods/sendMessage.js @@ -55,7 +55,7 @@ Meteor.methods({ ts: new Date, msg: TAPi18n.__('room_is_blocked', {}, user.language) }); - return false; + throw new Meteor.Error('You can\'t send messages because you are blocked'); } if ((room.muted || []).includes(user.username)) { @@ -65,7 +65,7 @@ Meteor.methods({ ts: new Date, msg: TAPi18n.__('You_have_been_muted', {}, user.language) }); - return false; + throw new Meteor.Error('You can\'t send messages because you have been muted'); } if (message.alias == null && RocketChat.settings.get('Message_SetNameToAliasEnabled')) { diff --git a/packages/rocketchat-lib/server/models/Settings.js b/packages/rocketchat-lib/server/models/Settings.js index 7da29bee37fa..493eb41511fc 100644 --- a/packages/rocketchat-lib/server/models/Settings.js +++ b/packages/rocketchat-lib/server/models/Settings.js @@ -92,6 +92,10 @@ class ModelSettings extends RocketChat.models._Base { }); } + findSetupWizardSettings() { + return this.find({ wizard: { '$exists': true, '$ne': null } }); + } + // UPDATE updateValueById(_id, value) { const query = { diff --git a/packages/rocketchat-lib/server/models/Subscriptions.js b/packages/rocketchat-lib/server/models/Subscriptions.js index 116751db301d..e727a69477d2 100644 --- a/packages/rocketchat-lib/server/models/Subscriptions.js +++ b/packages/rocketchat-lib/server/models/Subscriptions.js @@ -11,7 +11,9 @@ class ModelSubscriptions extends RocketChat.models._Base { this.tryEnsureIndex({ 'u._id': 1, 'name': 1, 't': 1, 'code': 1 }, { unique: 1 }); this.tryEnsureIndex({ 'open': 1 }); this.tryEnsureIndex({ 'alert': 1 }); - this.tryEnsureIndex({ 'unread': 1 }); + + this.tryEnsureIndex({ rid: 1, 'u._id': 1, open: 1 }); + this.tryEnsureIndex({ 'ts': 1 }); this.tryEnsureIndex({ 'ls': 1 }); this.tryEnsureIndex({ 'audioNotifications': 1 }, { sparse: 1 }); @@ -20,6 +22,7 @@ class ModelSubscriptions extends RocketChat.models._Base { this.tryEnsureIndex({ 'emailNotifications': 1 }, { sparse: 1 }); this.tryEnsureIndex({ 'autoTranslate': 1 }, { sparse: 1 }); this.tryEnsureIndex({ 'autoTranslateLanguage': 1 }, { sparse: 1 }); + this.tryEnsureIndex({ 'userHighlights.0': 1 }, { sparse: 1 }); this.cache.ensureIndex('rid', 'array'); this.cache.ensureIndex('u._id', 'array'); @@ -77,7 +80,6 @@ class ModelSubscriptions extends RocketChat.models._Base { return this.find(query, options); } - // FIND findByRoomIdAndRoles(roomId, roles, options) { roles = [].concat(roles); const query = { @@ -139,6 +141,15 @@ class ModelSubscriptions extends RocketChat.models._Base { return this.find(query, options); } + findByRoomWithUserHighlights(roomId, options) { + const query = { + rid: roomId, + 'userHighlights.0': { $exists: true } + }; + + return this.find(query, options); + } + getLastSeen(options) { if (options == null) { options = {}; @@ -475,15 +486,28 @@ class ModelSubscriptions extends RocketChat.models._Base { 'u._id': { $ne: userId }, - $or: [ - { alert: { $ne: true } }, - { open: { $ne: true } } - ] + alert: { $ne: true } + }; + + const update = { + $set: { + alert: true + } + }; + return this.update(query, update, { multi: true }); + } + + setOpenForRoomIdExcludingUserId(roomId, userId) { + const query = { + rid: roomId, + 'u._id': { + $ne: userId + }, + open: { $ne: true } }; const update = { $set: { - alert: true, open: true } }; @@ -596,6 +620,122 @@ class ModelSubscriptions extends RocketChat.models._Base { return this.update(query, update, { multi: true }); } + clearDesktopNotificationUserPreferences(userId) { + const query = { + 'u._id': userId, + desktopPrefOrigin: 'user' + }; + + const update = { + $unset: { + desktopNotifications: 1, + desktopPrefOrigin: 1 + } + }; + + return this.update(query, update, { multi: true }); + } + + updateDesktopNotificationUserPreferences(userId, desktopNotifications) { + const query = { + 'u._id': userId, + desktopPrefOrigin: { + $ne: 'subscription' + } + }; + + const update = { + $set: { + desktopNotifications, + desktopPrefOrigin: 'user' + } + }; + + return this.update(query, update, { multi: true }); + } + + clearMobileNotificationUserPreferences(userId) { + const query = { + 'u._id': userId, + mobilePrefOrigin: 'user' + }; + + const update = { + $unset: { + mobilePushNotifications: 1, + mobilePrefOrigin: 1 + } + }; + + return this.update(query, update, { multi: true }); + } + + updateMobileNotificationUserPreferences(userId, mobilePushNotifications) { + const query = { + 'u._id': userId, + mobilePrefOrigin: { + $ne: 'subscription' + } + }; + + const update = { + $set: { + mobilePushNotifications, + mobilePrefOrigin: 'user' + } + }; + + return this.update(query, update, { multi: true }); + } + + clearEmailNotificationUserPreferences(userId) { + const query = { + 'u._id': userId, + emailPrefOrigin: 'user' + }; + + const update = { + $unset: { + emailNotifications: 1, + emailPrefOrigin: 1 + } + }; + + return this.update(query, update, { multi: true }); + } + + updateEmailNotificationUserPreferences(userId, emailNotifications) { + const query = { + 'u._id': userId, + emailPrefOrigin: { + $ne: 'subscription' + } + }; + + const update = { + $set: { + emailNotifications, + emailPrefOrigin: 'user' + } + }; + + return this.update(query, update, { multi: true }); + } + + updateUserHighlights(userId, userHighlights) { + const query = { + 'u._id': userId + }; + + const update = { + $set: { + userHighlights + } + }; + + return this.update(query, update, { multi: true }); + } + // INSERT createWithRoomAndUser(room, user, extraData) { const subscription = { @@ -617,6 +757,32 @@ class ModelSubscriptions extends RocketChat.models._Base { } }; + const { + desktopNotifications, + mobileNotifications, + emailNotificationMode, + highlights + } = (user.settings && user.settings.preferences) || {}; + + if (desktopNotifications && desktopNotifications !== 'default') { + subscription.desktopNotifications = desktopNotifications; + subscription.desktopPrefOrigin = 'user'; + } + + if (mobileNotifications && mobileNotifications !== 'default') { + subscription.mobilePushNotifications = mobileNotifications; + subscription.mobilePrefOrigin = 'user'; + } + + if (emailNotificationMode && emailNotificationMode !== 'default') { + subscription.emailNotifications = emailNotificationMode; + subscription.emailPrefOrigin = 'user'; + } + + if (Array.isArray(highlights) && highlights.length) { + subscription.userHighlights = highlights; + } + _.extend(subscription, extraData); return this.insert(subscription); diff --git a/packages/rocketchat-lib/server/startup/settings.js b/packages/rocketchat-lib/server/startup/settings.js index 9434185df598..d5b96cc789ce 100644 --- a/packages/rocketchat-lib/server/startup/settings.js +++ b/packages/rocketchat-lib/server/startup/settings.js @@ -180,7 +180,7 @@ RocketChat.settings.addGroup('Accounts', function() { }); this.section('Accounts_Default_User_Preferences', function() { - this.add('Accounts_Default_User_Preferences_enableAutoAway', false, { + this.add('Accounts_Default_User_Preferences_enableAutoAway', true, { type: 'boolean', 'public': true, i18nLabel: 'Enable_Auto_Away' @@ -390,15 +390,15 @@ RocketChat.settings.addGroup('Accounts', function() { 'public': true, i18nLabel: 'MessageBox_view_mode' }); - this.add('Accounts_Default_User_Preferences_emailNotificationMode', 'all', { + this.add('Accounts_Default_User_Preferences_emailNotificationMode', 'mentions', { type: 'select', values: [ { - key: 'disabled', + key: 'nothing', i18nLabel: 'Email_Notification_Mode_Disabled' }, { - key: 'all', + key: 'mentions', i18nLabel: 'Email_Notification_Mode_All' } ], @@ -628,6 +628,22 @@ RocketChat.settings.addGroup('OAuth', function() { }); RocketChat.settings.addGroup('General', function() { + this.add('Show_Setup_Wizard', 'pending', { + type: 'select', + public: true, + values: [ + { + key: 'pending', + i18nLabel: 'Pending' + }, { + key: 'in_progress', + i18nLabel: 'In_progress' + }, { + key: 'completed', + i18nLabel: 'Completed' + } + ] + }); this.add('Site_Url', typeof __meteor_runtime_config__ !== 'undefined' && __meteor_runtime_config__ !== null ? __meteor_runtime_config__.ROOT_URL : null, { type: 'string', i18nDescription: 'Site_Url_Description', @@ -635,11 +651,17 @@ RocketChat.settings.addGroup('General', function() { }); this.add('Site_Name', 'Rocket.Chat', { type: 'string', - 'public': true + wizard: { + step: 3, + order: 0 + } }); this.add('Language', '', { type: 'language', - 'public': true + wizard: { + step: 3, + order: 1 + } }); this.add('Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean' @@ -1620,9 +1642,1197 @@ RocketChat.settings.addGroup('Logs', function() { type: 'boolean', 'public': true }); - return this.add('Log_View_Limit', 1000, { + this.add('Log_View_Limit', 1000, { type: 'int' }); + + this.section('Prometheus', function() { + this.add('Prometheus_Enabled', false, { + type: 'boolean', + i18nLabel: 'Enabled' + }); + }); }); -RocketChat.settings.init(); +RocketChat.settings.addGroup('Setup_Wizard', function() { + this.section('Organization_Info', function() { + this.add('Organization_Type', '', { + type: 'select', + values: [ + { + key: 'nonprofit', + i18nLabel: 'Nonprofit' + }, + { + key: 'enterprise', + i18nLabel: 'Enterprise' + }, + { + key: 'government', + i18nLabel: 'Government' + }, + { + key: 'community', + i18nLabel: 'Community' + } + ], + wizard: { + step: 2, + order: 0 + } + }); + this.add('Organization_Name', '', { + type: 'string', + wizard: { + step: 2, + order: 1 + } + }); + this.add('Industry', '', { + type: 'select', + values: [ + { + key: 'advocacy', + i18nLabel: 'Advocacy' + }, + { + key: 'blockchain', + i18nLabel: 'Blockchain' + }, + { + key: 'helpCenter', + i18nLabel: 'Help_Center' + }, + { + key: 'manufacturing', + i18nLabel: 'Manufacturing' + }, + { + key: 'education', + i18nLabel: 'Education' + }, + { + key: 'insurance', + i18nLabel: 'Insurance' + }, + { + key: 'logistics', + i18nLabel: 'Logistics' + }, + { + key: 'consulting', + i18nLabel: 'Consulting' + }, + { + key: 'entertainment', + i18nLabel: 'Entertainment' + }, + { + key: 'publicRelations', + i18nLabel: 'Public_Relations' + }, + { + key: 'religious', + i18nLabel: 'Religious' + }, + { + key: 'gaming', + i18nLabel: 'Gaming' + }, + { + key: 'socialNetwork', + i18nLabel: 'Social_Network' + }, + { + key: 'realEstate', + i18nLabel: 'Real_Estate' + }, + { + key: 'tourism', + i18nLabel: 'Tourism' + }, + { + key: 'telecom', + i18nLabel: 'Telecom' + }, + { + key: 'consumerGoods', + i18nLabel: 'Consumer_Goods' + }, + { + key: 'financialServices', + i18nLabel: 'Financial_Services' + }, + { + key: 'healthcarePharmaceutical', + i18nLabel: 'Healthcare_and_Pharmaceutical' + }, + { + key: 'industry', + i18nLabel: 'Industry' + }, + { + key: 'media', + i18nLabel: 'Media' + }, + { + key: 'retail', + i18nLabel: 'Retail' + }, + { + key: 'technologyServices', + i18nLabel: 'Technology_Services' + }, + { + key: 'technologyProvider', + i18nLabel: 'Technology_Provider' + }, + { + key: 'other', + i18nLabel: 'Other' + } + ], + wizard: { + step: 2, + order: 2 + } + }); + this.add('Size', '', { + type: 'select', + values: [ + { + key: '0', + i18nLabel: '1-10 people' + }, + { + key: '1', + i18nLabel: '11-50 people' + }, + { + key: '2', + i18nLabel: '51-100 people' + }, + { + key: '3', + i18nLabel: '101-250 people' + }, + { + key: '4', + i18nLabel: '251-500 people' + }, + { + key: '5', + i18nLabel: '501-1000 people' + }, + { + key: '6', + i18nLabel: '1001-4000 people' + }, + { + key: '7', + i18nLabel: '4000 or more people' + } + ], + wizard: { + step: 2, + order: 3 + } + }); + this.add('Country', '', { + type: 'select', + values: [ + { + key: 'worldwide', + i18nLabel: 'Worldwide' + }, + { + key: 'afghanistan', + i18nLabel: 'Country_Afghanistan' + }, + { + key: 'albania', + i18nLabel: 'Country_Albania' + }, + { + key: 'algeria', + i18nLabel: 'Country_Algeria' + }, + { + key: 'americanSamoa', + i18nLabel: 'Country_American_Samoa' + }, + { + key: 'andorra', + i18nLabel: 'Country_Andorra' + }, + { + key: 'angola', + i18nLabel: 'Country_Angola' + }, + { + key: 'anguilla', + i18nLabel: 'Country_Anguilla' + }, + { + key: 'antarctica', + i18nLabel: 'Country_Antarctica' + }, + { + key: 'antiguaAndBarbuda', + i18nLabel: 'Country_Antigua_and_Barbuda' + }, + { + key: 'argentina', + i18nLabel: 'Country_Argentina' + }, + { + key: 'armenia', + i18nLabel: 'Country_Armenia' + }, + { + key: 'aruba', + i18nLabel: 'Country_Aruba' + }, + { + key: 'australia', + i18nLabel: 'Country_Australia' + }, + { + key: 'austria', + i18nLabel: 'Country_Austria' + }, + { + key: 'azerbaijan', + i18nLabel: 'Country_Azerbaijan' + }, + { + key: 'bahamas', + i18nLabel: 'Country_Bahamas' + }, + { + key: 'bahrain', + i18nLabel: 'Country_Bahrain' + }, + { + key: 'bangladesh', + i18nLabel: 'Country_Bangladesh' + }, + { + key: 'barbados', + i18nLabel: 'Country_Barbados' + }, + { + key: 'belarus', + i18nLabel: 'Country_Belarus' + }, + { + key: 'belgium', + i18nLabel: 'Country_Belgium' + }, + { + key: 'belize', + i18nLabel: 'Country_Belize' + }, + { + key: 'benin', + i18nLabel: 'Country_Benin' + }, + { + key: 'bermuda', + i18nLabel: 'Country_Bermuda' + }, + { + key: 'bhutan', + i18nLabel: 'Country_Bhutan' + }, + { + key: 'bolivia', + i18nLabel: 'Country_Bolivia' + }, + { + key: 'bosniaAndHerzegovina', + i18nLabel: 'Country_Bosnia_and_Herzegovina' + }, + { + key: 'botswana', + i18nLabel: 'Country_Botswana' + }, + { + key: 'bouvetIsland', + i18nLabel: 'Country_Bouvet_Island' + }, + { + key: 'brazil', + i18nLabel: 'Country_Brazil' + }, + { + key: 'britishIndianOceanTerritory', + i18nLabel: 'Country_British_Indian_Ocean_Territory' + }, + { + key: 'bruneiDarussalam', + i18nLabel: 'Country_Brunei_Darussalam' + }, + { + key: 'bulgaria', + i18nLabel: 'Country_Bulgaria' + }, + { + key: 'burkinaFaso', + i18nLabel: 'Country_Burkina_Faso' + }, + { + key: 'burundi', + i18nLabel: 'Country_Burundi' + }, + { + key: 'cambodia', + i18nLabel: 'Country_Cambodia' + }, + { + key: 'cameroon', + i18nLabel: 'Country_Cameroon' + }, + { + key: 'canada', + i18nLabel: 'Country_Canada' + }, + { + key: 'capeVerde', + i18nLabel: 'Country_Cape_Verde' + }, + { + key: 'caymanIslands', + i18nLabel: 'Country_Cayman_Islands' + }, + { + key: 'centralAfricanRepublic', + i18nLabel: 'Country_Central_African_Republic' + }, + { + key: 'chad', + i18nLabel: 'Country_Chad' + }, + { + key: 'chile', + i18nLabel: 'Country_Chile' + }, + { + key: 'china', + i18nLabel: 'Country_China' + }, + { + key: 'christmasIsland', + i18nLabel: 'Country_Christmas_Island' + }, + { + key: 'cocosKeelingIslands', + i18nLabel: 'Country_Cocos_Keeling_Islands' + }, + { + key: 'colombia', + i18nLabel: 'Country_Colombia' + }, + { + key: 'comoros', + i18nLabel: 'Country_Comoros' + }, + { + key: 'congo', + i18nLabel: 'Country_Congo' + }, + { + key: 'congoTheDemocraticRepublicOfThe', + i18nLabel: 'Country_Congo_The_Democratic_Republic_of_The' + }, + { + key: 'cookIslands', + i18nLabel: 'Country_Cook_Islands' + }, + { + key: 'costaRica', + i18nLabel: 'Country_Costa_Rica' + }, + { + key: 'coteDivoire', + i18nLabel: 'Country_Cote_Divoire' + }, + { + key: 'croatia', + i18nLabel: 'Country_Croatia' + }, + { + key: 'cuba', + i18nLabel: 'Country_Cuba' + }, + { + key: 'cyprus', + i18nLabel: 'Country_Cyprus' + }, + { + key: 'czechRepublic', + i18nLabel: 'Country_Czech_Republic' + }, + { + key: 'denmark', + i18nLabel: 'Country_Denmark' + }, + { + key: 'djibouti', + i18nLabel: 'Country_Djibouti' + }, + { + key: 'dominica', + i18nLabel: 'Country_Dominica' + }, + { + key: 'dominicanRepublic', + i18nLabel: 'Country_Dominican_Republic' + }, + { + key: 'ecuador', + i18nLabel: 'Country_Ecuador' + }, + { + key: 'egypt', + i18nLabel: 'Country_Egypt' + }, + { + key: 'elSalvador', + i18nLabel: 'Country_El_Salvador' + }, + { + key: 'equatorialGuinea', + i18nLabel: 'Country_Equatorial_Guinea' + }, + { + key: 'eritrea', + i18nLabel: 'Country_Eritrea' + }, + { + key: 'estonia', + i18nLabel: 'Country_Estonia' + }, + { + key: 'ethiopia', + i18nLabel: 'Country_Ethiopia' + }, + { + key: 'falklandIslandsMalvinas', + i18nLabel: 'Country_Falkland_Islands_Malvinas' + }, + { + key: 'faroeIslands', + i18nLabel: 'Country_Faroe_Islands' + }, + { + key: 'fiji', + i18nLabel: 'Country_Fiji' + }, + { + key: 'finland', + i18nLabel: 'Country_Finland' + }, + { + key: 'france', + i18nLabel: 'Country_France' + }, + { + key: 'frenchGuiana', + i18nLabel: 'Country_French_Guiana' + }, + { + key: 'frenchPolynesia', + i18nLabel: 'Country_French_Polynesia' + }, + { + key: 'frenchSouthernTerritories', + i18nLabel: 'Country_French_Southern_Territories' + }, + { + key: 'gabon', + i18nLabel: 'Country_Gabon' + }, + { + key: 'gambia', + i18nLabel: 'Country_Gambia' + }, + { + key: 'georgia', + i18nLabel: 'Country_Georgia' + }, + { + key: 'germany', + i18nLabel: 'Country_Germany' + }, + { + key: 'ghana', + i18nLabel: 'Country_Ghana' + }, + { + key: 'gibraltar', + i18nLabel: 'Country_Gibraltar' + }, + { + key: 'greece', + i18nLabel: 'Country_Greece' + }, + { + key: 'greenland', + i18nLabel: 'Country_Greenland' + }, + { + key: 'grenada', + i18nLabel: 'Country_Grenada' + }, + { + key: 'guadeloupe', + i18nLabel: 'Country_Guadeloupe' + }, + { + key: 'guam', + i18nLabel: 'Country_Guam' + }, + { + key: 'guatemala', + i18nLabel: 'Country_Guatemala' + }, + { + key: 'guinea', + i18nLabel: 'Country_Guinea' + }, + { + key: 'guineaBissau', + i18nLabel: 'Country_Guinea_bissau' + }, + { + key: 'guyana', + i18nLabel: 'Country_Guyana' + }, + { + key: 'haiti', + i18nLabel: 'Country_Haiti' + }, + { + key: 'heardIslandAndMcdonaldIslands', + i18nLabel: 'Country_Heard_Island_and_Mcdonald_Islands' + }, + { + key: 'holySeeVaticanCityState', + i18nLabel: 'Country_Holy_See_Vatican_City_State' + }, + { + key: 'honduras', + i18nLabel: 'Country_Honduras' + }, + { + key: 'hongKong', + i18nLabel: 'Country_Hong_Kong' + }, + { + key: 'hungary', + i18nLabel: 'Country_Hungary' + }, + { + key: 'iceland', + i18nLabel: 'Country_Iceland' + }, + { + key: 'india', + i18nLabel: 'Country_India' + }, + { + key: 'indonesia', + i18nLabel: 'Country_Indonesia' + }, + { + key: 'iranIslamicRepublicOf', + i18nLabel: 'Country_Iran_Islamic_Republic_of' + }, + { + key: 'iraq', + i18nLabel: 'Country_Iraq' + }, + { + key: 'ireland', + i18nLabel: 'Country_Ireland' + }, + { + key: 'israel', + i18nLabel: 'Country_Israel' + }, + { + key: 'italy', + i18nLabel: 'Country_Italy' + }, + { + key: 'jamaica', + i18nLabel: 'Country_Jamaica' + }, + { + key: 'japan', + i18nLabel: 'Country_Japan' + }, + { + key: 'jordan', + i18nLabel: 'Country_Jordan' + }, + { + key: 'kazakhstan', + i18nLabel: 'Country_Kazakhstan' + }, + { + key: 'kenya', + i18nLabel: 'Country_Kenya' + }, + { + key: 'kiribati', + i18nLabel: 'Country_Kiribati' + }, + { + key: 'koreaDemocraticPeoplesRepublicOf', + i18nLabel: 'Country_Korea_Democratic_Peoples_Republic_of' + }, + { + key: 'koreaRepublicOf', + i18nLabel: 'Country_Korea_Republic_of' + }, + { + key: 'kuwait', + i18nLabel: 'Country_Kuwait' + }, + { + key: 'kyrgyzstan', + i18nLabel: 'Country_Kyrgyzstan' + }, + { + key: 'laoPeoplesDemocraticRepublic', + i18nLabel: 'Country_Lao_Peoples_Democratic_Republic' + }, + { + key: 'latvia', + i18nLabel: 'Country_Latvia' + }, + { + key: 'lebanon', + i18nLabel: 'Country_Lebanon' + }, + { + key: 'lesotho', + i18nLabel: 'Country_Lesotho' + }, + { + key: 'liberia', + i18nLabel: 'Country_Liberia' + }, + { + key: 'libyanArabJamahiriya', + i18nLabel: 'Country_Libyan_Arab_Jamahiriya' + }, + { + key: 'liechtenstein', + i18nLabel: 'Country_Liechtenstein' + }, + { + key: 'lithuania', + i18nLabel: 'Country_Lithuania' + }, + { + key: 'luxembourg', + i18nLabel: 'Country_Luxembourg' + }, + { + key: 'macao', + i18nLabel: 'Country_Macao' + }, + { + key: 'macedoniaTheFormerYugoslavRepublicOf', + i18nLabel: 'Country_Macedonia_The_Former_Yugoslav_Republic_of' + }, + { + key: 'madagascar', + i18nLabel: 'Country_Madagascar' + }, + { + key: 'malawi', + i18nLabel: 'Country_Malawi' + }, + { + key: 'malaysia', + i18nLabel: 'Country_Malaysia' + }, + { + key: 'maldives', + i18nLabel: 'Country_Maldives' + }, + { + key: 'mali', + i18nLabel: 'Country_Mali' + }, + { + key: 'malta', + i18nLabel: 'Country_Malta' + }, + { + key: 'marshallIslands', + i18nLabel: 'Country_Marshall_Islands' + }, + { + key: 'martinique', + i18nLabel: 'Country_Martinique' + }, + { + key: 'mauritania', + i18nLabel: 'Country_Mauritania' + }, + { + key: 'mauritius', + i18nLabel: 'Country_Mauritius' + }, + { + key: 'mayotte', + i18nLabel: 'Country_Mayotte' + }, + { + key: 'mexico', + i18nLabel: 'Country_Mexico' + }, + { + key: 'micronesiaFederatedStatesOf', + i18nLabel: 'Country_Micronesia_Federated_States_of' + }, + { + key: 'moldovaRepublicOf', + i18nLabel: 'Country_Moldova_Republic_of' + }, + { + key: 'monaco', + i18nLabel: 'Country_Monaco' + }, + { + key: 'mongolia', + i18nLabel: 'Country_Mongolia' + }, + { + key: 'montserrat', + i18nLabel: 'Country_Montserrat' + }, + { + key: 'morocco', + i18nLabel: 'Country_Morocco' + }, + { + key: 'mozambique', + i18nLabel: 'Country_Mozambique' + }, + { + key: 'myanmar', + i18nLabel: 'Country_Myanmar' + }, + { + key: 'namibia', + i18nLabel: 'Country_Namibia' + }, + { + key: 'nauru', + i18nLabel: 'Country_Nauru' + }, + { + key: 'nepal', + i18nLabel: 'Country_Nepal' + }, + { + key: 'netherlands', + i18nLabel: 'Country_Netherlands' + }, + { + key: 'netherlandsAntilles', + i18nLabel: 'Country_Netherlands_Antilles' + }, + { + key: 'newCaledonia', + i18nLabel: 'Country_New_Caledonia' + }, + { + key: 'newZealand', + i18nLabel: 'Country_New_Zealand' + }, + { + key: 'nicaragua', + i18nLabel: 'Country_Nicaragua' + }, + { + key: 'niger', + i18nLabel: 'Country_Niger' + }, + { + key: 'nigeria', + i18nLabel: 'Country_Nigeria' + }, + { + key: 'niue', + i18nLabel: 'Country_Niue' + }, + { + key: 'norfolkIsland', + i18nLabel: 'Country_Norfolk_Island' + }, + { + key: 'northernMarianaIslands', + i18nLabel: 'Country_Northern_Mariana_Islands' + }, + { + key: 'norway', + i18nLabel: 'Country_Norway' + }, + { + key: 'oman', + i18nLabel: 'Country_Oman' + }, + { + key: 'pakistan', + i18nLabel: 'Country_Pakistan' + }, + { + key: 'palau', + i18nLabel: 'Country_Palau' + }, + { + key: 'palestinianTerritoryOccupied', + i18nLabel: 'Country_Palestinian_Territory_Occupied' + }, + { + key: 'panama', + i18nLabel: 'Country_Panama' + }, + { + key: 'papuaNewGuinea', + i18nLabel: 'Country_Papua_New_Guinea' + }, + { + key: 'paraguay', + i18nLabel: 'Country_Paraguay' + }, + { + key: 'peru', + i18nLabel: 'Country_Peru' + }, + { + key: 'philippines', + i18nLabel: 'Country_Philippines' + }, + { + key: 'pitcairn', + i18nLabel: 'Country_Pitcairn' + }, + { + key: 'poland', + i18nLabel: 'Country_Poland' + }, + { + key: 'portugal', + i18nLabel: 'Country_Portugal' + }, + { + key: 'puertoRico', + i18nLabel: 'Country_Puerto_Rico' + }, + { + key: 'qatar', + i18nLabel: 'Country_Qatar' + }, + { + key: 'reunion', + i18nLabel: 'Country_Reunion' + }, + { + key: 'romania', + i18nLabel: 'Country_Romania' + }, + { + key: 'russianFederation', + i18nLabel: 'Country_Russian_Federation' + }, + { + key: 'rwanda', + i18nLabel: 'Country_Rwanda' + }, + { + key: 'saintHelena', + i18nLabel: 'Country_Saint_Helena' + }, + { + key: 'saintKittsAndNevis', + i18nLabel: 'Country_Saint_Kitts_and_Nevis' + }, + { + key: 'saintLucia', + i18nLabel: 'Country_Saint_Lucia' + }, + { + key: 'saintPierreAndMiquelon', + i18nLabel: 'Country_Saint_Pierre_and_Miquelon' + }, + { + key: 'saintVincentAndTheGrenadines', + i18nLabel: 'Country_Saint_Vincent_and_The_Grenadines' + }, + { + key: 'samoa', + i18nLabel: 'Country_Samoa' + }, + { + key: 'sanMarino', + i18nLabel: 'Country_San_Marino' + }, + { + key: 'saoTomeAndPrincipe', + i18nLabel: 'Country_Sao_Tome_and_Principe' + }, + { + key: 'saudiArabia', + i18nLabel: 'Country_Saudi_Arabia' + }, + { + key: 'senegal', + i18nLabel: 'Country_Senegal' + }, + { + key: 'serbiaAndMontenegro', + i18nLabel: 'Country_Serbia_and_Montenegro' + }, + { + key: 'seychelles', + i18nLabel: 'Country_Seychelles' + }, + { + key: 'sierraLeone', + i18nLabel: 'Country_Sierra_Leone' + }, + { + key: 'singapore', + i18nLabel: 'Country_Singapore' + }, + { + key: 'slovakia', + i18nLabel: 'Country_Slovakia' + }, + { + key: 'slovenia', + i18nLabel: 'Country_Slovenia' + }, + { + key: 'solomonIslands', + i18nLabel: 'Country_Solomon_Islands' + }, + { + key: 'somalia', + i18nLabel: 'Country_Somalia' + }, + { + key: 'southAfrica', + i18nLabel: 'Country_South_Africa' + }, + { + key: 'southGeorgiaAndTheSouthSandwichIslands', + i18nLabel: 'Country_South_Georgia_and_The_South_Sandwich_Islands' + }, + { + key: 'spain', + i18nLabel: 'Country_Spain' + }, + { + key: 'sriLanka', + i18nLabel: 'Country_Sri_Lanka' + }, + { + key: 'sudan', + i18nLabel: 'Country_Sudan' + }, + { + key: 'suriname', + i18nLabel: 'Country_Suriname' + }, + { + key: 'svalbardAndJanMayen', + i18nLabel: 'Country_Svalbard_and_Jan_Mayen' + }, + { + key: 'swaziland', + i18nLabel: 'Country_Swaziland' + }, + { + key: 'sweden', + i18nLabel: 'Country_Sweden' + }, + { + key: 'switzerland', + i18nLabel: 'Country_Switzerland' + }, + { + key: 'syrianArabRepublic', + i18nLabel: 'Country_Syrian_Arab_Republic' + }, + { + key: 'taiwanProvinceOfChina', + i18nLabel: 'Country_Taiwan_Province_of_China' + }, + { + key: 'tajikistan', + i18nLabel: 'Country_Tajikistan' + }, + { + key: 'tanzaniaUnitedRepublicOf', + i18nLabel: 'Country_Tanzania_United_Republic_of' + }, + { + key: 'thailand', + i18nLabel: 'Country_Thailand' + }, + { + key: 'timorLeste', + i18nLabel: 'Country_Timor_leste' + }, + { + key: 'togo', + i18nLabel: 'Country_Togo' + }, + { + key: 'tokelau', + i18nLabel: 'Country_Tokelau' + }, + { + key: 'tonga', + i18nLabel: 'Country_Tonga' + }, + { + key: 'trinidadAndTobago', + i18nLabel: 'Country_Trinidad_and_Tobago' + }, + { + key: 'tunisia', + i18nLabel: 'Country_Tunisia' + }, + { + key: 'turkey', + i18nLabel: 'Country_Turkey' + }, + { + key: 'turkmenistan', + i18nLabel: 'Country_Turkmenistan' + }, + { + key: 'turksAndCaicosIslands', + i18nLabel: 'Country_Turks_and_Caicos_Islands' + }, + { + key: 'tuvalu', + i18nLabel: 'Country_Tuvalu' + }, + { + key: 'uganda', + i18nLabel: 'Country_Uganda' + }, + { + key: 'ukraine', + i18nLabel: 'Country_Ukraine' + }, + { + key: 'unitedArabEmirates', + i18nLabel: 'Country_United_Arab_Emirates' + }, + { + key: 'unitedKingdom', + i18nLabel: 'Country_United_Kingdom' + }, + { + key: 'unitedStates', + i18nLabel: 'Country_United_States' + }, + { + key: 'unitedStatesMinorOutlyingIslands', + i18nLabel: 'Country_United_States_Minor_Outlying_Islands' + }, + { + key: 'uruguay', + i18nLabel: 'Country_Uruguay' + }, + { + key: 'uzbekistan', + i18nLabel: 'Country_Uzbekistan' + }, + { + key: 'vanuatu', + i18nLabel: 'Country_Vanuatu' + }, + { + key: 'venezuela', + i18nLabel: 'Country_Venezuela' + }, + { + key: 'vietNam', + i18nLabel: 'Country_Viet_Nam' + }, + { + key: 'virginIslandsBritish', + i18nLabel: 'Country_Virgin_Islands_British' + }, + { + key: 'virginIslandsUS', + i18nLabel: 'Country_Virgin_Islands_US' + }, + { + key: 'wallisAndFutuna', + i18nLabel: 'Country_Wallis_and_Futuna' + }, + { + key: 'westernSahara', + i18nLabel: 'Country_Western_Sahara' + }, + { + key: 'yemen', + i18nLabel: 'Country_Yemen' + }, + { + key: 'zambia', + i18nLabel: 'Country_Zambia' + }, + { + key: 'zimbabwe', + i18nLabel: 'Country_Zimbabwe' + } + ], + wizard: { + step: 2, + order: 4 + } + }); + this.add('Website', '', { + type: 'string', + wizard: { + step: 2, + order: 5 + } + }); + this.add('Server_Type', '', { + type: 'select', + values: [ + { + key: 'privateTeam', + i18nLabel: 'Private_Team' + }, + { + key: 'publicCommunity', + i18nLabel: 'Public_Community' + } + ], + wizard: { + step: 3, + order: 2 + } + }); + }); +}); + +RocketChat.settings.init(); + diff --git a/packages/rocketchat-livechat/.app/i18n/ca.i18n.json b/packages/rocketchat-livechat/.app/i18n/ca.i18n.json index b46527a84b28..a8ef16a9132e 100644 --- a/packages/rocketchat-livechat/.app/i18n/ca.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/ca.i18n.json @@ -39,7 +39,7 @@ "Type_your_name": "Escriu el teu nom", "User_joined": "usuari unit", "User_left": "L'usuari ha abandonat la sala", - "We_are_not_online_right_now_please_leave_a_message": "No estem en línia ara mateix. Deixa un missatge.", + "We_are_not_online_right_now_please_leave_a_message": "No estem en línia ara mateix. Sisplau, deixa un missatge.", "We_are_offline_Sorry_for_the_inconvenience": "Estem desconnectats. Disculpi les molèsties.", "Yes": "Sí", "You": "Tu", diff --git a/packages/rocketchat-livechat/.app/i18n/cs.i18n.json b/packages/rocketchat-livechat/.app/i18n/cs.i18n.json index 12dc233fa2f3..4e04952e90c5 100644 --- a/packages/rocketchat-livechat/.app/i18n/cs.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/cs.i18n.json @@ -39,7 +39,7 @@ "Type_your_name": "Zadejte své jméno", "User_joined": "Uživatel se připojil", "User_left": "Uživatel odešel", - "We_are_not_online_right_now_please_leave_a_message": "Nejsme online právě teď. Prosím zanechte zprávu.", + "We_are_not_online_right_now_please_leave_a_message": "Zrovna nejsme online. Zanechte nám prosím zprávu.", "We_are_offline_Sorry_for_the_inconvenience": "Jsme offline. Omluváme se za nepříjemnosti.", "Yes": "Ano", "You": "Vy", diff --git a/packages/rocketchat-livechat/.app/i18n/da.i18n.json b/packages/rocketchat-livechat/.app/i18n/da.i18n.json index 75ed60c0f1fd..3219b2822909 100644 --- a/packages/rocketchat-livechat/.app/i18n/da.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/da.i18n.json @@ -4,7 +4,7 @@ "Are_you_sure_do_you_want_end_this_chat": "Er du sikker på, at du vil afslutte denne chat?", "Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Er du sikker på, at du vil afslutte denne chat og skifte afdeling?", "Cancel": "Annuller", - "Change": "Ændring", + "Change": "Skift", "Chat_ended": "Chat afsluttet!", "Choose_a_new_department": "Vælg en ny afdeling", "Close_menu": "Luk menuen", @@ -16,7 +16,7 @@ "How_satisfied_were_you_with_this_chat": "Hvor tilfreds var du med denne chat?", "Installation": "Installation", "New_messages": "Nye beskeder", - "No": "Ingen", + "No": "Nej", "Options": "Indstillinger", "Please_answer_survey": "Brug et øjeblik på at besvare et spørgeskema om denne chat", "Please_choose_a_department": "Vælg venligst en afdeling", @@ -25,21 +25,21 @@ "Request_video_chat": "Anmod om videochat", "Select_a_department": "Vælg en afdeling", "Switch_department": "Skift afdeling", - "Department_switched": "Afdelingen skiftet", + "Department_switched": "Du har skiftet afdeling", "Send": "Sende", - "Skip": "Springe", - "Start_Chat": "Start Chat", - "Survey": "Undersøgelse", - "Survey_instructions": "Vurder hvert spørgsmål efter din tilfredshed, 1 hvilket betyder at du er helt utilfreds og 5 betyder, at du er helt tilfreds.", + "Skip": "Spring over", + "Start_Chat": "Start chat", + "Survey": "Spørgeskema", + "Survey_instructions": "Vurder hvert spørgsmål efter din tilfredshed: 1 betyder, at du er helt utilfreds, og 5 betyder, at du er helt tilfreds.", "Thank_you_for_your_feedback": "Tak for din feedback", - "Thanks_We_ll_get_back_to_you_soon": "Tak! Vi kommer snart tilbage til dig.", + "Thanks_We_ll_get_back_to_you_soon": "Tak! Vi vender snart tilbage.", "transcript_sent": "Transskription sendt", - "Type_your_email": "Indtast din email", + "Type_your_email": "Indtast din e-mail", "Type_your_message": "Skriv din besked", "Type_your_name": "Indtast dit navn", - "User_joined": "Bruger blev tilsluttet", - "User_left": "Bruger tilbage", - "We_are_not_online_right_now_please_leave_a_message": "Vi er ikke online lige nu. Venligst, send en besked.", + "User_joined": "Brugeren sluttede sig til", + "User_left": "Brugeren tog sin afsked", + "We_are_not_online_right_now_please_leave_a_message": "Vi er ikke online lige nu. Efterlad en besked til os.", "We_are_offline_Sorry_for_the_inconvenience": "Vi er offline. Beklager ulejligheden.", "Yes": "Ja", "You": "Du", diff --git a/packages/rocketchat-livechat/.app/i18n/fa.i18n.json b/packages/rocketchat-livechat/.app/i18n/fa.i18n.json index a6eedfc945db..60dac89fe2ab 100644 --- a/packages/rocketchat-livechat/.app/i18n/fa.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/fa.i18n.json @@ -9,7 +9,7 @@ "Choose_a_new_department": "یک بخش جدید را انتخاب کنید", "Close_menu": "بستن فهرست", "Conversation_finished": "مکالمه به پایان رسید", - "End_chat": "پایان دادن چت", + "End_chat": "پایان دادن گفت‌وگو", "How_friendly_was_the_chat_agent": "گفت‌وگو کننده چقدر دوستانه برخورد کرد؟", "How_knowledgeable_was_the_chat_agent": "عامل چت چقدر آگاه بود؟", "How_responsive_was_the_chat_agent": "عامل چت چه میزان انعطاف پذیر بود؟", diff --git a/packages/rocketchat-livechat/.app/i18n/lv.i18n.json b/packages/rocketchat-livechat/.app/i18n/lv.i18n.json index 61a5c8cb4a85..3184ba50ad8f 100644 --- a/packages/rocketchat-livechat/.app/i18n/lv.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/lv.i18n.json @@ -1,8 +1,8 @@ { "Additional_Feedback": "Papildu atsauksmes", "Appearance": "Izskats", - "Are_you_sure_do_you_want_end_this_chat": "Vai tiešām vēlaties izbeigt šo tērzēšanu?", - "Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Vai tiešām vēlaties izbeigt šo tērzēšanu un mainīt nodaļu?", + "Are_you_sure_do_you_want_end_this_chat": "Vai tiešām vēlaties beigt šo tērzēšanu?", + "Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Vai tiešām vēlaties beigt šo tērzēšanu un mainīt nodaļu?", "Cancel": "Atcelt", "Change": "Mainīt", "Chat_ended": "Tērzēšana beigusies!", @@ -12,36 +12,36 @@ "End_chat": "Beigt tērzēšanu", "How_friendly_was_the_chat_agent": "Cik draudzīgs bija tērzēšanas aģents?", "How_knowledgeable_was_the_chat_agent": "Cik zinošs bija tērzēšanas aģents?", - "How_responsive_was_the_chat_agent": "Cik atbildes reakcija bija tērzēšanas aģentūra?", - "How_satisfied_were_you_with_this_chat": "Cik jūs apmierināts ar šo tērzēšanu?", + "How_responsive_was_the_chat_agent": "Cik atsaucīgs bija tērzēšanas aģentūra?", + "How_satisfied_were_you_with_this_chat": "Cik apmierināts jūs esat ar šo tērzēšanu?", "Installation": "Uzstādīšana", "New_messages": "Jaunas ziņas", "No": "Nē", "Options": "Iespējas", - "Please_answer_survey": "Lūdzu, veltiet laiku, lai atbildētu uz ātru aptauju par šo tērzēšanu", + "Please_answer_survey": "Lūdzu, veltiet nedaudz laika, lai atbildētu uz nelielu aptauju par šo tērzēšanu", "Please_choose_a_department": "Lūdzu, izvēlieties nodaļu", - "Please_fill_name_and_email": "Lūdzu, aizpildiet vārdu un e-pastu", - "Powered_by": "Powered by", - "Request_video_chat": "Pieprasiet video tērzēšanu", + "Please_fill_name_and_email": "Lūdzu, ievadiet vārdu un e-pastu", + "Powered_by": "Darbību nodrošina", + "Request_video_chat": "Pieprast video tērzēšanu", "Select_a_department": "Izvēlieties nodaļu", - "Switch_department": "Pārslēgšanas nodaļa", - "Department_switched": "Departaments ir pārslēgts", + "Switch_department": "Mainīt nodaļu", + "Department_switched": "Nodaļa ir nomainīta", "Send": "Sūtīt", "Skip": "Izlaist", - "Start_Chat": "Sāciet tērzēšanu", + "Start_Chat": "Uzsākt tērzēšanu", "Survey": "Aptauja", - "Survey_instructions": "Novērtējiet katru jautājumu atbilstoši jūsu apmierinātībai 1, tas nozīmē, ka jūs esat pilnīgi neapmierināts un 5 nozīmē, ka esat pilnīgi apmierināts.", + "Survey_instructions": "Novērtējiet katru jautājumu atbilstoši jūsu apmierinātībai - 1, tas nozīmē, ka jūs esat ļoti neapmierināts un 5 nozīmē, ka esat pilnībā apmierināts.", "Thank_you_for_your_feedback": "Paldies par jūsu atsauksmēm", - "Thanks_We_ll_get_back_to_you_soon": "Paldies! Mēs drīz atgriezīsimies pie jums.", + "Thanks_We_ll_get_back_to_you_soon": "Paldies! Mēs drīz Jums atbildēsim.", "transcript_sent": "Transkripts nosūtīts", "Type_your_email": "Ierakstiet savu e-pastu", "Type_your_message": "Ierakstiet savu ziņojumu", "Type_your_name": "Ierakstiet savu vārdu", - "User_joined": "Lietotājs pievienojās", - "User_left": "Lietotājs palicis", - "We_are_not_online_right_now_please_leave_a_message": "Mēs šobrīd nav tiešsaistē. Lūdzu, atstāj ziņu.", + "User_joined": "Pievienojās lietotājs", + "User_left": "Lietotājs atvienojās", + "We_are_not_online_right_now_please_leave_a_message": "Mēs šobrīd neesam tiešsaistē. Lūdzu, atstāj ziņu.", "We_are_offline_Sorry_for_the_inconvenience": "Mēs esam bezsaistē. Atvainojamies par sagādātajām neērtībām.", "Yes": "jā", - "You": "Tu", + "You": "Jūs", "You_must_complete_all_fields": "Jums ir jāaizpilda visi lauki" } \ No newline at end of file diff --git a/packages/rocketchat-livechat/.app/i18n/ru.i18n.json b/packages/rocketchat-livechat/.app/i18n/ru.i18n.json index efc0387d94a5..25a80272181a 100644 --- a/packages/rocketchat-livechat/.app/i18n/ru.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/ru.i18n.json @@ -39,7 +39,7 @@ "Type_your_name": "Введите ваше имя", "User_joined": "Пользователь присоединился", "User_left": "Пользователь вышел", - "We_are_not_online_right_now_please_leave_a_message": "Мы не в сети прямо сейчас. Пожалуйста, оставьте сообщение.", + "We_are_not_online_right_now_please_leave_a_message": "Мы сейчас не в сети. Пожалуйста, оставьте сообщение.", "We_are_offline_Sorry_for_the_inconvenience": "Мы не в сети. Извините за доставленные неудобства.", "Yes": "Да", "You": "Вы", diff --git a/packages/rocketchat-livechat/.app/i18n/sk-SK.i18n.json b/packages/rocketchat-livechat/.app/i18n/sk-SK.i18n.json index dd56de4abf35..9730be2b949c 100644 --- a/packages/rocketchat-livechat/.app/i18n/sk-SK.i18n.json +++ b/packages/rocketchat-livechat/.app/i18n/sk-SK.i18n.json @@ -1,47 +1,47 @@ { "Additional_Feedback": "Ďalšia spätná väzba", - "Appearance": "vzhľad", + "Appearance": "Vzhľad", "Are_you_sure_do_you_want_end_this_chat": "Naozaj chcete ukončiť tento rozhovor?", - "Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Naozaj chcete ukončiť tento rozhovor a prepnúť oddelenie?", + "Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Naozaj chcete ukončiť tento rozhovor a prepnúť na iné oddelenie?", "Cancel": "Zrušiť", - "Change": "zmena", - "Chat_ended": "Chat skončil!", + "Change": "Zmena", + "Chat_ended": "Rozhovor skončil!", "Choose_a_new_department": "Vyberte nové oddelenie", "Close_menu": "Zatvorte ponuku", - "Conversation_finished": "Konverzácia bola dokončená", + "Conversation_finished": "Konverzácia bola ukončená", "End_chat": "Ukončiť rozhovor", - "How_friendly_was_the_chat_agent": "Ako priateľský bol chatový agent?", - "How_knowledgeable_was_the_chat_agent": "Ako bol znalý chatový agent?", - "How_responsive_was_the_chat_agent": "Ako reagoval chatový agent?", - "How_satisfied_were_you_with_this_chat": "Ako ste boli spokojní s týmto rozhovorom?", - "Installation": "inštalácia", + "How_friendly_was_the_chat_agent": "Ako priateľský bol diskusný agent?", + "How_knowledgeable_was_the_chat_agent": "Ako informovaný bol diskusný agent?", + "How_responsive_was_the_chat_agent": "Ako reagoval diskusný agent?", + "How_satisfied_were_you_with_this_chat": "Aká bola Vaša spokojnosť s touto diskusiou?", + "Installation": "Inštalácia", "New_messages": "Nové správy", "No": "Žiadny", - "Options": "možnosti", - "Please_answer_survey": "Venujte chvíľu odpovede na rýchly prieskum o tomto rozhovore", + "Options": "Možnosti", + "Please_answer_survey": "Venujte prosím chvíľu odpovediam v rýchlom prieskume o tejto diskusii", "Please_choose_a_department": "Vyberte si oddelenie", "Please_fill_name_and_email": "Vyplňte prosím meno a e-mail", "Powered_by": "Poháňaný", - "Request_video_chat": "Vyžiadajte si videochat", + "Request_video_chat": "Vyžiadajte si videodiskusiu", "Select_a_department": "Vyberte oddelenie", - "Switch_department": "Prepnúť oddelenie", + "Switch_department": "Prepnúť na iné oddelenie", "Department_switched": "Oddelenie bolo prepnuté", - "Send": "odoslať", - "Skip": "preskočiť", - "Start_Chat": "Spustiť rozhovor", - "Survey": "prehľad", - "Survey_instructions": "Hodnoť každú otázku podľa vašej spokojnosti, 1 znamená, že ste úplne nespokojní a 5 znamená, že ste úplne spokojní.", - "Thank_you_for_your_feedback": "Ďakujeme vám za vašu reakciu", - "Thanks_We_ll_get_back_to_you_soon": "Vďaka! Vrátime sa k vám čoskoro.", + "Send": "Odoslať", + "Skip": "Preskočiť", + "Start_Chat": "Začať diskusiu", + "Survey": "Prieskum", + "Survey_instructions": "Ohodnoťte každú otázku na základe vašej spokojnosti, 1 znamená úplnú nespokojnosť, 5 znamená úplnú spokojnosť.", + "Thank_you_for_your_feedback": "Ďakujeme vám za vašu spätnú väzbu", + "Thanks_We_ll_get_back_to_you_soon": "Vďaka! Čoskoro sa k vám vrátime.", "transcript_sent": "Prepis bol odoslaný", "Type_your_email": "Zadajte svoj e-mail", - "Type_your_message": "Zadajte svoju správu", + "Type_your_message": "Napíšte vašu správu", "Type_your_name": "Zadajte svoje meno", "User_joined": "Používateľ sa pripojil", - "User_left": "Užívateľ odišiel", + "User_left": "Používateľ odišiel", "We_are_not_online_right_now_please_leave_a_message": "Momentálne nie sme online. Prosíme, zanechajte správu.", "We_are_offline_Sorry_for_the_inconvenience": "Sme offline. Ospravedlňujem sa za nepríjemnosť.", - "Yes": "Áno,", - "You": "vy", + "Yes": "Áno", + "You": "Vy", "You_must_complete_all_fields": "Musíte vyplniť všetky polia" } \ No newline at end of file diff --git a/packages/rocketchat-mentions/Mentions.js b/packages/rocketchat-mentions/Mentions.js index 454bd87fe20b..b196ee547e3d 100644 --- a/packages/rocketchat-mentions/Mentions.js +++ b/packages/rocketchat-mentions/Mentions.js @@ -3,6 +3,7 @@ * @param {Object} message - The message object */ import _ from 'underscore'; +import s from 'underscore.string'; export default class { constructor({pattern, useRealName, me}) { this.pattern = pattern; @@ -43,7 +44,7 @@ export default class { if (message.temp == null && mentionObj == null) { return match; } - const name = this.useRealName && mentionObj && mentionObj.name; + const name = this.useRealName && mentionObj && s.escapeHTML(mentionObj.name); return `${ name || match }`; }); diff --git a/packages/rocketchat-mentions/server/Mentions.js b/packages/rocketchat-mentions/server/Mentions.js index c2d5de50cc09..a057ec5a4d54 100644 --- a/packages/rocketchat-mentions/server/Mentions.js +++ b/packages/rocketchat-mentions/server/Mentions.js @@ -10,6 +10,9 @@ export default class MentionsServer extends Mentions { this.getChannel = args.getChannel; this.getChannels = args.getChannels; this.getUsers = args.getUsers; + this.getUser = args.getUser; + this.getTotalChannelMembers = args.getTotalChannelMembers; + this.onMaxRoomMembersExceeded = args.onMaxRoomMembersExceeded || (() => {}); } set getUsers(m) { this._getUsers = m; @@ -35,7 +38,7 @@ export default class MentionsServer extends Mentions { get messageMaxAll() { return typeof this._messageMaxAll === 'function' ? this._messageMaxAll() : this._messageMaxAll; } - getUsersByMentions({msg, rid}) { + getUsersByMentions({msg, rid, u: sender}) { let mentions = this.getUserMentions(msg); const mentionsAll = []; const userMentions = []; @@ -45,12 +48,8 @@ export default class MentionsServer extends Mentions { if (mention !== 'all' && mention !== 'here') { return userMentions.push(mention); } - if (mention === 'all') { - const messageMaxAll = this.messageMaxAll; - const allChannel = this.getChannel(rid); - if (messageMaxAll !== 0 && allChannel.usernames.length >= messageMaxAll) { - return; - } + if (this.messageMaxAll > 0 && this.getTotalChannelMembers(rid) > this.messageMaxAll) { + return this.onMaxRoomMembersExceeded({ sender, rid }); } mentionsAll.push({ _id: mention, @@ -69,8 +68,8 @@ export default class MentionsServer extends Mentions { const channels = this.getChannelbyMentions(message); message.mentions = mentionsAll; - message.channels = channels; + return message; } } diff --git a/packages/rocketchat-mentions/server/server.js b/packages/rocketchat-mentions/server/server.js index 69705910931d..0aa5074b0779 100644 --- a/packages/rocketchat-mentions/server/server.js +++ b/packages/rocketchat-mentions/server/server.js @@ -4,8 +4,28 @@ import MentionsServer from './Mentions'; const mention = new MentionsServer({ pattern: () => RocketChat.settings.get('UTF8_Names_Validation'), messageMaxAll: () => RocketChat.settings.get('Message_MaxAll'), - getUsers: (usernames) => Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true }}).fetch(), - getChannel: (rid) => RocketChat.models.Rooms.findOneById(rid), - getChannels: (channels) => RocketChat.models.Rooms.find({ name: {$in: _.unique(channels)}, t: 'c' }, { fields: {_id: 1, name: 1 }}).fetch() + getUsers: (usernames) => Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true, name: 1 }}).fetch(), + getUser: (userId) => RocketChat.models.Users.findOneById(userId), + getTotalChannelMembers: (rid) => RocketChat.models.Subscriptions.findByRoomId(rid).count(), + getChannels: (channels) => RocketChat.models.Rooms.find({ name: {$in: _.unique(channels)}, t: 'c' }, { fields: {_id: 1, name: 1 }}).fetch(), + onMaxRoomMembersExceeded({ sender, rid }) { + // Get the language of the user for the error notification. + const language = this.getUser(sender._id).language; + const msg = TAPi18n.__('Group_mentions_disabled_x_members', { total: this.messageMaxAll }, language); + + RocketChat.Notifications.notifyUser(sender._id, 'message', { + _id: Random.id(), + rid, + ts: new Date, + msg, + groupable: false + }); + + // Also throw to stop propagation of 'sendMessage'. + throw new Meteor.Error('error-action-not-allowed', msg, { + method: 'filterATAllTag', + action: msg + }); + } }); RocketChat.callbacks.add('beforeSaveMessage', (message) => mention.execute(message), RocketChat.callbacks.priority.HIGH, 'mentions'); diff --git a/packages/rocketchat-mentions/tests/client.tests.js b/packages/rocketchat-mentions/tests/client.tests.js index fd59a365c9cc..e98c4c3694dc 100644 --- a/packages/rocketchat-mentions/tests/client.tests.js +++ b/packages/rocketchat-mentions/tests/client.tests.js @@ -183,7 +183,7 @@ describe('Mention', function() { }); const message = { - mentions:[{username:'rocket.cat', name: 'Rocket.Cat'}, {username:'admin', name: 'Admin'}, {username: 'me', name: 'Me'}], + mentions:[{username:'rocket.cat', name: 'Rocket.Cat'}, {username:'admin', name: 'Admin'}, {username: 'me', name: 'Me'}, {username: 'specialchars', name:''}], channels: [{name: 'general'}, {name: 'rocket.cat'}] }; describe('replace methods', function() { @@ -227,11 +227,18 @@ describe('replace methods', function() { const result = mention.replaceUsers('@rocket.cat', message, 'me'); assert.equal(result, `${ str2Name }`); }); - it(`should render for "hello ${ str2 }"`, () => { const result = mention.replaceUsers(`hello ${ str2 }`, message, 'me'); assert.equal(result, `hello ${ str2Name }`); }); + + const specialchars = '@specialchars'; + const specialcharsName = '<img onerror=alert(hello)>'; + it(`should escape special characters in "hello ${ specialchars }"`, () => { + const result = mention.replaceUsers(`hello ${ specialchars }`, message, 'me'); + assert.equal(result, `hello ${ specialcharsName }`); + }); + it('should render for unknow/private user "hello @unknow"', () => { const result = mention.replaceUsers('hello @unknow', message, 'me'); assert.equal(result, 'hello @unknow'); @@ -254,7 +261,6 @@ describe('replace methods', function() { }); it(`should render for "hello ${ str2 }"`, () => { const result = mention.replaceChannels(`hello ${ str2 }`, message); - console.log('result', result); assert.equal(result, `hello ${ str2 }`); }); it('should render for unknow/private channel "hello #unknow"', () => { diff --git a/packages/rocketchat-mentions/tests/server.tests.js b/packages/rocketchat-mentions/tests/server.tests.js index b40f608c1f65..ea56ffb7e894 100644 --- a/packages/rocketchat-mentions/tests/server.tests.js +++ b/packages/rocketchat-mentions/tests/server.tests.js @@ -20,25 +20,15 @@ beforeEach(function() { username: 'jon' }].filter(user => usernames.includes(user.username));//Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true }}).fetch(); }, - getChannel: () => { - return { - usernames: [{ - _id: 1, - username: 'rocket.cat' - }, { - _id: 2, - username: 'jon' - }] - }; - // RocketChat.models.Rooms.findOneById(message.rid);, - }, getChannels(channels) { return [{ _id: 1, name: 'general' }].filter(channel => channels.includes(channel.name)); // return RocketChat.models.Rooms.find({ name: {$in: _.unique(channels)}, t: 'c' }, { fields: {_id: 1, name: 1 }}).fetch(); - } + }, + getUser: (userId) => ({ _id: userId, language: 'en' }), + getTotalChannelMembers: (/*rid*/) => 2 }); }); @@ -46,27 +36,7 @@ describe('Mention Server', () => { describe('getUsersByMentions', () => { describe('for @all but the number of users is greater than messageMaxAll', () => { beforeEach(() => { - mention.getChannel = () => { - return { - usernames:[{ - _id: 1, - username: 'rocket.cat' - }, { - _id: 2, - username: 'jon' - }, { - _id: 3, - username: 'jon1' - }, { - _id: 4, - username: 'jon2' - }, { - _id: 5, - username: 'jon3' - }] - }; - //Meteor.users.find({ username: {$in: _.unique(usernames)}}, { fields: {_id: true, username: true }}).fetch(); - }; + mention.getTotalChannelMembers = () => 5; }); it('should return nothing', () => { const message = { diff --git a/packages/rocketchat-push-notifications/server/methods/saveNotificationSettings.js b/packages/rocketchat-push-notifications/server/methods/saveNotificationSettings.js index c4d3cdb3dbbb..faee089e2c12 100644 --- a/packages/rocketchat-push-notifications/server/methods/saveNotificationSettings.js +++ b/packages/rocketchat-push-notifications/server/methods/saveNotificationSettings.js @@ -12,13 +12,40 @@ Meteor.methods({ updateMethod: (subscription, value) => RocketChat.models.Subscriptions.updateAudioNotificationsById(subscription._id, value) }, 'desktopNotifications': { - updateMethod: (subscription, value) => RocketChat.models.Subscriptions.updateDesktopNotificationsById(subscription._id, value) + updateMethod: (subscription, value) => { + if (value === 'default') { + const userPref = RocketChat.getUserNotificationPreference(Meteor.userId(), 'desktop'); + RocketChat.models.Subscriptions.updateDesktopNotificationsById(subscription._id, userPref.origin === 'server' ? null : userPref); + } else { + RocketChat.models.Subscriptions.updateDesktopNotificationsById(subscription._id, { value, origin: 'subscription' }); + } + } }, 'mobilePushNotifications': { - updateMethod: (subscription, value) => RocketChat.models.Subscriptions.updateMobilePushNotificationsById(subscription._id, value) + updateMethod: (subscription, value) => { + if (value === 'default') { + const userPref = RocketChat.getUserNotificationPreference(Meteor.userId(), 'mobile'); + RocketChat.models.Subscriptions.updateMobilePushNotificationsById(subscription._id, userPref.origin === 'server' ? null : userPref); + } else { + RocketChat.models.Subscriptions.updateMobilePushNotificationsById(subscription._id, { value, origin: 'subscription' }); + } + } }, 'emailNotifications': { - updateMethod: (subscription, value) => RocketChat.models.Subscriptions.updateEmailNotificationsById(subscription._id, value) + updateMethod: (subscription, value) => { + if (value === 'default') { + const userPref = RocketChat.getUserNotificationPreference(Meteor.userId(), 'email'); + RocketChat.models.Subscriptions.updateEmailNotificationsById(subscription._id, userPref.origin === 'server' ? null : userPref); + } else { + // Keep compatibility with old values + if (value === 'all') { + value = 'mentions'; + } else if (value === 'disabled') { + value = 'nothing'; + } + RocketChat.models.Subscriptions.updateEmailNotificationsById(subscription._id, { value, origin: 'subscription' }); + } + } }, 'unreadAlert': { updateMethod: (subscription, value) => RocketChat.models.Subscriptions.updateUnreadAlertById(subscription._id, value) diff --git a/packages/rocketchat-push-notifications/server/models/Subscriptions.js b/packages/rocketchat-push-notifications/server/models/Subscriptions.js index ce988d39a332..c8857988e114 100644 --- a/packages/rocketchat-push-notifications/server/models/Subscriptions.js +++ b/packages/rocketchat-push-notifications/server/models/Subscriptions.js @@ -35,10 +35,16 @@ RocketChat.models.Subscriptions.updateDesktopNotificationsById = function(_id, d const update = {}; - if (desktopNotifications === 'default') { - update.$unset = { desktopNotifications: 1 }; + if (desktopNotifications === null) { + update.$unset = { + desktopNotifications: 1, + desktopPrefOrigin: 1 + }; } else { - update.$set = { desktopNotifications }; + update.$set = { + desktopNotifications: desktopNotifications.value, + desktopPrefOrigin: desktopNotifications.origin + }; } return this.update(query, update); @@ -65,10 +71,16 @@ RocketChat.models.Subscriptions.updateMobilePushNotificationsById = function(_id const update = {}; - if (mobilePushNotifications === 'default') { - update.$unset = { mobilePushNotifications: 1 }; + if (mobilePushNotifications === null) { + update.$unset = { + mobilePushNotifications: 1, + mobilePrefOrigin: 1 + }; } else { - update.$set = { mobilePushNotifications }; + update.$set = { + mobilePushNotifications: mobilePushNotifications.value, + mobilePrefOrigin: mobilePushNotifications.origin + }; } return this.update(query, update); @@ -79,11 +91,19 @@ RocketChat.models.Subscriptions.updateEmailNotificationsById = function(_id, ema _id }; - const update = { - $set: { - emailNotifications - } - }; + const update = {}; + + if (emailNotifications === null) { + update.$unset = { + emailNotifications: 1, + emailPrefOrigin: 1 + }; + } else { + update.$set = { + emailNotifications: emailNotifications.value, + emailPrefOrigin: emailNotifications.origin + }; + } return this.update(query, update); }; @@ -189,27 +209,6 @@ RocketChat.models.Subscriptions.findDontNotifyMobileUsersByRoomId = function(roo return this.find(query); }; -RocketChat.models.Subscriptions.findNotificationPreferencesByRoom = function(roomId, explicit) { - const query = { - rid: roomId, - 'u._id': {$exists: true} - }; - - if (explicit) { - query.$or = [ - {audioNotifications: {$exists: true}}, - {audioNotificationValue: {$exists: true}}, - {desktopNotifications: {$exists: true}}, - {desktopNotificationDuration: {$exists: true}}, - {mobilePushNotifications: {$exists: true}}, - {disableNotifications: {$exists: true}}, - {muteGroupMentions: {$exists: true}} - ]; - } - - return this.find(query, { fields: { 'u._id': 1, audioNotifications: 1, audioNotificationValue: 1, desktopNotificationDuration: 1, desktopNotifications: 1, mobilePushNotifications: 1, disableNotifications: 1, muteGroupMentions: 1 } }); -}; - RocketChat.models.Subscriptions.findWithSendEmailByRoomId = function(roomId) { const query = { rid: roomId, @@ -220,3 +219,48 @@ RocketChat.models.Subscriptions.findWithSendEmailByRoomId = function(roomId) { return this.find(query, { fields: { emailNotifications: 1, u: 1 } }); }; + + +RocketChat.models.Subscriptions.findNotificationPreferencesByRoom = function(query/*{ roomId: rid, desktopFilter: desktopNotifications, mobileFilter: mobilePushNotifications, emailFilter: emailNotifications }*/) { + + return this._db.find(query, { + fields: { + 'u._id': 1, + audioNotifications: 1, + audioNotificationValue: 1, + desktopNotificationDuration: 1, + desktopNotifications: 1, + mobilePushNotifications: 1, + emailNotifications: 1, + disableNotifications: 1, + muteGroupMentions: 1, + userHighlights: 1 + } + }); +}; + +RocketChat.models.Subscriptions.findAllMessagesNotificationPreferencesByRoom = function(roomId) { + const query = { + rid: roomId, + 'u._id': {$exists: true}, + $or: [ + { desktopNotifications: { $in: ['all', 'mentions'] } }, + { mobilePushNotifications: { $in: ['all', 'mentions'] } }, + { emailNotifications: { $in: ['all', 'mentions'] } } + ] + }; + + return this._db.find(query, { + fields: { + 'u._id': 1, + audioNotifications: 1, + audioNotificationValue: 1, + desktopNotificationDuration: 1, + desktopNotifications: 1, + mobilePushNotifications: 1, + emailNotifications: 1, + disableNotifications: 1, + muteGroupMentions: 1 + } + }); +}; diff --git a/packages/rocketchat-setup-wizard/client/setupWizard.html b/packages/rocketchat-setup-wizard/client/setupWizard.html new file mode 100644 index 000000000000..6f082939f37c --- /dev/null +++ b/packages/rocketchat-setup-wizard/client/setupWizard.html @@ -0,0 +1,196 @@ + + + diff --git a/packages/rocketchat-setup-wizard/client/setupWizard.js b/packages/rocketchat-setup-wizard/client/setupWizard.js new file mode 100644 index 000000000000..445cb3b504c9 --- /dev/null +++ b/packages/rocketchat-setup-wizard/client/setupWizard.js @@ -0,0 +1,304 @@ +import s from 'underscore.string'; + +const setSettingsAndGo = (settings, registerServer = true) => { + const settingsFilter = Object.entries(settings) + .filter(([key]) => !/registration-|registerServer|currentStep/.test(key)) + .map(([_id, value]) => ({_id, value})); + + settingsFilter.push({ + _id: 'Statistics_reporting', + value: registerServer + }); + + RocketChat.settings.batchSet(settingsFilter, function(err) { + if (err) { + return handleError(err); + } + + localStorage.setItem('wizardFinal', true); + FlowRouter.go('setup-wizard-final'); + }); +}; + +Template.setupWizard.onCreated(function() { + const userId = Meteor.userId(); + + this.autorun((c) => { + const Show_Setup_Wizard = RocketChat.settings.get('Show_Setup_Wizard'); + const user = Meteor.user(); + + // Wait for roles and setup wizard setting + if ((userId && (!user || !user.status)) || !Show_Setup_Wizard) { + return; + } + + c.stop(); + + if ((!userId && Show_Setup_Wizard !== 'pending') || Show_Setup_Wizard === 'completed' || (userId && !RocketChat.authz.hasRole(userId, 'admin'))) { + FlowRouter.go('home'); + } + }); + + if (localStorage.getItem('wizardFinal')) { + FlowRouter.go('setup-wizard-final'); + } + + this.hasAdmin = new ReactiveVar(false); + this.state = new ReactiveDict(); + this.wizardSettings = new ReactiveVar([]); + this.invalidEmail = new ReactiveVar(false); + + const storage = JSON.parse(localStorage.getItem('wizard')); + if (storage) { + Object.entries(storage).forEach(([key, value]) => { + this.state.set(key, value); + }); + } + + this.autorun(() => { + const user = Meteor.user(); + if (user) { + if (!this.hasAdmin.get()) { + if (user.roles && user.roles.includes('admin')) { + this.state.set('currentStep', 2); + this.hasAdmin.set(true); + } else { + this.hasAdmin.set(false); + } + } + + Meteor.call('getWizardSettings', (error, result) => { + if (error) { + return handleError(error); + } + + this.wizardSettings.set(result); + }); + } else { + this.state.set('currentStep', 1); + } + + if (RocketChat.settings.get('Show_Setup_Wizard') === 'completed') { + FlowRouter.go('home'); + } + + const states = this.state.all(); + states['registration-pass'] = ''; + localStorage.setItem('wizard', JSON.stringify(states)); + }); +}); + +Template.setupWizard.onRendered(function() { + $('#initial-page-loading').remove(); +}); + +Template.setupWizard.events({ + 'click .setup-wizard-forms__footer-next'(e, t) { + const currentStep = t.state.get('currentStep'); + const hasAdmin = t.hasAdmin.get(); + + if (!hasAdmin && currentStep === 1) { + const emailValue = t.state.get('registration-email'); + const invalidEmail = !/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]+\b/i.test(emailValue); + t.invalidEmail.set(invalidEmail); + + if (invalidEmail) { + return false; + } + + const state = t.state.all(); + const registration = Object.entries(state).filter(([key]) => /registration-/.test(key)); + const registrationData = Object.assign(...registration.map(d => ({[d[0].replace('registration-', '')]: d[1]}))); + + Meteor.call('registerUser', registrationData, error => { + if (error) { + return handleError(error); + } + + RocketChat.callbacks.run('userRegistered'); + + Meteor.loginWithPassword(s.trim(registrationData.email), registrationData.pass, error => { + if (error && error.error === 'error-invalid-email') { + toastr.success(t('We_have_sent_registration_email')); + return false; + } + + Session.set('forceLogin', false); + + Meteor.call('setUsername', registrationData.username, error => { + if (error) { + return handleError(error); + } + + RocketChat.callbacks.run('usernameSet'); + }); + }); + }); + } + + if (hasAdmin && currentStep === 3) { + setSettingsAndGo(t.state.all()); + return false; + } + + if (currentStep === 4) { + setSettingsAndGo(t.state.all(), JSON.parse(t.state.get('registerServer') || true)); + + return false; + } + + t.state.set('currentStep', currentStep + 1); + }, + 'click .setup-wizard-forms__footer-back'(e, t) { + t.state.set('currentStep', t.state.get('currentStep') - 1); + }, + 'input .js-setting-data'(e, t) { + t.state.set(e.currentTarget.name, e.currentTarget.value); + } +}); + +Template.setupWizard.helpers({ + currentStep() { + return Template.instance().state.get('currentStep'); + }, + itemModifier(step) { + const current = Template.instance().state.get('currentStep'); + + if (current === step) { + return 'setup-wizard-info__steps-item--active'; + } + + if (current > step) { + return 'setup-wizard-info__steps-item--past'; + } + + return ''; + }, + getValue(name) { + return Template.instance().state.get(name); + }, + selectedValue(setting, optionValue) { + return Template.instance().state.get(setting) === optionValue; + }, + isDisabled() { + const user = Meteor.user(); + if (user && user.roles && !user.roles.includes('admin')) { + return 'disabled'; + } + + if (Template.instance().state.get('currentStep') === 1) { + const state = Template.instance().state.all(); + + if (Object.entries(state).filter(([key, value]) => /registration-/.test(key) && !value).length) { + return 'disabled'; + } + } + + return ''; + }, + headerTitle(step) { + if (!step) { + step = Template.instance().state.get('currentStep'); + } + + switch (step) { + case 1: return t('Admin_Info'); + case 2: return t('Organization_Info'); + case 3: return t('Server_Info'); + case 4: return t('Register_Server'); + } + }, + showStep() { + const currentStep = Template.instance().state.get('currentStep'); + if (currentStep === 2 || currentStep === 3) { + return 'setup-wizard-forms__content-step--active'; + } + + return ''; + }, + getSettings(step) { + return Template.instance().wizardSettings.get() + .filter(setting => setting.wizard.step === step) + .sort((a, b) => a.wizard.order - b.wizard.order); + }, + languages() { + const languages = TAPi18n.getLanguages(); + + const result = Object.entries(languages).map(language => { + const obj = language[1]; + obj.key = language[0]; + return obj; + }).sort((a, b) => a.key - b.key); + + result.unshift({ + 'name': 'Default', + 'en': 'Default', + 'key': '' + }); + + return result; + }, + hasAdmin() { + return Template.instance().hasAdmin.get(); + }, + invalidEmail() { + return Template.instance().invalidEmail.get(); + }, + showBackButton() { + if (Template.instance().hasAdmin.get()) { + if (Template.instance().state.get('currentStep') > 2) { + return true; + } + + return false; + } + + if (Template.instance().state.get('currentStep') > 1) { + return true; + } + + return false; + } +}); + +Template.setupWizardFinal.onCreated(function() { + this.autorun(() => { + const userId = Meteor.userId(); + + this.autorun((c) => { + const Show_Setup_Wizard = RocketChat.settings.get('Show_Setup_Wizard'); + const user = Meteor.user(); + + // Wait for roles and setup wizard setting + if ((userId && (!user || !user.status)) || !Show_Setup_Wizard) { + return; + } + + c.stop(); + + if ((!userId && Show_Setup_Wizard !== 'pending') || Show_Setup_Wizard === 'completed' || (userId && !RocketChat.authz.hasRole(userId, 'admin'))) { + FlowRouter.go('home'); + } + }); + }); +}); + +Template.setupWizardFinal.onRendered(function() { + $('#initial-page-loading').remove(); +}); + +Template.setupWizardFinal.events({ + 'click .js-finish'() { + RocketChat.settings.set('Show_Setup_Wizard', 'completed', function() { + localStorage.removeItem('wizard'); + localStorage.removeItem('wizardFinal'); + FlowRouter.go('home'); + }); + } +}); + +Template.setupWizardFinal.helpers({ + siteUrl() { + return RocketChat.settings.get('Site_Url'); + } +}); diff --git a/packages/rocketchat-setup-wizard/package.js b/packages/rocketchat-setup-wizard/package.js new file mode 100644 index 000000000000..b9d07f3caeb3 --- /dev/null +++ b/packages/rocketchat-setup-wizard/package.js @@ -0,0 +1,17 @@ +Package.describe({ + name: 'rocketchat:setup-wizard', + version: '0.0.1', + summary: '', + git: '' +}); + +Package.onUse(function(api) { + api.use('ecmascript'); + api.use('templating', 'client'); + api.use('rocketchat:theme'); + + api.addFiles('client/setupWizard.html', 'client'); + api.addFiles('client/setupWizard.js', 'client'); + + api.addFiles('server/lib/getWizardSettings.js', 'server'); +}); diff --git a/packages/rocketchat-setup-wizard/server/lib/getWizardSettings.js b/packages/rocketchat-setup-wizard/server/lib/getWizardSettings.js new file mode 100644 index 000000000000..918c3225bd23 --- /dev/null +++ b/packages/rocketchat-setup-wizard/server/lib/getWizardSettings.js @@ -0,0 +1,9 @@ +Meteor.methods({ + getWizardSettings() { + if (RocketChat.authz.hasRole(Meteor.userId(), 'admin') && RocketChat.models && RocketChat.models.Settings) { + return RocketChat.models.Settings.findSetupWizardSettings().fetch(); + } + + throw new Meteor.Error('settings-are-not-ready', 'Settings are not ready'); + } +}); diff --git a/packages/rocketchat-statistics/server/functions/get.js b/packages/rocketchat-statistics/server/functions/get.js index c0e069044a60..0d3e28e4e22c 100644 --- a/packages/rocketchat-statistics/server/functions/get.js +++ b/packages/rocketchat-statistics/server/functions/get.js @@ -2,9 +2,31 @@ import _ from 'underscore'; import os from 'os'; +const wizardFields = [ + 'Organization_Type', + 'Organization_Name', + 'Industry', + 'Size', + 'Country', + 'Website', + 'Site_Name', + 'Language', + 'Server_Type' +]; + RocketChat.statistics.get = function _getStatistics() { const statistics = {}; + // Setup Wizard + statistics.wizard = {}; + wizardFields.forEach(field => { + const record = RocketChat.models.Settings.findOne(field); + if (record) { + const wizardField = field.replace(/_/g, '').replace(field[0], field[0].toLowerCase()); + statistics.wizard[wizardField] = record.value; + } + }); + // Version statistics.uniqueId = RocketChat.settings.get('uniqueID'); if (RocketChat.models.Settings.findOne('uniqueID')) { diff --git a/packages/rocketchat-theme/client/imports/components/message-box.css b/packages/rocketchat-theme/client/imports/components/message-box.css index 18c3d15d9a35..4221b7f2eb1b 100644 --- a/packages/rocketchat-theme/client/imports/components/message-box.css +++ b/packages/rocketchat-theme/client/imports/components/message-box.css @@ -123,6 +123,7 @@ &__icon { display: flex; + flex: auto 0 0; width: 50px; height: 21px; diff --git a/packages/rocketchat-theme/client/imports/components/setup-wizard.css b/packages/rocketchat-theme/client/imports/components/setup-wizard.css new file mode 100644 index 000000000000..bcd08e3c6764 --- /dev/null +++ b/packages/rocketchat-theme/client/imports/components/setup-wizard.css @@ -0,0 +1,477 @@ +.setup-wizard { + display: flex; + + width: 100%; + height: 100%; + + background-color: #f7f8fa; + + justify-content: center; + + &-info { + flex: 0 1 auto; + + margin: 55px 65px 30px 80px; + + &__header{ + display: flex; + + margin: 0 -0.375rem 3rem; + align-items: center; + + &-logo { + margin: 0 0.375rem; + } + + &-tag { + margin: 0 0.375rem; + + padding: 4px 8px; + + letter-spacing: 0.05rem; + + text-transform: uppercase; + + color: #ffffff; + + border-radius: 50px; + background: #2f343d; + + font-size: 10px; + + line-height: 1rem; + } + } + + &__content { + &-title { + margin-bottom: 1rem; + + letter-spacing: 0.03rem; + + color: #2f343d; + + font-size: 2rem; + + font-weight: 600; + + line-height: 2.6rem; + } + + &-text { + margin-bottom: 3rem; + + color: #9ea2a8; + + font-size: 1rem; + + font-weight: 500; + + line-height: 1.5rem; + } + } + + &__steps { + counter-reset: steps; + + &-item { + position: relative; + + margin: 0 -0.5rem; + + counter-increment: steps; + + color: #d3d5d9; + + font-size: 0.875rem; + font-weight: 500; + + &:not(:last-child) { + margin-bottom: 2rem; + + &::after { + position: absolute; + bottom: -1rem; + left: 1.2rem; + + display: block; + + width: 1px; + height: 1rem; + + content: ""; + + background-color: #d3d5d9; + } + } + + &::before { + display: inline-flex; + + width: 1.5rem; + height: 1.5rem; + margin: 0 0.5rem; + + content: counter(steps); + + color: #d3d5d9; + + border: 1px solid #d3d5d9; + border-radius: 50px; + + font-size: 0.75rem; + align-items: center; + justify-content: center; + } + + &--active { + color: #1d74f5; + + &::before { + color: #1d74f5; + border-color: #1d74f5; + } + } + + &--past { + color: #2f343d; + + &::before { + color: #ffffff; + background-color: #1d74f5; + } + + &::after { + background-color: #1d74f5 !important; + } + + & .setup-wizard-info__steps-item-bonding { + background-color: #1d74f5; + } + } + + &-bonding { + position: absolute; + top: -1rem; + left: 1.2rem; + + display: block; + + width: 1px; + height: 1rem; + + background-color: currentColor; + } + } + } + } + + &-forms { + flex: 1 1 auto; + + &__wrapper { + display: flex; + overflow-y: auto; + + width: calc(100% - 1rem); + height: calc(100% - 2rem); + margin: 1rem 1rem 1rem 0; + + padding: 3rem; + + border-radius: 2px; + background: #ffffff; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.08); + justify-content: center; + } + + &__box { + display: flex; + flex-direction: column; + + width: 350px; + } + + &__header { + margin-bottom: 2rem; + + &-step { + display: block; + + margin-bottom: 3px; + + letter-spacing: 0.05rem; + + text-transform: uppercase; + + color: #caced1; + + font-size: 0.75rem; + + line-height: 1.125rem; + } + + &-title { + letter-spacing: 0.05rem; + + color: #1f2329; + + font-size: 1.25rem; + font-weight: 500; + + line-height: 1.75rem; + } + } + + &__content { + margin-bottom: 2rem; + + &-step { + display: none; + + &--active { + display: block; + } + } + + &-text { + + margin-bottom: 2rem; + + color: #9ea2a8; + + font-size: 1rem; + font-weight: 500; + + line-height: 1.5rem; + } + + &-register { + display: flex; + flex-direction: column; + + &-option { + + display: block; + + padding: 1.5rem; + + cursor: pointer; + + color: #2f343d; + border: 1px solid #e7ebf2; + + border-radius: 2px; + + font-size: 0.875rem; + + line-height: 1.25rem; + + &:first-child { + margin-bottom: 1rem; + } + } + + &-radio { + position: relative; + + display: flex; + + margin: 0 -0.5rem 1rem; + + &-element { + position: absolute; + z-index: -1; + top: 0; + left: 0; + + width: 0; + height: 0; + + &:checked + .setup-wizard-forms__content-register-radio-fake { + + position: relative; + + border-color: #1d74f5; + + &::before { + position: absolute; + + top: 3px; + left: 3px; + + width: 12px; + height: 12px; + + content: ""; + + border-radius: 50%; + + background-color: #1d74f5; + } + } + } + + &-fake { + display: block; + + width: 20px; + height: 20px; + margin: 0 0.5rem; + + border: 1px solid #cfd8e6; + border-radius: 50px; + } + + &-text { + font-weight: 500; + } + } + + &-item { + + display: flex; + + margin: 0 -0.5rem 0.5rem; + align-items: center; + + &:last-child { + margin-bottom: 0; + } + + & .setup-wizard-forms__content-register-radio-icon { + margin: 0 calc(4px + 0.5rem); + + font-size: 10px; + } + + & .setup-wizard-forms__content-register-radio-icon--check { + color: #1d74f5; + } + } + } + } + + &__footer { + display: flex; + + margin: 0 -0.5rem; + + & .rc-button { + margin: 0 0.5rem; + } + } + } + + &-final { + width: 930px; + padding-top: 5rem; + + &__header { + margin-bottom: 5rem; + } + + &__box { + padding: 5rem 6rem; + + border-radius: 2px; + background: #ffffff; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.08); + + &-title { + margin-bottom: 3.25rem; + } + } + + &__link { + display: block; + + margin-bottom: 1.5rem; + + letter-spacing: 0; + + color: #1d74f5; + + font-size: 1rem; + + line-height: 1.5rem; + + &-text { + display:block; + + letter-spacing: 0.03rem; + + text-transform:uppercase; + + color: #2f343d; + + font-size: 0.625rem; + line-height: 1rem; + } + } + } + + & .rc-input { + &:not(:last-child) { + margin-bottom: 1.5rem; + } + + &__title { + letter-spacing: 0.03rem; + + text-transform: uppercase; + + color: #9ea2a8; + + font-size: 0.625rem; + + line-height: 1rem; + } + + &__element { + color: #030c1a; + + font-weight: 500; + } + } + + & .rc-select { + &__element { + color: #030c1a; + + font-size: 0.875rem; + + font-weight: 500; + } + } +} + +.rtl { + & .setup-wizard-info { + margin: 55px 80px 0 65px; + } + + & .setup-wizard-forms__wrapper { + margin: 1rem 0 1rem 1rem; + } + + & .setup-wizard-info__steps-item { + &:not(:last-child)::after, + &-bonding { + right: 1.2rem; + left: auto; + } + } +} + +@media (width <= 760px) { + .setup-wizard { + flex-direction: column; + justify-content: initial; + + & .setup-wizard-forms__wrapper { + margin: 0; + width: 100%; + } + } +} diff --git a/packages/rocketchat-theme/client/imports/forms/input.css b/packages/rocketchat-theme/client/imports/forms/input.css index ded7b0869ba8..4e38aabf2ba8 100644 --- a/packages/rocketchat-theme/client/imports/forms/input.css +++ b/packages/rocketchat-theme/client/imports/forms/input.css @@ -187,6 +187,10 @@ display: none; } + &__description { + font-size: 0.875rem; + color: var(--color-gray); + } } select.rc-input { diff --git a/packages/rocketchat-theme/client/imports/forms/select.css b/packages/rocketchat-theme/client/imports/forms/select.css index 4f571c8b1fdd..d1a1a9db56cd 100644 --- a/packages/rocketchat-theme/client/imports/forms/select.css +++ b/packages/rocketchat-theme/client/imports/forms/select.css @@ -25,28 +25,28 @@ &__arrow { position: absolute; - z-index: -1; margin: 0 -5px; + pointer-events: none; + color: var(--color-gray-light); font-size: 20px; } &__element { + width: 100%; padding: 0.75rem 2rem 0.75rem 1rem; text-transform: capitalize; border: none; - appearance: none; - - width: 100%; - line-height: 1rem !important; + appearance: none; + &::-ms-expand { display: none; } diff --git a/packages/rocketchat-theme/client/main.css b/packages/rocketchat-theme/client/main.css index 7217194f40ce..4ac78a1175b0 100644 --- a/packages/rocketchat-theme/client/main.css +++ b/packages/rocketchat-theme/client/main.css @@ -25,6 +25,7 @@ @import 'imports/components/sidebar/rooms-list.css'; /* Main */ +@import 'imports/components/setup-wizard.css'; @import 'imports/components/flex-nav.css'; @import 'imports/components/header.css'; @import 'imports/components/memberlist.css'; diff --git a/packages/rocketchat-ui-account/client/accountPreferences.html b/packages/rocketchat-ui-account/client/accountPreferences.html index ac820da9c198..0724412ac6b1 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.html +++ b/packages/rocketchat-ui-account/client/accountPreferences.html @@ -107,8 +107,9 @@

{{_ "Notifications"}}

{{> icon block="rc-select__arrow" icon="arrow-down" }}
@@ -319,7 +320,7 @@

{{_ "My Data"}}

- + {{/if}} diff --git a/packages/rocketchat-ui-account/client/accountPreferences.js b/packages/rocketchat-ui-account/client/accountPreferences.js index 9dcbb99ff2b6..ee278a7ff36a 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.js +++ b/packages/rocketchat-ui-account/client/accountPreferences.js @@ -9,6 +9,11 @@ const notificationLabels = { nothing: 'Nothing' }; +const emailLabels = { + nothing: 'Email_Notification_Mode_Disabled', + mentions: 'Email_Notification_Mode_All' +}; + function checkedSelected(property, value, defaultValue=undefined) { if (defaultValue && defaultValue.hash) { defaultValue = undefined; @@ -84,6 +89,9 @@ Template.accountPreferences.helpers({ defaultMobileNotification() { return notificationLabels[RocketChat.settings.get('Accounts_Default_User_Preferences_mobileNotifications')]; }, + defaultEmailNotification() { + return emailLabels[RocketChat.settings.get('Accounts_Default_User_Preferences_emailNotificationMode')]; + }, showRoles() { return RocketChat.settings.get('UI_DisplayRoles'); }, diff --git a/packages/rocketchat-ui-admin/client/admin.js b/packages/rocketchat-ui-admin/client/admin.js index 5553324ade1c..13df0142f726 100644 --- a/packages/rocketchat-ui-admin/client/admin.js +++ b/packages/rocketchat-ui-admin/client/admin.js @@ -84,17 +84,18 @@ Template.admin.helpers({ languages() { const languages = TAPi18n.getLanguages(); - let result = Object.keys(languages).map(key => { - const language = languages[key]; - return _.extend(language, { key }); - }); + const result = Object.entries(languages).map(language => { + const obj = language[1]; + obj.key = language[0]; + return obj; + }).sort((a, b) => a.key - b.key); - result = _.sortBy(result, 'key'); result.unshift({ 'name': 'Default', 'en': 'Default', 'key': '' }); + return result; }, appLanguage(key) { diff --git a/packages/rocketchat-ui-master/client/main.html b/packages/rocketchat-ui-master/client/main.html index 4b9ddfe0b466..e33014d7148f 100644 --- a/packages/rocketchat-ui-master/client/main.html +++ b/packages/rocketchat-ui-master/client/main.html @@ -24,43 +24,45 @@