From 130c36241a64b5930c26bb2da9194b1c301e603e Mon Sep 17 00:00:00 2001 From: Ashwani Yadav Date: Tue, 7 Jan 2020 19:45:13 +0530 Subject: [PATCH 001/392] [UI] Correctly alligned input element of custom user status component --- app/user-status/client/admin/userStatusEdit.css | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 app/user-status/client/admin/userStatusEdit.css diff --git a/app/user-status/client/admin/userStatusEdit.css b/app/user-status/client/admin/userStatusEdit.css new file mode 100644 index 000000000000..c0ee2b4d357e --- /dev/null +++ b/app/user-status/client/admin/userStatusEdit.css @@ -0,0 +1,3 @@ +.rc-select { + margin: .5rem 0; +} \ No newline at end of file From fc36da847304147fb3f1c07affef97104840d874 Mon Sep 17 00:00:00 2001 From: Ashwani Yadav Date: Tue, 7 Jan 2020 20:36:47 +0530 Subject: [PATCH 002/392] fixed linting issue --- app/user-status/client/admin/userStatusEdit.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/user-status/client/admin/userStatusEdit.css b/app/user-status/client/admin/userStatusEdit.css index c0ee2b4d357e..dc28b423d765 100644 --- a/app/user-status/client/admin/userStatusEdit.css +++ b/app/user-status/client/admin/userStatusEdit.css @@ -1,3 +1,3 @@ .rc-select { - margin: .5rem 0; -} \ No newline at end of file + margin: 0.5rem 0; +} From 57d9cf043c930b113dd18bfae6cb27d6d633920c Mon Sep 17 00:00:00 2001 From: Ashwani Yadav Date: Wed, 8 Jan 2020 02:34:18 +0530 Subject: [PATCH 003/392] added wrapper div --- .../client/admin/userStatusEdit.css | 3 --- .../client/admin/userStatusEdit.html | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) delete mode 100644 app/user-status/client/admin/userStatusEdit.css diff --git a/app/user-status/client/admin/userStatusEdit.css b/app/user-status/client/admin/userStatusEdit.css deleted file mode 100644 index dc28b423d765..000000000000 --- a/app/user-status/client/admin/userStatusEdit.css +++ /dev/null @@ -1,3 +0,0 @@ -.rc-select { - margin: 0.5rem 0; -} diff --git a/app/user-status/client/admin/userStatusEdit.html b/app/user-status/client/admin/userStatusEdit.html index 70a4ff47cd28..0c4bd9b21f42 100644 --- a/app/user-status/client/admin/userStatusEdit.html +++ b/app/user-status/client/admin/userStatusEdit.html @@ -21,14 +21,16 @@

{{_ "Custom_User_Status_Add"}}

diff --git a/app/ui-vrecord/client/vrecord.js b/app/ui-vrecord/client/vrecord.js index 0f08cc8bb73a..0ec29598ff2a 100644 --- a/app/ui-vrecord/client/vrecord.js +++ b/app/ui-vrecord/client/vrecord.js @@ -24,20 +24,43 @@ Template.vrecDialog.helpers({ recordDisabled() { return VideoRecorder.cameraStarted.get() ? '' : 'disabled'; }, + + time() { + return Template.instance().time.get(); + }, + }); +const recordingInterval = new ReactiveVar(null); Template.vrecDialog.events({ - 'click .vrec-dialog .cancel'() { + 'click .vrec-dialog .cancel'(e, t) { VideoRecorder.stop(); VRecDialog.close(); + t.time.set('00:00'); + if (recordingInterval.get()) { + clearInterval(recordingInterval.get()); + recordingInterval.set(null); + } }, - 'click .vrec-dialog .record'() { + 'click .vrec-dialog .record'(e, t) { if (VideoRecorder.recording.get()) { VideoRecorder.stopRecording(); + if (recordingInterval.get()) { + clearInterval(recordingInterval.get()); + recordingInterval.set(null); + } } else { VideoRecorder.record(); + const startTime = new Date(); + recordingInterval.set(setInterval(() => { + const now = new Date(); + const distance = (now.getTime() - startTime.getTime()) / 1000; + const minutes = Math.floor(distance / 60); + const seconds = Math.floor(distance % 60); + t.time.set(`${ String(minutes).padStart(2, '0') }:${ String(seconds).padStart(2, '0') }`); + }, 1000)); } }, @@ -48,6 +71,11 @@ Template.vrecDialog.events({ VRecDialog.close(); }; VideoRecorder.stop(cb); + instance.time.set('00:00'); + if (recordingInterval.get()) { + clearInterval(recordingInterval.get()); + recordingInterval.set(null); + } }, }); @@ -58,6 +86,7 @@ Template.vrecDialog.onCreated(function() { this.rid = new ReactiveVar(); this.tmid = new ReactiveVar(); this.input = new ReactiveVar(); + this.time = new ReactiveVar('00:00'); this.update = ({ rid, tmid, input }) => { this.rid.set(rid); this.tmid.set(tmid); From 6369c1b4ffa964960e5187e4b47bb53636a14cfb Mon Sep 17 00:00:00 2001 From: Ashwani Yadav Date: Wed, 15 Jan 2020 04:11:34 +0530 Subject: [PATCH 008/392] removed 00:00 --- app/ui-vrecord/client/vrecord.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/ui-vrecord/client/vrecord.js b/app/ui-vrecord/client/vrecord.js index 0ec29598ff2a..c476ffadff00 100644 --- a/app/ui-vrecord/client/vrecord.js +++ b/app/ui-vrecord/client/vrecord.js @@ -37,7 +37,7 @@ Template.vrecDialog.events({ 'click .vrec-dialog .cancel'(e, t) { VideoRecorder.stop(); VRecDialog.close(); - t.time.set('00:00'); + t.time.set(''); if (recordingInterval.get()) { clearInterval(recordingInterval.get()); recordingInterval.set(null); @@ -53,6 +53,7 @@ Template.vrecDialog.events({ } } else { VideoRecorder.record(); + t.time.set('00:00'); const startTime = new Date(); recordingInterval.set(setInterval(() => { const now = new Date(); @@ -71,7 +72,7 @@ Template.vrecDialog.events({ VRecDialog.close(); }; VideoRecorder.stop(cb); - instance.time.set('00:00'); + instance.time.set(''); if (recordingInterval.get()) { clearInterval(recordingInterval.get()); recordingInterval.set(null); @@ -86,7 +87,7 @@ Template.vrecDialog.onCreated(function() { this.rid = new ReactiveVar(); this.tmid = new ReactiveVar(); this.input = new ReactiveVar(); - this.time = new ReactiveVar('00:00'); + this.time = new ReactiveVar(''); this.update = ({ rid, tmid, input }) => { this.rid.set(rid); this.tmid.set(tmid); From 21350b034b87ba915859fa2b1da303457b979956 Mon Sep 17 00:00:00 2001 From: ritwizsinha Date: Fri, 24 Jan 2020 01:54:57 +0530 Subject: [PATCH 009/392] fix bug that was making us to reload the page after cancel was clicked on editing --- app/ui/client/lib/chatMessages.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/ui/client/lib/chatMessages.js b/app/ui/client/lib/chatMessages.js index 27b7b8bcb659..801f79329d3a 100644 --- a/app/ui/client/lib/chatMessages.js +++ b/app/ui/client/lib/chatMessages.js @@ -470,6 +470,12 @@ export class ChatMessages { this.deleteMsg(message); + this.$input.focus(); + done(); + }, () => { + if (this.editing.id === message._id) { + this.clearEditing(); + } this.$input.focus(); done(); }); From f266501f591a83a9135838d4cc100b34a98de033 Mon Sep 17 00:00:00 2001 From: ritwizsinha Date: Fri, 24 Jan 2020 21:43:59 +0530 Subject: [PATCH 010/392] Add message_pruned and file_pruned for singular file or message deleted --- app/ui-clean-history/client/views/cleanHistory.html | 12 ++++++++++-- app/ui-clean-history/client/views/cleanHistory.js | 6 ++++++ packages/rocketchat-i18n/i18n/en.i18n.json | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/ui-clean-history/client/views/cleanHistory.html b/app/ui-clean-history/client/views/cleanHistory.html index 1d3705626d20..fc27ec5ab472 100644 --- a/app/ui-clean-history/client/views/cleanHistory.html +++ b/app/ui-clean-history/client/views/cleanHistory.html @@ -133,9 +133,17 @@
{{#unless filesOnly}} - {{_ "messages_pruned"}} + {{#if (isSingular prunedCount)}} + {{_ "message_pruned"}} + {{else}} + {{_ "messages_pruned"}} + {{/if}} {{else}} - {{_ "files_pruned"}} + {{#if (isSingular prunedCount)}} + {{_ "file_pruned"}} + {{else}} + {{_ "files_pruned"}} + {{/if}} {{/unless}}
diff --git a/app/ui-clean-history/client/views/cleanHistory.js b/app/ui-clean-history/client/views/cleanHistory.js index 287bf18b66c5..b17d12026474 100644 --- a/app/ui-clean-history/client/views/cleanHistory.js +++ b/app/ui-clean-history/client/views/cleanHistory.js @@ -100,6 +100,12 @@ Template.cleanHistory.helpers({ items() { return Template.instance().ac.filteredList(); }, + isSingular(prunedCount) { + if (prunedCount === 1) { + return 1; + } + return 0; + }, }); Template.cleanHistory.onCreated(function() { diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index ab686de03f43..13237423fbe7 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -2555,7 +2555,9 @@ "Prune_Warning_between": "This will delete all %s in %s between %s and %s.", "Pruning_messages": "Pruning messages...", "Pruning_files": "Pruning files...", + "message_pruned": "message pruned", "messages_pruned": "messages pruned", + "file_pruned": "file pruned", "files_pruned": "files pruned", "Public": "Public", "Public_Channel": "Public Channel", From 6e8d132437df73d7e483d3015c1e7e38c6ededc7 Mon Sep 17 00:00:00 2001 From: ritwizsinha Date: Fri, 24 Jan 2020 22:10:42 +0530 Subject: [PATCH 011/392] Improved isSingular function --- app/ui-clean-history/client/views/cleanHistory.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/ui-clean-history/client/views/cleanHistory.js b/app/ui-clean-history/client/views/cleanHistory.js index b17d12026474..9f0112252fca 100644 --- a/app/ui-clean-history/client/views/cleanHistory.js +++ b/app/ui-clean-history/client/views/cleanHistory.js @@ -101,10 +101,7 @@ Template.cleanHistory.helpers({ return Template.instance().ac.filteredList(); }, isSingular(prunedCount) { - if (prunedCount === 1) { - return 1; - } - return 0; + return prunedCount === 1; }, }); From b3fad17e045f9a383738ee49919713dbc9d4d111 Mon Sep 17 00:00:00 2001 From: Ashwani Yadav Date: Wed, 29 Jan 2020 17:54:18 +0530 Subject: [PATCH 012/392] [BUG][FIX] If InternalHubot_Username is undefined then rocket.cat should be default bot --- app/ui/client/lib/chatMessages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/client/lib/chatMessages.js b/app/ui/client/lib/chatMessages.js index 27b7b8bcb659..a1e7a8b2cf5e 100644 --- a/app/ui/client/lib/chatMessages.js +++ b/app/ui/client/lib/chatMessages.js @@ -422,7 +422,7 @@ export class ChatMessages { ts: new Date(), msg: TAPi18n.__('No_such_command', { command: s.escapeHTML(match[1]) }), u: { - username: settings.get('InternalHubot_Username'), + username: settings.get('InternalHubot_Username') || 'rocket.cat', }, private: true, }; From 20839c29a41d461b14b038aeae036f54f468fc50 Mon Sep 17 00:00:00 2001 From: mrsimpson Date: Tue, 28 Jan 2020 23:08:14 +0100 Subject: [PATCH 013/392] Translation: Microsoft translate as new provider --- app/autotranslate/server/index.js | 1 + app/autotranslate/server/logger.js | 9 ++ app/autotranslate/server/msTranslate.js | 174 ++++++++++++++++++++++++ app/autotranslate/server/settings.js | 17 +++ 4 files changed, 201 insertions(+) create mode 100644 app/autotranslate/server/logger.js create mode 100644 app/autotranslate/server/msTranslate.js diff --git a/app/autotranslate/server/index.js b/app/autotranslate/server/index.js index 186115b06c6d..9b39ad99e453 100644 --- a/app/autotranslate/server/index.js +++ b/app/autotranslate/server/index.js @@ -13,6 +13,7 @@ import './methods/saveSettings'; import './methods/translateMessage'; import './googleTranslate.js'; import './deeplTranslate.js'; +import './msTranslate.js'; import './methods/getProviderUiMetadata.js'; export { diff --git a/app/autotranslate/server/logger.js b/app/autotranslate/server/logger.js new file mode 100644 index 000000000000..8f104e75e88c --- /dev/null +++ b/app/autotranslate/server/logger.js @@ -0,0 +1,9 @@ +import { Logger } from '../../logger'; + +export const logger = new Logger('AutoTranslate', { + sections: { + google: 'Google', + deepl: 'DeepL', + microsoft: 'Microsoft', + }, +}); diff --git a/app/autotranslate/server/msTranslate.js b/app/autotranslate/server/msTranslate.js new file mode 100644 index 000000000000..a299a4a927df --- /dev/null +++ b/app/autotranslate/server/msTranslate.js @@ -0,0 +1,174 @@ +/** + * @author Vigneshwaran Odayappan + */ + +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; +import { HTTP } from 'meteor/http'; +import _ from 'underscore'; + +import { TranslationProviderRegistry, AutoTranslate } from './autotranslate'; +import { logger } from './logger'; +import { settings } from '../../settings'; + +/** + * Microsoft translation service provider class representation. + * Encapsulates the service provider settings and information. + * Provides languages supported by the service provider. + * Resolves API call to service provider to resolve the translation request. + * @class + * @augments AutoTranslate + */ +class MsAutoTranslate extends AutoTranslate { + /** + * setup api reference to Microsoft translate to be used as message translation provider. + * @constructor + */ + constructor() { + super(); + this.name = 'microsoft-translate'; + this.apiEndPointUrl = 'https://api.cognitive.microsofttranslator.com/translate?api-version=3.0'; + this.apiDetectText = 'https://api.cognitive.microsofttranslator.com/detect?api-version=3.0'; + this.apiGetLanguages = 'https://api.cognitive.microsofttranslator.com/languages?api-version=3.0'; + this.breakSentence = 'https://api.cognitive.microsofttranslator.com/breaksentence?api-version=3.0'; + // Get the service provide API key. + settings.get('AutoTranslate_MicrosoftAPIKey', (key, value) => { + this.apiKey = value; + }); + } + + /** + * Returns metadata information about the service provide + * @private implements super abstract method. + * @return {object} + */ + _getProviderMetadata() { + return { + name: this.name, + displayName: TAPi18n.__('AutoTranslate_Microsoft'), + settings: this._getSettings(), + }; + } + + /** + * Returns necessary settings information about the translation service provider. + * @private implements super abstract method. + * @return {object} + */ + _getSettings() { + return { + apiKey: this.apiKey, + apiEndPointUrl: this.apiEndPointUrl, + }; + } + + /** + * Returns supported languages for translation by the active service provider. + * Microsoft does not provide an endpoint yet to retrieve the supported languages. + * So each supported languages are explicitly maintained. + * @private implements super abstract method. + * @param {string} target + * @returns {object} code : value pair + */ + getSupportedLanguages(target) { + if (this.autoTranslateEnabled && this.apiKey) { + if (this.supportedLanguages[target]) { + return this.supportedLanguages[target]; + } + const languages = HTTP.get(this.apiGetLanguages); + this.supportedLanguages[target] = Object.keys(languages.data.translation).map((language) => ({ + language, + name: languages.data.translation[language].name, + })); + return this.supportedLanguages[target || 'en']; + } + } + + /** + * Send Request REST API call to the service provider. + * Returns translated message for each target language in target languages. + * @private + * @param {object} message + * @param {object} targetLanguages + * @returns {object} translations: Translated messages for each language + */ + _translateMessage(message, targetLanguages) { + let translations = {}; + let msgs = message.msg.split('\n'); + msgs = msgs.map((msg) => ({ Text: msg })); + const supportedLanguages = this.getSupportedLanguages('en'); + targetLanguages = targetLanguages.map((language) => { + if (language.indexOf('-') !== -1 && !_.findWhere(supportedLanguages, { language })) { + language = language.substr(0, 2); + } + return language; + }); + const url = `${ this.apiEndPointUrl }&to=${ targetLanguages.join('&to=') }`; + try { + const result = HTTP.post(url, { + headers: { + 'Ocp-Apim-Subscription-Key': this.apiKey, + 'Content-Type': 'application/json; charset=UTF-8', + }, + data: msgs, + }); + + if (result.statusCode === 200 && result.data && result.data.length > 0) { + // store translation only when the source and target language are different. + // multiple lines might contain different languages => Mix the text between source and detected target if neccessary + translations = Object.assign({}, ...targetLanguages.map((language) => + ({ + [language]: result.data.map((line) => line.translations.find((translation) => translation.to === language).text).join('\n'), + }) + )); + } + } catch (e) { + logger.microsoft.error('Error translating message', e); + } + return translations; + } + + /** + * Returns translated message attachment description in target languages. + * @private + * @param {object} attachment + * @param {object} targetLanguages + * @returns {object} translated messages for each target language + */ + _translateAttachmentDescriptions(attachment, targetLanguages) { + let translations = {}; + const supportedLanguages = this.getSupportedLanguages('en'); + targetLanguages = targetLanguages.map((language) => { + if (language.indexOf('-') !== -1 && !_.findWhere(supportedLanguages, { language })) { + language = language.substr(0, 2); + } + return language; + }); + const url = `${ this.apiEndPointUrl }&to=${ targetLanguages.join('&to=') }`; + try { + const result = HTTP.post(url, { + headers: { + 'Ocp-Apim-Subscription-Key': this.apiKey, + 'Content-Type': 'application/json; charset=UTF-8', + }, + data: [{ + Text: attachment.description || attachment.text, + }], + }); + + if (result.statusCode === 200 && result.data && result.data.length > 0) { + // store translation only when the source and target language are different. + translations = Object.assign({}, ...targetLanguages.map((language) => + ({ + [language]: result.data.map((line) => line.translations.find((translation) => translation.to === language).text).join('\n'), + }) + )); + } + } catch (e) { + logger.microsoft.error('Error translating message attachment', e); + } + return translations; + } +} + +// Register Microsoft translation provider to the registry. +TranslationProviderRegistry.registerProvider(new MsAutoTranslate()); diff --git a/app/autotranslate/server/settings.js b/app/autotranslate/server/settings.js index 08e8f6c92f0b..e12e580453df 100644 --- a/app/autotranslate/server/settings.js +++ b/app/autotranslate/server/settings.js @@ -20,6 +20,9 @@ Meteor.startup(function() { }, { key: 'deepl-translate', i18nLabel: 'AutoTranslate_DeepL', + }, { + key: 'microsoft-translate', + i18nLabel: 'AutoTranslate_Microsoft', }], enableQuery: [{ _id: 'AutoTranslate_Enabled', value: true }], i18nLabel: 'AutoTranslate_ServiceProvider', @@ -54,4 +57,18 @@ Meteor.startup(function() { _id: 'AutoTranslate_ServiceProvider', value: 'deepl-translate', }], }); + + settings.add('AutoTranslate_MicrosoftAPIKey', '', { + type: 'string', + group: 'Message', + section: 'AutoTranslate_Microsoft', + public: true, + i18nLabel: 'AutoTranslate_APIKey', + enableQuery: [ + { + _id: 'AutoTranslate_Enabled', value: true, + }, { + _id: 'AutoTranslate_ServiceProvider', value: 'microsoft-translate', + }], + }); }); From fbd56089581da8426b633e0d8812ba1c99de134d Mon Sep 17 00:00:00 2001 From: mrsimpson Date: Tue, 28 Jan 2020 23:08:38 +0100 Subject: [PATCH 014/392] Translation: Display translation provider --- app/models/server/models/Messages.js | 4 ++-- app/ui-message/client/message.html | 1 + app/ui-message/client/message.js | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/server/models/Messages.js b/app/models/server/models/Messages.js index 99c2d7951d30..8d8c6f30a35d 100644 --- a/app/models/server/models/Messages.js +++ b/app/models/server/models/Messages.js @@ -108,8 +108,8 @@ export class Messages extends Base { return this.createWithTypeRoomIdMessageAndUser('r', roomId, roomName, user, extraData); } - addTranslations(messageId, translations) { - const updateObj = {}; + addTranslations(messageId, translations, providerName) { + const updateObj = { translationProvider: providerName }; Object.keys(translations).forEach((key) => { const translation = translations[key]; updateObj[`translations.${ key }`] = translation; diff --git a/app/ui-message/client/message.html b/app/ui-message/client/message.html index 302d5369ffc2..f9bf14517a32 100644 --- a/app/ui-message/client/message.html +++ b/app/ui-message/client/message.html @@ -44,6 +44,7 @@ {{#if showTranslated}} + {{ translationProvider }} {{/if}} {{#if msg.sentByEmail}} diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index 84f53cc5d9c8..d8c9fd3ea5b3 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -16,6 +16,7 @@ import { upsertMessage } from '../../ui-utils/client/lib/RoomHistoryManager'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import './message.html'; import './messageThread.html'; +import { AutoTranslate } from '../../autotranslate/client'; async function renderPdfToCanvas(canvasId, pdfLink) { const isSafari = /constructor/i.test(window.HTMLElement) @@ -251,6 +252,11 @@ Template.message.helpers({ return msg.autoTranslateFetching || (!!autoTranslate !== !!msg.autoTranslateShowInverse && msg.translations && msg.translations[settings.translateLanguage]); } }, + translationProvider() { + const instance = Template.instance(); + const { translationProvider } = instance.data.msg; + return translationProvider && AutoTranslate.providersMetadata[translationProvider].displayName; + }, edited() { return Template.instance().wasEdited; }, From 571be134408513bd156af0554f55dc6c1b98e0fd Mon Sep 17 00:00:00 2001 From: mrsimpson Date: Tue, 28 Jan 2020 23:28:13 +0100 Subject: [PATCH 015/392] Linting --- app/autotranslate/server/msTranslate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/autotranslate/server/msTranslate.js b/app/autotranslate/server/msTranslate.js index a299a4a927df..4e73f106b3ee 100644 --- a/app/autotranslate/server/msTranslate.js +++ b/app/autotranslate/server/msTranslate.js @@ -118,7 +118,7 @@ class MsAutoTranslate extends AutoTranslate { translations = Object.assign({}, ...targetLanguages.map((language) => ({ [language]: result.data.map((line) => line.translations.find((translation) => translation.to === language).text).join('\n'), - }) + }), )); } } catch (e) { @@ -160,7 +160,7 @@ class MsAutoTranslate extends AutoTranslate { translations = Object.assign({}, ...targetLanguages.map((language) => ({ [language]: result.data.map((line) => line.translations.find((translation) => translation.to === language).text).join('\n'), - }) + }), )); } } catch (e) { From 7205fc43a277728f1c37ba6771665abf6cf675b8 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 14 Feb 2020 23:04:50 -0300 Subject: [PATCH 016/392] Bump version to 3.1.0-develop --- .docker/Dockerfile.rhel | 2 +- app/utils/rocketchat.info | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 0a700be61b46..3c765d8ffeff 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 3.0.0 +ENV RC_VERSION 3.1.0-develop MAINTAINER buildmaster@rocket.chat diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 3d617ac0916f..72a729708147 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0" + "version": "3.1.0-develop" } diff --git a/package.json b/package.json index 0d0f66e6678c..45f9a8713d45 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0", + "version": "3.1.0-develop", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 9cadcee48212de4c40bddcdfd48dd89c8ae76c36 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 17 Feb 2020 11:17:25 -0300 Subject: [PATCH 017/392] send files over rest api --- app/api/server/v1/rooms.js | 68 +++++++++++---------- app/apps/client/admin/appInstall.js | 4 +- app/ui/client/lib/fileUpload.js | 87 +++++++++++++++------------ app/utils/client/lib/RestApiClient.js | 29 +++++++-- 4 files changed, 111 insertions(+), 77 deletions(-) diff --git a/app/api/server/v1/rooms.js b/app/api/server/v1/rooms.js index 85924d77d27f..948307394aa2 100644 --- a/app/api/server/v1/rooms.js +++ b/app/api/server/v1/rooms.js @@ -59,38 +59,48 @@ API.v1.addRoute('rooms.get', { authRequired: true }, { }, }); -API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { - post() { - const room = Meteor.call('canAccessRoom', this.urlParams.rid, this.userId); +const getFiles = Meteor.wrapAsync(({ request }, callback) => { + const busboy = new Busboy({ headers: request.headers }); + const files = []; - if (!room) { - return API.v1.unauthorized(); + const fields = {}; + + + busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { + if (fieldname !== 'file') { + return callback(new Meteor.Error('invalid-field')); } - const busboy = new Busboy({ headers: this.request.headers }); - const files = []; - const fields = {}; + const fileDate = []; + file.on('data', (data) => fileDate.push(data)); + + file.on('end', () => { + files.push({ fieldname, file, filename, encoding, mimetype, fileBuffer: Buffer.concat(fileDate) }); + }); + }); + + busboy.on('field', (fieldname, value) => { fields[fieldname] = value; }); + + busboy.on('finish', Meteor.bindEnvironment(() => callback(null, { files, fields }))); - Meteor.wrapAsync((callback) => { - busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { - if (fieldname !== 'file') { - return callback(new Meteor.Error('invalid-field')); - } + request.pipe(busboy); +}); - const fileDate = []; - file.on('data', (data) => fileDate.push(data)); +const fileStore = FileUpload.getStore('Uploads'); +const fileStoreInsert = Meteor.wrapAsync(fileStore.insert.bind(fileStore)); - file.on('end', () => { - files.push({ fieldname, file, filename, encoding, mimetype, fileBuffer: Buffer.concat(fileDate) }); - }); - }); +API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { + post() { + const room = Meteor.call('canAccessRoom', this.urlParams.rid, this.userId); - busboy.on('field', (fieldname, value) => { fields[fieldname] = value; }); + if (!room) { + return API.v1.unauthorized(); + } - busboy.on('finish', Meteor.bindEnvironment(() => callback())); - this.request.pipe(busboy); - })(); + const { files, fields } = getFiles({ + request: this.request, + }); if (files.length === 0) { return API.v1.failure('File required'); @@ -102,8 +112,6 @@ API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { const file = files[0]; - const fileStore = FileUpload.getStore('Uploads'); - const details = { name: file.filename, size: file.fileBuffer.length, @@ -112,18 +120,16 @@ API.v1.addRoute('rooms.upload/:rid', { authRequired: true }, { userId: this.userId, }; - let fileData = {}; - - Meteor.runAsUser(this.userId, () => { - const uploadedFile = Meteor.wrapAsync(fileStore.insert.bind(fileStore))(details, file.fileBuffer); + const fileData = Meteor.runAsUser(this.userId, () => { + const uploadedFile = fileStoreInsert(details, file.fileBuffer); uploadedFile.description = fields.description; delete fields.description; - API.v1.success(Meteor.call('sendFileMessage', this.urlParams.rid, null, uploadedFile, fields)); + Meteor.call('sendFileMessage', this.urlParams.rid, null, uploadedFile, fields); - fileData = uploadedFile; + return uploadedFile; }); return API.v1.success({ message: Messages.getMessageByFileIdAndUsername(fileData._id, this.userId) }); diff --git a/app/apps/client/admin/appInstall.js b/app/apps/client/admin/appInstall.js index 1db80c13b11e..031042ff2f04 100644 --- a/app/apps/client/admin/appInstall.js +++ b/app/apps/client/admin/appInstall.js @@ -148,9 +148,9 @@ Template.appInstall.events({ let result; if (isUpdating) { - result = await APIClient.upload(`apps/${ t.isUpdatingId.get() }`, data); + result = await APIClient.upload(`apps/${ t.isUpdatingId.get() }`, data).promise; } else { - result = await APIClient.upload('apps', data); + result = await APIClient.upload('apps', data).promise; } FlowRouter.go(`/admin/apps/${ result.app.id }?version=${ result.app.version }`); diff --git a/app/ui/client/lib/fileUpload.js b/app/ui/client/lib/fileUpload.js index 42253997a60b..e41ea15116d9 100644 --- a/app/ui/client/lib/fileUpload.js +++ b/app/ui/client/lib/fileUpload.js @@ -1,12 +1,11 @@ -import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import s from 'underscore.string'; import { Handlebars } from 'meteor/ui'; +import { Random } from 'meteor/random'; -import { fileUploadHandler } from '../../../file-upload'; import { settings } from '../../../settings/client'; -import { t, fileUploadIsValidContentType } from '../../../utils'; +import { t, fileUploadIsValidContentType, APIClient } from '../../../utils'; import { modal, prependReplies } from '../../../ui-utils'; @@ -193,7 +192,7 @@ export const fileUpload = async (files, input, { rid, tmid }) => { cancelButtonText: t('Cancel'), html: true, onRendered: () => $('#file-name').focus(), - }, (isConfirm) => { + }, async (isConfirm) => { if (!isConfirm) { return; } @@ -206,52 +205,48 @@ export const fileUpload = async (files, input, { rid, tmid }) => { description: document.getElementById('file-description').value, }; - const upload = fileUploadHandler('Uploads', record, file.file); + const fileName = document.getElementById('file-name').value || file.name || file.file.name; + + const data = new FormData(); + record.description && data.append('description', record.description); + msg && data.append('msg', msg); + tmid && data.append('tmid', tmid); + data.append('file', file.file, fileName); - uploadNextFile(); const uploads = Session.get('uploading') || []; - uploads.push({ - id: upload.id, - name: upload.getFileName(), + + const upload = { + id: Random.id(), + name: fileName, percentage: 0, - }); + }; + + uploads.push(upload); Session.set('uploading', uploads); - upload.onProgress = (progress) => { - const uploads = Session.get('uploading') || []; - uploads.filter((u) => u.id === upload.id).forEach((u) => { - u.percentage = Math.round(progress * 100) || 0; - }); - Session.set('uploading', uploads); - }; + uploadNextFile(); - upload.start((error, file, storage) => { - if (error) { + const { xhr, promise } = APIClient.upload(`v1/rooms.upload/${ rid }`, {}, data, { + progress(progress) { + const uploads = Session.get('uploading') || []; + + if (progress === 100) { + return; + } + uploads.filter((u) => u.id === upload.id).forEach((u) => { + u.percentage = Math.round(progress) || 0; + }); + Session.set('uploading', uploads); + }, + error(error) { const uploads = Session.get('uploading') || []; uploads.filter((u) => u.id === upload.id).forEach((u) => { u.error = error.message; u.percentage = 0; }); Session.set('uploading', uploads); - - return; - } - - if (!file) { - return; - } - - Meteor.call('sendFileMessage', rid, storage, file, { msg, tmid }, () => { - $(input) - .removeData('reply') - .trigger('dataChange'); - - setTimeout(() => { - const uploads = Session.get('uploading') || []; - Session.set('uploading', uploads.filter((u) => u.id !== upload.id)); - }, 2000); - }); + }, }); Tracker.autorun((computation) => { @@ -259,13 +254,27 @@ export const fileUpload = async (files, input, { rid, tmid }) => { if (!isCanceling) { return; } - computation.stop(); - upload.stop(); + Session.delete(`uploading-cancel-${ upload.id }`); + + xhr.abort(); const uploads = Session.get('uploading') || {}; Session.set('uploading', uploads.filter((u) => u.id !== upload.id)); }); + + try { + await promise; + const uploads = Session.get('uploading') || []; + return Session.set('uploading', uploads.filter((u) => u.id !== upload.id)); + } catch (error) { + const uploads = Session.get('uploading') || []; + uploads.filter((u) => u.id === upload.id).forEach((u) => { + u.error = error.message; + u.percentage = 0; + }); + Session.set('uploading', uploads); + } })); }; diff --git a/app/utils/client/lib/RestApiClient.js b/app/utils/client/lib/RestApiClient.js index 594927ebca19..a323bfeb5e03 100644 --- a/app/utils/client/lib/RestApiClient.js +++ b/app/utils/client/lib/RestApiClient.js @@ -21,13 +21,13 @@ export const APIClient = { return APIClient._jqueryCall('POST', endpoint, params, body); }, - upload(endpoint, params, formData) { + upload(endpoint, params, formData, xhrOptions) { if (!formData) { formData = params; params = {}; } - return APIClient._jqueryFormDataCall(endpoint, params, formData); + return APIClient._jqueryFormDataCall(endpoint, params, formData, xhrOptions); }, _generateQueryFromParams(params) { @@ -68,15 +68,32 @@ export const APIClient = { }); }, - _jqueryFormDataCall(endpoint, params, formData) { + _jqueryFormDataCall(endpoint, params, formData, { progress = () => {}, error = () => {} } = {}, abort = () => {}) { + const ret = { }; + const query = APIClient._generateQueryFromParams(params); if (!(formData instanceof FormData)) { throw new Error('The formData parameter MUST be an instance of the FormData class.'); } - return new Promise(function _jqueryFormDataPromise(resolve, reject) { - jQuery.ajax({ + ret.promise = new Promise(function _jqueryFormDataPromise(resolve, reject) { + ret.xhr = jQuery.ajax({ + xhr() { + const xhr = new window.XMLHttpRequest(); + + xhr.upload.addEventListener('progress', function(evt) { + if (evt.lengthComputable) { + const percentComplete = evt.loaded / evt.total; + progress(percentComplete * 100); + } + }, false); + + xhr.upload.addEventListener('error', error, false); + xhr.upload.addEventListener('abort', abort, false); + + return xhr; + }, url: `${ baseURI }api/${ endpoint }${ query }`, headers: { 'X-User-Id': Meteor._localStorage.getItem(Accounts.USER_ID_KEY), @@ -96,6 +113,8 @@ export const APIClient = { }, }); }); + + return ret; }, v1: { From 0461556a3d9e6e5fb5bbd37d552a3c638ef86892 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 17 Feb 2020 13:52:59 -0300 Subject: [PATCH 018/392] Update app/utils/client/lib/RestApiClient.js Co-Authored-By: Diego Sampaio --- app/utils/client/lib/RestApiClient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/client/lib/RestApiClient.js b/app/utils/client/lib/RestApiClient.js index a323bfeb5e03..7d965d30797e 100644 --- a/app/utils/client/lib/RestApiClient.js +++ b/app/utils/client/lib/RestApiClient.js @@ -68,7 +68,7 @@ export const APIClient = { }); }, - _jqueryFormDataCall(endpoint, params, formData, { progress = () => {}, error = () => {} } = {}, abort = () => {}) { + _jqueryFormDataCall(endpoint, params, formData, { progress = () => {}, error = () => {} } = {}) { const ret = { }; const query = APIClient._generateQueryFromParams(params); From f753efd35292fd7a68603ee907dc6d18ea1362a5 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 17 Feb 2020 13:53:05 -0300 Subject: [PATCH 019/392] Update app/utils/client/lib/RestApiClient.js Co-Authored-By: Diego Sampaio --- app/utils/client/lib/RestApiClient.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/utils/client/lib/RestApiClient.js b/app/utils/client/lib/RestApiClient.js index 7d965d30797e..6b927743cac4 100644 --- a/app/utils/client/lib/RestApiClient.js +++ b/app/utils/client/lib/RestApiClient.js @@ -90,7 +90,6 @@ export const APIClient = { }, false); xhr.upload.addEventListener('error', error, false); - xhr.upload.addEventListener('abort', abort, false); return xhr; }, From 7a75704be55b1870bfafee64c2c33c696b9a2b4b Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 17 Feb 2020 20:51:06 -0300 Subject: [PATCH 020/392] [FIX] UiKit not updating new actionIds received as responses from actions (#16624) --- app/ui-message/client/blocks/ModalBlock.js | 6 +-- package-lock.json | 47 ++++++++++++---------- package.json | 10 ++--- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/app/ui-message/client/blocks/ModalBlock.js b/app/ui-message/client/blocks/ModalBlock.js index 36c5c7ab5806..bb6a1e48deac 100644 --- a/app/ui-message/client/blocks/ModalBlock.js +++ b/app/ui-message/client/blocks/ModalBlock.js @@ -79,7 +79,7 @@ Template.ModalBlock.onRendered(async function() { appId, viewId, view: { - ...this.data.view, + ...state.get().view, id: viewId, state: groupStateByBlockId(this.state.all()), }, @@ -91,7 +91,7 @@ Template.ModalBlock.onRendered(async function() { appId, viewId, view: { - ...this.data.view, + ...state.get().view, id: viewId, state: groupStateByBlockId(this.state.all()), }, @@ -105,7 +105,7 @@ Template.ModalBlock.onRendered(async function() { appId, payload: { view: { - ...this.data.view, + ...state.get().view, id: viewId, state: groupStateByBlockId(this.state.all()), }, diff --git a/package-lock.json b/package-lock.json index c7c9edd9db8c..dee9cb46302a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2716,36 +2716,41 @@ } }, "@rocket.chat/fuselage": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0.tgz", - "integrity": "sha512-APEd9eF9DXVcIrddGov+4yCK18RkOmkGFrNUpCHWqeuAjEy0oApaUWp4e9ISIviIEIijtZ6Q9T2jaLjSKdkzLA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.3.0.tgz", + "integrity": "sha512-nZdtJtEjZO2ZKQafo0ijANRAlr+wSQ9PzsjpRcan4XVaOdnS7Yri7ZlqtA2jdmHyr5/bbQzReM0WudujS5JMyg==", "requires": { - "@rocket.chat/fuselage-tokens": "^0.2.0", - "@rocket.chat/icons": "^0.2.0" + "@rocket.chat/fuselage-tokens": "^0.3.0", + "@rocket.chat/icons": "^0.3.0" } }, "@rocket.chat/fuselage-hooks": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0.tgz", - "integrity": "sha512-OKQWhsbm3eHU1IDshwEqZhpzMW+loGPdpr1W2mZHbazkcRQYVp7V76Hl3Hh/HHGn8+EPY4fluoPVHgoOm42NiA==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.3.0.tgz", + "integrity": "sha512-VpRyEhntgJ1HLYtaRmOzdHTpfGxkyyD9ElxBwEENMcu4/Ke6brIttznevndjaZWznfF/VV+15vcFovimRt/giQ==" }, "@rocket.chat/fuselage-tokens": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0.tgz", - "integrity": "sha512-mHAoZ4mAXXYJ+Sz6DYwe/StO7HyMUNdYw+2U+9uzyO5Zyy5e88+lxD2+HI0UQ7AC6cM/Y77s1kNhTwDpP70oHw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.3.0.tgz", + "integrity": "sha512-PEFww6Q4gRmBo97nA6JHICSYHqQuCDHS4KFS070ofdaRParEaBhrQ8CBF21RpIXZpofk9d4nR96JdI0uf6rWOw==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0.tgz", - "integrity": "sha512-slgtaz0gFWaU70XyMFI74L6tIUsrKdSae74/8BLq/w4dm3q1Faoc9jDvsgcvqta+/n0GguxjMNrEi6iOI4L96w==", + "version": "0.3.0", "requires": { - "@rocket.chat/ui-kit": "^0.2.0" + "@rocket.chat/ui-kit": "^0.3.0" + }, + "dependencies": { + "@rocket.chat/ui-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0.tgz", + "integrity": "sha512-O6QNicDDRRbiULWXdkVmgUl1Pf3CoVVA8L7JEfiegQcTdPEsHlWGYBxcpbt23gY4hoNmbknlJHfCPNWd7oLcmQ==" + } } }, "@rocket.chat/icons": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0.tgz", - "integrity": "sha512-EUXi/TGe2YBVASoWPHm+FeRyq6gxNJjByNtc6wb1s0wyPxESD3rPpRkxR1PKjQtSTzNSFW8woEVT1UNPly7v1g==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.3.0.tgz", + "integrity": "sha512-cE8tq4MzfqJq3AiSKMQS6RWj5gYKDhnQZNP63q0ljtvcZDzGX/LL3zmACmrCwwjT4Y0XNp2CpPW9mNFtG20iNQ==" }, "@rocket.chat/livechat": { "version": "1.3.1", @@ -2835,9 +2840,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0.tgz", - "integrity": "sha512-O6QNicDDRRbiULWXdkVmgUl1Pf3CoVVA8L7JEfiegQcTdPEsHlWGYBxcpbt23gY4hoNmbknlJHfCPNWd7oLcmQ==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.3.0.tgz", + "integrity": "sha512-YAV5l6iVIWuileg5DOU/0NQ/23/AULEr8UblIUSF3OShPN8nWanGMdG0E6xFLyXT+KHvmvzhiQe0/ju3Tk7x8A==" }, "@settlin/spacebars-loader": { "version": "1.0.7", diff --git a/package.json b/package.json index 45f9a8713d45..7508dea06675 100644 --- a/package.json +++ b/package.json @@ -123,11 +123,11 @@ "@google-cloud/storage": "^2.3.1", "@google-cloud/vision": "^1.8.0", "@rocket.chat/apps-engine": "^1.12.0", - "@rocket.chat/fuselage": "^0.2.0", - "@rocket.chat/fuselage-hooks": "^0.2.0", - "@rocket.chat/fuselage-ui-kit": "^0.2.0", - "@rocket.chat/icons": "^0.2.0", - "@rocket.chat/ui-kit": "^0.2.0", + "@rocket.chat/fuselage": "^0.3.0", + "@rocket.chat/fuselage-hooks": "^0.3.0", + "@rocket.chat/fuselage-ui-kit": "^0.3.0", + "@rocket.chat/icons": "^0.3.0", + "@rocket.chat/ui-kit": "^0.3.0", "@slack/client": "^4.8.0", "adm-zip": "RocketChat/adm-zip", "archiver": "^3.0.0", From d1bc646c3c3d20a402891fd9948fa23a8d208747 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 17 Feb 2020 21:10:19 -0300 Subject: [PATCH 021/392] [FIX] Regression: Jitsi on external window infinite loop (#16625) --- app/videobridge/client/views/videoFlexTab.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/videobridge/client/views/videoFlexTab.js b/app/videobridge/client/views/videoFlexTab.js index 1b55095af759..ebc32f1bace2 100644 --- a/app/videobridge/client/views/videoFlexTab.js +++ b/app/videobridge/client/views/videoFlexTab.js @@ -1,4 +1,5 @@ import { Meteor } from 'meteor/meteor'; +import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { TimeSync } from 'meteor/mizzao:timesync'; @@ -58,9 +59,9 @@ Template.videoFlexTab.onRendered(function() { const start = () => { const update = () => { - const { jitsiTimeout } = Rooms.findOne({ _id: rid }, { fields: { jitsiTimeout: 1 }, reactive: false }); + const { jitsiTimeout } = Rooms.findOne({ _id: rid }, { fields: { jitsiTimeout: 1 } }); - if (jitsiTimeout && (TimeSync.serverTime(), - new Date(jitsiTimeout) + CONSTANTS.TIMEOUT < CONSTANTS.DEBOUNCE)) { + if (jitsiTimeout && (TimeSync.serverTime() - new Date(jitsiTimeout) + CONSTANTS.TIMEOUT < CONSTANTS.DEBOUNCE)) { return; } if (Meteor.status().connected) { @@ -70,7 +71,7 @@ Template.videoFlexTab.onRendered(function() { return this.stop(); }; update(); - this.intervalHandler = Meteor.setInterval(update, CONSTANTS.HEARTBEAT); + this.intervalHandler = setInterval(update, CONSTANTS.HEARTBEAT); TabBar.updateButton('video', { class: 'red' }); }; @@ -125,7 +126,7 @@ Template.videoFlexTab.onRendered(function() { jitsiRoomActive = jitsiRoom; if (settings.get('Jitsi_Open_New_Window')) { - start(); + Tracker.nonreactive(() => start()); let queryString = ''; if (accessToken) { queryString = `?jwt=${ accessToken }`; @@ -157,7 +158,7 @@ Template.videoFlexTab.onRendered(function() { * For some reason those aren't working right. */ Meteor.setTimeout(() => this.api.executeCommand('displayName', [name]), 5000); - return start(); + return Tracker.nonreactive(() => start()); } // Execute any commands that might be reactive. Like name changing. From f86323f3466504ae452928b184aaa60aeec9dd23 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Mon, 17 Feb 2020 21:14:31 -0300 Subject: [PATCH 022/392] [FIX] livechat/rooms endpoint not working with big amount of livechats (#16623) * Remove aggregate to improve performance * Use a cursor to run query only once * Do not use toArray in model Co-authored-by: Diego Sampaio --- app/livechat/server/api/lib/rooms.js | 33 +++++++----- app/models/server/raw/LivechatDepartment.js | 6 ++- app/models/server/raw/LivechatRooms.js | 58 ++++++--------------- 3 files changed, 39 insertions(+), 58 deletions(-) diff --git a/app/livechat/server/api/lib/rooms.js b/app/livechat/server/api/lib/rooms.js index 54a421d8e6c2..72d84803de15 100644 --- a/app/livechat/server/api/lib/rooms.js +++ b/app/livechat/server/api/lib/rooms.js @@ -1,4 +1,4 @@ -import { LivechatRooms } from '../../../../models/server/raw'; +import { LivechatRooms, LivechatDepartment } from '../../../../models/server/raw'; export async function findRooms({ agents, @@ -16,18 +16,7 @@ export async function findRooms({ sort, }, }) { - const total = (await LivechatRooms.findRoomsWithCriteria({ - agents, - roomName, - departmentId, - open, - createdAt, - closedAt, - tags, - customFields, - })).length; - - const rooms = await LivechatRooms.findRoomsWithCriteria({ + const cursor = LivechatRooms.findRoomsWithCriteria({ agents, roomName, departmentId, @@ -44,6 +33,24 @@ export async function findRooms({ }, }); + const total = await cursor.count(); + + const rooms = await cursor.toArray(); + + const departmentsIds = [...new Set(rooms.map((room) => room.departmentId).filter(Boolean))]; + if (departmentsIds.length) { + const departments = await LivechatDepartment.findInIds(departmentsIds, { fields: { name: 1 } }).toArray(); + + rooms.forEach((room) => { + if (!room.departmentId) { + return; + } + const department = departments.find((dept) => dept._id === room.departmentId); + if (department) { + room.department = department; + } + }); + } return { rooms, count: rooms.length, diff --git a/app/models/server/raw/LivechatDepartment.js b/app/models/server/raw/LivechatDepartment.js index 040e156b16df..1b103c034442 100644 --- a/app/models/server/raw/LivechatDepartment.js +++ b/app/models/server/raw/LivechatDepartment.js @@ -1,6 +1,8 @@ import { BaseRaw } from './BaseRaw'; export class LivechatDepartmentRaw extends BaseRaw { - - + findInIds(departmentsIds, options) { + const query = { _id: { $in: departmentsIds } }; + return this.find(query, options); + } } diff --git a/app/models/server/raw/LivechatRooms.js b/app/models/server/raw/LivechatRooms.js index 7f9286d86d05..da9ec4282e41 100644 --- a/app/models/server/raw/LivechatRooms.js +++ b/app/models/server/raw/LivechatRooms.js @@ -1099,73 +1099,45 @@ export class LivechatRoomsRaw extends BaseRaw { } findRoomsWithCriteria({ agents, roomName, departmentId, open, createdAt, closedAt, tags, customFields, options = {} }) { - const match = { - $match: { - t: 'l', - }, + const query = { + t: 'l', }; if (agents) { - match.$match.$or = [{ 'servedBy._id': { $in: agents } }, { 'servedBy.username': { $in: agents } }]; + query.$or = [{ 'servedBy._id': { $in: agents } }, { 'servedBy.username': { $in: agents } }]; } if (roomName) { - match.$match.fname = new RegExp(roomName, 'i'); + query.fname = new RegExp(roomName, 'i'); } if (departmentId) { - match.$match.departmentId = departmentId; + query.departmentId = departmentId; } if (open !== undefined) { - match.$match.open = { $exists: open }; + query.open = { $exists: open }; } if (createdAt) { - match.$match.ts = {}; + query.ts = {}; if (createdAt.start) { - match.$match.ts.$gte = new Date(createdAt.start); + query.ts.$gte = new Date(createdAt.start); } if (createdAt.end) { - match.$match.ts.$lte = new Date(createdAt.end); + query.ts.$lte = new Date(createdAt.end); } } if (closedAt) { - match.$match.closedAt = {}; + query.closedAt = {}; if (closedAt.start) { - match.$match.closedAt.$gte = new Date(closedAt.start); + query.closedAt.$gte = new Date(closedAt.start); } if (closedAt.end) { - match.$match.closedAt.$lte = new Date(closedAt.end); + query.closedAt.$lte = new Date(closedAt.end); } } if (tags) { - match.$match.tags = { $in: tags }; + query.tags = { $in: tags }; } if (customFields) { - match.$match.$and = Object.keys(customFields).map((key) => ({ [`livechatData.${ key }`]: new RegExp(customFields[key], 'i') })); - } - const sort = { $sort: options.sort || { name: 1 } }; - const firstParams = [match, sort]; - if (options.offset) { - firstParams.push({ $skip: options.offset }); + query.$and = Object.keys(customFields).map((key) => ({ [`livechatData.${ key }`]: new RegExp(customFields[key], 'i') })); } - if (options.count) { - firstParams.push({ $limit: options.count }); - } - const lookup = { - $lookup: { - from: 'rocketchat_livechat_department', - localField: 'departmentId', - foreignField: '_id', - as: 'department', - }, - }; - const unwind = { - $unwind: { - path: '$department', - preserveNullAndEmptyArrays: true, - }, - }; - const params = [...firstParams, lookup, unwind]; - if (options.fields) { - params.push({ $project: options.fields }); - } - return this.col.aggregate(params).toArray(); + return this.find(query, { sort: options.sort || { name: 1 }, skip: options.offset, limit: options.count }); } } From 566ff2d3aef1f75f56ea55015b70e60e3c79daaa Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Tue, 18 Feb 2020 09:41:02 -0300 Subject: [PATCH 023/392] [FIX] Omnichannel Inquiry queues when removing chats (#16603) * Fix Inquiry stream when removing omnichannel rooms. * Remove unnecessary blank line. * Remove unnecessary import files. --- app/livechat/client/lib/stream/queueManager.js | 6 +++--- app/livechat/client/views/app/livechatReadOnly.js | 4 +--- app/livechat/server/lib/Livechat.js | 15 +++++++++++++++ .../server/methods/removeAllClosedRooms.js | 8 +++----- app/livechat/server/methods/removeRoom.js | 7 +++---- app/models/server/models/LivechatInquiry.js | 8 ++++++++ 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/app/livechat/client/lib/stream/queueManager.js b/app/livechat/client/lib/stream/queueManager.js index 32eef969cfc8..5f58fdc56376 100644 --- a/app/livechat/client/lib/stream/queueManager.js +++ b/app/livechat/client/lib/stream/queueManager.js @@ -15,12 +15,12 @@ const events = { }, changed: (inquiry, collection) => { if (inquiry.status !== 'queued' || (inquiry.department && !agentDepartments.includes(inquiry.department))) { - return collection.remove({ rid: inquiry.rid }); + return collection.remove(inquiry._id); } delete inquiry.type; - collection.upsert({ rid: inquiry.rid }, inquiry); + collection.upsert({ _id: inquiry._id }, inquiry); }, - removed: (inquiry, collection) => collection.remove({ rid: inquiry.rid }), + removed: (inquiry, collection) => collection.remove(inquiry._id), }; const appendListenerToDepartment = (departmentId, collection) => livechatQueueStreamer.on(`${ LIVECHAT_INQUIRY_QUEUE_STREAM_OBSERVER }/${ departmentId }`, (inquiry) => events[inquiry.type](inquiry, collection)); diff --git a/app/livechat/client/views/app/livechatReadOnly.js b/app/livechat/client/views/app/livechatReadOnly.js index dc928e19fe5e..da599cb65cb0 100644 --- a/app/livechat/client/views/app/livechatReadOnly.js +++ b/app/livechat/client/views/app/livechatReadOnly.js @@ -50,9 +50,7 @@ Template.livechatReadOnly.onCreated(function() { this.preparing = new ReactiveVar(true); this.updateInquiry = (inquiry) => { - if (inquiry && inquiry.rid === this.rid) { - this.inquiry.set(inquiry); - } + this.inquiry.set(inquiry); }; Meteor.call('livechat:getRoutingConfig', (err, config) => { diff --git a/app/livechat/server/lib/Livechat.js b/app/livechat/server/lib/Livechat.js index f2f43691ce72..9853dcb5a28f 100644 --- a/app/livechat/server/lib/Livechat.js +++ b/app/livechat/server/lib/Livechat.js @@ -370,6 +370,20 @@ export const Livechat = { return true; }, + removeRoom(rid) { + check(rid, String); + const room = LivechatRooms.findOneById(rid); + if (!room) { + throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'livechat:removeRoom' }); + } + + Messages.removeByRoomId(rid); + Subscriptions.removeByRoomId(rid); + LivechatInquiry.removeByRoomId(rid); + return LivechatRooms.removeById(rid); + }, + + setCustomFields({ token, key, value, overwrite } = {}) { check(token, String); check(key, String); @@ -757,6 +771,7 @@ export const Livechat = { Subscriptions.removeByVisitorToken(token); LivechatRooms.removeByVisitorToken(token); + LivechatInquiry.removeByVisitorToken(token); }, saveDepartmentAgents(_id, departmentAgents) { diff --git a/app/livechat/server/methods/removeAllClosedRooms.js b/app/livechat/server/methods/removeAllClosedRooms.js index 6849d2b40e6b..ae29e85a030f 100644 --- a/app/livechat/server/methods/removeAllClosedRooms.js +++ b/app/livechat/server/methods/removeAllClosedRooms.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { hasPermission } from '../../../authorization'; -import { LivechatRooms, Messages, Subscriptions } from '../../../models'; +import { LivechatRooms } from '../../../models'; +import { Livechat } from '../lib/Livechat'; Meteor.methods({ 'livechat:removeAllClosedRooms'(departmentIds) { @@ -11,10 +12,7 @@ Meteor.methods({ let count = 0; LivechatRooms.findClosedRooms(departmentIds).forEach(({ _id }) => { - Messages.removeByRoomId(_id); - Subscriptions.removeByRoomId(_id); - LivechatRooms.removeById(_id); - + Livechat.removeRoom(_id); count++; }); diff --git a/app/livechat/server/methods/removeRoom.js b/app/livechat/server/methods/removeRoom.js index ef0329ae0b4f..f8c251e28a36 100644 --- a/app/livechat/server/methods/removeRoom.js +++ b/app/livechat/server/methods/removeRoom.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { hasPermission } from '../../../authorization'; -import { LivechatRooms, Messages, Subscriptions } from '../../../models'; +import { LivechatRooms } from '../../../models'; +import { Livechat } from '../lib/Livechat'; Meteor.methods({ 'livechat:removeRoom'(rid) { @@ -29,8 +30,6 @@ Meteor.methods({ }); } - Messages.removeByRoomId(rid); - Subscriptions.removeByRoomId(rid); - return LivechatRooms.removeById(rid); + return Livechat.removeRoom(rid); }, }); diff --git a/app/models/server/models/LivechatInquiry.js b/app/models/server/models/LivechatInquiry.js index f7a78064d8a1..ccf54c445231 100644 --- a/app/models/server/models/LivechatInquiry.js +++ b/app/models/server/models/LivechatInquiry.js @@ -172,6 +172,14 @@ export class LivechatInquiry extends Base { removeByRoomId(rid) { return this.remove({ rid }); } + + removeByVisitorToken(token) { + const query = { + 'v.token': token, + }; + + this.remove(query); + } } export default new LivechatInquiry(); From d141e98f247f5f7f9b8d2a0f19b8aac3511d12d8 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Tue, 18 Feb 2020 09:41:44 -0300 Subject: [PATCH 024/392] [NEW] Open the Visitor Info panel automatically when the agent enters an Omnichannel room (#16496) * Add callback to listen when the user enter the room template. * Open the Visitor Info panel automatically on the first time the user enters the Omnichannel Room. * Fix indentation issues. * Remove unnecessary return statement. --- app/livechat/client/hooks/onRenderRoom.js | 25 +++++++++++++++++++++++ app/livechat/client/index.js | 1 + app/ui/client/views/app/room.js | 2 ++ 3 files changed, 28 insertions(+) create mode 100644 app/livechat/client/hooks/onRenderRoom.js diff --git a/app/livechat/client/hooks/onRenderRoom.js b/app/livechat/client/hooks/onRenderRoom.js new file mode 100644 index 000000000000..459640953155 --- /dev/null +++ b/app/livechat/client/hooks/onRenderRoom.js @@ -0,0 +1,25 @@ +import { callbacks } from '../../../callbacks'; + +callbacks.add('onRenderRoom', (instance, room) => { + if (!instance || !instance.tabBar) { + return; + } + + if (!room || !room.t || room.t !== 'l') { + return; + } + + const button = instance.tabBar.getButtons().find((button) => button.id === 'visitor-info'); + if (!button) { + return; + } + + const { template, i18nTitle: label, icon } = button; + instance.tabBar.setTemplate(template); + instance.tabBar.setData({ + label, + icon, + }); + + instance.tabBar.open(); +}); diff --git a/app/livechat/client/index.js b/app/livechat/client/index.js index bc8c68d96762..f48235e2bcc5 100644 --- a/app/livechat/client/index.js +++ b/app/livechat/client/index.js @@ -2,6 +2,7 @@ import '../lib/messageTypes'; import './roomType'; import './route'; import './ui'; +import './hooks/onRenderRoom'; import './startup/notifyUnreadRooms'; import './views/sideNav/livechat'; import './views/sideNav/livechatFlex'; diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index 8a6ab42e2a45..312209a977b6 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -1364,6 +1364,8 @@ Template.room.onRendered(function() { if (!room) { FlowRouter.go('home'); } + + callbacks.run('onRenderRoom', template, room); }); }); From 35d702966bc05ff74a97dfd5ef5e62ba6443e234 Mon Sep 17 00:00:00 2001 From: Kautilya Tripathi Date: Wed, 19 Feb 2020 02:21:23 +0530 Subject: [PATCH 025/392] Fixes #13391 (#13591) --- .snapcraft/snap/snapcraft.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 6796ac5158a3..a6bb57000323 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -16,7 +16,7 @@ apps: rocketchat-server: command: startRocketChat daemon: simple - plugs: [network, network-bind] + plugs: [network, network-bind, removable-media] rocketchat-mongo: command: startmongo daemon: simple From f5af1b58d964dfe69d38d0e48c82840df379a51d Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Tue, 18 Feb 2020 18:03:07 -0300 Subject: [PATCH 026/392] [FIX] Regression: New 'app' role with no permissions when updating to 3.0.0 (#16637) --- server/startup/migrations/index.js | 1 + server/startup/migrations/v174.js | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 server/startup/migrations/v174.js diff --git a/server/startup/migrations/index.js b/server/startup/migrations/index.js index 85bc4b3ba7ca..6c9b0f4d36d7 100644 --- a/server/startup/migrations/index.js +++ b/server/startup/migrations/index.js @@ -171,4 +171,5 @@ import './v170'; import './v171'; import './v172'; import './v173'; +import './v174'; import './xrun'; diff --git a/server/startup/migrations/v174.js b/server/startup/migrations/v174.js new file mode 100644 index 000000000000..0ca59f1e69cd --- /dev/null +++ b/server/startup/migrations/v174.js @@ -0,0 +1,26 @@ +import { Migrations } from '../../../app/migrations/server'; +import { Permissions } from '../../../app/models/server'; + +const appRolePermissions = [ + 'api-bypass-rate-limit', + 'create-c', + 'create-d', + 'create-p', + 'join-without-join-code', + 'leave-c', + 'leave-p', + 'send-many-messages', + 'view-c-room', + 'view-d-room', + 'view-joined-room', +]; + +Migrations.add({ + version: 174, + up() { + Permissions.update({ _id: { $in: appRolePermissions } }, { $addToSet: { roles: 'app' } }, { multi: true }); + }, + down() { + Permissions.update({ _id: { $in: appRolePermissions } }, { $pull: { roles: 'app' } }, { multi: true }); + }, +}); From c28bebd2bf49b41c124530212f9b213f72bf69d9 Mon Sep 17 00:00:00 2001 From: Gabriel Engel Date: Tue, 18 Feb 2020 19:20:48 -0300 Subject: [PATCH 027/392] LingoHub based on develop (#16640) * LingoHub Update :rocket: Manual push by LingoHub User: Diego Sampaio. Project: Rocket.Chat Made with :heart: by https://lingohub.com * Fix interpolation strings * Fix strong Co-authored-by: Diego Sampaio --- packages/rocketchat-i18n/i18n/af.i18n.json | 3 +- packages/rocketchat-i18n/i18n/ar.i18n.json | 3 +- packages/rocketchat-i18n/i18n/az.i18n.json | 3 +- packages/rocketchat-i18n/i18n/be-BY.i18n.json | 3 +- packages/rocketchat-i18n/i18n/bg.i18n.json | 3 +- packages/rocketchat-i18n/i18n/bs.i18n.json | 3 +- packages/rocketchat-i18n/i18n/ca.i18n.json | 4 +- packages/rocketchat-i18n/i18n/cs.i18n.json | 8 +- packages/rocketchat-i18n/i18n/cy.i18n.json | 3 +- packages/rocketchat-i18n/i18n/da.i18n.json | 4 +- packages/rocketchat-i18n/i18n/de-AT.i18n.json | 6 +- packages/rocketchat-i18n/i18n/de.i18n.json | 18 +- packages/rocketchat-i18n/i18n/el.i18n.json | 3 +- packages/rocketchat-i18n/i18n/en.i18n.json | 3 +- packages/rocketchat-i18n/i18n/eo.i18n.json | 3 +- packages/rocketchat-i18n/i18n/es.i18n.json | 4 +- packages/rocketchat-i18n/i18n/fa.i18n.json | 233 +++++++++++++++--- packages/rocketchat-i18n/i18n/fi.i18n.json | 3 +- packages/rocketchat-i18n/i18n/fr.i18n.json | 4 +- packages/rocketchat-i18n/i18n/he.i18n.json | 3 +- packages/rocketchat-i18n/i18n/hr.i18n.json | 4 +- packages/rocketchat-i18n/i18n/hu.i18n.json | 8 +- packages/rocketchat-i18n/i18n/id.i18n.json | 3 +- packages/rocketchat-i18n/i18n/it.i18n.json | 4 +- packages/rocketchat-i18n/i18n/ja.i18n.json | 65 ++++- packages/rocketchat-i18n/i18n/km.i18n.json | 7 +- packages/rocketchat-i18n/i18n/ko.i18n.json | 7 +- packages/rocketchat-i18n/i18n/ku.i18n.json | 3 +- packages/rocketchat-i18n/i18n/lo.i18n.json | 3 +- packages/rocketchat-i18n/i18n/lt.i18n.json | 3 +- packages/rocketchat-i18n/i18n/lv.i18n.json | 3 +- packages/rocketchat-i18n/i18n/mn.i18n.json | 3 +- packages/rocketchat-i18n/i18n/ms-MY.i18n.json | 3 +- packages/rocketchat-i18n/i18n/nl.i18n.json | 4 +- packages/rocketchat-i18n/i18n/no.i18n.json | 3 +- packages/rocketchat-i18n/i18n/pl.i18n.json | 8 +- packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 17 +- packages/rocketchat-i18n/i18n/pt.i18n.json | 31 ++- packages/rocketchat-i18n/i18n/ro.i18n.json | 3 +- packages/rocketchat-i18n/i18n/ru.i18n.json | 134 +++++++++- packages/rocketchat-i18n/i18n/sk-SK.i18n.json | 3 +- packages/rocketchat-i18n/i18n/sl-SI.i18n.json | 3 +- packages/rocketchat-i18n/i18n/sq.i18n.json | 3 +- packages/rocketchat-i18n/i18n/sr.i18n.json | 3 +- packages/rocketchat-i18n/i18n/sv.i18n.json | 4 +- packages/rocketchat-i18n/i18n/ta-IN.i18n.json | 3 +- packages/rocketchat-i18n/i18n/th-TH.i18n.json | 3 +- packages/rocketchat-i18n/i18n/tr.i18n.json | 8 +- packages/rocketchat-i18n/i18n/ug.i18n.json | 3 +- packages/rocketchat-i18n/i18n/uk.i18n.json | 28 ++- packages/rocketchat-i18n/i18n/vi-VN.i18n.json | 3 +- packages/rocketchat-i18n/i18n/zh-HK.i18n.json | 5 +- packages/rocketchat-i18n/i18n/zh-TW.i18n.json | 51 +++- packages/rocketchat-i18n/i18n/zh.i18n.json | 8 +- 54 files changed, 650 insertions(+), 111 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/af.i18n.json b/packages/rocketchat-i18n/i18n/af.i18n.json index abe439fef8f8..6407358be541 100644 --- a/packages/rocketchat-i18n/i18n/af.i18n.json +++ b/packages/rocketchat-i18n/i18n/af.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Toestemming om 'n boodskap te verwyder wat alle beperkings ignoreer", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Waarskuwing! * _Force SSL_ moet nooit met omgekeerde proxy gebruik word nie. As u 'n omgekeerde instaanbediener het, moet u die herleiding daar doen. Hierdie opsie bestaan ​​vir implementering soos Heroku, wat nie die herleidingskonfigurasie by die omgekeerde proxy toelaat nie.", + "Invalid_Export_File": "Die opgelaaide lêer is nie 'n geldige%s uitvoerlêer nie.", "Forgot_password": "Het jy jou wagwoord vergeet", "Forgot_Password_Description": "U mag die volgende plekhouers gebruik:
  • [Forgot_Password_Url] vir die wagwoordherstel-URL.
  • [naam], [fname], [lname] vir die volle naam, voornaam of van die gebruiker se naam.
  • [e-pos] vir die gebruiker se e-pos.
  • [Site_Name] en [Site_URL] vir die Aansoek Naam en URL onderskeidelik.
", "Forgot_Password_Email": "Klik hierom jou wagwoord terug te stel.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Kon nie die invoerder instel nie.", "Importer_Slack_Users_CSV_Information": "Die lêer wat opgelaai word, moet die uitvoerlêer van Slack's Users wees, wat 'n CSV-lêer is. Sien hier vir meer inligting:", "Importer_Source_File": "Bron Lêer Keuse", + "importer_status_import_failed": "fout", "Inclusive": "inklusiewe", "Incoming_Livechats": "Inkomende Livechats", "Incoming_WebHook": "Inkomende WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Die wagwoord bevestiging pas nie by die wagwoord nie", "Invalid_email": "Die ingevoerde e-pos is ongeldig", "Invalid_username": "Die ingevoerde gebruikersnaam is ongeldig", - "Invalid_Export_File": "Die opgelaaide lêer is nie 'n geldige%s uitvoerlêer nie.", "Invalid_Import_File_Type": "Ongeldige invoerlêertipe.", "Invalid_name": "Die naam mag nie leeg wees nie", "Invalid_notification_setting_s": "Ongeldige kennisgewinginstelling:%s", diff --git a/packages/rocketchat-i18n/i18n/ar.i18n.json b/packages/rocketchat-i18n/i18n/ar.i18n.json index 73b5656c6d61..0b53f188f9f8 100644 --- a/packages/rocketchat-i18n/i18n/ar.i18n.json +++ b/packages/rocketchat-i18n/i18n/ar.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "التصريح بحذف رسالة بتخطي كل القيود", "Force_SSL": "قوة SSL", "Force_SSL_Description": "* الحذر! * لا ينبغي أبدا أن تستخدم _Force SSL_ مع وكيل عكسي. إذا كان لديك وكيل عكسي، يجب القيام إعادة التوجيه هناك. يوجد هذا الخيار لنشر مثل Heroku، لا يسمح التكوين إعادة توجيه في كيل عكسي.", + "Invalid_Export_File": "الملف الذي تم تحميله ليس ملف التصدير٪ صالحة الصورة.", "Forgot_password": "نسيت كلمة السر", "Forgot_Password_Description": "يمكنك استخدام العناصر النائبة التالية:
  • [forget_Password_Url] لعنوان ورل لاستعادة كلمة المرور.
  • [نيم] و [فنيم] و [لنيم] للاسم الكامل للمستخدم أو الاسم الأول أو اسم العائلة، على التوالي.
  • [إمايل] للبريد الإلكتروني للمستخدم.
  • [Site_Name] و [Site_URL] لاسم التطبيق وعنوان ورل على التوالي.
", "Forgot_Password_Email": "انقر هنا لإعادة تعيين كلمة المرور الخاصة بك.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "حدث خطأ أثناء إعداد المستورد.", "Importer_Slack_Users_CSV_Information": "يجب أن يكون الملف الذي تم تحميله سلاك's وسرس إكسبورت فيل، وهو ملف كسف. انظر هنا لمعلومات اكثر:", "Importer_Source_File": "اختيار ملف المصدر", + "importer_status_import_failed": "خطأ", "Inclusive": "شامل", "Incoming_Livechats": "رسائل الدردشة المباشرة القادمة", "Incoming_WebHook": "ويبهوك واردة", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "تأكيد كلمة السر لا تطابق كلمة السر", "Invalid_email": "البريد الإلكتروني المدخل غير صحيح", "Invalid_username": "اسم المستخدم الذي تم إدخاله غير صالح", - "Invalid_Export_File": "الملف الذي تم تحميله ليس ملف التصدير٪ صالحة الصورة.", "Invalid_Import_File_Type": "نوع ملف استيراد صالح.", "Invalid_name": "لا يجب أن يكون الاسم فارغ", "Invalid_notification_setting_s": "وضع إشعار صالح:٪ ق", diff --git a/packages/rocketchat-i18n/i18n/az.i18n.json b/packages/rocketchat-i18n/i18n/az.i18n.json index fdb5e4ca1330..a5cf7d771297 100644 --- a/packages/rocketchat-i18n/i18n/az.i18n.json +++ b/packages/rocketchat-i18n/i18n/az.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Bütün məhdudiyyətləri atlayaraq bir mesajı silmək üçün icazə", "Force_SSL": "SSL qüvvəsi", "Force_SSL_Description": "* Diqqət! * _Force SSL_ ters proksi ilə heç vaxt istifadə edilməməlidir. Ters proksiyanız varsa, THY də yönləndirməlisiniz. Bu seçim, Heroku kimi yerləşdirmələr üçün mövcuddur, əksinə proxy-də yönlendirme konfiqurasiyasına imkan vermir.", + "Invalid_Export_File": "Yüklənən fayl etibarlı bir%s ixrac fayl deyil.", "Forgot_password": "Şifrəni unutmusan", "Forgot_Password_Description": "Aşağıdakı yer tutuculardan istifadə edə bilərsiniz:
  • [Parolayı bərpa etmə URL-i] üçün [Forgot_Password_Url].
  • [ad], [fname], [lname] istifadəçinin tam adı, adı və soyadı üçün müvafiq olaraq. Istifadəçinin e-poçtu üçün
  • [email].
  • [Site_Name] və [Site_URL] üçün ərizə adı və URL sırasıyla.
", "Forgot_Password_Email": "Şifrənizi sıfırlamaq üçün buradavurun.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "İthaleri qurarkən bir səhv baş verdi.", "Importer_Slack_Users_CSV_Information": "Yüklənən fayl CSV faylı olan Slack İstifadəçilər ixrac faylı olmalıdır. Daha ətraflı məlumat üçün buraya baxın:", "Importer_Source_File": "Kaynak Fayl Seçimi", + "importer_status_import_failed": "Səhv", "Inclusive": "Inclusive", "Incoming_Livechats": "Daxil olan Livechats", "Incoming_WebHook": "Daxil olan WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Şifrənin təsdiqlənməsi şifrə uyğun gəlmir", "Invalid_email": "Girilən e-poçt etibarsızdır", "Invalid_username": "Girilən istifadəçi adı yanlışdır", - "Invalid_Export_File": "Yüklənən fayl etibarlı bir%s ixrac fayl deyil.", "Invalid_Import_File_Type": "Faylın növü etibarsızdır.", "Invalid_name": "Ad boş olmamalıdır", "Invalid_notification_setting_s": "Yanlış bildiriş qəbulu:%s", diff --git a/packages/rocketchat-i18n/i18n/be-BY.i18n.json b/packages/rocketchat-i18n/i18n/be-BY.i18n.json index d8d5c6726f3f..8a86c9fe4755 100644 --- a/packages/rocketchat-i18n/i18n/be-BY.i18n.json +++ b/packages/rocketchat-i18n/i18n/be-BY.i18n.json @@ -1225,6 +1225,7 @@ "force-delete-message_description": "Дазвол на выдаленне паведамленні ў абыход усіх абмежаванняў", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Увага! * _FORCE SSL_ ніколі не варта выкарыстоўваць з зваротным проксі. Калі ў вас ёсць зваротны проксі-сервер, вы павінны зрабіць рэдырэкт ТАМ. Гэтая опцыя існуе для разгортвання як Heroku, што не дазваляе канфігурацыю пераадрасацыі на зваротны проксі-сервер.", + "Invalid_Export_File": "Загружаны файл не зьяўляецца сапраўдным%s файл экспарту.", "Forgot_password": "Забыліся свой пароль", "Forgot_Password_Description": "Вы можаце выкарыстоўваць наступныя запаўняльнікі:
  • [FORGOT_PASSWORD_URL] для URL аднаўлення пароля.
  • [імя], [імя_файла], [LNAME] поўнае імя карыстальніка, імя або прозвішча, адпаведна.
  • [пошта] для электроннай пошты карыстальніка.
  • [site_name] і [site_url] для імя прыкладання і URL адпаведна.
", "Forgot_Password_Email": "Націсніце тут, каб аднавіць свой пароль.", @@ -1352,6 +1353,7 @@ "Importer_setup_error": "Падчас усталявання імпарцёра адбылася памылка.", "Importer_Slack_Users_CSV_Information": "Загружаны файл павінен быць файл экспарт Карыстальнікаў слабіны, якая з'яўляецца файлам CSV. Глядзіце тут для атрымання дадатковай інфармацыі:", "Importer_Source_File": "Выбар зыходнага файла", + "importer_status_import_failed": "памылка", "Inclusive": "ўключна", "Incoming_Livechats": "ўваходныя Livechats", "Incoming_WebHook": "які ўваходзіць WebHook", @@ -1422,7 +1424,6 @@ "Invalid_confirm_pass": "Пацвярджэнне пароля не супадае пароль", "Invalid_email": "Адрас электроннай пошты ня дзейнічае", "Invalid_username": "Імя карыстальніка ня дзейнічае", - "Invalid_Export_File": "Загружаны файл не зьяўляецца сапраўдным%s файл экспарту.", "Invalid_Import_File_Type": "Няправільны тып файла імпарту.", "Invalid_name": "Імя не павінна быць пустым", "Invalid_notification_setting_s": "Няправільная налада апавяшчэнняў:%s", diff --git a/packages/rocketchat-i18n/i18n/bg.i18n.json b/packages/rocketchat-i18n/i18n/bg.i18n.json index 0af92326cd54..61863fa60072 100644 --- a/packages/rocketchat-i18n/i18n/bg.i18n.json +++ b/packages/rocketchat-i18n/i18n/bg.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Разрешение за изтриване на съобщение, заобикалящо всички ограничения", "Force_SSL": "Принуди SSL", "Force_SSL_Description": "* Внимание! * _Force SSL_ никога не трябва да се използва с обратната прокси. Ако имате обратна прокси сървър, трябва да направите пренасочването THERE. Тази опция съществува за инсталации като Heroku, което не позволява конфигурирането на пренасочването на обратната прокси сървър.", + "Invalid_Export_File": "Каченият файл не е валиден файл за експортиране на %s.", "Forgot_password": "Забравена парола", "Forgot_Password_Description": "Можете да използвате следните заместващи символи:
  • [Forgot_Password_Url] за URL адреса за възстановяване на паролата.
  • [име], [fname], [име] за пълното име, съответно име или фамилия на потребителя.
  • [имейл] за имейла на потребителя.
  • [Site_Name] и [Site_URL] съответно за името на приложението и URL адреса.
", "Forgot_Password_Email": "Кликнете върху тук, за да зададете нова парола.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Възникна грешка при настройването на вносителя.", "Importer_Slack_Users_CSV_Information": "Каченият файл трябва да бъде файлът за експортиране на потребителите на Slack, който е CSV файл. Вижте тук за повече информация:", "Importer_Source_File": "Избор на изходен файл", + "importer_status_import_failed": "Грешка", "Inclusive": "Включително", "Incoming_Livechats": "Входящи Livechats", "Incoming_WebHook": "Входяща WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Потвърждението на паролата не съвпада с паролата", "Invalid_email": "Въведеният имейл адрес е невалиден", "Invalid_username": "Въведеното потребителско име е невалидно", - "Invalid_Export_File": "Каченият файл не е валиден файл за експортиране на %s.", "Invalid_Import_File_Type": "Тип на файла за импортиране е невалиден.", "Invalid_name": "Името не трябва да е празно", "Invalid_notification_setting_s": "Невалидна настройка за известяване:%s", diff --git a/packages/rocketchat-i18n/i18n/bs.i18n.json b/packages/rocketchat-i18n/i18n/bs.i18n.json index 7aa508988b40..7fe0f078d6c1 100644 --- a/packages/rocketchat-i18n/i18n/bs.i18n.json +++ b/packages/rocketchat-i18n/i18n/bs.i18n.json @@ -1210,6 +1210,7 @@ "force-delete-message_description": "Dozvola za brisanje poruke koja zaobilazi sva ograničenja", "Force_SSL": "Prisili SSL", "Force_SSL_Description": "* Oprez! * _Force SSL_ nikada ne treba koristiti s obrnutim proxy. Ako imate obrnuti proxy, trebalo bi učiniti preusmjeravanje tamo. Ova opcija postoji za implementacije kao Heroku, koje ne dopuštaju konfiguraciju za preusmjeravanje na obrnuto proxyu.", + "Invalid_Export_File": "Prenesena datoteka nije valjana %s datoteka za izvoz.", "Forgot_password": "Zaboravih lozinku", "Forgot_Password_Description": "Možete upotrebljavati sljedeća rezervirana mjesta:
  • [Forgot_Password_Url] za URL za oporavak zaporke.
  • [ime], [fname], [lname] za puni naziv, ime ili prezime korisnika.
  • [e-pošta] za e-poštu korisnika.
  • [Site_Name] i [Site_URL] za naziv aplikacije i URL.
", "Forgot_Password_Email": "Kliknite ovdjeda biste ponovo postavili svoju zaporku.", @@ -1337,6 +1338,7 @@ "Importer_setup_error": "Došlo je do pogreške pri postavljanju uvoznika.", "Importer_Slack_Users_CSV_Information": "Prenesena datoteka mora biti datoteka izvoza korisnika Slack, koja je CSV datoteka. Pogledajte ovdje za više informacija:", "Importer_Source_File": "Odabir izvornog izvora", + "importer_status_import_failed": "Pogreška", "Inclusive": "uključujući", "Incoming_Livechats": "Nadolazeći Livechatovi", "Incoming_WebHook": "Dolazni WebHook", @@ -1407,7 +1409,6 @@ "Invalid_confirm_pass": "Potvrda lozinke se ne slaže sa lozinkom", "Invalid_email": "Uneseni e-mail nije valjan", "Invalid_username": "Uneseno korisničko ime nije važeće", - "Invalid_Export_File": "Prenesena datoteka nije valjana %s datoteka za izvoz.", "Invalid_Import_File_Type": "Pogrešna vrsta Uvozne datoteke.", "Invalid_name": "Ime ne smije biti prazno", "Invalid_notification_setting_s": "Pogrešna postavka obavijesti: %s", diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index b8ba4a284aa9..05246c320981 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -1356,6 +1356,7 @@ "force-delete-message_description": "Permís per esborrar un missatge ignorant totes les restriccions", "Force_SSL": "Força SSL", "Force_SSL_Description": "*Atenció!* _Force SSL_ mai ha de ser usat amb servidor intermediari invers. Si s'utilitza un proxy invers, s'ha de fer la redirecció AL PROXY. Aquesta opció existeix per a les instal·lacions tipus Heroku, que no permeten la configuració de redireccions al proxy invers.", + "Invalid_Export_File": "L'arxiu pujat no és un fitxer d'exportació %s vàlid.", "Forgot_password": "No recordes la contrasenya?", "Forgot_Password_Description": "És possible utilitzar els marcadors:
  • [Forgot_Password_Url] per a l'adreça URL de recuperació de contrasenya.
  • [name], [fname], [lname] per al nom complet de l'usuari, nom o cognom, respectivament.
  • [email] per a l'adreça de correu electrònic de l'usuari.
  • [Site_Name] i [Site_URL] pel nom del lloc web i de l'adreça URL, respectivament.
", "Forgot_Password_Email": "Fes clic aquí per restablir la teva contrasenya.", @@ -1483,6 +1484,8 @@ "Importer_setup_error": "S'ha produït un error en configurar l'importador.", "Importer_Slack_Users_CSV_Information": "El fitxer carregat ha de ser el fitxer d'exportació dels usuaris de Slack, que és un fitxer CSV. Consulteu aquí per obtenir més informació:", "Importer_Source_File": "Selecció de fitxer d'origen", + "importer_status_finishing": "Quasi fet", + "importer_status_import_failed": "Error", "Inclusive": "Inclusiu", "Incoming_Livechats": "LiveChats entrants", "Incoming_WebHook": "WebHook entrant", @@ -1552,7 +1555,6 @@ "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_username": "El nom d'usuari introduït no és vàlid", - "Invalid_Export_File": "L'arxiu pujat no és un fitxer d'exportació %s vàlid.", "Invalid_Import_File_Type": "Tipus d'arxiu d'importació invàlid.", "Invalid_name": "El nom no ha d'estar buit", "Invalid_notification_setting_s": "Configuració de notificació invàlida: %s", diff --git a/packages/rocketchat-i18n/i18n/cs.i18n.json b/packages/rocketchat-i18n/i18n/cs.i18n.json index 165ccb055531..37b46acb8757 100644 --- a/packages/rocketchat-i18n/i18n/cs.i18n.json +++ b/packages/rocketchat-i18n/i18n/cs.i18n.json @@ -1508,6 +1508,7 @@ "Force_SSL_Description": "* Pozor! * volba _Vynutit SSL_ by nikdy neměla být používána s reverzní proxy. Máte-li reverzní proxy, řešte přesměrování tam. Tato možnost je pouze pro služby jako Heroku které toto neumožňují", "Force_visitor_to_accept_data_processing_consent": "Přinutit návštěvníka přijmout souhlas se zpracováním dat", "Force_visitor_to_accept_data_processing_consent_description": "Návštěvníci nesmějí začít chatovat bez souhlasu.", + "Invalid_Export_File": "Nahraný soubor není platný %s soubor exportu.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Souhlas se zpracováním údajů musí být založen na transparentním pochopení důvodu zpracování. Z tohoto důvodu musíte vyplnit níže uvedené nastavení, které se zobrazí uživatelům, a uvést důvody pro shromažďování a zpracování vašich osobních údajů.", "Forgot_password": "Zapomněli jste heslo?", "Forgot_Password_Description": "Můžete použít následující zástupné symboly:
  • [Forgot_Password_Url] pro adresu stránky na obnovu hesla
  • [name] pro celé jméno, [fname] pro křestní jméno a [lname] pro příjmení uživatele.
  • [email] pro email uživatelé.
  • [Site_Name] pro název a [Site_URL] pro a URL stránky.
", @@ -1658,6 +1659,12 @@ "Importer_setup_error": "Při nastavování nástroje pro import došlo k chybě.", "Importer_Slack_Users_CSV_Information": "Nahraný soubor musí být CSV soubor uživatelského profilu Slack. Pro více informací: ", "Importer_Source_File": "Výběr zdrojového souboru", + "importer_status_new": "Nezahájeno", + "importer_status_importing_users": "Import uživatelů", + "importer_status_importing_channels": "Import kanálů", + "importer_status_importing_messages": "Import zpráv", + "importer_status_finishing": "Téměř hotovo", + "importer_status_import_failed": "Chyba", "Importer_Upload_FileSize_Message": "Nastavení vašeho serveru umožňuje nahrávání souborů libovolné velikosti až do __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Nastavení vašeho serveru umožňuje nahrávání souborů libovolné velikosti.", "Importer_ExternalUrl_Description": "Můžete také použít adresu URL pro veřejně přístupný soubor:", @@ -1739,7 +1746,6 @@ "Invalid_confirm_pass": "Hesla nesouhlasí", "Invalid_email": "Zadaný e-mail je neplatný", "Invalid_username": "Zadané uživatelské jméno je neplatné", - "Invalid_Export_File": "Nahraný soubor není platný %s soubor exportu.", "Invalid_Import_File_Type": "Neplatný typ importovaného souboru.", "Invalid_name": "Název nesmí být prázdný", "Invalid_notification_setting_s": "Neplatné nastavení upozornění: %s", diff --git a/packages/rocketchat-i18n/i18n/cy.i18n.json b/packages/rocketchat-i18n/i18n/cy.i18n.json index b0734ac77831..649ca83c73b2 100644 --- a/packages/rocketchat-i18n/i18n/cy.i18n.json +++ b/packages/rocketchat-i18n/i18n/cy.i18n.json @@ -1209,6 +1209,7 @@ "force-delete-message_description": "Caniatâd i ddileu neges osgoi pob cyfyngiad", "Force_SSL": "Heddlu SSL", "Force_SSL_Description": "* Rhybudd! * Ni ddylid byth defnyddio SSL_FForce gyda dirprwy wrth gefn. Os oes gennych ddirprwy wrth gefn, dylech chi ail-gyfeirio YMA. Mae'r opsiwn hwn yn bodoli ar gyfer gosodiadau fel Heroku, nad yw'n caniatáu i'r cyfluniad ailgyfeirio'r ddirprwy wrth gefn.", + "Invalid_Export_File": "Nid ffeil allforio %s dilys yw'r ffeil a lwythir i fyny.", "Forgot_password": "Wedi anghofio eich cyfrinair", "Forgot_Password_Description": "Efallai y byddwch chi'n defnyddio'r canlynol i ddeiliaid lle:
  • [Forgot_Password_Url] ar gyfer yr URL adfer cyfrinair.
  • [name], [fname], [lname] ar gyfer enw llawn, enw cyntaf neu enw olaf y defnyddiwr, yn y drefn honno.
  • [e-bost] ar gyfer e-bost y defnyddiwr.
  • [Site_Name] a [Site_URL] ar gyfer yr Enw Cais a'r URL yn y drefn honno.
", "Forgot_Password_Email": "Cliciwch ymai ailosod eich cyfrinair.", @@ -1336,6 +1337,7 @@ "Importer_setup_error": "Digwyddodd gwall wrth sefydlu'r mewnforiwr.", "Importer_Slack_Users_CSV_Information": "Rhaid i'r ffeil a lwythir i fyny fod yn ffeil allforio Defnyddwyr Slack, sy'n ffeil CSV. Gweler yma am ragor o wybodaeth:", "Importer_Source_File": "Dewis Ffeiliau Ffynhonnell", + "importer_status_import_failed": "Gwall", "Inclusive": "Cynhwysol", "Incoming_Livechats": "Livechats sy'n dod i mewn", "Incoming_WebHook": "WebHook sy'n dod i mewn", @@ -1406,7 +1408,6 @@ "Invalid_confirm_pass": "Nid yw'r cadarnhad cyfrinair yn cyfateb i'r cyfrinair", "Invalid_email": "Mae'r e-bost a roddwyd yn annilys", "Invalid_username": "Mae'r enw defnyddiwr a roddwyd yn annilys", - "Invalid_Export_File": "Nid ffeil allforio %s dilys yw'r ffeil a lwythir i fyny.", "Invalid_Import_File_Type": "Math ffeil Mewnforio annilys.", "Invalid_name": "Ni ddylai'r enw fod yn wag", "Invalid_notification_setting_s": "Lleoliad hysbysu annilys: %s", diff --git a/packages/rocketchat-i18n/i18n/da.i18n.json b/packages/rocketchat-i18n/i18n/da.i18n.json index 28383789609d..a853a1ec6bdd 100644 --- a/packages/rocketchat-i18n/i18n/da.i18n.json +++ b/packages/rocketchat-i18n/i18n/da.i18n.json @@ -1287,6 +1287,7 @@ "force-delete-message_description": "Tilladelse til at slette en meddelelse omgå alle begrænsninger", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Forsigtig! * _Force SSL_ skal aldrig bruges med omvendt proxy. Hvis du har en omvendt proxy, skal du gøre omdirigeringen der. Denne mulighed findes til implementeringer som Heroku, der tillader ikke omdirigeringskonfigurationen ved omvendt proxy.", + "Invalid_Export_File": "Den uploadede fil er ikke en gyldig %s-eksportfil.", "Forgot_password": "Glemt din adgangskode", "Forgot_Password_Description": "Du kan bruge følgende pladsholdere:
  • [Forgot_Password_Url] til adgangskodegendannelseswebadressen.
  • [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.
", "Forgot_Password_Email": "Klik på herfor at nulstille din adgangskode.", @@ -1414,6 +1415,8 @@ "Importer_setup_error": "Der opstod en fejl under konfigurationen af ​​importøren.", "Importer_Slack_Users_CSV_Information": "Filen uploades skal være Slack's Users eksportfil, som er en CSV-fil. Se her for mere information:", "Importer_Source_File": "Source File Selection", + "importer_status_finishing": "Næsten færdig", + "importer_status_import_failed": "Fejl", "Inclusive": "Inklusive", "Incoming_Livechats": "Indkommende Livechats", "Incoming_WebHook": "Indkommende WebHook", @@ -1486,7 +1489,6 @@ "Invalid_confirm_pass": "Adgangskodebekræftelsen stemmer ikke overens med adgangskoden", "Invalid_email": "Den indtastede email er ugyldig", "Invalid_username": "Det indtastede brugernavn er ugyldigt", - "Invalid_Export_File": "Den uploadede fil er ikke en gyldig %s-eksportfil.", "Invalid_Import_File_Type": "Ugyldig importfiltype.", "Invalid_name": "Navnet må ikke være tomt", "Invalid_notification_setting_s": "Ugyldig meddelelsesindstilling:%s", diff --git a/packages/rocketchat-i18n/i18n/de-AT.i18n.json b/packages/rocketchat-i18n/i18n/de-AT.i18n.json index 0e6d2eeae601..1313ad50f1a8 100644 --- a/packages/rocketchat-i18n/i18n/de-AT.i18n.json +++ b/packages/rocketchat-i18n/i18n/de-AT.i18n.json @@ -929,6 +929,7 @@ "Display_offline_form": "Offline Nachricht anzeigen", "Display_unread_counter": "Zeigt die Anzahl der ungelesenen Nachrichten an", "Displays_action_text": "Zeigt Aktionstext", + "Discussions": "Diskussionen", "Dont_ask_me_again": "Frag mich nicht nochmal!", "Dont_ask_me_again_list": "Frag mich nicht nochmal Liste", "Do_not_display_unread_counter": "Zeigen Sie keinen Zähler dieses Kanals an", @@ -1214,6 +1215,7 @@ "force-delete-message_description": "Berechtigung zum Löschen einer Nachricht unter Umgehung aller Einschränkungen", "Force_SSL": "SSL erzwingen", "Force_SSL_Description": "*Achtung!* _Force SSL_ solte niemals mit einem Reverse-Proxy verwendet werden. Falls Sie einen Reverse-Proxy verwenden, sollten Sie die Weiterleitung DORT einrichten. Dies Option existiert für Anwendungen wie Heroku, die keine Weiterleitungskonfigurationen für Reverse-Proxy erlauben.", + "Invalid_Export_File": "Die angegebene Datei ist keine gültige %s Exportdatei.", "Forgot_password": "Passwort vergessen?", "Forgot_Password_Description": "Sie können die folgenden Platzhalter verwenden:
  • [Forgot_Password_Url] für die Passwortwiederherstellungs-URL.
  • [Name], [Name], [Name] für den vollständigen Namen, den Vornamen bzw. den Nachnamen des Benutzers.
  • [E-Mail] für die E-Mail des Nutzers.
  • [Site_Name] und [Site_URL] für den Anwendungsnamen bzw. die URL.
", "Forgot_Password_Email": "Klicken Sie hier, um Ihr Passwort zurückzusetzen.", @@ -1342,6 +1344,7 @@ "Importer_setup_error": "Bei der Konfiguration des Importers ist ein Fehler aufgetreten.", "Importer_Slack_Users_CSV_Information": "Die hochgeladene Datei muss die Exportdatei von Slack's User sein, die eine CSV-Datei ist. Sehen Sie hier für weitere Informationen:", "Importer_Source_File": "Auswahl der Quelldatei", + "importer_status_import_failed": "Fehler", "Inclusive": "Inklusive", "Incoming_Livechats": "Eingehende Livechats", "Incoming_WebHook": "Eingehender WebHook", @@ -1412,7 +1415,6 @@ "Invalid_confirm_pass": "Die Passwörter stimmen nicht überein.", "Invalid_email": "Die eingegebene E-Mail-Adresse ist ungültig.", "Invalid_username": "Der eingegebene Benutzername ist ungültig", - "Invalid_Export_File": "Die angegebene Datei ist keine gültige %s Exportdatei.", "Invalid_Import_File_Type": "Ungültiges Dateiformat zum Importieren.", "Invalid_name": "Es muss ein Name angegeben werden.", "Invalid_notification_setting_s": "Ungültige Benachrichtigungseinstellung: %s", @@ -2148,6 +2150,7 @@ "Retail": "Verkauf", "Retention_setting_changed_successfully": "Die Einstellung für die Aufbewahrungsrichtlinie wurde erfolgreich geändert", "RetentionPolicy": "Aufbewahrungsrichtlinie", + "RetentionPolicy_DoNotExcludeDiscussion": "Diskussionen einschließen", "RetentionPolicy_RoomWarning": "Nachrichten, die älter als __time__ sind, werden hier automatisch gelöscht", "RetentionPolicy_RoomWarning_Unpinned": "Nicht gepinnte Nachrichten, die älter als __time__ sind, werden hier automatisch bereinigt", "RetentionPolicy_RoomWarning_FilesOnly": "Dateien älter als __time__ werden hier automatisch bereinigt (Nachrichten bleiben erhalten)", @@ -2548,6 +2551,7 @@ "Tokens_Required_Input_Error": "Ungültige eingegebene Tokens", "Tokens_Required_Input_Placeholder": "Token-Asset-Namen", "Topic": "Thema", + "Total_Discussions": "Anzahl aller Diskussionen", "Total_messages": "Anzahl aller Nachrichten", "Tourism": "Tourismus", "Transcript_Enabled": "Fragen Sie den Besucher, ob er nach Abschluss des Chat ein Transkript möchte", diff --git a/packages/rocketchat-i18n/i18n/de.i18n.json b/packages/rocketchat-i18n/i18n/de.i18n.json index 73b308654177..f5fe1f02ef32 100644 --- a/packages/rocketchat-i18n/i18n/de.i18n.json +++ b/packages/rocketchat-i18n/i18n/de.i18n.json @@ -1144,7 +1144,7 @@ "Displays_action_text": "Zeigt den Aktionstext", "Discussion_name": "Name der Unterhaltung", "Discussion": "Unterhaltung", - "Discussions": "Unterhaltungen", + "Discussions": "Diskussionen", "Discussion_start": "Eine Unterhaltung beginnen", "Discussion_target_channel_description": "Wähle einen Kanal oder eine Gruppe aus, die zu Deinem Anliegen passt", "Discussion_target_channel_prefix": "Es wird eine Unterhaltung erstellt in", @@ -1534,6 +1534,7 @@ "Force_SSL_Description": "*Achtung!* _Force SSL_ sollte niemals mit einem Reverse-Proxy verwendet werden. Falls Sie einen Reverse-Proxy verwenden, sollten Sie die Weiterleitung DORT einrichten. Dies Option existiert für Anwendungen wie Heroku, die keine Weiterleitungskonfigurationen für Reverse-Proxy erlauben.", "Force_visitor_to_accept_data_processing_consent": "Benutzer zwingen, zur Datenverarbeitung zuzustimmen", "Force_visitor_to_accept_data_processing_consent_description": "Benutzern ist es ohne Einwilligung nicht erlaubt einen Chat zu starten.", + "Invalid_Export_File": "Die angegebene Datei ist keine gültige %s Exportdatei.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Die Zustimmung zur Datenverarbeitung muss auf einem einfach nachvollziehbaren Grund für die Verarbeitung der Daten beruhen. Aus diesem Deshalb muss das Feld unten ausgefüllt werden. Das Feld muss Informationen enthalten, die dem Benutzer auf einfache Art und Weise erklären, warum seine personenbezogenen Daten verarbeitet werden müssen.", "Forgot_password": "Passwort vergessen?", "Forgot_Password_Description": "Sie können die folgenden Platzhalter verwenden:
  • [Forgot_Password_Url] für die Passwort-Wiederherstellungs-URL.
  • [name], [fname], [lname] für den vollständigen Namen, Vornamen oder Nachnamen des Benutzers.
  • [email] für die E-Mail-Adresse des Benutzers.
  • .
", @@ -1685,6 +1686,12 @@ "Importer_setup_error": "Bei der Konfiguration des Importers ist ein Fehler aufgetreten.", "Importer_Slack_Users_CSV_Information": "Die hochgeladene Datei muss der Slack Benutzerexport im CSV Format sein. Siehe hier für weitere Informationen:", "Importer_Source_File": "Auswahl der Quelldatei", + "importer_status_new": "Nicht begonnen", + "importer_status_importing_users": "Importiere Benutzer", + "importer_status_importing_channels": "Importiere Kanäle", + "importer_status_importing_messages": "Importiere Nachrichten", + "importer_status_finishing": "Fast geschafft", + "importer_status_import_failed": "Fehler", "Importer_Upload_FileSize_Message": "Die Servereinstellungen erlauben einen Datei Upload mit einer maximalen Dateigröße von __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Die Servereinstellungen erlauben einen Datei Upload mit beliebiger Dateigröße.", "Importer_ExternalUrl_Description": "Sie können auch eine öffentlich erreichbare URL zur Datei angeben: ", @@ -1768,7 +1775,6 @@ "Invalid_confirm_pass": "Die Passwörter stimmen nicht überein.", "Invalid_email": "Die eingegebene E-Mail-Adresse ist ungültig.", "Invalid_username": "Der eingegebene Benutzername ist ungültig", - "Invalid_Export_File": "Die angegebene Datei ist keine gültige %s Exportdatei.", "Invalid_Import_File_Type": "Ungültiges Import-Dateiformat .", "Invalid_name": "Es muss ein Name angegeben werden.", "Invalid_notification_setting_s": "Ungültige Benachrichtigungseinstellung: %s", @@ -2000,7 +2006,7 @@ "LDAP_User_Search_Filter_Description": "Wenn angegeben, wird nur Benutzern, die dem Filter entsprechen, erlaubt, sich anzumelden. Wenn kein Filter angegeben ist, werden sich alle Benutzer in dem Bereich der angegebenen Domainbasis anmelden können.
Ein Beispiel für Active-Directory: `memberOf=cn=ROCKET_CHAT,ou=General Groups`
Ein Beispiel für OpenLDAP (erweiterbare Übereinstimmungssuche): `ou:dn:=ROCKET_CHAT`", "LDAP_User_Search_Scope": "Scope", "LDAP_Username_Field": "Feld für den Benutzernamen", - "LDAP_Username_Field_Description": "Geben Sie an, welches Feld als *Benutzername* für neue Benutzer verwendet werden soll. Lassen Sie das Feld leer, um den Nutzernamen zu verwenden, der auf der Anmeldeseite verwendet wird.
Es können auch Template-Tags wie `#{givenNamen}.#{sn}` verwendet werden.
Der Standardwert ist `sAMAccountName`.", + "LDAP_Username_Field_Description": "Geben Sie an, welches Feld als *Benutzername* für neue Benutzer verwendet werden soll. Lassen Sie das Feld leer, um den Nutzernamen zu verwenden, der auf der Anmeldeseite verwendet wird.
Es können auch Template-Tags wie `#{givenName}.#{sn}` verwendet werden.
Der Standardwert ist `sAMAccountName`.", "Lead_capture_email_regex": "Lead Capture E-Mail Regex", "Lead_capture_phone_regex": "Lead Capture Telefon Regex", "leave-c": "Kanäle verlassen", @@ -2661,7 +2667,7 @@ "remove-user_description": "Berechtigung, einen Benutzter aus einem Raum zu entfernen", "Remove_Admin": "Administrator entfernen", "Remove_as_leader": "Als Diskussionsleiter entfernen", - "reset-other-user-e2e-key": "Ende-zu-Ende-Verlüsselungsschlüssel eines anderen Nutzers zurücksetzen", + "reset-other-user-e2e-key": "Ende-zu-Ende-Verschlüsselungsschlüssel eines anderen Nutzers zurücksetzen", "Remove_as_moderator": "Moderatorenrechte entfernen", "Remove_as_owner": "Als Besitzer entfernen", "Remove_custom_oauth": "OAuth-Konto entfernen", @@ -2700,7 +2706,7 @@ "Retail": "Handel", "Retention_setting_changed_successfully": "Die Einstellung für die Aufbewahrungsrichtlinie wurde erfolgreich geändert", "RetentionPolicy": "Aufbewahrungsrichtlinie", - "RetentionPolicy_DoNotExcludeDiscussion": "Unterhaltungen einschließen", + "RetentionPolicy_DoNotExcludeDiscussion": "Diskussionen einschließen", "RetentionPolicy_RoomWarning": "Nachrichten, die älter als __time__ sind, werden hier automatisch gelöscht", "RetentionPolicy_RoomWarning_Unpinned": "Nicht gepinnte Nachrichten, die älter als __time__ sind, werden hier automatisch bereinigt", "RetentionPolicy_RoomWarning_FilesOnly": "Dateien älter als __time__ werden hier automatisch bereinigt (Nachrichten bleiben erhalten)", @@ -3200,7 +3206,7 @@ "Total": "Gesamt", "Total_abandoned_chats": "Total aufgegebene Chats", "Total_conversations": "Konversationen insgesamt", - "Total_Discussions": "Anzahl aller Unterhaltungen", + "Total_Discussions": "Anzahl aller Diskussionen", "Total_messages": "Anzahl aller Nachrichten", "Total_Threads": "Anzahl aller Threads", "Total_visitors": "Besucher insgesamt", diff --git a/packages/rocketchat-i18n/i18n/el.i18n.json b/packages/rocketchat-i18n/i18n/el.i18n.json index 1c8876d5b2a2..7d915d1c4cb3 100644 --- a/packages/rocketchat-i18n/i18n/el.i18n.json +++ b/packages/rocketchat-i18n/i18n/el.i18n.json @@ -1218,6 +1218,7 @@ "force-delete-message_description": "Άδεια διαγραφής ενός μηνύματος παρακάμπτοντας όλους τους περιορισμούς", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Προσοχή! * _Force SSL_ δεν πρέπει ποτέ να χρησιμοποιείται με αντίστροφη proxy. Εάν έχετε μια αντίστροφη proxy, θα πρέπει να κάνετε την ανακατεύθυνση εκεί. υπάρχει αυτή η επιλογή για αναπτύξεις όπως Heroku, που δεν επιτρέπει τη διαμόρφωση ανακατεύθυνση σε αντίστροφη proxy.", + "Invalid_Export_File": "Το αρχείο δεν είναι έγκυρο %s αρχείο εξαγωγής.", "Forgot_password": "Ξέχασα τον κωδικό μου", "Forgot_Password_Description": "Μπορείτε να χρησιμοποιήσετε τα ακόλουθα αντικείμενα κράτησης θέσης:
  • [Forgot_Password_Url] για τη διεύθυνση URL ανάκτησης κωδικού πρόσβασης.
  • [name], [fname], [lname] για το πλήρες όνομα, το όνομα ή το επώνυμο του χρήστη, αντίστοιχα.
  • [email] για τη διεύθυνση ηλεκτρονικού ταχυδρομείου του χρήστη.
  • [Site_Name] και [Site_URL] για το Όνομα της Εφαρμογής και τη διεύθυνση URL αντίστοιχα.
", "Forgot_Password_Email": "Κάντε κλικ εδώ για να ανακτήσετε τον κωδικό πρόσβασής σας.", @@ -1345,6 +1346,7 @@ "Importer_setup_error": "Παρουσιάστηκε σφάλμα κατά τη δημιουργία του εισαγωγέα.", "Importer_Slack_Users_CSV_Information": "Το αρχείο που μεταφορτώθηκε πρέπει να είναι το αρχείο εξαγωγής Χρηστών Slack, το οποίο είναι ένα αρχείο CSV. Δείτε εδώ για περισσότερες πληροφορίες:", "Importer_Source_File": "Επιλογή αρχείου προέλευσης", + "importer_status_import_failed": "Λάθος", "Inclusive": "Περιεκτικός", "Incoming_Livechats": "Εισερχόμενες Συνομιλίες", "Incoming_WebHook": "Είσοδος WebHook", @@ -1415,7 +1417,6 @@ "Invalid_confirm_pass": "Η επιβεβαίωση κωδικού δεν ταιριάζει με τον αρχικό κωδικό", "Invalid_email": "Το e-mail που δώσατε δεν είναι έγκυρο", "Invalid_username": "Το όνομα χρήστη που καταχωρίσατε είναι άκυρο", - "Invalid_Export_File": "Το αρχείο δεν είναι έγκυρο %s αρχείο εξαγωγής.", "Invalid_Import_File_Type": "Μη έγκυρος τύπος αρχείου εισαγωγής.", "Invalid_name": "Το όνομα δεν πρέπει να είναι κενό", "Invalid_notification_setting_s": "Μη έγκυρη ρύθμιση ειδοποίησης: %s", diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 72312faa2831..954f1558c29f 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1552,6 +1552,7 @@ "Force_SSL_Description": "*Caution!* _Force SSL_ should never be used with reverse proxy. If you have a reverse proxy, you should do the redirect THERE. This option exists for deployments like Heroku, that does not allow the redirect configuration at the reverse proxy.", "Force_visitor_to_accept_data_processing_consent": "Force visitor to accept data processing consent", "Force_visitor_to_accept_data_processing_consent_description": "Visitors are not allowed to start chatting without consent.", + "Invalid_Export_File": "The file uploaded isn't a valid %s export file.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Agreement with data processing must be based on a transparent understanding of the reason for processing. Because of this, you must fill out the setting below which will be displayed to users in order to provide the reasons for collecting and processing your personal information.", "Forgot_password": "Forgot your password?", "Forgot_Password_Description": "You may use the following placeholders:
  • [Forgot_Password_Url] for the password recovery URL.
  • [name], [fname], [lname] for the user's full name, first name or last name, respectively.
  • [email] for the user's email.
  • [Site_Name] and [Site_URL] for the Application Name and URL respectively.
", @@ -3607,4 +3608,4 @@ "Your_server_link": "Your server link", "Your_temporary_password_is_password": "Your temporary password is [password].", "Your_workspace_is_ready": "Your workspace is ready to use 🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/eo.i18n.json b/packages/rocketchat-i18n/i18n/eo.i18n.json index ff78d8f24aea..7a0663831181 100644 --- a/packages/rocketchat-i18n/i18n/eo.i18n.json +++ b/packages/rocketchat-i18n/i18n/eo.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Permeso forigi mesaĝon preterpasante ĉiujn limigojn", "Force_SSL": "Forto SSL", "Force_SSL_Description": "* Atento! * _Force SSL_ neniam devus esti uzata kun reversa proxy. Se vi havas reverĝan prokurilon, vi devas fari la alidirektilon TIE. Ĉi tiu opcio ekzistas por disfaldoj kiel Heroku, kiu ne permesas la alidirektan agordon ĉe la reversa proxy.", + "Invalid_Export_File": "La dosiero alŝutita ne estas valida%s eksporta dosiero.", "Forgot_password": "Ĉu vi forgesis vian pasvorton", "Forgot_Password_Description": "Vi povas uzi la jenajn anstataŭilojn:
  • [Forgot_Password_Url] por la pasvorta reakiro URL.
  • [nomo], [fname], [lname] por la plena nomo, unua nomo aŭ familinomo de la uzanto, respektive.
  • [retpoŝto] por la retpoŝto de la uzanto.
  • [Site_Name] kaj [Site_URL] por la Aplika nomo kaj URL respektive.
", "Forgot_Password_Email": "Alklaku ĉi tiepor restarigi vian pasvorton.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Eraro okazis dum starigo de la importisto.", "Importer_Slack_Users_CSV_Information": "La dosiero alŝutita devas esti eksporta dosiero de Slack, kiu estas CSV-dosiero. Vidu ĉi tie por pliaj informoj:", "Importer_Source_File": "Fonta dosier-elekto", + "importer_status_import_failed": "Eraro", "Inclusive": "Inclusive", "Incoming_Livechats": "Venontaj Livechatoj", "Incoming_WebHook": "Venonta WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "La konfirmilo de pasvorto ne kongruas kun pasvorto", "Invalid_email": "La retpoŝta eniro estas nevalida", "Invalid_username": "La uzantnomo enirita estas nevalida", - "Invalid_Export_File": "La dosiero alŝutita ne estas valida%s eksporta dosiero.", "Invalid_Import_File_Type": "Nevalida importa dosiero.", "Invalid_name": "La nomo ne devas esti malplena", "Invalid_notification_setting_s": "Nevalida agordo de sciigo:%s", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index f9ba5060632a..8d96a5d3dbfe 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -1296,6 +1296,7 @@ "force-delete-message_description": "Permiso para eliminar un mensaje que pasa por alto todas las restricciones", "Force_SSL": "Forzar SSL", "Force_SSL_Description": "* Precaución! * _Force SSL_ nunca debe ser usado con proxy inverso. Si usted tiene un proxy inverso, debería hacer la redirección AHÍ. Esta opción existe para los despliegues como Heroku, que no permite la configuración de redirección en el proxy inverso.", + "Invalid_Export_File": "El archivo subido no es un fichero de exportación válida %s.", "Forgot_password": "Olvidaste tu contraseña", "Forgot_Password_Description": "Puede usar los siguientes marcadores de posición:
  • [Forgot_Password_Url] para la URL de recuperación de contraseña.
  • [nombre], [fname], [lname] para el nombre completo, el nombre o el apellido del usuario, respectivamente.
  • [email] para el correo electrónico del usuario.
  • [Site_Name] y [Site_URL] para el nombre de la aplicación y la URL, respectivamente.
", "Forgot_Password_Email": "Haga clic en aquípara restablecer su contraseña.", @@ -1426,6 +1427,8 @@ "Importer_setup_error": "Se produjo un error al configurar el importador.", "Importer_Slack_Users_CSV_Information": "El archivo cargado debe ser el archivo de exportación de usuarios de Slack, que es un archivo CSV. Vea aquí para más información:", "Importer_Source_File": "Selección del archivo de origen", + "importer_status_finishing": "Casi listo", + "importer_status_import_failed": "Error", "Inclusive": "Inclusivo", "Incoming_Livechats": "LiveChats entrantes", "Incoming_WebHook": "WebHook entrante", @@ -1496,7 +1499,6 @@ "Invalid_confirm_pass": "La confirmación de la contraseña no coincide con la contraseña", "Invalid_email": "El e-mail ingresado es invalido", "Invalid_username": "El nombre de usuario ingresado no es válido", - "Invalid_Export_File": "El archivo subido no es un fichero de exportación válida %s.", "Invalid_Import_File_Type": "Tipo de archivo de importación inválido", "Invalid_name": "El nombre no debe estar vacío", "Invalid_notification_setting_s": "Configuración de la notificación inválido: %s", diff --git a/packages/rocketchat-i18n/i18n/fa.i18n.json b/packages/rocketchat-i18n/i18n/fa.i18n.json index 22883bd9c427..46780c583a62 100644 --- a/packages/rocketchat-i18n/i18n/fa.i18n.json +++ b/packages/rocketchat-i18n/i18n/fa.i18n.json @@ -20,6 +20,7 @@ "access-mailer_description": "مجوز ارسال ایمیل گروهی به همه کاربران", "access-permissions": "دسترسی به صفحه مجوزها", "access-permissions_description": "تعیین مجوزها برای نقش های مختلف", + "access-setting-permissions": "تغییر مجوز های مبتنی بر تنظیمات", "Access_not_authorized": "دسترسی مجاز نمی باشد", "Access_Token_URL": "دسترسی به آدرس توکن", "Accessing_permissions": "مجوزهای دسترسی", @@ -143,6 +144,7 @@ "Accounts_OAuth_Proxy_host": "میزبان پروکسی", "Accounts_OAuth_Proxy_services": "خدمات پروکسی", "Accounts_OAuth_Tokenpass": "ورود با پسورد توکن", + "Accounts_OAuth_Tokenpass_callback_url": "برگشت آدرس tokenpass", "Accounts_OAuth_Tokenpass_id": "شناسه Tokenpass", "Accounts_OAuth_Tokenpass_secret": "رمز Tokenpass", "Accounts_OAuth_Twitter": "صفحه ورود توییتر", @@ -190,6 +192,7 @@ "Accounts_RegistrationForm_Secret_URL": "آدرس مخفی", "Accounts_RegistrationForm_SecretURL": "آدرس مخفی فرم ثبت نام", "Accounts_RegistrationForm_SecretURL_Description": "باید رشته ای اتفاقی را برای اضافه شدن به آدرس ثبت نام تعیین کنید. برای مثال: https://open.rocket.chat/register/[secret_hash]", + "Accounts_Registration_InviteUrlType": "نوع آدرس دعوت", "Accounts_Registration_InviteUrlType_Direct": "مستقیم", "Accounts_Registration_InviteUrlType_Proxy": "پروکسی", "Accounts_RequireNameForSignUp": "برای ثبت نام به نام نیاز است", @@ -252,7 +255,7 @@ "Alerts": "هشدارها", "Alias": "نام مستعار", "Alias_Format": "فرمت نام مستعار", - "Alias_Format_Description": "پیام های Slack را با نام مستعار وارد کنید. ٪ s با نام کاربری کاربر جایگزین می شود. اگر خالی باشد ، از نام مستعار استفاده نمی شود", + "Alias_Format_Description": "پیام های Slack را با نام مستعار وارد کنید. %s با نام کاربری کاربر جایگزین می شود. اگر خالی باشد ، از نام مستعار استفاده نمی شود", "Alias_Set": "نام مستعار مجموعه", "Aliases": "نام مستعار", "All": "همه", @@ -322,6 +325,13 @@ "API_GitHub_Enterprise_URL": "URL سرور", "API_GitHub_Enterprise_URL_Description": "مثال: http://domain.com (بدون اسلش آخری)", "API_Gitlab_URL": "URL GitLab", + "API_Personal_Access_Token_Name": "دسترسی شخصی نام توکن", + "API_Personal_Access_Tokens_To_REST_API": " دسترسی شخصی توکن به REST API", + "API_Personal_Access_Tokens_Remove_Modal": "آیا مطمئن هستید که می خواهید این نشانه دسترسی شخصی را حذف کنید؟", + "API_Personal_Access_Token_Generated": "دسترسی شخصی توکن با موفقیت تولید شد", + "API_Personal_Access_Token_Generated_Text_Token_s_UserId_s": "لطفاً نشانه خود را با دقت ذخیره کنید زیرا دیگر نمی توانید بعد از آن مشاهده کنید
Token: __token__
Your user Id: __userId__", + "API_Personal_Access_Tokens_Regenerate_Modal": "اگر نشانه خود را گم کرده یا فراموش کرده اید ، می توانید آن را دوباره ایجاد کنید ، اما به یاد داشته باشید که همه برنامه هایی که از این نشانه ستفاده می کنند باید به روز شوند", + "API_Personal_Access_Tokens_Regenerate_It": "بازسازی توکن", "API_Shield_Types": "انواع سپر", "API_Shield_Types_Description": "انواع سپر برای فعال کردن به عنوان یک لیست با کاما از هم جدا، از 'آنلاین'، 'کانال' یا `*` برای همه انتخاب کنید", "API_Token": "توکن API", @@ -343,11 +353,15 @@ "App_status_disabled": "معلول", "App_status_error_disabled": "غیر فعال: خطای Uncaught", "App_status_initialized": "آغاز شده", + "App_status_invalid_license_disabled": "غیر فعال: لایسنس نامعتبر", "App_status_invalid_settings_disabled": "غیر فعال: پیکربندی مورد نیاز", "App_status_manually_disabled": "غیر فعال: دستی", "App_status_manually_enabled": "فعال", "App_status_unknown": "ناشناخته", "App_support_url": "پشتیبانی از آدرس", + "App_Url_to_Install_From": "نصب از آدرس", + "App_Url_to_Install_From_File": "نصب از فایل", + "App_user_not_allowed_to_login": "کاربران برنامه مجاز به ورود مستقیم نیستند.", "Appearance": "ظاهر", "Application_added": "نرم افزار اضافه شده", "Application_Name": "نام نرم افزار", @@ -355,8 +369,23 @@ "Apply": "درخواست دادن", "Apply_and_refresh_all_clients": "اعمال کن و تمامی کاربران را رفرش کن", "Apps": "برنامه ها", + "Apps_Engine_Version": "ورژن موتور برنامه ها", + "Apps_Framework_Development_Mode": "فعال کردن حالت توسعه", + "Apps_Framework_Development_Mode_Description": "حالت توسعه امکان نصب برنامه هایی را می دهد که از Rocket.Chat's Marketplace نیستند.", "Apps_Framework_enabled": "چارچوب برنامه را فعال کنید", + "Apps_Marketplace_Deactivate_App_Prompt": "آیا واقعاً می خواهید این برنامه را غیرفعال کنید؟", + "Apps_Marketplace_Modify_App_Subscription": "تصحیح کردن اشتراک", + "Apps_Marketplace_Uninstall_App_Prompt": "آیا واقعاً می خواهید این برنامه را حذف کنید؟", + "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "در هر صورت حذف کنید", + "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "این برنامه اشتراک دارد و حذف آن لغو نخواهد شد. اگر می خواهید این کار را انجام دهید ، لطفاً قبل از حذف اشتراک ، اشتراک خود را اصلاح کنید.", + "Apps_Marketplace_Login_Required_Title": "نیازمند ورود به بازار", + "Apps_Marketplace_Login_Required_Description": "خرید برنامه از Rocket.Chat Marketplace نیاز به ثبت فضای کاری شما و ورود به سیستم دارد.", + "Apps_Marketplace_pricingPlan_monthly": "__ قیمت__ / ماه", + "Apps_Marketplace_pricingPlan_monthly_perUser": "__ قیمت__ / ماه برای هر کاربر", + "Apps_Marketplace_pricingPlan_yearly": "__ قیمت__ / سال", + "Apps_Marketplace_pricingPlan_yearly_perUser": "__ قیمت__ / سال برای هر کاربر", "Apps_Settings": "تنظیمات برنامه", + "Apps_User_Already_Exists": "نام کاربری \"__username__\" قبلا استفاده شده است.\nتغییر نام یا حذف کاربر با استفاده از آن برای نصب این برنامه", "Apps_WhatIsIt": "برنامه ها: آنها چه هستند؟", "Apps_WhatIsIt_paragraph1": "نماد جدید در منطقه اداری! این چه معنی و چه برنامه هایی دارد؟", "Apps_WhatIsIt_paragraph2": "اول از همه، برنامه ها در این زمینه به برنامه های تلفن همراه اشاره نمی کنند. در حقیقت، بهتر است از نظر پلاگینها یا یکپارچگی پیشرفته به آنها فکر کنید.", @@ -370,20 +399,27 @@ "Are_you_sure": "آیا مطمئن هستید؟", "Are_you_sure_you_want_to_delete_your_account": "آیا شما مطمئن هستید که می خواهید حساب کاربری خود را حذف کنید؟", "Are_you_sure_you_want_to_disable_Facebook_integration": "آیا مطمئن هستید که می خواهید یکپارچگی فیس بوک را غیرفعال کنید؟", + "Are_you_sure_you_want_to_delete_this_record": "آیا مطمئن هستید که می خواهید این رکورد را حذف کنید؟", + "Assets": "دارایی ها", "assign-admin-role": "اعطای نقش مدیریت", "assign-admin-role_description": "مجوز اختصاص دادن نقش مدیر به کاربران دیگر", "Assign_admin": "اختصاص دادن مدیر", + "Assign_new_conversations_to_bot_agent": "اختصاص دادن گفتگوها به ربات", + "Assign_new_conversations_to_bot_agent_description": "سیستم مسیریابی قبل از پرداختن به مکالمات جدید با یک عامل انسانی سعی در پیدا کردن یک عامل بات خواهد داشت.", + "assign-roles": "اختصاص دادن نقش", "at": "در", "At_least_one_added_token_is_required_by_the_user": "حداقل یک نشانه اضافه شده توسط کاربر مورد نیاز است", "AtlassianCrowd": "جمعیت پرشور", "Attachment_File_Uploaded": "فایل آپلود شده", "Attribute_handling": "دستکاری مشخص", "Audio": "سمعی", + "Audios": "صوتی ها", "Audio_message": "پیام صوتی", "Audio_Notification_Value_Description": "می تواند هر صدای سفارشی یا موارد پیش فرض آن باشد: beep، chelle، ding، drop، highbell، season", "Audio_Notifications_Default_Alert": "هشدار پیشفرض اعلان های صوتی", "Audio_Notifications_Value": "پیام پیشفرض اعلان صوتی", "Auth_Token": "Auth Token", + "Authentication": "احراز هویت", "Author": "نویسنده", "Author_Information": "اطلاعات نویسنده", "Authorization_URL": "آدرس احراز هویت", @@ -391,6 +427,7 @@ "auto-translate": "ترجمه خودکار", "auto-translate_description": "اجازه استفاده از ابزار خودکار ترجمه", "Auto_Load_Images": "تصاویر با قابلیت بارگیری خودکار", + "AutoLinker": "اتصال دهنده خودکار", "AutoLinker_Email": "ایمیل AutoLinker", "AutoLinker_Phone": "تلفن AutoLinker", "AutoLinker_Phone_Description": "به صورت خودکار برای شماره های تلفن لینک شده است. مثال: `(123) 456-7890`", @@ -401,18 +438,31 @@ "AutoLinker_Urls_www": "آدرس های AutoLinker www", "AutoLinker_UrlsRegExp": "AutoLinker URL Regular Expression", "Automatic_Translation": "ترجمه خودکار", + "Author_Site": "سایت نویسنده", "AutoTranslate": "خودکار ترجمه", + "Auto_Selection": "انتخاب خودکار", "Auto_Translate": "خودکار ترجمه", "AutoTranslate_APIKey": "کلید ای پی ای", "AutoTranslate_Change_Language_Description": "تغییر زبان خودکار ترجمه پیام های قبلی را ترجمه نمی کند.", "AutoTranslate_Enabled": "فعالسازی خودکار ترجمه", "AutoTranslate_Enabled_Description": "فعالسازی ترجمه خودکار به افرادی که دارای اجازه ترجمه خودکاررا می دهد، اجازه می دهد همه پیام ها به طور خودکار به زبان انتخاب شده شما ترجمه شوند. ممکن است هزینه ها اعمال شود، Google Documentationرا ببینید", + "AutoTranslate_Google": "گوگل", + "AutoTranslate_ServiceProvider": "ارائه دهنده خدمات", "Available": "در دسترس", "Available_agents": "عامل های موجود", "Avatar": "آواتار", "Avatar_changed_successfully": "آواتار با موفقیت تعویض شد", "Avatar_URL": "آدرس آواتار", "Avatar_url_invalid_or_error": "آدرس وارد شده قابل دسترسی نیست یا غلط است. لطفا با آدرس دیگری امتحان کنید.", + "Avg_chat_duration": "میانگین مدت زمان چت", + "Avg_first_response_time": "میانگین زمان پاسخ اول", + "Avg_of_abandoned_chats": "میانگین چت های رها شده", + "Avg_of_available_service_time": "میانگین زمان ارائه خدمات", + "Avg_of_chat_duration_time": "میانگین مدت زمان چت", + "Avg_of_service_time": "میانگین زمان سرویس", + "Avg_of_waiting_time": "میانگین زمان انتظار", + "Avg_response_time": "میانگین مدت زمان پاسخ", + "Avg_reaction_time": "میانگین مدت زمان واکنش", "away": "دور", "Away": "دور", "away_female": "دور", @@ -427,12 +477,18 @@ "Back_to_login": "بازگشت به صفحه ورود", "Back_to_Manage_Apps": "بازگشت به مدیریت برنامه ها", "Back_to_permissions": "بازگشت به مجوزها", + "Back_to_room": "بازگشت به اتاق", "Backup_codes": "کد پشتیبان", "ban-user": "کاربر ممنوع", "ban-user_description": "مجاز به ممنوعیت یک کاربر از یک کانال", "Beta_feature_Depends_on_Video_Conference_to_be_enabled": "ویژگی بتا وابسته به کنفرانس ویدیویی فعال می شود", + "Better": "بهتر", + "Best_first_response_time": "بهترین زمان پاسخ اول", "Block_User": "مسدود کردن کاربر", "Blockchain": "بلوچین", + "Blockstack_Auth_Description": "توضیحات نویسنده", + "Blockstack_ButtonLabelText": "متن برچسب دکمه", + "Blockstack_Generate_Username": "ایجاد نام کاربری", "Body": "محتوا", "bold": "برجسته", "bot_request": "درخواست ربات", @@ -443,11 +499,18 @@ "Broadcast_channel": "پخش کانال", "Broadcast_channel_Description": "فقط کاربران مجاز میتوانند پیام های جدیدی بنویسند، اما کاربران دیگر قادر خواهند بود پاسخ دهند", "Broadcast_Connected_Instances": "پخش نمونه های متصل", + "Broadcasting_api_key": "پخش کلید API", + "Broadcasting_client_id": "پخش شناسه مشتری", + "Broadcasting_client_secret": "پخش راز مشتری", + "Broadcasting_enabled": "فعال کردن پخش", + "Broadcasting_media_server_url": "آدرس اینترنتی سرور رسانه ای", + "Browse_Files": "مرور پرونده ها", "Bugsnag_api_key": "کلید API Bugsnag", "Build_Environment": "محیط زیست ساختن", "bulk-register-user": "فیدبک ایجاد کانال ها", "bulk-register-user_description": "مجوز ایجاد کانال به صورت عمده", "Busiest_day": "شلوغترین روز", + "Busiest_time": "شلوغترین زمان", "busy": "مشغول", "Busy": "مشغول", "busy_female": "مشغول", @@ -456,6 +519,7 @@ "Busy_male": "مشغول", "by": "توسط", "cache_cleared": "حافظه پنهان پاک شده است", + "call-management": "مدیریت تماس", "Cancel": "لغو", "Canceled": "لغو شد", "Cancel_message_input": "لغو", @@ -477,10 +541,14 @@ "CAS_Sync_User_Data_Enabled_Description": "همیشه اطلاعات خارجی کاربر CAS را در زمان ورود به صفات موجود همگام سازی کنید. توجه: ویژگی ها همیشه در زمان ایجاد حساب ایجاد شده است.", "CAS_Sync_User_Data_FieldMap": "نقشه مشخص", "CAS_Sync_User_Data_FieldMap_Description": "از این ورودی JSON برای ساخت ویژگی های داخلی (کلید) از ویژگی های خارجی (ارزش) استفاده کنید. نام ویژگی های خارجی با محتویات '٪' در رشته های ارزش درج خواهد شد.
به عنوان مثال، {{ایمیل}:٪٪ email٪، نام:٪ firstname٪،٪ lastname٪}}

نقشه ویژگی همیشه تعبیه شده است. در CAS 1.0 تنها ویژگی `username` در دسترس است. ویژگی های داخلی موجود عبارتند از: نام کاربری، نام، ایمیل، اتاق؛ اتاق ها لیستی از اتاق های جدا شده با کاما هستند که برای ایجاد پیوستن به کاربر ایجاد می شوند e.g:: \"\" اتاق \":\"٪ team٪،٪ department٪ \"} به کاربران CAS در ایجاد کانال های تیم و کانال خود می پیوندند.", + "CAS_trust_username": "اعتماد به نام کاربری CAS", + "CAS_trust_username_description": "هنگامی که فعال باشد ، Rocket.Chat به شما اطمینان خواهد داد که هر نام کاربری از CAS به همان کاربر در Rocket تعلق دارد.\nچت. در صورت تغییر نام کاربر در CAS ، ممکن است این مورد نیاز باشد ، اما ممکن است به افراد اجازه دهد تا با تغییر نام کاربران CAS خود ، کنترل حساب های Rocket.Chat را به دست گیرند.", "CAS_version": "نسخه CAS", "CAS_version_Description": "فقط از یک نسخه CAS پشتیبانی شده با سرویس CAS SSO خود استفاده کنید.", "Categories": "رده‌ها", "CDN_PREFIX": "پیشوند CDN", + "CDN_PREFIX_ALL": "از پیشوند CDN برای همه دارایی ها استفاده کنید", + "CDN_JSCSS_PREFIX": "پیشوند CDN برای JS / CSS", "Certificates_and_Keys": "گواهینامه ها و کلیدها", "Change_Room_Type": "تغییر نوع اتاق", "Changing_email": "تغییر ایمیل", @@ -490,7 +558,7 @@ "Channel_already_exist_static": "کانال در حال حاضر وجود دارد.", "Channel_already_Unarchived": "کانال `#%s` در حال حاضر آرشیو نشده است", "Channel_Archived": "کانال `#%s` با موفقیت آرشیو شد", - "Channel_created": "کانال #٪ s ایجاد شده است.", + "Channel_created": "کانال #%s ایجاد شده است.", "Channel_doesnt_exist": "کانال `#%s` وجود ندارد.", "Channel_name": "نام کانال", "Channel_Name_Placeholder": "لطفا نام کانال را وارد کنید...", @@ -501,6 +569,7 @@ "Channels_list": "لیست کانال های عمومی", "Chat_button": "دکمه چت", "Chat_closed": "چت بسته است", + "Chat_closed_by_agent": "چت توسط نماینده بسته شد", "Chat_closed_successfully": "چت با موفقیت بسته شد", "Chat_Now": "چت کن", "Chat_window": "پنجره چت", @@ -510,7 +579,7 @@ "Chatpal_AdminPage": "صفحه مدیریت Chattal", "Chatpal_All_Results": "همه", "Chatpal_API_Key": "کلید ای پی ای", - "Chatpal_API_Key_Description": "شما هنوز کلید APIندارید؟ دریافت کنید!", + "Chatpal_API_Key_Description": "شما هنوز کلید API ندارید؟ یکی بگیر! ", "Chatpal_Backend": "نوع پایه", "Chatpal_Backend_Description": "اگر میخواهید از Chatpal به عنوان یک سرویس یا به عنوان نصب روی سایت استفاده کنید، انتخاب کنید", "Chatpal_Base_URL": "آدرس پایه", @@ -542,8 +611,8 @@ "Chatpal_one_search_result": "1 نتیجه یافت شد", "Chatpal_Rooms": "اتاق", "Chatpal_run_search": "جست و جو", - "Chatpal_search_page_of": "صفحه٪ s از٪ s", - "Chatpal_search_results": "٪ s نتایج یافت شد", + "Chatpal_search_page_of": "صفحه%s از%s", + "Chatpal_search_results": "%s نتایج یافت شد", "Chatpal_Search_Results": "نتایج جستجو", "Chatpal_Suggestion_Enabled": "پیشنهادات فعال شده است", "Chatpal_TAC_read": "من شرایط و ضوابط را مطالعه کرده ام", @@ -560,55 +629,107 @@ "Choose_the_username_that_this_integration_will_post_as": "نام کاربری را که این یکپارچه سازی به عنوان آن ارسال خواهد شد انتخاب کنید.", "clean-channel-history": "پاک کردن تاریخچه کانال", "clean-channel-history_description": "مجوز پاک کردن تاریخ از کانالها", + "Clean_Usernames": "پاک کردن نام کاربری", "clear": "پاک کردن", "Clear_all_unreads_question": "پاک کردن همه ناخوانده ها؟", "clear_cache_now": "پاک کردن Cache Now", "clear_history": "پاک کردن تاریخچه", "Click_here": "اینجا کلیک کنید", "Click_here_for_more_info": "برای اطلاعات بیشتر اینجا کلیک کنید", + "Click_here_to_enter_your_encryption_password": "برای وارد کردن پسورد رمزگذاری خود اینجا را کلیک کنید", + "Click_here_to_view_and_copy_your_password": "برای مشاهده و کپی رمز خود اینجا را کلیک کنید.", "Click_the_messages_you_would_like_to_send_by_email": "روی پیغامی که مایلید از طریق ایمیل ارسال کنید کلیک کنید", "Click_to_join": "برای پیوستن کلیک کنید!", + "Click_to_load": "برای بارگیری کلیک کنید", "Client_ID": "شناسه مشتری", "Client_Secret": "رمز مشتری", "Clients_will_refresh_in_a_few_seconds": "مشتریان طی چند ثانیه رفرش خواهند شد", "close": "بستن", "Close": "نزدیک", "close-livechat-room": "بستن اتاق Livechat", + "Cloud_workspace_connected_plus_account": "فضای کاری شما اکنون به Rocket.Chat Cloud متصل شده است و یک حساب کاربری مرتبط است.", "close-livechat-room_description": "اجازه بستن کانال LiveChat فعلی", "close-others-livechat-room": "بستن اتاق Livechat", + "Cloud_workspace_connected_without_account": "فضای کاری شما اکنون به Rocket.Chat Cloud متصل است. در صورت تمایل می توانید وارد Rocket.Chat Cloud شوید و فضای کاری خود را با حساب Cloud خود مرتبط کنید.", "close-others-livechat-room_description": "اجازه بستن سایر کانالهای LiveChat", "Closed": "بسته", + "Closed_At": "بسته شد در", "Closed_by_visitor": "بسته شده توسط بازدید کننده", "Closing_chat": "در حال بستن چت", + "Cloud": "ابر", + "Cloud_Register_manually": "ثبت دستی", + "Cloud_click_here": "پس از کپی کردن متن ، به کنسول ابری بروید. [اینجا کلیک کنید]()", + "Cloud_register_offline_finish_helper": "پس از اتمام مراحل ثبت نام در بسترCloud ، باید متنی برای شما ارائه شود. لطفاً برای پایان ثبت نام آن را در اینجا جایگذاری کنید.", + "Cloud_register_offline_helper": "در صورت محدود بودن دسترسی به شبکه ، می توان مکان های کاری را به صورت دستی ثبت کرد. متن را کپی کنید و برای تکمیل مراحل به کنسول Cloud ما بروید.", + "Cloud_register_success": "فضای کاری شما با موفقیت ثبت شده است!", + "Cloud_register_error": "هنگام پردازش درخواست شما خطایی رخ داده است. لطفا بعدا دوباره امتحان کنید.", + "Cloud_connect": "اتصال Roket.Chat Cloud", + "Cloud_connect_support": "اگر هنوز ایمیل ثبت نام دریافت نکردید ، لطفاً اطمینان حاصل کنید که ایمیل شما در بالا به روز شده است. اگر هنوز مشکل دارید می توانید با پشتیبانی تماس بگیرید", + "Cloud_console": "کنسول Cloud", + "Cloud_Info": "اطلاعات Cloud", + "Cloud_what_is_it": "این چیه؟", + "Cloud_what_is_it_services_like": "خدمات مانند:", + "Cloud_what_is_it_additional": "علاوه بر این شما می توانید مجوزها ، صورتحساب و پشتیبانی از کنسول ابر Rocket.Chat Cloud را مدیریت کنید.", + "Cloud_workspace_connected": "فضای کاری شما به Rocket.Chat Cloud متصل است. ورود به حساب Rocket.Chat Cloud خود در اینجا به شما امکان می دهد با برخی از سرویس ها مانند Marketplace تعامل کنید.", + "Cloud_workspace_support": "اگر با سرویس ابری مشکلی دارید ، ابتدا سعی کنید همگام سازی کنید. در صورت ادامه این مشکل ، لطفاً یک بلیط پشتیبانی در کنسول ابر را باز کنید.", + "Cloud_workspace_disconnect": "اگر دیگر مایل به استفاده از خدمات ابری نیستید می توانید فضای کاری خود را از Rocket.Chat Cloud جدا کنید.", + "Cloud_login_to_cloud": "ورود به Rocket.Chat Cloud", + "Cloud_logout": "خروج از Rocket.Chat Cloud", + "Cloud_address_to_send_registration_to": "آدرس ارسال ایمیل ثبت نام Cloud به شما.", + "Cloud_update_email": "به روز رسانی ایمیل", + "Cloud_resend_email": "ارسال دوباره ایمیل", + "Cloud_manually_input_token": "نشانه دریافت شده از ایمیل ثبت نام Cloud را به صورت دستی وارد کنید.", + "Cloud_registration_required": "نیاز به ثبت نام", + "Cloud_registration_required_description": "به نظر می رسد در هنگام راه اندازی شما تصمیم به ثبت نام فضای کاری خود ندارید.", + "Cloud_registration_requried_link_text": "برای ثبت فضای کاری خود اینجا را کلیک کنید.", + "Cloud_error_in_authenticating": "هنگام تأیید اعتبار ، خطایی رخ داده", + "Cloud_error_code": "کد:", + "Cloud_status_page_description": "اگر سرویس ویژه Cloud مشکلی دارد ، می توانید موارد شناخته شده را در صفحه وضعیت ما در اینجا بررسی کنید", + "Cloud_Service_Agree_PrivacyTerms": "سرویس ابر با حریم خصوصی موافقت می کند", + "Cloud_troubleshooting": "عیب یابی", + "Collaborative": "تعاملی", "Collapse_Embedded_Media_By_Default": "قبض رسانه های جاسازی شده به طور پیش فرض", "color": "رنگ", "Color": "رنگ", + "Colors": "رنگ ها", "Commands": "دستورات", "Comment_to_leave_on_closing_session": "نظر به تعطیل شدن جلسه", "Common_Access": "دسترسی مشترک", "Community": "جامعه", "Compact": "جمع و جور", "Condensed": "چگال", + "Completed": "تکمیل شده", "Computer": "کامپیوتر", + "Confirm_new_encryption_password": "تایید گذرواژه جدید", "Confirm_password": "رمز عبور خود را تأیید کنید", + "Connect": "اتصال", "Connection_Closed": "اتصال بسته شد", "Connection_Reset": "تنظیم مجدد اتصال", + "Connectivity_Services": "خدمات اتصال", "Consulting": "مشاوره", "Consumer_Goods": "کالاهای مصرفی", "Contains_Security_Fixes": "دارای رفع امنیتی است", + "Contact": "مخاطب", "Content": "محتوا", "Continue": "ادامه هید", "Continuous_sound_notifications_for_new_livechat_room": "اطلاعیه های مداوم صدا برای اتاق جدید livechat", "Conversation": "مکالمه", + "Conversations": "گفتگوها", "Conversation_closed": "مکالمه بسته: __comment__.", + "Conversation_finished": "گفگتگو پایان یافت", "Conversation_finished_message": "مکالمه پیام خاتمه یافته", - "conversation_with_s": "گفتگو با٪ s", + "Conversation_finished_text": "متن گفتگو پایان یافت", + "Conversations_per_day": "گفتگوها در هر روز", + "conversation_with_s": "گفتگو با%s", "Convert_Ascii_Emojis": "تبدیل ASCII به Emoji", "Copied": "کپی شد", "Copy": "کپی", + "Copy_text": "کپی متن", "Copy_to_clipboard": "کپی در کلیپبورد", "COPY_TO_CLIPBOARD": "کپی در کلیپبورد", + "could-not-access-webdav": "دسترسی به WebDAV امکان پذیر نیست", "Count": "شمردن", + "Counters": "پیشخوان", "Country": "کشور", "Country_Afghanistan": "افغانستان", "Country_Albania": "آلبانی", @@ -855,8 +976,11 @@ "create-c_description": "مجوز ایجاد کانالهای عمومی", "create-d": "ایجاد پیام مستقیم", "create-d_description": "اجازه شروع پیام مستقیم", + "create-invite-links": "ایجاد لینک های دعوت", + "create-invite-links_description": "اجازه ایجاد لینک های دعوت به کانال ها", "create-p": "ایجاد کانال های خصوصی", "create-p_description": "مجوز ایجاد کانال های خصوصی", + "create-personal-access-tokens": "ایجاد دسترسی شخصی Tokens", "create-user": "ایجاد کاربر", "create-user_description": "مجوز ایجاد کاربران", "Create_A_New_Channel": "ایجاد یک کانال جدید", @@ -864,15 +988,19 @@ "Create_unique_rules_for_this_channel": "برای این کانال قوانین منحصر به فرد ایجاد کنید", "Created_at": "ایجاد شده در", "Created_at_s_by_s": "ایجاد در %s توسط %s", - "Created_at_s_by_s_triggered_by_s": "توسط در ٪ sایجاد شده توسط٪ sبوسیله ٪ s", + "Created_at_s_by_s_triggered_by_s": "توسط در %sایجاد شده توسط%sبوسیله %s", "CRM_Integration": "ادغام CRM", + "CROWD_Allow_Custom_Username": "اجازه نام کاربری سفارشی در Rocket.Chat", "CROWD_Reject_Unauthorized": "رد غیر مجاز", "Crowd_sync_interval_Description": "فاصله بین هماهنگی ها. مثال \"هر 24 ساعت\" یا \"در اولین روز هفته\"، مثالهای بیشتری در [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "Current_Chats": "چت های کنونی", + "Current_File": " فایل کنونی", + "Current_Import_Operation": "وارد کردن فعلی", "Current_Status": "وضعیت فعلی", "Custom": "سفارشی", "Custom CSS": "CSS سفارشی", "Custom_agent": "نمایندگی سفارشی", + "Custom_dates": "تاریخ های سفارشی", "Custom_emoji": "Emoji سفارشی", "Custom_Emoji": "Emoji سفارشی", "Custom_Emoji_Add": "افزودن Emoji جدید", @@ -888,7 +1016,10 @@ "Custom_oauth_unique_name": "نام یکتای oauth سفارشی", "Custom_Scripts": "اسکریپت های سفارشی", "Custom_Script_Logged_In": "اسکریپت سفارشی برای کاربران وارد شده", + "Custom_Script_Logged_In_Description": "اسکریپت هایی سفارشی همیشه و برای هر کاربری که وارد شده اجرا می شود. (هروقت وارد سیستم و چت شوید)", "Custom_Script_Logged_Out": "اسکریپت سفارشی برای کاربران خارج شده", + "Custom_Script_On_Logout": "اسکریپت سفارشی برای خروج", + "Custom_Script_On_Logout_Description": "اسکریپت سفارشی که فقط هنگام خروج از سیستم اجرا می شود", "Custom_Sound_Add": "اضافه کردن سفارشی صدا", "Custom_Sound_Delete_Warning": "حذف صدا نمیتواند لغو شود", "Custom_Sound_Error_Invalid_Sound": "صدای نامعتبر است", @@ -899,15 +1030,33 @@ "Custom_Sounds": "برای تلفن های موبایل سفارشی", "Custom_Translations": "ترجمه های سفارشی", "Custom_Translations_Description": "باید JSON معتبر باشد که کلیدها زبان هایی هستند که شامل یک فرهنگ لغت کلید و ترجمه هستند. به عنوان مثال:
{\n\"en\": {\n\"کانال ها\": \"اتاق ها\"\n}،\n\"pt\": {\n\"کانال ها\": \"سالاس\"\n}\n}", + "Custom_User_Status": " وضعیت کاربر سفارشی", + "Custom_User_Status_Add": "اضافه کردن وضعیت کاربر ", + "Custom_User_Status_Added_Successfully": " وضعیت کاربر با موفقیت اضافه شد", + "Custom_User_Status_Delete_Warning": "حذف وضعیت کاربر قابل برگشت نیست", + "Custom_User_Status_Error_Invalid_User_Status": "وضعیت کاربر نامعتبر است", + "Custom_User_Status_Error_Name_Already_In_Use": "نام وضعیت سفارشی کاربر در حال استفاده است.", + "Custom_User_Status_Has_Been_Deleted": "وضعیت کاربر حذف شده ", + "Custom_User_Status_Info": "اطلاعات وضعیت کاربر ", + "Custom_User_Status_Updated_Successfully": "وضعیت کاربر با موفقیت به روز شد", "Customize": "شخصی سازی", "CustomSoundsFilesystem": "فایل سیستم سفارشی برای تلفن های موبایل", "Dashboard": "داشبورد", + "Data_processing_consent_text": "متن رضایت پردازش داده ها", + "Data_processing_consent_text_description": "از این تنظیمات برای توضیح اینکه می توانید اطلاعات شخصی مشتری را در طول مکالمه جمع آوری ، ذخیره و پردازش کنید ، استفاده کنید", "Date": "تاریخ", "Date_From": "از جانب", "Date_to": "به", "days": "روزها", "DB_Migration": "انتقال پایگاه داده", "DB_Migration_Date": "تاریخ انتقال پایگاه داده", + "DDP_Rate_Limit_IP_Enabled": "محدودیت توسط IP: فعال شده", + "DDP_Rate_Limit_IP_Requests_Allowed": " محدودیت توسط IP: اجازه درخواست", + "DDP_Rate_Limit_IP_Interval_Time": "محدودیت توسط IP: زمان فاصله", + "DDP_Rate_Limit_User_Enabled": "محدودیت توسط کاربر: فعال شده", + "DDP_Rate_Limit_User_Requests_Allowed": "محدودیت توسط کاربر: اجازه درخواست", + "DDP_Rate_Limit_User_Interval_Time": "محدودیت توسط کاربر:", + "DDP_Rate_Limit_Connection_Enabled": "محدودیت توسط ", "Deactivate": "از کار انداختن", "Decline": "کاهش می یابد", "Default": "پیش فرض", @@ -1010,7 +1159,7 @@ "edit-room-retention-policy_description": "مجوز ویرایش یک سیاست نگهداری اتاق، به صورت خودکار پیام را در آن حذف کنید", "Edit_Custom_Field": "ویرایش فیلد سفارشی", "Edit_Department": "ویرایش بخش", - "Edit_previous_message": "`٪ s` - ویرایش پیام قبلی", + "Edit_previous_message": "`%s` - ویرایش پیام قبلی", "Edit_Trigger": "ویرایش تریگر", "edited": "ویرایش شده", "Editing_room": "ویرایش اتاق", @@ -1141,7 +1290,7 @@ "error-user-is-not-activated": "کاربر فعال نیست", "error-user-limit-exceeded": "تعداد کاربران که میخواهید به #channel_name دعوت کنید بیش از حد تعیین شده توسط مدیر است", "error-user-not-in-room": "کاربر در این اتاق نیست", - "error-logged-user-not-in-room": "شما در اتاق `٪ s` نیستید", + "error-logged-user-not-in-room": "شما در اتاق `%s` نیستید", "error-user-registration-disabled": "ثبت نام کاربر غیر فعال است", "error-user-registration-secret": "ثبت نام کاربران تنها از طریق آدرس مخفی (Secret URL) امکان پذیر است", "error-you-are-last-owner": "شما آخرین مالک هستید. لطفا مالک جدیدی قبل از خروج از اتاق مشخص کنید.", @@ -1258,6 +1407,7 @@ "force-delete-message_description": "مجاز به حذف یک پیام در دور زدن همه محدودیت ها", "Force_SSL": "اجباری کردن SSL", "Force_SSL_Description": "*توجه!* _Force SSL_ هرگز نباید با پراکسی معکوس استفاده شود. اگر پراکسی معکسو دارید باید تغییر مسیر را آنجا پیکربندی کنید. این گزینه صرفا برای استفاده مثلا Heroku وجود دارد که اجازه تغییر مسیر را در پراکسی معکوس نمی دهد.", + "Invalid_Export_File": "فایل آپلود شده فایل معتبر %s نیست.", "Forgot_password": "فراموشی رمز عبور", "Forgot_Password_Description": "شما ممکن است از متغیرهایی زیر استفاده کنید:
  • [Forgot_Password_Url] برای URL بازیابی رمز عبور.
  • [نام]، [نام خانوادگی]، [lname] برای نام کامل، نام یا نام خانوادگی کاربر، به ترتیب.
  • [ایمیل] برای ایمیل کاربر.
  • [نام سایت] و [Site_URL] برای نام برنامه و URL به ترتیب.
", "Forgot_Password_Email": "روی اینجابرای بازنشانی گذرواژه خود کلیک کنید.", @@ -1318,7 +1468,7 @@ "Hide_counter": "پنهان کردن شمارنده", "Hide_flextab": "پنهان کردن نوار کناری سمت راست با کلیک کنید", "Hide_Group_Warning": "آیا بابت پنهان کردن گروه \"%s\" مطمئن هستید؟", - "Hide_Livechat_Warning": "آیا مطمئن هستید که میخواهید livechat را با «٪ s» پنهان کنید؟", + "Hide_Livechat_Warning": "آیا مطمئن هستید که میخواهید livechat را با «%s» پنهان کنید؟", "Hide_Private_Warning": "آیا بابت پنهان کردن مکالمه با \"%s\" مطمئن هستید؟", "Hide_roles": "پنهان کردن نقش ها", "Hide_room": "پنهان کردن اتاق", @@ -1340,7 +1490,7 @@ "How_to_handle_open_sessions_when_agent_goes_offline": "چگونه جلوی باز کردن جلسات را هنگامی که عامل به صورت آفلاین است", "Idle_Time_Limit": "محدودیت زمانی بیکاری", "Idle_Time_Limit_Description": "مدت زمان تا زمانی که وضعیت به دور تغییر کند. ارزش باید در ثانیه باشد", - "if_they_are_from": "(اگر از٪ s هستند)", + "if_they_are_from": "(اگر از%s هستند)", "If_this_email_is_registered": "اگر این ایمیل ثبت شده باشد، دستورالعمل هایی در مورد نحوه بازنشانی گذرواژه شما ارسال خواهیم کرد. اگر مدت کوتاهی ایمیل دریافت نکنید، لطفا بیایید و دوباره امتحان کنید.", "If_you_are_sure_type_in_your_password": "اگر مطمئن هستید رمز خود را وارد کنید:", "If_you_are_sure_type_in_your_username": "اگر مطمئنید نام کاربری خود را وارد کنید:", @@ -1385,6 +1535,8 @@ "Importer_setup_error": "هنگام تنظیم وارد کننده خطایی رخ داد.", "Importer_Slack_Users_CSV_Information": "فایل آپلود شده باید فایل صادرات کاربران Slack باشد که یک فایل CSV است. برای اطلاعات بیشتر اینجا را ببینید:", "Importer_Source_File": "انتخاب فایل منبع", + "importer_status_finishing": "تقریبا تمام شده", + "importer_status_import_failed": "خطا", "Inclusive": "شامل", "Incoming_Livechats": "ورودی Livechats", "Incoming_WebHook": "ورودی وب هک", @@ -1455,7 +1607,6 @@ "Invalid_confirm_pass": "تأییدیه رمز عبور با رمز عبور اصلی مطابقت ندارد.", "Invalid_email": "ایمیل وارد شده نامعتبر است", "Invalid_username": "نام کاربری نامعتبر است", - "Invalid_Export_File": "فایل آپلود شده فایل معتبر %s نیست.", "Invalid_Import_File_Type": "نوع فایل وارد شده نامعتبر است.", "Invalid_name": "نام نباید خالی باشد", "Invalid_notification_setting_s": "تنظیمات هشدار نامعتبر: %s", @@ -1463,7 +1614,7 @@ "Invalid_reason": "دلیل پیوستن نباید خالی باشد", "Invalid_room_name": "%s نام معتبری برای اتاق نیست", "Invalid_secret_URL_message": "آدرس ارائه شده معتبر نیست.", - "Invalid_setting_s": "تنظیم نامعتبر:٪ s", + "Invalid_setting_s": "تنظیم نامعتبر:%s", "Invalid_two_factor_code": "کد دو فاکتور نامعتبر است", "invisible": "پنهان", "Invisible": "پنهان", @@ -1500,7 +1651,7 @@ "Issue_Links": "پیوندهای ردیاب شماره", "IssueLinks_Incompatible": "هشدار: این و پیش نمایش رنگ Hex را در همان زمان فعال نکنید.", "IssueLinks_LinkTemplate": "الگو برای لینک های موضوع", - "IssueLinks_LinkTemplate_Description": "الگو برای لینک های موضوع ٪ s با شماره شماره جایگزین شود.", + "IssueLinks_LinkTemplate_Description": "الگو برای لینک های موضوع %s با شماره شماره جایگزین شود.", "It_works": "کار می کند", "italics": "کج (ایتالیک)", "Mobex_sms_gateway_from_number": "از جانب", @@ -1647,7 +1798,7 @@ "leave-c": "ترک کانال ها", "leave-p": "گروه های خصوصی را ترک کنید", "Leave_Group_Warning": "آیا واقعا می خواهید گروه \"%s\" را ترک کنید؟", - "Leave_Livechat_Warning": "آیا مطمئن هستید که میخواهید livechat را با «٪ s» ترک کنید؟", + "Leave_Livechat_Warning": "آیا مطمئن هستید که میخواهید livechat را با «%s» ترک کنید؟", "Leave_Private_Warning": "آیا واقعا می خواهید مکالمه با \"%s\" را ترک کنید؟", "Leave_room": "ترک اتاق", "Leave_Room_Warning": "آیا واقعا می خواهید اتاق \"%s\" را ترک کنید؟", @@ -1754,7 +1905,7 @@ "Markdown_Parser": "معامله گر معکوس", "Markdown_SupportSchemesForLink": "طرح های پشتیبانی مدل های نشانه گذاری برای لینک", "Markdown_SupportSchemesForLink_Description": "جدا شده با کاما از طرح اجازه", - "Max_length_is": "حداکثر طول٪ s است", + "Max_length_is": "حداکثر طول%s است", "Media": "رسانه ها", "Medium": "متوسط", "Members_List": "فهرست کاربران", @@ -1844,7 +1995,7 @@ "Meta_language": "زبان", "Meta_msvalidate01": "MSValidate.01", "Meta_robots": "روبات", - "Min_length_is": "طول حداقل٪ s است", + "Min_length_is": "طول حداقل%s است", "Minimum_balance": "حداقل تعادل", "minutes": "دقایق", "Mobile": "تلفن همراه", @@ -1856,8 +2007,8 @@ "More_direct_messages": "پیام های مستقیم بیشتر", "More_groups": "گروه بیشتر خصوصی", "More_unreads": "unreads بیشتر", - "Move_beginning_message": "`٪ s` - انتقال به آغاز پیام", - "Move_end_message": "`٪ s` - انتقال به پایان پیام", + "Move_beginning_message": "`%s` - انتقال به آغاز پیام", + "Move_end_message": "`%s` - انتقال به پایان پیام", "Msgs": "پیام های", "multi": "چند", "multi_line": "چند خط", @@ -1881,9 +2032,9 @@ "Navigation_History": "تاریخچه ناوبری", "New_Application": "برنامه جدید", "New_Custom_Field": "جدید درست سفارشی", - "New_Department": "وزارت جدید", + "New_Department": "بخش جدید", "New_integration": "یکپارچه سازی جدید", - "New_line_message_compose_input": "`٪ s` - خط جدید در پیام نوشتن", + "New_line_message_compose_input": "`%s` - خط جدید در پیام نوشتن", "New_logs": "سیاهههای مربوط جدید", "New_Message_Notification": "اعلان پیام جدید", "New_messages": "پیام های جدید", @@ -1894,7 +2045,7 @@ "New_role": "نقش جدید", "New_Room_Notification": "اعلان اتاق جدید", "New_Trigger": "تریگر جدید", - "New_version_available_(s)": "نسخه جدید در دسترس است (٪ s)", + "New_version_available_(s)": "نسخه جدید در دسترس است (%s)", "New_videocall_request": "درخواست تماس ویدیویی جدید", "New_visitor_navigation": "ناوبری جدید: __history__", "Newer_than": "جدیدتر از", @@ -1975,7 +2126,7 @@ "Oops!": "اوه", "Oops_page_not_found": "اوه، صفحه یافت نشد", "Open": "باز کن", - "Open_channel_user_search": "`٪ s` - باز کردن کانال / جستجوی کاربر", + "Open_channel_user_search": "`%s` - باز کردن کانال / جستجوی کاربر", "Open_days_of_the_week": "روزهای هفته باز شود", "Open_Livechats": "'گفت و گوی زنده باز", "Open_your_authentication_app_and_enter_the_code": "برنامه تأیید اعتبار خود را باز کنید و کد را وارد کنید. شما همچنین می توانید یکی از کدهای پشتیبان خود را استفاده کنید.", @@ -2082,10 +2233,10 @@ "Prune_finished": "سرخ شدن به پایان رسید", "Prune_Messages": "پیام های کوتاه", "Prune_Modal": "آیا مطمئن هستید که میخواهید این پیام ها را قطع کنید؟ پیام های پاره شده قابل بازیابی نیست", - "Prune_Warning_all": "این همه٪ s را در٪ s حذف می کند!", - "Prune_Warning_before": "این همه٪ s را در٪ s قبل از٪ s حذف می کند.", - "Prune_Warning_after": "این همه٪ s در٪ s پس از٪ s حذف خواهد شد.", - "Prune_Warning_between": "این همه٪ s در٪ s بین٪ s و٪ s حذف خواهد شد.", + "Prune_Warning_all": "این همه%s را در%s حذف می کند!", + "Prune_Warning_before": "این همه%s را در%s قبل از%s حذف می کند.", + "Prune_Warning_after": "این همه%s در%s پس از%s حذف خواهد شد.", + "Prune_Warning_between": "این همه%s در%s بین%s و%s حذف خواهد شد.", "Pruning_messages": "پیام زدن ...", "Pruning_files": "فایل های هرس ...", "messages_pruned": "پیام ها زده شده اند", @@ -2192,10 +2343,10 @@ "Retail": "جزئی", "Retention_setting_changed_successfully": "تنظیم سیاست حفظ حفظ شده با موفقیت تغییر کرد", "RetentionPolicy": "سیاست نگهداری", - "RetentionPolicy_RoomWarning": "پیام های قدیمی تر از٪ s به طور خودکار در اینجا بریده می شوند", - "RetentionPolicy_RoomWarning_Unpinned": "پیغامهای غیر مسدود شده قدیمیتر از٪ s به صورت خودکار در اینجا برچیده میشوند", - "RetentionPolicy_RoomWarning_FilesOnly": "فایلهای قدیمیتر از٪ s به صورت خودکار در اینجا کپی میشوند (پیامها باقی میمانند)", - "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "فایل های Unpinned قدیمی تر از٪ s به طور خودکار در اینجا گنجانده می شوند (پیام ها باقی می مانند)", + "RetentionPolicy_RoomWarning": "پیام های قدیمی تر از%s به طور خودکار در اینجا بریده می شوند", + "RetentionPolicy_RoomWarning_Unpinned": "پیغامهای غیر مسدود شده قدیمیتر از%s به صورت خودکار در اینجا برچیده میشوند", + "RetentionPolicy_RoomWarning_FilesOnly": "فایلهای قدیمیتر از%s به صورت خودکار در اینجا کپی میشوند (پیامها باقی میمانند)", + "RetentionPolicy_RoomWarning_UnpinnedFilesOnly": "فایل های Unpinned قدیمی تر از%s به طور خودکار در اینجا گنجانده می شوند (پیام ها باقی می مانند)", "RetentionPolicy_Description": "به طور خودکار پیام های قدیمی را در سراسر نمونه Rocket.Chat خود قرار دهید.", "RetentionPolicy_Enabled": "فعال", "RetentionPolicy_AppliesToChannels": "به کانال ها اعمال می شود", @@ -2389,15 +2540,15 @@ "Size": "اندازه", "Skip": "گذشتن", "Slack_Users": "CSV کاربران Slack", - "SlackBridge_error": "SlackBridge هنگام وارد کردن پیام های شما در٪ s:٪ s خطایی دریافت کرد", - "SlackBridge_finish": "SlackBridge واردات پیام ها را در٪ s به پایان رسانده است. لطفا برای مشاهده همه پیام ها مجددا بارگیری کنید", + "SlackBridge_error": "SlackBridge هنگام وارد کردن پیام های شما در%s:%s خطایی دریافت کرد", + "SlackBridge_finish": "SlackBridge واردات پیام ها را در%s به پایان رسانده است. لطفا برای مشاهده همه پیام ها مجددا بارگیری کنید", "SlackBridge_Out_All": "SlackBridge از همه", "SlackBridge_Out_All_Description": "ارسال پیام از تمام کانال هایی که در Slack وجود دارد و ربات به آن پیوسته است", "SlackBridge_Out_Channels": "SlackBridge Out Channels", "SlackBridge_Out_Channels_Description": "انتخاب کنید که کدام کانال پیام ها را به Slack ارسال می کند", "SlackBridge_Out_Enabled": "SlackBridge غیر فعال شده است", "SlackBridge_Out_Enabled_Description": "را انتخاب کنید که SlackBridge همچنین باید پیام های خود را به Slack ارسال کند", - "SlackBridge_start": "@٪ s یک ورودی SlackBridge را در # #٪ s آغاز کرده است. به شما اطلاع داده می شود زمانی که آن را به پایان رسید.", + "SlackBridge_start": "@%s یک ورودی SlackBridge را در # #%s آغاز کرده است. به شما اطلاع داده می شود زمانی که آن را به پایان رسید.", "Slash_Gimme_Description": "نمایش (つ ◕_◕) つ قبل از پیام خود را", "Slash_LennyFace_Description": "نمایش (͡ ° ͜ʖ ͡ °) پس از پیام خود را", "Slash_Shrug_Description": "نمایش ¯ \\ _ (ツ) _ / ¯ پس از پیام خود را", @@ -2423,7 +2574,7 @@ "SMTP_Username": "SMTP نام کاربری", "snippet-message": "قطعه پیام", "snippet-message_description": "مجوز ایجاد یک پیام قطعه", - "Snippet_Added": "ایجاد شده در٪ s", + "Snippet_Added": "ایجاد شده در%s", "Snippet_Messages": "پیام های قطعه", "Snippet_name": "نام قطعه", "Snippeted_a_message": "یک قطعه __snippetLink__ ایجاد کرد", @@ -2828,14 +2979,14 @@ "Webdav_Password": "رمز عبور WebDAV", "Webhook_URL": "آدرس Webhook", "Webhooks": "Webhooks", - "WebRTC_direct_audio_call_from_%s": "تماس صوتی مستقیم از٪ s", - "WebRTC_direct_video_call_from_%s": "تماس ویدیویی مستقیم از٪ s", + "WebRTC_direct_audio_call_from_%s": "تماس صوتی مستقیم از%s", + "WebRTC_direct_video_call_from_%s": "تماس ویدیویی مستقیم از%s", "WebRTC_Enable_Channel": "فعال کردن برای کانال های عمومی", "WebRTC_Enable_Direct": "فعال کردن برای پیام های مستقیم", "WebRTC_Enable_Private": "فعال کردن برای کانال خصوصی", - "WebRTC_group_audio_call_from_%s": "تماس صوتی گروه از٪ s", - "WebRTC_group_video_call_from_%s": "تماس ویدیویی گروهی از٪ s", - "WebRTC_monitor_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_Servers": "سرور بی حس کردن / روشن", "WebRTC_Servers_Description": "یک لیست از بی حس کردن و روشن کردن سرور جداشده با کاما.
رمز عبور @ بی حس کردن:: نام کاربری و رمز پورت در فرمت `نام کاربری اجازه میزبان: port` یا` نام کاربری: رمز عبور @ نوبه خود: میزبان: port`.", "Website": "سایت اینترنتی", @@ -2894,4 +3045,4 @@ "Your_push_was_sent_to_s_devices": "فشار خود را به دستگاه %s را ارسال شد", "Your_server_link": "لینک سرور شما", "Your_workspace_is_ready": "فضای کاری شما آماده استفاده است" -} \ No newline at end of file +} diff --git a/packages/rocketchat-i18n/i18n/fi.i18n.json b/packages/rocketchat-i18n/i18n/fi.i18n.json index 0393a3da03da..b93bda1af0b6 100644 --- a/packages/rocketchat-i18n/i18n/fi.i18n.json +++ b/packages/rocketchat-i18n/i18n/fi.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Lupa poistaa viesti, joka ohittaa kaikki rajoitukset", "Force_SSL": "Pakota SSL", "Force_SSL_Description": "* Varoitus! * _Force SSL_ ei koskaan pitäisi käyttää reverse proxyn kanssa. Jos sinulla on käytössäsi reverse proxy, tee ohjaus SIELLÄ. Tämä vaihtoehto on olemassa Heroku tyylisiä asennuksia varten, jotka eivät salli uudelleenohjausasetuksia reverse proxyssä.", + "Invalid_Export_File": "Ladattu tiedosto ei ole kelvollinen %s vientitiedosto.", "Forgot_password": "Unohditko salasanasi?", "Forgot_Password_Description": "Voit käyttää seuraavia paikkamerkkejä:
  • [Forgot_Password_Url] salasanan palautus-URL-osoitteelle.
  • [nimi], [fname], [lname] käyttäjän koko nimen, etunimen tai sukunimen osalta.
  • [email] käyttäjän sähköposti.
  • [Sivuston nimi] ja [Sivusto_URL].
", "Forgot_Password_Email": "Palaa salasanasi valitsemalla täällä.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Virhe alustaessa importtaajaa.", "Importer_Slack_Users_CSV_Information": "Ladatun tiedoston on oltava Lakkautettujen käyttäjien vientitiedosto, joka on CSV-tiedosto. Katso lisätietoja tästä:", "Importer_Source_File": "Lähdetiedoston valinta", + "importer_status_import_failed": "Virhe", "Inclusive": "täydellinen", "Incoming_Livechats": "Sisäänpäin tulevat Livechatit", "Incoming_WebHook": "Saapuva WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Salasanat eivät täsmää", "Invalid_email": "Annettu sähköpostiosoite on virheellinen", "Invalid_username": "Antamasi käyttäjänimi on virheellinen", - "Invalid_Export_File": "Ladattu tiedosto ei ole kelvollinen %s vientitiedosto.", "Invalid_Import_File_Type": "Virheellinen tuonnin tiedostotyyppi.", "Invalid_name": "Nimi ei voi olla tyhjä", "Invalid_notification_setting_s": "Virheellinen ilmoitusasetus: %s", diff --git a/packages/rocketchat-i18n/i18n/fr.i18n.json b/packages/rocketchat-i18n/i18n/fr.i18n.json index f75f5bb26144..5ad69f4449cf 100644 --- a/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -1333,6 +1333,7 @@ "force-delete-message_description": "Permission de supprimer un message en contournant toutes les restrictions", "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.", + "Invalid_Export_File": "Le fichier envoyé n'est pas un fichier d'exportation valide de %s", "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_Email": "Cliquez ici pour remettre à zéro votre mot de passe.", @@ -1467,6 +1468,8 @@ "Importer_setup_error": "Une erreur est survenue lors du paramétrage de l'importateur.", "Importer_Slack_Users_CSV_Information": "Le fichier téléchargé doit être le fichier d'exportation des utilisateurs de Slack, qui est un fichier CSV. Voir ici pour plus d'informations :", "Importer_Source_File": "Sélection du fichier source", + "importer_status_finishing": "Presque terminé", + "importer_status_import_failed": "Erreur", "Inclusive": "Compris", "Incoming_Livechats": "Arrivée de nouveaux chats en direct", "Incoming_WebHook": "WebHook entrant", @@ -1540,7 +1543,6 @@ "Invalid_confirm_pass": "Les mots de passe renseignés ne sont pas les mêmes", "Invalid_email": "L'adresse e-mail saisie est invalide", "Invalid_username": "Le nom d'utilisateur entré est invalide", - "Invalid_Export_File": "Le fichier envoyé n'est pas un fichier d'exportation valide de %s", "Invalid_Import_File_Type": "Format du fichier d'importation invalide.", "Invalid_name": "Le nom doit être renseigné", "Invalid_notification_setting_s": "Paramètre de notification invalide : %s", diff --git a/packages/rocketchat-i18n/i18n/he.i18n.json b/packages/rocketchat-i18n/i18n/he.i18n.json index d0f93f3863a9..3b74912f9ea9 100644 --- a/packages/rocketchat-i18n/i18n/he.i18n.json +++ b/packages/rocketchat-i18n/i18n/he.i18n.json @@ -568,6 +568,7 @@ "force-delete-message": "כפה מחיקת הודעה", "Force_SSL": "כפה SSL", "Force_SSL_Description": "* שימו לב! * _Force SSL_ אסור לחלוטין להשתמש עם פרוקסי הפוך. אם יש לך פרוקסי הפוך, אתה צריך לעשות את הפניה THERE. אפשרות זו קיימת עבור פריסות כמו Heroku, שאינו מאפשר את תצורת ההפניה בבית proxy ההפוכה.", + "Invalid_Export_File": "הקובץ שהועלה אינו קובץ הייצוא של %s.", "Forgot_password": "שכחת את הססמה?", "Forward": "העבר", "Forward_chat": "העבר צ'אט", @@ -632,6 +633,7 @@ "Importer_Prepare_Uncheck_Deleted_Users": "משתמשים הסר את הסימון נמחק", "Importer_progress_error": "נכשל בהשגת התקדמות ליבוא.", "Importer_setup_error": "ארעה שגיאה בעת הגדרת היבואן.", + "importer_status_import_failed": "שגיאה", "Inclusive": "כולל", "inline_code": "קוד", "Install_Extension": "התקנת הרחבה", @@ -663,7 +665,6 @@ "Invalid_confirm_pass": "אימות הססמה אינו זהה לססמה", "Invalid_email": "כתובת הדוא״ל שהוזנה אינה תקינה", "Invalid_username": "שם משתמש שהוזן לא תקין", - "Invalid_Export_File": "הקובץ שהועלה אינו קובץ הייצוא של %s.", "Invalid_Import_File_Type": "סוג קובץ יבוא לא חוקי.", "Invalid_name": "יש להזין שם", "Invalid_notification_setting_s": "הגדרת התראה לא חוקית: %s", diff --git a/packages/rocketchat-i18n/i18n/hr.i18n.json b/packages/rocketchat-i18n/i18n/hr.i18n.json index 8b9bdb131563..d1762a49ec11 100644 --- a/packages/rocketchat-i18n/i18n/hr.i18n.json +++ b/packages/rocketchat-i18n/i18n/hr.i18n.json @@ -1344,6 +1344,7 @@ "force-delete-message_description": "Dozvola za brisanje poruke koja zaobilazi sva ograničenja", "Force_SSL": "Prisili SSL", "Force_SSL_Description": "* Oprez! * _Force SSL_ nikada ne treba koristiti s obrnutim proxy. Ako imate obrnuti proxy, trebalo bi učiniti preusmjeravanje tamo. Ova opcija postoji za implementacije kao Heroku, koje ne dopuštaju konfiguraciju za preusmjeravanje na obrnuto proxyu.", + "Invalid_Export_File": "Prenesena datoteka nije valjana %s datoteka za izvoz.", "Forgot_password": "Zaboravih lozinku", "Forgot_Password_Description": "Možete upotrebljavati sljedeća rezervirana mjesta:
  • [Forgot_Password_Url] za URL za oporavak zaporke.
  • [ime], [fname], [lname] za puni naziv, ime ili prezime korisnika.
  • [e-pošta] za e-poštu korisnika.
  • [Site_Name] i [Site_URL] za naziv aplikacije i URL.
", "Forgot_Password_Email": "Kliknite ovdjeda biste ponovo postavili svoju zaporku.", @@ -1471,6 +1472,8 @@ "Importer_setup_error": "Došlo je do pogreške pri postavljanju uvoznika.", "Importer_Slack_Users_CSV_Information": "Prenesena datoteka mora biti datoteka izvoza korisnika Slack, koja je CSV datoteka. Pogledajte ovdje za više informacija:", "Importer_Source_File": "Odabir izvornog izvora", + "importer_status_finishing": "Skoro gotovo", + "importer_status_import_failed": "Pogreška", "Inclusive": "uključujući", "Incoming_Livechats": "Nadolazeći Livechatovi", "Incoming_WebHook": "Dolazni WebHook", @@ -1541,7 +1544,6 @@ "Invalid_confirm_pass": "Potvrda lozinke se ne slaže sa lozinkom", "Invalid_email": "Uneseni e-mail nije valjan", "Invalid_username": "Uneseno korisničko ime nije važeće", - "Invalid_Export_File": "Prenesena datoteka nije valjana %s datoteka za izvoz.", "Invalid_Import_File_Type": "Pogrešna vrsta Uvozne datoteke.", "Invalid_name": "Ime ne smije biti prazno", "Invalid_notification_setting_s": "Pogrešna postavka obavijesti: %s", diff --git a/packages/rocketchat-i18n/i18n/hu.i18n.json b/packages/rocketchat-i18n/i18n/hu.i18n.json index e52318b6f88a..c192ad7a0392 100644 --- a/packages/rocketchat-i18n/i18n/hu.i18n.json +++ b/packages/rocketchat-i18n/i18n/hu.i18n.json @@ -1416,6 +1416,7 @@ "Force_SSL": "SSL kényszerítése", "Force_SSL_Description": "* Figyelem! * _Force SSL_ soha nem lehet fordított proxy. Ha van egy fordított proxy, meg kell tennie az átirányítást OTT. Ez a lehetőség fennáll telepítések mint Heroku, amely nem teszi lehetővé az átirányítás konfiguráció a fordított proxy.", "Force_visitor_to_accept_data_processing_consent": "Adatfeldolgozási hozzájárulás kényszerítése", + "Invalid_Export_File": "A feltöltött fájl nem érvényes %s export fájlt.", "Forgot_password": "Elfelejtetted a jelszavad?", "Forgot_Password_Description": "Használhatja a következő helyőrzőket:
  • [Forgot_Password_Url] a jelszó-helyreállítási URL-hez.
  • [név], [fname], [lname] a felhasználó teljes neve, utóneve vagy vezetékneve számára.
  • [e-mail] a felhasználó e-mailje számára.
  • [Site_Name] és [Site_URL] az Alkalmazás neve és URL címekhez.
", "Forgot_Password_Email": "Kattints ide a jelszó visszaállításához.", @@ -1555,6 +1556,12 @@ "Importer_setup_error": "Hiba történt a felállítása az importőr.", "Importer_Slack_Users_CSV_Information": "A feltöltött fájlnak laza felhasználók exportfájlja, amely CSV fájl. További információk itt találhatók:", "Importer_Source_File": "Forrásfájl kiválasztása", + "importer_status_new": "Nem megkezdett", + "importer_status_importing_users": "Felhasználók importálása", + "importer_status_importing_channels": "Csatornák importálása", + "importer_status_importing_messages": "Üzenetek importálása", + "importer_status_finishing": "Majdnem kész", + "importer_status_import_failed": "Hiba", "Importer_Upload_FileSize_Message": "A szerver beállítások a fájlok feltöltését a __maxFileSize__ méretig engedélyezik.", "Importer_Upload_Unlimited_FileSize": "A szerver beállítások bármilyen méretű fájl feltöltését engedélyezik.", "Importing_channels": "Csatornák importálása", @@ -1635,7 +1642,6 @@ "Invalid_confirm_pass": "A két jelszó nem eggyezik", "Invalid_email": "Érvénytelen email cím", "Invalid_username": "A megadott felhasználónév érvénytelen", - "Invalid_Export_File": "A feltöltött fájl nem érvényes %s export fájlt.", "Invalid_Import_File_Type": "Érvénytelen Import fájltípus.", "Invalid_name": "A név nem lehet üres", "Invalid_notification_setting_s": "Érvénytelen bejelentés beállítás: %s", diff --git a/packages/rocketchat-i18n/i18n/id.i18n.json b/packages/rocketchat-i18n/i18n/id.i18n.json index 595fc94903dd..748a1e9829e9 100644 --- a/packages/rocketchat-i18n/i18n/id.i18n.json +++ b/packages/rocketchat-i18n/i18n/id.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Izin untuk menghapus pesan yang melewati semua batasan", "Force_SSL": "Angkatan SSL", "Force_SSL_Description": "* Perhatian! * _Force SSL_ tidak boleh digunakan dengan reverse proxy. Jika Anda memiliki reverse proxy, yang harus Anda lakukan redirect ADA. Opsi ini ada untuk penyebaran seperti Heroku, yang tidak memungkinkan konfigurasi redirect di reverse proxy.", + "Invalid_Export_File": "File upload tidak% valid s file ekspor.", "Forgot_password": "Lupa kata sandi anda", "Forgot_Password_Description": "Anda dapat menggunakan placeholder berikut:
  • [Lupa_Password_Url] untuk URL pemulihan kata sandi.
  • [nama], [fname], [lname] untuk nama lengkap pengguna, nama depan, atau nama belakang masing-masing.
  • [email] untuk email pengguna.
  • [Site_Name] dan [Site_URL] untuk Nama Aplikasi dan URL masing-masing.
", "Forgot_Password_Email": "Klik di sini untuk mereset kata sandi Anda.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Terjadi kesalahan saat menyiapkan importir.", "Importer_Slack_Users_CSV_Information": "File yang diunggah harus berupa file ekspor Pengguna Slack, yang merupakan file CSV. Lihat di sini untuk informasi lebih lanjut:", "Importer_Source_File": "Seleksi File Sumber", + "importer_status_import_failed": "Kesalahan", "Inclusive": "Inklusif", "Incoming_Livechats": "Livekat masuk", "Incoming_WebHook": "Masuk webhook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Kata sandi konfirmasi tidak cocok dengan kata sandi utama", "Invalid_email": "Email yang anda masukkan tidak valid", "Invalid_username": "Nama pengguna yang dimasukkan tidak valid", - "Invalid_Export_File": "File upload tidak% valid s file ekspor.", "Invalid_Import_File_Type": "Valid jenis file Impor.", "Invalid_name": "Nama wajib diisi", "Invalid_notification_setting_s": "Pengaturan notifikasi tidak valid:%s", diff --git a/packages/rocketchat-i18n/i18n/it.i18n.json b/packages/rocketchat-i18n/i18n/it.i18n.json index d6092884dd97..7c65ec391c64 100644 --- a/packages/rocketchat-i18n/i18n/it.i18n.json +++ b/packages/rocketchat-i18n/i18n/it.i18n.json @@ -1231,6 +1231,7 @@ "force-delete-message_description": "Permesso di cancellare un messaggio bypassando tutte le restrizioni", "Force_SSL": "Forza SSL", "Force_SSL_Description": "*Attenzione!* _Force SSL_ non dovrebbe mai essere usato con il reverse proxy. Se si dispone di un reverse proxy, si dovrebbe fare il redirect LÌ. Questa opzione esiste per ambienti come Heroku che non consentono la configurazione del re-indirizzamento del reverse proxy.", + "Invalid_Export_File": "Il file caricato non è un file valido d'esportazione di %s.", "Forgot_password": "Password dimenticata", "Forgot_Password_Description": "Puoi usare i seguenti segnaposti:
  • [Forgot_Password_Url] per la URL del recupero password.
  • [name], [fname], [lname] rispettivamente per il nome completo dell'utente, nome or cognome.
  • [email] per la email dell'utente.
  • [Site_Name] e [Site_URL] rispettivamente per il nome della applicazione e la URL.
", "Forgot_Password_Email": "Clicca qui per resettare la tua password.", @@ -1362,6 +1363,8 @@ "Importer_setup_error": "Si è verificato un errore durante l'impostazione dell'importatore.", "Importer_Slack_Users_CSV_Information": "Il file caricato deve essere il file di esportazione degli utenti di Slack, che è un file CSV. Vedi qui per maggiori informazioni:", "Importer_Source_File": "Selezione dei file sorgente", + "importer_status_finishing": "Quasi fatto", + "importer_status_import_failed": "Errore", "Inclusive": "inclusivo", "Incoming_Livechats": "LiveChat in arrivo", "Incoming_WebHook": "WebHook in Entrata", @@ -1432,7 +1435,6 @@ "Invalid_confirm_pass": "La password di conferma non corrisponde con la password", "Invalid_email": "L'email inserita non è valida", "Invalid_username": "Il nome utente inserito non è valido", - "Invalid_Export_File": "Il file caricato non è un file valido d'esportazione di %s.", "Invalid_Import_File_Type": "Tipo di file non valido per l'importazione.", "Invalid_name": "Il nome non può essere vuoto", "Invalid_notification_setting_s": "Impostazione di notifica non valida: %s", diff --git a/packages/rocketchat-i18n/i18n/ja.i18n.json b/packages/rocketchat-i18n/i18n/ja.i18n.json index e5877165282b..5eecb65e2370 100644 --- a/packages/rocketchat-i18n/i18n/ja.i18n.json +++ b/packages/rocketchat-i18n/i18n/ja.i18n.json @@ -361,6 +361,7 @@ "App_support_url": "サポートURL", "App_Url_to_Install_From": "URL からインストール", "App_Url_to_Install_From_File": "ファイルからインストール", + "App_user_not_allowed_to_login": "アプリユーザーは直接ログインできません。", "Appearance": "表示設定", "Application_added": "アプリケーションを追加しました", "Application_Name": "アプリケーション名", @@ -384,6 +385,7 @@ "Apps_Marketplace_pricingPlan_yearly": "__price__ / 年", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / 年 (ユーザ1人あたり)", "Apps_Settings": "アプリの設定", + "Apps_User_Already_Exists": "ユーザー名「__username__」は既に使用されています。このアプリをインストールするためにそれを使用しているユーザーの名前を変更または削除します", "Apps_WhatIsIt": "アプリ: これらは何ですか?", "Apps_WhatIsIt_paragraph1": "管理エリアに新しいアイコンがあります! これはどういう意味で、アプリとは何ですか?", "Apps_WhatIsIt_paragraph2": "まず、ここでのアプリとはモバイルアプリケーションのことではありません。実際、これらはプラグインや高度な統合の項目と考えていただくと良いでしょう。", @@ -471,6 +473,7 @@ "Back": "戻る", "Back_to_applications": "アプリケーションへ戻る", "Back_to_chat": "チャットに戻る", + "Back_to_imports": "インポートに戻る", "Back_to_integration_detail": "統合の詳細に戻る", "Back_to_integrations": "サービス連携へ戻る", "Back_to_login": "ログインへ戻る", @@ -622,6 +625,7 @@ "Chatpal_Welcome": "あなたの検索をお楽しみください!", "Chatpal_Window_Size": "インデックスウィンドウサイズ", "Chatpal_Window_Size_Description": "インデックスウィンドウのサイズ (ブートストラップ時)", + "Check_Progress": "進捗を確認", "Choose_a_room": "ルームを選択してください", "Choose_messages": "メッセージを選択", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "メッセージでユーザー名の前に表示されるエイリアスを選択してください。", @@ -652,6 +656,7 @@ "Cloud_workspace_connected_without_account": "あなたのワークスペースは Rocket.Chat クラウドに接続されました。Rocket.Chat クラウドにログインし、ワークスペースをクラウドアカウントに関連付けることができます。", "close-others-livechat-room_description": "他のライブチャットチャンネルを閉じる権限", "Closed": "閉じた状態", + "Closed_At": "閉じた日時", "Closed_by_visitor": "訪問者によって閉鎖される", "Closing_chat": "閉じるチャット", "Cloud": "クラウド", @@ -994,6 +999,7 @@ "Crowd_sync_interval_Description": "同期の間隔。例えば「24時間ごと」または「週の初日に」、さらに多くの例は[Cron Text Parser](http://bunkat.github.io/later/parsers.html#text)", "Current_Chats": "現在のチャット", "Current_File": "現在のファイル", + "Current_Import_Operation": "現在のインポート操作", "Current_Status": "現在のステータス", "Custom": "カスタム", "Custom CSS": "カスタム CSS", @@ -1161,7 +1167,9 @@ "Domains": "ドメイン", "Domains_allowed_to_embed_the_livechat_widget": "ライブチャットウィジェットを埋め込むことができるドメインのカンマ区切りのリスト。空白のままにして、すべてのドメインを許可します。", "Downloading_file_from_external_URL": "外部URLからファイルをダウンロード中", + "Download_Info": "ダウンロード情報", "Download_My_Data": "マイデータ (HTML) をダウンロードする", + "Download_Pending_Files": "保留中のファイルをダウンロードする", "Download_Snippet": "ダウンロード", "Drop_to_upload_file": "アップロードするファイルをドロップしてください", "Dry_run": "予行練習", @@ -1233,6 +1241,7 @@ "email_style_label": "メールスタイル", "email_style_description": "ネストされたセレクタを避ける", "Email_verified": "メールアドレスは検証済みです", + "email_plain_text_only": "プレーンテキストのメールのみを送信する", "Emoji": "絵文字", "Emoji_provided_by_JoyPixels": "絵文字提供:JoyPixels", "EmojiCustomFilesystem": "カスタム絵文字ファイルシステム", @@ -1273,6 +1282,7 @@ "error-archived-duplicate-name": "名前が `__room_name__` のアーカイブされたチャンネルがあります", "error-avatar-invalid-url": "無効なアバターURL: __url__", "error-avatar-url-handling": "__username__のURL (__url__) からアバターの設定を処理中にエラー", + "error-cannot-delete-app-user": "アプリユーザーの削除は許可されていません。対応するアプリをアンインストールして削除してください。", "error-cant-invite-for-direct-room": "ユーザーをダイレクトルームに招待できません", "error-channels-setdefault-is-same": "チャンネルのデフォルト設定は、変更するものと同じです。", "error-channels-setdefault-missing-default-param": "bodyParam 'default'は必須です", @@ -1411,7 +1421,12 @@ "Facebook_Page": "Facebookのページ", "Failed": "失敗しました", "Failed_to_activate_invite_token": "招待トークンを有効にできませんでした", + "Failed_To_Download_Files": "ファイルをダウンロードできませんでした", "Failed_to_generate_invite_link": "招待リンクを生成できませんでした", + "Failed_To_Load_Import_Data": "インポートデータを読み込めませんでした", + "Failed_To_Load_Import_History": "インポート履歴を読み込めませんでした", + "Failed_To_Load_Import_Operation": "インポート操作を読み込めませんでした", + "Failed_To_Start_Import": "インポート操作を開始できませんでした", "Failed_to_validate_invite_token": "招待トークンを検証できませんでした", "False": "いいえ", "Favorite_Rooms": "お気に入りのルームを有効にします", @@ -1442,14 +1457,20 @@ "Field": "フィールド", "Field_removed": "フィールド削除", "Field_required": "必要なフィールド", + "File": "ファイル", + "File_Downloads_Started": "ファイルのダウンロードを開始しました", "Files": "ファイル", "File_exceeds_allowed_size_of_bytes": "ファイルが許可されているサイズ __size__ を超過しています。", "File_name_Placeholder": "ファイル検索...", "File_removed_by_automatic_prune": "自動整理によってファイルが削除されました", "File_not_allowed_direct_messages": "ダイレクトメッセージではファイル共有は許可されていません。", "File_removed_by_prune": "整理によってファイルが削除されました", + "File_Path": "ファイルパス", + "File_Type": "ファイルタイプ", "File_type_is_not_accepted": "許可されていないファイルタイプです。", "File_uploaded": "ファイルがアップロードされました", + "File_uploaded_successfully": "ファイルが正常にアップロードされました", + "File_URL": "ファイルURL", "FileUpload": "ファイルアップロード", "FileUpload_Disabled": "ファイルのアップロードは無効になっています。", "FileUpload_Enabled": "ファイルアップロードを有効にする", @@ -1530,6 +1551,7 @@ "Force_SSL_Description": "*ご注意!* _Force SSL_は、リバースプロキシで使用すべきではありません。あなたがリバースプロキシを使用している場合、あなたはそこにリダイレクトを行う必要があります。このオプションは、リバースプロキシでのリダイレクト設定を許可していませんHerokuの、のような展開のために存在します。", "Force_visitor_to_accept_data_processing_consent": "データ処理の同意を強制", "Force_visitor_to_accept_data_processing_consent_description": "同意しない場合はチャットの開始を許可しません。", + "Invalid_Export_File": "アップロードされたファイルは、有効な%sのエクスポート・ファイルではありません。", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "データ処理に関する合意は、処理理由の透明な理解に基づくものでなければなりません。このため、ユーザーの個人情報を収集および処理する理由を説明するために、ユーザーに表示される以下の設定を記入する必要があります。", "Forgot_password": "パスワードをお忘れですか?", "Forgot_Password_Description": "次のプレースホルダを使用できます:
  • [Forgot_Password_Url] はパスワード復元URL
  • [name]、[fname]、[lname]はそれぞれユーザーのフルネーム、ファーストネームまたはラストネームです。
  • [email]はユーザーのメールアドレス。
  • [Site_Name]と[Site_URL]はそれぞれアプリケーション名とURLです。
", @@ -1658,6 +1680,8 @@ "Impersonate_user_description": "有効にすると、統合は、統合を開始したユーザーとして通知されます", "Import": "インポート", "Import_Type": "インポートのタイプ", + "Import_New_File": "新しいファイルをインポート", + "Import_requested_successfully": "インポートが正常に要求されました", "Importer_Archived": "アーカイブ済み", "Importer_CSV_Information": "CSVインポータには特定のフォーマットが必要です。zipファイルをどのように構築するのかについてのドキュメントをお読みください。", "Importer_done": "インポートが完了しました!", @@ -1668,6 +1692,7 @@ "Importer_import_cancelled": "インポートをキャンセルしました。", "Importer_import_failed": "インポート中にエラーが発生しました。", "Importer_importing_channels": "チャンネルをインポートしています", + "Importer_importing_files": "ファイルをインポートしています。", "Importer_importing_messages": "メッセージをインポートしています", "Importer_importing_started": "インポートを開始しています", "Importer_importing_users": "ユーザーをインポートしています", @@ -1681,10 +1706,29 @@ "Importer_setup_error": "インポート処理の設定中にエラーが発生しました", "Importer_Slack_Users_CSV_Information": "アップロードされるファイルはSlackのユーザーエクスポートファイルでなければなりません。これはCSVファイルです。詳細はこちらを参照してください。", "Importer_Source_File": "ソースファイルの選択", + "importer_status_new": "未開始", + "importer_status_uploading": "ファイルをアップロードしています", + "importer_status_downloading_file": "ファイルをダウンロードしています", + "importer_status_file_loaded": "読み込まれたファイル", + "importer_status_preparing_started": "ファイルを読んでいます", + "importer_status_preparing_users": "ユーザーファイルの読み取り", + "importer_status_preparing_channels": "チャンネルファイルの読み取り", + "importer_status_preparing_messages": "メッセージファイルの読み取り", + "importer_status_user_selection": "インポートするものを選択する準備ができました", + "importer_status_importing_started": "データのインポート", + "importer_status_importing_users": "ユーザーをインポート中", + "importer_status_importing_channels": "チャンネルをインポート中", + "importer_status_importing_files": "ファイルをインポートする", + "importer_status_importing_messages": "メッセージをインポート中", + "importer_status_finishing": "まもなく終わります", + "importer_status_done": "正常に完了しました", + "importer_status_import_failed": "エラーが発生しました", + "importer_status_import_cancelled": "キャンセル", "Importer_Upload_FileSize_Message": "サーバの設定により __maxFileSize__ までのサイズのファイルアップロードが許可されています。", "Importer_Upload_Unlimited_FileSize": " サーバの設定により任意のサイズのファイルアップロードが許可されています。", "Importer_ExternalUrl_Description": "公開アクセス可能ファイルとして URL も使うことができます。", "Importing_channels": "チャンネルをインポート中", + "Importing_Data": "データのインポート", "Importing_messages": "メッセージをインポート中", "Importing_users": "ユーザーをインポート中", "Inclusive": "指定日を含む", @@ -1764,7 +1808,6 @@ "Invalid_confirm_pass": "入力されたパスワードとパスワードの確認が一致していません", "Invalid_email": "入力されたメールアドレスは無効です", "Invalid_username": "入力されたユーザー名が無効です", - "Invalid_Export_File": "アップロードされたファイルは、有効な%sのエクスポート・ファイルではありません。", "Invalid_Import_File_Type": "無効な取り込みファイル種類です。", "Invalid_name": "名前は空にできません", "Invalid_notification_setting_s": "無効な通知設定: %s", @@ -1888,6 +1931,7 @@ "Last_seen": "最近見たもの", "Last_token_part": "最後のトークンパート", "Last_Message": "最後のメッセージ", + "Last_Status": "最終ステータス", "Last_Updated": "最終更新", "Launched_successfully": "成功した", "Layout": "レイアウト", @@ -2211,6 +2255,15 @@ "Message_HideType_ru": "「ユーザーが削除されました」メッセージを非表示にする", "Message_HideType_uj": "「ユーザーが参加しました」メッセージを非表示にする", "Message_HideType_ul": "「ユーザーが退出しました」メッセージを非表示にする", + "Message_HideType_r": "「ルーム名を変更しました」メッセージを非表示", + "Message_HideType_ut": "「ユーザーが参加しました」メッセージを非表示", + "Message_HideType_wm": "「ようこそ」メッセージを非表示", + "Message_HideType_rm": "「ユーザーが削除されました」メッセージを非表示", + "Message_HideType_subscription_role_added": "「役割が設定されました」メッセージを非表示", + "Message_HideType_subscription_role_removed": "「役割が定義されていません」メッセージを非表示", + "Message_HideType_room_archived": "「ルームをアーカイブしました」メッセージを非表示", + "Message_HideType_room_unarchived": "「ルームをアーカイブ解除しました」メッセージを非表示", + "Hide_System_Messages": "システムメッセージを非表示", "Message_Id": "メッセージID", "Message_Ignored": "このメッセージは無視されました", "Message_info": "メッセージ情報", @@ -2336,6 +2389,7 @@ "No_direct_messages_yet": "まだ会話を開始していません。", "No_emojis_found": "絵文字が見つかりません", "No_Encryption": "暗号化なし", + "No_files_left_to_download": "ダウンロードするファイルはありません", "No_group_with_name_%s_was_found": "\"%s\" というプライベートグループは、見つかりませんでした!", "No_groups_yet": "まだプライベートグループがありません。", "No_integration_found": "提供されたIDによって統合が見つかりませんでした。", @@ -2563,6 +2617,7 @@ "Public_Channel": "パブリックチャンネル", "Public_Community": "公共のコミュニティ", "Public_Relations": "広報", + "Public_URL": "公開URL", "Purchased": "購入済み", "Push": "プッシュ通知", "Push_Setting_Requires_Restart_Alert": "この値を変更するには、Rocket.Chatを再起動する必要があります。", @@ -2863,6 +2918,8 @@ "Sending": "送信しています...", "Sent_an_attachment": "添付ファイルを送信しました", "Served_By": "提供者", + "Server_File_Path": "サーバーファイルパス", + "Server_Folder_Path": "サーバーフォルダーパス", "Server_Info": "サーバー情報", "Server_Type": "サーバーの種類", "Service": "サービス", @@ -2990,6 +3047,7 @@ "Statistics_reporting": "Rocket.Chatに統計情報を送信します", "Statistics_reporting_Description": "あなたの統計情報を送信することにより、あなたは、私たちはRocket.Chatのどのように多くのインスタンスを識別するのに役立ちます展開されているだけでなく、システムがどのように動作しているかに良いので、私たちはそれを更に向上させることができます。ユーザ情報が送信されないと、我々は受信したすべての情報は機密扱いされているように、心配しないでください。", "Stats_Active_Users": "アクティブなユーザー", + "Stats_App_Users": "Rocket.Chatアプリのユーザー", "Stats_Avg_Channel_Users": "チャンネルの平均ユーザー", "Stats_Avg_Private_Group_Users": "プライベートグループの平均ユーザー", "Stats_Away_Users": "離席中のユーザー", @@ -3240,6 +3298,7 @@ "Unfollow_message": "メッセージのフォローを解除", "Unignore": "Unignore", "Uninstall": "アンインストール", + "Unknown_Import_State": "不明なインポート状態", "Unlimited": "無制限", "Unmute_someone_in_room": "ルームのユーザーのミュート解除する", "Unmute_user": "ミュートを解除", @@ -3260,6 +3319,7 @@ "Update_to_version": "__version__ にアップデート", "Update_your_RocketChat": "Rocket.Chatを更新する", "Updated_at": "更新日: ", + "Upload": "アップロードする", "Upload_app": "アプリをアップロード", "Upload_file_description": "ファイル説明", "Upload_file_name": "ファイル名", @@ -3271,6 +3331,8 @@ "Uptime": "稼働時間", "URL": "URL", "URL_room_prefix": "URLルームプレフィックス", + "Use_Server_configuration": "サーバー構成を使用する", + "Use_Room_configuration": "サーバー構成を上書きし、ルーム構成を使用します", "Use_account_preference": "アカウント設定を使用する", "Use_Emojis": "絵文字を使う", "Use_Global_Settings": "全体設定を使用する", @@ -3374,6 +3436,7 @@ "Users_added": "ユーザーが追加されました", "Users_in_role": "ロールを割り当て中のユーザー", "Users must use Two Factor Authentication": "2ファクタ認証を必須にする", + "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "ロールを表示したくない場合は、説明フィールドを空白のままにします", "Uses": "使用", "Uses_left": "残り", "UTF8_Names_Slugify": "UTF8形式名をスラグ化する", diff --git a/packages/rocketchat-i18n/i18n/km.i18n.json b/packages/rocketchat-i18n/i18n/km.i18n.json index e8850203f734..717f08f2c7d1 100644 --- a/packages/rocketchat-i18n/i18n/km.i18n.json +++ b/packages/rocketchat-i18n/i18n/km.i18n.json @@ -1440,6 +1440,7 @@ "Force_SSL_Description": "* ប្រយ័ត្ន! * _Force SSL_ មិនគួរត្រូវបានប្រើជាមួយប្រូកស៊ីបញ្ច្រាស។ ប្រសិនបើអ្នកមានប្រូកស៊ីបញ្ច្រាស, អ្នកគួរតែធ្វើការប្តូរទិសនៅទីនោះ។ ជម្រើសនេះមានសម្រាប់ការដាក់ពង្រាយដូច Heroku, ដែលមិនអនុញ្ញាតឱ្យមានការប្តូរទិសនៅក្នុងការកំណត់រចនាសម្ព័ន្ធប្រូកស៊ីបញ្ច្រាស។", "Force_visitor_to_accept_data_processing_consent": "បង្ខំអ្នកទស្សនាទទួលយកការព្រមព្រៀងដំណើរការទិន្នន័យ", "Force_visitor_to_accept_data_processing_consent_description": "អ្នកទស្សនាមិនត្រូវបានអនុញ្ញាតឱ្យចាប់ផ្ដើមជជែកដោយគ្មានការយល់ព្រម។", + "Invalid_Export_File": "ឯកសារដែលបានផ្ទុកឡើងមិនមែនជាឯកសារនាំចេញជា %s បានត្រឹមត្រូវ។", "Forgot_password": "ភ្លេច​ពាក្យ​សម្ងាត់", "Forgot_Password_Description": "អ្នកអាចប្រើកន្លែងដាក់ខាងក្រោម:
  • [Forgot_Password_Url] សម្រាប់ URL សង្គ្រោះពាក្យសម្ងាត់។
  • [ឈ្មោះ], [fname], [lname] សម្រាប់ឈ្មោះអ្នកប្រើនាមត្រកូលឬនាមត្រកូលរៀងៗខ្លួន។
  • [អ៊ីមែល] សម្រាប់អ៊ីម៉ែលរបស់អ្នកប្រើ។
  • [Site_Name] និង [Site_URL] សម្រាប់ឈ្មោះកម្មវិធីនិង URL រៀងៗខ្លួន។
", "Forgot_Password_Email": "ចុច ទីនេះដើម្បីកំណត់ពាក្យសម្ងាត់របស់អ្នកឡើងវិញ។", @@ -1578,6 +1579,11 @@ "Importer_setup_error": "កំហុសមួយបានកើតឡើងខណៈពេលរៀបចំការកំណត់ការនាំចូល។", "Importer_Slack_Users_CSV_Information": "ឯកសារដែលបានផ្ទុកឡើងត្រូវតែជាឯកសារនាំចេញអ្នកប្រើប្រាស់ Slack ដែលជាឯកសារ CSV ។ សូមមើលនៅទីនេះសម្រាប់ព័ត៌មានបន្ថែម:", "Importer_Source_File": "ការជ្រើសរើសឯកសារប្រភព", + "importer_status_importing_users": "កំពុងនាំចូលអ្នកប្រើប្រាស់", + "importer_status_importing_channels": "ការនាំចូលឆានែល", + "importer_status_importing_messages": "កំពុងនាំចូលសារ", + "importer_status_finishing": "ជិត​រួចរាល់​ហើយ", + "importer_status_import_failed": "កំហុសក្នុងការ", "Importer_Upload_FileSize_Message": "ការកំណត់ម៉ាស៊ីនបម្រើរបស់អ្នកអនុញ្ញាតឱ្យផ្ទុកឡើងឯកសារដែលមានទំហំ __maxFileSize__ ។", "Importer_Upload_Unlimited_FileSize": "ការកំណត់ម៉ាស៊ីនបម្រើរបស់អ្នកអនុញ្ញាតអោយផ្ទុកឡើងឯកសារដែលមានទំហំណាមួយ។", "Importer_ExternalUrl_Description": "អ្នកក៏អាចប្រើ URL សម្រាប់ឯកសារអាចចូលដំណើរការជាសាធារណៈបានដែរ:", @@ -1657,7 +1663,6 @@ "Invalid_confirm_pass": "ពាក្យ​សម្ងាត់​បញ្ជាក់​មិន​ដូច​ពាក្យ​សម្ងាត់​បាន​បញ្ចូល​", "Invalid_email": "អ៊ី​មែល​ដែល​បញ្ចូល​មិន​ត្រឹម​ត្រូវ", "Invalid_username": "ឈ្មោះអ្នកប្រើដែលបានបញ្ចូលមិនត្រឹមត្រូវ", - "Invalid_Export_File": "ឯកសារដែលបានផ្ទុកឡើងមិនមែនជាឯកសារនាំចេញជា %s បានត្រឹមត្រូវ។", "Invalid_Import_File_Type": "ប្រភេទឯកសារនាំចូលមិនត្រឹមត្រូវ។", "Invalid_name": "ឈ្មោះ​មិន​​អាច​ទំនេរ", "Invalid_notification_setting_s": "ការកំណត់ការជូនដំណឹងមិនត្រឹមត្រូវ: %s", diff --git a/packages/rocketchat-i18n/i18n/ko.i18n.json b/packages/rocketchat-i18n/i18n/ko.i18n.json index 9108622c5fba..2a39e50d0f1d 100644 --- a/packages/rocketchat-i18n/i18n/ko.i18n.json +++ b/packages/rocketchat-i18n/i18n/ko.i18n.json @@ -1354,6 +1354,7 @@ "Force_SSL_Description": "*주의!* _Force SSL_는 역방향 프록시와 함께 사용하면 안됩니다. 리버스 프록시가있는 경우에는 리디렉션도 해야합니다. 이 옵션은 역방향 프록시에서 리디렉션 구성을 허용하지 않는 Heroku와 같은 배포용입니다.", "Force_visitor_to_accept_data_processing_consent": "방문자가 데이터 처리 동의를 수락하도록 강제하기", "Force_visitor_to_accept_data_processing_consent_description": "방문객은 동의없이 채팅을 시작할 수 없습니다.", + "Invalid_Export_File": "업로드된 파일이 유효한 %s 내보내기 파일이 아닙니다.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "데이터 처리와의 계약은 처리해야 할 이유에 대한 투명한 이해를 기반으로해야합니다. 이 때문에 귀하의 개인 정보를 수집하고 처리하는 이유를 제공하기 위해 사용자에게 표시 될 아래 설정을 작성해야합니다.", "Forgot_password": "비밀번호를 잊으셨나요?", "Forgot_Password_Description": "비밀번호 재생 URL은
  • [Forgot_Password_Url]과 같은 자리 표시자를 사용할 수 있습니다.
  • 사용자 이름, 성 또는 이름에 대한 [name], [fname], [lname].
  • 사용자 이메일 용 [email].
  • [Application_Name] 및 [Site_URL]은 각각 Application Name 및 URL입니다.
", @@ -1495,6 +1496,11 @@ "Importer_setup_error": "가져오기를 설정하는 중에 오류가 발생했습니다.", "Importer_Slack_Users_CSV_Information": "업로드 된 파일은 CSV 파일 인 Slack의 사용자 내보내기 파일이어야합니다. 자세한 내용은 여기를 참조하십시오.", "Importer_Source_File": "소스 파일 선택", + "importer_status_importing_users": "유저 가져오기", + "importer_status_importing_channels": "채널 가져오기", + "importer_status_importing_messages": "메세지 가져오기", + "importer_status_finishing": "거의 완료되었습니다.", + "importer_status_import_failed": "오류", "Importer_Upload_FileSize_Message": "__maxFileSize__ 까지만 업로드할 수 있습니다.", "Importer_Upload_Unlimited_FileSize": "제한없이 업로드할 수 있습니다.", "Importer_ExternalUrl_Description": "외부에서 접근할 수 있는 파일의 URL을 사용할 수 있습니다.", @@ -1575,7 +1581,6 @@ "Invalid_confirm_pass": "비밀번호가 일치하지 않습니다.", "Invalid_email": "입력한 이메일이 잘못되었습니다.", "Invalid_username": "입력한 사용자 이름이 잘못되었습니다.", - "Invalid_Export_File": "업로드된 파일이 유효한 %s 내보내기 파일이 아닙니다.", "Invalid_Import_File_Type": "유효하지 않은 가져오기 파일 형식.", "Invalid_name": "이름을 반드시 입력해야합니다.", "Invalid_notification_setting_s": "유효하지 않은 알림 설정: %s", diff --git a/packages/rocketchat-i18n/i18n/ku.i18n.json b/packages/rocketchat-i18n/i18n/ku.i18n.json index 9b48c53f3939..28f7e9766361 100644 --- a/packages/rocketchat-i18n/i18n/ku.i18n.json +++ b/packages/rocketchat-i18n/i18n/ku.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "Destûra ku ji bo hemî sînor veşartina peyamek jêbirin", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Caution! * _Force SSL_ divê tu caran bê bi proxy berevajî tê bikaranîn. Eger te wêneyek proxy berevajî, divê tu beralîkirina hene do. Ev bijare ji bo êrîşên wek Heroku, ku nayê mîhengên beralîkirina li proxy berevajî destûrê ne heye.", + "Invalid_Export_File": "The file uploaded e a% derbasdar s pela derxistinê ne.", "Forgot_password": "تێپەڕەوشەت بیرچوە", "Forgot_Password_Description": "Hûn dikarin li cihên jêrîn bikar bînin:
  • [forg_Password_Url] ji bo şîfreya vegera şîfreyê.
  • navê [[name], [fname], [lname] ji bo navê bikarhênerê, first name an navê paşîn, paşê.
  • [email] bo e-nameya bikarhêner.
  • [Site_Name] û [Site_URL] ji bo navê navekî û navnîşê ya serî.
", "Forgot_Password_Email": "Bişkojka li vir bişîne.", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "sazkirina ji împort An error teqîn pêk hat.", "Importer_Slack_Users_CSV_Information": "Divê belgeya pelê divê pelên Slack ji pelê veşartî bibin, ku pelê CSV ye. Ji bo bêtir agahdarî li vir bibînin:", "Importer_Source_File": "Hilbijartina Çavkanî ya Çavkaniyê", + "importer_status_import_failed": "Şaşî", "Inclusive": "Inclusive", "Incoming_Livechats": "Vegerîna Livechats", "Incoming_WebHook": "WebHook Incoming", @@ -1408,7 +1410,6 @@ "Invalid_confirm_pass": "دووبارەکراوەی تێپەڕەوشە یەکناگرێتەوە لەگەڵ تێپەڕەوشە", "Invalid_email": "ئیمەیڵی نوسراو هەڵەیە.", "Invalid_username": "Navê bikarhêner çewt e", - "Invalid_Export_File": "The file uploaded e a% derbasdar s pela derxistinê ne.", "Invalid_Import_File_Type": "cureyê pelê Import Invalid.", "Invalid_name": "ناو نابێ بەتاڵ بێت", "Invalid_notification_setting_s": "mîhengê notification nederbasdar: %s", diff --git a/packages/rocketchat-i18n/i18n/lo.i18n.json b/packages/rocketchat-i18n/i18n/lo.i18n.json index bc9439e831aa..1343aab1d8f2 100644 --- a/packages/rocketchat-i18n/i18n/lo.i18n.json +++ b/packages/rocketchat-i18n/i18n/lo.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "ການອະນຸຍາດທີ່ຈະລຶບຂໍ້ຄວາມໂດຍບໍ່ມີຂໍ້ຈໍາກັດທັງຫມົດ", "Force_SSL": "ຜົນບັງຄັບໃຊ້ SSL", "Force_SSL_Description": "* ຂໍ້ຄວນລະວັງ! _Force SSL_ ບໍ່ຄວນຈະຖືກນໍາໃຊ້ກັບຕົວແທນໄດ້ຢ່າງສິ້ນເຊີງ. ຖ້າຫາກວ່າທ່ານມີຕົວແທນໄດ້ຢ່າງສິ້ນເຊີງ, ທ່ານຄວນເຮັດແນວໃດຕົວຊີ້ທິດທາງມີ. ຕົວເລືອກນີ້ແລ້ວສໍາລັບການປະຕິບັດຄື Heroku, ວ່າບໍ່ໄດ້ອະນຸຍາດໃຫ້ການຕັ້ງຄ່າຕົວຊີ້ທິດທາງທີ່ຕົວແທນໄດ້ຢ່າງສິ້ນເຊີງ.", + "Invalid_Export_File": "ເອກະສານທີ່ອັບໂຫລດບໍ່ແມ່ນເອກະສານການສົ່ງອອກເປັນ% ຖືກຕ້ອງ s.", "Forgot_password": "ລືມ​ລະ​ຫັດ​ຜ່ານ​", "Forgot_Password_Description": "ທ່ານອາດຈະນໍາໃຊ້ບ່ອນວາງສະຖານດັ່ງຕໍ່ໄປນີ້:
  • [ລືມລະຫັດຜ່ານ] ສໍາລັບ URL ກູ້ຄືນລະຫັດຜ່ານ.
  • [ຊື່], [fname], [lname] ສໍາລັບຊື່ເຕັມ, ຊື່ຫຼືນາມສະກຸນຂອງຜູ້ໃຊ້.
  • [ອີເມວ] ສໍາລັບອີເມວຂອງຜູ້ໃຊ້.
  • [Site_Name] ແລະ [Site_URL] ສໍາລັບຊື່ແອັບຯແລະ URL ຕາມລໍາດັບ.
", "Forgot_Password_Email": "ກົດ ທີ່ນີ້ເພື່ອຕັ້ງຄ່າລະຫັດຜ່ານຂອງທ່ານ.", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "ເກີດຄວາມຜິດພາດໃນຂະນະທີ່ການສ້າງຕັ້ງຂຶ້ນຜູ້ນໍາເຂົ້າ.", "Importer_Slack_Users_CSV_Information": "ໄຟລ໌ທີ່ອັບໂຫລດຕ້ອງເປັນໄຟລ໌ສົ່ງຜູ້ໃຊ້ຂອງ Slack, ເຊິ່ງເປັນໄຟລ໌ CSV. ເບິ່ງທີ່ນີ້ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ:", "Importer_Source_File": "ການຄັດເລືອກເອກະສານແຫຼ່ງຂໍ້ມູນ", + "importer_status_import_failed": "Error", "Inclusive": "ລວມ", "Incoming_Livechats": "Livechats ມາ", "Incoming_WebHook": "WebHook ເຂົ້າມາ", @@ -1408,7 +1410,6 @@ "Invalid_confirm_pass": "ການຢືນຢັນລະຫັດຜ່ານບໍ່ກົງກັບລະຫັດຜ່ານ", "Invalid_email": "ອີເມວນັ້ນບໍ່ຖືກຕ້ອງ", "Invalid_username": "ຊື່ຜູ້ໃຊ້ທີ່ເຂົ້າມາບໍ່ຖືກຕ້ອງ", - "Invalid_Export_File": "ເອກະສານທີ່ອັບໂຫລດບໍ່ແມ່ນເອກະສານການສົ່ງອອກເປັນ% ຖືກຕ້ອງ s.", "Invalid_Import_File_Type": "ປະເພດນໍາເຂົ້າເອກະສານທີ່ບໍ່ຖືກຕ້ອງ.", "Invalid_name": "ຊື່ຕ້ອງບໍ່ເປົ່າຫວ່າງ", "Invalid_notification_setting_s": "ການຕັ້ງຄ່າການແຈ້ງການບໍ່ຖືກຕ້ອງ: %s", diff --git a/packages/rocketchat-i18n/i18n/lt.i18n.json b/packages/rocketchat-i18n/i18n/lt.i18n.json index 6dbc8b4851bb..839846ce80ca 100644 --- a/packages/rocketchat-i18n/i18n/lt.i18n.json +++ b/packages/rocketchat-i18n/i18n/lt.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Leidimas ištrinti pranešimą apeinant visus apribojimus", "Force_SSL": "\"Force SSL\"", "Force_SSL_Description": "* Atsargiai! * _Force SSL_ niekada neturėtų būti naudojamas su atvirkščiu proxy. Jei turite atvirkštinį įgaliotąjį serverį, turėtumėte atlikti nukreipti JEI. Ši galimybė yra tokia, kaip \"Heroku\", skirta dislokacijai, kuri neleidžia peradresavimo konfigūracijos atvirkštinio proxy.", + "Invalid_Export_File": "Įkeltas failas nėra tinkamas%s eksporto failas.", "Forgot_password": "Pamiršai slaptažodį", "Forgot_Password_Description": "Slaptažodžio atkūrimo URL galite naudoti šiuos užpildytojus:
  • [Forgot_Password_Url].
  • [vardas], [fname], [lname] atitinkamai vartotojo vardas, pavardė arba vardas.
  • [el. Paštas] naudotojo el. Laiškui.
  • > [Site_Name] ir [Site_URL] atitinkamai programos pavadinimui ir URL.
", "Forgot_Password_Email": "Spustelėkite čia, jei norite iš naujo nustatyti slaptažodį.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Nustatant importuotoją įvyko klaida.", "Importer_Slack_Users_CSV_Information": "Įkeltas failas turi būti \"Slack's Users\" eksporto failas, kuris yra CSV failas. Daugiau informacijos rasite čia:", "Importer_Source_File": "Šaltinio failo parinkimas", + "importer_status_import_failed": "Klaida", "Inclusive": "Įtraukta", "Incoming_Livechats": "Incoming Livechats", "Incoming_WebHook": "\"Incoming WebHook\"", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Slaptažodžio patvirtinimas nesutampa su slaptažodžiu", "Invalid_email": "Įvestas el. Pašto adresas neteisingas", "Invalid_username": "Įvestas vardas neteisingas", - "Invalid_Export_File": "Įkeltas failas nėra tinkamas%s eksporto failas.", "Invalid_Import_File_Type": "Neteisingas failo tipo importavimas.", "Invalid_name": "Pavadinimas negali būti tuščias", "Invalid_notification_setting_s": "Netinkamas pranešimų nustatymas:%s", diff --git a/packages/rocketchat-i18n/i18n/lv.i18n.json b/packages/rocketchat-i18n/i18n/lv.i18n.json index a566927b330e..08107fde2e48 100644 --- a/packages/rocketchat-i18n/i18n/lv.i18n.json +++ b/packages/rocketchat-i18n/i18n/lv.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "Atļauja izdzēst ziņu, apejot visus ierobežojumus", "Force_SSL": "Piespiedu SSL", "Force_SSL_Description": "* Uzmanību! * _Force SSL_ nekad nedrīkst izmantot ar atgriezenisku starpniekserveri. Ja jums ir atgriezenisks starpniekserveris, jums vajadzētu veikt novirzīšanu uz TURIENI. Šī opcija pastāv izvietojumos, kā piemēram, Heroku, kas neļauj novirzīt konfigurāciju uz atgriezenisko starpniekserveri.", + "Invalid_Export_File": "Augšupielādētais fails nav derīgs %s eksporta fails.", "Forgot_password": "Aizmirsi savu paroli", "Forgot_Password_Description": "Jūs varat izmantot šādus vietturus:
  • [Forgot_Password_Url][lname] paroles atjaunošanas URL.
  • [name], [fname], ietotāja pilnam vārdam, attiecīgi vārds vai uzvārds.
  • [e-mail] lietotāja e-pastam.
  • [Site_Name] un [Site_URL] attiecīgi lietotnes nosaukums un URL.
", "Forgot_Password_Email": "Lai atiestatītu paroli, noklikšķiniet uz šeit.", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "Iestatot importētāju, radās kļūda.", "Importer_Slack_Users_CSV_Information": "Augšupielādētajam failam jābūt Slack's Users eksporta failam, kas ir CSV fails. Plašāku informāciju skatiet šeit:", "Importer_Source_File": "Avota faila izvēle", + "importer_status_import_failed": "Kļūda", "Inclusive": "Ietverošs", "Incoming_Livechats": "Ienākošie Livechats", "Incoming_WebHook": "Ienākošs WebHook", @@ -1408,7 +1410,6 @@ "Invalid_confirm_pass": "Paroles apstiprinājums neatbilst parolei", "Invalid_email": "Ievadītais e-pasts nav derīgs", "Invalid_username": "Ievadītais lietotājvārds nav derīgs", - "Invalid_Export_File": "Augšupielādētais fails nav derīgs %s eksporta fails.", "Invalid_Import_File_Type": "Nederīgs faila veida importēšana.", "Invalid_name": "Nosaukums nedrīkst būt tukšs", "Invalid_notification_setting_s": "Nederīgs paziņojumu iestatījums: %s", diff --git a/packages/rocketchat-i18n/i18n/mn.i18n.json b/packages/rocketchat-i18n/i18n/mn.i18n.json index 3f7e4c33b300..61fdce239482 100644 --- a/packages/rocketchat-i18n/i18n/mn.i18n.json +++ b/packages/rocketchat-i18n/i18n/mn.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Бүх хязгаарлалтыг багтаасан мессежийг устгах зөвшөөрөл", "Force_SSL": "SSL хүч", "Force_SSL_Description": "* Анхаар! * _Force SSL_ нь урвуу прокситой хэзээ ч ашиглагдах ёсгүй. Хэрэв та урвуу прокситой бол, Хэрэв та дахин чиглүүлэлт хийх хэрэгтэй. Энэ сонголт нь Heroku гэх мэт байршлын хувьд байдаг бөгөөд энэ нь урвуу проксигоор дамжих тохируулгыг зөвшөөрдөггүй.", + "Invalid_Export_File": "Байршуулсан файл нь %s экспортын файл биш байна.", "Forgot_password": "Нууц үгээ мартсан", "Forgot_Password_Description": "Та дараах байршлыг ашиглаж болно:
  • [Forgot_Password_Url] нууц үгийн сэргээлтийн URL-г ашиглаж болно.
  • [нэр], [fname], [lname] хэрэглэгчийн бүтэн нэр, эхний нэр эсвэл овог нэр.
  • [имэйл] хэрэглэгчийн имэйлийн хувьд.
  • [Site_Name] болон [Site_URL] нь Програмын Нэр болон URL-ыг тус тусад нь зааж өгсөн.
", "Forgot_Password_Email": "Энд дарж энднууц үгээ дахин тохируулна уу.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Импортлогчийг үүсгэх явцад алдаа гарлаа.", "Importer_Slack_Users_CSV_Information": "Хуулагдсан файл нь Slack-ийн хэрэглэгчид экспортын файл байх ёстой бөгөөд энэ нь CSV файл юм. Дэлгэрэнгүй мэдээллийг эндээс үзнэ үү:", "Importer_Source_File": "Эх үүсвэрийн файлын сонголт", + "importer_status_import_failed": "Алдаа", "Inclusive": "Оруулсан", "Incoming_Livechats": "Ирж буй мал аж ахуй", "Incoming_WebHook": "Ирсэн вэбхуудас", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Нууц үг баталгаажуулалт нь нууц үгтэй таарахгүй байна", "Invalid_email": "Оруулсан имэйл буруу байна", "Invalid_username": "Оруулсан хэрэглэгчийн нэр буруу байна", - "Invalid_Export_File": "Байршуулсан файл нь %s экспортын файл биш байна.", "Invalid_Import_File_Type": "Файлын төрөл буруу оруулсан.", "Invalid_name": "Нэр нь хоосон байх ёсгүй", "Invalid_notification_setting_s": "Буруу мэдэгдлийн тохиргоо:%s", diff --git a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json index 9517a2ae5d4f..9f00701a7288 100644 --- a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json +++ b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Kebenaran untuk memadamkan mesej melangkau semua sekatan", "Force_SSL": "Tentera SSL", "Force_SSL_Description": "* Awas! * _Force SSL_ tidak boleh digunakan dengan proksi terbalik. Jika anda mempunyai proksi terbalik, anda perlu melakukan peralihan ADA. Pilihan ini wujud untuk pergerakan seperti Heroku, yang tidak membenarkan konfigurasi redirect di proksi terbalik.", + "Invalid_Export_File": "Fail yang dimuat naik tidak %s yang sah fail eksport.", "Forgot_password": "Lupa kata laluan anda", "Forgot_Password_Description": "Anda boleh menggunakan pemegang tempat berikut:
  • [Forgot_Password_Url] untuk URL pemulihan kata laluan.
  • [nama], [fname], [lname] untuk nama penuh pengguna, nama pertama atau nama belakangnya masing-masing.
  • [email] untuk e-mel pengguna.
  • [Site_Name] dan [Site_URL] untuk Nama Aplikasi dan URL masing-masing.
", "Forgot_Password_Email": "Klik di siniuntuk menetapkan semula kata laluan anda.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Ralat berlaku semasa menyediakan pengimport.", "Importer_Slack_Users_CSV_Information": "Fail yang dimuat naik mestilah file eksport Pengguna Slack, iaitu fail CSV. Lihat di sini untuk maklumat lanjut:", "Importer_Source_File": "Pemilihan Fail Sumber", + "importer_status_import_failed": "ralat", "Inclusive": "Inklusif", "Incoming_Livechats": "Livechats yang akan datang", "Incoming_WebHook": "WebHook masuk", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Pengesahan kata laluan tidak sepadan dengan kata laluan", "Invalid_email": "E-mel yang dimasukkan tidak sah", "Invalid_username": "Nama pengguna yang dimasukkan adalah tidak sah", - "Invalid_Export_File": "Fail yang dimuat naik tidak %s yang sah fail eksport.", "Invalid_Import_File_Type": "jenis fail Import tidak sah.", "Invalid_name": "Nama mesti tidak dikosongkan", "Invalid_notification_setting_s": "tetapan pemberitahuan tidak sah: %s", diff --git a/packages/rocketchat-i18n/i18n/nl.i18n.json b/packages/rocketchat-i18n/i18n/nl.i18n.json index 747e63b76290..aca510906f61 100644 --- a/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -1324,6 +1324,7 @@ "force-delete-message_description": "Toestemming om een ​​bericht te verwijderen zonder alle beperkingen te omzeilen", "Force_SSL": "Dwing SSL af", "Force_SSL_Description": "* Let op! * _Force SSL_ mag nooit worden gebruikt in combinatie met reverse proxy. Als u een reverse proxy, moet u de omleiding daar te doen. Deze optie bestaat voor implementaties zoals Heroku, die niet de omleiding configuratie aan de reverse proxy niet toestaat.", + "Invalid_Export_File": "Het bestand geüpload is geen geldig %s exportbestand.", "Forgot_password": "Wachtwoord vergeten", "Forgot_Password_Description": "U kunt de volgende tijdelijke aanduidingen gebruiken:
  • [Forgot_Password_Url] voor de URL voor wachtwoordherstel.
  • [naam], [fname], [lname] voor de volledige naam, voornaam of achternaam van de gebruiker.
  • [email] voor het e-mailadres van de gebruiker.
  • [Site_Name] en [Site_URL] voor respectievelijk de toepassingsnaam en URL.
", "Forgot_Password_Email": "Klik op hierom uw wachtwoord opnieuw in te stellen.", @@ -1451,6 +1452,8 @@ "Importer_setup_error": "Er is een fout opgetreden tijdens het instellen van de importeur.", "Importer_Slack_Users_CSV_Information": "Het geüploade bestand moet het exportbestand van Slack's Users zijn, wat een CSV-bestand is. Kijk hier voor meer informatie:", "Importer_Source_File": "Bronbestand selecteren", + "importer_status_finishing": "Bijna klaar", + "importer_status_import_failed": "Fout", "Inclusive": "inclusief", "Incoming_Livechats": "Inkomende Livechats", "Incoming_WebHook": "Inkomende WebHook", @@ -1521,7 +1524,6 @@ "Invalid_confirm_pass": "De wachtwoorden zijn verschillend", "Invalid_email": "Ongeldig e-mail adres", "Invalid_username": "De ingevoerde gebruikersnaam is ongeldig", - "Invalid_Export_File": "Het bestand geüpload is geen geldig %s exportbestand.", "Invalid_Import_File_Type": "Ongeldig bestandstype importeren.", "Invalid_name": "De naam mag niet leeg zijn", "Invalid_notification_setting_s": "Ongeldige melding-instelling: %s", diff --git a/packages/rocketchat-i18n/i18n/no.i18n.json b/packages/rocketchat-i18n/i18n/no.i18n.json index deb8a7a0ee3b..819b80c70b5b 100644 --- a/packages/rocketchat-i18n/i18n/no.i18n.json +++ b/packages/rocketchat-i18n/i18n/no.i18n.json @@ -1213,6 +1213,7 @@ "force-delete-message_description": "Tillatelse til å slette en melding omgå alle begrensninger", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Forsiktig! * _Force SSL_ skal aldri brukes med omvendt proxy. Hvis du har en omvendt proxy, bør du gjøre omadresseringen der. Dette alternativet finnes for distribusjoner som Heroku, som ikke tillater viderekoblingskonfigurasjonen på omvendt proxy.", + "Invalid_Export_File": "Filen lastet opp er ikke en gyldig%s eksportfil.", "Forgot_password": "Glemt passordet", "Forgot_Password_Description": "Du kan bruke følgende plassholdere:
  • [Forgot_Password_Url] for URL-adressen for passordgjenoppretting.
  • [navn], [fname], [lname] for brukerens fulle navn, fornavn eller etternavn.
  • [email] for brukerens e-postadresse.
  • [Site_Name] og [Site_URL] for henholdsvis programnavnet og nettadressen.
", "Forgot_Password_Email": "Klikk herfor å tilbakestille passordet ditt.", @@ -1340,6 +1341,7 @@ "Importer_setup_error": "Det oppsto en feil under oppsett av importøren.", "Importer_Slack_Users_CSV_Information": "Filen som lastes opp må være Slack's Users-eksportfil, som er en CSV-fil. Se her for mer informasjon:", "Importer_Source_File": "Kildefilvalg", + "importer_status_import_failed": "Feil", "Inclusive": "Inklusive", "Incoming_Livechats": "Innkommende Livechats", "Incoming_WebHook": "Innkommende WebHook", @@ -1410,7 +1412,6 @@ "Invalid_confirm_pass": "Passordbekreftelsen stemmer ikke overens med passordet", "Invalid_email": "E-posten som er oppgitt, er ugyldig", "Invalid_username": "Brukernavnet som er oppgitt, er ugyldig", - "Invalid_Export_File": "Filen lastet opp er ikke en gyldig%s eksportfil.", "Invalid_Import_File_Type": "Ugyldig import filtype.", "Invalid_name": "Navnet må ikke være tomt", "Invalid_notification_setting_s": "Ugyldig varslingsinnstilling:%s", diff --git a/packages/rocketchat-i18n/i18n/pl.i18n.json b/packages/rocketchat-i18n/i18n/pl.i18n.json index b9acdfe617a8..0c1680246378 100644 --- a/packages/rocketchat-i18n/i18n/pl.i18n.json +++ b/packages/rocketchat-i18n/i18n/pl.i18n.json @@ -1454,6 +1454,7 @@ "Force_SSL_Description": "* Uwaga! * _Force SSL_ nigdy nie powinno być stosowane z reverse proxy. Jeśli masz reverse proxy, należy zrobić przekierowanie tam. Opcja ta istnieje dla wdrożeń, np. na Heroku, który nie pozwala na konfigurację przekierowania przez reverse proxy.", "Force_visitor_to_accept_data_processing_consent": "Zmuszaj odwiedzającego do zaakceptowania zgody na przetwarzanie danych", "Force_visitor_to_accept_data_processing_consent_description": "Odwiedzający nie mogą rozpocząć czatu bez zgody.", + "Invalid_Export_File": "Przesłany plik nie jest prawidłowym %s plik eksportu.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Umowa z przetwarzaniem danych musi opierać się na przejrzystym zrozumieniu przyczyny przetwarzania. Z tego powodu musisz wypełnić poniższe ustawienie, które będzie wyświetlane użytkownikom w celu podania przyczyn gromadzenia i przetwarzania Twoich danych osobowych.", "Forgot_password": "Zapomniałeś hasła", "Forgot_Password_Description": "Możesz użyć następujących symboli zastępczych:
  • [Forgot_Password_Url] dla adresu odzyskiwania hasła.
  • [name], [fname], [lname] dla pełnego imienia i nazwiska użytkownika, imienia lub nazwiska.
  • [email] dla adresu e-mail użytkownika.
  • [Site_Name] i [Site_URL] odpowiednio dla nazwy aplikacji i adresu URL.
", @@ -1596,6 +1597,12 @@ "Importer_setup_error": "Wystąpił błąd podczas konfigurowania importera wystąpił.", "Importer_Slack_Users_CSV_Information": "Przesłany plik musi być plikiem eksportu użytkowników Slacka, który jest plikiem CSV. Zobacz tutaj, aby uzyskać więcej informacji:", "Importer_Source_File": "Wybór pliku źródłowego", + "importer_status_new": "Nie rozpoczęte", + "importer_status_importing_users": "Importowanie użytkowników", + "importer_status_importing_channels": "Importowanie kanałów", + "importer_status_importing_messages": "Importowanie wiadomości", + "importer_status_finishing": "Już prawie zrobione", + "importer_status_import_failed": "Błąd", "Importer_Upload_FileSize_Message": "Twoje ustawienia serwera pozwalają na przesyłanie plików o wielkości do __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Twoje ustawienia serwera pozwalają na przesyłanie plików dowolnej wielkości.", "Importer_ExternalUrl_Description": "Możesz również użyć adresu URL dla pliku dostępnego publicznie:", @@ -1677,7 +1684,6 @@ "Invalid_confirm_pass": "Podane hasła nie są jednakowe", "Invalid_email": "E-mail jest nieprawidłowy", "Invalid_username": "Wprowadzona nazwa użytkownika jest nieprawidłowa", - "Invalid_Export_File": "Przesłany plik nie jest prawidłowym %s plik eksportu.", "Invalid_Import_File_Type": "Nieprawidłowy typ pliku do zaimportowania.", "Invalid_name": "Nazwa nie może być pusta", "Invalid_notification_setting_s": "Nieprawidłowe ustawienie powiadamiania: %s", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index dc91ec7e3360..b12bf50b61eb 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -1093,7 +1093,6 @@ "Domains": "Domínios", "Domains_allowed_to_embed_the_livechat_widget": "A lista de domínios separados por vírgulas permitiu incorporar o widget do Livechat. Deixe em branco para permitir todos os domínios.", "Downloading_file_from_external_URL": "Baixar arquivo de URL externa", - "Download_Info": "Baixar informações", "Download_My_Data": "Baixar meus dados (HTML)", "Download_Snippet": "Baixar", "Drop_to_upload_file": "Largue para enviar arquivos", @@ -1154,7 +1153,6 @@ "Email_subject": "Assunto", "email_style_label": "Estilo do Email", "email_style_description": "Evite seletores aninhados", - "email_plain_text_only": "Enviar emails apenas em texto puro", "Email_verified": "Email verificado", "email_plain_text_only": "Enviar emails apenas em texto puro", "Emoji": "Emoji", @@ -1437,6 +1435,7 @@ "Force_SSL_Description": "*Cuidado!* _Forçar SSL_ nunca deve ser usado com proxy reverso. Se você tem um proxy reverso, você deve fazer o redirecionamento LÁ. Esta opção existe para implantações como Heroku, que não permite a configuração de redirecionamento de proxy reverso.", "Force_visitor_to_accept_data_processing_consent": "Forçar o visitante a aceitar o consentimento de processamento de dados", "Force_visitor_to_accept_data_processing_consent_description": "Os visitantes não podem inicar novas conversas sem o consentimento.", + "Invalid_Export_File": "O arquivo enviado não é um arquivo de exportação %s válido.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "O acordo com o processamento de dados deve ser baseado em um entendimento transparente do motivo do processamento. Por isso, você deve preencher a configuração abaixo, que será exibida aos usuários, a fim de fornecer as razões para coletar e processar suas informações pessoais.", "Forgot_password": "Esqueceu sua senha", "Forgot_Password_Description": "Você pode usar os seguintes placeholders:
  • [Forgot_Password_Url] para o URL de recuperação de senha.
  • [nome], [fname], [lname] para o nome completo, primeiro nome ou sobrenome do usuário, respectivamente.
  • [email] para o email do usuário.
  • [Site_Name] e [Site_URL] para o Nome do Aplicativo e o URL, respectivamente.
", @@ -1582,6 +1581,12 @@ "Importer_setup_error": "Ocorreu um erro durante a configuração do importador.", "Importer_Slack_Users_CSV_Information": "O arquivo carregado deve ser o arquivo de exportação de usuários do Slack, que é um arquivo CSV. Veja aqui para obter mais informações:", "Importer_Source_File": "Seleção de arquivo de origem", + "importer_status_new": "Não foi iniciado", + "importer_status_importing_users": "Importando usuários", + "importer_status_importing_channels": "Importando canais", + "importer_status_importing_messages": "Importando mensagens", + "importer_status_finishing": "Quase pronto", + "importer_status_import_failed": "Erro", "Importer_Upload_FileSize_Message": "Suas configurações do servidor permitem o upload de arquivos de qualquer tamanho até __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Suas configurações do servidor permitem o upload de arquivos de qualquer tamanho.", "Importer_ExternalUrl_Description": "Você também pode usar uma URL para um arquivo acessível publicamente:", @@ -1664,7 +1669,6 @@ "Invalid_confirm_pass": "A confirmação de senha não é igual à senha", "Invalid_email": "O e-mail informado é inválido", "Invalid_username": "O nome de usuário inserido é inválido", - "Invalid_Export_File": "O arquivo enviado não é um arquivo de exportação %s válido.", "Invalid_Import_File_Type": "Tipo de Arquivo de Importação Inválido.", "Invalid_name": "O nome não pode ser vazio", "Invalid_notification_setting_s": "Configuração de notificação inválida: %s", @@ -2784,7 +2788,6 @@ "Statistics_reporting": "Enviar estatísticas para Rocket.Chat", "Statistics_reporting_Description": "Ao enviar suas estatísticas, você vai nos ajudar a identificar quantas instâncias de Rocket.Chat são implantadas, bem como o quão bom o sistema está se comportando, para que possamos melhorar ainda mais isso. Não se preocupe, pois nenhuma informação de usuário é enviado e toda a informação que recebemos é mantida em sigilo.", "Stats_Active_Users": "Usuários Ativos", - "Stats_App_Users": "Usuários de Rocket.Chat App", "Stats_Avg_Channel_Users": "Média de Usuários por Canal", "Stats_Avg_Private_Group_Users": "Média de Usuários por Grupo Privado", "Stats_Away_Users": "Usuários ausentes", @@ -3044,6 +3047,8 @@ "Uptime": "Tempo online", "URL": "URL", "URL_room_prefix": "Prefixo da URL da Sala", + "Use_Server_configuration": "Usar configuração do servidor", + "Use_Room_configuration": "Sobrescrever a configuração do servidor usando a configuração da sala", "Use_account_preference": "Use preferências da conta", "Use_Emojis": "Usar Emojis", "Use_Global_Settings": "Use configurações globais", @@ -3054,8 +3059,6 @@ "Use_this_username": "Usar este nome de usuário", "Use_uploaded_avatar": "Use o avatar de upload", "Use_url_for_avatar": "Use url para o avatar", - "Use_Server_configuration": "Usar configuração do servidor", - "Use_Room_configuration": "Sobrescrever a configuração do servidor usando a configuração da sala", "Use_User_Preferences_or_Global_Settings": "Use as Preferências do Usuário ou Configurações Globais", "User": "Usuário", "User Search": "Pesquisa de usuário", @@ -3309,4 +3312,4 @@ "Your_question": "A sua pergunta", "Your_server_link": "O link do seu servidor", "Your_workspace_is_ready": "O seu espaço de trabalho está pronto a usar 🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index d63e59a5f802..42c3e400642c 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -14,11 +14,13 @@ "%_of_conversations": "% de conversas", "Accept": "Aceitar", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Aceitar pedidos de livechat mesmo se não houverem agentes online", + "Accept_new_livechats_when_agent_is_idle": "Aceitar novas solicitações de chat ao vivo quando o agente estiver desocupado", "Accept_with_no_online_agents": "Aceitar sem agentes online", "access-mailer": "Aceder ao ecrã do Mailer", "access-mailer_description": "Permissão para enviar e-mails em massa para todos os utilizadores.", "access-permissions": "Ecrã de permissões de acesso", "access-permissions_description": "Modifique as permissões para vários cargos.", + "access-setting-permissions": "Modificar permissões baseadas em configurações", "Access_not_authorized": "Acesso não autorizado", "Access_Token_URL": "URL do Token de Acesso", "Accessing_permissions": "Acedendo às permissões", @@ -33,11 +35,13 @@ "Accounts_AllowedDomainsList": "Lista de domínios permitidos", "Accounts_AllowedDomainsList_Description": "Lista de domínios permitidos, separados por vírgula", "Accounts_AllowEmailChange": "Permitir alterar e-mail", + "Accounts_AllowEmailNotifications": "Permitir notificações por email", "Accounts_AllowPasswordChange": "Permitir Alteração de Senha", "Accounts_AllowRealNameChange": "Permitir mudança de nome", "Accounts_AllowUserAvatarChange": "Permitir que o utilizador troque o avatar", "Accounts_AllowUsernameChange": "Permitir alterar nome de utilizador", "Accounts_AllowUserProfileChange": "Permitir que o utilizador altere o perfil", + "Accounts_AllowUserStatusMessageChange": "Permitir mensagem de estado personalizada", "Accounts_AvatarBlockUnauthenticatedAccess": "Bloquear o acesso não autenticado aos avatares", "Accounts_AvatarCacheTime": "Tempo de cache do avatar", "Accounts_AvatarCacheTime_description": "Número de segundos que o protocolo http recebe para armazenar em cache as imagens do avatar.", @@ -91,6 +95,7 @@ "Accounts_OAuth_Custom_Access_Token_Param": "Nome do parâmetro para token de acesso", "Accounts_OAuth_Custom_Scope": "Âmbito", "Accounts_OAuth_Custom_Secret": "Segredo", + "Accounts_OAuth_Custom_Show_Button_On_Login_Page": "Mostrar botão na página de autenticaçãi", "Accounts_OAuth_Custom_Token_Path": "Caminho do Token", "Accounts_OAuth_Custom_Token_Sent_Via": "Token Enviado Por", "Accounts_OAuth_Custom_Username_Field": "Campo de Utilizador", @@ -117,6 +122,7 @@ "Accounts_OAuth_Gitlab_callback_url": "URL de chamada de retorno do Github", "Accounts_OAuth_Gitlab_id": "ID do GitLab", "Accounts_OAuth_Gitlab_identity_path": "Caminho de Identidade", + "Accounts_OAuth_Gitlab_merge_users": "Juntar utilizadores", "Accounts_OAuth_Gitlab_secret": "Segredo", "Accounts_OAuth_Google": "Login do Google", "Accounts_OAuth_Google_callback_url": "URL de retorno do Google", @@ -131,7 +137,10 @@ "Accounts_OAuth_Meteor_id": "Meteor Id", "Accounts_OAuth_Meteor_secret": "Meteor Privado", "Accounts_OAuth_Nextcloud": "OAuth Ativado", + "Accounts_OAuth_Nextcloud_callback_url": "URL de retorno de chamada do Nextcloud", + "Accounts_OAuth_Nextcloud_id": "Nextcloud Id", "Accounts_OAuth_Nextcloud_secret": "Segredo", + "Accounts_OAuth_Nextcloud_URL": "URL do servidor Nextcloud", "Accounts_OAuth_Proxy_host": "Host de Proxy", "Accounts_OAuth_Proxy_services": "Serviços de Proxy", "Accounts_OAuth_Tokenpass": "Login do Tokenpass", @@ -183,6 +192,9 @@ "Accounts_RegistrationForm_Secret_URL": "URL Secreta", "Accounts_RegistrationForm_SecretURL": "URL Secreta para o Formulário de Registo", "Accounts_RegistrationForm_SecretURL_Description": "Deve fornecer uma sequência aleatória que será adicionada à sua URL de registo. Exemplo: https://open.rocket.chat/register/[secret_hash]", + "Accounts_Registration_InviteUrlType": "Tipo de URL de convite", + "Accounts_Registration_InviteUrlType_Direct": "Direto", + "Accounts_Registration_InviteUrlType_Proxy": "Proxy", "Accounts_RequireNameForSignUp": "O nome é obrigatório para registo", "Accounts_RequirePasswordConfirmation": "Requer Confirmação de Senha", "Accounts_SearchFields": "Campos a considerar na busca", @@ -217,6 +229,7 @@ "Add_custom_oauth": "Adicionar oauth customizado", "Add_Domain": "Adicionar Domínio", "Add_files_from": "Adicionar arquivos de", + "add-livechat-department-agents": "Adicionar Agentes Livechat aos Departamentos", "Add_manager": "Adicionar gerente", "Add_Role": "Adicionar função", "Add_user": "Adicionar utilizador", @@ -237,6 +250,7 @@ "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "Após a autenticação OAuth2, os utilizadores serão redireccionados para esta URL", "Agent": "Agente", "Agent_Info": "Informações do Agente", + "Agents": "Agentes", "Agent_added": "Agente adicionado", "Agent_removed": "Agente removido", "Alerts": "Alertas", @@ -248,6 +262,7 @@ "All": "Todos", "All_added_tokens_will_be_required_by_the_user": "Todos os tokens adicionados serão exigidos pelo utilizador", "All_channels": "Todos os canais", + "All_closed_chats_have_been_removed": "Todos os chats fechados foram removidos", "All_logs": "Todos os logs", "All_messages": "Todas as mensagens", "All_users": "Todos os utilizadores", @@ -258,6 +273,7 @@ "Allow_Invalid_SelfSigned_Certs_Description": "Permitir certificados SSL auto-assinados inválidos para validação de link e previews.", "Allow_switching_departments": "Permitir ao visitante mudar de departamentos", "Allow_Marketing_Emails": "Permitir e-mail de publicidade", + "Allow_Online_Agents_Outside_Office_Hours": "Permitir agentes ligados fora do horário de expediente", "Almost_done": "Quase feito", "Alphabetical": "Alfabética", "Always_open_in_new_window": "Abrir sempre em nova janela", @@ -296,6 +312,7 @@ "API_Enable_CORS": "Ativar CORS", "API_Enable_Direct_Message_History_EndPoint": "Habilitar o histórico do histórico de mensagens directas", "API_Enable_Direct_Message_History_EndPoint_Description": "Isso permite o `/api/v1/im.history.others` que permite a visualização de mensagens directas enviadas por outros utilizadores, em que a origem não faz parte.", + "API_Enable_Rate_Limiter": "Ativar limitador de taxa", "API_Enable_Rate_Limiter_Dev": "Ativar limitador de taxa em desenvolvimento", "API_Enable_Rate_Limiter_Dev_Description": "Deve limitar a quantidade de chamadas para os endpoints no ambiente de desenvolvimento?", "API_Enable_Rate_Limiter_Limit_Calls_Default": "Número padrão de chamadas para o limitador de taxa", @@ -337,6 +354,7 @@ "App_status_disabled": "Desactivado", "App_status_error_disabled": "Desactivado: erro não detectado", "App_status_initialized": "Inicializado", + "App_status_invalid_license_disabled": "Desligado: Licença inválida", "App_status_invalid_settings_disabled": "Desactivado: configuração necessária", "App_status_manually_disabled": "Desactivado: manualmente", "App_status_manually_enabled": "Habilitado", @@ -344,6 +362,7 @@ "App_support_url": "Url de suporte", "App_Url_to_Install_From": "Instalar a partir do URL", "App_Url_to_Install_From_File": "Instalar a partir de arquivo", + "App_user_not_allowed_to_login": "Os utilizadores da aplicação não têm permissão para fazer se autenticar diretamente.", "Appearance": "Aparência", "Application_added": "Aplicação adicionada", "Application_Name": "Nome da Aplicação", @@ -355,6 +374,9 @@ "Apps_Framework_Development_Mode": "Activar modo de desenvolvimento", "Apps_Framework_Development_Mode_Description": "O modo de desenvolvimento permite a instalação de aplicações que não são do Marketplace Rocket.Chat.", "Apps_Framework_enabled": "Activar o Framework da App", + "Apps_Marketplace_Deactivate_App_Prompt": "Queres mesmo desativar esta aplicação?", + "Apps_Marketplace_Modify_App_Subscription": "Modificar a Subscrição", + "Apps_Marketplace_Uninstall_App_Prompt": "Queres mesmo desinstalar esta aplicação?", "Apps_Marketplace_Login_Required_Title": "Login do Marketplace Obrigatório", "Apps_Marketplace_Login_Required_Description": "A compra de aplicações do Marketplace Rocket.Chat requer o registo no sua área de trabalho e o login.", "Apps_Settings": "Configurações da aplicação", @@ -1410,6 +1432,7 @@ "Force_SSL_Description": "*Cuidado!* _Forçar SSL_ nunca deve ser usado com proxy reverso. Se tem um proxy reverso, deve fazer o redirecionamento LÁ. Esta opção existe para implantações como Heroku, que não permite a configuração de redirecionamento de proxy reverso.", "Force_visitor_to_accept_data_processing_consent": "Forçar o visitante a aceitar o consentimento de processamento de dados", "Force_visitor_to_accept_data_processing_consent_description": "Os visitantes não podem inicar novas conversas sem o consentimento.", + "Invalid_Export_File": "O arquivo enviado não é um arquivo de exportação %s válido.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "O acordo com o processamento de dados deve ser baseado num entendimento transparente do motivo do processamento. Por isso, deve preencher a configuração abaixo, que será exibida aos utilizadores, a fim de fornecer as razões para recolha e processamento das suas informações pessoais.", "Forgot_password": "Esqueceu a sua senha ?", "Forgot_Password_Description": "Pode usar os seguintes espaços reservados:
  • [Forgot_Password_Url] para o URL de recuperação de senha.
  • [name], [fname], [lname] para o nome completo, primeiro nome ou sobrenome do utilizador, respectivamente.
  • [email] para o email do utilizador.
  • [Site_Name] e [Site_URL] para o Nome da aplicação e o URL, respectivamente.
", @@ -1552,6 +1575,12 @@ "Importer_setup_error": "Ocorreu um erro durante a configuração do importador.", "Importer_Slack_Users_CSV_Information": "O arquivo carregado deve ser o arquivo de exportação de utilizadores do Slack, que é um arquivo CSV. Veja aqui para obter mais informações:", "Importer_Source_File": "Selecção do arquivo Original", + "importer_status_new": "Não foi iniciado", + "importer_status_importing_users": "Importando utilizadores", + "importer_status_importing_channels": "Importando canais", + "importer_status_importing_messages": "Importando mensagens", + "importer_status_finishing": "Quase feito", + "importer_status_import_failed": "Erro", "Importer_Upload_FileSize_Message": "Suas configurações do servidor permitem o upload de arquivos de qualquer tamanho até __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Suas configurações do servidor permitem o upload de arquivos de qualquer tamanho.", "Importer_ExternalUrl_Description": "Você também pode usar um URL para um arquivo acessível publicamente:", @@ -1632,7 +1661,6 @@ "Invalid_confirm_pass": "A confirmação da senha não é igual à senha", "Invalid_email": "O email introduzido é inválido", "Invalid_username": "O nome de utilizador inserido é inválido", - "Invalid_Export_File": "O arquivo enviado não é um arquivo de exportação %s válido.", "Invalid_Import_File_Type": "Tipo de Arquivo de Importação Inválido.", "Invalid_name": "O nome não pode ser vazio", "Invalid_notification_setting_s": "Configuração de notificação inválida: %s", @@ -1842,6 +1870,7 @@ "List_of_Direct_Messages": "Lista de Mensagens Diretas", "Livechat": "Livechat", "Livechat_agents": "Agentes do Livechat", + "Livechat_Agents": "Agentes", "Livechat_AllowedDomainsList": "Domínios permitidos em Livechat", "Livechat_Dashboard": "Painel Livechat", "Livechat_enabled": "Livechat habilitado", diff --git a/packages/rocketchat-i18n/i18n/ro.i18n.json b/packages/rocketchat-i18n/i18n/ro.i18n.json index 728e6764b6f2..47c64f2b4fa1 100644 --- a/packages/rocketchat-i18n/i18n/ro.i18n.json +++ b/packages/rocketchat-i18n/i18n/ro.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Permisiunea de a șterge un mesaj prin ignorarea tuturor restricțiilor", "Force_SSL": "Forțează SSL", "Force_SSL_Description": "* Atenție! * _Force SSL_ nu ar trebui să fie utilizat cu proxy invers. Dacă aveți un proxy invers, ar trebui să faceți redirecționării acolo. există această opțiune pentru implementări cum ar fi Heroku, care nu permite configurarea redirectare la proxy inversă.", + "Invalid_Export_File": "Fișierul încărcat nu este un fișier valid de export.", "Forgot_password": "Parolă uitată", "Forgot_Password_Description": "Puteți utiliza următorii substituenți:
  • [Forgot_Password_Url] pentru adresa URL de recuperare a parolei.
  • [name], [fname], [lname] pentru numele complet al utilizatorului, prenumele sau numele de familie.
  • [e-mail] pentru e-mailul utilizatorului.
  • [Site_Name] și [Site_URL] pentru numele aplicației și respectiv adresa URL.
", "Forgot_Password_Email": "Faceți clic pe aicipentru a vă reseta parola.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "A apărut o eroare la înființarea importatorului.", "Importer_Slack_Users_CSV_Information": "Fișierul încărcat trebuie să fie fișierul de export Slack's Users, care este un fișier CSV. Vedeți aici pentru mai multe informații:", "Importer_Source_File": "Selecția fișierului sursă", + "importer_status_import_failed": "Eroare", "Inclusive": "Inclusiv", "Incoming_Livechats": "Incarcatori live", "Incoming_WebHook": "Intrare WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Confirmarea parolei nu se potrivește cu parola introdusă", "Invalid_email": "Adresa de email folosită este invalidă", "Invalid_username": "Numele de utilizator introdus este nevalid", - "Invalid_Export_File": "Fișierul încărcat nu este un fișier valid de export.", "Invalid_Import_File_Type": "Tip fișier de date invalid.", "Invalid_name": "Câmpul nume de utilizator nu poate fi gol", "Invalid_notification_setting_s": "Setare notificare nevalidă: %s", diff --git a/packages/rocketchat-i18n/i18n/ru.i18n.json b/packages/rocketchat-i18n/i18n/ru.i18n.json index 92c22d4ae777..6e373f222c31 100644 --- a/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -14,6 +14,7 @@ "%_of_conversations": "% разговоров", "Accept": "Принять", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Принимать входящие запросы с livechat, даже если нет подключенных сотрудников", + "Accept_new_livechats_when_agent_is_idle": "Принимайте новые запросы livechat, когда агент простаивает", "Accept_with_no_online_agents": "Принимать с неподключенными сотрудниками", "access-mailer": "Доступ к странице мейлера", "access-mailer_description": "Разрешение рассылку email сообщений всем пользователям", @@ -136,7 +137,10 @@ "Accounts_OAuth_Meteor_id": "Идентификатор Meteor", "Accounts_OAuth_Meteor_secret": "Meteor Secret", "Accounts_OAuth_Nextcloud": "OAuth включен", + "Accounts_OAuth_Nextcloud_callback_url": "URL обратного вызова Nextcloud", + "Accounts_OAuth_Nextcloud_id": "Nextcloud ID", "Accounts_OAuth_Nextcloud_secret": "Client Secret", + "Accounts_OAuth_Nextcloud_URL": "URL сервера Nextcloud", "Accounts_OAuth_Proxy_host": "Прокси хост", "Accounts_OAuth_Proxy_services": "Прокси сервисы", "Accounts_OAuth_Tokenpass": "Tokenpass Login", @@ -188,6 +192,9 @@ "Accounts_RegistrationForm_Secret_URL": "Секретный URL-адрес", "Accounts_RegistrationForm_SecretURL": "Секретный URL-адрес регистрационной формы", "Accounts_RegistrationForm_SecretURL_Description": "Вы должны предоставить случайную строку, которая будет добавлена к вашему регистрационному URL-адресу. Например: https://open.rocket.chat/register/[secret_hash]", + "Accounts_Registration_InviteUrlType": "Тип пригласительного URL-адреса", + "Accounts_Registration_InviteUrlType_Direct": "Прямой ответ", + "Accounts_Registration_InviteUrlType_Proxy": "Прокси", "Accounts_RequireNameForSignUp": "Требуется имя для регистрации", "Accounts_RequirePasswordConfirmation": "Запрашивать подтверждение пароля", "Accounts_SearchFields": "Поля, которые следует учитывать при поиске", @@ -242,6 +249,7 @@ "Advocacy": "Адвокатура", "After_OAuth2_authentication_users_will_be_redirected_to_this_URL": "После аутентификации OAuth2, пользователи будут перенаправляться на этот URL-адрес", "Agent": "Представитель", + "Agent_Info": "Информация об агенте", "Agents": "Агенты", "Agent_added": "Представитель добавлен", "Agent_removed": "Представитель удален", @@ -254,6 +262,7 @@ "All": "Все", "All_added_tokens_will_be_required_by_the_user": "Все добавленные токены потребуются пользователем", "All_channels": "Все каналы", + "All_closed_chats_have_been_removed": "Все закрытые чаты были удалены", "All_logs": "Все записи", "All_messages": "Все сообщения", "All_users": "Все пользователи", @@ -353,6 +362,7 @@ "App_support_url": "URL поддержки", "App_Url_to_Install_From": "Установить с URL", "App_Url_to_Install_From_File": "Установить из файла", + "App_user_not_allowed_to_login": "Пользователям приложений не разрешается напрямую входить в систему.", "Appearance": "Внешний вид", "Application_added": "Приложение добавлено", "Application_Name": "Имя приложения", @@ -376,6 +386,7 @@ "Apps_Marketplace_pricingPlan_yearly": "__price__ / за год", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / в год за пользователя", "Apps_Settings": "Настройки приложения", + "Apps_User_Already_Exists": "Имя пользователя \"__username__\" уже используется. Переименуйте или удалите пользователя использующего это имя для установки приложения", "Apps_WhatIsIt": "Приложения: что это такое?", "Apps_WhatIsIt_paragraph1": "Новый значок в области администрирования! Что это значит и что за приложение?", "Apps_WhatIsIt_paragraph2": "Во-первых, приложения в этом контексте не относятся к мобильным приложениям. На самом деле было бы лучше подумать о них с точки зрения плагинов или расширенной интеграции.", @@ -389,10 +400,13 @@ "Are_you_sure": "Вы уверены?", "Are_you_sure_you_want_to_delete_your_account": "Вы уверены, что хотите удалить свою учетную запись?", "Are_you_sure_you_want_to_disable_Facebook_integration": "Вы действительно хотите отключить интеграцию с Facebook?", + "Are_you_sure_you_want_to_delete_this_record": "Вы уверены, что хотите удалить эту запись?", "Assets": "Активы", "assign-admin-role": "Назначить на роль Администратора", "assign-admin-role_description": "Разрешение назначить на роль Администратора другим пользователям", "Assign_admin": "Назначенный администратор", + "Assign_new_conversations_to_bot_agent": "Назначение новых разговоров бот-агенту", + "Assign_new_conversations_to_bot_agent_description": "Система маршрутизации будет пытаться найти агента-бота, прежде чем обращаться к новому разговору с агентом-человеком.", "assign-roles": "Назначить роли", "at": "в", "At_least_one_added_token_is_required_by_the_user": "Пользователь, по крайней мере, один добавленный токен", @@ -400,6 +414,7 @@ "Attachment_File_Uploaded": "Файл загружен", "Attribute_handling": "Обработка атрибутов", "Audio": "Аудио", + "Audios": "Аудиозаписи", "Audio_message": "Звуковое сообщение", "Audio_Notification_Value_Description": "Может быть любой из загруженных звуков или один из звуков по умолчанию: beep, chelle, ding, droplet, highbell, seasons", "Audio_Notifications_Default_Alert": "Звуковые уведомления", @@ -443,6 +458,11 @@ "Avatar_url_invalid_or_error": "Предоставленный URL-адрес недействителен или недоступен. Пожалуйста, повторите попытку с другим URL-адресом.", "Avg_chat_duration": "В среднем продолжительность беседы", "Avg_first_response_time": "В среднем первое время отклика", + "Avg_of_abandoned_chats": "Среднее количество заброшенных разговоров", + "Avg_of_available_service_time": "Среднее время доступного обслуживания", + "Avg_of_chat_duration_time": "Среднее время продолжительности беседы", + "Avg_of_service_time": "Среднее время обслуживания", + "Avg_of_waiting_time": "Среднее время ожидания", "Avg_response_time": "В среднем время отклика", "Avg_reaction_time": "Среднее время реакции", "away": "отошёл", @@ -454,6 +474,7 @@ "Back": "Назад", "Back_to_applications": "Вернуться к приложениям", "Back_to_chat": "Назад в чат", + "Back_to_imports": "Назад к импорту", "Back_to_integration_detail": "Назад к инеграции", "Back_to_integrations": "Назад", "Back_to_login": "На страницу авторизации", @@ -605,6 +626,7 @@ "Chatpal_Welcome": "Наслаждайтесь поиском!", "Chatpal_Window_Size": "Размер окна индекса", "Chatpal_Window_Size_Description": "Размер индексных окон в часах (при начальной загрузке)", + "Check_Progress": "Проверить ход выполнения", "Choose_a_room": "Выберите комнату", "Choose_messages": "Выбрать сообщения", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Выберите псевдоним, который появится перед логином в сообщениях.", @@ -622,6 +644,7 @@ "Click_here_to_view_and_copy_your_password": "Нажмите здесь, чтобы просмотреть и скопировать пароль.", "Click_the_messages_you_would_like_to_send_by_email": "Выберите сообщения, которые вы хотите отправить по email.", "Click_to_join": "Нажмите, чтобы присоединиться!", + "Click_to_load": "Нажмите, чтобы загрузить", "Client_ID": "Идентификатор клиента", "Client_Secret": "Client Secret", "Clients_will_refresh_in_a_few_seconds": "Клиенты обновятся через пару секунд", @@ -634,12 +657,20 @@ "Cloud_workspace_connected_without_account": "Ваше рабочее пространство теперь подключено к облаку Rocket.Chat. При желании вы можете войти в Rocket.Chat Cloud и связать свое рабочее пространство с учетной записью Cloud.", "close-others-livechat-room_description": "Разрешение закрывать другие каналы LiveChat", "Closed": "Закрыто", + "Closed_At": "Закрыто в", "Closed_by_visitor": "Закрыто посетителем", "Closing_chat": "Закрыть чат", "Cloud": "Облако", + "Cloud_Register_manually": "Зарегистрироваться вручную", + "Cloud_click_here": "После копирования текста перейдите на Cloud Console. [Щелкните здесь]()", + "Cloud_register_offline_finish_helper": "После завершения процесса регистрации в Cloud Console вам должен быть представлен некоторый текст. Пожалуйста, вставьте его здесь, чтобы закончить регистрацию.", + "Cloud_register_offline_helper": "Рабочие места могут быть зарегистрированы вручную, если доступ в сеть ограничен. Скопируйте текст ниже и перейдите в нашу Cloud Console, чтобы завершить процесс.", + "Cloud_register_success": "Ваше рабочее место успешно зарегистрировано!", + "Cloud_register_error": "Произошла ошибка при попытке обработать ваш запрос. Пожалуйста, попробуйте позже.", "Cloud_connect": "Rocket.Chat Cloud Connect", "Cloud_connect_support": "Если Вы все еще не получили регистрационное электронное письмо, пожалуйста, удостоверьтесь, что Ваша электронная почта обновлена выше. Если у Вас все еще есть проблемы, вы можете связаться с поддержкой по адресу", "Cloud_console": "Облачная Консоль", + "Cloud_Info": "Информация об облаке", "Cloud_what_is_it": "Что это?", "Cloud_what_is_it_description": "Rocket.Chat Cloud Connect позволяет вам подключить свое собственное рабочее пространство Rocket.Chat к нашему облаку. Это позволяет вам управлять своими лицензиями, выставлением счетов и поддержкой в Rocket.Chat Cloud.", "Cloud_what_is_it_services_like": "Сервисы вроде:", @@ -659,6 +690,7 @@ "Cloud_error_in_authenticating": "Ошибка при аутентификации", "Cloud_error_code": "Код:", "Cloud_status_page_description": "Если у конкретной облачной службы возникают проблемы, вы можете проверить ее на нашей странице состояния по адресу", + "Cloud_Service_Agree_PrivacyTerms": "Согласие с условиями конфиденциальности Cloud Service", "Cloud_troubleshooting": "Исправление проблем", "Collaborative": "Совместный", "Collapse_Embedded_Media_By_Default": "Сворачивать вложенные медиа по умолчанию", @@ -689,7 +721,9 @@ "Conversation": "Беседа", "Conversations": "Сеансы чата", "Conversation_closed": "Беседа закрыта: __comment__.", + "Conversation_finished": "Разговор Завершен", "Conversation_finished_message": "Сообщение при завершении беседы", + "Conversation_finished_text": "Текст Завершенного Разговора", "Conversations_per_day": "Сеансы чата за день", "conversation_with_s": "разговор с %s", "Convert_Ascii_Emojis": "Конвертировать ASCII в эмодзи", @@ -947,6 +981,8 @@ "create-c_description": "Разрешение на создание публичных каналов", "create-d": "Создавать каналы личных сообщений", "create-d_description": "Разрешение на создание чата личных сообщений", + "create-invite-links": "Создать ссылки для приглашения", + "create-invite-links_description": "Разрешение на создание пригласительных ссылок на каналы", "create-p": "Создавать закрытые каналы", "create-p_description": "Разрешение создавать закрытые чаты", "create-personal-access-tokens": "Создание токенов персонального доступа", @@ -964,6 +1000,7 @@ "Crowd_sync_interval_Description": "Интервал между синхронизациями. Пример: `каждые 24 часа` или `в первый день недели`, больше примеров в [Cron Text Parser] (http://bunkat.github.io/later/parsers.html#text)", "Current_Chats": "Текущие чаты", "Current_File": "Текущий файл", + "Current_Import_Operation": "Текущая операция импорта", "Current_Status": "Текущий статус", "Custom": "Пользовательские ", "Custom CSS": "Пользовательские стили (CSS)", @@ -1039,6 +1076,7 @@ "Decode_Key": "Код декодирования", "Default": "По умолчанию", "Delete": "Удалить", + "Delete_all_closed_chats": "Удалить все закрытые чаты", "delete-c": "Удалить публичные каналы", "delete-c_description": "Разрешение на удаление публичных каналов", "delete-d": "Удалять личные сообщения", @@ -1130,7 +1168,9 @@ "Domains": "Домены", "Domains_allowed_to_embed_the_livechat_widget": "Список доменов, разделенный запятой, куда можно встроить виджет Livechat. Оставьте пустым, чтобы разрешить любые домены.", "Downloading_file_from_external_URL": "Загрузка файла с внешнего URL", + "Download_Info": "Информация о загрузке", "Download_My_Data": "Загрузить мои данные", + "Download_Pending_Files": "Скачать оставшиеся файлы", "Download_Snippet": "Скачать", "Drop_to_upload_file": "Переместите сюда для загрузки файла", "Dry_run": "Пробный запуск", @@ -1140,16 +1180,20 @@ "Duplicate_archived_private_group_name": "Архивная приватная группа с именем \"%s\" уже существует", "Duplicate_channel_name": "Канал с именем \"%s\" уже существует", "Duplicated_Email_address_will_be_ignored": "Дублированный адрес электронной почты будет игнорироваться.", + "Duplicate_file_name_found": "Найден дубликат имени файла.", "Duplicate_private_group_name": "Приватная группа с именем \"%s\" уже существует", "Duration": "Длительность", "E2E Encryption": "Шифрование E2E", "E2E_Enabled": "E2E включен", "E2E_Enable_alert": "Эта функция в настоящее время находится в бета-версии! Сообщайте об ошибках в github.com/RocketChat/Rocket.Chat/issues и будьте в курсе:
- Зашифрованные сообщения зашифрованных комнат не будут найдены в результате операций поиска.
- мобильные приложения могут не поддерживать кодированные сообщения (они будут реализованы позже).
- Боты могут не видеть зашифрованные сообщения до тех пор, пока они не реализуют поддержку кодированных сообщений.
- Загрузка не будет зашифрована в этой версии.", "E2E_Enable_description": "Включить возможность создания зашифрованных групп и возможность изменять группы и прямые сообщения для шифрования", + "E2E_Encryption_Password_Change": "Изменить Пароль Шифрования ", "E2E_Encryption_Password_Explanation": "Теперь вы можете создавать зашифрованные частные группы и прямые сообщения. Вы также можете изменить существующие частные группы или DM на зашифрованные.

Это шифрование от конца до конца, поэтому ключ для кодирования / декодирования ваших сообщений не будет сохранен на сервере. По этой причине вам нужно хранить ваш пароль где-то в безопасности. Вам потребуется ввести его на других устройствах, на которых вы хотите использовать шифрование e2e.", "E2E_password_reveal_text": "Теперь вы можете создавать зашифрованные частные группы и прямые сообщения. Вы также можете изменить существующие частные группы или DM на зашифрованные.

Это шифрование от конца до конца, поэтому ключ для кодирования / декодирования ваших сообщений не будет сохранен на сервере. По этой причине вам нужно сохранить этот пароль где-то в безопасности. Вам потребуется ввести его на другие устройства, на которых вы хотите использовать шифрование e2e. Подробнее здесь

Ваш пароль: %s

Это автоматический сгенерированный пароль, Вы можете установить новый пароль для шифрования в любое время из любого браузера вы ввели существующий пароль.
Этот пароль хранится только в этом браузере, пока вы не сохраните пароль и не отпустите это сообщение.", "E2E_password_request_text": "Чтобы получить доступ к вашим зашифрованным частным группам и прямым сообщениям, введите пароль шифрования.
Вам необходимо ввести этот пароль для кодирования / декодирования ваших сообщений на каждом используемом вами клиенте, поскольку ключ не хранится на сервере.", + "E2E_Reset_Key_Explanation": "Эта опция удалит ваш текущий ключ E2E и выйдет из системы.
При повторном входе в систему Rocket.Chat сгенерирует новый ключ и восстановит доступ к любой зашифрованной комнате, в которой есть один или несколько пользователей в сети.
В связи с особенностями шифрования E2E, Rocket.Chat не сможет восстановить доступ к любой зашифрованной комнате, в которой нет пользователей в сети.", "Edit": "Редактировать", + "Edit_Invite": "Изменить Приглашение", "Edit_Status": "Изменить Статус", "edit-message": "Редактировать сообщение", "edit-message_description": "Разрешение на редактирование сообщений в чатах", @@ -1180,6 +1224,9 @@ "Email_already_exists": "Такой адрес электронной почты уже используется", "Email_body": "Тело письма", "Email_Change_Disabled": "Администратор вашего Rocket.Chat запретил изменение адреса электронной почты", + "Email_Changed_Description": "Вы можете использовать следующие подстановки:
  • [email] для электронной почты получателя.
  • [Site_Name] и [Site_URL] для названия приложения и его URL.
", + "Email_Changed_Email_Subject": "[Site_Name] - Адрес электронной почты изменен", + "Email_changed_section": "Адрес электронной почты изменен", "Email_Footer_Description": "Вы можете использовать следующие подстановки:
  • [Site_Name] и [Site_URL] для имени приложения и его URL соответственно.
", "Email_from": "От", "Email_Notifications_Change_Disabled": "Ваш администратор Rocket.Chat отключил уведомления по электронной почте", @@ -1195,6 +1242,7 @@ "email_style_label": "Стиль электронной почты", "email_style_description": "Избегать вложенных селекторов", "Email_verified": "Адрес электронной почты подтверждён", + "email_plain_text_only": "Отправлять только обычные текстовые сообщения", "Emoji": "Эмодзи ", "Emoji_provided_by_JoyPixels": "Emoji предоставлено JoyPixels", "EmojiCustomFilesystem": "Хранилище пользовательских эмодзи", @@ -1202,6 +1250,7 @@ "Enable": "Включить", "Enable_Auto_Away": "Установка статуса \"Нет на месте\"", "Enable_Desktop_Notifications": "Включить уведомления на компьютере", + "Enable_inquiry_fetch_by_stream": "Включить сбор данных по запросу с сервера с помощью потока", "Enable_Svg_Favicon": "Включить векторную иконку (SVG favicon)", "Enable_two-factor_authentication": "Включить двухфакторную авторизацию", "Enabled": "Включено", @@ -1234,6 +1283,7 @@ "error-archived-duplicate-name": "Существует архивный канал с именем '__room_name__'", "error-avatar-invalid-url": "Неверный URL аватара: __url__", "error-avatar-url-handling": "Ошибка установки аватара из URL (__url__) для __username__", + "error-cannot-delete-app-user": "Удаление пользователя приложения не разрешено, удалите соответствующее приложение, чтобы удалить его.", "error-cant-invite-for-direct-room": "Нельзя приглашать пользователей в личные сообщения", "error-channels-setdefault-is-same": "Значение по умолчанию для канала совпадает с тем, на что он был бы изменен.", "error-channels-setdefault-missing-default-param": "Требуется bodyParam 'default'", @@ -1479,6 +1529,7 @@ "Force_SSL_Description": "* Внимание! * _Force SSL_ никогда не должен использоваться с обратным прокси (например, nginx). Если у вас есть обратный прокси-сервер, вы должны сделать перенаправление ТАМ. _Force SSL_ существует для таких платформ, как Heroku, которая не позволяет перенаправить конфигурацию в обратном прокси.", "Force_visitor_to_accept_data_processing_consent": "Заставить посетителя принять согласие на обработку данных", "Force_visitor_to_accept_data_processing_consent_description": "Посетителям не разрешается начинать общаться без согласия.", + "Invalid_Export_File": "Загруженный файл не является верным экспортным файлом %s.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Соглашение с обработкой данных должно основываться на прозрачном понимании причины обработки. В связи с этим вы должны заполнить нижеприведенную настройку, которая будет отображаться пользователям, чтобы указать причины сбора и обработки вашей личной информации.", "Forgot_password": "Забыли пароль?", "Forgot_Password_Description": "Вы можете использовать следующие подстановки:
  • [Forgot_Password_Url] для URL восстановления пароля.
  • [name], [fname], [lname] для полного имени, имени или фамилии пользователя.
  • [email] для адреса электронной почты пользователя.
  • [Site_Name] и [Site_URL] для имени приложения и его URL.
", @@ -1621,6 +1672,12 @@ "Importer_setup_error": "При настройке импортера возникла ошибка.", "Importer_Slack_Users_CSV_Information": "Загруженный файл должен быть файлом экспорта файлов Slack, который является файлом CSV. Смотрите здесь для более подробной информации:", "Importer_Source_File": "Выбор исходного файла", + "importer_status_new": "Не начато", + "importer_status_importing_users": "Импорт пользователей", + "importer_status_importing_channels": "Импорт каналов", + "importer_status_importing_messages": "Импорт сообщений", + "importer_status_finishing": "Почти сделано", + "importer_status_import_failed": "Ошибка", "Importer_Upload_FileSize_Message": "Настройки вашего сервера позволяют загружать файлы любого размера до __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Настройки вашего сервера позволяют загружать файлы любого размера.", "Importer_ExternalUrl_Description": "Вы также можете использовать URL для общедоступного файла:", @@ -1702,10 +1759,10 @@ "Invalid_confirm_pass": "Пароли не совпадают", "Invalid_email": "Введен некорректный адрес электронной почты", "Invalid_username": "Введенное имя пользователя недействительно.", - "Invalid_Export_File": "Загруженный файл не является верным экспортным файлом %s.", "Invalid_Import_File_Type": "Недействительный тип импортируемого файла.", "Invalid_name": "Имя не может быть пустым", "Invalid_notification_setting_s": "Неверная настройка уведомлений: %s", + "Invalid_or_expired_invite_token": "Недействительный или истекший срок действия жетона приглашения", "Invalid_pass": "Пароль не может быть пустым", "Invalid_reason": "Причина присоединения не может быть пустой", "Invalid_room_name": "%s недопустимое имя комнаты", @@ -1718,6 +1775,7 @@ "Invitation_Email_Description": "Вы можете использовать следующие подстановки:
  • [email] для электронной почты получателя.
  • [Site_Name] и [Site_URL] для названия приложения и его URL.
", "Invitation_Subject": "Тема приглашения", "Invitation_Subject_Default": "Вы были приглашены на [Site_Name]", + "Invite_Link": "Пригласительная ссылка", "Invite_user_to_join_channel": "Пригласить пользователя в канал", "Invite_user_to_join_channel_all_from": "Пригласить всех пользователей из [#channel] присоединиться к этому каналу", "Invite_user_to_join_channel_all_to": "Пригласить всех пользователей этого канала присоединиться к [#channel]", @@ -1824,6 +1882,7 @@ "Last_seen": "Последний раз видели", "Last_token_part": "Последняя часть токена", "Last_Message": "Последнее сообщение", + "Last_Status": "Последний статус", "Last_Updated": "Последнее обновление", "Launched_successfully": "Успешно запущен", "Layout": "Внешний вид", @@ -1876,7 +1935,7 @@ "LDAP_Host_Description": "Хост LDAP, например `ldap.example.com` или `10.0.0.30`.", "LDAP_Idle_Timeout": "Таймаут бездействия (мсек)", "LDAP_Idle_Timeout_Description": "Сколько миллисекунд ждать после последней операции LDAP до закрытия соединения (каждая операция открывает новое соединение)", - "LDAP_Import_Users_Description": "Если включно, то процесс синхронизации будет импортировать всех пользователей LDAP *Внимание!* Укажите фильтр поиска, чтобы не импортировать лишних пользователей.", + "LDAP_Import_Users_Description": "Если включно, то процесс синхронизации будет импортировать всех пользователей LDAP
*Внимание!* Укажите фильтр поиска, чтобы не импортировать лишних пользователей.", "LDAP_Internal_Log_Level": "Уровень внутреннего логирования", "LDAP_Login_Fallback": "Резервная авторизация", "LDAP_Login_Fallback_Description": "Если подключение к сервису LDAP не удалось, то попробовать войти в локальную/по умолчанию систему локальных учетных записей. Может помочь, когда сервис LDAP по каким-то причинам не работает.", @@ -1975,6 +2034,9 @@ "Livechat_title": "Название Livechat", "Livechat_title_color": "Цвет фона заголовка Livechat", "Livechat_transcript_sent": "Переписка LiveChat отправлена", + "Livechat_transfer_to_agent": "__from__ перенаправил чат в __to__", + "Livechat_transfer_to_department": "__from__ перенаправил чат в департамент __to__", + "Livechat_transfer_return_to_the_queue": "__from__ вернул чат в очередь", "Livechat_Users": "Пользователи Livechat", "LiveStream & Broadcasting": "LiveStream & Broadcasting", "Livestream_close": "Закрыть Livestream", @@ -2035,11 +2097,19 @@ "manage-cloud_description": "Управление облаком", "manage-emoji": "Управление смайлами", "manage-emoji_description": "Разрешение на управление смайлами сервера", + "manage-outgoing-integrations": "Управлять Исходящими Интеграциями", + "manage-incoming-integrations": "Управлять Входящими Интеграциями", + "manage-outgoing-integrations_description": "Разрешение на управление исходящими интеграциями сервера", + "manage-incoming-integrations_description": "Разрешение на управление входящими интеграциями сервера", "manage-livechat-agents": "Управление агентами Livechat", "manage-livechat-departments": "Управление отделами Livechat", "manage-livechat-managers": "Управление менеджерами Livechat", "manage-oauth-apps": "Управлять приложениями OAuth", "manage-oauth-apps_description": "Разрешение на управление приложениями OAuth", + "manage-own-outgoing-integrations": "Управлять Собственными Исходящими Интеграциями", + "manage-own-incoming-integrations": "Управлять Входящими Интеграциями", + "manage-own-outgoing-integrations_description": "Разрешение пользовтелям создавать и редактировать свои исходящие интеграции и webhook'и", + "manage-own-incoming-integrations_description": "Разрешение пользовтелям создавать и редактировать свои входящие интеграции и webhook'и", "manage-selected-settings": "Изменить некоторые настройки", "manage-selected-settings_description": "Разрешение на изменение настроек, которые явно предоставлены для изменения", "manage-sounds": "Управление звуками", @@ -2077,6 +2147,7 @@ "Max_length_is": "Максимальная длина %s", "Max_number_incoming_livechats_displayed": "Максимальное количество элементов отображаемых в очереди", "Max_number_incoming_livechats_displayed_description": "(Необязательно) Максимальное количество элементов, отображаемых в очереди Livechat.", + "Max_number_of_uses": "Максимальное количество применений", "Maximum": "Максимум", "Media": "СМИ", "Medium": "Обычный", @@ -2115,6 +2186,7 @@ "Message_AudioRecorderEnabled_Description": "Требуется, чтобы файлы «audio/mp3» были разрешенным медиа типом в настройках «Загрузка файлов».", "Message_BadWordsFilterList": "Добавить плохие слова в черный список", "Message_BadWordsFilterListDescription": "Добавить список плохих слов, разделенный запятыми, для фильтрации", + "MessageBox_view_mode": "MessageBox опции отображения", "message_counter": "__counter__ сообщение", "message_counter_plural": "__counter__ сообщения", "Message_DateFormat": "Формат даты", @@ -2134,6 +2206,15 @@ "Message_HideType_ru": "Не показывать сообщение \"Пользователь удалён\"", "Message_HideType_uj": "Не показывать сообщение \"Пользователь присоединился к чату\"", "Message_HideType_ul": "Не показывать сообщение \"Пользователь покинул чат\"", + "Message_HideType_r": "Скрыть сообщения \"Room имя изменено\"", + "Message_HideType_ut": "Скрыть сообщения \"Пользователь присоединился к чату\"", + "Message_HideType_wm": "Скрыть сообщения \"Добро пожаловать\"", + "Message_HideType_rm": "Скрыть сообщения \"Сообщение удалено\"", + "Message_HideType_subscription_role_added": "Скрыть сообщения \"Была установлена роль\"", + "Message_HideType_subscription_role_removed": "Скрыть сообщения \"Роль больше не определена\"", + "Message_HideType_room_archived": "Скрыть сообщения \"Room архивирована\"", + "Message_HideType_room_unarchived": "Скрыть сообщения \"Room восстановлена из архива\"", + "Hide_System_Messages": "Скрыть Системные Сообщения", "Message_Id": "Идентификатор сообщения", "Message_Ignored": "Это сообщение было проигнорировано", "Message_info": "Информация о сообщении", @@ -2188,6 +2269,7 @@ "Min_length_is": "Минимальная длина составляет %s", "Minimum": "Минимум", "Minimum_balance": "Минимальный баланс", + "minute": "минута", "minutes": "минуты", "Mobile": "Мобильные устройства", "Mobile_Notifications_Default_Alert": "Уведомления на мобильных устройствах", @@ -2227,6 +2309,7 @@ "Name_Placeholder": "Пожалуйста, введите ваше имя...", "Navigation_History": "История навигации", "New_Application": "Новое приложение", + "New_chat_transfer": "Новый чат-трансфер: __transfer__", "New_Custom_Field": "Новое пользовательское поле", "New_Department": "Новый отдел", "New_discussion": "Новое обсуждение", @@ -2250,12 +2333,14 @@ "New_visitor_navigation": "Новая навигация: __history__", "Newer_than": "Новее, чем", "Newer_than_may_not_exceed_Older_than": "«Новее, чем» не может превышать «Старше, чем»", + "No_Limit": "Без Ограничений", "No_available_agents_to_transfer": "Нет доступных сотрудников для передачи", "No_channel_with_name_%s_was_found": "Канал с названием \"%s\" не найден!", "No_channels_yet": "Вы пока не участвуете ни в одном канале.", "No_direct_messages_yet": "Нет личных переписок.", "No_emojis_found": "Не найдено Emoji", "No_Encryption": "Без шифрования", + "No_files_left_to_download": "Не осталось файлов для скачивания", "No_group_with_name_%s_was_found": "Закрытый канал с названием \"%s\" не найден!", "No_groups_yet": "Вы не состоите ни в одной приватной группе.", "No_integration_found": "Не найдена интеграция, соответствующая идентификатору", @@ -2287,6 +2372,8 @@ "Not_Imported_Messages_Title": "Следующие сообщения не были успешно импортированы", "Notification_Desktop_Default_For": "Отображать уведомления для", "Notification_Duration": "Длительность показа уведомления", + "Notification_RequireInteraction": "Требовать взаимодействия для отклонения уведомления на рабочем столе", + "Notification_RequireInteraction_Description": "Работает только с версиями браузера Chrome > 50. Использует параметр requireInteraction для отображения уведомления рабочего стола на неопределенное время до тех пор, пока пользователь не будет взаимодействовать с ним.", "Notification_Mobile_Default_For": "Включить push уведомления для", "Notifications": "Уведомления", "Notifications_Always_Notify_Mobile": "Всегда отправлять уведомление на мобильное устройство", @@ -2334,6 +2421,7 @@ "Only_authorized_users_can_write_new_messages": "Только авторизованные пользователи могут писать новые сообщения", "Only_from_users": "Удалять сообщения только от этих пользователей (оставьте пустым, чтобы удалить все сообщения)", "Only_On_Desktop": "Режим рабочего стола (отправлять по Enter только с компьютера)", + "Only_works_with_chrome_version_greater_50": "Работает только с версиями браузера Chrome > 50", "Only_you_can_see_this_message": "Только вы можете видеть это сообщение", "Oops!": "Упс", "Oops_page_not_found": "К сожалению, страница не найдена", @@ -2377,9 +2465,13 @@ "Parent_channel_doesnt_exist": "Channel не существует.", "Password": "Пароль", "Password_Change_Disabled": "Администратор отключил возможность изменения паролей", + "Password_Changed_Description": "Вы можете использовать следующие подстановки:
  • [password] для временного пароля.
  • [name], [fname], [lname] для полного имения пользователя, фамилии или второго имени.
  • [email] для пользовательского email
  • [Site_Name] и [Site_URL] для имения приложения и его URL.
", + "Password_Changed_Email_Subject": "[Site_Name] - Пароль Изменен", + "Password_changed_section": "Пароль Изменен", "Password_changed_successfully": "Пароль успешно изменен", "Password_Policy": "Политика паролей", "Past_Chats": "Прошлые чаты", + "Paste_here": "Вставить сюда...", "Payload": "Тело запроса", "Peer_Password": "Пароль пользователя", "People": "Люди", @@ -2476,6 +2568,7 @@ "Public_Channel": "Открытый канал", "Public_Community": "Открытое сообщество", "Public_Relations": "Связи с общественностью", + "Public_URL": "Публичный URL", "Purchased": "Покупка", "Push": "Push уведомления", "Push_Setting_Requires_Restart_Alert": "После изменения этого параметра потребуется перезапустить Rocket.Chat.", @@ -2486,6 +2579,8 @@ "Push_apn_key": "Ключ APN", "Push_apn_passphrase": "APN Passphrase", "Push_debug": "Отладка", + "Push_send_interval": "Интервал для проверки очереди на новые push-уведомления", + "Push_send_batch_size": "Размер партии для обработки каждого тика", "Push_enable": "Включить", "Push_enable_gateway": "Включить шлюз", "Push_gateway": "Шлюз", @@ -2529,6 +2624,7 @@ "Refresh_oauth_services": "Обновить сервисы OAuth", "Refresh_your_page_after_install_to_enable_screen_sharing": "Чтобы включить демонстрацию экрана, обновите страницу после установки", "Regenerate_codes": "Восстановить коды", + "Regexp_validation": "Проверка используя RegExp", "Register": "Зарегистрировать новую учетную запись", "Register_Server": "Регистрация сервера", "Register_Server_Info": "Используйте предварительно сконфигурированные шлюзы и прокси, предоставленные Rocket.Chat Technologies Corp.", @@ -2542,6 +2638,8 @@ "Register_Server_Standalone_Service_Providers": "Создание учетных записей с поставщиками услуг", "Register_Server_Standalone_Update_Settings": "Обновление предварительно настроенных настроек", "Register_Server_Standalone_Own_Certificates": "Перекомпилируйте мобильные приложения своими собственными сертификатами", + "Register_Server_Registered_I_Agree": "Я согласен с", + "Register_Server_Terms_Alert": "Для завершения регистрации, пожалуйста, согласитесь с условиями.", "Registration": "Регистрация", "Registration_Succeeded": "Успешная регистрация", "Registration_via_Admin": "Регистрация через администратора", @@ -2580,6 +2678,7 @@ "Report_this_message_question_mark": "Сообщить об этом сообщении?", "Reporting": "Сбор статистики", "Request_comment_when_closing_conversation": "Запросить комментарий при закрытии разговора", + "Request_tag_before_closing_chat": "Запросить tag'и до закрытия разговора", "Require_all_tokens": "Требовать все токены", "Require_any_token": "Требовать любой токен", "Require_password_change": "Требуется смена пароля", @@ -2688,7 +2787,7 @@ "SAML_Custom_Provider": "Пользовательский поставщик", "SAML_Custom_EMail_Field": "Имя поля электронной почты", "SAML_Custom_user_data_fieldmap": "Карта пользовательских данных", - "SAML_Custom_user_data_fieldmap_description": "Настройте, как поля учетной записи пользователя (например, электронная почта) заполняются из записи в SAML (если обнаружено).
В качестве примера `{\"cn\":\"name\", \"mail\":\"email\"}` выберет удобочитаемое имя человека из атрибута cn а его email из атрибута mail.
Доступные для Rocket.Chat поля: `name`,`email` и `username`, все осталое будет сохранено в `customFields`.", + "SAML_Custom_user_data_fieldmap_description": "Настройте, как поля учетной записи пользователя (например, электронная почта) заполняются из записи в SAML (после обнаружения).
В качестве примера, `{\"cn\":\"name\", \"mail\":\"email\"}` выберет имя человека из атрибута cn, а почту из атрибута mail.
Доступные поля в Rocket.Chat: `name`, `mail` и `username`, все остальное будет сохранено как `customFields`.
Вы также можете использовать regex, чтобы получить значение поля, как это:{\"NameID\": { \"field\": \"username\", \"regex\": \"(.*)@.+$\"}, \"электронная почта\": \"электронная почта\"", "SAML_Custom_Username_Field": "Поле \"Имя пользователя\"", "SAML_Custom_Username_Normalize": "Нормализовать имя пользователя", "SAML_Custom_Username_Normalize_None": "Нет нормализации", @@ -2770,6 +2869,8 @@ "Sending": "Отправка...", "Sent_an_attachment": "Отправить вложение", "Served_By": "Обслуживается", + "Server_File_Path": "Путь к файлам сервера", + "Server_Folder_Path": "Путь к папкам сервера", "Server_Info": "Информация о сервере", "Server_Type": "Тип сервера", "Service": "Обработчик", @@ -2779,6 +2880,7 @@ "set-moderator_description": "Разрешение на назначение других пользователей модераторами канала", "set-owner": "Назначить владельца", "set-owner_description": "Разрешение на назначение других пользователей владельцами канала", + "Set_random_password_and_send_by_email": "Установить случайный пароль и отправьте его по электронной почте", "set-react-when-readonly": "Реакция на сообщения в режиме ReadOnly", "set-react-when-readonly_description": "Разрешение на изменение возможности реакций на сообщения на канале только для чтения", "set-readonly": "Установить только для чтения", @@ -2792,9 +2894,11 @@ "Setup_Wizard_Info": "Мы поможем Вам настроить первого администратора, настроить организацию и зарегистрировать ваш сервер, чтобы получать бесплатные push-уведомления и многое другое.", "Share_Location_Title": "Поделиться местоположением?", "Shared_Location": "Предоставленное местоположение", + "Shared_Secret": "\"Общий секрет\"", "Should_be_a_URL_of_an_image": "Должен быть URL-адрес изображения.", "Should_exists_a_user_with_this_username": "Пользователь уже должен существовать.", "Show_Setup_Wizard": "Показывать мастер установки", + "UI_Show_top_navbar_embedded_layout": "Показать верхнюю панель навигации во встроенной раскладке", "Show_agent_email": "Показать электронный адрес агента", "Show_agent_info": "Показать информацию об агенте", "Show_all": "Показать всех", @@ -2894,6 +2998,7 @@ "Statistics_reporting": "Отправлять статистику в Rocket.Chat", "Statistics_reporting_Description": "Отправляя свою статистику, вы поможете нам определить, сколько серверов Rocket.Chat развернуто, а также насколько хорошо ведет себя система, чтобы мы могли работать над ее улучшением. Не беспокойтесь, поскольку никакой информации о пользователях не передается, а вся информация, что мы получаем, конфиденциальна.", "Stats_Active_Users": "Активные пользователи", + "Stats_App_Users": "Пользователи приложений Rocket.Chat", "Stats_Avg_Channel_Users": "Среднее число пользователей на каналах", "Stats_Avg_Private_Group_Users": "Среднее число пользователей в приватных группах", "Stats_Away_Users": "Отошедшие пользователи", @@ -2967,8 +3072,10 @@ "Technology_Provider": "Провайдер технологий", "Technology_Services": "Технологические услуги", "Telecom": "Телеком", + "Terms": "Условия", "Test_Connection": "Проверка соединения", "Test_Desktop_Notifications": "Тест десктопных уведомлений", + "Texts": "Тексты", "Thank_you_exclamation_mark": "Спасибо!", "Thank_you_for_your_feedback": "Спасибо за ваш отзыв", "The_application_name_is_required": "Требуется название приложения", @@ -3087,6 +3194,7 @@ "Tokens_Required_Input_Placeholder": "Имена объектов токенов", "Topic": "Тема", "Total": "Общее", + "Total_abandoned_chats": "Всего заброшенных чатов", "Total_conversations": "Всего разговоров", "Total_Discussions": "Всего обсуждений", "Total_messages": "Всего сообщений", @@ -3131,14 +3239,18 @@ "UI_Unread_Counter_Style": "Стиль счетчика непрочитанных сообщений", "UI_Use_Name_Avatar": "Использовать инициалы полного имени для создания аватара", "UI_Use_Real_Name": "Использовать настоящее имя", + "unable-to-get-file": "Невозможно получить файл", "Unarchive": "Разархивировать", "unarchive-room": "Разархивировать чат", "unarchive-room_description": "Разрешение на разархивирование чатов", "Unblock_User": "Разблокировать пользователя", + "Undefined": "Не определено", "Unfavorite": "Удалить из избранного", "Unfollow_message": "Отписаться от сообщения", "Unignore": "Перестать игнорировать", "Uninstall": "Удаление", + "Unknown_Import_State": "Неизвестное Состояние Импорта", + "Unlimited": "Не ограничено", "Unmute_someone_in_room": "Сделать незаглушенным кого-нибудь в комнате", "Unmute_user": "Сделать незаглушенным пользователя", "Unnamed": "Без названия", @@ -3158,6 +3270,7 @@ "Update_to_version": "Обновить до __version__", "Update_your_RocketChat": "Обновите ваш Rocket.Chat", "Updated_at": "Обновлено в", + "Upload": "Загрузить", "Upload_app": "Загрузить приложение", "Upload_file_description": "Описание файла", "Upload_file_name": "Имя файла", @@ -3169,6 +3282,8 @@ "Uptime": "Время работы", "URL": "URL", "URL_room_prefix": "Префикс URL комнаты", + "Use_Server_configuration": "Использовать конфигурацию сервера", + "Use_Room_configuration": "Переопределяет конфигурацию сервера в пользу конфигурации комнаты", "Use_account_preference": "Использовать настройки профиля", "Use_Emojis": "Использовать эмодзи ", "Use_Global_Settings": "Использовать глобальные настройки", @@ -3272,6 +3387,9 @@ "Users_added": "Пользователи были добавлены", "Users_in_role": "Пользователи с ролью", "Users must use Two Factor Authentication": "Пользователи должны использовать двухфакторную аутентификацию", + "Leave_the_description_field_blank_if_you_dont_want_to_show_the_role": "Оставьте поле описания пустым, если не хотите показывать роль", + "Uses": "Использует", + "Uses_left": "Использований осталось", "UTF8_Names_Slugify": "UTF8 Names Slugify", "UTF8_Names_Validation": "Проверка имён UTF8", "UTF8_Names_Validation_Description": "Регулярное выражение, которое будет использоваться для проверки логина или канала", @@ -3285,6 +3403,7 @@ "Verify": "Подтверждение", "Verify_your_email": "Подтвердите Ваш электронный адрес", "Version": "Версия", + "Videos": "Видеозаписи", "Video Conference": "Видеоконференция", "Video_Chat_Window": "Видеочат", "Video_Conference": "Видеоконференция", @@ -3353,6 +3472,7 @@ "WebDAV_Accounts": "Учетная запись WebDAV", "Webdav_add_new_account": "Добавить новую учетную запись WebDAV", "webdav-account-saved": "Учетная запись WebDAV сохранена", + "webdav-account-updated": "Учетная запись WebDAV обновлена", "Webdav_Integration_Enabled": "Интеграция Webdav включена", "Webdav_Server_URL": "URL сервера WebDAV", "Webdav_Username": "Имя пользователя WebDAV", @@ -3419,15 +3539,23 @@ "You_will_not_be_able_to_recover": "Вы не сможете восстановить это сообщение!", "You_will_not_be_able_to_recover_file": "Восстановить этот файл будет невозможно!", "You_wont_receive_email_notifications_because_you_have_not_verified_your_email": "Вы не можете получать уведомления по электронной почте, потому что не подтвердили ваш адрес электронной почты.", + "Your_email_address_has_changed": "Ваш адрес электронной почты был изменен.", "Your_email_has_been_queued_for_sending": "Ваше электронное сообщение поставлено в очередь на отправку", "Your_entry_has_been_deleted": "Ваша запись была удалена.", "Your_file_has_been_deleted": "Ваш файл был удалён.", + "Your_invite_link_will_expire_after__usesLeft__uses": "Ваше приглашение истечет после __usesLeft__ использований.", + "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "Ваше приглашение истечет __date__ или после __usesLeft__ использований.", + "Your_invite_link_will_expire_on__date__": "Ваше приглашение истечет __date__.", + "Your_invite_link_will_never_expire": "Ваше приглашение никогда не истечет.", "Your_mail_was_sent_to_s": "Ваше сообщение было отправлено на %s", "your_message": "ваше сообщение", "your_message_optional": "ваше сообщение (опционально)", + "Your_new_email_is_email": "Ваш новый электронный адрес - [email].", "Your_password_is_wrong": "Ваш пароль неверен!", + "Your_password_was_changed_by_an_admin": "Ваш пароль был изменен администратором.", "Your_push_was_sent_to_s_devices": "Оповещение было отправлено на %s устройств.", "Your_question": "Ваш вопрос", "Your_server_link": "Ссылка на ваш сервер", + "Your_temporary_password_is_password": "Ваш временный пароль [password].", "Your_workspace_is_ready": "Ваше рабочее пространство готово к работе 🎉" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json index 7bff7d032a69..4948c957e347 100644 --- a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json +++ b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "Povolenie na odstránenie správy obchádzajúce všetky obmedzenia", "Force_SSL": "Vynúte SSL", "Force_SSL_Description": "* Pozor! * _Force SSL_ by sa nikdy nemali používať s reverznou proxy. Ak máte reverznú proxy, mali by ste vykonať presmerovanie THERE. Táto možnosť existuje pre nasadenia ako Heroku, ktoré neumožňujú konfiguráciu presmerovania na opačnom serveri proxy.", + "Invalid_Export_File": "Nahraný súbor nie je platným exportným súborom%s.", "Forgot_password": "Zabudol si heslo", "Forgot_Password_Description": "Môžete použiť nasledujúce zástupné symboly:
  • [Forgot_Password_Url] pre adresu URL na obnovenie hesla.
  • [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.
", "Forgot_Password_Email": "Ak chcete obnoviť svoje heslo, kliknite sem.", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "Počas nastavenia dovozcu sa vyskytla chyba.", "Importer_Slack_Users_CSV_Information": "Nahraný súbor musí byť exportovaný súbor používateľov Slack, čo je súbor CSV. Viac informácií nájdete tu:", "Importer_Source_File": "Výber zdrojového súboru", + "importer_status_import_failed": "Chyba", "Inclusive": "vrátane", "Incoming_Livechats": "Prichádzajúce Livechat", "Incoming_WebHook": "Prichádzajúci WebHook", @@ -1408,7 +1410,6 @@ "Invalid_confirm_pass": "Potvrdenie hesla sa nezhoduje s heslom", "Invalid_email": "Zadaný e-mail je neplatný", "Invalid_username": "Zadané používateľské meno je neplatné", - "Invalid_Export_File": "Nahraný súbor nie je platným exportným súborom%s.", "Invalid_Import_File_Type": "Neplatný typ súboru importu.", "Invalid_name": "Názov nesmie byť prázdny", "Invalid_notification_setting_s": "Neplatné nastavenie upozornení:%s", diff --git a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json index 7d25c033440c..f0049beaf45e 100644 --- a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json +++ b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "Dovoljenje za brisanje sporočil, mimo vseh omejitev", "Force_SSL": "Vsili SSL", "Force_SSL_Description": "* Pozor! * _Force SSL_ nikoli ne smete uporabljati z obratnim strežnikom proxy. Če imate obratni proxy, morate tam storiti preusmeritev. Ta možnost obstaja za namestitve, kot je Heroku, ki ne dovoljuje konfiguracije preusmeritve na obratnem proxyju.", + "Invalid_Export_File": "Naložena datoteka ni veljavna izvozna datoteka %s.", "Forgot_password": "Pozabljeno geslo", "Forgot_Password_Description": "Uporabite lahko naslednje označbe mesta:
  • [Forgot_Password_Url] za URL za obnovitev gesla.
  • [name], [fname], [lname] za polno ime, priimek ali priimek uporabnika.
  • [email] za uporabnikov e-poštni naslov.
  • [Site_Name] in [Site_URL] za ime aplikacije in URL.
", "Forgot_Password_Email": "Za ponastavitev gesla kliknite tukaj .", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "Med nastavitvijo uvoznika je prišlo do napake.", "Importer_Slack_Users_CSV_Information": "Naložena datoteka mora biti datoteka za izvoz uporabnika aplikacije Slack, ki je datoteka CSV. Za več informacij glejte:", "Importer_Source_File": "Izbira izvorne datoteke", + "importer_status_import_failed": "Napaka", "Inclusive": "Inclusive", "Incoming_Livechats": "Dohodni klepeti v živo", "Incoming_WebHook": "Dohodne možnosti webhook", @@ -1407,7 +1409,6 @@ "Invalid_confirm_pass": "Potrditev gesla se ne ujema z geslom", "Invalid_email": "Vneseni e-poštni naslov je neveljaven", "Invalid_username": "Uporabniško ime je neveljavno", - "Invalid_Export_File": "Naložena datoteka ni veljavna izvozna datoteka %s.", "Invalid_Import_File_Type": "Neveljavna vrsta uvožene datoteke.", "Invalid_name": "Ime ne sme biti prazno", "Invalid_notification_setting_s": "Neveljavna nastavitev obvestil: %s", diff --git a/packages/rocketchat-i18n/i18n/sq.i18n.json b/packages/rocketchat-i18n/i18n/sq.i18n.json index 62e2aa4c6180..6738c098de66 100644 --- a/packages/rocketchat-i18n/i18n/sq.i18n.json +++ b/packages/rocketchat-i18n/i18n/sq.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Leja për të fshirë një mesazh duke anashkaluar të gjitha kufizimet", "Force_SSL": "Force SSL", "Force_SSL_Description": "* Kujdes! * _Force SSL_ nuk duhet të përdoret me prokurë të kundërt. Nëse ju keni një prokurë të kundërt, ju duhet të bëni të përcjellim atje. Ky opsion ekziston për vendosjen e trupave si Heroku, që nuk lejon konfigurimin përcjellëse në prokurë të kundërt.", + "Invalid_Export_File": "Skedari i ngarkuar së fundi nuk është një% të vlefshme s fotografi eksportit.", "Forgot_password": "Keni harruar fjalëkalimin tuaj", "Forgot_Password_Description": "Mund të përdorësh vendin e mëposhtëm:
  • [Forgot_Password_Url] për URL-në e rimëkëmbjes së fjalëkalimeve.
  • [emër], [fname], [lname] për emrin e plotë, emrin ose mbiemrin e përdoruesit.
  • [email] për emailin e përdoruesit.
  • [Site_Name] dhe [Site_URL] për emrin e aplikacionit dhe URL përkatësisht.
", "Forgot_Password_Email": "Kliko këtupër të rivendosur fjalëkalimin tuaj.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Ndodhi një gabim gjatë ngritjen e miqve.", "Importer_Slack_Users_CSV_Information": "Skedari i ngarkuar duhet të jetë skedar i eksportit i përdoruesve të Slack, i cili është një skedar CSV. Shih këtu për më shumë informacion:", "Importer_Source_File": "Përzgjedhja e skedarit burimor", + "importer_status_import_failed": "gabim", "Inclusive": "gjithëpërfshirës", "Incoming_Livechats": "Livechats hyrëse", "Incoming_WebHook": "WebHook në hyrje", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Konfirmimi Fjalëkalimi nuk përputhet me fjalëkalimin", "Invalid_email": "Email-i vendosur është i pavlefshëm", "Invalid_username": "Emri i përdoruesit i futur është i pavlefshëm", - "Invalid_Export_File": "Skedari i ngarkuar së fundi nuk është një% të vlefshme s fotografi eksportit.", "Invalid_Import_File_Type": "Invalid lloj skedari Import.", "Invalid_name": "Emri nuk duhet të jetë bosh", "Invalid_notification_setting_s": "vendosjen e pavlefshme njoftimit: %s", diff --git a/packages/rocketchat-i18n/i18n/sr.i18n.json b/packages/rocketchat-i18n/i18n/sr.i18n.json index e9f802c353ab..a6b128261f09 100644 --- a/packages/rocketchat-i18n/i18n/sr.i18n.json +++ b/packages/rocketchat-i18n/i18n/sr.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "Дозвола за брисање поруке заобилазе сва ограничења", "Force_SSL": "сила ССЛ", "Force_SSL_Description": "* Опрез! * _Форце ССЛ_ никада не треба да се користи са обрнутим проки. Ако имате обрнути проки, требало би да уради преусмеравање ПОСТОЈИ. Ова опција постоји за распоређивања као Хероку, који не дозвољава конфигурацију преусмеравање на обрнутим проки.", + "Invalid_Export_File": "Фајл уплоадед није исправан %s извоз датотека.", "Forgot_password": "Заборавили сте лозинку", "Forgot_Password_Description": "Можете користити следеће држаче:
  • [Форгот_Пассворд_Урл] за УРЛ за опоравак лозинке.
  • [име], [фнаме], [лнаме] за пуно име, презиме или презиме корисника.
  • [емаил] за е-пошту корисника.
  • [Сите_Наме] и [Сите_УРЛ] за име апликације и УРЛ адресу респективно.
", "Forgot_Password_Email": "Кликните на овдеда бисте ресетовали своју лозинку.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "Дошло је до грешке приликом подешавања увозника.", "Importer_Slack_Users_CSV_Information": "Датотека која је отпремљена мора да буде датотека извоза корисника Слацк-а, која је ЦСВ датотека. Погледајте овде за више информација:", "Importer_Source_File": "Избор извора датотека", + "importer_status_import_failed": "грешка", "Inclusive": "Инцлусиве", "Incoming_Livechats": "Долазни Ливецхатс", "Incoming_WebHook": "Долазни ВебХоок", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "Лозинка из поља за потврду се не поклапа са првом лозинком", "Invalid_email": "Унета е-адреса не неисправна", "Invalid_username": "Уписано корисничко име је неважеће", - "Invalid_Export_File": "Фајл уплоадед није исправан %s извоз датотека.", "Invalid_Import_File_Type": "Погрешна врста Увоз датотеке.", "Invalid_name": "Корисничко име не сме бити празно", "Invalid_notification_setting_s": "Инвалид подешавање обавештење %s", diff --git a/packages/rocketchat-i18n/i18n/sv.i18n.json b/packages/rocketchat-i18n/i18n/sv.i18n.json index 955e085baedd..0e07c8387e04 100644 --- a/packages/rocketchat-i18n/i18n/sv.i18n.json +++ b/packages/rocketchat-i18n/i18n/sv.i18n.json @@ -1277,6 +1277,7 @@ "force-delete-message_description": "Tillstånd att radera ett meddelande ombi alla begränsningar", "Force_SSL": "Tvinga SSL", "Force_SSL_Description": "* OBS! * _Force SSL_ ska aldrig användas med reverse proxy. Om du har en omvänd proxy, bör du göra omdirigeringen DET. Det här alternativet finns för installationer som Heroku, som inte tillåter konfiguration omdirigeringen på den omvända proxyservern.", + "Invalid_Export_File": "Filen laddas upp är inte en giltig %s exportfilen.", "Forgot_password": "Glömt ditt lösenord?", "Forgot_Password_Description": "Du kan använda följande platsinnehavare:
  • [Forgot_Password_Url] för URL-återställningsadressen.
  • [namn], [fname], [lname] för användarens fullständiga namn, förnamn eller efternamn.
  • [email] för användarens email.
  • [Site_Name] och [Site_URL] för respektive programnamn och URL.
", "Forgot_Password_Email": "Klicka på här för att återställa ditt lösenord.", @@ -1409,6 +1410,8 @@ "Importer_setup_error": "Ett fel uppstod när importeraren skulle skapas.", "Importer_Slack_Users_CSV_Information": "Filen som laddas upp måste vara Slack's Users exportfil, som är en CSV-fil. Se här för mer information:", "Importer_Source_File": "Källfilsval", + "importer_status_finishing": "Nästan klar", + "importer_status_import_failed": "Fel", "Inclusive": "inklusive", "Incoming_Livechats": "Inkommande Livechats", "Incoming_WebHook": "Inkommande WebHook", @@ -1480,7 +1483,6 @@ "Invalid_confirm_pass": "Lösenorden matchar inte varandra", "Invalid_email": "Den angivna epostadressen är ogiltig", "Invalid_username": "Inloggningsnamnet är ogiltigt", - "Invalid_Export_File": "Filen laddas upp är inte en giltig %s exportfilen.", "Invalid_Import_File_Type": "Ogiltig filtyp för import.", "Invalid_name": "Namnet får inte vara tomt", "Invalid_notification_setting_s": "Felaktiga notifieringsinställningar: %s", diff --git a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json index 828b9045e388..1d33eadee0b0 100644 --- a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json @@ -1212,6 +1212,7 @@ "force-delete-message_description": "எல்லா கட்டுப்பாடுகளையும் தவிர்த்து ஒரு செய்தியை நீக்க அனுமதி", "Force_SSL": "படை SSL", "Force_SSL_Description": "* எச்சரிக்கை! * _Force SSL_ தலைகீழ் பதிலி பயன்படுத்த கூடாது. நீங்கள் ஒரு தலைகீழ் ப்ராக்ஸி வேண்டும் என்றால், நீங்கள் அங்கு திருப்பி செய்ய வேண்டும். இந்த விருப்பத்தை தலைகீழ் ப்ராக்ஸி மணிக்கு திருப்பி கட்டமைப்பு அனுமதிக்க முடியாது என்று Heroku, போன்ற ஆயத்தங்களும் உள்ளது.", + "Invalid_Export_File": "பதிவேற்றிய கோப்பு ஒரு செல்லுபடியாகும்% கள் ஏற்றுமதி கோப்பு அல்ல.", "Forgot_password": "உங்கள் கடவுச்சொல்லை மறந்து விட்டீர்களா", "Forgot_Password_Description": "நீங்கள் பின்வரும் பெட்டிகளைப் பயன்படுத்தலாம்:
  • கடவுச்சொல் மீட்டெடுப்பு URL க்கான [Forget_html_Url]. முறையே பயனரின் முழுப்பெயர், முதல் பெயர் அல்லது கடைசி பெயர்
  • [name], [fname], [lname]. பயனர் மின்னஞ்சலுக்கான
  • [மின்னஞ்சல்]. விண்ணப்பம் பெயர் மற்றும் URL ஆகியவற்றை முறையே
  • [Site_Name] மற்றும் [Site_URL].
", "Forgot_Password_Email": "உங்கள் கடவுச்சொல்லை மீட்டமைக்க இங்கேகிளிக் செய்க.", @@ -1339,6 +1340,7 @@ "Importer_setup_error": "இறக்குமதியாளர் அமைக்க போது ஒரு பிழை நேர்ந்தது.", "Importer_Slack_Users_CSV_Information": "பதிவேற்றிய கோப்பு ஸ்லாக்கின் பயனர்கள் ஏற்றுமதி கோப்பாக இருக்க வேண்டும், இது ஒரு CSV கோப்பாகும். மேலும் தகவலுக்கு இங்கே பார்க்கவும்:", "Importer_Source_File": "மூல கோப்பு தேர்வு", + "importer_status_import_failed": "பிழை", "Inclusive": "உள்ளீடான", "Incoming_Livechats": "உள்வரும் Livechats", "Incoming_WebHook": "உள்வரும் WebHook", @@ -1409,7 +1411,6 @@ "Invalid_confirm_pass": "கடவுச்சொல்லை உறுதிப்படுத்தும் கடவுச்சொல் பொருந்தவில்லை", "Invalid_email": "உள்ளிட்ட மின்னஞ்சல் தவறானது", "Invalid_username": "உள்ளிட்ட பயனர்பெயர் தவறானது", - "Invalid_Export_File": "பதிவேற்றிய கோப்பு ஒரு செல்லுபடியாகும்% கள் ஏற்றுமதி கோப்பு அல்ல.", "Invalid_Import_File_Type": "தவறான இறக்குமதி கோப்பு வகை.", "Invalid_name": "பெயர் காலியாக இருக்க கூடாது ", "Invalid_notification_setting_s": "தவறான அறிவிப்பு அமைப்பைப் %s:", diff --git a/packages/rocketchat-i18n/i18n/th-TH.i18n.json b/packages/rocketchat-i18n/i18n/th-TH.i18n.json index 683ad5cde56a..2a3b01a4d928 100644 --- a/packages/rocketchat-i18n/i18n/th-TH.i18n.json +++ b/packages/rocketchat-i18n/i18n/th-TH.i18n.json @@ -1211,6 +1211,7 @@ "force-delete-message_description": "อนุญาตให้ลบข้อความโดยเลี่ยงข้อ จำกัด ทั้งหมด", "Force_SSL": "บังคับใช้ SSL", "Force_SSL_Description": "* ข้อควรระวัง! _Force SSL_ ไม่ควรใช้กับพร็อกซีแบบย้อนกลับ หากคุณมีพร็อกซีแบบย้อนกลับคุณควรเปลี่ยนเส้นทางที่นี่ ตัวเลือกนี้มีอยู่สำหรับการใช้งานเช่น Heroku ซึ่งไม่อนุญาตให้มีการกำหนดค่าการเปลี่ยนเส้นทางที่พร็อกซีย้อนกลับ", + "Invalid_Export_File": "ไฟล์ที่อัปโหลดไม่ใช่ไฟล์ที่ส่งออก%s ที่ถูกต้อง", "Forgot_password": "ลืมรหัสผ่านหรือไม่", "Forgot_Password_Description": "คุณสามารถใช้ตัวยึดตำแหน่งต่อไปนี้:
  • [ลืมรหัสผ่าน] สำหรับ URL การกู้คืนรหัสผ่าน
  • [name], [fname], [lname] สำหรับชื่อเต็มของผู้ใช้ชื่อหรือนามสกุลตามลำดับ
  • [email] สำหรับอีเมลของผู้ใช้
  • [Site_Name] และ [Site_URL] สำหรับชื่อแอ็พพลิเคชันและ URL ตามลำดับ
", "Forgot_Password_Email": "คลิก ที่นี่เพื่อรีเซ็ตรหัสผ่านของคุณ", @@ -1338,6 +1339,7 @@ "Importer_setup_error": "เกิดข้อผิดพลาดขณะตั้งค่าตัวนำเข้า", "Importer_Slack_Users_CSV_Information": "ไฟล์ที่อัปโหลดต้องเป็นไฟล์การส่งออกของผู้ใช้ Slack ซึ่งเป็นไฟล์ CSV ดูข้อมูลเพิ่มเติมที่นี่:", "Importer_Source_File": "เลือกไฟล์ต้นฉบับ", + "importer_status_import_failed": "ความผิดพลาด", "Inclusive": "รวมทั้ง", "Incoming_Livechats": "Livechats ที่เข้ามา", "Incoming_WebHook": "WebHook ที่เข้ามา", @@ -1408,7 +1410,6 @@ "Invalid_confirm_pass": "การยืนยันรหัสผ่านไม่ตรงกับรหัสผ่าน", "Invalid_email": "อีเมลที่ป้อนไม่ถูกต้อง", "Invalid_username": "ชื่อผู้ใช้ที่ป้อนไม่ถูกต้อง", - "Invalid_Export_File": "ไฟล์ที่อัปโหลดไม่ใช่ไฟล์ที่ส่งออก%s ที่ถูกต้อง", "Invalid_Import_File_Type": "ประเภทไฟล์นำเข้าไม่ถูกต้อง", "Invalid_name": "ชื่อต้องไม่ว่างเปล่า", "Invalid_notification_setting_s": "การตั้งค่าการแจ้งเตือนไม่ถูกต้อง:%s", diff --git a/packages/rocketchat-i18n/i18n/tr.i18n.json b/packages/rocketchat-i18n/i18n/tr.i18n.json index ab006e5a8770..aaafc50cedc7 100644 --- a/packages/rocketchat-i18n/i18n/tr.i18n.json +++ b/packages/rocketchat-i18n/i18n/tr.i18n.json @@ -1460,6 +1460,7 @@ "Force_SSL_Description": "* Dikkat! * _Force SSL_ ters proxy ile asla kullanılmamalıdır. Eğer ters proxy varsa, ORADA yönlendirme yapmak gerekir. Bu seçenek, ters vekil de yönlendirme yapılandırması izin vermez Heroku gibi dağıtımlar için var.", "Force_visitor_to_accept_data_processing_consent": "Ziyaretçiyi veri işleme iznini kabul etmeye zorla", "Force_visitor_to_accept_data_processing_consent_description": "Ziyaretçiler veri işleme izni olmaksızın sohbete başlayamazlar.", + "Invalid_Export_File": "Yüklenen dosya geçerli bir %s içe aktarım dosyası değil.", "Forgot_password": "Şifrenizi mi unuttunuz?", "Forgot_Password_Description": "Şu yer tutucularını kullanabilirsiniz:
  • Şifre kurtarma URL'si için [Forgot_Password_Url]. Sırasıyla kullanıcının tam adı, adı veya soyadı için
  • [ad], [fname], [lname].
  • [e-posta] kullanıcının e-postası için. Sırasıyla Uygulama Adı ve URL için
  • [Site_Name] ve [Site_URL].
", "Forgot_Password_Email": "Şifrenizi sıfırlamak için burayıtıklayın.", @@ -1602,6 +1603,12 @@ "Importer_setup_error": "İçe aktarım servisi kurulurken bir hata oluştu.", "Importer_Slack_Users_CSV_Information": "Yüklenen dosya, bir CSV dosyası olan Slack Kullanıcıları dışa aktarma dosyası olmalıdır. Daha fazla bilgi için buraya bakın:", "Importer_Source_File": "Kaynak Dosya Seçimi", + "importer_status_new": "Başlatılmadı", + "importer_status_importing_users": "Kullanıcılar içe aktarılıyor", + "importer_status_importing_channels": "Kanallar içe aktarılıyor", + "importer_status_importing_messages": "İletiler içe aktarılıyor", + "importer_status_finishing": "Neredeyse bitti", + "importer_status_import_failed": "Hata", "Importer_Upload_FileSize_Message": "Sunucu ayarlarınız en fazla __maxFileSize__ boyutundaki dosyaların yüklenmesine izin veriyor.", "Importer_Upload_Unlimited_FileSize": "Sunucu ayarlarınız her boyutta dosyanın yüklenmesine izin veriyor.", "Importer_ExternalUrl_Description": "Herkesin erişebileceği dosya için bir URL de kullanabilirsiniz:", @@ -1683,7 +1690,6 @@ "Invalid_confirm_pass": "Şifre doğrulaması şifre ile eşleşmiyor", "Invalid_email": "Girilen e-posta geçersiz", "Invalid_username": "Girilen kullanıcı adı geçersiz", - "Invalid_Export_File": "Yüklenen dosya geçerli bir %s içe aktarım dosyası değil.", "Invalid_Import_File_Type": "İçe aktarılan dosya türü geçersiz.", "Invalid_name": "Ad boş bırakılamaz", "Invalid_notification_setting_s": "Geçersiz bildirim ayarı: %s", diff --git a/packages/rocketchat-i18n/i18n/ug.i18n.json b/packages/rocketchat-i18n/i18n/ug.i18n.json index 70f3498d4b44..a05d428db5bb 100644 --- a/packages/rocketchat-i18n/i18n/ug.i18n.json +++ b/packages/rocketchat-i18n/i18n/ug.i18n.json @@ -458,6 +458,7 @@ "For_your_security_you_must_enter_your_current_password_to_continue": "بىخەتەرلىكنى ئويلاشقان ئەھۋالدا ، سىز چوقۇم پارولنى كىرگۈزۈپ ئاندىن داۋاملىق مەشخۇلات قىلىڭ", "Force_SSL": "强制 SSL", "Force_SSL_Description": "غا ئوخشاش ئالاھىدە بولغان سۇپىدا ئىشلىتىلىدۇ ، بۇ تىپتىكى سۇپا تەتۈر يۆنىلىشلىك ۋاكالەتچىدە يۆلىنىشنى قايتىدىن تەڭشەشكە رۇخسەت قىلمايدۇ.Heroku نى دەتۈر يۆلىنىشلىك ۋاكالەتچى بىلەن تەڭ ئىشلىتىشكە بولمايدۇ. ئەگەرسىزنىڭ تەتۈر يۆنىلىشلىك ۋاكالەتچىڭىز بولسا سىز چوقۇم يۆنىلىشىنى قايتا بېكىتىش مەشغۇلاتى قىدلىشىڭىز كېرەك . بۇ تاللانما بولسا _Force SSL_ *دىققەت!*", + "Invalid_Export_File": "ھۆججەت ئەمەس %s چىقىرىلغان ھۆججەت ئىناۋەتلىك", "Forgot_password": "پارولنى ئۇنتۇپ قېلىش", "Frequently_Used": "دائىم ئىشلىتىلىدۇ", "From": "دىن", @@ -506,6 +507,7 @@ "Importer_Prepare_Uncheck_Deleted_Users": "يۇيۇۋەتكەن ئەزانى تاللاشنى بىكار قىلىش", "Importer_progress_error": "كىرىش ئېغىزى سۈرئەت ئەھۋالىنى قولغا كەلتۈرۈشكە ئامالسىز", "Importer_setup_error": "كىرگۈزۈش قورالىنى تەڭشىگەندە خاتالىق يۈز بەردى", + "importer_status_import_failed": "خاتالىق", "inline_code": "inline_code", "Install_Extension": "كېڭەيتمە پروگگراممىنى قاچىلاش", "Install_FxOs": "نى قاچىلاشRocket.Chat دا firefox", @@ -529,7 +531,6 @@ "InternalHubot_Username_Description": "بۇ چوقۇم سىزنىڭ مۇلازىمىتېردە تىزىملاتقان بىر ئىناۋەتلىك ئەزا بولۇشى كېرەك.", "Invalid_confirm_pass": "ئىككىنچى قېتىم كىرگۈزۈلگەن مەخپىي نومۇر بىلەن بىرىنچى قېتىم كىرگۈزۈلگىنى بىلەن ماس كەلمىدى.", "Invalid_email": "كىرگۈزۈلگەن ئىلخەت ئادرېسى ئىناۋەتسىز", - "Invalid_Export_File": "ھۆججەت ئەمەس %s چىقىرىلغان ھۆججەت ئىناۋەتلىك", "Invalid_Import_File_Type": "ئىناۋەتسىز كىرگۈزۈلگەن ھۆججەت تىپى", "Invalid_name": "ئەزا نامى قۇرۇق بولسا بولمايدۇ", "Invalid_notification_setting_s": "ئىناۋەتسىز ئۇچۇر بەلگىلىمىسى:%s", diff --git a/packages/rocketchat-i18n/i18n/uk.i18n.json b/packages/rocketchat-i18n/i18n/uk.i18n.json index 17e28c96d9d9..b13a0a4154f1 100644 --- a/packages/rocketchat-i18n/i18n/uk.i18n.json +++ b/packages/rocketchat-i18n/i18n/uk.i18n.json @@ -15,7 +15,7 @@ "Accept": "Погоджуюсь", "Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Приймати запити із livechat, навіть коли немає підключених співробітників", "Accept_new_livechats_when_agent_is_idle": "Приймайти нові запити livechat, коли агент не працює", - "Accept_with_no_online_agents": "Приймати із не підключенними співробітниками", + "Accept_with_no_online_agents": "Приймати із непідключенними співробітниками", "access-mailer": "Доступ до електронної пошти", "access-mailer_description": "Дозволити надсилати електронний лист усім користувачам", "access-permissions": "Дозвіл до налаштувань прав доступу", @@ -23,7 +23,7 @@ "access-setting-permissions": "Змінена дозволів на основі налаштувань", "Access_not_authorized": "Не авторизований доступ", "Access_Token_URL": "URL Токена доступу", - "Accessing_permissions": "доступ дозволів", + "Accessing_permissions": "Отримання доступу до дозволів", "Account_SID": "SID облікового запису", "Accounts": "Облікові записи", "Accounts_Admin_Email_Approval_Needed_Default": "

Користувач [назва] ([email])зареєстровано.

Будь ласка, виберіть \"Адміністрація ->Користувачі\", щоб активувати або видалити його.

", @@ -65,7 +65,7 @@ "Accounts_Email_Activated": "[ім'я]

Ваш обліковий запис активовано.

", "Accounts_Email_Activated_Subject": "Рахунок активовано", "Accounts_Email_Approved": "[ім'я]

Ваш обліковий запис було схвалено.

", - "Accounts_Email_Approved_Subject": "Рахунок схвалено", + "Accounts_Email_Approved_Subject": "Обліковий запис схвалено", "Accounts_Email_Deactivated": "[ім'я]

Ваш обліковий запис було вимкнено.

", "Accounts_Enrollment_Email_Default": "

Ласкаво просимо до [Site_Name]

Перейтдіть до [Site_URL] та спробуйте найкращий чат з відкритим вихідним кодом на сьогоднішній день!

", "Accounts_Email_Deactivated_Subject": "Рахунок деактивовано", @@ -137,7 +137,10 @@ "Accounts_OAuth_Meteor_id": "Meteor Id", "Accounts_OAuth_Meteor_secret": "Meteor секрет", "Accounts_OAuth_Nextcloud": "OAuth Увімкнено", + "Accounts_OAuth_Nextcloud_callback_url": "URL зворотнього виклику Nextcloud", + "Accounts_OAuth_Nextcloud_id": "Nextcloud ID", "Accounts_OAuth_Nextcloud_secret": "клієнт Секрет", + "Accounts_OAuth_Nextcloud_URL": "URL серверу Nextcloud", "Accounts_OAuth_Proxy_host": "Проксі-хост", "Accounts_OAuth_Proxy_services": "Проксі-сервіси", "Accounts_OAuth_Tokenpass": "Логін Tokenpass", @@ -189,6 +192,8 @@ "Accounts_RegistrationForm_Secret_URL": "секретний URL", "Accounts_RegistrationForm_SecretURL": "Форма реєстрації Секретного URL", "Accounts_RegistrationForm_SecretURL_Description": "Ви повинні забезпечити випадкий рядок, який буде додано до вашого URL реєстрації . Приклад: https://open.rocket.chat/register/[secret_hash]", + "Accounts_Registration_InviteUrlType": "Тип запрошувальної URL-адреси", + "Accounts_Registration_InviteUrlType_Direct": "Пряма відповідь", "Accounts_Registration_InviteUrlType_Proxy": "Проксі-сервер", "Accounts_RequireNameForSignUp": "Вимагати ім'я для реєстрації", "Accounts_RequirePasswordConfirmation": "Вимагати підтвердження паролю", @@ -357,6 +362,7 @@ "App_support_url": "підтримка url", "App_Url_to_Install_From": "Встановити з URL-адреси", "App_Url_to_Install_From_File": "Встановити з файлу", + "App_user_not_allowed_to_login": "Користувачам застосунків не дозволяється безпосередньо входити в систему.", "Appearance": "зовнішній вигляд", "Application_added": "Додаток доданий", "Application_Name": "ім'я програми", @@ -380,6 +386,7 @@ "Apps_Marketplace_pricingPlan_yearly": "__price___ / на рік", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / на рік на користувача", "Apps_Settings": "Налаштування програми", + "Apps_User_Already_Exists": "Ім'я користувача\"__username__\" вже використовується. Для встановлення застосунку перейменуйте або видаліть користувача, котрий використовує це ім'я", "Apps_WhatIsIt": "Додатки: які вони?", "Apps_WhatIsIt_paragraph1": "Нова іконка в адміністративній зоні! Що це означає і які додатки?", "Apps_WhatIsIt_paragraph2": "По перше, програми в цьому контексті не стосуються мобільних програм. Насправді, краще замислюватися про них з точки зору плагінів або розширених інтеграцій.", @@ -393,6 +400,7 @@ "Are_you_sure": "Ви впевнені?", "Are_you_sure_you_want_to_delete_your_account": "Ви впевнені, що хочете видалити свій аккаунт?", "Are_you_sure_you_want_to_disable_Facebook_integration": "Ви впевнені що бажаєте відключити інтеграцію із Facebook?", + "Are_you_sure_you_want_to_delete_this_record": "Ви впевнені, що хочете видалити цей запис?", "Assets": "Активи", "assign-admin-role": "Призначити роль Адміністратора", "assign-admin-role_description": "Дозвіл на призначення ролі Адміністратора іншим користувачам", @@ -453,6 +461,8 @@ "Avg_of_abandoned_chats": "Середня кількість покинутих чатів", "Avg_of_available_service_time": "Середній час обслуговування", "Avg_of_chat_duration_time": "Середня тривалість чату", + "Avg_of_service_time": "Середній час обслуговування", + "Avg_of_waiting_time": "Середній час очікування", "Avg_response_time": "Середній час відповіді", "Avg_reaction_time": "Середній час реакції", "away": "відійшов", @@ -464,6 +474,7 @@ "Back": "Назад", "Back_to_applications": "Назад до додатків", "Back_to_chat": "Повернутися до чату", + "Back_to_imports": "Повернутися до імпорту", "Back_to_integration_detail": "Повернутися до деталі інтеграції", "Back_to_integrations": "Повернутися до інтеграції", "Back_to_login": "Повернутися до сторінки входу", @@ -615,6 +626,7 @@ "Chatpal_Welcome": "Насолоджуйся своїм пошуком!", "Chatpal_Window_Size": "Розмір вікна індексу", "Chatpal_Window_Size_Description": "Розмір вікна індексу в годинах (при завантаженні)", + "Check_Progress": "Перевірити прогрес", "Choose_a_room": "Виберіть кімнату", "Choose_messages": "Вибрати повідомлення", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Виберіть псевдонім, який буде відображатися перед ім'ям користувача в повідомленнях.", @@ -645,6 +657,7 @@ "Cloud_workspace_connected_without_account": "Тепер ваша робоча область підключена до Rocket.Chat Cloud. Якщо ви хочете, ви можете увійти до Rocket.Chat Cloud і пов’язати робочу область зі своїм обліковим записом у Cloud.", "close-others-livechat-room_description": "Дозвіл закрити інші канали LiveChat", "Closed": "закрито", + "Closed_At": "Закрито о", "Closed_by_visitor": "Закрито відвідувачем", "Closing_chat": "закриття чату", "Cloud": "Хмара", @@ -671,6 +684,7 @@ "Cloud_error_in_authenticating": "Отримана помилка під час авторизації", "Cloud_error_code": "Код:", "Cloud_status_page_description": "Якщо у певної хмарної служби є проблеми, ви можете перевірити відомі проблеми на нашій сторінці статусу за адресою", + "Cloud_Service_Agree_PrivacyTerms": "Згода з умовами конфіденційності Cloud Service", "Cloud_troubleshooting": "Вирішення проблем", "Collaborative": "Спільна робота", "Collapse_Embedded_Media_By_Default": "Згорнути вбудовані медіа за замовчуванням", @@ -1504,6 +1518,7 @@ "Force_SSL_Description": "* Увага! * _FORCE SSL_ ніколи не слід використовувати зі зворотним проксі-сервером. Якщо у вас є зворотний проксі-сервер, ви повинні зробити редирект ТАМ. Ця опція існує для розгортання як Heroku, який не допускає конфігурацію переадресації на зворотний проксі-сервер.", "Force_visitor_to_accept_data_processing_consent": "Змусити відвідувача прийняти згоду на обробку даних", "Force_visitor_to_accept_data_processing_consent_description": "Відвідувачам заборонено розпочинати спілкування без згоди.", + "Invalid_Export_File": "Файл завантажений не є коректним %s файл експорту.", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "Угода про обробку даних повинна базуватися на прозорому розумінні причини обробки. Через це Ви повинні заповнити налаштування, нижче, яке буде показано користувачам, щоб вказати причини збору та обробки ваших персональних даних", "Forgot_password": "Забули пароль?", "Forgot_Password_Description": "Ви можете використовувати наступні заповнювачі:
  • [Forgot_Password_Url] для URL-адреси відновлення пароля.
  • [name], [fname], [lname] для повного ім'я користувача, ім'я або прізвища, відповідно.
  • [email] для електронної адреси.
  • [Site_Name] і [Site_URL] для назви програми та URL-адреси, відповідно.
", @@ -1652,6 +1667,11 @@ "Importer_setup_error": "Під час налаштування імпортера сталася помилка.", "Importer_Slack_Users_CSV_Information": "Завантажений файл повинен бути файлом експорту Користувачів Slack, який є файлом CSV. Дивіться тут, щоб отримати додаткову інформацію:", "Importer_Source_File": "Вибір вихідного файлу", + "importer_status_importing_users": "Імпорт користувачів", + "importer_status_importing_channels": "Імпорт каналів", + "importer_status_importing_messages": "Імпорт повідомлень", + "importer_status_finishing": "Майже зроблено", + "importer_status_import_failed": "Помилка", "Importer_Upload_FileSize_Message": "Налаштування вашого сервера дозволяють завантажувати файли розміром до __maxFileSize__.", "Importer_Upload_Unlimited_FileSize": "Налаштування вашого сервера дозволяють завантажувати файли будь-якого розміру.", "Importer_ExternalUrl_Description": "Ви також можете використовувати URL-адресу для загальнодоступного файлу:", @@ -1734,7 +1754,6 @@ "Invalid_confirm_pass": "Підтвердження пароля не збігаються пароль", "Invalid_email": "Невірний email", "Invalid_username": "Введене ім'я користувача недійсне", - "Invalid_Export_File": "Файл завантажений не є коректним %s файл експорту.", "Invalid_Import_File_Type": "Невірний тип файлу імпорту.", "Invalid_name": "Ім'я має бути заповненим", "Invalid_notification_setting_s": "Неприпустима настройка сповіщення: %s", @@ -3265,5 +3284,6 @@ "Your_push_was_sent_to_s_devices": "Ваш push був відправлений до %s пристроїв", "Your_question": "Ваше питання", "Your_server_link": "Посилання на Ваш сервер", + "Your_temporary_password_is_password": "Ваш тимчасовий пароль [password].", "Your_workspace_is_ready": "Ваш робочий простір готовий до використання 🎉" } \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json index a3b3896377a4..67bbbd8403c4 100644 --- a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json +++ b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json @@ -1203,6 +1203,7 @@ "force-delete-message_description": "Cho phép xóa một tin nhắn bỏ qua tất cả các hạn chế", "Force_SSL": "Buộc SSL", "Force_SSL_Description": "* Chú ý! _Force SSL_ không nên được sử dụng với proxy ngược lại. Nếu bạn có một proxy ngược lại, bạn nên làm các redirect THERE. Tùy chọn này tồn tại cho các triển khai như Heroku, không cho phép cấu hình chuyển hướng ở proxy ngược lại.", + "Invalid_Export_File": "Tệp được tải lên không phải là tệp xuất%s hợp lệ.", "Forgot_password": "Quên mật khẩu", "Forgot_Password_Description": "Bạn có thể sử dụng các placeholder sau:
  • [Forget_Password_Url] cho URL khôi phục mật khẩu.
  • [name], [fname], [lname] tương ứng cho tên, họ hoặc họ của người dùng, tương ứng.
  • [email] cho email của người dùng.
  • [Site_Name] và [Site_URL] cho Tên Ứng dụng và URL tương ứng.
", "Forgot_Password_Email": "Nhấp vào ở đây để đặt lại mật khẩu của bạn.", @@ -1330,6 +1331,7 @@ "Importer_setup_error": "Đã xảy ra lỗi khi thiết lập nhà nhập khẩu.", "Importer_Slack_Users_CSV_Information": "Tệp được tải lên phải là tệp xuất của Người dùng Slack, tệp CSV. Xem ở đây để biết thêm thông tin:", "Importer_Source_File": "Lựa chọn tệp nguồn", + "importer_status_import_failed": "lỗi", "Inclusive": "Bao gồm", "Incoming_Livechats": "Inch Livechats", "Incoming_WebHook": "WebHook đến", @@ -1400,7 +1402,6 @@ "Invalid_confirm_pass": "Xác nhận mật khẩu không khớp với mật khẩu", "Invalid_email": "Email nhập vào không hợp lệ", "Invalid_username": "Tên người dùng đã nhập không hợp lệ", - "Invalid_Export_File": "Tệp được tải lên không phải là tệp xuất%s hợp lệ.", "Invalid_Import_File_Type": "Loại tệp nhập không hợp lệ.", "Invalid_name": "Tên không được để trống", "Invalid_notification_setting_s": "Cài đặt thông báo không hợp lệ:%s", diff --git a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json index 97ea267e5af5..13550adaac49 100644 --- a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json @@ -1234,6 +1234,7 @@ "force-delete-message_description": "允许删除绕过所有限制的消息", "Force_SSL": "强制SSL", "Force_SSL_Description": "*小心!* _Force SSL_不应与反向代理一起使用。如果你有一个反向代理,你应该做重定向THERE。此选项适用于像Heroku这样的部署,它不允许在反向代理中进行重定向配置。", + "Invalid_Export_File": "上传的文件不是有效的%s导出文件。", "Forgot_password": "忘记密码", "Forgot_Password_Description": "您可以使用以下占位符:
  • [Forgot_Password_Url]获取密码恢复网址。
  • [姓名],[fname],[lname]分别代表用户的全名,名字或姓氏。用户的电子邮件为
  • [email]。分别为应用程序名称和URL分别为
  • [Site_Name]和[Site_URL]。
", "Forgot_Password_Email": "点击此处重置您的密码。", @@ -1362,6 +1363,7 @@ "Importer_setup_error": "设置导入器时发生错误。", "Importer_Slack_Users_CSV_Information": "上传的文件必须是Slack的用户导出文件,这是一个CSV文件。浏览此处获取更多信息:", "Importer_Source_File": "源文件选择", + "importer_status_import_failed": "错误", "Inclusive": "包括的", "Incoming_Livechats": "传入的Livechats", "Incoming_WebHook": "传入的WebHook", @@ -1432,7 +1434,6 @@ "Invalid_confirm_pass": "第二次密码输入与第一次不匹配", "Invalid_email": "无效的电子邮件", "Invalid_username": "输入的用户名无效", - "Invalid_Export_File": "上传的文件不是有效的%s导出文件。", "Invalid_Import_File_Type": "导入文件类型无效。", "Invalid_name": "用户名不能为空", "Invalid_notification_setting_s": "无效的通知设置:%s", @@ -2879,4 +2880,4 @@ "Your_push_was_sent_to_s_devices": "您的推送已发送到%s设备", "Your_server_link": "您的服务器链接", "Your_workspace_is_ready": "您的工作区已准备好使用🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json index 93bc7793b958..4cbde528ef7a 100644 --- a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json @@ -474,6 +474,7 @@ "Back": "返回", "Back_to_applications": "返回應用程式", "Back_to_chat": "回到聊天", + "Back_to_imports": "回到匯入", "Back_to_integration_detail": "回到整合細節", "Back_to_integrations": "返回整合功能", "Back_to_login": "返回登入畫面", @@ -625,6 +626,7 @@ "Chatpal_Welcome": "享受您的搜尋!", "Chatpal_Window_Size": "索引視窗大小", "Chatpal_Window_Size_Description": "索引視窗的大小以小時為單位(在引導時)", + "Check_Progress": "檢查進度", "Choose_a_room": "選擇一個頻道", "Choose_messages": "選擇訊息", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "選擇在訊息中,顯示在使用者名稱前方的別名。", @@ -998,6 +1000,7 @@ "Crowd_sync_interval_Description": "同步之間的時間間隔。例如“每24小時”或“每週的第一天”,在[Cron Text Parser](http://bunkat.github.io/later/parsers.html#text)上的更多示例,", "Current_Chats": "目前聊天", "Current_File": "目前檔案", + "Current_Import_Operation": "目前匯入操作", "Current_Status": "當前狀態", "Custom": "自訂", "Custom CSS": "自定義 CSS", @@ -1165,7 +1168,9 @@ "Domains": "網域", "Domains_allowed_to_embed_the_livechat_widget": "允許嵌入livechat小工具的逗號分隔的網域列表。留空以允許所有網域。", "Downloading_file_from_external_URL": "從外部網址下載檔案", + "Download_Info": "下載資訊", "Download_My_Data": "下載我的資料 (HTML)", + "Download_Pending_Files": "下載待處理檔案", "Download_Snippet": "下載", "Drop_to_upload_file": "拖曳以上傳", "Dry_run": "空運行", @@ -1237,6 +1242,7 @@ "email_style_label": "電子郵件型態", "email_style_description": "避免使用套版選擇器", "Email_verified": "電子郵件已驗證", + "email_plain_text_only": "只寄送存文字郵件", "Emoji": "表情符號", "Emoji_provided_by_JoyPixels": "表情符號提供者為 JoyPixels", "EmojiCustomFilesystem": "自訂表情符號文件系統", @@ -1415,7 +1421,12 @@ "Facebook_Page": "Facebook 頁面", "Failed": "失敗", "Failed_to_activate_invite_token": "無法啟動邀請 token", + "Failed_To_Download_Files": "下載檔案失敗", "Failed_to_generate_invite_link": "無法產生邀請連接", + "Failed_To_Load_Import_Data": "讀取匯入資料失敗", + "Failed_To_Load_Import_History": "讀取匯入歷史紀錄失敗", + "Failed_To_Load_Import_Operation": "讀取匯入操作失敗", + "Failed_To_Start_Import": "開始匯入操作失敗", "Failed_to_validate_invite_token": "無法驗證邀請 token", "False": "否", "Favorite_Rooms": "啟用最愛 Room", @@ -1446,14 +1457,20 @@ "Field": "欄位", "Field_removed": "欄位已移除", "Field_required": "必填字段", + "File": "檔案", + "File_Downloads_Started": "檔案下載已開始", "Files": "檔案", "File_exceeds_allowed_size_of_bytes": "檔案已超出 __size__ 。", "File_name_Placeholder": "搜索文件...", "File_removed_by_automatic_prune": "通過自動修剪刪除文件", "File_not_allowed_direct_messages": "直接郵件中不允許文件共享。", "File_removed_by_prune": "文件被修剪刪除", + "File_Path": "檔案路徑", + "File_Type": "檔案類型", "File_type_is_not_accepted": "文件類型不被接受。", "File_uploaded": "檔案已上傳", + "File_uploaded_successfully": "檔案上傳已成功", + "File_URL": "檔案網址", "FileUpload": "檔案上傳", "FileUpload_Disabled": "檔案上傳已停用。", "FileUpload_Enabled": "檔案上傳已啟用", @@ -1534,6 +1551,7 @@ "Force_SSL_Description": "*注意!* _Force SSL_不應該與反向代理使用。如果你有一個反向代理,你如果真有這樣做的重定向。這個選項存在像Heroku的,不允許在反向代理重定向配置部署。", "Force_visitor_to_accept_data_processing_consent": "強制訪客同意資料處理同意書", "Force_visitor_to_accept_data_processing_consent_description": "訪客不允許在沒有同意書的情形下開始聊天。", + "Invalid_Export_File": "上傳的檔案是不是有效 %s 的匯出檔案。", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "資料處理同意書必須在基於透明了解處理原因。因此,您必須填寫下面的設定,該設定將顯示給使用者,以便提供收集和處理您的個人訊息的原因。", "Forgot_password": "忘記密碼", "Forgot_Password_Description": "您可以使用以下佔位符:
  • [Forgot_Password_Url]獲取密碼恢復網址。
  • [姓名],[fname],[lname]分別代表用戶的全名,名字或姓氏。用戶的電子郵件為
  • [email]。分別為應用程序名稱和URL分別為
  • [Site_Name]和[Site_URL]。
", @@ -1662,6 +1680,8 @@ "Impersonate_user_description": "啟用後,整合文章將作為觸發整合的使用者", "Import": "匯入", "Import_Type": "匯入類型", + "Import_New_File": "匯入新的檔案", + "Import_requested_successfully": "匯入請求成功", "Importer_Archived": "封存", "Importer_CSV_Information": "CSV 匯入程式需要特定的格式,請閱讀文件以了解如何建置您的zip文件:", "Importer_done": "匯入完成!", @@ -1672,6 +1692,7 @@ "Importer_import_cancelled": "匯入已取消。", "Importer_import_failed": "在執行匯入時出錯。", "Importer_importing_channels": "匯入頻道。", + "Importer_importing_files": "匯入檔案中。", "Importer_importing_messages": "匯入訊息。", "Importer_importing_started": "開始匯入。", "Importer_importing_users": "匯入使用者。", @@ -1685,10 +1706,29 @@ "Importer_setup_error": "在設置匯入時出錯。", "Importer_Slack_Users_CSV_Information": "上傳的文件必須是 Slack 的使用者匯出文件,這是一個CSV文件。瀏覽此處獲取更多訊息:", "Importer_Source_File": "來源檔案選擇", + "importer_status_new": "沒有開始", + "importer_status_uploading": "上傳檔案中", + "importer_status_downloading_file": "下載檔案中", + "importer_status_file_loaded": "檔案已讀取", + "importer_status_preparing_started": "讀取檔案中", + "importer_status_preparing_users": "讀取使用者檔案中", + "importer_status_preparing_channels": "讀取頻道檔案中", + "importer_status_preparing_messages": "讀取訊息檔案中", + "importer_status_user_selection": "準備要選擇匯入的內容", + "importer_status_importing_started": "匯入資料中", + "importer_status_importing_users": "匯入使用者中", + "importer_status_importing_channels": "匯入頻道中", + "importer_status_importing_files": "匯入檔案中", + "importer_status_importing_messages": "匯入訊息中", + "importer_status_finishing": "快要完成", + "importer_status_done": "已完成成功", + "importer_status_import_failed": "錯誤", + "importer_status_import_cancelled": "已取消", "Importer_Upload_FileSize_Message": "您的伺服器設定允許上傳最大的檔案大小為__maxFileSize__。", "Importer_Upload_Unlimited_FileSize": "您的伺服器允許上傳任意大小的檔案。", "Importer_ExternalUrl_Description": "您也可以把公開存取的檔案轉成網址:", "Importing_channels": "匯入頻道中", + "Importing_Data": "匯入資料中", "Importing_messages": "匯入訊息中", "Importing_users": "匯入使用者中", "Inclusive": "包括的", @@ -1768,7 +1808,6 @@ "Invalid_confirm_pass": "確認密碼與密碼不相符", "Invalid_email": "電子郵件無效", "Invalid_username": "輸入的使用者名稱無效", - "Invalid_Export_File": "上傳的檔案是不是有效 %s 的匯出檔案。", "Invalid_Import_File_Type": "無效的匯入檔案類型。", "Invalid_name": "使用者名稱不能為空", "Invalid_notification_setting_s": "無效的通知設置:%s 的", @@ -1892,6 +1931,7 @@ "Last_seen": "最後上線", "Last_token_part": "最後 token 部份", "Last_Message": "上次消息", + "Last_Status": "讀取狀態", "Last_Updated": "最後已更新", "Launched_successfully": "成功推出", "Layout": "介面", @@ -2349,6 +2389,7 @@ "No_direct_messages_yet": "您還没有開始任何聊天。", "No_emojis_found": "沒找到表情符號", "No_Encryption": "無加密", + "No_files_left_to_download": "沒有檔案可下載", "No_group_with_name_%s_was_found": "沒有此私人群組 \"%s\" !", "No_groups_yet": "您尚未擁有私人群組", "No_integration_found": "由提供的 ID 找不到整合。", @@ -2576,6 +2617,7 @@ "Public_Channel": "公共 Channel", "Public_Community": "公共社區", "Public_Relations": "公共關係", + "Public_URL": "公開網址", "Purchased": "已購買", "Push": "推播", "Push_Setting_Requires_Restart_Alert": "變更這個值需要重啟 Rocket.Chat。", @@ -2875,6 +2917,8 @@ "Sending": "傳送中…", "Sent_an_attachment": "發送附件", "Served_By": "服務於", + "Server_File_Path": "伺服器檔案路徑", + "Server_Folder_Path": "伺服器資料夾路徑", "Server_Info": "伺服器資訊", "Server_Type": "伺服器類型", "Service": "服務", @@ -3002,6 +3046,7 @@ "Statistics_reporting": "傳送統計資料至 Rocket.Chat", "Statistics_reporting_Description": "通過發送您的統計,你會幫助我們確定如何Rocket.Chat許多實例部署,以及系統是如何表現不錯,或是我們可以進一步改進。不要擔心,因為沒有使用者帳號的發送和收到的所有訊息都是保密的。", "Stats_Active_Users": "活躍使用者", + "Stats_App_Users": "Rocket.Chat 應用程式使用者", "Stats_Avg_Channel_Users": "平均 Channel 人數", "Stats_Avg_Private_Group_Users": "平均私人群組人數", "Stats_Away_Users": "暫時離開使用者", @@ -3252,6 +3297,7 @@ "Unfollow_message": "取消追蹤訊息", "Unignore": "取消忽略", "Uninstall": "反安裝", + "Unknown_Import_State": "未知匯入狀態", "Unlimited": "無限", "Unmute_someone_in_room": "有人在房間取消靜音", "Unmute_user": "使用者取消靜音", @@ -3272,6 +3318,7 @@ "Update_to_version": "更新到 __version__", "Update_your_RocketChat": "更新你的 Rocket.Chat", "Updated_at": "更新於", + "Upload": "上傳", "Upload_app": "上傳應用程式", "Upload_file_description": "檔案敘述", "Upload_file_name": "檔案名稱", @@ -3283,6 +3330,8 @@ "Uptime": "上線時間", "URL": "網址", "URL_room_prefix": "網址 Room 前綴", + "Use_Server_configuration": "使用伺服器設置", + "Use_Room_configuration": "覆寫伺服器設置和使用房間設置", "Use_account_preference": "使用帳號偏好", "Use_Emojis": "使用表情符號", "Use_Global_Settings": "使用全域設定", diff --git a/packages/rocketchat-i18n/i18n/zh.i18n.json b/packages/rocketchat-i18n/i18n/zh.i18n.json index faa330805993..4fc64ad83383 100644 --- a/packages/rocketchat-i18n/i18n/zh.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh.i18n.json @@ -1531,6 +1531,7 @@ "Force_SSL_Description": "*注意!* _Force SSL_ 不应该与反向代理同时使用。如果您有一个反向代理,您应该在那里设置重定向操作。这个选项用于像 Heroku 的特殊平台,此类平台不允许在反向代理中配置重定向。", "Force_visitor_to_accept_data_processing_consent": "强制访问者接受数据处理同意书", "Force_visitor_to_accept_data_processing_consent_description": "访客必须接受同意书才能开始聊天。", + "Invalid_Export_File": "上传的文件不是有效的 %s 导出文件。", "Force_visitor_to_accept_data_processing_consent_enabled_alert": "与数据处理同意书必须基于对处理原因的透明理解。因此,您必须填写下面的设置,该设置将显示给用户,以便提供收集和处理用户个人信息的原因。", "Forgot_password": "忘记密码", "Forgot_Password_Description": "您可以使用以下占位符:
  • [Forgot_Password_Url]获取密码恢复网址。
  • [姓名],[fname],[lname]分别代表用户的全名,名字或姓氏。用户的电子邮件为
  • [email]。分别为应用程序名称和URL分别为
  • [Site_Name]和[Site_URL]。
", @@ -1682,6 +1683,12 @@ "Importer_setup_error": "设置导入工具时发生了错误。", "Importer_Slack_Users_CSV_Information": "上传的文件必须是Slack的用户导出文件,这是一个CSV文件。浏览此处获取更多信息:", "Importer_Source_File": "选择源文件", + "importer_status_new": "尚未开始", + "importer_status_importing_users": "导入用户", + "importer_status_importing_channels": "导入频道", + "importer_status_importing_messages": "导入消息", + "importer_status_finishing": "快完成了", + "importer_status_import_failed": "错误", "Importer_Upload_FileSize_Message": "您的服务器设置允许上传任何大小的文件,最高可达 __maxFileSize__ 。", "Importer_Upload_Unlimited_FileSize": "您的服务器设置允许上传任何大小的文件。", "Importer_ExternalUrl_Description": "您还可以将URL用于可公开访问的文件:", @@ -1764,7 +1771,6 @@ "Invalid_confirm_pass": "两次输入的密码不一致", "Invalid_email": "输入的电子邮件地址无效", "Invalid_username": "输入的用户名无效", - "Invalid_Export_File": "上传的文件不是有效的 %s 导出文件。", "Invalid_Import_File_Type": "无效的导入文件类型。", "Invalid_name": "用户名不能为空", "Invalid_notification_setting_s": "无效的通知设置:%s", From d3715281d260f149ee94b95fe23ea9f15e973f69 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 18 Feb 2020 21:38:47 -0300 Subject: [PATCH 028/392] [FIX] Block user option inside admin view (#16626) --- app/ui-flextab/client/tabs/userActions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/ui-flextab/client/tabs/userActions.js b/app/ui-flextab/client/tabs/userActions.js index 93d49bb92047..d1947e1e8661 100644 --- a/app/ui-flextab/client/tabs/userActions.js +++ b/app/ui-flextab/client/tabs/userActions.js @@ -26,11 +26,11 @@ const canBlockUser = () => ChatSubscription.findOne({ rid: Session.get('openedRoom'), 'u._id': Meteor.userId() }, { fields: { blocker: 1 } }) .blocker; -const canDirectMessageTo = (username) => { +const canDirectMessageTo = (username, directActions) => { const subscription = Subscriptions.findOne({ rid: Session.get('openedRoom') }); const canOpenDm = hasAllPermission('create-d') || Subscriptions.findOne({ name: username }); const dmIsNotAlreadyOpen = subscription && subscription.name !== username; - return canOpenDm && dmIsNotAlreadyOpen; + return canOpenDm && (!directActions || dmIsNotAlreadyOpen); }; export const getActions = ({ user, directActions, hideAdminControls }) => { @@ -107,7 +107,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { Meteor.call('createDirectMessage', username, success((result) => result.rid && FlowRouter.go('direct', { username }, FlowRouter.current().queryParams))), ), condition() { - return canDirectMessageTo(this.username); + return canDirectMessageTo(this.username, directActions); }, }, @@ -188,7 +188,7 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { }, }; }, function() { - if (!isInDirectMessageRoom() || isSelf(this.username)) { + if (!directActions || !isInDirectMessageRoom() || isSelf(this.username)) { return; } if (canBlockUser()) { From a579c2da6a8f62b3efa2c24aa4e5bc64d2ecdfd6 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Tue, 18 Feb 2020 21:39:07 -0300 Subject: [PATCH 029/392] [FIX] Data converters overriding fields added by apps (#16639) --- app/apps/lib/misc/transformMappedData.js | 6 ++++-- app/lib/server/functions/sendMessage.js | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/apps/lib/misc/transformMappedData.js b/app/apps/lib/misc/transformMappedData.js index 0bba2c646081..61e57b0a53ca 100644 --- a/app/apps/lib/misc/transformMappedData.js +++ b/app/apps/lib/misc/transformMappedData.js @@ -73,8 +73,10 @@ export const transformMappedData = (data, map) => { if (typeof result !== 'undefined') { transformedData[to] = result; } - } else if (typeof from === 'string' && typeof originalData[from] !== 'undefined') { - transformedData[to] = originalData[from]; + } else if (typeof from === 'string') { + if (typeof originalData[from] !== 'undefined') { + transformedData[to] = originalData[from]; + } delete originalData[from]; } }); diff --git a/app/lib/server/functions/sendMessage.js b/app/lib/server/functions/sendMessage.js index ea5ce3088d51..5b7d3c281c10 100644 --- a/app/lib/server/functions/sendMessage.js +++ b/app/lib/server/functions/sendMessage.js @@ -136,6 +136,7 @@ const validateMessage = (message) => { emoji: String, avatar: ValidPartialURLParam, attachments: [Match.Any], + blocks: [Match.Any], })); if (Array.isArray(message.attachments) && message.attachments.length) { From a9c8c66b68a0ac992b43196ea172831be4348095 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Wed, 19 Feb 2020 12:52:15 -0300 Subject: [PATCH 030/392] [FIX] Admin height if the blue banner is opened (#16629) * fix admin height * fix review --- client/components/basic/Page.js | 2 +- client/routes.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/components/basic/Page.js b/client/components/basic/Page.js index ddf01872c402..67034e0caec7 100644 --- a/client/components/basic/Page.js +++ b/client/components/basic/Page.js @@ -5,7 +5,7 @@ import { BurgerMenuButton } from './BurgerMenuButton'; export function Page(props) { return - ({ height: '100vh' }), [])} {...props} /> + ({ height: '100%' }), [])} {...props} /> ; } diff --git a/client/routes.js b/client/routes.js index 515a6b2a6daf..ce613e76b182 100644 --- a/client/routes.js +++ b/client/routes.js @@ -233,19 +233,20 @@ FlowRouter.route('/setup-wizard/:step?', { }, }); +const style = 'overflow: hidden; flex: 1 1 auto; height: 1%;'; FlowRouter.route('/admin/:group?', { name: 'admin', action: async ({ group = 'info' } = {}) => { switch (group) { case 'info': { const { InformationRoute } = await import('./components/admin/info/InformationRoute'); - BlazeLayout.render('main', { center: await createTemplateForComponent(InformationRoute) }); + BlazeLayout.render('main', { center: await createTemplateForComponent(InformationRoute, { }, () => HTML.DIV({ style })) }); // eslint-disable-line break; } default: { const { SettingsRoute } = await import('./components/admin/settings/SettingsRoute'); - BlazeLayout.render('main', { center: await createTemplateForComponent(SettingsRoute, { group }) }); + BlazeLayout.render('main', { center: await createTemplateForComponent(SettingsRoute, { group }, () => HTML.DIV({ style })) }); // eslint-disable-line // BlazeLayout.render('main', { center: 'admin' }); } } From f69130e9fdb85e3af85c4d448158509a258937b2 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Wed, 19 Feb 2020 16:58:22 -0300 Subject: [PATCH 031/392] [NEW] Save default filters in the Omnichannel Current Chats list (#16653) * Store default filters on the Current Chats template. * Fix lint erros. * Fix agents default filter value. --- .../views/app/livechatCurrentChats.html | 16 ++--- .../client/views/app/livechatCurrentChats.js | 68 +++++++++++++++++-- packages/rocketchat-i18n/i18n/en.i18n.json | 1 + packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 1 + 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/app/livechat/client/views/app/livechatCurrentChats.html b/app/livechat/client/views/app/livechatCurrentChats.html index 63efc990d163..9ab5d338a425 100644 --- a/app/livechat/client/views/app/livechatCurrentChats.html +++ b/app/livechat/client/views/app/livechatCurrentChats.html @@ -1,7 +1,7 @@ diff --git a/app/oembed/client/oembedYoutubeWidget.js b/app/oembed/client/oembedYoutubeWidget.js deleted file mode 100644 index ce1040c1c268..000000000000 --- a/app/oembed/client/oembedYoutubeWidget.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Template } from 'meteor/templating'; - -Template.oembedYoutubeWidget.helpers({ - collapsed() { - return this.collapsedMedia; - }, -}); diff --git a/app/ui-message/client/message.html b/app/ui-message/client/message.html index f9bdbcf4648b..a69ad4ca7a71 100644 --- a/app/ui-message/client/message.html +++ b/app/ui-message/client/message.html @@ -93,15 +93,16 @@ {{#if hasOembed}} {{#each msg.urls}} {{injectMessage . ../msg}} + {{injectSettings . ../settings}} {{injectIndex . @index}} - {{> oembedBaseWidget (injectCollapsedMedia .)}} + {{> oembedBaseWidget}} {{/each}} {{/if}} {{#each msg.attachments}} {{injectMessage . ../msg}} {{injectSettings . ../settings}} {{injectIndex . @index}} - {{> messageAttachment (injectCollapsedMedia .)}} + {{> messageAttachment}} {{/each}} {{#if msg.drid}} diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index f8bf9a58036f..628534eb07d4 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -4,7 +4,6 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; -import { ReactiveVar } from 'meteor/reactive-var'; import { timeAgo, formatDateAndTime } from '../../lib/client/lib/formatDate'; import { DateFormat } from '../../lib/client'; @@ -12,64 +11,12 @@ import { renderMessageBody, MessageTypes, MessageAction, call, normalizeThreadMe import { RoomRoles, UserRoles, Roles, Messages } from '../../models/client'; import { callbacks } from '../../callbacks/client'; import { Markdown } from '../../markdown/client'; -import { t, roomTypes, getURL } from '../../utils'; +import { t, roomTypes } from '../../utils'; import { upsertMessage } from '../../ui-utils/client/lib/RoomHistoryManager'; import './message.html'; import './messageThread.html'; import { AutoTranslate } from '../../autotranslate/client'; -async function renderPdfToCanvas(canvasId, pdfLink) { - const isSafari = /constructor/i.test(window.HTMLElement) - || ((p) => p.toString() === '[object SafariRemoteNotification]')(!window.safari - || (typeof window.safari !== 'undefined' && window.safari.pushNotification)); - - if (isSafari) { - const [, version] = /Version\/([0-9]+)/.exec(navigator.userAgent) || [null, 0]; - if (version <= 12) { - return; - } - } - - if (!pdfLink || !/\.pdf$/i.test(pdfLink)) { - return; - } - pdfLink = getURL(pdfLink); - - const canvas = document.getElementById(canvasId); - if (!canvas) { - return; - } - - const pdfjsLib = await import('pdfjs-dist'); - pdfjsLib.GlobalWorkerOptions.workerSrc = `${ Meteor.absoluteUrl() }pdf.worker.min.js`; - - const loader = document.getElementById(`js-loading-${ canvasId }`); - - if (loader) { - loader.style.display = 'block'; - } - - const pdf = await pdfjsLib.getDocument(pdfLink); - const page = await pdf.getPage(1); - const scale = 0.5; - const viewport = page.getViewport(scale); - const context = canvas.getContext('2d'); - canvas.height = viewport.height; - canvas.width = viewport.width; - await page.render({ - canvasContext: context, - viewport, - }).promise; - - if (loader) { - loader.style.display = 'none'; - } - - canvas.style.maxWidth = '-webkit-fill-available'; - canvas.style.maxWidth = '-moz-available'; - canvas.style.display = 'block'; -} - const renderBody = (msg, settings) => { const isSystemMessage = MessageTypes.isSystemMessage(msg); const messageType = MessageTypes.getType(msg) || {}; @@ -95,12 +42,6 @@ const renderBody = (msg, settings) => { return msg; }; -Template.message.events({ - 'click .collapse-switch'(e, instance) { - instance.collapsedMedia.set(!instance.collapsedMedia.get()); - }, -}); - Template.message.helpers({ body() { const { msg, settings } = this; @@ -377,11 +318,6 @@ Template.message.helpers({ injectSettings(data, settings) { data.settings = settings; }, - injectCollapsedMedia(data) { - const collapsedMedia = Template.instance().collapsedMedia.get(); - Object.assign(data, { collapsedMedia }); - return data; - }, channelName() { const { subscription } = this; // const subscription = Subscriptions.findOne({ rid: this.rid }); @@ -436,9 +372,6 @@ Template.message.helpers({ return 'collapsed'; } }, - collapsedMedia() { - return Template.instance().collapsedMedia.get(); - }, collapseSwitchClass() { const { msg: { collapsed = true } } = this; return collapsed ? 'icon-right-dir' : 'icon-down-dir'; @@ -485,7 +418,6 @@ const findParentMessage = (() => { Template.message.onCreated(function() { const { msg, shouldCollapseReplies } = Template.currentData(); - this.collapsedMedia = new ReactiveVar(this.data.settings.collapseMediaByDefault === true); if (shouldCollapseReplies && msg.tmid && !msg.threadMsg) { findParentMessage(msg.tmid); } @@ -572,13 +504,10 @@ const isSequential = (currentNode, previousNode, forceDate, period, showDateSepa return false; }; -const processSequentials = ({ index, currentNode, settings, forceDate, showDateSeparator = true, groupable, msg, shouldCollapseReplies, collapsedMedia }) => { +const processSequentials = ({ index, currentNode, settings, forceDate, showDateSeparator = true, groupable, shouldCollapseReplies }) => { if (!showDateSeparator && !groupable) { return; } - if (msg.file && msg.file.type === 'application/pdf' && !collapsedMedia) { - Meteor.defer(() => { renderPdfToCanvas(msg.file._id, msg.attachments[0].title_link); }); - } // const currentDataset = currentNode.dataset; const previousNode = (index === undefined || index > 0) && getPreviousSentMessage(currentNode); const nextNode = currentNode.nextElementSibling; @@ -612,5 +541,5 @@ const processSequentials = ({ index, currentNode, settings, forceDate, showDateS Template.message.onRendered(function() { const currentNode = this.firstNode; - this.autorun(() => processSequentials({ currentNode, ...Template.currentData(), collapsedMedia: this.collapsedMedia.get() })); + this.autorun(() => processSequentials({ currentNode, ...Template.currentData() })); }); diff --git a/app/ui-utils/client/index.js b/app/ui-utils/client/index.js index 813392fcf961..163a9fa6e0bb 100644 --- a/app/ui-utils/client/index.js +++ b/app/ui-utils/client/index.js @@ -28,3 +28,4 @@ export { openRoom } from './lib/openRoom'; export * from './lib/rtl'; export * from './lib/keyCodes'; export * from './lib/prependReplies'; +export * from './lib/collapseArrow'; diff --git a/app/ui-utils/client/lib/collapseArrow.html b/app/ui-utils/client/lib/collapseArrow.html new file mode 100644 index 000000000000..db848b16ae2c --- /dev/null +++ b/app/ui-utils/client/lib/collapseArrow.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/ui-utils/client/lib/collapseArrow.js b/app/ui-utils/client/lib/collapseArrow.js new file mode 100644 index 000000000000..418a36eafdf4 --- /dev/null +++ b/app/ui-utils/client/lib/collapseArrow.js @@ -0,0 +1,31 @@ +import { Template } from 'meteor/templating'; +import { ReactiveVar } from 'meteor/reactive-var'; + +import './collapseArrow.html'; + +export const createCollapseable = (template, getInicialFromInstance = () => false) => { + template.onCreated(function() { + this.collapsedMedia = new ReactiveVar(getInicialFromInstance(Template.instance())); + }); + template.helpers({ + collapsed() { + return Template.instance().collapsedMedia.get(); + }, + collapsedMediaVar() { + return Template.instance().collapsedMedia; + }, + }); +}; + +Template.collapseArrow.events({ + 'click .collapse-switch'(e, i) { + e.preventDefault(); + i.data.collapsedMedia.set(!i.data.collapsedMedia.get()); + }, +}); + +Template.collapseArrow.helpers({ + collapsed() { + return this.collapsedMedia.get(); + }, +}); From 4a1dedc88ecefa8ef7f9e9e59240a3e67d05b6b1 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 31 Mar 2020 18:52:34 -0300 Subject: [PATCH 193/392] Regression: Block users was not possible for 1:1 DMs (#17105) --- app/lib/lib/roomTypes/direct.js | 11 ++++++++--- app/lib/server/methods/blockUser.js | 8 ++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/lib/lib/roomTypes/direct.js b/app/lib/lib/roomTypes/direct.js index 01b6f962f444..1a36927ba561 100644 --- a/app/lib/lib/roomTypes/direct.js +++ b/app/lib/lib/roomTypes/direct.js @@ -3,7 +3,7 @@ import { Session } from 'meteor/session'; import { ChatRoom, Subscriptions } from '../../../models'; import { openRoom } from '../../../ui-utils'; -import { getUserPreference, RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext } from '../../../utils'; +import { getUserPreference, RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, RoomMemberActions, UiTextContext } from '../../../utils'; import { hasPermission, hasAtLeastOnePermission } from '../../../authorization'; import { settings } from '../../../settings'; import { getUserAvatarURL } from '../../../utils/lib/getUserAvatarURL'; @@ -131,8 +131,13 @@ export class DirectMessageRoomType extends RoomTypeConfig { } } - allowMemberAction(/* room, action */) { - return false; + allowMemberAction(room, action) { + switch (action) { + case RoomMemberActions.BLOCK: + return !this.isGroupChat(room); + default: + return false; + } } enableMembersListProfile() { diff --git a/app/lib/server/methods/blockUser.js b/app/lib/server/methods/blockUser.js index aeb622e65694..f9e4bb4c54d2 100644 --- a/app/lib/server/methods/blockUser.js +++ b/app/lib/server/methods/blockUser.js @@ -2,6 +2,8 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { Subscriptions } from '../../../models'; +import { roomTypes, RoomMemberActions } from '../../../utils/server'; +import { Rooms } from '../../../models/server'; Meteor.methods({ blockUser({ rid, blocked }) { @@ -12,6 +14,12 @@ Meteor.methods({ throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'blockUser' }); } + const room = Rooms.findOne({ _id: rid }); + + if (!roomTypes.getConfig(room.t).allowMemberAction(room, RoomMemberActions.BLOCK)) { + throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'blockUser' }); + } + const subscription = Subscriptions.findOneByRoomIdAndUserId(rid, Meteor.userId()); const subscription2 = Subscriptions.findOneByRoomIdAndUserId(rid, blocked); From ca85376e8408b7030d1b6bad0ba0878d09637318 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 31 Mar 2020 20:27:22 -0300 Subject: [PATCH 194/392] Regression: Files were been deleted when deleting users as last members of private rooms (#17111) --- app/file-upload/server/lib/FileUpload.js | 3 +++ app/lib/server/functions/deleteUser.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/file-upload/server/lib/FileUpload.js b/app/file-upload/server/lib/FileUpload.js index fafd92f034b1..3d006b14aa0d 100644 --- a/app/file-upload/server/lib/FileUpload.js +++ b/app/file-upload/server/lib/FileUpload.js @@ -405,6 +405,9 @@ export const FileUpload = { }, removeFilesByRoomId(rid) { + if (typeof rid !== 'string' || rid.trim().length === 0) { + return; + } Messages.find({ rid, 'file._id': { diff --git a/app/lib/server/functions/deleteUser.js b/app/lib/server/functions/deleteUser.js index 1038c6783d46..ef39206c74bd 100644 --- a/app/lib/server/functions/deleteUser.js +++ b/app/lib/server/functions/deleteUser.js @@ -101,7 +101,7 @@ export const deleteUser = function(userId) { // Remove non-channel rooms with only 1 user (the one being deleted) return roomData.t !== 'c' && roomData.subscribers === 1; - }).map(({ _id }) => _id); + }).map(({ rid }) => rid); Rooms.find1On1ByUserId(user._id, { fields: { _id: 1 } }).forEach(({ _id }) => roomIds.push(_id)); From f4f4ff9bf13e97d54fc6db45ec73d9b8931627cd Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 31 Mar 2020 20:36:29 -0300 Subject: [PATCH 195/392] Bump version to 3.1.0-rc.6 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 40 +++++++++++++++++++++++++++++++++++++++ HISTORY.md | 21 ++++++++++++++++++++ app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 64 insertions(+), 3 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index bd0adbbbda24..cf38e2d5fe94 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 3.1.0-rc.5 +ENV RC_VERSION 3.1.0-rc.6 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 38b2712206e6..669163f1f675 100644 --- a/.github/history.json +++ b/.github/history.json @@ -41679,6 +41679,46 @@ ] } ] + }, + "3.1.0-rc.6": { + "node_version": "12.16.1", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "17111", + "title": "Regression: Files were been deleted when deleting users as last members of private rooms", + "userLogin": "rodrigok", + "milestone": "3.1.0", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "17105", + "title": "Regression: Block users was not possible for 1:1 DMs", + "userLogin": "ggazzo", + "milestone": "3.1.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "16994", + "title": "Regression: Collapsible elements didn't respect attachment parameter.", + "userLogin": "gabriellsh", + "milestone": "3.1.0", + "contributors": [ + "gabriellsh", + "web-flow", + "ggazzo" + ] + } + ] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index bcdf18a0766b..0b94b78ef297 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,27 @@ # 3.1.0 (Under Release Candidate Process) +## 3.1.0-rc.6 +`2020-03-31 · 3 🔍 · 3 👩‍💻👨‍💻` + +
+🔍 Minor changes + + +- Regression: Files were been deleted when deleting users as last members of private rooms ([#17111](https://github.com/RocketChat/Rocket.Chat/pull/17111)) + +- Regression: Block users was not possible for 1:1 DMs ([#17105](https://github.com/RocketChat/Rocket.Chat/pull/17105)) + +- Regression: Collapsible elements didn't respect attachment parameter. ([#16994](https://github.com/RocketChat/Rocket.Chat/pull/16994)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@gabriellsh](https://github.com/gabriellsh) +- [@ggazzo](https://github.com/ggazzo) +- [@rodrigok](https://github.com/rodrigok) + ## 3.1.0-rc.5 `2020-03-31 · 1 🐛 · 1 👩‍💻👨‍💻` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 77a6d9273776..d857506287d8 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.1.0-rc.5" + "version": "3.1.0-rc.6" } diff --git a/package.json b/package.json index 7f5d7e3f0ac7..adb4b214b20d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.1.0-rc.5", + "version": "3.1.0-rc.6", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From fd098226d41e10443a16f470a6b9826ca1705c92 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 31 Mar 2020 21:32:11 -0300 Subject: [PATCH 196/392] [NEW] Sort List, View Mode and Group by revamp (#17103) --- app/ui-sidenav/client/SortList.js | 131 +++++++++++++++++++++ app/ui-sidenav/client/index.js | 2 - app/ui-sidenav/client/sidebarHeader.js | 101 ++-------------- app/ui-sidenav/client/sortlist.html | 65 ---------- app/ui-sidenav/client/sortlist.js | 52 -------- client/routes.js | 2 +- packages/rocketchat-i18n/i18n/en.i18n.json | 2 + 7 files changed, 143 insertions(+), 212 deletions(-) create mode 100644 app/ui-sidenav/client/SortList.js delete mode 100644 app/ui-sidenav/client/sortlist.html delete mode 100644 app/ui-sidenav/client/sortlist.js diff --git a/app/ui-sidenav/client/SortList.js b/app/ui-sidenav/client/SortList.js new file mode 100644 index 000000000000..bb9e874e2361 --- /dev/null +++ b/app/ui-sidenav/client/SortList.js @@ -0,0 +1,131 @@ +import React, { useCallback } from 'react'; +import { Icon, ToggleSwitch, RadioButton, Box, Flex, Margins } from '@rocket.chat/fuselage'; + + +import { useTranslation } from '../../../client/contexts/TranslationContext'; +import { useUserPreference } from '../../../client/contexts/UserContext'; +import { useMethod } from '../../../client/contexts/ServerContext'; + +function SortListItem({ text, icon, input }) { + return + + + + + + + + + {text} + + + + {input} + + + + + ; +} +const style = { + textTransform: 'uppercase', +}; +export function SortList() { + return <> +
+ + + +
+ ; +} + +export function SortModeList() { + const t = useTranslation(); + const saveUserPreferences = useMethod('saveUserPreferences'); + const sidebarSortBy = useUserPreference('sidebarSortby', 'alphabetical'); + + const handleChange = (value) => () => saveUserPreferences({ sidebarSortby: value }); + + const setToAlphabetical = useCallback(handleChange('alphabetical'), []); + const setToActivity = useCallback(handleChange('activity'), []); + + return <> + + {t('Sort_By')} + +
    + + } /> + } /> + +
+ ; +} + + +function ViewModeList() { + const t = useTranslation(); + + const saveUserPreferences = useMethod('saveUserPreferences'); + + const handleChange = (value) => () => saveUserPreferences({ sidebarViewMode: value }); + + const sidebarViewMode = useUserPreference('sidebarViewMode', 'extended'); + const sidebarHideAvatar = useUserPreference('sidebarHideAvatar', false); + + const setToExtended = useCallback(handleChange('extended'), []); + const setToMedium = useCallback(handleChange('medium'), []); + const setToCondensed = useCallback(handleChange('condensed'), []); + + const handleChangeSidebarHideAvatar = useCallback(() => saveUserPreferences({ sidebarHideAvatar: !sidebarHideAvatar }), [sidebarHideAvatar]); + + return <> + + {t('View_mode')} + +
    + + } /> + } /> + } /> + } /> + +
+ ; +} + + +function GroupingList() { + const sidebarShowDiscussion = useUserPreference('sidebarShowDiscussion'); + const sidebarGroupByType = useUserPreference('sidebarGroupByType'); + const sidebarShowFavorites = useUserPreference('sidebarShowFavorites'); + const sidebarShowUnread = useUserPreference('sidebarShowUnread'); + + const saveUserPreferences = useMethod('saveUserPreferences'); + + const handleChange = (key, value) => () => saveUserPreferences({ [key]: value }); + + const handleChangeShowDicussion = useCallback(handleChange('sidebarShowDiscussion', !sidebarShowDiscussion), [sidebarShowDiscussion]); + const handleChangeGroupByType = useCallback(handleChange('sidebarGroupByType', !sidebarGroupByType), [sidebarGroupByType]); + const handleChangeShoFavorite = useCallback(handleChange('sidebarShowFavorites', !sidebarShowFavorites), [sidebarShowFavorites]); + const handleChangeShowUnread = useCallback(handleChange('sidebarShowUnread', !sidebarShowUnread), [sidebarShowUnread]); + + + const t = useTranslation(); + return <> + + {t('Grouping')} + +
    + + } /> + } /> + } /> + } /> + +
+ ; +} + +SortList.name = 'SortList'; diff --git a/app/ui-sidenav/client/index.js b/app/ui-sidenav/client/index.js index 216d156fe5e4..ce46c1f15fa7 100644 --- a/app/ui-sidenav/client/index.js +++ b/app/ui-sidenav/client/index.js @@ -4,14 +4,12 @@ import './sidebarItem.html'; import './sideNav.html'; import './toolbar.html'; import './roomList.html'; -import './sortlist.html'; import './userStatus.html'; import './chatRoomItem'; import { toolbarSearch } from './sidebarHeader'; import './sidebarItem'; import './sideNav'; import './roomList'; -import './sortlist'; import './toolbar'; import './userPresence'; diff --git a/app/ui-sidenav/client/sidebarHeader.js b/app/ui-sidenav/client/sidebarHeader.js index ef4139876f3f..100ae6793ce8 100644 --- a/app/ui-sidenav/client/sidebarHeader.js +++ b/app/ui-sidenav/client/sidebarHeader.js @@ -4,12 +4,14 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { popover, AccountBox, menu, SideNav, modal } from '../../ui-utils'; -import { t, getUserPreference, handleError } from '../../utils'; +import { t } from '../../utils'; import { callbacks } from '../../callbacks'; import { settings } from '../../settings'; import { hasAtLeastOnePermission } from '../../authorization'; import { userStatus } from '../../user-status'; import { hasPermission } from '../../authorization/client'; +import { createTemplateForComponent } from '../../../client/routes'; + const setStatus = (status, statusText) => { AccountBox.setStatus(status, statusText); @@ -17,29 +19,6 @@ const setStatus = (status, statusText) => { popover.close(); }; -const viewModeIcon = { - extended: 'th-list', - medium: 'list', - condensed: 'list-alt', -}; - -const extendedViewOption = (user) => { - if (settings.get('Store_Last_Message')) { - return { - icon: viewModeIcon.extended, - name: t('Extended'), - modifier: getUserPreference(user, 'sidebarViewMode') === 'extended' ? 'bold' : null, - action: () => { - Meteor.call('saveUserPreferences', { sidebarViewMode: 'extended' }, function(error) { - if (error) { - return handleError(error); - } - }); - }, - }; - } -}; - const showToolbar = new ReactiveVar(false); export const toolbarSearch = { @@ -57,7 +36,7 @@ export const toolbarSearch = { }, }; -const toolbarButtons = (user) => [{ +const toolbarButtons = (/* user */) => [{ name: t('Home'), icon: 'home', condition: () => settings.get('Layout_Show_Home_Button'), @@ -80,84 +59,22 @@ const toolbarButtons = (user) => [{ FlowRouter.go('directory'); }, }, -{ - name: t('View_mode'), - icon: () => viewModeIcon[getUserPreference(user, 'sidebarViewMode') || 'condensed'], - hasPopup: true, - action: (e) => { - const hideAvatarSetting = getUserPreference(user, 'sidebarHideAvatar'); - const config = { - columns: [ - { - groups: [ - { - items: [ - extendedViewOption(user), - { - icon: viewModeIcon.medium, - name: t('Medium'), - modifier: getUserPreference(user, 'sidebarViewMode') === 'medium' ? 'bold' : null, - action: () => { - Meteor.call('saveUserPreferences', { sidebarViewMode: 'medium' }, function(error) { - if (error) { - return handleError(error); - } - }); - }, - }, - { - icon: viewModeIcon.condensed, - name: t('Condensed'), - modifier: getUserPreference(user, 'sidebarViewMode') === 'condensed' ? 'bold' : null, - action: () => { - Meteor.call('saveUserPreferences', { sidebarViewMode: 'condensed' }, function(error) { - if (error) { - return handleError(error); - } - }); - }, - }, - ], - }, - { - items: [ - { - icon: 'user-rounded', - name: hideAvatarSetting ? t('Show_Avatars') : t('Hide_Avatars'), - action: () => { - Meteor.call('saveUserPreferences', { sidebarHideAvatar: !hideAvatarSetting }, function(error) { - if (error) { - return handleError(error); - } - }); - }, - }, - ], - }, - ], - }, - ], - currentTarget: e.currentTarget, - offsetVertical: e.currentTarget.clientHeight + 10, - }; - - popover.open(config); - }, -}, { name: t('Sort'), icon: 'sort', hasPopup: true, - action: (e) => { + action: async (e) => { const options = []; const config = { - template: 'sortlist', + template: 'SortList', currentTarget: e.currentTarget, data: { options, }, offsetVertical: e.currentTarget.clientHeight + 10, }; + const { SortList } = require('./SortList'); + await createTemplateForComponent(SortList); popover.open(config); }, }, @@ -312,7 +229,7 @@ Template.sidebarHeader.helpers({ } }); }, toolbarButtons() { - return toolbarButtons(Meteor.userId()).filter((button) => !button.condition || button.condition()); + return toolbarButtons().filter((button) => !button.condition || button.condition()); }, showToolbar() { return showToolbar.get(); diff --git a/app/ui-sidenav/client/sortlist.html b/app/ui-sidenav/client/sortlist.html deleted file mode 100644 index fa8efb05de23..000000000000 --- a/app/ui-sidenav/client/sortlist.html +++ /dev/null @@ -1,65 +0,0 @@ - diff --git a/app/ui-sidenav/client/sortlist.js b/app/ui-sidenav/client/sortlist.js deleted file mode 100644 index 23144008b15e..000000000000 --- a/app/ui-sidenav/client/sortlist.js +++ /dev/null @@ -1,52 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; - -import { popover } from '../../ui-utils'; -import { getUserPreference } from '../../utils'; -import { settings } from '../../settings'; - -const checked = function(prop, field) { - const userId = Meteor.userId(); - - if (prop === 'sidebarShowDiscussion') { - return getUserPreference(userId, 'sidebarShowDiscussion'); - } - if (prop === 'sidebarShowFavorites') { - return getUserPreference(userId, 'sidebarShowFavorites'); - } - if (prop === 'sidebarGroupByType') { - return getUserPreference(userId, 'sidebarGroupByType'); - } - if (prop === 'sidebarShowUnread') { - return getUserPreference(userId, 'sidebarShowUnread'); - } - if (prop === 'sidebarSortby') { - return (getUserPreference(userId, 'sidebarSortby') || 'alphabetical') === field; - } -}; - -Template.sortlist.helpers({ - favorite() { - return settings.get('Favorite_Rooms'); - }, - checked, - bold(...props) { - return checked(...props) ? 'rc-popover__item--bold' : ''; - }, -}); - -Template.sortlist.events({ - 'change input'({ currentTarget }) { - const name = currentTarget.getAttribute('name'); - let value = currentTarget.getAttribute('type') === 'checkbox' ? currentTarget.checked : currentTarget.value; - - // TODO change mergeChannels to GroupByType - if (name === 'mergeChannels') { - value = !value; - } - Meteor.call('saveUserPreferences', { - [name]: value, - }); - popover.close(); - }, -}); diff --git a/client/routes.js b/client/routes.js index ce613e76b182..d9da7ee66895 100644 --- a/client/routes.js +++ b/client/routes.js @@ -34,7 +34,7 @@ FlowRouter.goToRoomById = async (rid) => { BlazeLayout.setRoot('body'); -const createTemplateForComponent = async ( +export const createTemplateForComponent = async ( component, props = {}, // eslint-disable-next-line new-cap diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 6e1ec0c127c6..491f55fb055e 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1659,6 +1659,7 @@ "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", + "Grouping": "Grouping", "Hash": "Hash", "Header": "Header", "Header_and_Footer": "Header and Footer", @@ -3108,6 +3109,7 @@ "Social_Network": "Social Network", "Sorry_page_you_requested_does_not_exist_or_was_deleted": "Sorry, page you requested does not exist or was deleted!", "Sort": "Sort", + "Sort_By": "Sort by", "Sort_by_activity": "Sort by Activity", "Sound": "Sound", "Sound_File_mp3": "Sound File (mp3)", From f0fc738a45422b7ee10295a1c734b717b0d38567 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 31 Mar 2020 21:58:18 -0300 Subject: [PATCH 197/392] [NEW] Directory page refactored, new user's bio field (#17043) --- app/api/server/v1/misc.js | 1 + app/api/server/v1/users.js | 1 + .../server/methods/saveRoomSettings.js | 11 +- app/lib/server/functions/getFullUserData.js | 1 + app/lib/server/functions/saveUser.js | 26 +- app/lib/server/startup/settings.js | 2 +- app/models/server/models/Rooms.js | 29 ++ app/models/server/models/Users.js | 28 +- app/ui-account/client/accountProfile.html | 49 +-- app/ui-account/client/accountProfile.js | 37 ++- app/ui-admin/client/rooms/adminRooms.js | 16 + .../client/rooms/channelSettingsFeatured.html | 15 + .../client/rooms/channelSettingsFeatured.js | 65 ++++ app/ui-admin/client/rooms/views.js | 1 + app/ui-flextab/client/tabs/membersList.js | 17 +- app/ui-flextab/client/tabs/userEdit.html | 15 + app/ui-flextab/client/tabs/userEdit.js | 1 + app/ui-flextab/client/tabs/userInfo.html | 5 + app/ui-flextab/client/tabs/userInfo.js | 10 +- app/ui-sidenav/client/sidebarHeader.js | 2 +- app/ui/client/index.js | 1 - .../app/components/Directory/ChannelsTab.js | 89 ++++++ .../components/Directory/Directory.stories.js | 19 ++ .../components/Directory/DirectoryTable.js | 115 +++++++ .../views/app/components/Directory/UserTab.js | 97 ++++++ .../views/app/components/Directory/index.js | 51 ++++ app/ui/client/views/app/components/hooks.js | 84 ++++++ app/ui/client/views/app/directory.html | 173 ----------- app/ui/client/views/app/directory.js | 280 ------------------ .../server/functions/getDefaultUserFields.js | 1 + .../settings/inputs/StringSettingInput.js | 19 +- client/components/basic/Page.js | 4 +- client/main.js | 1 + client/routes.js | 22 +- client/startup/startup.js | 1 + .../components/EngagementDashboardPage.js | 8 +- .../client/components/Section.js | 2 +- package-lock.json | 69 +++-- package.json | 11 +- packages/rocketchat-i18n/i18n/en.i18n.json | 4 + server/methods/browseChannels.js | 16 +- server/methods/getUsersOfRoom.js | 14 +- server/methods/saveUserProfile.js | 9 + 43 files changed, 860 insertions(+), 562 deletions(-) create mode 100644 app/ui-admin/client/rooms/channelSettingsFeatured.html create mode 100644 app/ui-admin/client/rooms/channelSettingsFeatured.js create mode 100644 app/ui/client/views/app/components/Directory/ChannelsTab.js create mode 100644 app/ui/client/views/app/components/Directory/Directory.stories.js create mode 100644 app/ui/client/views/app/components/Directory/DirectoryTable.js create mode 100644 app/ui/client/views/app/components/Directory/UserTab.js create mode 100644 app/ui/client/views/app/components/Directory/index.js create mode 100644 app/ui/client/views/app/components/hooks.js delete mode 100644 app/ui/client/views/app/directory.html delete mode 100644 app/ui/client/views/app/directory.js diff --git a/app/api/server/v1/misc.js b/app/api/server/v1/misc.js index 033bc3b9b055..4caefb489221 100644 --- a/app/api/server/v1/misc.js +++ b/app/api/server/v1/misc.js @@ -179,6 +179,7 @@ API.v1.addRoute('directory', { authRequired: true }, { const { sort, query } = this.parseJsonQuery(); const { text, type, workspace = 'local' } = query; + if (sort && Object.keys(sort).length > 1) { return API.v1.failure('This method support only one "sort" parameter'); } diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index a3618a3caa2e..4b861eb11407 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -199,6 +199,7 @@ API.v1.addRoute('users.info', { authRequired: true }, { user.rooms = Subscriptions.findByUserId(user._id, { fields: { rid: 1, + bio: 1, name: 1, t: 1, roles: 1, diff --git a/app/channel-settings/server/methods/saveRoomSettings.js b/app/channel-settings/server/methods/saveRoomSettings.js index 91d7fbcecf41..adef8f1ed12c 100644 --- a/app/channel-settings/server/methods/saveRoomSettings.js +++ b/app/channel-settings/server/methods/saveRoomSettings.js @@ -17,7 +17,7 @@ import { saveRoomTokenpass } from '../functions/saveRoomTokens'; import { saveStreamingOptions } from '../functions/saveStreamingOptions'; import { RoomSettingsEnum, roomTypes } from '../../../utils'; -const fields = ['roomName', 'roomTopic', 'roomAnnouncement', 'roomCustomFields', 'roomDescription', 'roomType', 'readOnly', 'reactWhenReadOnly', 'systemMessages', 'default', 'joinCode', 'tokenpass', 'streamingOptions', 'retentionEnabled', 'retentionMaxAge', 'retentionExcludePinned', 'retentionFilesOnly', 'retentionOverrideGlobal', 'encrypted']; +const fields = ['featured', 'roomName', 'roomTopic', 'roomAnnouncement', 'roomCustomFields', 'roomDescription', 'roomType', 'readOnly', 'reactWhenReadOnly', 'systemMessages', 'default', 'joinCode', 'tokenpass', 'streamingOptions', 'retentionEnabled', 'retentionMaxAge', 'retentionExcludePinned', 'retentionFilesOnly', 'retentionOverrideGlobal', 'encrypted']; Meteor.methods({ saveRoomSettings(rid, settings, value) { const userId = Meteor.userId(); @@ -79,6 +79,12 @@ Meteor.methods({ action: 'Viewing_room_administration', }); } + if (settings === 'featured' && !hasPermission(userId, 'view-room-administration')) { + throw new Meteor.Error('error-action-not-allowed', 'Viewing room administration is not allowed', { + method: 'saveRoomSettings', + action: 'Viewing_room_administration', + }); + } if (setting === 'roomType' && value !== room.t && value === 'c' && !hasPermission(userId, 'create-c')) { throw new Meteor.Error('error-action-not-allowed', 'Changing a private group to a public channel is not allowed', { method: 'saveRoomSettings', @@ -194,6 +200,9 @@ Meteor.methods({ case 'default': Rooms.saveDefaultById(rid, value); break; + case 'featured': + Rooms.saveFeaturedById(rid, value); + break; case 'retentionEnabled': Rooms.saveRetentionEnabledById(rid, value); break; diff --git a/app/lib/server/functions/getFullUserData.js b/app/lib/server/functions/getFullUserData.js index b79cc953adb9..d3892bca9c51 100644 --- a/app/lib/server/functions/getFullUserData.js +++ b/app/lib/server/functions/getFullUserData.js @@ -22,6 +22,7 @@ const fullFields = { emails: 1, phone: 1, statusConnection: 1, + bio: 1, createdAt: 1, lastLogin: 1, services: 1, diff --git a/app/lib/server/functions/saveUser.js b/app/lib/server/functions/saveUser.js index 953a14e2b5c7..6f365454eb88 100644 --- a/app/lib/server/functions/saveUser.js +++ b/app/lib/server/functions/saveUser.js @@ -193,6 +193,23 @@ function validateUserEditing(userId, userData) { } } +const handleBio = (updateUser, bio) => { + if (bio) { + if (bio.trim()) { + if (typeof bio !== 'string' || bio.length > 260) { + throw new Meteor.Error('error-invalid-field', 'bio', { + method: 'saveUserProfile', + }); + } + updateUser.$set = updateUser.$set || {}; + updateUser.$set.bio = bio; + } else { + updateUser.$unset = updateUser.$unset || {}; + updateUser.$unset.bio = 1; + } + } +}; + export const saveUser = function(userId, userData) { validateUserData(userId, userData); let sendPassword = false; @@ -225,14 +242,11 @@ export const saveUser = function(userId, userData) { const updateUser = { $set: { roles: userData.roles || ['user'], + ...typeof userData.name !== 'undefined' && { name: userData.name }, settings: userData.settings || {}, }, }; - if (typeof userData.name !== 'undefined') { - updateUser.$set.name = userData.name; - } - if (typeof userData.requirePasswordChange !== 'undefined') { updateUser.$set.requirePasswordChange = userData.requirePasswordChange; } @@ -241,6 +255,8 @@ export const saveUser = function(userId, userData) { updateUser.$set['emails.0.verified'] = userData.verified; } + handleBio(updateUser, userData.bio); + Meteor.users.update({ _id }, updateUser); if (userData.sendWelcomeEmail) { @@ -294,6 +310,8 @@ export const saveUser = function(userId, userData) { $set: {}, }; + handleBio(updateUser, userData.bio); + if (userData.roles) { updateUser.$set.roles = userData.roles; } diff --git a/app/lib/server/startup/settings.js b/app/lib/server/startup/settings.js index ede7feccac60..597e9f3efaad 100644 --- a/app/lib/server/startup/settings.js +++ b/app/lib/server/startup/settings.js @@ -97,7 +97,7 @@ settings.addGroup('Accounts', function() { type: 'boolean', public: true, }); - this.add('Accounts_SearchFields', 'username, name', { + this.add('Accounts_SearchFields', '', { type: 'string', public: true, }); diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 2ed0cd76c83b..d7a244e68008 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -11,12 +11,14 @@ export class Rooms extends Base { this.tryEnsureIndex({ name: 1 }, { unique: true, sparse: true }); this.tryEnsureIndex({ default: 1 }); + this.tryEnsureIndex({ featured: 1 }); this.tryEnsureIndex({ t: 1 }); this.tryEnsureIndex({ 'u._id': 1 }); this.tryEnsureIndex({ 'tokenpass.tokens.token': 1 }); this.tryEnsureIndex({ ts: 1 }); // discussions this.tryEnsureIndex({ prid: 1 }, { sparse: true }); + this.tryEnsureIndex({ fname: 1 }, { sparse: true }); // Livechat - statistics this.tryEnsureIndex({ closedAt: 1 }, { sparse: true }); @@ -414,6 +416,20 @@ export class Rooms extends Base { return this._db.find(query, options); } + findByNameOrFNameAndType(name, type, options) { + const query = { + t: type, + $or: [{ + name, + }, { + fname: name, + }], + }; + + // do not use cache + return this._db.find(query, options); + } + findByNameAndTypeNotDefault(name, type, options) { const query = { t: type, @@ -873,6 +889,19 @@ export class Rooms extends Base { return this.update(query, update); } + saveFeaturedById(_id, featured) { + const query = { _id }; + const set = ['true', true].includes(featured); + + const update = { + [set ? '$set' : '$unset']: { + featured: true, + }, + }; + + return this.update(query, update); + } + saveDefaultById(_id, defaultValue) { const query = { _id }; diff --git a/app/models/server/models/Users.js b/app/models/server/models/Users.js index 6ace2d3a9c94..43c9c03530b2 100644 --- a/app/models/server/models/Users.js +++ b/app/models/server/models/Users.js @@ -30,6 +30,7 @@ export class Users extends Base { this.tryEnsureIndex({ roles: 1 }, { sparse: 1 }); this.tryEnsureIndex({ name: 1 }); + this.tryEnsureIndex({ name: 'text', username: 'text', bio: 'text' }, { default_language: 'none', language_override: 'documentLanguage' }); this.tryEnsureIndex({ createdAt: 1 }); this.tryEnsureIndex({ lastLogin: 1 }); this.tryEnsureIndex({ status: 1 }); @@ -688,16 +689,20 @@ export class Users extends Base { const searchFields = forcedSearchFields || settings.get('Accounts_SearchFields').trim().split(','); const orStmt = _.reduce(searchFields, function(acc, el) { - acc.push({ [el.trim()]: termRegex }); + el = el.trim(); + if (el && !['name', 'username', 'bio'].includes(el)) { + acc.push({ [el]: termRegex }); + } return acc; }, []); + const query = { $and: [ { active: true, - $or: orStmt, - }, - { + $or: [{ + $text: { $search: searchTerm }, + }, ...orStmt], username: { $exists: true, $nin: exceptions }, }, ...extraQuery, @@ -1117,6 +1122,21 @@ export class Users extends Base { return this.update(_id, update); } + setBio(_id, bio = '') { + const update = { + ...bio.trim() ? { + $set: { + bio, + }, + } : { + $unset: { + bio: 1, + }, + }, + }; + return this.update(_id, update); + } + clearSettings(_id) { const update = { $set: { diff --git a/app/ui-account/client/accountProfile.html b/app/ui-account/client/accountProfile.html index 03ee6b0da865..4f6196f3e2c9 100644 --- a/app/ui-account/client/accountProfile.html +++ b/app/ui-account/client/accountProfile.html @@ -70,26 +70,6 @@ {{/if}} -
- {{# with canChange=allowStatusMessageChange}} - -
- - {{# unless canChange}} -
{{_ 'StatusMessage_Change_Disabled'}}
- {{/unless}} -
- {{/with}} -
{{# with canChange=allowRealNameChange}}
@@ -129,6 +109,35 @@
{{/with}}
+
+ {{# with canChange=allowStatusMessageChange}} +
+ + {{# unless canChange}} +
{{_ 'StatusMessage_Change_Disabled'}}
+ {{/unless}} +
+ {{/with}} +
+
+
+ +
+
{{#with canChange=allowEmailChange}}
diff --git a/app/ui-account/client/accountProfile.js b/app/ui-account/client/accountProfile.js index 79ba12d4d098..035358f2bd7d 100644 --- a/app/ui-account/client/accountProfile.js +++ b/app/ui-account/client/accountProfile.js @@ -1,5 +1,6 @@ import { SHA256 } from 'meteor/sha'; import { ReactiveVar } from 'meteor/reactive-var'; +import { ReactiveDict } from 'meteor/reactive-dict'; import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; @@ -78,7 +79,7 @@ Template.accountProfile.helpers({ return !validateName(Template.instance().realname.get()); }, statusMessageInvalid() { - return !validateStatusMessage(Template.instance().statusText.get()); + return !validateStatusMessage(Template.instance().fields.get('statusText')); }, confirmationPasswordInvalid() { const { password, confirmationPassword } = Template.instance(); @@ -117,7 +118,8 @@ Template.accountProfile.helpers({ const instance = Template.instance(); instance.dep.depend(); const realname = instance.realname.get(); - const statusText = instance.statusText.get(); + const statusText = instance.fields.get('statusText'); + const bio = instance.fields.get('bio'); const username = instance.username.get(); const password = instance.password.get(); const confirmationPassword = instance.confirmationPassword.get(); @@ -135,7 +137,7 @@ Template.accountProfile.helpers({ return; } } - if (!avatar && user.name === realname && user.username === username && getUserEmailAddress(user) === email && statusText === user.statusText && !password) { + if (!avatar && user.bio === bio && user.name === realname && user.username === username && getUserEmailAddress(user) === email && statusText === user.statusText && !password) { return ret; } if (!validateEmail(email) || !validatePassword(password, confirmationPassword) || (!validateUsername(username) || usernameAvaliable !== true) || !validateName(realname) || !validateStatusMessage(statusText)) { @@ -151,9 +153,6 @@ Template.accountProfile.helpers({ username() { return Meteor.user().username; }, - statusText() { - return Meteor.user().statusText; - }, email() { const user = Meteor.user(); return getUserEmailAddress(user); @@ -187,11 +186,20 @@ Template.accountProfile.helpers({ customFields() { return Meteor.user().customFields; }, + get(field) { + return Template.instance().fields.get(field); + }, }); Template.accountProfile.onCreated(function() { - const self = this; const user = Meteor.user(); + + this.fields = new ReactiveDict({ + statusText: user.statusText, + bio: user.bio, + }); + + const self = this; self.dep = new Tracker.Dependency(); self.realname = new ReactiveVar(user.name); self.email = new ReactiveVar(getUserEmailAddress(user)); @@ -267,7 +275,7 @@ Template.accountProfile.onCreated(function() { } data.realname = s.trim(self.realname.get()); } - if (s.trim(self.statusText.get()) !== user.statusText) { + if (s.trim(self.fields.get('statusText')) !== user.statusText) { if (!settings.get('Accounts_AllowUserStatusMessageChange')) { toastr.remove(); toastr.error(t('StatusMessage_Change_Disabled')); @@ -275,7 +283,11 @@ Template.accountProfile.onCreated(function() { return cb && cb(); } - data.statusText = s.trim(self.statusText.get()); + data.statusText = s.trim(self.fields.get('statusText')); + } + + if (s.trim(self.fields.get('bio')) !== user.statusText) { + data.bio = s.trim(self.fields.get('bio')); } if (s.trim(self.username.get()) !== user.username) { if (!settings.get('Accounts_AllowUsernameChange')) { @@ -295,6 +307,7 @@ Template.accountProfile.onCreated(function() { } data.email = s.trim(self.email.get()); } + const customFields = {}; $('[data-customfield=true]').each(function() { customFields[this.name] = $(this).val() || ''; @@ -396,9 +409,6 @@ Template.accountProfile.events({ 'input [name=realname]'(e, instance) { instance.realname.set(e.target.value); }, - 'input [name=statusText]'(e, instance) { - instance.statusText.set(e.target.value); - }, 'input [name=password]'(e, instance) { instance.password.set(e.target.value); @@ -406,6 +416,9 @@ Template.accountProfile.events({ instance.confirmationPassword.set(''); } }, + 'input [name=bio], input [name=statusText]'(e, instance) { + instance.fields.set(e.target.name, e.target.value); + }, 'input [name=confirmation-password]'(e, instance) { instance.confirmationPassword.set(e.target.value); }, diff --git a/app/ui-admin/client/rooms/adminRooms.js b/app/ui-admin/client/rooms/adminRooms.js index 96a7c4c562fd..407048b92a5d 100644 --- a/app/ui-admin/client/rooms/adminRooms.js +++ b/app/ui-admin/client/rooms/adminRooms.js @@ -102,6 +102,7 @@ Template.adminRooms.onCreated(function() { template: 'adminRoomInfo', order: 7, }); + ChannelSettings.addOption({ group: ['admin-room'], id: 'make-default', @@ -117,6 +118,21 @@ Template.adminRooms.onCreated(function() { }, }); + ChannelSettings.addOption({ + group: ['admin-room'], + id: 'make-default', + template: 'channelSettingsFeatured', + data() { + return { + room: instance.tabBarData.get().room, + onSuccess: instance.tabBarData.get().onSuccess, + }; + }, + validation() { + return hasAllPermission('view-room-administration'); + }, + }); + this.onSuccessCallback = () => { instance.offset.set(0); return instance.loadRooms(instance.types.get(), instance.filter.get(), instance.offset.get()); diff --git a/app/ui-admin/client/rooms/channelSettingsFeatured.html b/app/ui-admin/client/rooms/channelSettingsFeatured.html new file mode 100644 index 000000000000..a6b003286736 --- /dev/null +++ b/app/ui-admin/client/rooms/channelSettingsFeatured.html @@ -0,0 +1,15 @@ + diff --git a/app/ui-admin/client/rooms/channelSettingsFeatured.js b/app/ui-admin/client/rooms/channelSettingsFeatured.js new file mode 100644 index 000000000000..a0ffb03881ee --- /dev/null +++ b/app/ui-admin/client/rooms/channelSettingsFeatured.js @@ -0,0 +1,65 @@ +import { Meteor } from 'meteor/meteor'; +import { ReactiveVar } from 'meteor/reactive-var'; +import { Template } from 'meteor/templating'; +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; +import toastr from 'toastr'; +import './channelSettingsFeatured.html'; + +import { t, handleError } from '../../../utils'; + +Template.channelSettingsFeatured.helpers({ + editing(field) { + return Template.instance().editing.get() === field; + }, + roomFeatured() { + const room = Template.instance().room.get(); + + if (room) { + return room.featured; + } + }, + featuredDescription() { + const room = Template.instance().room.get(); + if (room && room.featured) { + return t('True'); + } + return t('False'); + }, +}); + +Template.channelSettingsFeatured.events({ + 'click [data-edit]'(e, t) { + e.preventDefault(); + t.editing.set($(e.currentTarget).data('edit')); + setTimeout(() => { + t.$('input.editing').focus().select(); + }, 100); + }, + 'click .cancel'(e, t) { + e.preventDefault(); + t.editing.set(); + }, + 'click .save'(e, t) { + e.preventDefault(); + + Meteor.call('saveRoomSettings', Template.instance().room.get()._id, 'featured', $('input[name=featured]:checked').val(), (err/* , result*/) => { + if (err) { + return handleError(err); + } + toastr.success(TAPi18n.__('Room_changed_successfully')); + }); + t.onSuccess(); + t.editing.set(); + }, +}); + +Template.channelSettingsFeatured.onCreated(function() { + this.editing = new ReactiveVar(); + this.room = new ReactiveVar(); + this.onSuccess = Template.currentData().onSuccess; + + this.autorun(() => { + const { room } = Template.currentData(); + this.room.set(room); + }); +}); diff --git a/app/ui-admin/client/rooms/views.js b/app/ui-admin/client/rooms/views.js index cfd9eee52505..9bfc9dcf830d 100644 --- a/app/ui-admin/client/rooms/views.js +++ b/app/ui-admin/client/rooms/views.js @@ -3,4 +3,5 @@ import './adminRoomInfo.html'; import './adminRoomInfo'; import './channelSettingsDefault.html'; import './channelSettingsDefault'; +import './channelSettingsFeatured'; import './adminRooms'; diff --git a/app/ui-flextab/client/tabs/membersList.js b/app/ui-flextab/client/tabs/membersList.js index ac77958a13c6..bd1797578ab8 100644 --- a/app/ui-flextab/client/tabs/membersList.js +++ b/app/ui-flextab/client/tabs/membersList.js @@ -40,17 +40,6 @@ Template.membersList.helpers({ let totalOnline = 0; let users = roomUsers; - const filter = Template.instance().filter.get(); - let reg = null; - try { - reg = new RegExp(filter, 'i'); - } catch (e) { - console.log(e); - } - if (filter && reg) { - users = users.filter((user) => reg.test(user.username) || reg.test(user.name)); - } - users = users.map(function(user) { let utcOffset; if (onlineUsers[user.username] != null) { @@ -247,10 +236,10 @@ Template.membersList.events({ }, 'click .show-more-users'(e, instance) { - const { showAllUsers, usersLimit, users, total, loadingMore } = instance; + const { showAllUsers, usersLimit, users, total, loadingMore, filter } = instance; loadingMore.set(true); - Meteor.call('getUsersOfRoom', this.rid, showAllUsers.get(), { limit: usersLimit.get() + 100, skip: 0 }, (error, result) => { + Meteor.call('getUsersOfRoom', this.rid, showAllUsers.get(), { limit: usersLimit.get() + 100, skip: 0 }, filter.get(), (error, result) => { if (error) { console.error(error); loadingMore.set(false); @@ -283,7 +272,7 @@ Template.membersList.onCreated(function() { this.autorun(() => { if (this.data.rid == null) { return; } this.loading.set(true); - return Meteor.call('getUsersOfRoom', this.data.rid, this.showAllUsers.get(), { limit: 100, skip: 0 }, (error, users) => { + return Meteor.call('getUsersOfRoom', this.data.rid, this.showAllUsers.get(), { limit: 100, skip: 0 }, this.filter.get(), (error, users) => { if (error) { console.error(error); this.loading.set(false); diff --git a/app/ui-flextab/client/tabs/userEdit.html b/app/ui-flextab/client/tabs/userEdit.html index fb83c6096fae..f4e17c2aef7b 100644 --- a/app/ui-flextab/client/tabs/userEdit.html +++ b/app/ui-flextab/client/tabs/userEdit.html @@ -113,6 +113,21 @@
+
+
+ +
+
+ + {{#if hasPermission 'edit-other-user-password'}}
diff --git a/app/ui-flextab/client/tabs/userEdit.js b/app/ui-flextab/client/tabs/userEdit.js index df4d933c3598..6ccae14800f9 100644 --- a/app/ui-flextab/client/tabs/userEdit.js +++ b/app/ui-flextab/client/tabs/userEdit.js @@ -205,6 +205,7 @@ Template.userEdit.onCreated(function() { userData.name = s.trim(this.$('#name').val()); userData.username = s.trim(this.$('#username').val()); userData.statusText = s.trim(this.$('#status').val()); + userData.bio = s.trim(this.$('#bio').val()); userData.email = s.trim(this.$('#email').val()); userData.verified = this.$('#verified:checked').length > 0; userData.password = s.trim(this.$('#password').val()); diff --git a/app/ui-flextab/client/tabs/userInfo.html b/app/ui-flextab/client/tabs/userInfo.html index c57a711be264..69e6128cf614 100644 --- a/app/ui-flextab/client/tabs/userInfo.html +++ b/app/ui-flextab/client/tabs/userInfo.html @@ -51,6 +51,11 @@